VARIABILI E COSTANTI LOGICHE LOGICAL :: var LOGICAL, PARAMETER :: cost=… valide cost=.TRUE....

Post on 02-May-2015

217 views 0 download

Transcript of VARIABILI E COSTANTI LOGICHE LOGICAL :: var LOGICAL, PARAMETER :: cost=… valide cost=.TRUE....

VARIABILI E COSTANTI LOGICHE

LOGICAL :: varLOGICAL, 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

……………

ENDIF

blocco 1

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

……………

ELSE

blocco 1

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 IFIF (espressione logica 1) THEN

istruzione 1istruzione 2……………

ELSE IF (espressione logica 2) THEN

blocco 1

istruzione 3istruzione 4……………

blocco 2

END IF

ELSE

istruzione 5istruzione 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 nomeIF (espressione logica 1) THEN

istruzione 1istruzione 2……………

ELSE IF (espressione logica 2) THEN

blocco 1

istruzione 3istruzione 4……………

blocco 2

END IF

ELSE

istruzione 5istruzione 6……………

blocco 3

[nome]

[nome]

[nome]

[nome]

Istruzione IF con nomeIF (espressione logica 1) THEN

…………...…………………………

IF (espressione logica 2) THEN

………………………………………

END IF

END IF ………………………………………

[nome1]

[nome2]

[nome2]

[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

CASE (valori 1)

istruzione ……………

CASE (valori 2)

blocco 1

istruzione ……………

blocco 2

END SELECT

CASE DEFAULT

istruzione ……………

blocco default

SELECT CASE (espressione CASE)

……………….. ………………..

Se l’espressione CASE ha un valore compreso in

valori 1 vengono eseguite le istruzione contenute nel

blocco 1

Istruzione SELECT CASE

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)

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’

END SELECT

CASE DEFAULT

SELECT CASE (valore)

CASE (11:20)

write (*,*) ‘ valore tra 11 e 20’

write (*,*) ‘ valore negativo, zero oppure & superiore a 20’

INTEGER :: valore