FONDAMENTI DI INFORMATICA -...
Transcript of FONDAMENTI DI INFORMATICA -...
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 1
FONDAMENTI DI INFORMATICA
Prof. PIER LUCA MONTESSOROIng. DAVIDE PIERATTONI
Facoltà di IngegneriaUniversità degli Studi di Udine
La programmazione in linguaggio C
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 2
Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei trattati internazionali. Il titolo ed i copyright relativi alle slides (iviinclusi, ma non limitatamente, ogni immagine, fotografia, animazione, video, audio, musica e testo) sono di proprietà degli autori prof. Pier Luca Montessoro e ing. DavidePierattoni, Università degli Studi di Udine.Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca, scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministerodell'Università e Ricerca Scientifica e Tecnologica, per scopi istituzionali, non a fine di lucro. In tal caso non è richiesta alcuna autorizzazione.Ogni altro utilizzo o riproduzione (ivi incluse, ma non limitatamente, le riproduzioni susupporti magnetici, su reti di calcolatori e stampe) in toto o in parte è vietata, se non esplicitamente autorizzata per iscritto, a priori, da parte degli autori. L'informazione contenuta in queste slide è ritenuta essere accurata alla data dellapubblicazione. Essa è fornita per scopi meramente didattici e non per essere utilizzata in progetti di impianti, prodotti, reti, ecc. In ogni caso essa è soggetta a cambiamenti senzapreavviso. Gli autori non assumono alcuna responsabilità per il contenuto di queste slide (ivi incluse, ma non limitatamente, la correttezza, completezza, applicabilità, aggiornamento dell'informazione). In ogni caso non può essere dichiarata conformità all'informazione contenuta in questeslide.In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devonomai essere rimossi e devono essere riportati anche in utilizzi parziali.
Nota di Copyright
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 3
specifichedel problema analisi algoritmo
programmasorgente
implem
entazione
compilazionee linking
programmaeseguibile
esecuzione
controllodei risultati debugging e correzione
del programma
Strumenti per la programmazione
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 4
Strumenti per la programmazionespecifiche
del problema analisi algoritmo
programmasorgente
implem
entazione
compilazionee linking
programmaeseguibile
esecuzione
controllodei risultati debugging e correzione
del programma
In questo corso non è previstol’utilizzo di sistemi di analisiautomatica né di strumentidi CASE (Computer AidedSoftware Engineering)
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 5
Strumenti per la programmazionespecifiche
del problema analisi algoritmo
programmasorgente
implem
entazione
compilazionee linking
programmaeseguibile
esecuzione
controllodei risultati debugging e correzione
del programma
TEXT EDITOR: programmaper scrivere file di testo (ASCII)Esempi: EDIT di MS-DOS,Notepad, Wordpad o Notepad++ diMS-Windows, gedit o emacs di Unix
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 6
Strumenti per la programmazionespecifiche
del problema analisi algoritmo
programmasorgente
implem
entazione
compilazionee linking
programmaeseguibile
esecuzione
controllodei risultati debugging e correzione
del programma
Compilatore C/C++ della GNU
Linguaggio C:gcc -o foobar.exe foobar.c
Linguaggio C++:g++ -o foobar.exe foobar.cpp
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 7
Strumenti per la programmazionespecifiche
del problema analisi algoritmo
programmasorgente
implem
entazione
compilazionee linking
programmaeseguibile
esecuzione
controllodei risultati debugging e correzione
del programma
In MS-DOS e in unix per eseguire un programma èsufficiente scriverne il nomesulla linea di comando,seguito da invio:
C:\PROGRAMMI> foobar
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 8
Strumenti per la programmazionespecifiche
del problema analisi algoritmo
programmasorgente
implem
entazione
compilazionee linking
programmaeseguibile
esecuzione
controllodei risultati debugging e correzione
del programma
Strumenti di base:• attenta analisi ragionata del codice• selezione di casi significativi• printf (per la stampa dei valori delle variabili)
Strumenti avanzati:• debugger
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 9
Utilizzo del compilatore GCC• Compilazione:
C:\PROGR> gcc -o nome.exe nome.c
• Esecuzione:C:\PROGR> nome
• Compilazione per il debugger:C:\PROGR> gcc -g -o nome.exe nome.c
• Esecuzione con debugger grafico:C:\PROGR> gdb nomeC:\PROGR> insight nomeC:\PROGR> nemiver prova
(versioni gcc precedenti alla 3)
(in ambiente Ubuntu)
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 10
Principi fondamentali
• “Implementare un algoritmo” significa tradurre una serie di operazioni aritmetico-logiche in procedure eseguibili dal calcolatore
• Tale traduzione è diversa a seconda del linguaggio di programmazione scelto
Un programma C è costituito fondamentalmente da variabili e funzioni
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 11
Variabili e funzioni
• Le variabili memorizzano i valori (o dati) in input e/o in output e quelli usati durante l’esecuzione
• Le funzioni sono sequenze di istruzioni, ossia operazioni da effettuare sui dati
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 12
Esempio: hello.c#include <stdio.h>#include <stdlib.h>
/* programma principale */
int main(){
printf ("Hello world!\n");return EXIT_SUCCESS;
}
/* fine del programma */
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 13
Esempio: hello.c#include <stdio.h>#include <stdlib.h>
/* programma principale */
int main(){
printf ("Hello world!\n");return EXIT_SUCCESS;
}
/* fine del programma */
Direttiva al preprocessor: include il file (del compilatore) stdio.h cheserve per l’utilizzo dellefunzioni di input/output
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 14
Esempio: hello.c#include <stdio.h>#include <stdlib.h>
/* programma principale */
int main(){
printf ("Hello world!\n");return EXIT_SUCCESS;
}
/* fine del programma */
Commento: viene ignoratodal compilatore
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 15
Esempio: hello.c#include <stdio.h>#include <stdlib.h>
/* programma principale */
int main(){
printf ("Hello world!\n");return EXIT_SUCCESS;
}
/* fine del programma */
Funzione main: tuttocomincia da qui
Corpo della funzione main
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 16
Esempio: hello.c#include <stdio.h>#include <stdlib.h>
/* programma principale */
int main(){
printf ("Hello world!\n");return EXIT_SUCCESS;
}
/* fine del programma */Istruzione per stampare la scritta"Hello world!" e poi andare a capo
Istruzione per terminare la funzione main (e quindi ilprogramma) restituendo al sistema operativo il valorenumerico associato, in stdlib.h, a EXIT_SUCCESS
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 17
Struttura di un programma• Ogni funzione è identificata da un nome• Il programma inizia sempre l’esecuzione a
partire da una funzione “speciale”: la funzione main
• Nei programmi C più semplici, tutte le operazioni da fare risiedono nella funzione main
• I programmi complessi prevedono che maininvochi altre funzioni, suddividendo le molte istruzioni in blocchi logici più semplici
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 18
Direttive al preprocessor
• La prima linea del programma:#include <stdio.h>
è comune a molti programmi C• Indica al compilatore di includere
automaticamente le funzioni della libreria standard di input/output stdio.h, come ad esempio la funzione di stampa su video printf ()
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 19
Commenti
• In ogni programma C è utile poter inserire dei commenti, a descrizione di quanto viene eseguito da una o più istruzioni
• La riga di commento:/* programma principale */
non contiene istruzioni C e quindi non viene processata dal compilatore
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 20
Input e output
• printf () è una funzione di uso generale offerta della libreria standard di input/output
• Nell’esempio, essa stampa sul monitor (lo standard output) semplicemente la sequenza di caratteri: Hello world!
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 21
Esempio: somma.c#include <stdio.h>#include <stdlib.h>
int main() /* somma due numeri interi */{
int num1, num2, somma;
printf ("inserire num1: ");scanf ("%d", &num1);
printf ("inserire num2: ");scanf ("%d", &num2);
somma = num1 + num2;printf ("num1 + num2 = %d\n", somma);
return EXIT_SUCCESS;}
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 22
Esempio: somma.c#include <stdio.h>#include <stdlib.h>
int main() /* somma due numeri interi */{
int num1, num2, somma;
printf ("inserire num1: ");scanf ("%d", &num1);
printf ("inserire num2: ");scanf ("%d", &num2);
somma = num1 + num2;printf ("num1 + num2 = %d\n", somma);
return EXIT_SUCCESS;}
dichiarazione di variabili intere
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 23
Esempio: somma.c#include <stdio.h>#include <stdlib.h>
int main() /* somma due numeri interi */{
int num1, num2, somma;
printf ("inserire num1: ");scanf ("%d", &num1);
printf ("inserire num2: ");scanf ("%d", &num2);
somma = num1 + num2;printf ("num1 + num2 = %d\n", somma);
return EXIT_SUCCESS;}
input di un intero (input formattato)
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 24
Esempio: somma.c#include <stdio.h>#include <stdlib.h>
int main() /* somma due numeri interi */{
int num1, num2, somma;
printf ("inserire num1: ");scanf ("%d", &num1);
printf ("inserire num2: ");scanf ("%d", &num2);
somma = num1 + num2;printf ("num1 + num2 = %d\n", somma);
return EXIT_SUCCESS;}
somma e assegnazione
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 25
Esempio: somma.c#include <stdio.h>#include <stdlib.h>
int main() /* somma due numeri interi */{
int num1, num2, somma;
printf ("inserire num1: ");scanf ("%d", &num1);
printf ("inserire num2: ");scanf ("%d", &num2);
somma = num1 + num2;printf ("num1 + num2 = %d\n", somma);
return EXIT_SUCCESS;}
stampa del risultato (output formattato)
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 26
Variabili e dichiarazioni
• Per poter essere utilizzate da un’istruzione, tutte le variabili di un programma C devono essere dapprima dichiarate
• Una dichiarazione stabilisce il tipo e il nomedi una o più variabili, come ad esempio: int numero;
• Il tipo di dato determina la natura della variabile, ovvero il modo in cui verrà trattata nelle successive operazioni
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 27
Variabili ed espressioni• L’istruzione
numero = numero * 20;
rappresenta di fatto la traduzione di due operazioni logiche distinte
• Dapprima viene valutata l’espressione a destra del segno =
• Il risultato di tale espressione è poi assegnatoalla stessa variabile numero, che viene dunque sovrascritta:
numero ← numero * 20;
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 28
Input e output formattato
• scanf () e printf () consentono di leggere e stampare dati formattati
• La funzione scanf () legge un dato dalla tastiera (lo standard input) e ne scrive il valore in una variabile (o locazione in memoria)
• Esse operano in modo diverso a seconda del tipo dei dati da manipolare (numeri interi, numeri floating point, stringhe di caratteri, singoli byte ecc.)
• L’input/output formattato in C è molto potente!
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 29
Funzioni e argomenti• Un metodo per comunicare dati alle funzioni
è quello di fornire ad esse una lista di valori, detti argomenti
• Le parentesi che seguono il nome della funzione racchiudono tale lista, come per:scanf ("%d", &numero);
• Esistono funzioni che non si aspettano argomenti: nell’esempio, main () ha la lista di argomenti vuota
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 30
Esempio: potenza.c#include <stdio.h>#include <stdlib.h>/* elevamento a potenza con moltiplicazioni successive */int main(){
int base, esponente, potenza, contatore;printf ("inserire base: ");scanf ("%d", &base);printf ("inserire esponente: ");scanf ("%d", &esponente);potenza = 1;contatore = 0;while (contatore < esponente){
potenza = base * potenza;contatore = contatore + 1;
}printf ("potenza = %d\n", potenza);return EXIT_SUCCESS;
}
struttura di controllo: ciclo while
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 31
Strutture di controllo• L’esempio precedente rappresenta una
possibile implementazione del calcolo dell’elevamento a potenza (esponente nonnegativo!)
• Il ciclo while è una struttura di controllo, il cui diagramma di flusso è:
Y
N
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 32
Strutture di controllo• Il costrutto: while (contatore < esponente){
potenza = base * potenza;contatore = contatore + 1;
}è un semplice ciclo iterativo
• Dapprima viene valutata la condizionecontatore < esponente
• Se tale espressione risulta vera, allora il blocco di istruzioni racchiuse tra le parentesi graffe viene eseguito e, alla fine, la condizione viene valutata di nuovo (iterazione)
Fondamenti di Informatica - La programmazione in linguaggio C
© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 33
Strutture di controllo
• Il ciclo while viene così ripetuto fino a che (while) la condizionecontatore < esponente è ancora vera
• Nell’esempio, le istruzioni interne al ciclo vengono eseguite un numero di volti pari al valore dell’esponente