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

Documenti analoghi
Linguaggio C: introduzione

Linguaggio C - sezione dichiarativa: costanti e variabili

Istruzioni iterative (o cicliche)

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

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

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

Esercitazione 3. Espressioni booleane I comandi if-else e while

IL PRIMO PROGRAMMA IN C

Lezione 7: La Formalizzazione degli Algoritmi - Strutture di Controllo e Selettive La Programmazione Strutturata (3 p) Giovedì 21 Ottobre 2010

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

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

Algoritmi e basi del C Struttura di un programma

PROGRAMMAZIONE: Le strutture di controllo

Istruzioni iterative. Istruzioni iterative

5 - Istruzioni condizionali

Programmare in C. Esempio: Algoritmo del Risveglio

Istruzioni di ciclo. Unità 4. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

Linguaggio C Debugging

Informatica! Appunti dal laboratorio 1!

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

1 Esercizi in pseudocodice

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

CORSO DI ELEMENTI DI INFORMATICA

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

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

Corso di Fondamenti di Informatica Classi di istruzioni 2

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

Algoritmi e soluzione di problemi

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

Linguaggio C: puntatori

Fondamenti di Programmazione. Strutture di controllo

Esercitazione 6. Array

Strutture di Controllo

Costrutti condizionali e iterativi

Sviluppo dei Programmi

Esercizi C su array e matrici

Diagrammi a blocchi 1

Iterazione determinata e indeterminata

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Un esempio di if annidati

Strutture di controllo e cicli

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch

PHP Lezione 4. Istruzione condizionale IF. Sintassi IF: if (condizione) { istruzioni; }

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili

Introduzione a Visual Basic Lezione 2 Cicli e anomalie

5. Codifica degli Algoritmi in C

Linguaggio C - Stringhe

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

PROGRAMMAZIONE STRUTTURATA

Laboratorio di Informatica

Istruzioni Condizionali in C

Linguaggio C Struttura dei programmi

Gli algoritmi: definizioni e proprietà

linguaggio di programmazione e programma

Il generatore di numeri casuali

Introduzione al C. Introduzione. Linguaggio ad alto livello. Struttura di un programma C

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

ESERCIZI DI PROGRAMMAZIONE. - condizionali e cicli -

Sequenze di controllo C:

Introduzione alla programmazione in C(++)

Linguaggio C I puntatori

Strutture iterative. Strutture iterative. I cicli in C. Strutture iterative. con i che assume i valori da 0 a 1000

Tempo di vita e scope delle variabili

La selezione binaria

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

Esercitazione 3. Oggi sono stati effettuati semplici esercizi in C utilizzando le seguenti istruzioni: if...else, while, printf, scanf

Linguaggio C: le funzioni

Primi passi col linguaggio C

Programmazione I - Laboratorio

Laboratorio di informatica Ingegneria Clinica. Esercitazione 2 10 Ottobre 2011

Cenni sul preprocessore e il suo utilizzo

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

Strutture di controllo in C++

Linguaggio C: i file

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

Introduzione alla Programmazione e Applicazioni per la Finanza M2 (Prodotti Derivati) Lezione 10

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Parte 2. Ricorsione. [M.C.Escher Drawing hands, 1948] - AA. 2012/13 2.1

Le funzioni, e le istruzioni di input/output

PIANO DI LAVORO. a.s / 2016

Appunti di informatica. Lezione 4 anno accademico Mario Verdicchio

Algebra di Boole ed elementi di logica

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Sviluppo di programmi. E ora, finalmente. Si comincia! 1. Analizzare il problema. 2. Progettare una soluzione (1) E necessario capire:

Sequenze di controllo C:

Problemi, algoritmi e oggetti

Espressione di chiamata di funzione

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Informatica e elementi di informatica medica. Laboratori del 9 e del 12 Aprile 2010

Sequenze di controllo C:

Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio

Esercizi di programmazione in linguaggio C - Costrutto iterazione

Linguaggio C: le funzioni. Introduzione e sintassi

Programmazione strutturata

Istruzioni del Linguaggio C

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Basi di Dati: Corso di laboratorio

Introduzione al linguaggio C

Analisi e Programmazione

Transcript:

Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione La presente dispensa e da utilizzarsi ai soli fini didattici previa autorizzazione dell autore. E severamente vietata la riproduzione anche parziale e la vendita. 15/10/2008

