program analiza_macierzy implicit none ! Program liczy sume oraz iloczyn elementow dowolnej macierzy ! a nastepnie oblicza jej slad real, allocatable, dimension(:,:) :: a real :: oblicz_sume, oblicz_iloczyn, oblicz_slad ! nazwy uzytych funkcji real :: slad, iloczyn, suma integer :: n write(*,*)'Podaj rozmiar macierzy kwadratowej' read(*,*) n allocate(a(n,n)) ! alokacja pamieci dla tablicy a call czytaj(a, n) ! wywolanie procedury wczytujacej macierz call wypisz(a, n) ! wywolanie procedury wypisujacej macierz suma = oblicz_sume(a, n)! wywolanie funkcji obliczajacej sume write(*,*) 'Suma elementow wynosi', suma iloczyn = oblicz_iloczyn(a, n) ! wywolanie funkcji obliczajacej iloczyn write(*,*) 'Iloczyn elementow wynosi', iloczyn slad = oblicz_slad(a,n)!wywolanie funkcji obliczajacej slad macierzy write(*,*) 'Slad macierzy wynosi', slad end ! koniec programu glownego ! teraz nastepuje blok podprogramow ! kolejnosc podprogramow jest dowolna ! procedura wczytujaca elementy tablicy z klawiatury subroutine czytaj(b, n) real, dimension(n, n) :: b integer :: i, j, n do i = 1, n do j = 1, n write(*,*)'Wpisz', i, j, 'element' read(*,*) b(i, j) end do end do end subroutine !procedura wypisujaca elementy tablicy na ekran subroutine wypisz(d, n) real, dimension(n, n) :: d integer :: i, j, n do i = 1, n write(*,*) (d(i, j), j = 1, n) end do end subroutine !funkcja obliczajaca sume wszystkich elementow tablicy real function oblicz_sume(g, n) integer::i, j, n real, dimension(n, n) :: g oblicz_sume = 0.0 do i = 1, n do j = 1, n oblicz_sume = oblicz_sume + g(i, j) end do end do end function ! funkcja obliczajaca iloczyn wszystkich elementow tablicy real function oblicz_iloczyn(h, k) integer :: i, j, k real :: h(k,k) oblicz_iloczyn = 1.0 do i = 1, k do j = 1, k oblicz_iloczyn = oblicz_iloczyn*h(i,j) end do end do end function ! funkcja obliczajaca slad macierzy ! slad macierzy jest zdefiniowany jako suma elementow ! macierzy znajdujacych sie na diagonali ! czyli takich ktorych obydwa wskazniki sa sobie rowne ! np. a11, a22, a33, .... real function oblicz_slad(macierz, rozmiar) integer :: rozmiar, i real :: macierz(rozmiar, rozmiar) oblicz_slad = 0.0 do i = 1, rozmiar oblicz_slad = oblicz_slad + macierz(i, i) end do end function