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