INFORMATICA. Strutture iterative

Documenti analoghi
Esercizi. Piero Demichelis 1

Istruzioni iterative (o cicliche)

Istruzioni decisionali

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

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

PROGRAMMAZIONE: Le strutture di controllo

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

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

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto

Le strutture di controllo

Strutture di Controllo

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

Programmare in C. Esempio: Algoritmo del Risveglio

PROGRAMMAZIONE STRUTTURATA

COMANDI ITERATIVI. Ivan Lanese

Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

C espressioni condizionali

Programmazione strutturata

Le strutture di controllo in C++

3 Costrutti while, for e switch

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

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

Algoritmi e soluzione di problemi

Università di Roma Tor Vergata L6-1. iterazione: struttura di controllo per ripetere più volte uno stesso comando

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

Introduzione alla programmazione Esercizi risolti

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

Istruzioni iterative. Istruzioni iterative

Dall analisi alla codifica (1)

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

Linguaggio C Informatica Grafica

Programmazione a blocchi. Algobuild Prof. Sergio Roselli

Programmazione di base

7. Strutture di controllo

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

Esercizi di programmazione in linguaggio C - Costrutto iterazione

Cicli annidati ed Array multidimensionali

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

while Istruzione while Cicli ed iterazioni Istruzioni di ripetizione in C Comportamento del while

Fondamenti di Informatica

STRUTTURE DI CONTROLLO DEL C++

Esercitazioni di Fondamenti Informatica - Modulo A 1

Esercitazione 6. Array

Pr1: determinare il maggiore di n numeri interi n. Fondamenti di Informatica Prof. Vittoria de Nitto Personè

Rappresentazione degli algoritmi

Diagrammi a blocchi 1

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

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

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

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

CORSO DI PROGRAMMAZIONE

unità didattica 3 Le strutture condizionali e le strutture iterative

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

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

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

Diagrammi a blocchi 1

Introduzione agli Algoritmi

RELAZIONE DELLA PROVA DI LABORATORIO DI INFORMATICA

Introduzione alla programmazione in C(++)

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media.

Esercizi di programmazione in C

Algoritmi e dintorni: La radice quadrata Prof. Ettore Limoli. Formule iterative

Alcuni esercizi. 1. Valutazione in cortocircuito 2. If e if innestati 3. Switch 4. Cicli

Introduzione alla programmazione

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

1 Esercizi in pseudocodice

Iterazione determinata e indeterminata

Fondamenti di Informatica L-A

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

Le basi del linguaggio Java

Fondamenti di Informatica T-1 Modulo 2

5. Codifica degli Algoritmi in C

Programmi su più moduli - Esempio

Corso di Informatica B - Sezione D. Esercitazioni Linguaggio C

Corso di Fondamenti di Informatica Classi di istruzioni 2

Corso di Informatica di Base

ISTRUZIONI DI ITERAZIONE

Corso di Fondamenti di Informatica

LA METAFORA DELL UFFICIO

Istruzioni Condizionali

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

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

$QDOLVLGHOSURJUDPPDTXDGUDWR

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione

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

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

Algoritmi e basi del C Struttura di un programma

Ciclo do while in FORTRAN

Linguaggio C: le funzioni

Iterazione (introduzione)

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

Linguaggio C: introduzione

Introduzione alla programmazione strutturata

Operatori in Java. Il Costrutto Condizionale if

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

LA METAFORA DELL UFFICIO

Matlab : le basi. Vediamo ora un esercizio di calcolo: Il volume di una sfera è dato da V=4*π*r 3 /3 dove r è il raggio.

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

Transcript:

INFORMATICA Strutture iterative

Strutture iterative Si dice ciclo (loop) una sequenza di istruzioni che deve essere ripetuta più volte consecutivamente. Si consideri ad esempio il calcolo del fattoriale di un numero n > 0: n! = n. (n - 1). (n - 2).... 2 con il caso particolare 0! = 1. Sembrerebbe che basti una semplice assegnazione, ma se non si conosce a priori il valore di n, è impossibile scrivere l istruzione che esegue il calcolo del fattoriale, poiché la formula contiene tanti fattori quanti ne indica n. Piero Demichelis 2

