Linguaggio C Strutture di controllo

Documenti analoghi
Linguaggio C Debugging

Linguaggio C I puntatori

Introduzione alla programmazione strutturata

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine

Codifica dei numeri interi positivi e negativi

Scrivere il software. Scrivere il software. Interprete. Compilatore e linker. Fondamenti di Informatica

Dal linguaggio macchina al linguaggio C

Codifiche Binary Coded Decimal (BCD) e Gray

Linguaggio C Struct e union

Strumenti per la programmazione. Strumenti per la programmazione. Strumenti per la programmazione. Strumenti per la programmazione

Input/output in C e in C++

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine. Codifica del video

Programma sorgente, compilatore, file oggetto, file eseguibile. Traduzione effettuata dal compilatore. Dichiarazione di variabili (esempi)

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

Linguaggio C Struttura dei programmi

Codifica dei segnali audio

La programmazione in linguaggio C

Linguaggio C e sistema operativo

Controllo e correzione degli errori

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

Nota di Copyright RETI DI CALCOLATORI. Lezione 28: indice degli argomenti. Lezione 28. Il collegamento agli Internet Service Provider

Elementi di crittografia

Architettura del processore. Modello di calcolatore. Caratteristiche del processore. Caratteristiche del processore. Fondamenti di Informatica

Architettura e funzionamento del calcolatore

Autenticazione, firme digitali e certificati digitali

RETI DI CALCOLATORI II

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine. Codifica dei testi

Tecniche di compressione senza perdita

Linguaggio C Espressioni e operatori

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine. Compressione audio

FONDAMENTI DI INFORMATICA. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine. Compressione JPEG

2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 1

Gestione della memoria di massa e file system

1999 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 1

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

Elementi di crittografia

IL CABLAGGIO STRUTTURATO DI CATEGORIA 6

Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI

Il cablaggio strutturato degli edifici: cosa c e` ` di nuovo?

RETI DI CALCOLATORI II

Memoria cache. Memoria cache. Miss e Hit. Problemi. Fondamenti di Informatica

Sicurezza applicata in rete

Argomenti della lezione

Nota di Copyright RETI DI CALCOLATORI. Lezione 2: indice degli argomenti. Lezione 2. I servizi offerti dalle reti di calcolatori

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine

Programmazione C Massimo Callisto De Donato

2001 Pier Luca Montessoro, Davide Pierattoni (si veda la nota di copyright alla slide n. 2) Fondamenti di Informatica.

Le trappole del linguaggio C

La voce di Elvis Presley, la chitarra di David Gilmour e le funzioni di callback in linguaggio C

RETI DI CALCOLATORI II

Istruzioni di Controllo in C. Emilio Di Giacomo

Trasmissione bilanciata e amplificatore differenziale

2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 1

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

Nota di Copyright. Interfaccia audio. Libreria portaudio. Callback function. Un piccolo problema. Fondamenti di Informatica

INFORMATICA. Strutture condizionali

Primo: eliminare la confusione

Informatica 2 modulo C Massimo Callisto De Donato

Libreria in linguaggio C per elaborazione audio in real time

Metro VLAN Switch e standard 802.1ad

Istruzioni iterative (o cicliche)

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

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

Programmazione strutturata

<istruzione> ::= <istruzione-semplice> <istruzione> ::= <istruzione-di-controllo> <istruzione-semplice> ::= <espressione> ;

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine

I cicli. Iterazioni Calcolo della media Istruzioni break e continue

ISTRUZIONI ISTRUZIONI SEMPLICI

Istruzioni decisionali

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

<istruzione> ::= <istruzione-semplice> <istruzione> ::= <istruzione-di-controllo> <istruzione-semplice> ::= <espressione> ;

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

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO. Facoltà di Ingegneria Università degli Studi di Udine

Prof. Pagani Corrado LINGUAGGIO C: SELEZIONE E CICLI

I costrutti del C. Le Strutture del C. Il costrutto if else (I) Il costrutto if else (II) Condizionali. if-else (else if) switch Iterative

LO STANDARD TIA/EIA 607

ANALIZZIAMO NEI DETTAGLI GLI STATEMENTS DI SELEZIONE E DI RIPETIZIONE FORNITI DAL LINGUAGGIO C STATEMENT SEMPLICE STATEMENT COMPOSTO BLOCCO

ISTRUZIONI. Le strutture di controllo permettono di aggregare istruzioni semplici in istruzioni più complesse.

Corso di Fondamenti di Informatica

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

Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 1

RETI DI CALCOLATORI E APPLICAZIONI TELEMATICHE

Progettazione delle dorsali in fibra ottica

Qualsiasi programma in C++ segue lo schema:

STRUTTURE DI CONTROLLO DEL C++

Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 1

Shielding. E.M.I. Shield e Grounding: analisi applicata ai sistemi di cablaggio strutturato. Pier Luca Montessoro.

Il protocollo DHCP. Pietro Nicoletti. Mario Baldi

