Variabile Variabile E‟ un‟astrazione della cella di memoria Formalmente, è un simbolo associato ad un indirizzo fisico (posizione all‟interno della memoria della cella o delle celle associate al simbolo) L‟indirizzo fisico di una variabile è fisso e immutabile all‟interno del programma; può cambiare il suo contenuto, cioè il valore della variabile esempio: ... Simbolo indirizzo x 1328 x=4; 1328 4 ... FI - Algoritmi e Programmazione 1 Definizione di variabile FI - Algoritmi e Programmazione Esempi 2 Definizione di una variabile E‟ la frase che introduce una nuova variabile <tipo><identificatore> identificata da un simbolo int x; /* deve denotare un valore intero*/ float y; /* deve denotare un valore reale*/ char ch; /* deve denotare un valore carattere*/ atta a denotare valori di un ben preciso tipo FI - Algoritmi e Programmazione 3 FI - Algoritmi e Programmazione 4 1 Inizializzazione di variabili Caratteristiche delle variabili E‟ possibile specificare il valore iniziale di una variabile quando la si dichiara <tipo><identificatore> = <espr> ; int x = 32; double speed = 124.6; double time = 71.6; double km = speed*time; /* inizializzazione mediante una espressione*/ FI - Algoritmi e Programmazione Campo d’azione (scope): è la parte di programma (unità di codifica) entro cui la variabile è nota e può essere usata Tipo: specifica la classe di valori che la variabile può assumere (e quindi gli operatori applicabili) Tempo di vita: l‟intervallo di tempo in cui rimane valida l‟associazione simbolo/cella di memoria Valore: è rappresentato (secondo la codifica adottata per il tipo cui la variabile appartiene) nell‟area di memoria associata alla variabile. 5 Esempio FI - Algoritmi e Programmazione 6 Esempio: algoritmo di risoluzione Data una temperatura c espressa in gradi Celsius, calcolare il corrispondente valore f espresso in Fahrenheit Approccio: si parte dal problema e dalle proprietà nel dominio dei dati per descrivere poi la soluzione in modo astratto Specifica della soluzione: relazione tra grandezze esistenti nello specifico dominio applicativo C * 9/5 = F - 32 FI - Algoritmi e Programmazione 7 Dato la temperatura in Celsius C calcolare la temperatura in Fahreneit F sfruttando la relazione F = 32 + C *9/5 Solo a questo punto (una volta definito l‟algoritmo) si effettua la codifica FI - Algoritmi e Programmazione 8 2 Dipartimento di Ingegneria dell’Informazione Un possibile programma in C Università degli Studi di Parma main() { float c; /* Celsius */ scanf(“%f”, &c); /* legge il valore di c */ float f = 32 + c * 9/5; printf ( “Temperatura (F): %f \n”, f); /* stampa il valore di f */ } Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l’ambiente e il territorio Ambienti di programmazione NB l‟impaginazione (indentazione) serve solo per rendere più leggibile il programma: in C le istruzioni sono separate da “;” FI - Algoritmi e Programmazione Stefano Cagnoni e Monica Mordonini 9 Costruzione di una applicazione Perché? Si deve compilare il file (o i file) che contiene (contengono) il testo del programma (file sorgente, estensione .c) Il risultato sono uno o più file oggetto (estensione .o (Unix) o .obj (Windows)) si devono poi collegare (linking) i file oggetto l‟uno con l‟altro e con le librerie di sistema al fine di creare un unico file eseguibile (estensione .exe (Windows); nome a piacere o a.out se non si specifica il nome (Unix)) FI - Algoritmi e Programmazione 11 L‟elaboratore capisce solo il linguaggio macchina della CPU utilizzata il nostro programma, definito in un linguaggio di programmazione simile al linguaggio naturale, opera su una macchina astratta, „rivestita‟ del sistema operativo che controlla le periferiche (stampante, memoria di massa, ecc.) alcune istruzioni del linguaggio di programmazione sono dei brevi programmi forniti insieme al compilatore, che può inglobarli nel programma eseguibile nella fase di link FI - Algoritmi e Programmazione 12 3 Librerie di sistema Eseguire un programma Insieme di componenti software che consentono di interfacciarsi col sistema operativo, usare le risorse gestite da quest‟ultimo e realizzare alcune “istruzioni complesse” del linguaggio In pratica, insieme di funzioni „preconfezionate‟, utilizzabili all‟interno di un file sorgente FI - Algoritmi e Programmazione E se non funziona? Debugger: strumento in grado di eseguire passo passo il programma, mostrando i valori delle variabili e la loro evoluzione e tenendo traccia delle funzioni via via chiamate 13 Ambienti integrati di programmazione Una volta scritto, compilato (con il compilatore) e collegato (con il linker) lo si può eseguire sull‟elaboratore FI - Algoritmi e Programmazione 14 Ambiente BorlandC/C++ Automatizzano la procedura di compilazione e linking dei file Possono lanciare il programma sulla macchina e visualizzarne l‟output a video Incorporano le funzioni di debug Il BorlandC/C++ è un ambiente integrato per la messa a punto di programmi in C e in C++. In questo ambiente è possibile creare, correggere, compilare, mandare in esecuzione e memorizzare su disco programmi C/C++. Noi utilizzeremo il BorlandC presente nei laboratori di informatica base FI - Algoritmi e Programmazione 15 ambiente turbo C 16 4 L'Ambiente di sviluppo programmi Utilizzare il BorlandC/C++ in C Memorizzare il programma sorgente C in un file avente estensione .C (e non .CPP). Dal menù Options: ambiente turbo C 17 Realizzazione di un programma per fare riferimento allo standard ANSI del linguaggio C, è opportuno scegliere nella finestra Source options le Keywords ANSI. ambiente turbo C 18 Istruzioni di I/O: printf() Apertura della finestra di editor Scrittura del programma e suo salvataggio (F2) Compilazione del programma (success, warnings, errors) Esecuzione del programma (run) L‟input e l‟output dei dati avvengono nella finestra output Creazione di una versione eseguibile del programma make: viene creato un .exe nella cartella corrente ambiente turbo C Verificare nella finestra C++ options che la scelta corrispondente a Use C++ Compiler sia C++ extension e non C++ always 19 printf(stringa di formato [,lista di espressioni]) per visualizzare dati sullo standard output (monitor) lista di espressioni espressione {,espressione} sono le espressioni il cui valore deve essere visualizzato stringa di formato: contiene i caratteri da visualizzare ed i simboli di formato che rappresentano i valori delle espressioni da visualizzare, specificate nella lista di espressioni: %d per la visualizzazione di un numero intero %f per la visualizzazione di un numero reale %c per la visualizzazione di un carattere %s per la visualizzazione di una stringa ambiente turbo C 20 5 Istruzioni di I/O: printf() Istruzioni di I/O: scanf() printf (“Questa è una frase di prova\n”); scanf (stringa di formato , lista indirizzi di variabili) printf (“La somma di %d\n”, m, n, m+n); %d e %d risulta: printf (“Il codice ASCII %d\nviene visualizzato come %c\n”,61,61); Quando viene eseguita produce il seguente output: Il codice ASCII 61 viene visualizzato come A ambiente turbo C Esempio scanf (“%d %f %c”, &n, &x, &c); 21 Istruzioni di I/O: printf() e scanf() ambiente turbo C 22 Debugger printf (“Inserisci un intero, un float e un carattere: \n”); scanf (“%d %f %c”, &n, &x, &c); printf (“Adesso n vale: %d \n”, n); printf (“ x vale: %f \n”, x); printf (“ c è il carattere %c”, c); printf (“e ha %d come codice ASCII \n”, c); Inserisci un intero, un float e un carattere: 12 3.14 A (dati che si suppone vengano inseriti) Adesso n vale 12 x vale 3.14 c è il carattere A e ha 61 come codice ASCII ambiente turbo C consente la lettura di dati dallo standard input e la loro assegnazione alle variabili di cui si specificano gli indirizzi lista indirizzi di variabili indirizzo {,indirizzo} indirizzo &variabile stringa di formato come per printf 23 Consente di eseguire il programma riga per riga visualizzando anche il codice delle funzioni chiamate Interrompere l‟esecuzione del codice in corrispondenza di una certa riga controllare istante per istante il valore assunto da una variabile vedere istante per istante quali siano le funzioni attive FI - Algoritmi e Programmazione 24 6 Individuazione degli errori Ispezione delle variabili Esecuzione del programma istruzione per istruzione Per ottenere una esecuzione istruzione per istruzione del programma occorre eseguire il comando Trace into del menù Run. Il programma viene compilato e viene posta la barra di esecuzione all'inizio della funzione main(). Ogni volta che si preme F7 viene eseguita l'istruzione successiva. ambiente turbo C Add watch chiede le Watch Expression, cioè il nome delle variabili di cui si vuole controllare il succedersi dei valori Per vedere il valore di tali variabili occorre attivare la finestra Watch, tramite il menù Windows (Alt-w) e attivando Watch. Verranno mostrati i valori delle variabili quando il programma sarà in fase di esecuzione (run) ambiente turbo C 26 Punti d’arresto (breakpoint) L'esecuzione istruzione per istruzione risulta impraticabile se il programma da eseguire è complesso o richiede comunque l‟esecuzione di numerose istruzioni (es. ciclo da ripetere 1000 volte). Si può per questo eseguire il comando Go to cursor del menu Run, che provoca l'esecuzione di tutte le istruzioni da quella corrente fino al punto in cui è posizionato il cursore. Nella finestra Watch compaiono i valori delle variabili aggiornate al momento dell'ultima istruzione eseguita. ambiente turbo C Dal menu Debug (Alt-d) si accede al sottomenu Watches e si attiva Add watch 25 Punti d’arresto (breakpoint) E‟ anche possibile specificare a priori dei punti di arresto (comando set breakpoint) per indicare dove il debugger deve fermare l‟esecuzione del programma. Questo può servire: 27 per verificare i valori assunti da una variabile per valutare un‟espressione logica da cui dipende un „istruzione condizionale e quindi le istruzioni da eseguire successivamente, ecc ambiente turbo C 28 7