Lezione 10 L`arte della programmazione
Transcript
Lezione 10 L`arte della programmazione
Lezione 10 Linguaggi di programmazione: il C ?Le variabili e le costanti ?L’assegnazione ?Gli operatori ?La documentazione ?L’input/output L’arte della programmazione ? La soluzione di un problema tramite un programma è un procedimento che non si esaurisce solo nello scrivere linee di codice in un dato linguaggio di programmazione, ma comprende una fase di progetto che precede e di verifica che segue la scrittura del codice 1 L’arte della programmazione ? Definizione del problema ? Algoritmo per la soluzione del problema ? Codifica ? Debugging ? Validazione ? Documentazione ? Manutenzione Definizione del problema ? Definizione degli ingressi e delle uscite ? quali variabili ? quale dominio per ogni variabile ? Risoluzione delle ambiguità ? Scomposizione in problemi più semplici 2 Algoritmo ? Soluzione in pseudocodice ? Soluzione in diagramma a blocchi strutturato Codifica ? Traduzione dell’algoritmo in istruzioni del linguaggio di programmazione 3 Debugging ? Correzione degli errori sintattici e semantici ? Errori sintattici ? espressioni non valide o non ben formate nel linguaggio di programmazione ? Errori semantici ? comportamento non aderente alle aspettative/alla intenzionalità del programmatore Validazione ? Test su tutte le condizioni operative del programma ? Caso degli input estremi (vettori di dimensione 0 o 1, variabili nulle) 4 Documentazione ? Inserimento di commenti esplicativi nelle varie parti del programma per facilitarne la comprensione dopo molto tempo dalla sua stesura o per terze persone Manutenzione ? Modifica del programma per soddisfare il cambiamento delle specifiche con cui deve operare 5 Struttura di un programma ? Un algoritmo rappresentato da un diagramma a blocchi strutturato può essere tradotto in una serie di espressioni del linguaggio C ? Il C possiede 32 parole chiave per definire il tipo dei dati e le istruzioni di controllo ? Operazioni più complesse ma di uso comune sono realizzate tramite funzioni rese disponibili da apposite librerie Struttura di un programma ? I blocchi BEGIN e END sono rappresentati in C come: void main(){ … } ? Un programma deve essere descritto dentro il blocco main ? Un blocco di istruzioni è racchiuso da {} ? Una istruzione è terminata da ; 6 Le costanti e le variabili ? Le variabili sono dichiarate indicandone il tipo e il nome type name; ? I tipi possibili in C sono: ? char: usato per rappresentare le lettere ? int: usato per rappresentare gli interi ? float: usato per rappresentare i numeri in virgola mobile ? Es: ? int num; ? char my_character; Il nome delle variabili ? Il nome di una variabile è una sequenza di: ? caratteri alfabetici maiuscoli o minuscoli ? numeri (non come primo carattere) ? il carattere ‘_’ (si usa al posto dello spazio) Valido Non Valido risultato_max carta23 ilMioConto %conto# max risultato variabile.di.interesse una-citta’ il/risultato 3Identificativo 7 Le costanti ? Premettendo il qualificatore const ai vari tipi di variabile si ottengono le costanti const int numero_elementi=20; ? Nota: ? alle costanti è possibile attribuire un valore solo al momento della dichiarazione, cioè quando la si introduce per la prima volta insieme al suo tipo ? non è più possibile cambiarne il valore in alcun modo per tutto il resto del programma Constanti e variabili ? Tutte le costanti e le variabili vanno dichiarate all’inizio del blocco in cui sono utilizzate ? Es: void main(){ printf(“stampa”); int a; /*ERRORE esiste printf prima di int a;*/ a=3; } 8 Char ? E’ usato per rappresentare i caratteri ? Occupa 1 byte ? Può assumere 256 valori distinti ? Si assegna come: char nome=‘c’; ? cioè si mette fra apici singoli un solo carattere Int ? Si usa per rappresentare gli interi con segno ? Occupa 2 byte (in genere) ? Può assumere un valore compreso tra -32.000 e +32.000 ? Si assegna come: int anno_nascita=1980; 9 Float ? Si usa per rappresentare numeri decimali in virgola mobile ? Occupa (in genere) 4 byte ? Si assegna come: float pi=3.4145; float miaVar=1.2e-5; ? si può cioè usare la notazione scientifica: ? 1.2e-5 significa mantissa=1.2 e=esponente esponente=-5 cioè 1.2e-5= 0.000012 ? Nota: si possono scrivere numeri con notazione scientifica ma in forma non normale, cioè con la mantissa qualsiasi (anche maggiore di uno) L’assegnazione ? L’assegnazione viene dichiarata tramite l’operatore ‘=‘ ? ad una variabile si può assegnare ? un valore (es. a=4;) ? il valore di una altra variabile (es. b=a;) ? il risultato di una espressione (c=a+b*2;) 10 Vettori ? Un insieme di valori tutti dello stesso tipo può essere memorizzato ed elaborato tramite un dato di tipo vettore ? un vettore si dichiara specificando il tipo di elementi, un nome per la variabile ed il numero massimo di elementi che pensiamo di dover memorizzare ? si usa la seguente sintassi: tipo nome[dimensione]; ? Es: ? int insieme[10]; ? char nome[100]; Vettori ? Un vettore può essere inizializzato così come lo possono essere le variabili ? per farlo si devono indicare tutti i valori fra parentesi graffe separati da virgole ? la sintassi è: tipo nome[num]={val1,val2,val3}; tipo nome[]={val1,val2,val3}; ? nel caso di inizializzazione si può non specificare il numero di elementi che viene calcolato automaticamente contando quanti elementi si usano per l’inizializzazione ? Es: ? int vec[]={1,4,2,8,5,6,2,43,567,3,23}; ? char cvec[]={‘e’,’s’,’e’,’m’,’p’,’i’,’o’}; 11 Vettori ? I vettori non sono dei dati di tipo “primitivo” ? questo significa che non si possono utilizzare gli operatori del linguaggio sui vettori ? In particolare: ? non è possibile usare l’assegnazione • int a[3]={1,2,3}; int b[3]=a; ? non è possibile farci operazioni • int a[3]={1,2,3}; int b[3]={4,5,6}; a+b; ? non è possibile usare operatori di confronto • int a[3]={1,2,3}; int b[3]={4,5,6}; a<b; Stringhe ? Le parole o le frasi sono dei vettori di caratteri in cui l’ultimo carattere è equivalentemente uno fra ? il numero 0 ? il carattere ‘\0’ ? L’inizializzazione per le stringhe è diversa cheda quella per i vettori ? la sintassi è: tipo nome[]=“frase di inizializzazione”; ? Esempio: ? char parola[]=“il mio programma”; 12 Stringhe ? Nota: le dimensioni del vettore se date esplicitamente devono poter contenere tutti i caratteri della frase ? char vparola[3]=“programma”; ? /*vparola non contiene niente di significativo*/ Gli operatori ? Operatori aritmetici: + (somma) - (sottrazione) * (moltiplicazione) / (divisione) % (resto o modulo) 13 Gli operatori ? Operatori relazionali: == (ugualianza) != (diversità) > (maggiore) >= (maggiore o eguale) < (minore) <= (minore o eguale) Operatori ? Operatori logici: && (and) || (or) ! (not) 14 Operatori ? Operatori con assegnazione += (somma) -= (sottrazione) *= (moltiplicazione) /= (divisione) ? Il loro significato è: ? x+=2 equivale a x=x+2 ? x/=2 equivale a x=x/2 Operatori ? Operatori di incremento e decremento ++ (incremento) -- (decremento) ? Il loro significato è: ? x++ equivale a x=x+1 ? x-- equivale a x=x-1 15 Operatori ? Nota: gli operatori di incremento/decremento possono essere utilizzati come prefisso o postfisso di una variabile ? se si usa come postfisso il valore viene incrementato dopo l’assegnazione, altrimenti prima ? Es: ? x=2; y=x++; allora y=2 e x=3 ? x=2;y=++x; allora y=3 e x=3 Operatori ? Operatori bit a bit & (and) | (or) ^ (xor) << (shift a sinistra dell’operando di sinistra di un numero di bit specificato dall’operando di destra) >> (shift a destra) 16 La documentazione ? I commenti si inseriscono fra coppie /* testo */ ? anche su più righe /* testo uno testo due testo tre*/ Le librerie ? Chi realizza un compilatore (il programma che permette di passare dal programma scritto con un linguaggio di alto livello ad uno scritto in modo comprensibile per il calcolatore) fornisce anche una serie di programmi già pronti per eseguire i compiti più frequenti o di basso livello (cioè di interazione con l’hardware) ? questi programmi sono raccolti insieme in pacchetti chiamati librerie 17 Librerie ? Per utilizzare queste funzioni si procede nel modo seguente: ? come prima istruzione in un programma si scrivono tutte le librerie che si pensa di usare: #include <nomelibreria1.h> #include <nomelibreria2.h> ? dopo si possono utilizzare liberamente le funzioni definite in queste librerie in ogni punto del programma Librerie ? Le librerie più utilizzate sono: ? stdlib.h: per la funzione rand e varie altre cose basilari ? stdio.h: per input/output ? math.h: per funzioni matematiche avanzate (sin, exp) ? string.h: per manipolare stringhe ? Nota: il prefissostd significa standard 18 L’input/output ? Le istruzioni per acquisire o trasferire informazioni sono costituite da una serie di funzioni contenute in una libreria chiamata stdio.h ? Se se ne vuole fare uso (cioè sempre!) si deve includere la libreria nel seguente modo: #include<stdio.h> void main(){} Output ? Per visualizzare informazioni sullo schermo si usa l’istruzione printf ? il nome sta a indicare print f(ormattato) ? si usa nel seguente modo: printf(“Messaggio da stampare\n”); printf(“Il valore di x è %d”,x); 19 Output ? Il significato è il seguente: ? printf(“Messaggio da stampare\n”); ? stampa a video la stringa “Messaggio da stampare\n” e sostituisci a \n un ritorno a capo ? printf(“Il valore di x è %d”,x); ? come sopra ma con l’indicazione di sostituire a %d il valore contenuto in x e di rappresentarlo come numero decimale Output ? All’interno della stringa da stampare si possono inserire codici di formattazione preceduti da % o caratteri speciali preceduti da \ ? i caratteri con \ davanti sono caratteri speciali (come il ritorno a capo o il tabulatore) ? i codici di formattazione con % servono per indicare come rappresentare il contenuto di una variabile 20 Output ? Si possono visualizzare più variabili: printf(“Il valore di %s è %d”,str,x); ? conta la posizione all’interno della stringa ? cioè il primo % formatta la prima variabile data dopo la stringa Codici di formattazione ? I codici di formattazione sono: ? %c ? %s carattere stringa ? %d ? %f intero float ? \n ? \t ritorno a capo tabulatore ? I caratteri speciali sono: ? NOTA: non ci sono spazi tra il carattere % e ‘c’ o ‘s’ etc 21 Input ? Per acquisire informazioni dalla tastiera si usa la funzione scanf ? il nome significa scan f(ormattato), cioè scansiona (esamina) quanto segue e formattalo nel modo indicato ? la sintassi è un po’ più complicata del printf ? Esempi: scanf(“%d”,&num); scanf(“%f”,&num); scanf(“%s”,str); Input ? Il significato è il seguente ? scanf(“%d”,&num); ? scansiona la riga che viene scritta da tastiera ? (fermati cioè dopo che è stato premuto il tasto invio) ? considera (formatta) ciò che è stato scritto come un “%d”= numero intero ? assegna questo numero alla variabile num ? Nota: si deve premettere il simbolo ‘&’ al nome della variabile 22 Input ? Solo nel caso in cui stiamo acquisendo una stringa allora non si deve premettere il caratter ‘&’ al nome della variabile stringa ? Es: scanf(“%s”,str); ? Nota: la stringa deve essere sufficientemente grande da contenere quanto digitato Esempi si scrittura e lettura dati ? Scrivere: ? Oggi è il giorno x del mese y ? la somma di x e y è z 23 Esercizi ? Scrivere un programma che: ? stampi la frase “Ciao Mondo” ? stampi il risultato della somma di due numeri ? scrivere il proprio nome e cognome ? prenda in ingresso i dati anagrafici di una famiglia ? calcoli l’area di varie figure geometriche ? risolva un equazione di 2°grado 24