Strutture iterative Proviamo a riscrivere la formula del fattoriale come: n! =((... (((1. 2). 3). 4)...(n - 1). n) Osservando la formula possiamo: - attribuire ad una variabile fatt il valore 1, - quindi moltiplicare fatt per 2 ed attribuire il risultato ancora ad fatt, - poi fatt per 3 e così via fino a n. Piero Demichelis 3

Strutture iterative L'algoritmo di soluzione può quindi essere formalizzato mediante un algoritmo iterativo: - assegna il valore 1 a fatt; - se n vale 0, hai finito; - con k che varia da 1 a n con passo unitario esegui: moltiplica fatt per k ed attribuisci il risultato a fatt.. Il prodotto fatt k viene eseguito n volte com è necessario. La scelta di algoritmi ciclici influenza spesso altri componenti del programma, come la base dati. Piero Demichelis 4

Strutture iterative Nel linguaggio C i cicli iterativi sono realizzati da tre costrutti: while : realizza il costrutto WHILE - DO; do while : realizza il costrutto REPEAT - UNTIL; for : realizza il ciclo a contatore. Piero Demichelis 5

Istruzione while Sintassi: while (<condizione>) <istruzione> I Finché <condizione> è vera esegue <istruzione> che può essere semplice o composta. <condizione> V <istruzione> F O Piero Demichelis 6

Istruzione while : osservazioni Il costrutto while realizza il costrutto while do della programmazione strutturata. <condizione> deve essere di tipo logico ed è ricalcolata ad ogni iterazione; se <condizione> risulta falsa già alla prima iterazione <istruzione> non viene eseguita neppure una volta; se <condizione> non diventa mai falsa non si esce mai dal loop! essendo <istruzione> una normale istruzione composta può contenere qualsiasi tipo di istruzione, in particolare altri while, dando origine (come per l if) a while annidati. Piero Demichelis 7

Istruzione while: esempio Leggere un numero intero N da tastiera, e calcolare la somma S dei primi N numeri interi. Pseudocodice: -Legge N da tastiera; -inizializza l accumulatore di risultato S a 0; -inizializza un contatore indice a 1; -finché indice <= N; aggiungi all accumulatore S il valore di indice; aggiorna indice (ovvero incrementalo di 1); -visualizza il risultato finale (valore di S). Piero Demichelis 8

Istruzione while: esempio #include <stdio.h> main() { int N, indice, S; } printf ( \nintroduci N: ); scanf ( %d, &N); S = 0; /* inizializzazioni */ indice = 1; while (indice <= N) { S += indice; /* S S + indice: operazione iterativa */ indice++; /* aggiornamento condizione */ } printf ( \nsomma = %d, S); /* output */ Piero Demichelis 9

Esempio: calcolo del seno Calcolare la funzione seno x mediante lo sviluppo in serie sin x 3 5 7 x x x x 3! 5! 7! sino quando i fattori sono > 0.00005. Osservando i singoli fattori dello sviluppo si può osservare che: fatt fatt. prec. con N che varia a passi di 2. N x x 1 N 2 Piero Demichelis 10

Esempio: calcolo del seno Il primo termine lo conosciamo all atto della lettura da tastiera del valore in radianti dell angolo. Tutti gli altri termini possono essere ricavati in successione a partire dal primo applicando la relazione che abbiamo trovato che lega un termine al successivo. Diagramma di flusso Start Legge il valore dell angolo x 1 Piero Demichelis 11

Esempio: calcolo del seno 1 Inizializzazioni: n 1 termine x senx x termass x termass > soglia? Falso Vero Calcola nuovo termine e lo somma a senx. n n+2 termass termine Visualizza senx Visualizza sin(x) Stop Piero Demichelis 12

Esempio: calcolo del seno #include <stdio.h> #include <math.h> const double soglia = 0.00005; main() { double x, senx, termine, termass, n; printf ("Angolo in radianti: "); scanf ("%lf ", &x); n = 1; termine = x; senx = x; if (x < 0) termass = - x; else termass = x; Inizializzazioni Piero Demichelis 13

Esempio: calcolo del seno /* Ad ogni ciclo calcola un nuovo contributo */ while (termass > soglia) { termine = - termine * (x * x) / ((n+1) * (n+2)); /* nuovo termine */ senx += termine; /* accumula in senx */ n += 2; /* aggiorna n */ if (termine < 0) /* aggiorna il valore assoluto di termine */ termass = -termine; else termass = termine; } printf ("\nil seno di %lf e' %lf\n", x, senx); printf ("\nvalore fornito dalla funzione di libreria: %lf\n", sin(x)); } Piero Demichelis 14

