1 strutture di controllo in c -- flow chart -- corso di informatica a vito perrone

55
1 trutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

Upload: mafalda-napoli

Post on 01-May-2015

222 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

1

Strutture di controllo in C -- Flow Chart --

Strutture di controllo in C -- Flow Chart --

Corso di Informatica A

Vito Perrone

Page 2: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

2Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Indice Indice

•Rappresentazione degli algoritmi tramite flow chart

•Istruzione

•La parte dichiarativa

•L’ I/O

•Primi esempi … “che girano”

Page 3: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

3Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Codifica degli algoritmi

• Algoritmo formulato per essere comunicato tra esseri umani – sintetico e intuitivo

– codificato in linguaggi informali o semi-formali (linguaggio naturale, diagrammi di flusso, …)

• Algoritmo formulato per essere eseguito automaticamente– preciso ed eseguibile

– codificato in linguaggi comprensibili dagli esecutori automatici (linguaggio macchina o linguaggio di programmazione di alto livello)

Page 4: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

4Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Algoritmo = dati + istruzioni

Composto da

DatiIniziali

DatiFinali

(soluzione)

Algoritmo

Dati Istruzioni che operano sui dati

Page 5: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

5Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Dati e istruzioni

• Tipi di dati– Numeri naturali o interi o reali (1, -2, 0.34)

– Caratteri alfanumerici (A, B, ..)

– Dati logici o booleani (Vero, Falso)

– Array o vettore di n elementi ({1,2,3})

• Istruzioni– Operazioni di Input/Output (es. leggi, scrivi)

– Operazioni Aritmetico-logiche (es. max = A + B)

– Strutture di controllo (es. SE, RIPETI )

Page 6: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

6Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Criteri di classificazione dei dati

• Visibilità da parte dell’utente– visibile (di ingresso o uscita)– trasparente (dati temporanei di supporto)

• Variabilità nel tempo– costanti– variabili (acquisizione dall’esterno o

assegnazione)

• Struttura– elementari (interi, alfanumerici, booleani, …)– strutturati (array, matrici, …)

Page 7: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

7Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Operazioni elementari

• Operazioni aritmetiche e assegnamenti di valori a singole variabili– Es. C (A + B)

• Condizioni sul valore di singole variabili– se (A > B) allora … altrimenti …

• Lettura e scrittura di variabili– “Leggi A” oppure “Stampa B”

Page 8: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

8Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Rappresentazione degli Algoritmi

• 1. Linguaggio naturale

• 2. Diagramma a blocchi

• 3. Pseudo codice

• 4. Linguaggio di programmazione

Page 9: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

9Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Rappresentare gli algoritmi

Linguaggio naturale- Sollevare il ricevitore- Attendere il segnale di linea libera- Comporre il numero- …

Pseudo codiceInput A,B

Tot 0

While A!=0 Do

Tot Tot + B

A A – 1

Output Tot

Linguaggio programmazione#include <stdo.h>

Int main (void){

puts(“ciao mondo!”);

return Exit_success;

}

Flow Chart

Passo P1

Inizio

Lettura a e b

c a – b

c> 0? No

Scrittura “max è a”

Scrittura “max è b”

Passo P2

Fine

Passo P0

Page 10: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

10Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Diagrammi di flusso

Page 11: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

11Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Diagrammi di flusso

I blocchi sono collegati fra loro da archi orientati.

– L’arco identifica la sequenza delle operazioni

– La freccia identifica il flusso della esecuzione

SI’ NO

Page 12: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

12Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Esempio

Passo P1

Inizio

Lettura a e b

c a – b

c> 0? No

Scrittura “max è a”

Scrittura “max è b”

Passo P2

Fine

Passo P0 Esempio: dati in

ingresso due numeri A e B, si calcoli e stampi il maggiore.

Page 13: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

13

Le strutture di controllo

Le strutture di controllo

Page 14: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

14Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Selezione semplice

No

Sì test

blocco istruzioni

Page 15: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

15Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Selezione a due vie

