Podmínky
Podmínky jsou jednou ze základních řídících struktur a neodlučitelná součást strukturovaného programování. Jako podmínku označujeme příkaz který nám “rozvětví” program na “větve” příkazů, které se vykonají pouze pokud bude splněna (nebo nebude) nějaká podmínka (či podmínky). Přičemž to co označujeme podmínkou je logický výraz (např. x <= y
).
příkaz if
V nejjednodušším případě tvoří podmínku pouze příkaz if
. Vše co je umístěno mezi then
a end if
se vykoná pouze pokud je podmínka splněna.
Příkazy then
a end if
lze vynezachat pokud za if
následuje pouze jeden příkaz.
if( ...podmínka... ) then
...kód zde se vykoná pouze pokud je podmínka splněna...
end if
program priklad_13
implicit none
real :: a
write(*,*) "Zadej a:"
read(*,*) a
if(a <= 0.0) then !pokud je a<= 0.0 provede se kód uvnitř
write(*,*) "a musí být > 0.0!"
stop ! zastaví beh programu
endif
write(*,*) "ln(a) = ",log(a)
end program
program priklad_14
implicit none
real :: a
write(*,*) "Zadej a:"
read(*,*) a
if(a <= 0.0) then !pokud je a<= 0.0 provede se kód uvnitř
write(*,*) "a musí být > 0.0!"
stop ! zastaví beh programu
endif
write(*,*) "ln(a) = ",log(a)
end program
příkaz else
Příkaz if
můžeme obohatit o příkaz else
. Potom vše co je mezi then
a else
se vykoná pokud je podmínka splněna a vše mezi else
a end if
pokud podmínka splněna není.
if( ...podmínka... ) then
...kód zde se vykoná pouze pokud podmínka JE SPLNĚNA...
else
...kód zde se vykoná pouze pokud podmínka NENÍ SPLNĚNA...
end if
program priklad_15
implicit none
real :: a
complex :: b
write(*,*) "Zadej a:"
read(*,*) a
if(a <= 0.0) then !pokud je a<= 0.0 provede se kód uvnitř
if(a == 0.0) stop "a nesmí být rovno 0.0" !pokud je a=0.0 zastavime beh programu a vypise hlaseni
b = cmplx(a , 0.0) ! vytvoříme complexni cislo b s realnou casti rovnou a a imaginarni rovnou nule
write(*,*) "ln(a) = ",log(b)
else
write(*,*) "ln(a) = ",log(a)
endif
end program
Za else můžeme napsat další if () then
. Takto můžeme kód rozdělit na více částí.
if( ...podmínka1... ) then
...kód zde se vykoná pouze pokud podmínka1 JE SPLNĚNA...
else if( ...podmínka2... ) then
...kód zde se vykoná pouze pokud podmínka1 NENÍ SPLNĚNA a podmínka2 JE SPLNĚNA...
...
else
...kód zde se vykoná pouze pokud podmínka NENÍ SPLNĚNA ani jedna z podmínek...
end if
program priklad_16
implicit none
real :: a
complex :: b
write(*,*) "Zadej a:"
read(*,*) a
if(a == 0.0) then !pokud je a<= 0.0 provede se kód uvnitř
write(*,*) "a nesmí být rovno 0.0" !pokud je a=0.0 zastavime beh programu a vypise hlaseni
else if(a < 0.0) then
b = cmplx(a , 0.0) ! vytvoříme complexni cislo b s realnou casti rovnou a a imaginarni rovnou nule
write(*,*) "ln(a) = ",log(b)
else
write(*,*) "ln(a) = ",log(a)
endif
end program
příkaz select case
Speciálním případem konstrukce if - else if - else if - ...
je select case()
. Tento příkaz příjímá jako argument výraz, tj. proměnnou nebo funkci, které jsou buď integer
nebo character
(popř. i logical
, ale v takovém případě to nemá význam). Příkaz select case()
lze přepsat do konstrukce zahrnující if
, else if() then
, ale oproti ní by měl být select case()
rychlejší a také přehlednější.
select case( ...výraz... )
case (hodnota1)
... kód zde se provede pokud výraz == hodnota1 ...
case (hodnota2)
... kód zde se provede pokud výraz == hodnota2 ...
...
case default
... kód zde se provede pokud se výraz nerovná žádné hodnotě ...
end select
program priklad_17
implicit none
integer :: s
real :: a,b
write(*,*) "Zadej a:"
read(*,*) a
write(*,*) "Zadej b:"
read(*,*) b
write(*,*) "Zvolte 1 pro a+b, 2 pro a-b, 3 pro a*b, 4 pro a/b"
read(*,*) s
select case(s)
case(1) ! Pokud s=1 tak sčítáme
write(*,*) "a+b = ",a+b
case(2) ! Pokud s=2 tak odcitame
write(*,*) "a+b = ",a-b
case(3) ! Pokud s=3 tak násobíme
write(*,*) "a+b = ",a*b
case(4) ! Pokud s=4 tak delime
if(b == 0.0) stop "nulou nelze delit"
write(*,*) "a+b = ",a/b
case default
write(*,*) "neplatna volba"
end select
end program