Introduzione Il costrutto if...else Il costrutto while Altri costrutti

Documenti analoghi
Introduzione Il costrutto if: else: Il costrutto while: Il costrutto for: Sommario FONDAMENTI DI INFORMATICA. Avviso. Introduzione

PROVA SCRITTA DEL CORSO DI CORSO DI LAUREA IN INGEGNERIA BIOMEDICA ED ELETTRICA 9/6/2008

Definizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori

Istruzioni iterative (o cicliche)

Fondamenti di Informatica

Sommario FONDAMENTI DI INFORMATICA 1. Il tipo FILE. Passaggio da standard I/O. LINGUAGGIO C Gestione dei file

7. Strutture di controllo

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

Introduzione alla programmazione in linguaggio C

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

PROGRAMMAZIONE: Le strutture di controllo

Fondamenti di Informatica T-1 Modulo 2

Le strutture di controllo in C++

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Corso di Fondamenti di Informatica

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

Paolo Bison. Fondamenti di Informatica A.A. 2006/07 Università di Padova

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

PROGRAMMAZIONE STRUTTURATA

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

INFORMATICA. Strutture iterative

Linguaggio C Informatica Grafica

Algoritmi e basi del C Struttura di un programma

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

Costrutti condizionali e iterativi

Programmazione strutturata

Programmazione a blocchi. Algobuild Prof. Sergio Roselli

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

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Per gli esercizi sulla algebra booleana, si consiglia di verificare tramite tabelle di verità le equivalenze logiche proposte sulle dispense.

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Algoritmi e basi del C

Strutture di Controllo. if (<condizione>) statement; if (<condizione>) statement; Istruzioni condizionali. Istruzione condizionale if.

Lezione 6 Introduzione al C++ Mauro Piccolo

Fondamenti di Informatica

Fondamenti di Programmazione. Strutture di controllo

Classificazione Tipi semplici predefiniti Definizione di nuovi tipi Tipi strutturati

Corso di Informatica B - Sezione D. Esercitazioni Linguaggio C

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

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

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

3 Costrutti while, for e switch

Struttura dei programmi C

Introduzione alla programmazione in C(++)

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2009/2010

Unità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi

Strutture di Controllo

Laboratorio Progettazione Web Il linguaggio PHP Le Istruzioni. Andrea Marchetti IIT-CNR AA 2014/2015

Esercizio n.1 FONDAMENTI DI INFORMATICA 1. Esercizio n.2. Soluzione. LINGUAGGIO C Funzioni e gestione file: esercitazione

C espressioni condizionali

