Programmazione strutturata Il teorema di Jacopini Bohn afferma che qualunque algoritmo può essere descritto utilizzando esclusivamente tre strutture fondamentali ( dette anche strutture di controllo): La struttura sequenziale La struttura condizionale (o di selezione) La struttura iterativa Un linguaggio di programmazione che permette di utilizzare queste strutture è detto strutturato. 15-19/10/2001 Informatica per la Fisica II 1
La struttura Sequenziale Descrizione Flow Chart pseudocodifica Rappresenta la sequenza di azioni elementari direttamente eseguibili una di seguito all altra Istr 1 Istr 2 Esegui Istr_1 Esegui Istr_2 Es. Linguaggio C A=12; B=14; C=A+B; 15-19/10/2001 Informatica per la Fisica II 2
La struttura Condizionale Descrizione Flow Chart pseudocodifica Rappresenta la scelta, in base alla risposta di un Test, tra due esecuzioni poste in alternativa Istr 2 NO Test SI Istr 1 SE Test ALLORA Istr_1 ALTRIMENTI Istr_2 FINE SE Es. Linguaggio C if(test) Istr_1; else Istr_2; 15-19/10/2001 Informatica per la Fisica II 3
La struttura Condizionale Descrizione Flow Chart pseudocodifica Rappresenta la scelta, in base alla risposta di un Test, tra due esecuzioni poste in alternativa NO Test SI SE Test ALLORA Blocco A ALTRIMENTI Blocco B FINE SE B A Es. Linguaggio C if(test){ a=1; b=3; } else{ a=2; b=4; } 15-19/10/2001 Informatica per la Fisica II 4
La struttura Condizionale Descrizione Flow Chart pseudocodifica Rappresenta la scelta, in base alla risposta di un Test, tra due esecuzioni poste in alternativa NO Test SI SE Test ALLORA FINE SE Blocco A A Es. Linguaggio C if(test){ } a=1; b=3; 15-19/10/2001 Informatica per la Fisica II 5
La struttura Iterativa Descrizione Flow Chart pseudocodifica Rappresenta la ripetizione si una o più azioni fino a quando la risposta al test rimane affermativa; quando la risposta è negativa l iterazione termina Test SI NO QUANDO Test ESEGUI Blocco C FINE QUANDO Es. Linguaggio C C while (test){ a=1; b=2; } 15-19/10/2001 Informatica per la Fisica II 6
La struttura Iterativa Descrizione Flow Chart pseudocodifica Rappresenta la ripetizione si una o più azioni fino a quando la risposta al test rimane affermativa; quando la risposta è negativa l iterazione termina NO A Test RIPETI ESEGUI Blocco C FINO A QUANDO Test FINE RIPETI do{ Es. Linguaggio C a=1; SI b=2; }while (test); 15-19/10/2001 Informatica per la Fisica II 7
Il Linguaggio C Il C e' stato progettato da Dennis Ritchie su UNIX, e discende dal B, ideato nel 1970 da Ken Thompson, e il B a sua volta discende dal BCPL, sviluppato da Martin Richards. Nel 1983 l'istituto Nazionale Americano per gli Standard (ANSI) ha iniziato una standardizzazione del C, terminata nel 1989 con la definizione dell'ansi C, che differisce di poco dal C di K&R (B. W. Kernighan & D. M. Ritchie - Linguaggio C - 1978). In seguito e' stato aggiornato alla programmazione orientata agli oggetti, dando origine al C++. 15-19/10/2001 Informatica per la Fisica II 8
Caratteristiche del Linguaggio C Le principali caratteristiche del C sono: linguaggio strutturato; dimensioni ridotte; utilizzo frequente di chiamate a funzioni; programmazione a basso livello facilmente disponibile; implementazione dei puntatori ( puntatori per memoria, vettori, strutture e funzioni); 15-19/10/2001 Informatica per la Fisica II 9
Linguaggio C Identificatori (Identifier) Identificatori:tutti gli elementi di un programma C (variabili, funzioni, istruzioni ecc.) sono indicati attraverso degli identificatori cioè delle sequenze di lettere e cifre, in cui al primo posto vi è una lettera. caratteri (nondigit): _ a b c d e f g h i j k l m o p q r s t u v w x y z A B C D E F G H I J K L M O P Q R S T U V W X Y Z numeri (digit): 0 1 2 3 4 5 6 7 8 9 Es. a, abc, somma, differernza,. Identificatori Riservati e Predefiniti; Es. main, printf, scanf, Parole chiave (ca. 30) 15-19/10/2001 Informatica per la Fisica II 10
Linguaggio C Parole Chiave (Keywords) Parole chiave dell ANSI C auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while (ANSI X3.159-1989, American National Standard for Information Systems Programming Language C) 15-19/10/2001 Informatica per la Fisica II 11
Linguaggio C Il Primo Programma Il Classico primo programma in C e': /* HelloWorld.c :Esempio di programma in C */ #include <stdio.h> void main() { printf( Hello World\n ); } /* Fine del programma */ I commenti vanno sempre inclusi tra /* (inizio commento) e */ (fine commento). Non si puo' inserire un commento in un altro #include = leggi anche nel file stdio.h che contiene le definizione delle funzioni di input/output. Ogni programma C e C++ deve contenere una e una sola funzione main(). Funzione di scrittura sullo Standard Output 15-19/10/2001 Informatica per la Fisica II 12
Linguaggio C La compilazione Una volta che il programma HelloWorld è stato scritto con un Text Editor e salvato in un file HelloWorld.c il programma deve essere compilato. Sono disponibili molti compilatri C/C++. In questo corso useremo: Windows 95/98/NT/2000/XP: Linux: Microsoft Visual C++ gcc (GNU Compiler Collection) gcc è stato realizzato dalla Free Software Foundation. 15-19/10/2001 Informatica per la Fisica II 13
Linguaggio C La compilazione in ambiente Linux Per compilare il programma HelloWord.c usare il comando: []$ gcc HelloWorld.c Se il compilatore trova errori (in genere syntax error: errori di battitura, errori di sintassi delle parole chiave o ";" omessi), questi vengono identificati e visualizzati; in caso contrario, viene creato il file eseguibile: a.out Il compilatore non identifica eventuali errori di logica del programma. 15-19/10/2001 Informatica per la Fisica II 14
Linguaggio C La compilazione in ambiente Linux Per far eseguire il programma e' sufficiente scrivere: []$./a.out Il compilatore gcc accetta molte opzioni: Es. []$gcc ohelloworld HelloWorld.c Crea il file eseguibile HelloWorld al posto di a.out; []$./HelloWorld 15-19/10/2001 Informatica per la Fisica II 15
Linguaggio C La compilazione in ambiente Linux La compilazione del programma C avviene attraverso le seguenti fasi: un preprocessore che accetta il codice sorgente come input ed e' resposabile della: o rimozione di commenti o interpretazione delle direttive per il preprocessore denotate da "#". Es. #include <math.h> - standard library maths file. #include <stdio.h> - standard library I/O file (Il file con suffisso.h è solitamente chiamato header file). 15-19/10/2001 Informatica per la Fisica II 16
Linguaggio C La compilazione in ambiente Linux il compilatore C che traduce il codice sorgente ricevuto dal preprocessore in codice assembly. l' assembler che crea il codice oggetto (in UNIX i file con il suffisso.o sono i file in codice oggetto, che corrispondono ai file.obj in Windows. il link editor che combina le funzioni definite in altri file sorgenti o definite in librerie, con la funzione main() per creare il file eseguibile. Infatti molte delle funzioni (ad esempio, funzioni di I/O, di manipolazione di stringhe o matematiche),ma non sono incluse nel C. Il C utilizza delle librerie standard di funzioni per coprire le utilita' mancanti. 15-19/10/2001 Informatica per la Fisica II 17
Linguaggio C - Struttura di un programma C Un Programma c presenta la seguente struttura generale : 1. Comandi per il preprocessore (direttive) 2. La funzione main () 3. Il blocco della funzione main racchiusa tra {} All interno del blocco principale delle funzione main si possono distinguere due parti: main () { Una parte dichiarativa o Variabili o Costanti Una parte esecutiva o Chiamate a funzioni i/o, elaborazione di espressioni etc.. } 15-19/10/2001 Informatica per la Fisica II 18
Il Lingiaggio C Variabili e Costanti Variabili: le variabili sono celle di memoria che possono cambiare il loro valore durante l esecuzione del programma. Costanti: celle di memoria il cui contenuto non varia durante l esecuzione del programma Per dichiarare variabili e costanti occorre anche specificare: - quante celle di memoria vanno usate - come verranno chiamate nel programma - il Tipo di dato che conterranno 15-19/10/2001 Informatica per la Fisica II 19
Il Lingiaggio C Variabili e Costanti In C le la sintassi usata per dichiarare una variabile è: tipo nome_var; Es: int indice; Per dichiarare una costante si usa la sintassi: const tipo nome_var = valore; Es : const int indice = 1; 15-19/10/2001 Informatica per la Fisica II 20
Linguaggio C Tipi di Dati I principali tipi di dati definiti nel linguaggio C sono: Tipo Byte(bit) Sinonimi Min-Max int 2 (16)* short, short int, signed short int 32,768-32,767 unsigned int 2 (16) unsigned short int 0-65535 char 1 (8) signed char 128-127 unsigned char 1 (8) 0 to 255 long 4 (32) long int, signed long int 2,147,483,648-2,147,483,647 unsigned long 4 (32) unsigned long int 0-4,294,967,295 float 4 (32) 3.4E +/- 38 double 8 (64) 1.7E +/- 308 long double 10 (80) 1.2E +/- 4932 * Dipende dal tipo di macchina 15-19/10/2001 Informatica per la Fisica II 21
Linguaggio C Esempio: Somma.c /********************************************* PROGRAM: scambio.c DESCRIPTION: programma per lo scambio dei valori tra due numeri INPUT: a,b variabili di tipo intero OUTPUT: a,b AUTHORS: GT DATE: 15/10/2001 Rev.: **********************************************/ #include <stdio.h> main(){ int a,b; int s=0; } scanf( %d %d,&a,&b); s=a; a=b; b=s; printf( a=%d b=%d\n,a,b); 15-19/10/2001 Informatica per la Fisica II 22
Linguaggio C- printf() e scanf() Output con printf(): Funzioni di Input e output standard <stdio.h> Definizione : int printf(formato,argomenti); Esempio printf.c 15-19/10/2001 Informatica per la Fisica II 23
Linguaggio C Sequenze di Escape Combinazioni di caratteri composte da backslash \ seguita da uno o più caratteri sono dette Escape Sequences. Sono di solito usate per specificare alcune particolari funzioni di terminali e stampanti. Escape Character ASCII Sequence Value \a Alert/bell 7 \b Backspace 8 \f Formfeed 12 \n Newline 10 \r Carriage return 13 \t Horizontal tab 9 \v Vertical tab 11 \" Double quotation 34 \' Single quotation 39 \\ Backslash 92 15-19/10/2001 Informatica per la Fisica II 24