Naloga:
Napišite program, ki reši kvadratno enačbo v kompleksnih številih. Program naj vas na začetku prosi, da vnesite kompleksne koeficiente kvadratne enačbe in vam nato izpiše rešitvi v obliki a+b*i. Predpostavite, da kvadratna enačba vodilnega koeficienta nima 0.
program test implicit none complex :: x1,x2,a,b,c,d real :: x,y write (*,*) 'vnesi kompleksne parametre kvadratne enacbe' write (*,'(a20)',advance="no")'realni del a=' ! advance="no" pomeni da ne gre v novo vrstico read (*,*) x write (*,'(a20)',advance="no")'imaginarni del a=' read (*,*) y a=cmplx(x,y) write (*,'(a20)',advance="no")'realni del b=' read (*,*) x write (*,'(a20)',advance="no")'imaginarni del b=' read (*,*) y b=cmplx(x,y) write (*,'(a20)',advance="no")'realni del c=' read (*,*) x write (*,'(a20)',advance="no")'imaginarni del c=' read (*,*) y c=cmplx(x,y) d=b**2-4e0*a*c x1=-b/2e0/a+csqrt(d)/2e0/a x2=-b/2e0/a-csqrt(d)/2e0/a if (imag(x1).eq.0) then !ce je imaginarni del enak 0, izpisemo samo realni del write(*,'(a3,f10.5)')'x1=',real(x1) elseif(imag(x1).gt.0) then !de je imaginarni del pozitiven imamo predznak + write (*,'(a3,f10.5,a2,f10.5,a1)')'x1=',real(x1),'+',imag(x1),'i' else !predznak - pri zapisu write (*,'(a3,f10.5,a2,f10.5,a1)')'x1=',real(x1),'-',-imag(x1),'i' endif if (imag(x2).eq.0) then write(*,'(a3,f10.5)')'x2=',real(x2) elseif(imag(x2).gt.0) then write (*,'(a3,f10.5,a2,f10.5,a1)')'x2=',real(x2),'+',imag(x2),'i' else write (*,'(a3,f10.5,a2,f10.5,a1)')'x2=',real(x2),'-',-imag(x2),'i' endif end program test
Ukaz cmplx(a,b) naredi kompleksno število oblike a+bi. real(z) nam vrne realni del in imag(z) imaginarni.
Tekst sedaj shranimo kot datoteko kvadrat_c.f90 in prevedemo.
Tu je sedaj še print screen postopka prevajanja z nekaj rezultati. V kolikor vam kakšna podrobnost ni jasna, mi sporočite.
Nazaj na osnovno stran za predmet Uporaba numeričnih metod v kemiji.