Blocchi di istruzioni! Sono una successione di istruzioni racchiuse tra parentesi graffe { istruzione1; istruzione2; blocco di istruzioni! All interno di un blocco di istruzioni è possibile inserire sia istruzioni semplici sia ulteriori blocchi che vengono detti annidati Corso di Informatica e CAD (c.i.) ICA LC - prof. Plebani 2

Sequenza! È semplicemente un elenco di istruzioni racchiuse in un blocco! Le istruzioni sono eseguite una in seguito all altra! Non è mai possibile eseguire due istruzioni contemporaneamente Corso di Informatica e CAD (c.i.) ICA LC - prof. Plebani 3

Selezione (if)! Le parole chiave if e else permettono di definire due cammini di esecuzione alternativi! La condizione è una espressione logica che può essere vera o falsa! Il bloccoif e il bloccoelse sono eseguiti in alternativa! istruzione viene eseguita in ogni caso if (<condizione>) { /* bloccoif */ else { /* bloccoelse */ /* istruzione */ vera bloccoif Condizione falsa bloccoelse istruzione Corso di Informatica e CAD (c.i.) ICA LC - prof. Plebani 4

Blocco else! Il blocco riferito all if è obbligatorio! Il blocco riferito all else è opzionale! La seguente situazione è pertanto ammissibile if (<condizione>) { /* bloccoif */ /* istruzione */ vera bloccoif Condizione falsa istruzione Corso di Informatica e CAD (c.i.) ICA LC - prof. Plebani 5

Esempio #include <stdio.h> int main() { int r; float circ; scanf( %d, &r); if (r>=0) { circ= 2*3.14*r; printf( Circonferenza è %f, circ); else { printf( Il valore del raggio deve essere positivo ); return 0; Corso di Informatica e CAD (c.i.) ICA LC - prof. Plebani 6

Classici errori! La condizione deve essere sempre racchiusa tra parentesi! L errore è sintattico e pertanto è rilevato a tempo di compilazione! L istruzione if non deve terminare con il ;! Questo non è un errore sintattico (il compilatore non da errore) ma è spesso semantico visto che significa se la condizione è vera non fare nulla Corso di Informatica e CAD (c.i.) ICA LC - prof. Plebani 7

Annidamento! È possibile inserire all interno di un blocco if o di un blocco elso altri blocchi di selezione if-then-else! Questa struttura del codice può essere adottata per tutti i costrutti (selezione ed iterazione) e viene detta annidamentp! In caso di annidamento una struttura deve contenere interamente l altra if (condizione1) { /* blocco if */ if (condizione 2) { /* blocco if annidato */ else { else { /* blocco else annidato */ /* blocco else */ Corso di Informatica e CAD (c.i.) ICA LC - prof. Plebani 8

Altri esempi di annidamento con if-then-else if (condizione1) { /* blocco if */ else { /* blocco else */ if (condizione 2) { /*blocco if annidato */ else { /*blocco else annidato*/ Questo annidamento è corretto poiché l if annidato è completamente inserito all interno del ramo else if (condizione1) { /* blocco if */ if (condizione 2) { /*blocco if annidato */ else { /* blocco else */ else { /*blocco else annidato*/ Questo annidamento è errato poiché l if annidato è in parte incluso nel ramo if e in parte incluso nel ramo else Corso di Informatica e CAD (c.i.) ICA LC - prof. Plebani 9

Esempio 1/2 #include <stdio.h> int main() { int r; float circ; scanf( %d, &r); if (r>=0) { if (r<=32767) { circ= 2*3.14*r; printf( Circonferenza è %f, circ); else { printf( Il valore del raggio deve essere positivo ); return 0; Corso di Informatica e CAD (c.i.) ICA LC - prof. Plebani 10

Esempio 2/2 #include <stdio.h> int main() { int r; float circ; scanf( %d, &r); if ((r>=0) && (r<=32767)) { circ= 2*3.14*r; printf( Circonferenza è %f, circ); else { printf( Il valore del raggio deve essere positivo ); return 0; Due if direttamente annidati possono essere sostituiti con un unico if in cui la condizione è l AND logico delle due condizioni Corso di Informatica e CAD (c.i.) ICA LC - prof. Plebani 11

Iterazione! Permette di definire un blocco di istruzioni che deve essere eseguito diverse volte! Elementi di un costrutto ciclico:! Inizializzazione: le variabili interessate, e soprattutto quelle usate nella condizione del ciclo, devono essere inizializzate prima della valutazione della condizione! Test: Deve essere prevista una valutazione della condizione di permanenza nel ciclo, che determini la ripetizione o la terminazione del ciclo! Modifica: almeno una delle variabili della condizione deve essere modificata all interno del ciclo, in modo che prima o poi la condizione di ripetizione diventi falsa, causando la terminazione del ciclo Corso di Informatica A - GES [E-OZ] - prof. Plebani 12

Costruttto while! La parola chiave while permette di definire un ciclo! Il blocco viene eseguito finchè la condizione permane vera! Il ciclo è pre-condizionato while (<condizione>) { /* blocco */ /* istruzione */ vera blocco Condizione falsa istruzione Corso di Informatica A - GES [E-OZ] - prof. Plebani 13

Loop!!! L introduzione dei cicli in un programma potrebbe violare la proprietà di terminazione di un algoritmo Il programmatore deve essere certo che esista almeno un caso in cui la condizione di permanenza diventi falsa per fare in modo che l algoritmo termini Altrimenti il programma potrebbe entrare in stato di loop #include <stdio.h> int main() { a = 1; while (a>0) { printf( %d, a); a++; return 0; Questo programma non termina mai!!! Una volta entrato nel ciclo rimane in stato di loop Corso di Informatica A - GES [E-OZ] - prof. Plebani 14

Esempio #include <stdio.h> int main() { int r; float circ; r=-1; /*inizializzazione che permette di entrare nel ciclo la prima volta */ while ((r<0) (r>32767)) { scanf( %d, &r); if ((r<0) (r>32767)) { printf( Il valore del raggio deve essere positivo minore di 32767 ); /* fine dell if */ /* fine del while */ circ= 2*3.14*r; printf( Circonferenza è %f, circ); return 0;! Dal ciclo while esco solo quando l utente inserisce un valore valido! Questo è anche un esempio di if annidato all interno del while! Il calcolo della circonferenza sarà eseguito solo per valori di raggio validi! Questo è un tipico esempio di validazione dell input dell utente Corso di Informatica A - GES [E-OZ] - prof. Plebani 15

Costrutto do-while! Il costrutto while permette di definire un ciclo pre-condizionato! Il linguaggio C fornisce anche il costrutto do-while per definire il ciclo postcondizionato do { /* blocco */ blocco while (<condizione>); /* istruzione */ vera Condizione falsa istruzione Corso di Informatica A - GES [E-OZ] - prof. Plebani 16

Esempio #include <stdio.h> int main() { int r; float circ; do { scanf( %d, &r); if ((r<0) (r>32767)) { printf( Il valore del raggio deve essere positivo minore di 32767 ); /* fine dell if */ while ((r<0) (r>32767)); circ= 2*3.14*r; printf( Circonferenza è %f, circ); return 0;! Come specificato nelle lezioni sugli algoritmi si può sempre passare da un ciclo precondizionato ad uno post-condizionato! In questo caso il ciclo post-condizionato è utile in quanto deve eseguire almeno una volta l operazione di scanf ed evito l inizializzazione fittizia (r=-1) Corso di Informatica A - GES [E-OZ] - prof. Plebani 17

Costrutto for! Utilizzato ogni volta che è noto a priori il numero di cicli da eseguire! Nel while la condizione di uscita era dettata da una condizione generica! Nel ciclo for la condizione di uscita predica su un contatore! Il contatore è una variabile intera che memorizza il numero di volte che il ciclo è stato eseguito! Anche il ciclo for è un costrutto ciclico Corso di Informatica A - GES [E-OZ] - prof. Plebani 18

Elementi del ciclo for! Gli elementi del ciclo for sono identici agli elementi di un costrutto ciclico ma sono applicati al contatore! Inizializzazione: il contatore viene inizializzato! Test: il contatore viene confrontato con il limite superiore (inferiore)! Modifica: il contatore viene incrementato (decrementato)! Il costrutto for racchiude tutti e tre gli elementi for (inizializzazione; test; modifica) { /*blocco di istruzioni*/ Corso di Informatica A - GES [E-OZ] - prof. Plebani 19

Esempio di ciclo for inizializzazione test modifica for (i=0; i<10; i=i+1) { printf( %d, i); Blocco di istruzioni da eseguire ciclicamente! Il blocco di istruzioni viene eseguito finché la condizione di test permane vera Corso di Informatica A - GES [E-OZ] - prof. Plebani 20

Ordine di esecuzione for (inizializzazione; test; modifica) { /* blocco di istruzioni */ /* istruzione */ inizializzazione test falsa vera blocco modifica istruzione Corso di Informatica A - GES [E-OZ] - prof. Plebani 21

Equivalenza for - while int i; int i; i = 0; while (i < 10) { printf( %d, i); i=i+1; for (i=0; i<10; i=i+1) { printf( %d, i); Corso di Informatica A - GES [E-OZ] - prof. Plebani 22

Autoincremento 1/2! L istruzione i=i+1 può essere sostituita da i+ +; (autoincremento)! L autoincremento vale solo per variabili intere e può essere espresso in due forme!variabile++ (prima accedo alla variabile e poi incremento)!++variabile (prima incremento e poi accedo alla variabile)! Sostituendo l operatore ++ con -- si ottiene l autodecremento Corso di Informatica A - GES [E-OZ] - prof. Plebani 23

Autoincremento 2/2! La differenza tra le due forme è evidente solo quando l autoincremento (autodecremento) è inserito in una espressione Esempio 1 a=5 b=a++; /*b vale 5*/ Esempio 2: a=5; b=++a; /*b vale 6*/ Corso di Informatica A - GES [E-OZ] - prof. Plebani 24