Istruzione for In altri linguaggi il costrutto for permette di eseguire una istruzione, semplice o composta, per un numero prefissato di volte (ciclo a contatore). Nel linguaggio C è più generale, al punto da poter essere assimilata ad una particolare riscrittura del costrutto while. Sintassi: for (<inizializzazione>; <condizione>; <aggiornamento>) <istruzione>; Piero Demichelis 15

Istruzione for <condizione> è un'espressione logica; <inizializzazione> e <aggiornamento> sono invece espressioni di tipo qualsiasi. L'istruzione for opera secondo il seguente algoritmo: - viene calcolata <inizializzazione>; - finché <condizione> è vera (valore non nullo) ; viene eseguita <istruzione>; viene calcolato <aggiornamento>. Piero Demichelis 16

Istruzione for Diagramma di flusso: Calcola l espressione <inizializzazione> I <condizione> V <istruzione> F O Calcola l espressione <aggiornamento> Piero Demichelis 17

Istruzione for Di fatto il costrutto for è del tutto equivalente al seguente frammento di programma: <inizializzazione> while (<condizione>) { <istruzione> <aggiornamento> } Poiché non vi sono restrizioni sulla <istruzione> da eseguire nel corpo del ciclo, questa può contenere a sua volta istruzioni for (for annidati ), o altri costrutti di controllo (if, while, switch, ecc.). Piero Demichelis 18

Istruzione for Problema: leggere da tastiera un valore intero N e un carattere carat, e visualizzare una riga di N caratteri carat - esempio: N = 10, carat = * output ********** - soluzione iterativa: ripeti N volte l operazione stampa carat - Programma: #include <stdio.h> main() { int N, indice; char carat; printf ("\nintroduci un carattere e un intero: "); scanf ("%c%d", &carat, &N); for (indice=0; indice<n; indice++) printf ("%c", carat); /*senza \n!!!!*/ printf ("\n"); } Piero Demichelis 19

Istruzione for: esercizio Leggere da tastiera un numero intero N; successivamente leggere da tastiera N numeri interi, e calcolarne la media. Inoltre si controlli che ogni numero inserito sia compreso tra 0 e 30; in caso contrario, il numero deve essere ignorato. Al termine visualizzare la media dei soli valori validi. Analisi: - Problema iterativo: si devono leggere N numeri da tastiera. - Calcolo della media e controllo di ogni valore inserito (tra 0 e 30). Piero Demichelis 20

Istruzione for: soluzione Pseudocodice: - Legge N da tastiera; - Inizializza a 0 il totale (totale) ; - Inizializza a 0 un contatore per i validi (cont_validi); - Con un indice ind che va da 1 a N: legge un valore num da tastiera; Se num è < 0 oppure > 30 segnala che non è un valore valido e lo trascura, - altrimenti : accumula num nel totale; incrementa di 1 cont_validi; - Calcola la media (totale / cont_validi). Piero Demichelis 21

#include <stdio.h> #include <conio.h> Istruzione for: soluzione main() { int num, ind, N, totale, cont_validi; clrscr(); totale = 0; cont_validi = 0; printf ("\nintroduci N: "); scanf ("%d", &N); Piero Demichelis 22

