program kat_pomiedzy_wektorami implicit none !deklaracja zmiennych real, allocatable, dimension(:) :: a, b integer :: i, n real :: angle_deg, angle_rad, len_a, len_b, dot_prod real :: pi = 4.0*atan(1.0d0) !alokowanie pamieci write(*,*) 'Podaj wymiar wektorow' read(*,*) n allocate(a(n), b(n)) ! wczytywanie wspolrzednych wektora do i = 1, n write(*,*) 'Podaj', i ,'wspolrzedna pierwszego wektora' read(*,*) a(i) end do do i = 1, n write(*,*) 'Podaj', i ,'wspolrzedna drugiego wektora' read(*,*) b(i) end do ! obliczanie dlugosci wektorow len_a = 0.0 len_b = 0.0 do i = 1, n len_a = len_a + a(i) len_b = len_b + b(i) end do len_a = sqrt(len_a) len_b = sqrt(len_b) write(*,*) 'Dlugosci wektorow wynosza odpowiednio:', len_a, len_b ! obliczenie iloczynu skalarnego dot_prod = 0.0 do i = 1, n dot_prod = dot_prod + a(i)*b(i) end do write(*,*) 'Iloczyn skalarny wektorow wynosi:', dot_prod ! obliczenie kata angle_rad = acos(dot_prod/(len_a*len_b)) angle_deg = (angle_rad*360)/(2.0*pi) write(*,*)'Kat wynosi:', angle_rad, 'radianow, czyli', angle_deg, 'stopni' end