next up previous contents
Next: Smyčky Up: Fortran 77 a jeho hlavní Previous: Symbolická jména   Obsah

Podmíněné příkazy

Pro větvení algoritmu máme v F77 tři možnosti: dvě varianty příkazu IF (``logical IF'' a ``block- IF'') a tzv. podmíněný skok (``computed GO TO''). První, zkrácená verze IF, má syntaxi

\begin{eqnarray*}
&&\mbox{{\tt IF(} {\it podmínka} {\tt )} {\it příkaz}}
\end{eqnarray*}



zatímco bloková varianta je

\begin{eqnarray*}
&&\mbox{{\tt IF(} {\it podmínka\_1} {\tt ) THEN}} \\
&&\mbox{...
...\mbox{~~~~{\it poslední\_blok\_příkazů}} \\
&&\mbox{\tt END IF}
\end{eqnarray*}



Alternativou k blokovému IF je podmíněné GO TO. Obecný tvar je

\begin{eqnarray*}
&&\mbox{{\tt GO TO(} {\it návěstí\_1}{\tt , }{\it návěstí\_2}{\tt , ... ,}{\it návěstí\_N}{\tt ),} {\it celočíselný\_výraz}}
\end{eqnarray*}



Nejprve se vyhodnotí výraz vpravo a podle výsledku se řízení předá na řádek označený příslušným návěstím. Demonstrujme to na proceduře, která při zadání roku a měsíce vrátí v proměnné DNU počet kalendářních dnů:

      SUBROUTINE KALEND(ROK, MESIC, DNU)
        INTEGER ROK, MESIC, DNU
* preskoc na  led uno bre dub kve cen cec srp zar rij lis pro
        GO TO(310,280,310,300,310,300,310,310,300,310,300,310), MESIC
* pokud MESIC neni mezi 1 a 12, skonci
        STOP 'Nespravne zadany mesic'
* unor - osetri prestupny rok
280     IF(MOD(ROK,400) .EQ. 0 
       $  .OR. (MOD(ROK,100) .NE. 0 .AND. MOD(ROK,4) .EQ. 0)) THEN 
          DNU = 29
        ELSE
          DNU = 28
        END IF
        GO TO 1000
* kratke mesice (duben, cerven, zari, listopad)
300     DNU = 30
        GO TO 1000
* dlouhe mesice (leden, brezen, kveten, cervenec, srpen, rijen, pros.)
310     DNU = 31
* vrat hodnotu DNU
1000  END
všimněme si, že jsme zde příkaz GO TO použili dvakrát i pro nepodmíněný skok (na řádek s návěstím 1000), tedy tak, jak je to obvyklé na většině jazyků (např. Basic, Pascal a přes veškerý odpor i C++).



Pavel Vachal
2001-05-31