1999 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 1

Laboratorio di Informatica I

Transcript:

FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Linguaggio C Strutture di controllo 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 1

Nota di Copyright Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei trattati internazionali. Il titolo ed i copyright relativi alle slides (ivi inclusi, ma non limitatamente, ogni immagine, fotografia, animazione, video, audio, musica e testo) sono di proprietà degli autori prof. Pier Luca Montessoro e ing. Davide Pierattoni, Università degli Studi di Udine. Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca, scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministero dell Università e Ricerca Scientifica e Tecnologica, per scopi istituzionali, non a fine di lucro. In tal caso non è richiesta alcuna autorizzazione. Ogni altro utilizzo o riproduzione (ivi incluse, ma non limitatamente, le riproduzioni su supporti magnetici, su reti di calcolatori e stampe) in toto o in parte è vietata, se non esplicitamente autorizzata per iscritto, a priori, da parte degli autori. L informazione contenuta in queste slide è ritenuta essere accurata alla data della pubblicazione. Essa è fornita per scopi meramente didattici e non per essere utilizzata in progetti di impianti, prodotti, reti, ecc. In ogni caso essa è soggetta a cambiamenti senza preavviso. Gli autori non assumono alcuna responsabilità per il contenuto di queste slide (ivi incluse, ma non limitatamente, la correttezza, completezza, applicabilità, aggiornamento dell informazione). In ogni caso non può essere dichiarata conformità all informazione contenuta in queste slide. In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali. 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 2

Strutture di controllo In ogni linguaggio le strutture di controllo permettono di scrivere programmi nei quali il flusso di esecuzione non sia strettamente sequenziale I costrutti possono essere: condizionali: if-else, switch iterativi: while, for, do while 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 3

Istruzioni if-else L istruzione condizionale if-else viene usata per esprimere una decisione La sintassi più generale è: Y N if (espressione) istruzione_1; else istruzione_2; if valuta l espressione, e se risulta vera ( non nulla) viene eseguita l istruzione_1; in caso contrario viene eseguita l istruzione_2 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 4

Esempio Istruzioni if-else if (i!= 0) x = a / i; else printf ("Divisione impossibile"); 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 5

Istruzioni if Nel costrutto if-else la parte relativa all else è opzionale L if semplice permette delle codifiche molto compatte, quando non è necessaria la ramificazione delle istruzioni if (k == 0) printf ("k vale zero\n"); Y N if (x > 0) z = y / x; printf ("z vale %f\n", z); All interno di un costrutto condizionale si possono eseguire anche dei blocchi di istruzioni 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 6

Istruzioni if annidate In assenza di un else all interno di una sequenza di if annidati, ogni else viene associato all if più vicino if (n > 0) if (a > b) z = a; else z = b; if (n > 0) if (a > b) z = a; else z = b; L indentazione non è discriminante per il compilatore; con gli if annidati, ogni ambiguità va risolta utilizzando le parentesi 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 7

Istruzioni if annidate Per fare in modo che il costrutto precedente sia interpretato correttamente dal compilatore, si dovrà scrivere: if (n > 0) if (a > b) z = a; else z = b; SIMILI AMBIGUITÀ POSSONO ESSERE MOLTO PERICOLOSE! 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 8

La sintassi: if (espressione_1) Istruzioni else if istruzione_1; else if (espressione_2) istruzione_2; else if (espressione_3) istruzione_3; else istruzione_4; è il modo più generale per realizzare una scelta tra più opzioni Le espressioni vengono analizzate nell ordine in cui si presentano; se una di esse è vera, viene eseguita l istruzione corrispondente e l intera catena termina Y Y N N N Y 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 9

Istruzioni else if Il codice corrispondente ad ogni istruzione può essere anche un blocco di istruzioni tra parentesi graffe L ultimo else èil caso di default: viene eseguito quando nessuna delle espressioni risulta vera, e alle volte può essere omesso Simili costrutti possono risultare complicati se nella scelta si devono valutare numerose espressioni 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 10

Istruzioni switch L istruzione switch effettua una scelta multipla controllando se un espressione assume uno dei valori in un insieme di costanti intere switch (espressione) case costante_1: istruzione_1; break; case costante_2: istruzione_2; break;... default: istruzione_default; break; 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 11

Istruzioni switch Ogni caso possibile è etichettato da un espressione o da un valore intero costanti Le espressioni e le costanti nei diversi casi devono essere tra loro differenti Il caso default, opzionale, viene eseguito solo se nessuno dei casi precedenti si è verificato L esecuzione delle istruzioni relative a un caso è seguita dall esecuzione sequenziale di tutti i casi successivi L istruzione break, aggiunta in fondo ad ogni blocco di istruzioni, provoca l uscita immediata dallo switch 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 12

