VARIABILI E COSTANTI LOGICHE
LOGICAL :: var
LOGICAL, PARAMETER :: cost=…
valide
non valide
cost=.TRUE.
cost=TRUE
cost=.FALSE.
cost=.FALSE
In generale
var = espressione logica
Operatori relazionali
nuovo
vecchio
descrizione
==
.EQ.
uguale
/=
.NE.
diverso
>
.GT.
maggiore
>=
.GE.
<
.LT.
<=
.LE.
maggiore o uguale
minore
minore o uguale
Operatori relazionali
N.B. non confondere
l’operatore relazionale di uguaglianza ==
con l’operatore di assegnazione =
operazione
6<7
risultato
.TRUE.
6>7
.FALSE.
6 == 7
.TRUE.
‘A’ < ‘B’
.TRUE.
i caratteri vengono valutati in ordine alfabetico
Operatori relazionali
gli operatori relazionali sono valutati dopo tutti gli
operatori matematici
le seguenti espressioni sono equivalenti
7+3 < 10+15
(7+3) < (10+15)
Operatori relazionali
se l’operazione relazionale riguarda numeri interi
e reali gli interi vengono trasformati in numeri reali
operazione
6 == 6.
risultato
.TRUE.
operazioni relazionali tra dati numerici e dati di
tipo carattere non sono ammessi
operazione
6 <= ‘S’
risultato
errore
Operatori logici
operazione
descrizione
v1.AND.v2
TRUE se v1 e v2 sono TRUE
v1.OR.v2
TRUE se v1 o v2 è TRUE
v1.EQV.v2
TRUE se v1 e v2 sono concordi
v1.NEQV.v2
TRUE se v1 e v2 sono discordi
.NOT.v1
TRUE se v1 è FALSE
FALSE se v1 è TRUE
Gerarchia delle operazioni
1) gli operatori aritmetici (con la loro gerarchia)
2) gli operatori relazionali da sinistra verso destra
3) gli operatori .NOT. da sinistra verso destra
4) gli operatori .AND. da sinistra verso destra
5) gli operatori .OR. da sinistra verso destra
6) gli operatori .EQV. e .NEQV. da sinistra verso destra
Gerarchia delle operazioni
Esempi:
v1=.TRUE.
v2=.TRUE.
v3=.FALSE.
operazione
risultato
v1.AND.v2.OR.v3
.TRUE.
v1.AND.(v2.OR.v3)
.FALSE.
Istruzioni di diramazione
permettono di selezionare ed eseguire delle
particolari parti del codice saltandone altre
due tipi:
istruzioni IF
istruzioni SELECT
Istruzione IF
IF (espressione logica) THEN
istruzione 1
istruzione 2
……………
blocco 1
ENDIF
Se l’espressione logica è .TRUE. vengono
eseguite le istruzione contenute nel blocco 1
Se l’espressione logica è .FALSE. si salta alla
prima istruzione eseguibile dopo ENDIF
Istruzione IF (esempio)
READ(*,*) a
y=1.D0
IF (a.GE.0.D0) THEN
y=DSQRT(a)
ENDIF
WRITE(*,*) ‘ valore di y = ‘,y
se a<0 si ha y=1
altrimenti è uguale alla radice quadrata di a
Istruzione IF
IF (espressione logica) THEN
istruzione 1
istruzione 2
……………
blocco 1
istruzione 3
istruzione 4
……………
blocco 2
ELSE
END IF
Istruzione IF
Se l’espressione logica è .TRUE. vengono
eseguite le istruzione contenute nel blocco 1
e si salta alla prima istruzione eseguibile dopo
ENDIF
Se l’espressione logica è .FALSE. vengono
eseguite le istruzione contenute nel blocco 2
e si va alla prima istruzione eseguibile dopo
ENDIF
Istruzione IF (esempio)
READ(*,*) a
y=1.D0
IF (a.GE.0.D0) THEN
y=DSQRT(a)
ELSE
y=0.D0
ENDIF
WRITE(*,*) ‘ valore di y = ‘,y
se a<0 si ha y=0
altrimenti è uguale alla radice quadrata di a
Istruzione IF
IF (espressione logica 1) THEN
istruzione 1
blocco 1
istruzione 2
……………
ELSE IF (espressione logica 2) THEN
ELSE
END IF
istruzione 3
istruzione 4
……………
blocco 2
istruzione 5
istruzione 6
……………
blocco 3
Istruzione IF
Se l’espressione logica1 è .TRUE. vengono eseguite
le istruzione contenute nel blocco 1 e si salta alla
prima istruzione eseguibile dopo ENDIF
Se l’espressione logica2 è .TRUE. vengono eseguite
le istruzione contenute nel blocco 2 e si salta alla
prima istruzione eseguibile dopo ENDIF
Se le espressioni sono entrambe .FALSE. vengono
eseguite le istruzione contenute nel blocco 3 e si va
alla prima istruzione eseguibile dopo ENDIF
Istruzione IF (esempio)
READ(*,*) a
IF (a.GE.1.D0) THEN
y=1.D0DSQRT(a)
ELSE IF (a.GE.0.D0) THEN
y=DSQRT(a)
ELSE
y=0.D0
END IF
se a<0 si ha y=0
se 0=<a<1 y è uguale alla radice quadrata di a
Se a>=1 si ha y=1
Istruzione IF con nome
[nome] IF (espressione logica 1) THEN
istruzione 1
blocco 1
istruzione 2
……………
ELSE IF (espressione logica 2) THEN [nome]
istruzione 3
istruzione 4
……………
ELSE [nome]
istruzione 5
istruzione 6
……………
END IF [nome]
blocco 2
blocco 3
Istruzione IF con nome
[nome1] IF (espressione logica 1) THEN
…………...
……………
……………
[nome2] IF (espressione logica 2) THEN
……………
……………
……………
END IF [nome2]
……………
……………
……………
END IF [nome1]
Istruzione IF logico
IF (espressione logica) istruzione
Se l’espressione logica è .TRUE. viene
eseguita la singola istruzione
IF (a>0.d0) y=DSQRT(a)
Istruzione GO TO
GO TO label
si salta alla prima istruzione eseguibile dopo quella
preceduta dal label
Istruzione SELECT CASE
SELECT CASE (espressione CASE)
CASE (valori 1)
istruzione
……………
CASE (valori 2)
blocco 1
istruzione
……………
………………..
………………..
blocco 2
CASE DEFAULT
istruzione
……………
END SELECT
blocco default
Istruzione SELECT CASE
Se l’espressione CASE ha un valore compreso in
valori 1 vengono eseguite le istruzione contenute nel
blocco 1
Se l’espressione CASE ha un valore compreso in
valori 2 vengono eseguite le istruzione contenute nel
blocco 2
Se l’espressione CASE ha un valore che non è
compreso in nessuno valori descritti dai vari CASE,
vengono eseguite le istruzione contenute nel blocco
default
Istruzione SELECT CASE
Il CASE DEFAULT è facoltativo.
Se non è presente e l’espressione CASE ha un
valore che non è compreso in nessuno valori descritti
dai vari CASE non viene eseguita nessuna istruzione.
Istruzione SELECT CASE (esempio)
INTEGER :: valore
SELECT CASE (valore)
CASE (1,3,5,7,9,)
write(*,*) ‘ valore dispari minore di 10’
CASE (2,4,6,8,10)
write (*,*) ‘ valore pari minore uguale a 10’
CASE (11:20)
write (*,*) ‘ valore tra 11 e 20’
CASE DEFAULT
write (*,*) ‘ valore negativo, zero oppure &
superiore a 20’
END SELECT