program analiza_macierzy implicit none ! Program wczytuje dwie macierze nastepnie oblicza ich slad, iloczyn, ! liczy transpozycje kazdej z nich oraz wyswietla wyniki real, allocatable, dimension(:,:) :: a, b real :: slad_a, slad_b, slad integer :: n write(*,*)'Podaj rozmiar macierzy' read(*,*) n allocate(a(n,n), b(n,n)) call wczytaj(a,n) write(*,*) 'Pierwsza macierz:' call wypisz(a,n) call wczytaj(b,n) write(*,*) 'Druga macierz:' call wypisz(b,n) call iloczyn(a,b,n) slad_a = slad(a,n) write(*,*)'slad pierwszej macierzy', slad_a slad_b = slad(b,n) write(*,*)'slad drugiej macierzy', slad_b write(*,*)'Transpozycja pierwszej macierzy:' call transpozycja(a, n) write(*,*)'Transpozycja drugiej macierzy:' call transpozycja(b, n) end subroutine iloczyn(macierz1, macierz2, rozmiar) real :: macierz1(rozmiar, rozmiar), macierz2(rozmiar, rozmiar) real:: macierz_il(rozmiar, rozmiar) integer :: rozmiar, i, j, k do i = 1, rozmiar do j = 1, rozmiar macierz_il(i,j) = 0.0 end do end do do i = 1, rozmiar do j = 1, rozmiar do k = 1, rozmiar macierz_il(i, j) = macierz_il(i, j) + macierz1(i, k)*macierz2(k,j) end do end do end do write(*,*)'Macierz iloczynu:' call wypisz(macierz_il, rozmiar) end real function slad(macierz, rozmiar) real :: macierz(rozmiar, rozmiar) integer :: rozmiar, i slad = 0.0 do i = 1, rozmiar slad = slad + macierz(i, i) end do end subroutine transpozycja(macierz, rozmiar) real :: macierz(rozmiar, rozmiar), macierz_trans(rozmiar, rozmiar) integer :: rozmiar, i, j do i = 1, rozmiar do j = 1, rozmiar macierz_trans(i, j) = macierz(j, i) end do end do call wypisz(macierz_trans, rozmiar) end subroutine wczytaj(macierz, rozmiar) real :: macierz(rozmiar,rozmiar) integer :: rozmiar, i , j do i = 1, rozmiar do j = 1, rozmiar write(*,*)'Wpisz', i, j, 'element macierzy' read(*,*) macierz(i, j) end do end do end subroutine wypisz(macierz, rozmiar) real :: macierz(rozmiar,rozmiar) integer :: rozmiar, i , j do i = 1, rozmiar write(*,*) (macierz(i, j), j =1, rozmiar) end do end