Strutture di controllo

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Strutture di controllo"

Transcript

1 Strutture di controllo abbiamo visto if-else e while domande da punto di vista teorico: 1. algoritmi NON codificabili con if-else e while? 2. strutture di controllo più potenti di quelle viste sinora? 3. strutture di controllo in grado di codificare qssi algoritmo? macchina di Von Neumann realizza istruzioni if-else e while mediante istruzioni per testare contenuto di un registro modificare il valore del registro Program Counter a seconda del valore testato in questo riferimento formulato celebre teorema di Boehm-Jacopini. istruzioni if-else e while equivalenti a istruzioni della macchina di Von Neumann che può manipolare registro Program Counter istruzioni if-else e while sono complete bastano per codificare qualsiasi algoritmo per praticità e convenienza si usano però molte altre strutture di controllo quarto fascicolo - 1 -

2 Il costrutto switch Istruzioni di selezione codifica scelta tra istruzioni in base a valore di variabile o espressione Esempio: scandisce un testo, conta quanti caratteri cifre numeriche, di separazione (spazi, segni di puteggiatura, a capo) di tipo diverso. char c; int n_cifre, n_separatori, n_altri; c =.; switch (c) { case '0': case '1':.. case '9': n_cifre++; /* equivale a n_cifre = n_cifre + 1; */ break; case ' ': case '\n' : case ';' : case ':' : case ', ': n_separatori++; break; default: n_altri++; sintassi parola chiave switch espressione fra parentesi tonde () sequenza di istruzioni case fra graffe ogni istruzione case consiste in: sequenza di clausole case, ognuna composta da parola chiave case espressione due punti : sequenza di istruzioni (ognuna col suo ;) al posto dell ultima istruzione case può esserci istruzione default parola default sequenza di istruzioni (ognuna col suo ; ) espressioni tra parentesi deve essere di tipo integral - 2 -

3 la macchina valuta espressione se c è clausola con quel valore esegue tutte istruzioni successive a clausola con valore corrispondente per evitare esecuzione a cascata si mette istruzione break fa saltare istruzioni successive e passare a istruzione successiva a switch se non c è clausola con quel valore se c è clausola default eseguita sua istruzione altrimenti effetto della switch è nullo precauzioni nell uso del costrutto switch: evitare ambiguità: valori delle espressioni case costanti e diversi (esclusività dei casi) presenza istruzione default assicura trattamento completo dei diversi casi non tralasciare break dopo ultima istruzione case non indispensabile, ma facilita aggiunta di altre istruzioni case Esempio: programma legge nome dell utente (carattere # termina nome), trasforma in melodia associando ogni carattere a una nota basato su corrispondenza tra resti della divisione per 7 e note della scala /* Programma Melodia dal tuo nome */ #include <stdio.h> main() { char C; int resto; printf("inserisci il primo carattere del tuo nome\n"); scanf("%c", &C); while (C!= '#') { resto = C % 7; switch (resto) { case 0: printf("il carattere %c corrisponde alla nota 'do'\n", C); break; case 1: printf("il carattere %c corrisponde alla nota 're'\n", C); break; case 2: printf("il carattere %c corrisponde alla nota 'mi'\n", C); break; case 3: printf("il carattere %c corrisponde alla nota 'fa'\n", C); break; case 4: printf("il carattere %c corrisponde alla nota 'sol'\n", C); case 5: break; printf("il carattere %c corrisponde alla nota 'la'\n", C); break; case 6: printf("il carattere %c corrisponde alla nota 'si'\n", C); break; printf("inserisci il prossimo carattere del tuo nome # termina il programma"); scanf("%c", &C); - 3 -

4 Alternative multiple istruzioni if-else annidate, in cui la successiva è parte else della precedente anche nel linguaggio parlato, spesso regole espresse con se C1 allora A1 altrimenti, se C2 allora A2 altrimenti, se C3 allora... altrimenti An Esempio: dato numero n, se ha divisori primi <15 stampa il più piccolo, altrimenti stampa messaggio che lo segnala if (n % 2 == 0) printf("%d è pari", n); else if (n % 3 == 0) printf("%d è multiplo di 3", n); else if (n % 5 == 0) printf("%d è multiplo di 5", n); else if (n % 7 == 0) printf("%d è multiplo di 7", n); else if (n % 11 == 0) printf("%d è multiplo di 11", n); else if (n % 3 == 0) printf("%d è multiplo di 13", n); else printf ("il numero %d non ha divisori primi < 15", n); struttura inerentemente lineare: si scrive meglio su una solo colonna if (n % 2 == 0) printf("%d è pari", n); else if (n % 3 == 0) printf("%d è multiplo di 3", n); else if (n % 5 == 0) printf("%d è multiplo di 5", n); else if (n % 7 == 0) printf("%d è multiplo di 7", n); else if (n % 11 == 0) printf("%d è multiplo di 11", n); else if (n % 3 == 0) printf("%d è multiplo di 13", n); else printf ("il numero %d non ha divisori primi < 15", n); - 4 -

5 Il ciclo for Istruzioni cicliche casi con numero ripetizioni noto al momento dell esecuzione con while si fa così VariabileDiConteggio = ValoreIniziale; while (VariabileDiConteggio <= ValoreFinale) { [Sequenza di istruzioni da ripetere]; VariabileDiConteggio = VariabileDiConteggio + 1; i = 0 ; while (i <= 9) { [Sequenza di istruzioni da ripetere]; i = i + 1; con il ciclo for for (VariabileDiConteggio = ValoreIniziale; VariabileDiConteggio <= ValoreFinale; VariabileDiConteggio = Variabile di Conteggio + 1) { /* Sequenza di istruzioni da ripetere */ istruzione VariabileDiConteggio = VariabileDiConteggio + 1 abbreviabile con VariabileDiConteggio++ operatore di autoincremento ++ operatore di autodecremento questo uso di for si può generalizzare cambiando relazione di confronto con valore finale passo dell incremento Esempio: inverte una sequenza di caratteri di lunghezza massima 100 /* Programma InvertiSequenza */ #include <stdio.h> #define LunghezzaSequenza100 main() { int Contatore; int Memorizzazione[LunghezzaSequenza]; for (Contatore = 0; Contatore < LunghezzaSequenza; Contatore++) scanf("%d", &Memorizzazione[Contatore]); for (Contatore = LunghezzaSequenza 1; Contatore >= 0; Contatore ) printf("%d", Memorizzazione[Contatore]); - 5 -

6 Esempio: conta # occorrenze di ogni lettera alfabetica in testo di parole separate da spazi (senza segni interpunzione) e terminato da carattere speciale \0 /* Programma ContaCaratteri */ #include <stdio.h> #define DimVettoreFrequenze 123 main() { char Dato, Cursore; int FrequenzaCaratteri[DimVettoreFrequenze]; /* Inizializza array di conteggio FrequenzaCaratteri. Considera solo lettere alfabetiche */ for (Cursore = 'A'; Cursore <= 'Z'; Cursore++) FrequenzaCaratteri[Cursore] = 0; for (Cursore = 'a'; Cursore <= 'z'; Cursore++) FrequenzaCaratteri[Cursore] = 0; scanf ("%c", &Dato); /* Inizia la lettura del testo */ while (Dato == '\n' Dato == '\r') scanf ("%c", & Dato); /* ciclo precedente salta caratteri di a capo tra un carattere e l'altro */ while (Dato!= '\0') { if (!(Dato == ' ')) /* Se il dato letto è uno spazio esso deve essere semplicemente ignorato */ if (Dato < 'A' Dato > 'z' (Dato > 'Z' && Dato < 'a')) /* ammessi solo caratteri lettere dell'alfabeto */ printf ("Il testo contiene dei caratteri non ammessi"); else FrequenzaCaratteri[Dato] = FrequenzaCaratteri[Dato] + 1; scanf("%c", &Dato); while (Dato == '\n' Dato == '\r') scanf ("%c",& Dato); for (Cursore = 'A'; Cursore <= 'Z'; Cursore++) /* stampa totali lettere maiuscole */ printf ("Il carattere %c compare nel testo %d volte \n", Cursore, FrequenzaCaratteri[Cursore]); for (Cursore = 'a'; Cursore <= 'z'; Cursore++) /* Stampa totali lettere minuscole */ printf ("Il carattere %c compare nel testo %d volte \n", Cursore, FrequenzaCaratteri[Cursore]); - 6 -

7 ciclo do-while sintassi del costrutto parola chiave do istruzione (o sequenza istruzioni tra graffe) parola chiave while condizione fra () e infine ; NB: il corpo del ciclo viene eseguito almeno una volta ripetizione cessa quando condizione diventa falsa Esempio: leggere sequenza caratteri (senza alcun a capo ) terminata da %, memorizzare (col %) nell array Testo #define LunghezzaMassima 100 char dato, Testo[LunghezzaMassima]; Contatore = 0; do { do scanf("%c", &Dato); while (Dato == '\n' Dato == '\r') ; /* Il ciclo precedente salta i caratteri di a capo */ Testo[Contatore] = Dato; Contatore = Contatore + 1; while (Dato!= '%' && Contatore < LunghezzaMassima); if (Contatore == LunghezzaMassima && Dato!= '%') printf("la sequenza è troppo lunga"); istruzione goto trasferimento esplicito e incondizionato del flusso di esecuzione scanf("%d"%d", &x, &y); if (y == 0) goto error; printf("%f\n", x/y); error: printf("y non può essere uguale a 0\n"); incompatibile con principi della programmazione strutturata se ne sconsiglia fortemente l uso - 7 -

8 istruzioni break e continue break fa uscire da corpo di un ciclo ( termina ripetizione) o da istruzione switch continue interrompe iterazione corrente di un ciclo dà inizio a iterazione successiva continue può stare solo in cicli while, do o for Esempio: ciclo con elaborazioni su una serie di valori non più di N, assunti successivamente dalla variabile intera a saltando i valori negativi interrompendo l'elaborazione al primo valore nullo incontrato for (i = 0 ; i < N ; i++ ) { scanf( immettere un intero > %d, &a); if (a < 0) continue; if (a = 0) break;. /*elaborazione degli elementi positivi */ - 8 -

9 Funzioni e procedure Motivi per introdurre sottoprogrammi riusabilità (scrivere una sola volta codice usato più volte) astrazione (esprimere in modo sintetico operazioni complesse) estendibilità del linguaggio (non tutte operazioni predefinite di solito solo =, ==.!=, ) Esempio #define MaxNumFatture 10000; #define MaxNumCosti 10000; typedef struct { String Destinatario; int Importo; Data DataEmissione; DescrizioneFatture; typedef struct { String Destinatario; int Importo; Data DataSpesa; DescrizioneCosti; typedef struct { int NumFatture; DescrizioneFatture Sequenza[MaxNumFatture]; ElencoFatture; typedef struct { int NumCosti; DescrizioneCosti Sequenza[MaxNumCosti]; ElencoCosti;. ElencoFatture ArchivioFatture; ElencoCosti ArchivioCosti; int FatturatoTotale, SommaCosti, RisultatoDiGestione; con variabili ArchivioFatture o ArchivioCosti serviranno operazioni come Calcolo del fatturato complessivo, Calcolo della somma dei costi complessivi operazioni (facilmente) codificabili con istruzioni che conosciamo tuttavia piuttosto che il codice: FatturatoTotale = 0; for (Cont = 0; Cont < ArchivioFatture.NumFatture; Cont++) FatturatoTotale = FatturatoTotale + ArchivioFatture.Sequenza[Cont].Importo; SommaCosti= 0; for (Cont = 0; Cont < ArchivioCosti.NumCosti; Cont++) SommaCosti = SommaCosti + ArchivioCosti.Sequenza[Cont].Importo; RisultatoDiGestione = FatturatoTotale SommaCosti; - 9 -

10 ci piacerebbe di più scrivere un istruzione come la seguente RisultatoDiGestione = FatturatoTotale (ArchivioFatture) SommaCosti (ArchivioCosti); più astratto: mostra esclusivamente risultato desiderato nasconde operazioni eseguite per ottenerlo meccanismi per fare ciò chiamati sottoprogrammi assomigliano a interi programmi ma asserviti ad altri programmi per un sottoprogramma deve essere definito quale operazione astratta realizza come può essere identificato dal programma principale quali parametri coinvolge dati in ingresso come punto di partenza dei calcoli valori restituiti ai programmi che lo usano un sottoprogramma definito può essere utilizzato dal programma principale utilizzazione è detta chiamata (invocazione) del sottoprogramma In C due tipi di sottoprogrammi funzioni e procedure entrambi svolgono operazioni di interesse per il chiamante funzioni restituiscono un risultato al chiamante in modo diretto ed esplicito procedure NON restituiscono un risultato al chiamante in modo esplicito

11 Struttura completa di un programma C Finora visto parte di direttive programma principale (main), con sue parti dichiarativa ed esecutiva Aggiungiamo ora parte dichiarativa globale fra parte direttive e programma principale contiene dichiarazione elementi condivisi da programma principale e sottoprogrammi costanti, tipi, variabili. Esempio: se contiene int x; variabile x accessibile a programma principale e a sottoprogrammi definizioni di sottoprogrammi funzioni o procedure cominciando dal programma principale main programma principale e sottoprogrammi possono usare elementi dichiarati nella propria parte dichiarativa elementi dichiarati nella parte dichiarativa globale Domande: Perché dichiarare diversi elementi in diversi posti? quali elementi possono venire usati dai sottoprogrammi? troveranno risposta più avanti

12 Le funzioni matematicamente, tutte operazioni considerate finora in C sono funzioni dominio corrisponde a operandi/dati codominio corrisponde a valori calcolati sintassi della definizione di funzione testata (header); due parti fra parentesi graffe parte dichiarativa, detta parte dichiarativa locale parte esecutiva, detta corpo della funzione (il tutto chiamato blocco) testata contiene informazioni rilevanti per uso corretto del sottoprogramma tipo del risultato matematicamente, il codominio della funzione identificatore del sottoprogramma lista delle dichiarazioni dei parametri formali tra parentesi (), separati da, matematicamente, il dominio della funzione parametro identificatore del tipo del parametro (può essere qualsiasi, built-in o user-defined) identificatore del parametro parametri detti formali non hanno valore proprio, rappresentazio argomenti della chiamata della funzione tipo del risultato built-in o user-defined NON array SÌ puntatore a qualsiasi tipo esempi di testate di funzioni: int FatturatoTotale(ElencoFatture par) /* Il tipo boolean definito tramite costruttore enum: typedef enum {false, true boolean; */ boolean Precede(StringaCaratteri par1, StringaCaratteri par2) /* Stabilisce se par1 appartiene all'insieme di interi contenuto in par2 */ boolean Esiste (int par1, SequenzaInteri par2) /* restituisce (un puntatore a) la matrice inversa di quella ricevuta (tramite puntatore) nel parametro */ MatriceReali10Per10 *MatriceInversa (MatriceReali10Per10 *par)

13 dichiarazioni locali oggetti necessari per operazione del sottoprogramma ma inutili al programma principale stesse regole della parte dichiarativa di un programma nuove dichiarazioni di tipi di costanti di altri sottoprogrammi (prototipi) variabili dichiarate qui dette variabili locali o proprie del sottoprogramma corpo della funzione parte esecutiva costruita con stesse regole del programma principale in aggiunta contiene istruzione return espressione; valore dell espressione diventa risultato restituito al chiamante visto dal chiamante, valore restituito è il valore dell espressione di chiamata termina esecuzione del sottoprogramma, restituisce controllo al chiamante NB possono esserci più istruzioni return a ogni chiamata se ne esegue solo una se istruzione di return assente dal corpo della funzione o nessuna di quelle presenti eseguita sottoprogramma termina quando arriva a risultato della funzione indefinito segnalazione di errore Esempi: int FatturatoTotale (ElencoFatture parametro) { int Totale, Cont; Totale = 0; for (Cont = 0; Cont < parametro.numfatture; Cont++) Totale = Totale + parametro.sequenza[cont].importo; return Totale; /* calcola radice quadrata intera, i.e., max intero il cui quadrato <= par NB se par < 0 risultato 1 segnala uso improprio della funzione*/ int RadiceIntera (int par) { int cont; cont = 0; while (cont*cont <= par) cont = cont + 1; /* NB qui cont*cont > par, altrimenti while non terminerebbe */ return (cont 1);

14 Chiamata delle funzioni sintassi ispirata a notazione matematica una funzione, applicata a suoi argomenti, fornisce un valore del suo codominio nei programmi i valori denotati da espressioni chiamata di funzione sintatticamente è un espressione sintassi identificatore della funzione lista dei parametri attuali racchiusa fra parentesi tonde parametri attuali: valori degli argomenti ai quali applicata funzione ogni parametro è un espressione può contenere altra chiamata di funzione corrispondenza tra parametri formali e attuali determinata dall ordine primo formale primo attuale secondo formale secondo attuale etc. numero parametri attuali = numero parametri formali tipo dei parametri attuali compatibile con tipo dei formali Esempi: x = sin(y) cos(pigreco alfa); /* PiGreco indica valore costante π */ x = cos(atan(y) beta); x = sin(alfa); y = cos(alfa) sin(beta); z = sin(pigreco) + sin(gamma); RisultatoDiGestione = FatturatoTotale(ArchivioFatture) SommaCosti(ArchivioCosti); Det1 = Determinante(Matrice1); Det2 = Determinante(MatriceInversa(Matrice2)); TotaleAssoluto = Sommatoria(Lista1) + Sommatoria(Lista2); ElencoOrdinato = Ordinamento(Elenco); OrdinatiAlfabeticamente = Precede(nome1, nome2);

15 Prototipo delle funzioni funzione può essere chiamata solo se definita oppure dichiarata NB definizione e dichiarazione NON sono sinonimi definizione comprende testata + blocco (blocco = dichiarazioni locali + corpo) dichiarazione di funzione (detta prototipo) riporta la testata della funzione va posta nella parte dichiarativa globale o nella parte dichiarativa del main o nella parte dichiarativa propria dei sottoprogrammi che chiamano la funzione facilita controlli svolti dal compilatore parte dichiarativa del programma principale e di una funzione contengono quindi dichiarazioni di costanti dichiarazioni di tipo dichiarazioni di variabili prototipi di funzioni

16 Esecuzione delle funzioni e passaggio dei parametri comportamento della macchina astratta durante esecuzione funzioni Ci riferiamo a esempio /* Programma Contabilità */ /* Parte direttiva */ #include <stdio.h> #define MaxNumFatture 1000 /* Parte dichiarativa globale */ typedef char String [30]; typedef struct { String Indirizzo; int ammontare; Data DataFattura; DescrizioneFatture; typedef struct { int NumFatture; DescrizioneFatture Sequenza[MaxNumFatture]; ElencoFatture; main() { ElencoFatture ArchivioFatture1, ArchivioFatture2; int Fatt1, Fatt2, Fatt; /* Prototipo della funzione FatturatoTotale */ int FatturatoTotale(ElencoFatture parametro);. Fatt1 = FatturatoTotale(ArchivioFatture1); Fatt2 = FatturatoTotale(ArchivioFatture2); Fatt = Fatt1 + Fatt2;. /* Fine del main del programma Contabilità */ int FatturatoTotale (ElencoFatture parametro) { int Totale, Cont;. return Totale; NB: nel main prototipo di funzione FatturatoTotale perchè uso precede definizione parte dichiarativa globale: DescrizioneFattura e ElencoFatture tipi utilizzati sia da main sia da funzione

17 descrizione esecuzione con metafora di due macchine astratte una macchina principale per esecuzione main una asservita per esecuzione funzione entrambe dotate di proprio insieme di variabili detto ambiente o stato di esecuzione ambiente macchina principale contiene due variabili di tipo ElencoFatture, di nome ArchivioFatture1 e ArchivioFatture2 tre variabili di tipo int, Fatt1, Fatt2 e Fatt ambiente della macchina asservita (ambiente locale della funzione) una variabile di tipo ElencoFatture, di nome parametro due variabili intere, di nome Totale e Cont una ulteriore variabile per comunicare risultato al programma principale non esplicitamente referenziata, quindi anonima ma la immaginiamo con stesso identificatore della funzione e con tipo del risultato restituito a questa variabile assegnato valore dell espressione che segue istruzne return (nell esempio variabile Totale) effetto dell esecuzione di Fatt1 = FatturatoTotale (ArchivioFatture1);

18 macchina principale valutata espressione a destra del simbolo dell operatore di assegnamento = creata macchina asservita passaggio dei parametri copiatura valore parametro attuale nel corrispondente parametro formale ceduto il controllo alla macchina asservita (esecuzione macchina principale sospesa) esecuzione del corpo della funzione fino a return o a alla fine cella FatturatoTotale contiene valore controllo restituito a macchina principale preleva valore cella FatturatoTotale diventa valore dell espressione: FatturatoTotale (ArchivioFatture1) assegna valore a Fatt1. caso leggermente più complesso: x = sin(atan(y) acos(z)); effetto complessivo del calcolo uguale a quello del codice temp1 = atan(y); temp2 = acos(z); x = sin(temp1 temp2); (al solito variabili temp1 e temp2 assunte non impiegate altrove)

19 Le procedure non tutte operazioni interessanti descrivibili astrattamente da funzioni matematiche a volte si vuole effettuare qualche azione cambiare valore di variabili Esempi stampare elenco di fatture non c è alcun valore da calcolare va fatto in modo parametrico (diversi elenchi in diversi momenti) inserire nuova fattura in archivio di fatture preesistente aggiornamento di variabile, non calcolo di valore ordinare un array di interi a effetto: permutare valori presenti in a NON calcolare un valore di tipo array di interi si usa diverso tipo di sottoprogramma sottoprogramma procedurale o procedura funzione con tipo del risultato void void tipo predefinito fittizio, non possiede alcun valore nè operazione void usabile anche come tipo per parametri formali di sottoprogrammi senza parametri sintatticamente, chiamata di procedura è un istruzione identificatore della procedura elenco dei parametri attuali fra parentesi tonde (come per funzioni)

20 Esempio: operazione InserisciFattura /*Programma Contabilità */ #include<stdio.h> #define MaxNumFatture 1000 typedef struct { String Indirizzo; int ammontare; Data DataFattura; DescrizioneFatture; typedef struct { int NumFatture; DescrizioneFatture Sequenza[MaxNumFatture]; ElencoFatture; ElencoFatture ArchivioFatture; /* NB condivisi non solo tipi ma anche qsta variabile */ main() { Data DataOdierna; DescrizioneFatture Fattura1, Fattura2; void InserisciFattura(DescrizioneFatture Fattura); boolean Precede(Data Num1, Data Num2); /* Sequenza di istruzioni che leggono i dati di una fattura in Fattura1 */ InserisciFattura(Fattura1); /* Sequenza di istruzioni che leggono i dati di una fattura in Fattura2 */ if (Precede(Fattura2.DataFattura, DataOdierna)) InserisciFattura(Fattura2); void InserisciFattura(DescrizioneFatture Fattura) { if (ArchivioFatture.NumFatture == MaxNumFatture) printf("l'archivio è pieno.\n"); else { ArchivioFatture.NumFatture = ArchivioFatture.NumFatture + 1; ArchivioFatture.Sequenza[ArchivioFatture.NumFatture 1] = Fattura;

21 Esecuzione di questo esempio oltre ad ambiente principale e della procedura c è ambiente globale del programma contiene variabile ArchivioFatture di tipo ElencoFatture macchina esecutrice di InserisciFattura accede all ambiente globale modificandolo variabile ArchivioFatture è per la procedura una variabile globale al termine macchina asservita cede controllo alla principale senza produrre alcun risultato (effetto desiderato è modifica della variabile globale)

22 passaggio dei parametri per indirizzo finora visti due modi per i sottoprogrammi di produrre effetti desiderati 1. fornendo un valore come risultato del calcolo di una funzione 2. modificando contenuto di variabili globali rispetto al sottoprogramma altro modo: passaggio parametri per indirizzo permette di modificare valore dei parametri Esempio: con riferimento a procedura InserisciFattura facciamo inserimenti scegliendo sia la fattura sia l archivio soluzione naturale: rendere un parametro anche l archivio da aggiornare void InserisciFattura( DescrizioneFatture Fattura, ElencoFatture ArchivioFatture) { if (ArchivioFatture.NumFatture == MaxNumFatture) printf("l'archivio è pieno."); else { ArchivioFatture.NumFatture = ArchivioFatture.NumFatture + 1; ArchivioFatture.Sequenza[ArchivioFatture.NumFatture 1] = Fattura; NB: effetto della chiamata: InserisciFattura (Fattura1, ArchivioFatture5); valori di Fattura1 e di ArchivioFatture5 copiati nei parametri formali Fattura e ArchivioFatture esecuzione della procedura inserisce Fattura in ArchivioFatture (il parametro formale) ma non in ArchivioFatture5 operazione eseguita su parametro formale, non su quello attuale modifica di parametro attuale ottenibile in C 1. parametro formale definito di tipo puntatore a tipo del parametro attuale desiderato (e.g., ElencoFatture) 2. alla chiamata passato indirizzo (usando &) del parametro attuale desiderato che deve essere una variabile, NON generica espressione 3. nel corpo della funzione usato operatore di dereferenziazione per accedere a parametro attuale desiderato mediante suo indirizzo questo chiamato passaggio per indirizzo l altro modo (copiatura del valore del parametro attuale, non del suo indirizzo, in quello formale) chiamato passaggio per valore

23 Esempio rivisitato /*Programma Contabilità */ #include <stdio.h> main() { ElencoFatture ArchivioFatture5; /* ArchivioFatture5 è variabile locale del main. Appartiene all'ambiente del programma chiamante */ Data DataOdierna; DescrizioneFatture Fattura1, Fattura2; /* Prototipo della procedura InserisciFattura */ void InserisciFattura (DescrizioneFattureFattura, ElencoFatture *PointToArchivioFatture); /* Prototipo della funzione Precede */ boolean Precede(Data Num1, Data Num2); /* Sequenza di istruzioni che leggono i dati di una fattura in Fattura1 */ InserisciFattura(Fattura1, &ArchivioFatture5); /* Sequenza di istruzioni che leggono i dati di una fattura in Fattura2 */ if (Precede(Fattura2.DataFattura, DataOdierna) InserisciFattura(Fattura2, &ArchivioFatture5); /* NB passato valore di Fattura2 e indirizzo di ArchivioFatture5 */ /* Definizione della procedura InserisciFattura */ void InserisciFattura (DescrizioneFatture Fattura, ElencoFatture *PointToArchivioFatture) { if (PointToArchivioFatture > NumFatture == MaxNumFatture) printf("l'archivio è pieno.\n"); else { PointToArchivioFatture > NumFatture = PointToArchivioFatture > NumFatture + 1; PointToArchivioFatture > Sequenza[PointToArchivioFatture > NumFatture 1] = Fattura; Applicazione: uso della funzione scanf int dato;. scanf( %d, &dato); il secondo parametro attuale ha & perchè dev essere modificato: assume il valore letto

24 Aspetti avanzati nell uso dei sottoprogrammi Riepilogo sulla struttura di un programma C parte direttiva; parte dichiarativa globale che comprende: dichiarazioni di costanti dichiarazioni di tipi dichiarazioni di variabili prototipi di procedure e funzioni programma principale main definizioni di funzioni o procedure NB: procedure e programma main considerati casi particolari di funzioni testata del programma principale si può scrivere come void main (void) (vedremo che main può anche aver parametri) main deve esserci: esecuzione programmi inizia dal suo corpo blocco: nuovo tipo di istruzione Il concetto di blocco composto da due parti racchiuse tra graffe una parte dichiarativa (facoltativa); una sequenza di istruzioni. blocco può comparire ovunque sintassi preveda istruzione sequenze di istruzioni tra graffe nelle istruzioni composte sono un istruzione blocco due blocchi possono essere annidati uno è interno all altro paralleli entrambi interni a un terzo ma non annidati tra di loro

25 Esempio: /* Programma ComplessoInStruttura */ /* Parte direttiva */ #include <stdio.h> /* Parte dichiarativa globale */ rappresentazione mediante modello a contorni int g1, g2; char g3; int f1(int par1, int par2); /* Prototipo di f1 */ /* Definizione del main */ main () { int a, b; int f2(int par3, int par1); /* Prototipo di f2 */ /* blocco1 */ { char a, c; /* blocco2 annidato nel blocco1 */ { float a; /* Fine blocco2 */ /* Fine blocco1 */ /* Fine main */ /* Definizione della funzione f1 */ int f1(int par1, int par2) { int d; /* blocco3 */ { int e; /* Fine blocco3 */ /* blocco4 */ { int d; /* Fine blocco4 */ /* Fine f1 */ /* Definizione della funzione f2 */ int f2(int par3, int par4) { int f; /* Fine f2 */

26 ambito di visibilità delle variabili regole generali per uso di oggetti definiti in un programma, una funzione o un blocco (NB ricorda che main e procedure considerati particolari funzioni ) in linguaggi di programmazione c è flessibilità: è permesso dare stesso nome a entità diverse purché in parti dichiarative diverse evita proliferare di indentificatori complica nozione di visibilità degli identificatori: dove è lecito usare identificatore? quale entitià associata, in un dato punto del programma, a un dato indentificatore? Regola di visibilità delle entità in C con termine visibile intendiamo: può essere visto, cioè usato e referenziato tramite l identificatore inserito in nuove dichiarazioni valutato in un espressione assegnato valore (se variabile) elementi dichiarati nella parte dichiarativa globale del programma visibili da tutte le funzioni (incluso main e procedure) e i blocchi del programma identificatori predefiniti del linguaggio si intendono dichiarati nella parte dichiarativa globale elementi dichiarati nella parte dichiarativa di una funzione visibili da istruzioni del suo corpo, inclusi i blocchi in esso contenuti, ma non oltre elementi dichiarati nella parte dichiarativa di un blocco visibili nelle istruzioni del blocco, inclusi i blocchi in esso contenuti, ma non oltre

27 NB: a parziale deroga di quanto sopra dichiarazione di un elemento in una funzione o blocco maschera eventuali entità omonime più esterne cioè se nuova dichiarazione dichiarazione sta in parte dichiarativa di funzione maschera dichiazione omonima in parte dichiarativa globale se dichiarazione sta in parte dichiarativa di blocco, maschera dichiarazione omonima in blocco o funzione contentente o in parte dichiarativa globale in altri termini entità da associare a identificatore trovata con una ricerca verso l esterno da blocco si va verso parte dichiarativa, blocchi esterni, funzione, parte dichiarativa globale l entità denotata è quella incontrata per prima ulteriore regola, tipica del C ogni identificatore di variabile non va mai usato prima della sua dichiarazione per identificatori delle funzioni regole molto semplici ogni funzione componente di un programma visibile ( richiamabile) in qualunque punto del programma. fortemente consigliato uso dei prototipi se chiamata precede definizione completa di una funzione

28 applicazione delle regole viste in main visibili variabili globali g1, g2 e g3 visibili variaibli locali a e b richiamabile funzione f1 ed f2; dal blocco blocco1 visibili variabili globali g1, g2, g3 variabili locali al main b (NB a è ridefinita da blocco1) variabili a e c locali richiamabile sia f1 sia f2 dal blocco blocco2 visibili variabili globali g1, g2, g3 visibile variabile locale al main b (NB a ridefinita da blocco2) variabile del blocco blocco1 c (NB a ridefinita da blocco2) variabile a locale da blocco blocco2 richiamabili f1 ed f2 dalla funzione f1 visibili variabili globali g1, g2 e g3 variabile locale d richiamabile funzioni f2 ed f1 NON visibili variabili a, b, c, f (variabli e, d visibili in blocco1 e blocco2 dal blocco blocco3 visibili variabili globali g1, g2, g3 visibili variabile d locale a f1 visibile variabile locale e richiamabile sia f1 sia f2 dal blocco blocco4 visibili variabili globali g1, g2, g3 visibile variabile locale d (NB d di f1 mascherata) NON visibile variabile e locale al blocco blocco3 richiamabile sia f1 sia f2 dalla funzione f2 visibili variabili globali g1, g2 e g3 visibile variabile locale f richiamabile funzioni f1 ed f2 NON visibili variabili a, b, c, d, e

29 Durata delle variabili va da creazione (allocazione della memoria) alla distruzione (rilascio della memoria deallocata) due categorie di variabili variabili fisse o statiche allocate una sola volta distrutte al termine dell esecuzione del programma dichiarate nella parte dichiarativa globale fungono da canali di comunicazione tra funzioni variabili automatiche create quando esecuzione entra nel loro ambito di visibilità distrutte all uscita da tale ambito dichiarate nelle funzioni (inclusi parametri) e blocchi NB variabili automatiche di blocchi o funzioni eseguiti più volte allocate di volta in volta in celle differenti non conservati i valori prodotti da precedenti esecuzioni di funzione o blocco Esempio: g1, g2, g3 uniche variabili fisse, tutte altre automatiche Eccezione: variabili di funzione o blocco dichiarabili a durata fissa facendo precedere dichiarazione da parola chiave static Esempio static int d;

30 Uso di parametri di tipo array array passato come parametro attuale passato indirizzo di base dell array (indirizzo della prima componente) NB elementi dell array NON vengono copiati nel parametro formale parametro formale della funzione trattato come puntatore Esempio typedef double TipoArray[MaxNumElem] /* n è la dimensione dell'array passato */ double sum(tipoarray a, int n) double sum(double *a, int n) double sum(double a[ ], int n) tre testate di funzione equivalenti NB nel parametro formale corripondente ad array non si può indicare dimensione (è un puntatore) Esempio: funzione che moltiplica gli elementi di un array di tipo double double mul(double a[ ], int n) /* n dimensione dell'array passato */ { int i; double ris; ris = 1.0; for ( i = 0; i < n; i = i + 1 ) ris = ris * a[i]; return ris; se nel main dichiarato double v[50]; Chiamata mul(v, 50) mul(v, 30) mul(&v[5], 7) mul(v+5, 7) Valore calcolato e restituito v[0]*v[1]* *v[49] v[0]*v[1]* *v[29] v[5]*v[6]* *v[11] v[5]*v[6]* *v[11]

31 Uso di parametri di tipo struttura strutture possono essere passate per valore o per indirizzo NB si può passare struttura per valore anche quando contiene componente di tipo array NB qui C non è ortogonale Effetti collaterali a volte funzioni C non si comportano come funzioni della matematica Esempio int PrimoEsempio(int par) { return (par + x) x = 1; x = PrimoEsempio(1); /* ora x vale 2 */ x = PrimoEsempio(1); /* ora x vale 2 */ motivo della non-funzionalità: funzione utilizza variabile globale Esempio int SecondoEsempio(int *par) { *par = *par + 1; return *par; y = SecondoEsempio(&z) /* oltre a restituire valore, modifica z */ motivo della non-funzionalità: passaggio per indirizzo modifica parametro raccomandazioni per preservare funzionalità delle funzioni C passare parametri per valore non accedere a variabili non locali

32 in certi casi programmazione non funzionale è comoda Esempio esamina ultima fattura inserita in ArchivioFatture la elimina se giorno di emissione non desiderato, comunque la si restituisce al chiamante DescrizioneFatture EsaminaElimina(int ParGiorno) { DescrizioneFatture FatturaLocale; FatturaLocale = ArchivioFatture.Sequenza[ArchivioFatture.NumFatture 1]; if (FatturaLocale.DataFattura.Giorno == ParGiorno) ArchivioFatture.NumFatture = ArchivioFatture.NumFatture 1; return FatturaLocale; SCONSIGLIATO uso effetti collaterali la procedura non è più parametrica (e.g., rispetto all archivio) non è esplicito, nella chiamata, su quale archivio è fatta l operazione significato della procedura dipende dal contesto passare sempre come parametro tutto quanto usato (letto o modificato) quindi meglio DescrizioneFatture EsaminaElimina(ElencoFatture *Archivio, int ParGiorno) { DescrizioneFatture FatturaLocale; FatturaLocale = Archivio -> Sequenza[Archivio.NumFatture 1]; if (FatturaLocale.DataFattura.Giorno == ParGiorno) Archivio -> NumFatture = Archivio.NumFatture 1; return FatturaLocale;

33 pro e contro delle tecniche di passaggio parametri per valore occorre lunga copiatura se parametro ingombrante parametro attuale e formale distinti NON permette di restituire risultato al chiamante per indirizzo si copia indirizzo dimensione fissa NON occorre lunga copiatura parametro attuale e formale di fatto coincidono permette di restituire risultato al chiamante modo passaggio proprietà tempo e spazio necessari rischio effetti collaterali indesiderati restituzione valore al chiamante PER VALORE alti NO NO PER INDIRIZZO bassi SI SI memento: strutture si possono passare in entrambi i modi array solo per indirizzo Esempio: matrice quadrata passata a funzione per calcolo determinante se funzione esegue assegnamenti a elementi della matrice (cui punta il parametro formale) effetto collaterale (probabilmente non voluti) su parametro attuale

34 Uso interscambiabile di procedure e funzioni facile trasformare funzione in procedura rendendo il risultato un parametro aggiuntivo Esempio: funzione int f(int par1) { return risultato; chiamata con istruzione y = f(x); diventa la procedura void f(int par1, int *par2) { *par2 = risultato; chiamata con istruzione f(x, &y); funzioni e procedure intercambiabili in qualche misura (mancanza di ortogonalità) problemi con array che non possono essere oggetto di assegnamento

35 Procedure e funzioni predefinite standard library del C include sottoprogrammi di vasto uso non riscoprire continuamente l acqua calda nel testo, elencate in Appendice C Operazioni di ingresso/uscita (I/O) include operazioni da tastiera/video (standard input) operazioni su file I/O di stringhe e caratteri I/O formattato e non gestione degli errori Operazioni matematiche e aritmetiche. include operazioni trigonometriche (anche inverse e iperboliche) esponenziali e logaritmiche valore assoluto Operazioni di gestione della memoria per allocare e rilasciare memoria Operazioni di gestione di caratteri e stringhe include operazioni di copia, concatenamento e confronto tra stringhe ricerca di caratteri in stringhe calcolo lunghezza stringhe Operazioni di Operazioni di ricerca e ordinamento su array gestione di date e tempo generazione di numeri casuali.. comunicazione con sistema operativo gestione degli errori che fanno fallire esecuzione funzioni Header file contengono prototipi di funzioni di libreria Esempio stdio.h contiene prototipi delle operazioni di I/O formattato tra gli altri quelli di printf e di scanf Con direttiva #include <stdio.h> preprocessore copia contenuto del file stdio.h nel programma prototipi inclusi nella parte dichiarativa globale funzioni richiamabili in tutto il programma

36 Esempio: legge due stringhe, le concatena in ordine alfabetico in una terza si usa libreria standard string.h assume stringhe memorizzate in array di caratteri dimensione array > lunghezza stringa effettiva (numero caratteri) parte utile terminata da carattere di fine stringa \0 (il carattere null) argomenti delle funzioni sono array di caratteri puntatori a caratteri (nome di array in C è puntatore a char) int strcmp(char *s1, char *s2); risultato è < 0 s1 alfabeticamente minore di s2 = 0 s1 alfabeticamente uguale a s2 > 0 s1 alfabeticamente maggiore di s2 char *strcpy(char *s1, char *s2); s2 copiata in s1 sino a \0 compreso (assume s1 abbastanza capiente) restituito s1. char *strcat(char *s1, char *s2); concatena s1 a s2 e pone risultato in s1 (assume s1 abbastanza capiente) unsigned strlen(char *s); restituisce numero caratteri che precedono \0 /* Programma Concatenazione di stringhe */ #include <stdio.h> #include <string.h> #define LunghezzaArray 50 main() { char PrimaStringa[LunghezzaArray], SecondaStringa[LunghezzaArray], StringaConc[2 * LunghezzaArray]; unsigned LunghezzaConc; scanf( %s, PrimaStringa); /* NB scanf assume caratteri stringa diversi da spazio */ scanf( %s, SecondaStringa); if (strcmp(primastringa, SecondaStringa) <= 0 ) { strcpy(stringaconc, PrimaStringa); strcat(stringaconc, SecondaStringa); else { strcpy(stringaconc, SecondaStringa); strcat(stringaconc, PrimaStringa); LunghezzaConc = strlen(stringaconc); printf( La stringa ottenuta concatenando le due stringhe lette è %s.\n Essa è lunga %d caratteri\n, StringaConc, LunghezzaConc);

Funzioni e Procedure in C. Funzioni e Procedure in C

Funzioni e Procedure in C. Funzioni e Procedure in C Corso di Informatica A Vito Perrone 1 Motivazioni Indice Il concetto di sottoprogramma Struttura completa di un programma C Le funzioni Esecuzione delle funzioni e passaggio dei parametri Le procedure

Dettagli

Funzioni e procedure

Funzioni e procedure Funzioni e procedure Alcuni tipici errori a run-time La divisione per 0 L'uso di un indice di un array con valore al di fuori del suo campo di variabilità Int V1[100] permette al compilatore di segnalare

Dettagli

Introduzione. per astrarre delle operazioni complesse

Introduzione. per astrarre delle operazioni complesse Introduzione Perché i sottoprogrammi? per riutilizzare codice già scritto se si devono ripetere tante volte le stesse operazioni in punti diversi di un programma, è meglio fattorizzare il codice da ripetere

Dettagli

Il passaggio parametri per indirizzo

Il passaggio parametri per indirizzo Il passaggio parametri per indirizzo Cominciamo con un esempio: supponiamo di voler eseguire diversi inserimenti di nuove fatture in diversi archivi. Proviamo con questa modifica della procedura InserisciFattura:

Dettagli

int main(){ int numero; /* numero di cui voglio calcolare il fattoriale */ int fatt; /* memorizzo il fattoriale di numero */ int somma=0;

int main(){ int numero; /* numero di cui voglio calcolare il fattoriale */ int fatt; /* memorizzo il fattoriale di numero */ int somma=0; Problema: CALCOLARE LA SOMMA DEI FATTORIALI DEI PRIMI 100 NUMERI NATURALI 0!+1!+2! + 99! #include int fattoriale(int); Calcolo fattoriale int main(){ int numero; /* numero di cui voglio calcolare

Dettagli

Sottoprogrammi: motivazioni. Funzioni e procedure. Un esempio motivante. Un esempio motivante

Sottoprogrammi: motivazioni. Funzioni e procedure. Un esempio motivante. Un esempio motivante Sottoprogrammi: motivazioni Funzioni e procedure Riusabilità (scrivere una sola volta del codice usato più volte) Astrazione (esprimere in modo sintetico operazioni complesse) Politecnico di Milano Sede

Dettagli

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 08/05/08 Nota Questi lucidi sono tratti

Dettagli

STRUTTURE DI CONTROLLO IN C. Docente: Giorgio Giacinto AA 2009/2010

STRUTTURE DI CONTROLLO IN C. Docente: Giorgio Giacinto AA 2009/2010 Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2

Dettagli

LABORATORIO di INFORMATICA

LABORATORIO di INFORMATICA Università degli Studi di Cagliari Corso di Laurea Magistrale in Ingegneria per l Ambiente ed il Territorio LABORATORIO di INFORMATICA A.A. 2010/2011 Prof. Giorgio Giacinto FUNZIONI E PROCEDURE http://www.diee.unica.it/giacinto/lab

Dettagli

FUNZIONI E PROCEDURE IN C. Docente: Giorgio Giacinto AA 2009/2010. dall utente, sia predefiniti, il C consente di creare funzioni e procedure

FUNZIONI E PROCEDURE IN C. Docente: Giorgio Giacinto AA 2009/2010. dall utente, sia predefiniti, il C consente di creare funzioni e procedure Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2

Dettagli

7. Strutture di controllo

7. Strutture di controllo Corso di Fondamenti di Informatica Corso di Laurea in Ingegneria Gestionale (L-Z) 7. Ing. Michele Ruta 1 di 17 Indice Istruzioni di selezione Mappate dal costrutto switch Istruzioni cicliche (di iterazione)

Dettagli

Strutture di controllo in C. Strutture di controllo in C -- Flow Chart --

Strutture di controllo in C. Strutture di controllo in C -- Flow Chart -- -- Flow Chart -- Corso di Informatica A Vito Perrone 1 Indice Rappresentazione degli algoritmi tramite flow chart Istruzione La parte dichiarativa L I/O Primi esempi che girano 2 Codifica degli algoritmi

Dettagli

Il costruttore struct

Il costruttore struct Il costruttore struct Aggrega informazioni eterogenee Esempio variabili di tipo impiegato contenenti nome, cognome, codice fiscale, indirizzo, numero di telefono, stipendio, data di assunzione contenitori

Dettagli

Ottenere una modifica del parametro attuale

Ottenere una modifica del parametro attuale Ottenere una modifica del parametro attuale Le variabili passate come parametri a una funzione, se alterate durante l esecuzione, non cambiano valore all uscita dalla funzione (parametri passati per valore)

Dettagli

Array k-dimensionali

Array k-dimensionali Informatica B a.a 2005/06 (Meccanici 4 squadra) Scaglione: da PO a ZZZZ PhD. Ing. Michele Folgheraiter Array k-dimensionali In C è possibile definire array con più dimensioni (ANSI C massimo k=12), per

Dettagli

Array e puntatori. Indice. Tipi di dati strutturati: Array Puntatori Tipi di dati strutturati: Array Esempio. Corso di Informatica A.

Array e puntatori. Indice. Tipi di dati strutturati: Array Puntatori Tipi di dati strutturati: Array Esempio. Corso di Informatica A. Array e puntatori Corso di Informatica A Vito Perrone 1 Indice Tipi di dati strutturati: Array Puntatori Tipi di dati strutturati: Array Esempio 2 I tipi strutturati: 1. Il costruttore array Definizione

Dettagli

Variabili e Funzioni. Informatica 1 / 19

Variabili e Funzioni. Informatica 1 / 19 Variabili e Funzioni Informatica 1 / 19 Programmi C e Un programma C e composto da funzioni e variabili Variabile: memorizza valori appartenenti ad un insieme di definizione (dipendente dal tipo) Funzione:

Dettagli

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave

Dettagli

Dati due punti sul piano calcolare la loro distanza

Dati due punti sul piano calcolare la loro distanza Introduzione al C Primo esempio in C Dati due punti sul piano calcolare la loro distanza Soluzione: la distanza fra due punti si calcola secondo il teorema di Pitagora, con la formula: y Distanza = (lato12

Dettagli

Struttura di un. Struttura dei programmi C

Struttura di un. Struttura dei programmi C Parte 4 Struttura di un Programma Struttura dei programmi C Un programma C deve essere contenuto in uno o più file (salvo diversa specifica, per ora si assume in un file): 1. Una parte contenente direttive

Dettagli

Il linguaggio C. Notate che...

Il linguaggio C. Notate che... Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione

Dettagli

Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione

Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione Lezione 5 e 6 - Concetto di blocco - Controllo del flusso di un programma - Costrutti per la scelta if e switch - Costrutti while e for - Operatori in C Fabio Scotti (2004-2009) Laboratorio di programmazione

Dettagli

C: primi elementi. Lezione 4

C: primi elementi. Lezione 4 C: primi elementi Lezione 4 Evoluzione del BCPL (1967) e B (1970), entrambi typeless Sviluppato da Dennis Ritchie nel 1972 ed implementato per il PDP-11 Usato per lo sviluppo del sistema operativo UNIX

Dettagli

Introduzione al linguaggio C Funzioni

Introduzione al linguaggio C Funzioni Introduzione al linguaggio C Funzioni Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati

Dettagli

Laboratorio di informatica Ingegneria meccanica

Laboratorio di informatica Ingegneria meccanica C: costanti introdotte con #define Laboratorio di informatica Ingegneria meccanica Lezione 4 22 ottobre 2007 Forma: #define nome valore Effetto: ogni occorrenza successiva di nome sarà rimpiazzata con

Dettagli

passaggio di vettori come parametri di funzioni/procedure. I Quando si passa un vettore come parametro ad una funzione, in

passaggio di vettori come parametri di funzioni/procedure. I Quando si passa un vettore come parametro ad una funzione, in I Parametri di tipo vettore I Il meccanismo del passaggio per valore di un indirizzo consente il passaggio di vettori come parametri di funzioni/procedure. I Quando si passa un vettore come parametro ad

Dettagli

I Dati Strutturati ed il Linguaggio C

I Dati Strutturati ed il Linguaggio C Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2011/2012 docente: Prof. Ing. Michele Salvemini Sommario Dati Strutturati Esigenze Vettori

Dettagli

La Programmazione. Cos è la programmazione? Concetti preliminari

La Programmazione. Cos è la programmazione? Concetti preliminari La Programmazione Cos è la programmazione? Concetti preliminari 1 Sommario La programmazione, questa sconosciuta Programmiamo Macchine Astratte Linguaggi di basso e alto livello e loro implementazione

Dettagli

Introduzione al linguaggio C Puntatori

Introduzione al linguaggio C Puntatori Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2017

Dettagli

Tipo carattere. Campo di variabilità. Intervallo finito. Tipo. Dimensione (byte) char

Tipo carattere. Campo di variabilità. Intervallo finito. Tipo. Dimensione (byte) char Tipo carattere Finora abbiamo lavorato con valori numerici. I numeri costituiscono molta parte del lavoro dei computer, ma non tutta. I computer sono macchine per il trattamento dell informazione e l informazione

Dettagli

I cicli. Iterazioni Calcolo della media Istruzioni break e continue

I cicli. Iterazioni Calcolo della media Istruzioni break e continue I cicli Iterazioni Calcolo della media Istruzioni break e continue Ciclo while p Vero A while() ; Falso Esegue una istruzione mentre una condizione è verificata Programmazione

Dettagli

Il linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

Il linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1 Il linguaggio C I linguaggi di programmazione ad alto livello sono linguaggi formali ( sintassi e semantica formalmente definite) però sono compatti e comprensibili. Le tipologie di linguaggi sono: procedurali

Dettagli

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano Scope delle variabili e passaggio parametri Danilo Ardagna Politecnico di Milano 1-4-2014 Introduzione! Con le funzioni è stato introdotto un meccanismo per definire dei piccoli programmi all interno di

Dettagli

Le Funzioni in C. Fondamenti di Informatica Anno Accademico 2010/2011. Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia

Le Funzioni in C. Fondamenti di Informatica Anno Accademico 2010/2011. Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Le Funzioni in C Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2010/2011 docente: prof. Michele Salvemini 1/24 Sommario Le funzioni Il

Dettagli

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. 1 Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa a valori delle variabili

Dettagli

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2

Dettagli

Dove vengono definiti? il concetto di sottoprogramma

Dove vengono definiti? il concetto di sottoprogramma ROADMAP Funzioni e struttura di un programma Tipi, operatori, espressioni Strutture di controllo Livello 1 Input/Output Strutture dati FUNZIONI E STRUTTURA DI UN PROGRAMMA Livello 2 funzioni procedure

Dettagli

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori Puntatori Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori 1 Il puntatore Un tipo puntatore è un tipo scalare per

Dettagli

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori Puntatori Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori 1 Il puntatore Un tipo puntatore è un tipo scalare per

Dettagli

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio I/O da tastiera + costrutti while e if Alessandra Giordani agiordani@disi.unitn.it Lunedì 2 maggio 2011 http://disi.unitn.it/~agiordani/ Ripasso funzione printf() Usata per stampare il contenuto di una

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7

Dettagli

Il linguaggio C. Notate che...

Il linguaggio C. Notate che... Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione

Dettagli

Costanti e Variabili

Costanti e Variabili Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli

Dettagli

Linguaggio C - sezione dichiarativa: costanti e variabili

Linguaggio C - sezione dichiarativa: costanti e variabili Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente

Dettagli

C: panoramica. Violetta Lonati

C: panoramica. Violetta Lonati C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide,

Dettagli

Esercizio 1: media di numeri reali (uso funzioni e struct)

Esercizio 1: media di numeri reali (uso funzioni e struct) Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 5 Esercitazione: 2 novembre 2005 Esercizi sulle funzioni Esercizio 1: media di numeri reali (uso funzioni e struct) Le

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

Cominciamo ad analizzare la rappresentazione delle informazioni... di Cassino. C. De Stefano Corso di Fondamenti di Informatica Università degli Studi

Cominciamo ad analizzare la rappresentazione delle informazioni... di Cassino. C. De Stefano Corso di Fondamenti di Informatica Università degli Studi Un linguaggio ad alto livello deve offrire degli strumenti per: rappresentare le informazioni di interesse dell algoritmo definire le istruzioni che costituiscono l algoritmo Cominciamo ad analizzare la

Dettagli

Manualistica 3 Le strutture di controllo

Manualistica 3 Le strutture di controllo Programmazione e Laboratorio di Programmazione Manualistica 3 Le strutture di controllo Programmazione e Laboratorio di Programmazione: Le strutture di controllo 1 Le strutture di controllo Strutture di

Dettagli

Laboratorio di Programmazione

Laboratorio di Programmazione Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 3 Analisi dettagliata di un programma /* commento */ Possono estendersi su più linee apparire in qualsiasi parte del programma. Alternativamente

Dettagli

Algoritmi e basi del C Struttura di un programma

Algoritmi e basi del C Struttura di un programma Algoritmi e basi del C Struttura di un programma Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 11 Marzo 2014 Informazione: dato + significato Che giorno è oggi? 14 Marzo o anche

Dettagli

Istruzioni di Controllo

Istruzioni di Controllo Istruzioni di Controllo Programmazione strutturata Ricordiamo i concetti chiave: concatenazione o composizione BLOCCO istruzione condizionale SELEZIONE ramifica il flusso di controllo in base al valore

Dettagli

Primo programma in C

Primo programma in C Primo programma in C Struttura minima di un file C Applicazioni C in modo console Struttura del programma Commenti Direttive #include Definizione di variabili Corpo del main 2 Struttura minima di un file

Dettagli

Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)

Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3) Funzioni Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Strategie di programmazione Riuso di

Dettagli

FUNZIONI. attribuire un nome ad un insieme di istruzioni parametrizzare l esecuzione del codice

FUNZIONI. attribuire un nome ad un insieme di istruzioni parametrizzare l esecuzione del codice Funzioni FUNZIONI Spesso può essere utile avere la possibilità di costruire nuove istruzioni che risolvono parti specifiche di un problema Una funzione permette di attribuire un nome ad un insieme di istruzioni

Dettagli

Algoritmi e basi del C

Algoritmi e basi del C Algoritmi e basi del C Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 24 Agosto 2015 Benvenuti nel fantastico mondo del C 2 Il primo programma: ciao mondo 3 Ciao Mondo: stdio.h Come

Dettagli

LEZIONE 1 LE BASI DEL LINGUAGGIO C

LEZIONE 1 LE BASI DEL LINGUAGGIO C LEZIONE 1 LE BASI DEL LINGUAGGIO C Simone Marchesini Roberto Pagliarini Dipartimento di Informatica Università di Verona COS È? Il C è un linguaggio di programmazione che permette di salvare i valori in

Dettagli

Strategie di programmazione

Strategie di programmazione Funzioni Funzioni in C Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Funzioni in C Strategie

Dettagli

Programmazione C Massimo Callisto De Donato

Programmazione C Massimo Callisto De Donato Università degli studi di Camerino Scuola di scienze e tecnologia - Sezione Informatica Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto LEZIONE

Dettagli

Il linguaggio C. Puntatori e dintorni

Il linguaggio C. Puntatori e dintorni Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;

Dettagli

Tipi di Dati Stutturati

Tipi di Dati Stutturati Tipi di Dati Stutturati Politecnico di Milano Sommario Introduzione Scalari definiti dall utente Tipi di dato strutturati Costruttori predefiniti Definiti dall utente Esempi 1 Tipi di Dati Tipi di Dato

Dettagli

Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri

Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri

Dettagli

Laboratorio di Informatica I

Laboratorio di Informatica I Struttura della lezione Lezione : Elementi lessicali del C Vittorio Scarano Corso di Laurea in Informatica Elementi lessicali e token Costanti Identificatori Operatori operatori di incremento/decremento

Dettagli

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Funzioni e Procedure. Marco D. Santambrogio Ver. aggiornata al 11 Marzo 2014

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Funzioni e Procedure. Marco D. Santambrogio Ver. aggiornata al 11 Marzo 2014 Funzioni e Procedure Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 11 Marzo 2014 Obiettivi Funzioni Scope delle variabili 2 La calcolatrice! Problema Si scriva un programma in C

Dettagli

Istruzioni di Controllo in C. Emilio Di Giacomo

Istruzioni di Controllo in C. Emilio Di Giacomo Istruzioni di Controllo in C Emilio Di Giacomo Limite delle istruzioni viste L insieme delle istruzioni che abbiamo visto fino ad ora consiste per lo più di: dichiarazioni e assegnazioni di variabili espressioni

Dettagli

Qualsiasi programma in C++ segue lo schema:

Qualsiasi programma in C++ segue lo schema: Qualsiasi programma in C++ segue lo schema: #include // libreria che gestisce flusso di input e output using namespace std; // uso di librerie standard del C++ int main() { // dichiarazioni

Dettagli

Perché il linguaggio C?

Perché il linguaggio C? Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare

Dettagli

Introduzione al C. Lez. 1 Elementi. Rossano Venturini

Introduzione al C. Lez. 1 Elementi. Rossano Venturini Introduzione al C Lez. 1 Elementi Rossano Venturini rossano@di.unipi.it Pagine del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start http://algoritmica.spox.spoj.pl/alglab2013 Lezioni

Dettagli

Caratteri e stringhe

Caratteri e stringhe Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un

Dettagli

Dichiarazioni e tipi predefiniti nel linguaggio C

Dichiarazioni e tipi predefiniti nel linguaggio C Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo. Premessa Programmi provati sul compilatore Borland C++ 1.0 Altri compilatori:

Dettagli

Introduzione alla programmazione in linguaggio C

Introduzione alla programmazione in linguaggio C Introduzione alla programmazione in linguaggio C Il primo programma in C commento Header della libreria Funzione principale Ogni istruzione in C va terminata con un ; Corso di Informatica AA. 2007-2008

Dettagli

I costrutti del C. Strutture condizionali Strutture iterative Introduzione alle funzioni

I costrutti del C. Strutture condizionali Strutture iterative Introduzione alle funzioni I costrutti del C Strutture condizionali Strutture iterative Introduzione alle funzioni 1 Le Strutture del C Condizionali if-else (else if) switch Iterative while for do while break and continue 2 Il costrutto

Dettagli

Carlo Ghezzi, Gian Pietro Picco

Carlo Ghezzi, Gian Pietro Picco Funzioni Carlo Ghezzi, Gian Pietro Picco Dipartimento di Elettronica e Informazione Politecnico di M, Italy picco@elet.polimi.it http://www.elet.polimi.it/~picco Analogia con la matematica Come nella matematica,

Dettagli

Struttura dei programmi C

Struttura dei programmi C Programmi C Struttura dei Programmi C Dichiarazione delle variabili Operazioni di Ingresso/Uscita Fondamenti di Informatica 1 Struttura dei programmi C Un programma C deve contenere, nell'ordine: una parte

Dettagli

LINGUAGGI DI PROGRAMMAZIONE

LINGUAGGI DI PROGRAMMAZIONE LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di

Dettagli

LA RICORSIONE IN C. CdL Ingegneria Informatica n.o. Anno Accademico 2006/07 Fondamenti di Informatica I corso A Giacomo Piscitelli pag.

LA RICORSIONE IN C. CdL Ingegneria Informatica n.o. Anno Accademico 2006/07 Fondamenti di Informatica I corso A Giacomo Piscitelli pag. I lucidi sono una rielaborazione e integrazione di quelli messi a disposizione dei docenti nel sito relativo al testo: Informatica: arte e mestiere 2/ed Stefano Ceri, Dino Mandrioli, Licia Sbattella Copyright

Dettagli

TIPI DI DATO. e quasi sempre anche collezioni di oggetti, mediante la definizione di tipi strutturati

TIPI DI DATO. e quasi sempre anche collezioni di oggetti, mediante la definizione di tipi strutturati Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi numeri naturali, interi, reali caratteri e stringhe di caratteri e quasi sempre anche collezioni di oggetti, mediante la

Dettagli

del Linguaggio C Istruzioni di iterazione

del Linguaggio C Istruzioni di iterazione Istruzioni i Iterative ti del Linguaggio C Istruzioni di iterazione Le istruzioni di iterazione forniscono strutture di controllo che esprimono la necessità di ripetere una certa istruzione durante il

Dettagli

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C Tipi di dati strutturati e Linguaggio C Record o strutture Il costruttore struct in C Dati strutturati Record Un record o struttura è una struttura dati ottenuta aggregando elementi di tipo diverso che

Dettagli

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso Unità Didattica 2 Linguaggio C Espressioni, Operatori e Strutture linguistiche per il controllo del flusso 1 Espressioni e assegnazioni Le espressioni sono definite dalla grammatica: espressione = variabile

Dettagli

Introduzione al C. Lez. 2. Funzioni e Puntatori

Introduzione al C. Lez. 2. Funzioni e Puntatori Introduzione al C Lez 2 Funzioni e Puntatori Esercizio 1: test primalità Scrivere un programma che prenda in input un intero n, e stampa SI se n è primo, NO altrimenti (NB: un intero n è primo se è solo

Dettagli

Caratteri e stringhe

Caratteri e stringhe Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un

Dettagli

Un programma deve essere scritto come collezione di tante piccole funzioni perché:

Un programma deve essere scritto come collezione di tante piccole funzioni perché: Un programma deve essere scritto come collezione di tante piccole funzioni perché: ƒè più facile scrivere correttamente una funzione breve che abbia un unico compito: in questo modo sia la scrittura che

Dettagli

Assegnazione di una variabile

Assegnazione di una variabile Assegnazione di una variabile Per scrivere un valore dentro una variabile si usa l operatore di assegnazione, che è rappresentato dal simbolo =. Quindi, se scrivo int a; a = 12; assegno alla variabile

Dettagli

Puntatore. Ritorniamo sul problema dell accesso alle variabili

Puntatore. Ritorniamo sul problema dell accesso alle variabili Puntatori Puntatore Ritorniamo sul problema dell accesso alle variabili Nel linguaggio di von Neumann attraverso il loro indirizzo Nei linguaggi di alto livello attraverso il loro nome Però in taluni casi

Dettagli

Strutture di controllo

Strutture di controllo Strutture di controllo 73 Teorema di Bohm e Jacopini Tutti i programmi possono essere scritti in termini di tre strutture di controllo: La sequenza, permette di eseguire le istruzioni secondo l ordine

Dettagli

Il primo programma C++

Il primo programma C++ Il primo programma C++ Un programma in qualsiasi linguaggio evoluto è una sequenza di istruzioni che la CPU dopo opportune conversioni esegue. La sintassi dei linguaggi di programmazione è molto piu rigida

Dettagli

Perché il linguaggio C?

Perché il linguaggio C? Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare

Dettagli

Un esecutore di un linguaggio simbolico e costituito dalla coppia Compilatore, processore (o Interprete, processore)

Un esecutore di un linguaggio simbolico e costituito dalla coppia Compilatore, processore (o Interprete, processore) Un esecutore di un linguaggio simbolico e costituito dalla coppia Compilatore, processore (o Interprete, processore) Macchina astratta: un linguaggio di programmazione trasforma un calcolatore in una macchina

Dettagli

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2007/2008

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2007/2008 Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2007/2008 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 24/04/08 Nota Questi lucidi sono tratti

Dettagli

L AMBIENTE CODE BLOCKS E L IO

L AMBIENTE CODE BLOCKS E L IO L AMBIENTE CODE BLOCKS E L IO Il primo programma in C++ #include using namespace std; main() { cout

Dettagli

Linguaggio C: le funzioni. Introduzione e sintassi

Linguaggio C: le funzioni. Introduzione e sintassi ISIS "Guido Tassinari" di Pozzuoli Indirizzo Informatico - Articolazione Informatica Informatica Prof. A.S. 2012/2013 Linguaggio C: le funzioni. Introduzione e sintassi 21/10/2012 Introduzione Spesso alcuni

Dettagli

Tipi di dato semplici

Tipi di dato semplici Tipi di dato semplici Perché dichiarare una variabile? 2 Una variabile rappresenta uno spazio di memoria centrale Prima dell esecuzione del programma deve essere chiaro quanto spazio serve al programma

Dettagli

L AMBIENTE CODE BLOCKS E L IO

L AMBIENTE CODE BLOCKS E L IO L AMBIENTE CODE BLOCKS E L IO Il primo programma #include main() { printf("ciao Mondo!"); } Il file deve essere salvato con estensione.c Il primo programma in C++ #include using

Dettagli

Fondamenti di Informatica T. Linguaggio C: i puntatori

Fondamenti di Informatica T. Linguaggio C: i puntatori Linguaggio C: i puntatori Il puntatore E` un tipo di dato, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Dominio: Il dominio di una variabile di tipo puntatore è un insieme

Dettagli