program analiza_wektorow implicit none ! Program wczytuje dwa dowolne wektory podane przez uzytkownika ! nastepnie liczy ich dlugosc, sume i iloczyn wspolrzednych ! kazdego z wektorow a nastepnie iloczyn skalarny oraz kat ! pomiedzy wektorami real, allocatable, dimension(:) :: v, w integer :: i, size real :: oblicz_dlugosc, oblicz_sume, oblicz_iloczyn real :: oblicz_iloczyn_skalarny real :: length_v, length_w, sum_v, sum_w, prod_v, prod_w, dot_prod real :: angle_rad, angle_deg real, parameter :: pi = 4.0*atan(1.0d0) write(*,*)'Jaki jest rozmiar wektorow?' read(*,*) size ! alokacja pamieci allocate(v(size), w(size)) ! wczytanie wspolrzednych wektorow write(*,*)'WEKTOR PIERWSZY' call wczytaj(v, size) write(*,*)'WEKTOR DRUGI' call wczytaj(w, size) ! wypisanie wektorow na ekran write(*,*)'Wspolrzedne pierwszego wektora:' call wypisz(v, size) write(*,*)'Wspolrzedne drugiego wektora:' call wypisz(w, size) ! obliczenie dlugosci length_v = oblicz_dlugosc(v, size) length_w = oblicz_dlugosc(w, size) ! wyswietlenie dlugosci write(*,*)'Dlugosc pierwszego wektora wynosi:', length_v write(*,*)'Dlugosc drugiego wektora wynosi:', length_w ! obliczenie wartosci sumy wspolrzednych kazdego wektora sum_v = oblicz_sume(v, size) sum_w = oblicz_sume(w, size) ! wyswietlenie wartosci sumy wspolrzednych write(*,*)'Suma wspolrzednych pierwszego wektora wynosi:', sum_v write(*,*)'Suma wspolrzednych drugiego wektora wynosi:', sum_w ! obliczenie wartosci iloczynu wspolrzednych kazdego wektora prod_v = oblicz_iloczyn(v, size) prod_w = oblicz_iloczyn(w, size) ! wyswietlenie wartosci sumy wspolrzednych write(*,*)'Iloczyn wspolrzednych pierwszego wektora wynosi:', prod_v write(*,*)'IlocZyn wspolrzednych drugiego wektora wynosi:', prod_w ! obliczenie iloczynu skalarnego dot_prod = oblicz_iloczyn_skalarny(v, w, size) ! wyswietlenie wartosci iloczynu skalarnego write(*,*)'Iloczyn skalarny wektorow wynosi:', dot_prod ! obliczenie wartosci kata pomiedzy wektorami angle_rad = acos(dot_prod/(length_v*length_w)) ! przeliczenie radianow na stopnie angle_deg = angle_rad*180.0/pi ! wyswietlenie wartosci kata write(*,*)'Kat pomiedzy wektorami wynosi:', angle_rad, 'radianow' write(*,*)'czyli', angle_deg, 'stopni' end ! DEKLARACJA PODPROGRAMOW subroutine wczytaj(vector, size) real :: vector(size) integer :: i, size do i = 1, size write(*,*) 'Podaj', i, 'wspolrzedna wektora' read(*,*) vector(i) end do end subroutine wczytaj subroutine wypisz(vector, size) real :: vector(size) integer :: i, size write(*,*) (vector(i), i = 1, size) end subroutine wypisz real function oblicz_dlugosc(vector, size) real :: vector(size) integer :: i, size oblicz_dlugosc = 0.0 do i = 1, size oblicz_dlugosc = oblicz_dlugosc + vector(i)**2 end do oblicz_dlugosc = sqrt(oblicz_dlugosc) end function oblicz_dlugosc real function oblicz_sume(vector, size) real :: vector(size) integer :: i, size oblicz_sume = 0.0 do i = 1, size oblicz_sume = oblicz_sume + vector(i) end do end function oblicz_sume real function oblicz_iloczyn(vector, size) real :: vector(size) integer :: i, size oblicz_iloczyn = 1.0 do i = 1, size oblicz_iloczyn = oblicz_iloczyn*vector(i) end do end function oblicz_iloczyn real function oblicz_iloczyn_skalarny(vector1, vector2, size) real :: vector1(size) real :: vector2(size) integer :: i, size oblicz_iloczyn_skalarny = 0.0 do i = 1, size oblicz_iloczyn_skalarny = oblicz_iloczyn_skalarny + vector1(i)*vector2(i) end do end function oblicz_iloczyn_skalarny