No Sì test

blocco 1

blocco 2

Page 16: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

16Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Ciclo a condizione iniziale

Sì test

No blocco istruzioni

Page 17: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

17Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Ciclo a condizione

finale

No

Sì test

blocco istruzioni

Page 18: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

18

Alcuni esempi di algoritmo

Alcuni esempi di algoritmo

Page 19: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

19Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Esempio: il prodotto di due interi positivi

• Leggi W

• Leggi Y

• Somma W a se stesso Y volte

• Scrivi risultato

Page 20: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

20Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Prodotto di due interi positivi

1 Leggi W2 Leggi Y3 SP = 04 NS = Y5 SP = SP + W6 NS = NS - 17 NS = 0?

Se NO: torna a 58 Z = SP9 Scrivi Z

• Procedimento sequenziale

• Non ambiguo

• Formulazione generale

• Prevede tutti i casi

(che succede se Y < 0?)

Page 21: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

21Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Strumenti per la descrizionedegli algoritmi

• Semi-formali (specifiche iniziali, ancora intelligibili solo all’essere umano)

• Formali (programmi da eseguire):

linguaggi di programmazione

Page 22: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

22Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Linguaggi semi-formali

• pseudo-codice:– IF A>0 THEN A=A+1 ELSE A=0

• diagrammi di flusso(flow chart, schemi a blocchi):

START

END

PROCESS I/O

DECISIONSI NO

Page 23: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

23Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Esempio Start

Leggi N

S 0I 1

S S+II I+1

Scrivi S

END

I > N ?NOSI

Calcolare e poi stampare la somma dei

primi N numeri naturali

Page 24: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

24Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Esercizio

• L'esecutore deve leggere un intero N e restituire il fattoriale di questo numero, cioè il valore ottenuto da N x (N-1) x (N-2) x … x 1.

• Scrivere l’algoritmo immaginando che i dati di ingresso siano sempre corretti (cioè sempre maggiori di zero).

• Modificare l’algoritmo in modo da considerare anche la possibilità che siano inseriti valori inferiori a 1.

Page 25: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

25Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Start

Leggi N

P 1I 1

I < NNO SI

I I + 1P P * I

Scrivi P

End

Diverse alternative (e.g. 7!)1 * 2 = 22 * 3 = 66 * 4 = 24

24 * 5 = 120120 * 6 = 720720 * 7 = 5040

7 * 6 = 4242 * 5 = 210

210 * 4 = 840840 * 3 = 2520

2520 * 2 = 5040Start

Leggi N

P N

N > 2NO SI

N N - 1P P * N

Scrivi P

End

Page 26: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

26Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

T pos N I P notet1 ?? ?? ??t2 4 ?? ??t3 4 1 1 I <

Nt4 4 1 1t5 4 2 2 I <

Nt6 4 2 2t7 4 3 6 I <

Nt8 4 3 6t9 4 4 24 I =

Nt10 4 4 24t11 4 4 24

“Tracciato” dell’esecuzioneIpotizziamo di calcolare

4!Start

Leggi N

P 1I 1

I < NNO SI

I I + 1P P * I

Scrivi P

End

Attenzione: il valore iniziale non è 0!!Può non esserci oppure esserci ma non essere noto.

Page 27: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

27Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Start

Leggi N

P 1I 1

I < NNO SI

I I + 1P P * I

Scrivi P

End

Le alternative sono “diverse”?Start

Leggi N

P N

N > 2NO SI

N N - 1P P * N

Scrivi P

End

Cosa succede se il dato in ingresso non rispetta le specifiche (N > 0)?

Per esempio, che risultato restituisce l’esecutore per N = 0 ? e per N = -4 ?N = 0 P = 1

N = -4 P = 1N = 0 P = 0N = -4 P = -4

Page 28: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

28Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

N > 0NO SI

Scrivi“Errore!”

End

P 1I 1

I < NNO SI

I I + 1P P * I

Scrivi P

Start

Leggi N

Start

Leggi N

P 1I 1

