VARIABILI E COSTANTI LOGICHE LOGICAL :: var LOGICAL, PARAMETER :: cost=… valide cost=.TRUE. cost=.FALSE. non valide cost=TRUE cost=.FALSE In generale var = espressione logica
Operatori relazionali nuovo vecchio descrizione == .EQ. uguale /= .NE. diverso > .GT. maggiore >= .GE. maggiore o uguale < .LT. minore <= .LE. minore o uguale
Operatori relazionali N.B. non confondere l’operatore relazionale di uguaglianza == con l’operatore di assegnazione = operazione risultato 6 < 7 .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 risultato 6 == 6. .TRUE. operazioni relazionali tra dati numerici e dati di tipo carattere non sono ammessi operazione risultato 6 <= ‘S’ 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 ELSE istruzione 3 istruzione 4 …………… blocco 2 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 …………… blocco 1 ELSE IF (espressione logica 2) THEN istruzione 3 istruzione 4 …………… blocco 2 ELSE istruzione 5 istruzione 6 …………… blocco 3 END IF
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 …………… blocco 1 ELSE IF (espressione logica 2) THEN [nome] istruzione 3 istruzione 4 …………… blocco 2 ELSE [nome] istruzione 5 istruzione 6 …………… blocco 3 END IF [nome]
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 preceduta dal label si salta alla prima istruzione eseguibile dopo quella preceduta dal label
Istruzione SELECT CASE SELECT CASE (espressione CASE) CASE (valori 1) istruzione …………… blocco 1 CASE (valori 2) istruzione …………… blocco 2 ……………….. CASE DEFAULT istruzione …………… blocco default END SELECT
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