Programmazione Procedurale 09/12/2019 Programmazione Procedurale Elementi di Base Conclusioni Operatore di cast ? versione 2.6 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca Università della Basilicata – giansalvatore.mecca@unibas.it
Sommario Ricapitolazione Versioni del C++ Simulazione di un Programma 09/12/2019 Elementi di Base: Conclusioni >> Sommario Sommario Ricapitolazione Versioni del C++ Simulazione di un Programma Errori Frequenti G. Mecca - Programmazione Procedurale
Elementi di Base di un Linguaggio 09/12/2019 Elementi di Base: Conclusioni >> Ricapitolazione Elementi di Base di un Linguaggio Regole sintattiche di base struttura del programma, commenti, identificatori Istruzioni di dichiarazione tipi di dato: int, float, double, char (string), bool dichiarazione di costanti e di variabili Istruzioni di Assegnazione Espressioni Istruzione di Lettura e Stampa console e file G. Mecca - Programmazione Procedurale
Un Semplice Programma // Calcolo della superficie del cerchio 09/12/2019 Elementi di Base: Conclusioni >> Ricapitolazione Un Semplice Programma // Calcolo della superficie del cerchio #include <iostream> using namespace std; int main() { // Dichiarazioni const float pigreco = 3.14; int raggio; float cerchio, circonf; // Operazioni cout << “Immetti la lungh. del raggio” << endl; cout << “(deve essere un numero intero)” << endl; cin >> raggio; cerchio = raggio * raggio * pigreco; circonf = 2 * pigreco * raggio; cout << “La circonferenza misura: “ << circonf << endl; cout << “Il cerchio ha superficie: “ << cerchio << endl; return 0; } G. Mecca - Programmazione Procedurale
Versioni del C++ La versione del C++ che studiamo Ma... 09/12/2019 Elementi di Base: Conclusioni >> Versioni del C++ Versioni del C++ La versione del C++ che studiamo è la versione standard del C++ cosiddetto C++ ANSI Ma... del C++ esistono molti dialetti per esempio, la versione iniziale del linguaggio era leggermente diversa da quella ANSI G. Mecca - Programmazione Procedurale
Versioni del C++ Varianti nella Sintassi Nota 09/12/2019 Elementi di Base: Conclusioni >> Versioni del C++ Versioni del C++ Varianti nella Sintassi cambiamenti nelle direttive di inclusione assenza dei “namespace” cambiamenti nella struttura del programma principale Nota MinGW «digerisce» solo C++ ANSI G. Mecca - Programmazione Procedurale
Un Semplice Programma in C++ 09/12/2019 Elementi di Base: Conclusioni >> Versioni del C++ Un Semplice Programma in C++ // Calcolo della superficie del cerchio #include <iostream.h> void main() { const float pigreco=3.14; int raggio; float cerchio, circonf; cout << “Immetti la lungh. del raggio” << endl; cout << “(deve essere un numero intero)” << endl; cin >> raggio; cerchio = raggio*raggio*pigreco; circonf = 2*pigreco*raggio; cout << “La circonferenza misura: “ << circonf << endl; cout << “Il cerchio ha superficie: “ << cerchio << endl; } G. Mecca - Programmazione Procedurale
Simulazione del Programma 09/12/2019 Elementi di Base: Conclusioni >> Ricapitolazione Simulazione del Programma Consiste nel simulare sulla carta l’esecuzione delle istruzioni utile se usato congiuntamente alla sperimentazione diretta al calcolatore aiuta a ragionare su alcuni meccanismi interni di funzionamento Essenzialmente consiste nell’applicare la semantica delle istruzioni una per una (esec. sequenziale) G. Mecca - Programmazione Procedurale
Simulazione del Programma 09/12/2019 Elementi di Base: Conclusioni >> Ricapitolazione ATTENZIONE all’importanza delle simulazioni Simulazione del Programma NOTA si tratta di una forma di esercitazione didatticamente fondamentale soprattutto per chi si avvicina per la prima volta alla programmazione Il problema dell’ “astrazione” abituarsi a “interpretare” il comportamento della macchina durante l’esecuzione senza vederlo G. Mecca - Programmazione Procedurale
Simulazione del Funzionamento 09/12/2019 Elementi di Base: Conclusioni >> Ricapitolazione Simulazione del Funzionamento // Calcolo della superficie del cerchio #include <iostream> using namespace std; int main() { // Dichiarazioni const float pigreco=3.14; int raggio; float circonf, cerchio; // Operazioni cout << “Immetti la lungh. del raggio” << endl; cout << “(deve essere un numero intero)” << endl; cin >> raggio; cerchio = raggio * raggio * pigreco; circonf = 2 * raggio * pigreco; cout << “La circonferenza misura: “ << circonf << endl; cout << “Il cerchio ha superficie: “ << cerchio << endl; return 0; } Memoria RAM ... #1000 pigreco 3.14 #1001 raggio 10 xxx #1002 circonf 62.8 xxx #1003 cerchio 314.0 xxx #1004 ... Schermo Immetti la lungh. del raggio (deve essere un numero intero) _10 La circonferenza misura: 62.8 Il cerchio ha superficie: 314.0 G. Mecca - Programmazione Procedurale
Errori Frequenti Di seguito In particolare 09/12/2019 Elementi di Base: Conclusioni >> Errori Frequenti Errori Frequenti Di seguito alcuni errori sintattici molto frequenti In particolare punti e virgola mancanti expected “;” before… costanti o variabili non dichiarate “…” was not declared in this scope errori nella scelta degli identificatori G. Mecca - Programmazione Procedurale
Errori Frequenti In caso di codice scorretto sintatticamente 09/12/2019 Elementi di Base: Conclusioni >> Errori Frequenti Errori Frequenti In caso di codice scorretto sintatticamente il compilatore restituisce messaggi per segnalare gli errori Esempio: errore frequente punto e virgola mancante prova.cpp 16: 4 error: expected “;” before …. nome del file descrizione dell’errore (punto e virgola mancante) numero di riga codice di errore G. Mecca - Programmazione Procedurale
Errori Frequenti Un altro errore frequente 09/12/2019 Elementi di Base: Conclusioni >> Errori Frequenti Errori Frequenti Un altro errore frequente utilizzare una variabile non dichiarata es: raggio int main() const float pigreco = 3.14; float cerchio, circonf; cout << “Immetti la lungh. del raggio” << endl; cin >> raggio; cerchio.cpp 15:11: error : 'raggio' was not declared in this scope G. Mecca - Programmazione Procedurale
Errori Frequenti Errori nella scelta degli identificatori 09/12/2019 Elementi di Base: Conclusioni >> Errori Frequenti Errori Frequenti Errori nella scelta degli identificatori altra fonte di errori sono i caratteri speciali (codice ASCII superiore a 127) es: int capCittà; prova.cpp :5:4: error: stray ‘\340’ in program G. Mecca - Programmazione Procedurale
Errori Frequenti Errori nella scelta degli identificatori es: spazi 09/12/2019 Elementi di Base: Conclusioni >> Errori Frequenti Errori Frequenti Errori nella scelta degli identificatori es: spazi es: int lung raggio; cerchio.cpp :9:13: error: expected initializer before ‘raggio’ lung raggio = 1; cerchio.cpp :11:4: error: ‘lung’ was not declared in this scope cerchio.cpp :11:9: error: expected ‘;’ before ‘raggio’ NOTA: in questo caso il messaggio non è del tutto accurato G. Mecca - Programmazione Procedurale
Errori Frequenti NOTA BENE Numero di linea Inoltre 09/12/2019 Elementi di Base: Conclusioni >> Errori Frequenti Errori Frequenti NOTA BENE purtroppo non sempre i messaggi di errore sono completamente affidabili nella descrizione e nel numero di linea Numero di linea l’errore può essere alla linea segnalata oppure in una delle linee precedenti Inoltre a volte un errore singolo può generare molti messaggi di errore diversi G. Mecca - Programmazione Procedurale
Errori Frequenti: Esempio 09/12/2019 Elementi di Base: Conclusioni >> Errori Frequenti Errori Frequenti: Esempio // cerchioErrori.cpp #include <iostream> using namespace std; int main() const float pigreco = 3.14; int raggio; float cerchio, circonf; cout << “Immetti la lungh. del raggio” << endl; cout << “(deve essere un numero intero)” << endl; cin >> raggio; cerchio = raggio * raggio * pigreco; circonf = 2 * pigreco * raggio; cout << “La circonferenza misura: “ << circonf << endl; cout << “Il cerchio ha superficie: “ << cerchio << endl; return 0; } parentesi mancante G. Mecca - Programmazione Procedurale
\progProc\cpp>g++ cerchio.cpp 09/12/2019 Elementi di Base: Conclusioni >> Errori Frequenti \progProc\cpp>g++ cerchio.cpp cerchio.cpp:8:10: error: expected initializer before 'float' cerchio.cpp:12:4: error: 'cout' does not name a type cerchio.cpp:13:4: error: 'cout' does not name a type cerchio.cpp:14:4: error: 'cin' does not name a type cerchio.cpp:15:4: error: 'cerchio' does not name a type cerchio.cpp:16:4: error: 'circonf' does not name a type cerchio.cpp:17:4: error: 'cout' does not name a type cerchio.cpp:18:4: error: 'cout' does not name a type cerchio.cpp:19:4: error: expected unqualified-id before 'return' cerchio.cpp:20:1: error: expected declaration before '}' token G. Mecca - Programmazione Procedurale
Errori Frequenti Di conseguenza, valgono le regole 09/12/2019 Elementi di Base: Conclusioni >> Errori Frequenti Errori Frequenti Di conseguenza, valgono le regole a) analizzare i messaggi di errore uno ad uno iniziando dal primo b) dopo aver eliminato ciascun errore, ricompilare e verificare gli ulteriori errori c) per eliminare un errore, cercare di capire il messaggio di errore d) ispezionare subito la linea segnalata e) successivamente ispezionare le linee precedenti alla caccia di possibili cause G. Mecca - Programmazione Procedurale
09/12/2019 Elementi di Base: Conclusioni >> Esercizio Esercizio Scrivere un programma in linguaggio C++ che calcola il numero di pollici di un televisore data la misura della base e dell’altezza dello schermo in centimetri. Nota: 1 pollice = 2.54 cm d h b G. Mecca - Programmazione Procedurale
Riassumendo Elementi di base Ansi C++ Simulazione del programma 09/12/2019 Elementi di Base: Conclusioni >> Sommario Riassumendo Elementi di base tipi, costanti, variabili istruzioni di assegnazione ed espressioni istruzioni di lettura e stampa Ansi C++ Simulazione del programma Errori frequenti G. Mecca - Programmazione Procedurale
09/12/2019 Termini della Licenza 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. 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