Corso di Fondamenti di Programmazione canale E-O ... Un esempio per iniziare. printf) Altri cenni su printf() Esercizi 8. (printf(

print((math.floor(1345/10)%10); print (Math.floor(1345/100)%10); Le funzioni in JavaScript

STRUTTURE DI CONTROLLO DEL C++

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

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

Linguaggi, Traduttori e le Basi della Programmazione

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Primi passi col linguaggio C

Strutture di controllo e cicli

Stesura informale dell algoritmo: (lasciata come esercizio)

Java SE 7. Strutture di programmazione (2)

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 13/09/2013/ Foglio delle domande/versione 1

linguaggio di programmazione e programma

Esercitazioni di Fondamenti Informatica - Modulo A 1

Introduzione alla programmazione

Esercitazione 4. Comandi iterativi for, while, do-while

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

Rappresentazione degli algoritmi

JavaScript Core Language. Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132

Strutture di controllo iterative

5 - Istruzioni condizionali

Programmazione in Java (I modulo)

ESERCIZIO 1 (5 punti) Convertire in binario il valore, espresso in decimale, Si usi la rappresentazione in virgola fissa.

Linguaggio C: introduzione

osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1

ISTRUZIONI ISTRUZIONI

Esercizi Programmazione I

Le basi del linguaggio Java

CORSO DI ELEMENTI DI INFORMATICA

Elementi di C++ di base

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

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Laboratorio di Programmazione Laurea in Bioinformatica

1 Esercizi in pseudocodice

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Istruzioni iterative. Istruzioni iterative

Appunti del corso di Informatica 1 (IN110 Fondamenti) 5 Rappresentazione delle informazioni

Fondamenti di Informatica

Introduzione al Linguaggio C

Istruzioni condizionali di diramazione in Fortran 90

Tipi di dato, Alessandra Giordani Lunedì 7 maggio 2011

Istruzioni semplici e strutturate

Programmazione Strutturata. Programmazione Strutturata. Istruzione composta { } Istruzioni strutturate in C

Transcript:

Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Meccanica ed Elettrica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011 Docente: Gian Luca Marcialis LINGUAGGIO C Strutture di controllo Sommario Introduzione Il costrutto if... Il costrutto while Altri costrutti Il costrutto switch Il costrutto for Il costrutto do-while L istruzione goto 2 Introduzione Strutture di controllo condizionali: il costrutto if Abbiamo visto che l esecuzione di un programma da parte della macchina virtuale C (von Neumann) è, in linea di principio, puramente sequenziale Nella scrittura di algoritmi c è però la necessità, spesso, di alterare il normale flusso di esecuzione delle istruzioni, ricorrendo ad opportuni costrutti detti strutture di controllo Le strutture di controllo agiscono sul Contatore di programma (registro PC) alternandone il valore corrente Ciò determina il fatto che la successiva istruzione non è più quella contigua ma quella indicata dalla struttura Le strutture di controllo sono di due tipi: Condizionali (la maggior parte) Incondizionali Esse alterano il PC solo al verificarsi di una determinata condizione Il costrutto principale in C è dato dalla coppia di parole-chiave if Nota: se il numero di istruzioni è pari ad 1, le graffe sono superflue if (Condizione) /*Se Condizione è vera*/ /*esegui le istruzioni nelle graffe*/ /*altrimenti, se Condizione è falsa*/ /*esegui le istruzioni in queste graffe*/ 3 4

Il costrutto if Nel costrutto if il termine indicato come Condizione è un espressione booleana che è interpretata come vera se il suo valore è diverso da 0, altrimenti è falsa Condizione può essere quindi espressa come combinazione degli operatori booleani noti (AND, OR, NOT) di variabili booleane (ovvero intere ma con significato booleano) oppure espressioni di confronto determinate, ad esempio, dal valore corrente assunto da variabili numeriche o caratteri, oppure altre forme più complesse (che vedremo più avanti) Il primo esempio Scrivere un programma C che, ricevendo da tastiera due valori interi, segnali qual è il maggiore fra essi. /*Programma che stampa il maggiore tra due valori interi*/ int x, y, differenza; scanf( %d %d,&x, &y); differenza = x y; printf( Il maggiore dei due valori è: ); if (differenza > 0) printf( %d\n,x); printf( %d\n,y); 5 6 Esercizio Scrivere un programma C che, ricevendo in ingresso un valore intero non negativo, compreso tra 0 e 33, stampi a video: Valore non corretto se il valore inserito è al di là del range consentito; Hai passato l esame e puoi registrarlo! se il valore inserito è compreso fra 21 e 33; Dovrai sostenere l orale se vuoi passare, se il valore è compreso fra 16 e 20; Mi dispiace.. non potrai nemmeno sostenere il prossimo scritto, se il valore è minore od uguale a 15. 7 Soluzione /*Programma per conoscere l esito dell esame di Fondamenti di Informatica*/ int voto; printf( Inserire il voto.\n ); scanf( %d,&voto); if((voto<0) (voto>33)) printf( Valore non corretto.\n ); if((voto>20)&&(voto<=33)) printf( Hai passato l esame e puoi registrarlo!\n ); if((voto>=16)&&(voto<21)) printf( Dovrai sostenere l orale se vuoi passare.\n ); printf( Mi dispiace non potrai nemmeno sostenere il prossimo scritto \n ); 8

Cicli (o loop ): il costrutto while Laddove è richiesta la ripetizione iterativa di un certo gruppo di istruzioni (tipo Ripeti-Finché), in C si adotta usualmente il costrutto while: while (Condizione) /*Finché Condizione è vera*/ /*Esegui le istruzioni tra le graffe*/ Esempio Scrivere un programma C che legga una sequenza di numeri interi da tastiera e fermi la lettura al primo zero /*Programma che cerca il primo zero*/ int valore; scanf( %d,&valore); while (valore!=0) scanf( %d,&valore); printf( Ho trovato uno zero!\n ); 9 10 Un esempio più interessante Scrivere un programma C che calcoli la media aritmetica di una sequenza di valori reali progressivamente letti da tastiera, finché non viene inserito uno zero /*Programma per la media aritmetica*/ float valore, media; int n; scanf( %f,&valore); /*la lettura di un float richiede %f in luogo di %d*/ n=0; media=0.0; while (valore!=0.0) n=n+1; media=media + valore; scanf( %f,&valore); 11 media = media / ((float)n); /*analisi di correttezza: manca qualcosa in questo codice?*/ printf( La media dei valori inseriti è pari a %f\n,media); 12

Algoritmi in C: un esempio completo Scrivere un programma C che, ricevendo da tastiera un numero intero decimale, lo converta in un valore binario utilizzando l algoritmo delle divisioni successive e lo stampi a video L algoritmo delle divisioni successive in pseudo-codice Ingresso (Input): una sequenza di cifre decimali X (il numero da convertire) Uscita (Output): una sequenza di n cifre binarie (il numero convertito) b n-1.b 0 i = 0; (operatore = : assegnazione) Ripeti Q = quoziente di X/2; R = resto di X/2; b i = R; X = Q; i = i + 1; Finché Q <> 0 Nota <> significa diverso da 13 14 Analisi delle strutture dati utili Soluzione: parte dichiarativa del codice e lettura di X da tastiera Per implementare l algoritmo con le conoscenze attuali: Ci serviamo di una variabile (intera non negativa) che conservi il valore decimale, chiamiamola X Un insieme di variabili intere che contenga i bit del numero convertito Per questo scopo ci serviamo di un vettore di interi, b, di dimensione massima N predefinita N viene definito attraverso la direttiva #define Per il calcolo del resto della divisione x/y, che verrà memorizzato in un altra variabile R, ci serviamo della funzione di libreria fmod(x,y), contenuta nella libreria <math.h> Terremo anche conto della lunghezza effettiva della stringa di bit memorizzandola nella variabile M (<=N) /*Programma per la conversione da decimale a binario*/ #include <math.h> #define N 100 /*il numero max di bit è 100*/ unsigned int X; int b[n], R; int M, i; printf( Inserire il valore da convertire.\n ); scanf( %d,&x); 15 16

Inizializzazione della variabile b /*Inizializzazione a zero della stringa di bit*/ /*E necessaria perché all atto della dichiarazione di b, i valori assegnati a ciascuna componente sono casuali*/ i=0; while (i<n) b[i]=0; i=i+1; Corpo dell implementazione i=0; while ((i<n)&&(x!=0)) b[i]=(int)fmod(x,2); /*il cast di fmod, di tipo float, viene forzato al tipo int*/ X=X/2; i=i+1; M=i; 17 18 Controllo della dimensione e stampa del risultato /*Bisogna verificare che N sia stato sufficiente a convertire il valore inserito*/ if(x!=0) printf( Il valore inserito non può essere rappresentato con %d bit\n,n); /*altrimenti si può stampare il valore convertito*/ printf( Il valore ottenuto richiede %d bit ed è:,m); i=m-1; /*la stampa deve avvenire in ordine inverso*/ while(i>=0) printf( %d,b[i]); i=i-1; Esercizio Scrivere un programma C che, letta una stringa di caratteri da tastiera di lunghezza massima N, calcoli la lunghezza effettiva della stringa, Nell implementazione si tenga presente che: L ultimo carattere di una stringa è \0 Una stringa si legge da tastiera con scanf usando %s 19 20

Soluzione /*Programma che calcola la lunghezza di una stringa*/ #define N 50 char stringa[n]; int i; printf( Inserire una stringa di max %d caratteri:\n,n); scanf( %s,stringa); /*stringa indica la locazione di memoria del primo carattere*/ i=0; while((i<n)&&(stringa[i]!= \0 )) i++; /*in C i++ è lo stesso che scrivere i=i+1*/ if(i==n) printf( Stringa troppo lunga. ); printf( Hai inserito la stringa: %s\nla sua lunghezza è pari a %d\n,stringa,i); 21 Teorema di Boehm-Jacopini Le strutture di controllo del linguaggio C if e while sono equivalenti alle strutture di controllo del linguaggio Assembler basate sulla diretta, condizionale manipolazione del registro contatore di programma: tutti gli algoritmi che possono essere codificati con una possono esserlo anche con l altra e viceversa. Esse sono poi equivalenti alle strutture di controllo di qualsiasi altro linguaggio di programmazione. Inoltre sono complete, nel senso che ognuna di esse è sufficiente per codificare qualsiasi algoritmo. 22 Esempio Il costrutto switch-case Alternativa alla if ed utile per rendere più leggibile un programma in presenza di molteplici in funzione di una certa espressione switch (espressione) case CASO1: /*esegui queste istruzioni/* break; case CASO2: /*esegui queste istruzioni/* break; default: /*esegui queste istruzioni/* break; 23 Scrivere un programma C che converta una nota musicale scritta in notazione tedesca (con le lettere dell alfabeto C, D, E, F, G, A, B, H) /*Programma per la conversione delle note*/ char nota; printf( Inserire una nota: ); scanf( %c,&nota); switch (nota) case C : printf( Hai inserito un do\n ); break; case D : printf( Hai inserito un re\n ); break; case E : printf( Hai inserito un mi\n ); break; case F : printf( Hai inserito un fa\n ); break; case G : printf( Hai inserito un sol\n ); break; case A : printf( Hai inserito un la\n ); break; case B : printf( Hai inserito un si bemolle\n ); break; case H : printf( Hai inserito un si\n ); break; default: printf( Non hai inserito alcuna nota\n ); 24

Il costrutto for Equivalente al costrutto while ma più complesso nella sintassi Serve soprattutto quando si conosce a priori la durata di un loop for(stato_iniziale; passo_di_iterazione) condizione_di_terminazione; /*esegui queste istruzioni finché condizione_di_terminazione è vera prima di avere eseguito il passo_di_iterazione*/ Esercizio Scrivere un programma C che, leggendo da tastiera una stringa di caratteri rappresentanti ciascuno una cifra binaria, lo converta nell equivalente valore decimale e lo stampi a video Note: Il carattere meno significativo è in posizione 0 nella stringa Per l elevamento a potenza x y ci serviamo della funzione di libreria pow(x,y) contenuta nella libreria <math.h> 25 26 Ricordiamo l algoritmo i=0; X = 0; Ripeti X = X + b i * 2 i i = i + 1 Finché i < N 27 Soluzione /*Programma per la conversione da binario a decimale*/ #include <math.h> #define N 100; char b[n]; unsigned int valore, i, cifra; valore=0; for(i=0; b[i]!= \0 ; i++) switch (b[i]) case 0 : cifra=0; break; default: cifra=1; valore=valore+cifra*pow(2,i); printf( \nil valore binario %s convertito risulta essere %d\n,numero,valore); 28

Esercizi con for Scrivere un programma C che implementi l algoritmo delle sottrazioni successive per ottenere quoziente e resto della divisione di un numero intero non negativo X con un altro intero non negativo Y e li stampi a video Scrivere un programma C che, dati due valori interi non negativi X e Y, calcoli il valore X Y e lo stampi a video Senza usare pow(x,y) Il costrutto do-while Alternativo a while (e for) con la differenza che la condizione di fine ciclo viene analizzata dopo avere eseguito le istruzioni da iterare do /*esegui queste istruzioni*/ while (Condizione) 29 30 L istruzione goto L istruzione break E una istruzione di salto incondizionato Significa, contrariamente ai costrutti visti in precedenza, che il flusso viene alterato senza bisogno di verificare determinate condizioni L uso di istruzioni di questo tipo è fortemente sconsigliato quando si programma in un linguaggio di alto livello, perché rende l esecuzione di un programma meno controllabile ed il comportamento meno prevedibile, oltre ad una difficoltosa leggibilità programmazione strutturata La parola chiave goto è seguita da un etichetta che corrisponde all indirizzo della prossima istruzione da eseguire goto etichetta; > Serve per interrompere un ciclo (while, for, dowhile) o l esecuzione delle istruzioni entro il costrutto switch > Esempio: while(1) scanf( %d,&x); if (x==0) break; printf( \nho trovato uno zero! ); 31 32

L istruzione continue Per saperne di più Causa l interruzione dell iterazione corrente di un ciclo e fa procedere immediatamente all iterazione successiva Esempio: for (i=0; i<n; i++) if((dato[i]< a ) (dato[i]> z )) continue; /*le istruzioni dopo questo commento non vengono eseguite*/ Ceri, Mandriola, Sbattella, Informatica arte e mestiere, Capp. 3, 6, McGraw-Hill Kernighan, Ritchie, Il linguaggio C, Cap. 3, Pearson- Prentice Hall 33 34