Programmazione Procedurale in
Linguaggio C++
Strutture di Controllo
Parte 5
Il FORTRAN
versione 2.0
Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons
(vedi ultima pagina)
G. Mecca – Università della Basilicata – [email protected]
Strutture di Controllo: Conclusioni >> Sommario
Sommario
 Un
altro esempio: Il linguaggio FORTRAN
Dichiarazione Implicita
Istruzioni Condizionali
Istruzioni Iterative
G. Mecca - Programmazione Procedurale in Linguaggio C++
2
Strutture di Controllo: Conclusioni >> FORTRAN
Un Altro Esempio: FORTRAN
 Strutture
di controllo in FORTRAN 77
istruzioni condizionali (IF-THEN-ELSE, IFTHEN)
ciclo DO (ciclo di tipo for)
 Il
FORTRAN 77 non prevede il while
introdotto in FORTRAN 90
ma i compilatori più recenti lo prevedono
comunque come estensione al linguaggio
G. Mecca - Programmazione Procedurale in Linguaggio C++
3
Strutture di Controllo: Conclusioni >> FORTRAN
Un Esempio: Media con For
program mediaf
implicit none
real voto, sommaVoti, media
integer numeroEsami, i
write (*,*) 'Quanti esami hai sostenuto ?'
read (*,*) numeroEsami
sommaVoti = 0.0
do i=1, numeroEsami
write (*,*) 'Immetti il voto di un esame'
read (*,*) voto
sommaVoti = sommaVoti+voto
end do
if (numeroEsami.gt.0) then
media = sommaVoti/numeroEsami
write (*,*) 'La media vale: ', media
else
write (*,*) 'Non hai fornito alcun voto'
end if
stop
end
G. Mecca - Programmazione Procedurale in Linguaggio C++
4
Un Esempio: Media con While
Strutture di Controllo: Conclusioni >> FORTRAN
program mediaw
implicit none
real voto, sommaVoti, media
integer numeroEsami
logical continua
continua = .true.
numeroEsami = 0
sommaVoti = 0.0
do while (continua.eqv..true.)
write (*,*) 'Immetti il voto di un esame (0 per fermarti)'
read (*,*) voto
if (voto.eq.0) then
continua = .false.
else
numeroEsami = numeroEsami+1
sommaVoti = sommaVoti+voto
end if
end do
if (numeroEsami.gt.0) then
media = sommaVoti/numeroEsami
write (*,*) 'La media vale: ', media
else
write (*,*) 'Non hai fornito alcun voto'
end if
stop
end
>>
G. Mecca - Programmazione Procedurale in Linguaggio C++
5
Strutture di Controllo: Conclusioni >> FORTRAN
Dichiarazione Implicita
 Una
particolarità del prog. FORTRAN
istruzione implicit none
impedisce la dichiarazione implicita del
FORTRAN
 Dichiarazione
implicita
le variabili possono essere usate senza
essere dichiarate
nomi che cominciano con i,j,k,l,m,n: integer
gli altri nomi: real
G. Mecca - Programmazione Procedurale in Linguaggio C++
6
Strutture di Controllo: Conclusioni >> FORTRAN
Dichiarazione Implicita
 E’
un meccanismo da non usare
introdotto per ragioni di economia di scrittura
porta a numerosi errori per dimenticanze
es: variabile continua
 Nei
compilatori moderni
è stata introdotta per disabilitare questo
meccanismo
è buona norma usare sempre implicit none
come prima istruzione del programma
G. Mecca - Programmazione Procedurale in Linguaggio C++
7
Strutture di Controllo: Conclusioni >> FORTRAN
Istruzioni Condizionali
 Istruzioni
condizionali in FORTRAN 77
istruzione IF-THEN-ELSE-END IF
istruzione IF-THEN-END IF
 Sintassi
if (<condizione>) then
<istruzioni>
else
<istruzioni>
end if
if (<condizione>) then
<istruzioni>
end if
G. Mecca - Programmazione Procedurale in Linguaggio C++
8
Strutture di Controllo: Conclusioni >> FORTRAN
Istruzioni Condizionali
 Semantica
identica a quella dell’istruzione if in C++
 Differenze
è obbligatoria la parola chiave THEN
in FORTRAN non esiste il concetto di blocco
di istruzioni (equivalente delle { }); i blocchi
sono delimitati da THEN-ELSE-END IF
è considerevolmente diversa la sintassi delle
condizioni
G. Mecca - Programmazione Procedurale in Linguaggio C++
9
Strutture di Controllo: Conclusioni >> FORTRAN
Istruzioni Condizionali
 Condizioni
operatori di confronto in FORTRAN
.eq. .ne. .gt. .lt. .ge. .le.
.eqv. .neqv.
operatori booleani in FORTRAN
.and. .or. .not. .true. .false.
 Esempi
 ((anno.gt.1).and.(matricola.gt.15000))
 (continua.eqv..true.)
G. Mecca - Programmazione Procedurale in Linguaggio C++
10
Strutture di Controllo: Conclusioni >> FORTRAN
Istruzioni Iterative
 Istruzioni
iterative in FORTRAN 77
il linguaggio prevede solo una forma di ciclo
istruzione DO-CONTINUE
ciclo di tipo for (cicli a conteggio)
è basato sull’uso di etichette
I
compilatori moderni consentono di
non utilizzare le etichette
utilizzare anche l’istruzione while
G. Mecca - Programmazione Procedurale in Linguaggio C++
11
Strutture di Controllo: Conclusioni >> FORTRAN
Istruzione do-continue
 Sintassi
do <etic> <variabile>=<v.iniz>,<v.finale>
<istruzioni>
<etic> continue
 Esempio
555
do 555 i=1, 10
write (*,*) i
continue
 Semantica
è quella di un for
G. Mecca - Programmazione Procedurale in Linguaggio C++
12
Strutture di Controllo: Conclusioni >> FORTRAN
Istruzioni Iterative
 In
questo corso
utilizzeremo le estensioni moderne offerte
dal compilatore
 In
particolare
istruzione do-end do (variante del docontinue che non utilizza etichette)
istruzione do while-end do
G. Mecca - Programmazione Procedurale in Linguaggio C++
13
Strutture di Controllo: Conclusioni >> FORTRAN
Istruzione do-end do

Sintassi
do <variabile> = <v.iniz>, <v.finale>
<istruzioni>
ATTENZIONE:
end do

Esempio
do i = 1, 10
write (*,*) ‘Valore:’
write (*,*) i
end do

la variabile viene
inizializzata al valore
iniziale e il ciclo prosegue
finchè non ha superato
il valore finale
(es: i da 1 a 10 incluso)
Semantica
identica a quella del do-continue (ciclo a conteggio)
G. Mecca - Programmazione Procedurale in Linguaggio C++
14
Strutture di Controllo: Conclusioni >> FORTRAN
Istruzione do while-end do

Sintassi
do while (<condizione>)
<istruzioni>
end do

Esempio
do while (i.ne.0)
write (*,*) ‘Inserisci valore:’
read (*,*) i
end do

Semantica
identica a quella del while in C++
G. Mecca - Programmazione Procedurale in Linguaggio C++
15
Strutture di Controllo: Conclusioni >> Sommario
Riassumendo
 Un
altro esempio: Il linguaggio FORTRAN
Dichiarazione Implicita (implicit none)
Istruzioni Condizionali in FORTRAN 77
Istruzioni Iterative in FORTRAN 77
(ATTENZIONE)
G. Mecca - Programmazione Procedurale in Linguaggio C++
16
Strutture di Controllo: Conclusioni >> Un Esempio
Un Esempio: Media con For
#include <iostream.h>
void main() {
float voto, sommaVoti, media;
int numeroEsami, i;
cout << "Quanti esami hai sostenuto ?" <<
cin >> numeroEsami;
sommaVoti = 0.0;
for (i=0; i<numeroEsami; i++) {
cout << "Immetti il voto di un esame"
cin >> voto;
sommaVoti += voto;
}
if (numeroEsami > 0) {
media = sommaVoti/numeroEsami;
cout << "La media vale: " << media <<
} else
cout << "Non hai fornito nessun voto"
}
G. Mecca - Programmazione Procedurale in Linguaggio C++
endl;
<< endl;
endl;
<< endl;
17
Strutture di Controllo: Conclusioni >> Un Esempio
Un Esempio: Media con While
#include <iostream.h>
void main() {
float voto, sommaVoti, media;
int numeroEsami;
bool continua;
continua = true;
numeroEsami = 0;
sommaVoti = 0.0;
while (continua == true) {
cout << "Immetti il voto (0 per fermarti)" << endl;
cin >> voto;
if (voto == 0)
continua = false;
else {
numeroEsami++;
sommaVoti += voto;
}
}
if (numeroEsami > 0) {
media = sommaVoti/numeroEsami;
cout << "La media vale: " << media << endl;
} else
cout << "Non hai fornito nessun voto" << endl;
}
G. Mecca - Programmazione Procedurale in Linguaggio C++
18
Strutture di Controllo: Conclusioni >> FORTRAN
Un Esempio: Media con For
program mediaf
implicit none
real voto, sommaVoti, media
integer numeroEsami, i
write (*,*) 'Quanti esami hai sostenuto ?'
read (*,*) numeroEsami
sommaVoti = 0.0
do i=1, numeroEsami
write (*,*) 'Immetti il voto di un esame'
read (*,*) voto
sommaVoti = sommaVoti+voto
end do
if (numeroEsami.gt.0) then
media = sommaVoti/numeroEsami
write (*,*) 'La media vale: ', media
else
write (*,*) 'Non hai fornito alcun voto'
end if
stop
end
G. Mecca - Programmazione Procedurale in Linguaggio C++
19
Un Esempio: Media con While
Strutture di Controllo: Conclusioni >> FORTRAN
program mediaw
implicit none
real voto, sommaVoti, media
integer numeroEsami
logical continua
continua = .true.
numeroEsami = 0
sommaVoti = 0.0
do while (continua.eqv..true.)
write (*,*) 'Immetti il voto di un esame (0 per fermarti)'
read (*,*) voto
if (voto.eq.0) then
continua = .false.
else
numeroEsami = numeroEsami+1
sommaVoti = sommaVoti+voto
end if
end do
if (numeroEsami.gt.0) then
media = sommaVoti/numeroEsami
write (*,*) 'La media vale: ', media
else
write (*,*) 'Non hai fornito alcun voto'
end if
stop
end
G. Mecca - Programmazione Procedurale in Linguaggio C++
20
Termini della Licenza
Termini della Licenza

This work is licensed under the Creative Commons AttributionShareAlike License. To view a copy of this license, visit
http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to
Creative Commons, 559 Nathan Abbott Way, Stanford, California
94305, USA.

Questo lavoro viene concesso in uso secondo i termini della
licenza “Attribution-ShareAlike” di Creative Commons. Per ottenere
una copia della licenza, è possibile visitare
http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una
lettera all’indirizzo Creative Commons, 559 Nathan Abbott Way,
Stanford, California 94305, USA.
G. Mecca - Programmazione Procedurale in Linguaggio C++
21
Scarica

Strutture di Controllo: Conclusioni >> FORTRAN