G. Mecca – Università della Basilicata – [email protected]Programmazione Procedurale in Linguaggio C++ Strutture di Controllo Parte 4 Conclusioni versione 2.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) 2 G. Mecca - Programmazione Procedurale in Linguaggio C++ Sommario m Ricapitolazione m Convenzioni di Stile m Tecniche Algoritmiche Notevoli Somma con Accumulatore Conteggio con Contatore Variabili Bandiera (“flag”) Simulazione Convalida dei Dati in Ingresso m Errori Frequenti Strutture di Controllo: Conclusioni >> Sommario
21
Embed
Programmazione Procedurale in Linguaggio C++ · 18/12/2004 3 5 G. Mecca - Programmazione Procedurale in Linguaggio C++ Ricapitolazione mIstruzioni iterative ðservono ad eseguire
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
versione 2.1Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons
(vedi ultima pagina)
2G. Mecca - Programmazione Procedurale in Linguaggio C++
Sommario
m Ricapitolazionem Convenzioni di Stilem Tecniche Algoritmiche NotevoliðSomma con AccumulatoreðConteggio con ContatoreðVariabili Bandiera (“flag”)ðSimulazioneðConvalida dei Dati in Ingresso
m Errori Frequenti
Strutture di Controllo: Conclusioni >> Sommario
18/12/2004
2
3G. Mecca - Programmazione Procedurale in Linguaggio C++
Ricapitolazione
mStrutture di controlloðelementi fondamentali della programmazione
proceduraleðconsentono di eseguire o meno una porzione
di programma sulla base di condizioni
mDue categorieðistruzioni condizionali ðistruzioni iterative o cicli
Strutture di Controllo: Conclusioni >> Ricapitolazione
4G. Mecca - Programmazione Procedurale in Linguaggio C++
Ricapitolazione
m Istruzioni condizionaliðservono ad eseguire una porzione oppure
un’altra sulla base del valore di una condizione
mCondizioneðespressione a valori booleani
mDue istruzioni (in tutti i linguaggi)ðIF-THEN-ELSEðIF-THEN
Strutture di Controllo: Conclusioni >> Ricapitolazione
18/12/2004
3
5G. Mecca - Programmazione Procedurale in Linguaggio C++
Ricapitolazione
m Istruzioni iterativeðservono ad eseguire più volte una porzione
di programma sulla base del valore di una condizione
mDue istruzioni (in tutti i linguaggi)ðWHILE (cicli “aperti” oppure cicli “chiusi”)ðFOR (cicli “chiusi” o a conteggio)
Strutture di Controllo: Conclusioni >> Ricapitolazione
6G. Mecca - Programmazione Procedurale in Linguaggio C++
Convenzioni di Stile
m In questo corso (e nei successivi)ðconvenzioni sullo “stile di scrittura” del codice
mObiettiviðuniformare il modo di scrivere il codiceðper renderlo più leggibileðe per favorire la collaborazione nei gruppi di
lavoro
m Tendenza internazionale
Strutture di Controllo: Conclusioni >> Convenzioni di Stile
18/12/2004
4
7G. Mecca - Programmazione Procedurale in Linguaggio C++
Convenzioni di Stile
mNelle lezioni successiveðraffineremo progressivamente le nostre
regoleðin modo che valgano anche dopo (Java, C#)
mPer oraða) regole sull’indentazione del codiceðb) regole sulle parentesi graffeðc) regole sulle espressioniðd) regole sui nomi di variabili
Strutture di Controllo: Conclusioni >> Convenzioni di Stile
8G. Mecca - Programmazione Procedurale in Linguaggio C++
Convenzioni di Stile
m a) Indentazioneðcodice di un programma: insieme di blocchi
nidificati (es: strutture di controllo)mPer rendere più leggibile il codiceðè necessario dentellarlo (o “indentarlo”)ðle istruzioni di ogni blocco sono rientrate
rispetto alle parentesiðmolto importante
mRegola: rientri di 4 spazi
Strutture di Controllo: Conclusioni >> Convenzioni di Stile
18/12/2004
5
9G. Mecca - Programmazione Procedurale in Linguaggio C++
Codice senza Indentazione#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;} elsecout << "Non hai fornito nessun voto" << endl;}
Strutture di Controllo: Conclusioni >> Convenzioni di Stile
10G. Mecca - Programmazione Procedurale in Linguaggio C++
Convenzioni di Stile
m b) Posizione delle parentesi graffeðdue convezioni principali
Strutture di Controllo: Conclusioni >> Convenzioni di Stile
if (condizione) {<istruzioni>;
}if (condizione) {
<istruzioni>;} else {
<istruzioni>;}
if (condizione) {
<istruzioni>;} else {
<istruzioni>;}
Convenzione n.1 Convenzione n.2
18/12/2004
6
11G. Mecca - Programmazione Procedurale in Linguaggio C++
Convenzioni di Stile
mRegola n.1ðadotteremo la convenzione n.1
mRegola n.2ðutilizzeremo sempre le parentesiðanche nel caso in cui un blocco contenga
un’unica istruzione
Strutture di Controllo: Conclusioni >> Convenzioni di Stile
12G. Mecca - Programmazione Procedurale in Linguaggio C++
Convenzioni di Stile
m c) Scrittura delle espressioniðespressione: fatta di operandi ed operatoriðper renderla più leggibile è possibile inserire
spazi tra operandi ed operatori
mEsempioð(sqrt(x)+(y-z))==kð(sqrt(x) + (y - z)) == k
Strutture di Controllo: Conclusioni >> Convenzioni di Stile
18/12/2004
7
13G. Mecca - Programmazione Procedurale in Linguaggio C++
Convenzioni di Stile
m d) Nomi delle variabiliðidentificatoriðregola n.1: iniziale minuscola
Strutture di Controllo: Conclusioni >> Tecniche Algoritmiche Notevoli
Svantaggi di questa soluzione:- il codice è meno compatto- è molto meno leggibileUtilizzeremo la seconda
Una soluzione alternativa:
34G. Mecca - Programmazione Procedurale in Linguaggio C++
Errori Frequenti
mUn errore sintattico frequenteðparentesi graffe mancanti per i blocchi delle
istruzioni di controllo
mDue casiðentrambe le parentesi mancantiðsolo la parentesi finale è mancante
Strutture di Controllo: Conclusioni >> Errori Frequenti
18/12/2004
18
35G. Mecca - Programmazione Procedurale in Linguaggio C++
Un Esempio: Media con For#include <iostream.h>void main() {
int voto, sommaVoti;float media;int numeroEsami, i;cout << "Quanti esami hai sostenuto ?" << endl;cin >> numeroEsami;sommaVoti = 0;for (i = 0; i < numeroEsami; i++) {
cout << "Immetti il voto di un esame" << endl;cin >> voto;sommaVoti += voto;
if (numeroEsami > 0)media = ((float)sommaVoti) / numeroEsami;cout << "La media vale: " << media << endl;
else {cout << "Non hai fornito nessun voto" << endl;
}}
Strutture di Controllo: Conclusioni >> Errori Frequenti
manca la parentesi di chiusura
mancano le parentesi del I blocco
36G. Mecca - Programmazione Procedurale in Linguaggio C++
Errori Frequenti
m Nel primo caso (parentesi di chiusura)ðil compilatore considera il blocco aperto fino alla fine
del file e alla fine del file segnala l’erroreðError E2134 mediaFor.cpp 23: Compound statement
missing } in function main()ð“Blocco di istruzioni senza parentesi chiusa”
m Nel secondo caso (parentesi dell’if)ðil compilatore considera il blocco fatto di una sola
istruzione; errore quando incontra “else”ðError E2054 mediaFor.cpp 20: Misplaced else in
function main()ð“Else fuori posto”
Strutture di Controllo: Conclusioni >> Errori Frequenti
18/12/2004
19
37G. Mecca - Programmazione Procedurale in Linguaggio C++
Errori Frequenti
mUn errore logico frequenteðnei cicli a conteggio programmati con while,
gestione scorretta della variabile di cicloðmancanza dell’inizializzazioneðmancanza dell’incremento
m In questi casiðil ciclo si comporta in modo scorrettoðnel secondo caso si verifica un loop
Strutture di Controllo: Conclusioni >> Errori Frequenti
38G. Mecca - Programmazione Procedurale in Linguaggio C++
Errori Frequenti
Strutture di Controllo: Conclusioni >> Errori Frequenti
m Manca inizializzazioneðil comportamento è
casualeðdipende dal valore di i
int i;while (i < 5) {
cout << “Valore di i: “;cout << i << endl;i++;
}
m Manca l’incrementoðtipicamente si verifica
un “loop”
int i;i = 0;while (i < 5) {
cout << “Valore di i: “;cout << i << endl;
}
18/12/2004
20
39G. Mecca - Programmazione Procedurale in Linguaggio C++
Riassumendo
m Ricapitolazionem Convenzioni di Stile (ATTENZIONE)m Tecniche Algoritmiche Notevoli (ATTENZIONE)ðSomma con AccumulatoreðConteggio con ContatoreðVariabili Bandiera (“flag”)ðSimulazioneðConvalida dei Dati in Ingresso
m Errori Frequenti
Strutture di Controllo: Conclusioni >> Sommario
40G. Mecca - Programmazione Procedurale in Linguaggio C++
Un Esempio: Media con For#include <iostream.h>void main() {
int voto, sommaVoti;float media;int numeroEsami, i;cout << "Quanti esami hai sostenuto ?" << endl;cin >> numeroEsami;sommaVoti = 0;for (i = 0; i < numeroEsami; i++) {
cout << "Immetti il voto di un esame" << endl;cin >> voto;sommaVoti += voto;
}if (numeroEsami > 0) {
media = ((float)sommaVoti) / numeroEsami;cout << "La media vale: " << media << endl;
} elsecout << "Non hai fornito nessun voto" << endl;
}
Strutture di Controllo: Conclusioni >> Un Esempio
18/12/2004
21
41G. Mecca - Programmazione Procedurale in Linguaggio C++
Un Esempio: Media con While#include <iostream.h>void main() {
42G. Mecca - Programmazione Procedurale in Linguaggio C++
Termini della Licenza
m 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
m Questo lavoro viene concesso in uso secondo i termini dellalicenza “Attribution-ShareAlike” di Creative Commons. Per ottenereuna copia della licenza, è possibile visitarehttp://creativecommons.org/licenses/by-sa/1.0/ oppure inviare unalettera all’indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.