I < NNO SI

I I + 1P P * I

Scrivi P

End

Come gestire le “eccezioni”

Start

Leggi N

P 1I 1

I < NNO SI

I I + 1P P * I

Scrivi P

End

N > 0NO SI

Scrivi“Errore!”

Algoritmo per il caso “normale”.Come lo modifico per gestire anchei casi che non erano stati previsti?

Page 29: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

29

Strutture di controllo in C -- Sintassi in C --

Strutture di controllo in C -- Sintassi in C --

Corso di Informatica A

Vito Perrone

Page 30: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

30Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Il ciclo while

Contatore = 0; scanf (" %c", &Dato); Testo[Contatore] = Dato;while (Dato != '%' && Contatore < LunghezzaMassima) {

Contatore = Contatore + 1; scanf (" %c", &Dato); Testo[Contatore] = Dato;

}if (Contatore == LunghezzaMassima && Dato != '%')

printf ("La sequenza è troppo lunga");

Page 31: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

31Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Contatore = 0;

do

{

scanf (" %c", &Dato);

Testo[Contatore] = Dato;

Contatore = Contatore + 1;

} while (Dato != '%' && Contatore < LunghezzaMassima);

if (Contatore == LunghezzaMassima && Dato != '%')

printf ("La sequenza è troppo lunga");

Il ciclo do-while

Page 32: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

32Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Istruzioni cicliche:il ciclo for

• Invece di:

VariabileDiConteggio = ValoreIniziale; while (VariabileDiConteggio <= ValoreFinale) {

[Sequenza di istruzioni da ripetere]; VariabileDiConteggio = VariabileDiConteggio + 1;

}

• Si può usare:

for ( VariabileDiConteggio = ValoreIniziale; VariabileDiConteggio <= ValoreFinale;VariabileDiConteggio = Variabile di Conteggio + 1)

{[Sequenza di istruzioni da ripetere];

}

Page 33: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

33Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Il ciclo for (2)

/* Programma InvertiSequenza */#include <stdio.h>#define LunghezzaSequenza 100  void 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]); }

Page 34: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

34Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Il ciclo for (3)/* Programma ContaCaratteri */

#include <stdio.h>#define DimVettoreFrequenze 123  void main (){

char Dato, Cursore; int FrequenzaCaratteri[DimVettoreFrequenze];

/* Inizializzazione dell'array di conteggio FrequenzaCaratteri. Vengono prese in considerazione solo le lettere dell'alfabeto, poiché il programma viene applicato a

un testo costituito da parole */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 */…

Page 35: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

35Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

… /* Inizia la lettura del testo */

while (Dato != '#') {

/* Se il dato letto è uno spazio esso deve essere semplicemente ignorato */if (!(Dato == ' '))

/* Si verifica che il dato letto sia una lettera dell'alfabetoe non altro carattere non ammesso */

if (Dato < 'A' || Dato > 'z' || (Dato > 'Z' && Dato < 'a')) printf ("Il testo contiene dei caratteri non ammessi");

else FrequenzaCaratteri[Dato] = FrequenzaCaratteri[Dato] + 1;

scanf (" %c", &Dato); }…

Il ciclo for (4)

Page 36: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

36Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

…/* Stampa dei totali delle lettere maiuscole */

for (Cursore = 'A'; Cursore <= 'Z'; Cursore++) {

printf ("Il numero di volte in cui il carattere %c compare nel testo è: %d\n", Cursore,

FrequenzaCaratteri[Cursore]);}

/* Stampa dei totali delle lettere minuscole */for (Cursore = 'a'; Cursore <= 'z'; Cursore++) {

printf ("Il numero di volte in cui il carattere %c comparenel testo è: %d\n", Cursore,

FrequenzaCaratteri[Cursore]);}

}

Il ciclo for (5)

Page 37: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

37Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Istruzioni di selezione:il costrutto switch (1)

switch (CarattereLetto){

case 'A': case 'G': case 'H': printf ("Il carattere letto è A o G o H\n");

break;case 'F' : printf ("Il carattere letto è F\n");

break;} 

