Fortran 3
Fortran 3
FLUSSO
ED
ENUNCIATI DI
TRASFERIMENTO
IL COMPORTAMENTO SEQUENZIALE
INPUT E OUTPUT
Le forme geometriche nei diagrammi di flusso
ROMBO O LOSANGA
Per decidere come procedere
NO SI
I>1000
A B+5
C 𝒅+𝒆
N N+1
GO TO n
Tale enunciato impone al calcolatore di andare alla riga identificata
dalla label n
I 1 Loop infinito!!!
Per renderlo
completo
occorrerebbe
PRINT I una istruzione che
arresti il calcolo
quando I assume
un valore
predeterminato
I I+1
L’enunciato di TRASFERIMENTO INCONDIZIONATO
I 1
PRINT I
I I+1
L’enunciato di TRASFERIMENTO INCONDIZIONATO
Progettiamo un codice che legge da tastiera l’identificativo di uno
studente (rappresentato da un numero intero) e i suoi tre voti in tre
materie distinte e ne fa la media
Per renderlo
completo
AVER (V1+V2+V3)/3 occorrerebbe
una istruzione
che gli dica di
fermarsi quando
PRINT ID, AVER il numero di
letture effettuate
supera il
numero di
studenti della
classe
L’enunciato di TRASFERIMENTO INCONDIZIONATO
AVER (V1+V2+V3)/3
I<J
(A+3)≤B
5I=2J
B>A2
(I+3) ≠J
(lnA+sin(B3))≥50
IF LOGICO
Il più utilizzato enunciato di IF è il cosidetto IF logico, la cui sintassi è
la seguente:
IF(espressione relazionale) ENUNCIATO A
Enunciato B
Enunciato C
IF LOGICO
IF(espressione relazionale) A=3.0
ENUNCIATO B
……
n ENUNCIATO C
NO SI
Espressione
relazionale
A=3.0
Enunciato B
IF LOGICO
SI NO
I≤100 STOP
IF LOGICO
I <- 1
PRINT I
I <- I+1
SI NO
I≤100 STOP
READ NUM IF LOGICO
Riconsideriamo
I <- 1 il programma
che legge
READ ID V1 V2 V3 l’identificativo
degli studenti e
i loro 3 voti e
AVER <- (V1+V2+V3)/3
ne fa la media.
Per evitare il
PRINT ID AVER problema del
loop infinito
progettiamo un
I <- I+1 codice che
legga da input il
SI
NO numero di
I≤NUM STOP studenti della
classe
READ NUM
I <- 1
READ ID V1 V2 V3
PRINT ID AVER
I <- I+1
SI
NO
I≤NUM STOP
IF ARITMETICO
L’IF aritmetico VERIFICA IL SEGNO DI UNA ESPRESSIONE ARITMETICA.
A seconda del segno di tale espressione (POSITIVO, ZERO o NEGATIVO) il
controllo è trasferito in punti diversi
La sintassi dell’IF aritmetico è
IF(espressione) L,M,N
positivo negativo
N ESPRESSIONE L
zero
M
IF ARITMETICO
IF(espressione) L,M,N
Gli enunciati posti nelle righe L,M,N devono essere eseguibili.
SONO EQUIVALENTI
IF(X-2.0)10,20,30
Equivale a
IF(X.LT.2.0)GO TO 10
IF(X.EQ.2.0)GO TO 20
GO TO 30
IF(X-2.0)10,10,20
Equivale a
IF(X.LE.2.0)GO TO 10
GO TO 20
READ A,B,C IF ARITMETICO
Esercizio equazioni
secondo grado
DELTA <- B^2-4AC
positivo NEGATIVO
DELTA PRINT : NO SOLUZIONI
REALI
ZERO
PRINT : DUE
SOLUZIONI REALI
PRINT : DUE COINCIDENTI
SOLUZIONI
REALI DISTINTE
STOP
IF ARITMETICO
GO TO CALCOLATO
La forma più generale dell’enunciato di GO TO calcolato è la
seguente:
GO TO (n1,n2,….,nk),J
dove:
NO SI
A≥B
NO NO
B≥C SI
A≥C SI
NO SI NO SI NO SI NO SI
C≥D B≥D C≥D A≥D
B D D A
D C D C
PROBLEMI DI ORDINAMENTO: ricerca del massimo
Vediamo ora di studiare la complessità dell’algoritmo
NO SI
A≥B
NO NO
B≥C SI
A≥C SI
SI
LAR≥D
NO
LAR<- D
PRINT LAR
ESERCIZI: costruzione delle flowcharts
Scrivere la flowchart del programma che calcola la somma dei
primi M (con M fornito da input) termini della serie
𝒂𝒏
𝒏
dove: an=1/n
Scrivere la flowchart del programma che calcola il prodotto:
2*(4/3)*(6/5)*(8/7)*……..*(150/149)
𝒂𝒏
𝒏
dove:
an=1/n
IDEN <= 1; INUM<=2; PROD<=1
2*(4/3)*(6/5)*(8/7)*...*(150/149)
INUM <- INUM+2
IDEN<- IDEN+2
NO
I DEN≤149
SI
PRINT PROD
Flowchart del programma che
calcola il prodotto:
2*(4/3)*(6/5)*(8/7)*...*(150/149)
READ M Scrivere la
flowchart
I1<=1 del
programma
I2<=1 che calcola
L’M-mo
ICONT<=3 termine
della
I3<=I1+I2 successione
di Fibonacci
(M>3)
I1<=I2
I2<=I3
ICONT<=ICONT+1
SI NO
ICONT ≤M PRINT I3
Programma
che
calcola
L’M-mo
termine
della
successio
ne di
Fibonacci
(M>3)