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