Page 38: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

38Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

switch (CarattereLetto)

{

case 'A': case 'G': case 'H': printf ("Il carattere letto è A o G o H\n");

break;

case 'F': printf ("Il carattere letto è F\n");

break;

default: printf ("il carattere letto è sbagliato\n");

break;

}

Il costrutto switch (2)

Page 39: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

39Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

switch (Dipendente.Qualifica){

case CapoProgetto: Dipendente.Retribuzione =

(Dipendente.Retribuzione * 11) / 10;break;

case Venditore: Dipendente.Retribuzione =

(Dipendente.Retribuzione * 12) / 10;break;

case Segretario: Dipendente.Retribuzione =

(Dipendente.Retribuzione * 12) / 10;break;

}

Il costrutto switch (3)

Page 40: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

40Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

… /* Programma Melodia dal tuo nome */

{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 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);

}}

Il costrutto switch (4)

Page 41: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

41Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Le istruzioni break e continue (1)

/* Ciclo infinito */ while (true){

scanf ("%d%d", &x, &y);if (x == 0)

/* Esce dal ciclo di lettura se x è uguale a 0 */break;printf ("%f\n", x/y);

}/* break provoca l'esecuzione dell'istruzione che

segue questo commento */

Page 42: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

42Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

/* Codice che elabora tutti i caratteri eccetto le lettere minuscole e maiuscole */

 for (i = 0; i < NumDati; i++) {

scanf (" %c", &Dato); if ((Dato >= 'A' && Dato <= 'Z') || (Dato >= 'a' && Dato <= 'z'))

continue; /* Istruzioni che elaborano gli altri caratteri */

...  

/* continue trasferisce qui il controllo perché possa iniziare la prossima iterazione del ciclo. È importante notare che i++ viene

eseguita anche in questo caso */ }

Le istruzioni break e continue (2)

Page 43: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

43Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

L’istruzione goto

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");

Page 44: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

44

Strutture di controllo in C -- Alcuni esercizi --

Strutture di controllo in C -- Alcuni esercizi --

Corso di Informatica A

Vito Perrone

Page 45: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

45Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Un metodo per scrivere programmi (Top-Down) 1/4

Esempio:

• Si leggano sequenze di gruppi di naturali; ciascun gruppo è separato dal successivo dal numero 0

• L’ultimo gruppo è terminato da “-1”

• Si stampino in uscita sequenze di naturali che rappresentano le somme dei valori dei singoli gruppi

Page 46: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

46Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Un metodo per scrivere programmi (Top-Down) 2/4Prima iterazionecerca gruppo;while (esiste un gruppo) {

calcola sommatoria;stampa sommatoria;passa a prossimo gruppo;

}

Seconda iterazioneint i;scanf(“%d”, &i);while (i != -1) { /*Esiste un gruppo*/

calcola sommatoria;stampa sommatoria;passa a prox. gruppo;

}

Page 47: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

47Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Un metodo per scrivere programmi (Top-Down) 3/4Terza iterazioneint i; int sum;scanf(“%d”, &i);while (i != -1) { /*Esiste un gruppo*/

sum=0;accumula sommatoria gruppo attualeprintf (“%d \n”, sum);passa al prossimo gruppo;

}

Quarta iterazioneint i; int sum;scanf(“%d” , &i);while (i != -1) {

sum=0;while (i!=0 && i != -1) { /*Gruppo non finito: i!=0 && i != -1*/

sum = sum+i; /*accumula sommatoria gruppo attuale*/scanf (“%d” , &i);

}printf (“%d \n” , sum);if (i!= -1) scanf (“%d” , &i);/* se i!=-1 passa al prossimo gruppo */

}

Page 48: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

48Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Un metodo per scrivere programmi (Top-Down) 4/4

Generalizziamo il metodo:• Il programma viene derivato per passi

successivi di raffinamenti• Viene scritto ad ogni passo in un misto di C e

