eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingPorównanie szybkości mnożenia macierzy w CPP i PASCAL › Re: Porównanie szybkości mnożenia macierzy w CPP i PASCAL
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.onet.pl!.POSTED!not-for-mail
    From: Fil <f...@p...onet.pl>
    Newsgroups: pl.comp.programming
    Subject: Re: Porównanie szybkości mnożenia macierzy w CPP i PASCAL
    Date: Wed, 02 Feb 2011 19:14:28 +0100
    Organization: http://onet.pl
    Lines: 137
    Message-ID: <iic6vp$ll2$1@news.onet.pl>
    References: <iic1t4$umq$1@news.onet.pl> <iic3cj$4sn$1@news.onet.pl>
    <iic3k6$5n8$1@news.onet.pl>
    NNTP-Posting-Host: 095160075158.kielce.vectranet.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: quoted-printable
    X-Trace: news.onet.pl 1296670521 22178 95.160.75.158 (2 Feb 2011 18:15:21 GMT)
    X-Complaints-To: n...@o...pl
    NNTP-Posting-Date: Wed, 2 Feb 2011 18:15:21 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.13) Gecko/20101207
    Thunderbird/3.1.7
    In-Reply-To: <iic3k6$5n8$1@news.onet.pl>
    Xref: news-archive.icm.edu.pl pl.comp.programming:188552
    [ ukryj nagłówki ]

    > Pokaz caly program, wraz z wywolywaniem tej procedury.
    Wedle życzenia:
    Wariant 1:

    program test;

    {$APPTYPE CONSOLE}

    uses
    SysUtils,
    Windows;

    type
    TMatrix = array of array of double;

    procedure NewMatrix(N, M:integer; var T:TMatrix);
    begin
    SetLength(T, N, M);
    end;

    procedure RndMatrix(N, M:integer; var T:TMatrix);
    var
    i, j:integer;
    begin
    for i := 0 to N-1 do
    for j := 0 to M-1 do T[i, j] := random(N * M);
    end;

    procedure MulMatrix(N, Q, M:integer; T1, T2:TMatrix; var T3:TMatrix);
    var
    i, j, k:integer;
    begin
    for i := 0 to N-1 do
    for j := 0 to M-1 do begin
    T3[i, j] := 0;
    for k := 0 to Q-1 do T3[i, j] := T3[i, j] + T1[i, k] * T2[k, j];
    end;
    end;

    const
    N = 2000;
    M = 300;

    var
    A, B, C:TMatrix;
    T1, T2, F:int64;

    begin
    randomize;
    NewMatrix(N, M, A);
    NewMatrix(M, N, B);
    NewMatrix(N, N, C);

    RndMatrix(N, M, A);
    RndMatrix(M, N, B);

    QueryPerformanceFrequency(F);
    QueryPerformanceCounter(T1);
    MulMatrix(N, M, N, A, B, C);
    QueryPerformanceCounter(T2);

    Writeln('Time = ' + FloatToStr((T2 - T1) / F));
    end.


    i wariant 2:

    program test;

    {$APPTYPE CONSOLE}

    uses
    SysUtils,
    Windows;

    type
    TA=array[0..1999,0..299] of double;
    TB=array[0..299,0..1999] of double;
    TC=array[0..1999,0..1999] of double;

    procedure RndMatrix2A(N, M:integer; var T:TA);
    var
    i, j:integer;
    begin
    for i := 0 to N-1 do
    for j := 0 to M-1 do T[i, j] := random(N * M);
    end;

    procedure RndMatrix2B(N, M:integer; var T:TB);
    var
    i, j:integer;
    begin
    for i := 0 to N-1 do
    for j := 0 to M-1 do T[i, j] := random(N * M);
    end;

    procedure MulMatrix2(N, Q, M:integer; var T1:TA; var T2:TB; var T3:TC);
    var
    i, j, k:integer;
    begin
    for i := 0 to N-1 do
    for j := 0 to M-1 do begin
    T3[i, j] := 0;
    for k := 0 to Q-1 do T3[i, j] := T3[i, j] + T1[i, k] * T2[k, j];
    end;
    end;

    const
    N = 2000;
    M = 300;

    var
    A:TA;
    B:TB;
    C:TC;
    T1, T2, F:int64;

    begin
    randomize;
    RndMatrix2A(N, M, A);
    RndMatrix2B(M, N, B);

    QueryPerformanceFrequency(F);
    QueryPerformanceCounter(T1);
    MulMatrix2(N, M, N, A, B, C);
    QueryPerformanceCounter(T2);

    Writeln('Time = ' + FloatToStr((T2 - T1) / F));
    end.

    Pozdrawiam,
    Fil.



Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: