Post on 29-Jan-2016
description
G. Mecca – Università della Basilicata – mecca@unibas.itG. Mecca – Università della Basilicata – mecca@unibas.it
Programmazione Procedurale in Linguaggio C++
Strutture di Controllo
Parte 5
Il FORTRAN
versione 2.0Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons
(vedi ultima pagina)
2G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Sommario
Un altro esempio: Il linguaggio FORTRANDichiarazione ImplicitaIstruzioni CondizionaliIstruzioni Iterative
Strutture di Controllo: Conclusioni >> Sommario
3G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Un Altro Esempio: FORTRAN
Strutture di controllo in FORTRAN 77istruzioni condizionali (IF-THEN-ELSE, IF-
THEN)ciclo DO (ciclo di tipo for)
Il FORTRAN 77 non prevede il whileintrodotto in FORTRAN 90ma i compilatori più recenti lo prevedono
comunque come estensione al linguaggio
Strutture di Controllo: Conclusioni >> FORTRAN
4G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Un Esempio: Media con For program mediafprogram mediaf implicit none implicit none real voto, sommaVoti, mediareal voto, sommaVoti, media integer numeroEsami, iinteger numeroEsami, i write (*,*) 'Quanti esami hai sostenuto ?'write (*,*) 'Quanti esami hai sostenuto ?' read (*,*) numeroEsamiread (*,*) numeroEsami sommaVoti = 0.0sommaVoti = 0.0 do i=1, numeroEsamido i=1, numeroEsami write (*,*) 'Immetti il voto di un esame'write (*,*) 'Immetti il voto di un esame' read (*,*) votoread (*,*) voto sommaVoti = sommaVoti+votosommaVoti = sommaVoti+voto end doend do if (numeroEsami.gt.0) thenif (numeroEsami.gt.0) then media = sommaVoti/numeroEsamimedia = sommaVoti/numeroEsami write (*,*) 'La media vale: ', mediawrite (*,*) 'La media vale: ', media elseelse write (*,*) 'Non hai fornito alcun voto'write (*,*) 'Non hai fornito alcun voto' end ifend if stopstop endend
Strutture di Controllo: Conclusioni >> FORTRAN
5G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
program mediawprogram mediaw implicit noneimplicit none real voto, sommaVoti, mediareal voto, sommaVoti, media integer numeroEsamiinteger numeroEsami logical continualogical continua continua = .true.continua = .true. numeroEsami = 0numeroEsami = 0 sommaVoti = 0.0sommaVoti = 0.0 do while (continua.eqv..true.) do while (continua.eqv..true.) write (*,*) 'Immetti il voto di un esame (0 per fermarti)'write (*,*) 'Immetti il voto di un esame (0 per fermarti)' read (*,*) votoread (*,*) voto if (voto.eq.0) thenif (voto.eq.0) then continua = .false.continua = .false. elseelse numeroEsami = numeroEsami+1numeroEsami = numeroEsami+1 sommaVoti = sommaVoti+votosommaVoti = sommaVoti+voto end ifend if end doend do if (numeroEsami.gt.0) thenif (numeroEsami.gt.0) then media = sommaVoti/numeroEsamimedia = sommaVoti/numeroEsami write (*,*) 'La media vale: ', mediawrite (*,*) 'La media vale: ', media elseelse write (*,*) 'Non hai fornito alcun voto'write (*,*) 'Non hai fornito alcun voto' end ifend if stopstop endend
Strutture di Controllo: Conclusioni >> FORTRAN
Un
Ese
mpi
o: M
edia
con
Whi
le
>>
6G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Dichiarazione Implicita
Una particolarità del prog. FORTRANistruzione implicit noneimplicit noneimpedisce 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: integergli altri nomi: real
Strutture di Controllo: Conclusioni >> FORTRAN
7G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Dichiarazione Implicita
E’ un meccanismo da non usareintrodotto per ragioni di economia di scritturaporta a numerosi errori per dimenticanzees: variabile continua
Nei compilatori moderniè stata introdotta per disabilitare questo
meccanismoè buona norma usare sempre implicit implicit nonenone come prima istruzione del programma
Strutture di Controllo: Conclusioni >> FORTRAN
8G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzioni Condizionali
Istruzioni condizionali in FORTRAN 77istruzione IF-THEN-ELSE-END IFistruzione IF-THEN-END IF
Sintassiif (<condizione>) thenif (<condizione>) then if (<condizione>) thenif (<condizione>) then
<istruzioni><istruzioni> <istruzioni> <istruzioni>
elseelse end ifend if
<istruzioni><istruzioni>
end ifend if
Strutture di Controllo: Conclusioni >> FORTRAN
9G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzioni Condizionali
Semanticaidentica a quella dell’istruzione if in C++
Differenzeè obbligatoria la parola chiave THENin 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
Strutture di Controllo: Conclusioni >> FORTRAN
10G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzioni Condizionali
Condizionioperatori di confronto in FORTRAN.eq. .ne. .gt. .lt. .ge. .le..eq. .ne. .gt. .lt. .ge. .le.
.eqv. .neqv..eqv. .neqv.
operatori booleani in FORTRAN.and. .or. .not. .true. .false..and. .or. .not. .true. .false.
Esempi((anno.gt.1).and.(matricola.gt.15000))((anno.gt.1).and.(matricola.gt.15000))(continua.eqv..true.)(continua.eqv..true.)
Strutture di Controllo: Conclusioni >> FORTRAN
11G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzioni Iterative
Istruzioni iterative in FORTRAN 77il linguaggio prevede solo una forma di cicloistruzione DO-CONTINUEciclo di tipo for (cicli a conteggio)è basato sull’uso di etichette
I compilatori moderni consentono dinon utilizzare le etichetteutilizzare anche l’istruzione while
Strutture di Controllo: Conclusioni >> FORTRAN
12G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzione do-continue
Sintassi do <etic> <variabile>=<v.iniz>,<v.finale>do <etic> <variabile>=<v.iniz>,<v.finale> <istruzioni><istruzioni><etic> continue<etic> continue
Esempio do 555 i=1, 10do 555 i=1, 10 write (*,*) iwrite (*,*) i555 continue555 continue
Semanticaè quella di un for
Strutture di Controllo: Conclusioni >> FORTRAN
13G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzioni Iterative
In questo corsoutilizzeremo le estensioni moderne offerte
dal compilatore In particolare
istruzione do-end do (variante del do-continue che non utilizza etichette)
istruzione do while-end do
Strutture di Controllo: Conclusioni >> FORTRAN
14G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzione do-end do
Sintassi do <variabile> = <v.iniz>, <v.finale>do <variabile> = <v.iniz>, <v.finale>
<istruzioni><istruzioni>
end doend do
Esempio do i = 1, 10do i = 1, 10
write (*,*) ‘Valore:’write (*,*) ‘Valore:’
write (*,*) iwrite (*,*) i
end doend do
Semantica identica a quella del do-continue (ciclo a conteggio)
Strutture di Controllo: Conclusioni >> FORTRAN
ATTENZIONE:la variabile viene
inizializzata al valore iniziale e il ciclo prosegue
finchè non ha superatoil valore finale
(es: i da 1 a 10 incluso)
15G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzione do while-end do
Sintassi do while (<condizione>)do while (<condizione>)
<istruzioni><istruzioni>
end doend do
Esempio do while (i.ne.0)do while (i.ne.0)
write (*,*) ‘Inserisci valore:’write (*,*) ‘Inserisci valore:’
read (*,*) iread (*,*) i
end doend do
Semantica identica a quella del while in C++
Strutture di Controllo: Conclusioni >> FORTRAN
16G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Riassumendo
Un altro esempio: Il linguaggio FORTRANDichiarazione Implicita (implicit none)Istruzioni Condizionali in FORTRAN 77Istruzioni Iterative in FORTRAN 77
(ATTENZIONE)
Strutture di Controllo: Conclusioni >> Sommario
17G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Un Esempio: Media con For#include <iostream.h>#include <iostream.h>void main() {void main() { float voto, sommaVoti, media;float voto, sommaVoti, media; int numeroEsami, i;int numeroEsami, i; cout << "Quanti esami hai sostenuto ?" << endl;cout << "Quanti esami hai sostenuto ?" << endl; cin >> numeroEsami;cin >> numeroEsami; sommaVoti = 0.0;sommaVoti = 0.0; for (i=0; i<numeroEsami; i++) {for (i=0; i<numeroEsami; i++) { cout << "Immetti il voto di un esame" << endl;cout << "Immetti il voto di un esame" << endl; cin >> voto;cin >> voto; sommaVoti += voto;sommaVoti += voto; }} if (numeroEsami > 0) {if (numeroEsami > 0) { media = sommaVoti/numeroEsami;media = sommaVoti/numeroEsami; cout << "La media vale: " << media << endl;cout << "La media vale: " << media << endl; } else} else cout << "Non hai fornito nessun voto" << endl;cout << "Non hai fornito nessun voto" << endl;}}
Strutture di Controllo: Conclusioni >> Un Esempio
18G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Un Esempio: Media con While#include <iostream.h>#include <iostream.h>void main() {void main() { float voto, sommaVoti, media;float voto, sommaVoti, media; int numeroEsami;int numeroEsami; bool continua;bool continua; continua = true;continua = true; numeroEsami = 0;numeroEsami = 0; sommaVoti = 0.0;sommaVoti = 0.0; while (continua == true) {while (continua == true) { cout << "Immetti il voto (0 per fermarti)" << endl;cout << "Immetti il voto (0 per fermarti)" << endl; cin >> voto;cin >> voto; if (voto == 0)if (voto == 0) continua = false;continua = false; else { else { numeroEsami++; numeroEsami++; sommaVoti += voto; sommaVoti += voto; }} }} if (numeroEsami > 0) {if (numeroEsami > 0) { media = sommaVoti/numeroEsami;media = sommaVoti/numeroEsami; cout << "La media vale: " << media << endl;cout << "La media vale: " << media << endl; } else} else cout << "Non hai fornito nessun voto" << endl;cout << "Non hai fornito nessun voto" << endl;}}
Strutture di Controllo: Conclusioni >> Un Esempio
19G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Un Esempio: Media con For program mediafprogram mediaf implicit none implicit none real voto, sommaVoti, mediareal voto, sommaVoti, media integer numeroEsami, iinteger numeroEsami, i write (*,*) 'Quanti esami hai sostenuto ?'write (*,*) 'Quanti esami hai sostenuto ?' read (*,*) numeroEsamiread (*,*) numeroEsami sommaVoti = 0.0sommaVoti = 0.0 do i=1, numeroEsamido i=1, numeroEsami write (*,*) 'Immetti il voto di un esame'write (*,*) 'Immetti il voto di un esame' read (*,*) votoread (*,*) voto sommaVoti = sommaVoti+votosommaVoti = sommaVoti+voto end doend do if (numeroEsami.gt.0) thenif (numeroEsami.gt.0) then media = sommaVoti/numeroEsamimedia = sommaVoti/numeroEsami write (*,*) 'La media vale: ', mediawrite (*,*) 'La media vale: ', media elseelse write (*,*) 'Non hai fornito alcun voto'write (*,*) 'Non hai fornito alcun voto' end ifend if stopstop endend
Strutture di Controllo: Conclusioni >> FORTRAN
20G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
program mediawprogram mediaw implicit noneimplicit none real voto, sommaVoti, mediareal voto, sommaVoti, media integer numeroEsamiinteger numeroEsami logical continualogical continua continua = .true.continua = .true. numeroEsami = 0numeroEsami = 0 sommaVoti = 0.0sommaVoti = 0.0 do while (continua.eqv..true.) do while (continua.eqv..true.) write (*,*) 'Immetti il voto di un esame (0 per fermarti)'write (*,*) 'Immetti il voto di un esame (0 per fermarti)' read (*,*) votoread (*,*) voto if (voto.eq.0) thenif (voto.eq.0) then continua = .false.continua = .false. elseelse numeroEsami = numeroEsami+1numeroEsami = numeroEsami+1 sommaVoti = sommaVoti+votosommaVoti = sommaVoti+voto end ifend if end doend do if (numeroEsami.gt.0) thenif (numeroEsami.gt.0) then media = sommaVoti/numeroEsamimedia = sommaVoti/numeroEsami write (*,*) 'La media vale: ', mediawrite (*,*) 'La media vale: ', media elseelse write (*,*) 'Non hai fornito alcun voto'write (*,*) 'Non hai fornito alcun voto' end ifend if stopstop endend
Strutture di Controllo: Conclusioni >> FORTRAN
Un
Ese
mpi
o: M
edia
con
Whi
le
21G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Termini della Licenza
This work is licensed under the Creative Commons Attribution-ShareAlike 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.
Termini della Licenza
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.