linguaggio naturale (pseudo-codice)• Alla fine del processo di raffinamenti risulta

scritto in C ed è eseguibile• I passi scritti in linguaggio naturale e raffinati

al passo successivo possono diventare commenti

Page 49: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

49Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

While e conversione di tipo

#include <stdio.h>main() {/*legge un carattere e ne stampa il valore ASCIIse è lettera minuscola; se no termina*/

char c; int i;printf(“scrivi un carattere minuscolo (maiuscolo per terminare)\n”);scanf (”%c”, &c);while (c>=’a’ && c<=’z’) {

i=c;printf(“valore ASCII per %c risulta %d”, c, i);printf(“scrivi un carattere minuscolo (maiuscoloper terminare)\n”);scanf (”%c”, &c);

}}

Page 50: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

50Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Esercizio

• L'esecutore deve leggere un numero N indicato da un utente esterno e deve poi calcolare ed infine stampare la somma di tutti i numeri compresi tra 0 e N.

• Si presti attenzione al fatto che il numero indicato dall'utente può essere positivo, negativo e, al limite, anche uguale a zero.

• Per esempio, se il numero indicato dall'utente esterno fosse 5, il risultato generato dall'esecutore dovrebbe essere 15 (che corrisponde a 0+1+2+3+4+5); se fosse invece -7, il risultato dovrebbe essere -28 (che corrisponde a (-1)+(-2)+(-3)+(-4)+(-5)+(-6)+(-7)).

Page 51: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

51Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Esercizio

• L'esecutore deve leggere una sequenza di numeri naturali (i.e. interi positivi strettamente maggiori di zero) e calcolarne (per poi stamparlo) il minimo.

• La sequenza si interrompe non appena viene introdotto un numero negativo oppure uguale a zero.

• Per esempio, data la sequenza 5, 1, 2, 3, 4, -5, il risultato dovrebbe essere: “Il valore minimo è 1”.

Page 52: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

52Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Esercizio

• L'esecutore deve leggere una sequenza di numeri naturali (i.e. interi positivi strettamente maggiori di zero) e calcolarne (per poi stamparli) il massimo, il minimo e la media di questa sequenza.

• La sequenza si interrompe non appena viene introdotto un numero negativo oppure uguale a zero.

• Per esempio, data la sequenza 5, 1, 2, 3, 4, -5, il risultato dovrebbe essere:“Il massimo è 5, il minimo è 1, la media è 3”

Page 53: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

53Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Esercizio

• L'esecutore deve leggere un numero N indicato da un utente esterno, questo numero indica la lunghezza della sequenza di numeri che vengono poi inseriti dallo stesso utente (per esempio, se un utente vuole inserire 20 numeri, prima indica il numero 20, poi specifica i 20 numeri che compongono la sua sequenza, in questo modo egli introdurrà 21 numeri).

• Di questi numeri, l'esecutore deve calcolare e poi stampare il massimo, il minimo e la media.

• Per esempio, data la sequenza 5, 1, 2, 3, 4, -5, il risultato dovrebbe essere:"massimo = 4, minimo = -5, media = 1"

Page 54: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

54Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Esercizio

• L'esecutore deve leggere un intero che rappresenta l'anno, e stampare– la scritta “true” se l’anno in esame è

bisestile– la scritta “false” se l’anno non è bisestile.

• Si ricordi che un anno è bisestile se:– è divisibile per 4 ma non per 100– oppure se è divisibile per 400.

• Per esempio 1900 e 2100 non sono anni bisestili, mentre 1996 e 2000 lo sono.

Page 55: 1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone

55Strutture di controllo in CInformatica A – V. PerroneCopyright © 2004 - The McGraw-Hill

Companies, srl

Esercizio

• L'esecutore deve leggere tre numeri interi che rappresentano una data in termini di giorno, mese e anno, e deve stampare il numero di giorni trascorsi dall'inizio dell'anno.

• Scrivere l’algoritmo immaginando che i dati di ingresso siano sempre corretti.