urbic.com logotip

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.