Istruzione for: soluzione for (ind = 1; ind <= N; ind++) { /* per ogni valore introdotto */ printf ("\nintroduci il valore di indice %d: ", ind); scanf ("%d", &num); if (num < 0 num > 30) /* controllo validità */ printf ("\nvalore non valido"); else { totale += num; /* accumula num nel totale */ cont_validi++; } } printf ("\nla media è: %f\n", (float)totale/(float)cont_validi); } Piero Demichelis 23

Esercizio: generazione di un triangolo Realizzare un programma in grado di generare un triangolo di "*" sul video, le cui dimensioni (numero di righe su cui si sviluppa il triangolo) siano fornite da tastiera. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Poiché il video è composto da 80 colonne, sia 80 la dimensione massima. Piero Demichelis 24

Generazione di un triangolo: soluzione Una possibile organizzazione del programma potrebbe essere costituito dalla seguente struttura: - controlla se il numero di colonne (calcolato in base al numero di righe) è < di 80; - se nrighe è il numero di righe da stampare, per nrighe volte esegui: - scrivi un certo numero di spazi; - scrivi un certo numero di "*". Piero Demichelis 25

Generazione di un triangolo: soluzione Per la relazione tra il numero di spazi ed il numero di '*' si consideri la figura: 1 a riga * 2 a riga * * * 3 a riga * * * * * n a riga * * * * * * * N o spazi - nell'ultima riga se ne devono stampare 0, nella penultima 1, nella terzultima 2, ecc.: in una generica riga rigacorr saranno: nrighe - rigacorr; N o asterischi - nella prima riga se ne deve stampare 1, nella seconda 3, nella terza 5, ecc.: nella generica riga rigacorr saranno: (rigacorr*2) - 1. Piero Demichelis 26

Generazione di un triangolo: soluzione #include <stdio.h> main() { int nrighe, ncolon, rigacorr, coloncorr; printf ("\nnumero righe del triangolo: "); scanf ("%d", &nrighe); printf ("\n\n\n"); ncolon = nrighe * 2-1; /* calcola il numero di colonne */ if (ncolon >= 80) printf ("\nerrore: troppe colonne!"); else { Piero Demichelis 27

Generazione di un triangolo: soluzione for (rigacorr = 1; rigacorr <= nrighe; rigacorr++) { for (coloncorr = 1; coloncorr <= (nrighe - rigacorr); coloncorr++) printf (" "); /* output degli spazi */ for (coloncorr = 1; coloncorr <= (rigacorr*2)-1; coloncorr++) printf ("*"); /* output degli asterischi */ printf ("\n"); /* output di new line: finita una riga! */ } } } Piero Demichelis 28

Istruzione do... while Sintassi: do <istruzione> while (<condizione>) I <istruzione> Ripeti <istruzione>, che può essere semplice o composta, finché <condizione> è vera. V <condizione> F O Piero Demichelis 29

Istruzione do... while: osservazioni L istruzione do... while realizza il costrutto repeat - until della programmazione strutturata. <condizione> deve essere di tipo logico ed è calcolata ad ogni iterazione; <istruzione> pertanto è sempre eseguita almeno una volta (anche se <condizione> è subito falsa); se <condizione> non diventa mai falsa non si esce mai dal loop! come per gli altri costrutti<istruzione> è una normale istruzione composta e può contenere qualsiasi tipo di istruzione o costrutto (altri while, if, switch, ecc.), dando origine a strutture annidate. Piero Demichelis 30

Istruzione do... while: esempio Calcolare il valore della serie armonica: y n 1 1 1 1 2 3 n terminando il calcolo quando un fattore contribuisce per meno di 0.00005. La serie armonica si trova in numerose applicazioni quale, ad esempio, il calcolo degli interessi composti. Piero Demichelis 31

Istruzione do... while: esempio #include <stdio.h> const double soglia = 0.00005; main() { double y, termine; int n; y = 0.0; n = 1; do { termine = 1.0 / n; y += termine; n++; } while (termine > soglia); } printf ("\nil valore (trovato per n= %d) è: %lf ", (n-1), y); Piero Demichelis 32