Istruzioni switch char risposta; int favorevoli, contrari;... printf ("Sei favorevole?"); scanf ("%c", &risposta); switch (risposta) case 's': case 'S': case 'y': case 'Y': favorevoli++; break; case 'n': case 'N': contrari++; break; default: printf("risposta errata!"); break; Si possono anche associare più etichette allo stesso blocco di istruzioni Es.: risposta = 'S' 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 13

Costrutti iterativi (cicli) L iterazione serve a fare in modo che un istruzione o un blocco di istruzioni vengano eseguite ripetutamente per un certo numero di volte Tale numero può essere: noto a priori, essendo uguale al valore di una costante o di una variabile che non muta durante l iterazione determinato da condizioni dipendenti dall iterazione In C esistono tre costrutti iterativi: while for do while 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 14

Ciclo while Il costrutto while ha la sintassi: while (espressione) istruzione; oppure while (espressione) blocco di istruzioni Se l espressione risulta vera, allora viene eseguito il blocco di istruzioni, al termine del quale l espressione viene rivalutata Non appena l espressione diventa falsa, l iterazione si interrompe e viene eseguita la prima istruzione successiva al costrutto while 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 15 Y N

Il frammento di codice i = 0; Ciclo while while (i < 100) printf ("Messaggio ripetuto 100 volte\n"); i = i + 1; verifica la condizione i < 100 e, trovandola vera per i = 0, esegue il ciclo while, stampa il messaggio, incrementa di uno la variabile i, e ripete la verifica della condizione. L iterazione prosegue fino a quando i raggiunge il valore 100 (non più strettamente minore di 100) 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 16

Ciclo for Il costrutto for ha la sintassi: for (istr_1; espr_2; istr_3) istruzione; oppure for (istr_1; espr_2; istr_3) blocco di istruzioni istr_1 rappresenta una o più istruzioni di inizializzazione espr_2 èla condizione da verificare prima di ogni iterazione istr_3 rappresenta una o più istruzioni di aggiornamento, eseguite ad ogni ciclo dopo le istruzioni 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 17 Y N

Operatore virgola L operatore, (virgola) consente di raggruppare più assegnazioni (o statement) in un unica istruzione Il costrutto for permette di avere più assegnazioni in un unico statement per le istruzioni di inizializzazione e di aggiornamento Il costrutto: for (i = 0, j = 5; funz_1(i) < funz_2(j) ; i++, j--) istruzioni inizializza i a 0 e j a 5, valuta l espressione e, dopo ogni esecuzione delle istruzioni del ciclo, incrementa i e decrementa j di uno 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 18

Ciclo for Il frammento di codice relativo al ciclo while i = 0; while (i < 100) printf ("Messaggio ripetuto 100 volte\n"); i = i + 1; può essere riscritto nella forma più semplice: for (i = 0; i < 100; i++) printf ("Messaggio ripetuto 100 volte\n"); 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 19

Ciclo do while La sintassi del costrutto do while è la seguente: do istruzione; while (espressione); oppure: do blocco di istruzioni while (espressione); L istruzione (o il blocco di istruzioni) viene sempre eseguita almeno una volta; al termine viene valutata l espressione e, finché questa è vera, l istruzione viene ripetuta e l espressione rivalutata (iterazione), altrimenti si passa all istruzione successiva Y N 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 20

break e continue L istruzione break provoca l uscita incondizionata da un ciclo for, while o do while, senza eseguire le istruzioni successive né valutare la condizione di controllo int n; FORTEMENTE SCONSIGLIATA! for (n = 10000; n > 0; n--) if (n % 7 == 0) break; printf ("%d\n", a[i]); Stampa in ordine decrescente i numeri interi a partire da 10000 e si ferma al primo multiplo di 7 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 21

break e continue L istruzione continue permette di forzare l inizio dell iterazione successiva di un ciclo for, while o do while, provocando l esecuzione immediata della parte di controllo del ciclo Nel caso del for, si passa direttamente alle istruzioni di aggiornamento int n; FORTEMENTE SCONSIGLIATA! for (n = 0; n < 10000; n++) if (n % 7!= 0) continue; printf ("%d\n", a[i]); Stampa in ordine crescente i multipli di 7 inferiori a 10000 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 22

Cicli e sintassi Nella scrittura di un programma è importante verificare sempre la correttezza sintattica e semantica delle istruzioni Il frammento di codice: int i = 0; l esecuzione si bloccherà su questa istruzione, a causa del punto e virgola di troppo! while (i < 100); printf ("Messaggio ripetuto 100 volte\n"); i = i + 1; è sintatticamente corretto ed è accettato di buon grado dal compilatore, ma il programma non termina! 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 23

Cicli e sintassi Lo stesso baco ricorre nei costrutti con il ciclo for: for (i = 0; i < 100; i++); istruzioni In questo caso il blocco di istruzioni viene eseguito una e una sola volta Il do while, invece, richiede il punto e virgola a chiusura dell intero statement: do printf ("Messaggio ripetuto 100 volte\n"); i = i + 1; while (i < 100); 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 24