next up previous
Next: Struktura obszarów wspólnych Up: Przenoszenie macierzy pomiędzy segmentami Previous: Przenoszenie macierzy pomiędzy segmentami

Ćwiczenia

  1. Obejrzyj pliki źródłowe mnozmac.f oraz matmult.f. Pliki te stanowią razem program służący do mnożenia dwóch macierzy prostokątnych o kompatybilnych wymiarach, zgodnie z formułą:


    \begin{displaymath}
c_{ij} = \sum_{i=1}^n a_{ik}b_{kj}\ i=1,2,\ldots,m,\ j=1,2,\ldots,p
\end{displaymath}

    gdzie macierze A, B i C mają odpowiednio wymiary $\bf A_{m\times n}$, $\bf B_{n\times p}$ i $\bf C_{m\times p}$. Skompiluj program przy pomocy instrukcji:

    f77 -o mnozmac mnozmac.f matmult.f
    

    i uruchom go dla następujących dwóch macierzy:


    \begin{displaymath}
{\bf A}=\left(\begin{array}{rrr}
1 & -1 & 1\\
1 & 1 & 1\\...
...gin{array}{rr}
1 & -1\\
2 & 1\\
1 & -1
\end{array}\right)
\end{displaymath}

    Dane przygotuj w pliku macierz.dat, zgodnie z kolejnością wczytywania zaspecyfikowaną w programie. Sprawdź, czy program działa poprawnie.

  2. Zmień deklaracje parametrów formalnych A, B i C w segmencie matmult na

          dimension A(m,n),B(n,nn),C(m,nn)
    

    Skompiluj i uruchom program. Czy działa on teraz poprawnie? Przywróć poprzednie deklaracje parametrów formalnych.

    Wskazówka: Dla prześledzenia co się stało wydrukuj macierze A i B zaraz po wejściu do podprogramu matmult.

  3. Zmodyfikuj segment główny zapisując części kodu drukujące macierze A, B i C jako jednen podprogram, który drukuje macierz będącą parametrem formalnym. Skompiluj i uruchom program.

  4. Zmodyfikuj program tak, aby macierze A, B i C były przekazywane między programem głównym a segmentem matmult przez obszar wspólny COMMON, zaś faktyczne rozmiary macierzy przez parametry. Zwróć uwagę, że parametry lm i ln określające maksymalne wymiary wierszowe macierzy stają się obecnie zbędne. Spróbuj użyć przekazwywania przez obszar wspólny do przekazania macierzy A, B i C do napisanego w poprzednim punkcie podprogramu drukującego te macierze (zamiast przekazywania ich w ``głowie'' jako parametry).


next up previous
Next: Struktura obszarów wspólnych Up: Przenoszenie macierzy pomiędzy segmentami Previous: Przenoszenie macierzy pomiędzy segmentami
Adam Liwo 2002-04-03