La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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

Presentazioni simili


Presentazione sul tema: "1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone."— Transcript della presentazione:

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

2 Copyright © The McGraw-Hill Companies, srl 2 Strutture di controllo in C Informatica A – V. Perrone Indice Rappresentazione degli algoritmi tramite flow chart Istruzione La parte dichiarativa L I/O Primi esempi … che girano

3 Copyright © The McGraw-Hill Companies, srl 3 Strutture di controllo in C Informatica A – V. Perrone 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)

4 Copyright © The McGraw-Hill Companies, srl 4 Strutture di controllo in C Informatica A – V. Perrone Algoritmo = dati + istruzioni Composto da Dati Iniziali Dati Finali (soluzione) Algoritmo Dati Istruzioni che operano sui dati

5 Copyright © The McGraw-Hill Companies, srl 5 Strutture di controllo in C Informatica A – V. Perrone 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 )

6 Copyright © The McGraw-Hill Companies, srl 6 Strutture di controllo in C Informatica A – V. Perrone Criteri di classificazione dei dati Visibilità da parte dellutente –visibile (di ingresso o uscita) –trasparente (dati temporanei di supporto) Variabilità nel tempo –costanti –variabili (acquisizione dallesterno o assegnazione) Struttura –elementari (interi, alfanumerici, booleani, …) –strutturati (array, matrici, …)

7 Copyright © The McGraw-Hill Companies, srl 7 Strutture di controllo in C Informatica A – V. Perrone 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 oppureStampa B

8 Copyright © The McGraw-Hill Companies, srl 8 Strutture di controllo in C Informatica A – V. Perrone Rappresentazione degli Algoritmi 1. Linguaggio naturale 2. Diagramma a blocchi 3. Pseudo codice 4. Linguaggio di programmazione

9 Copyright © The McGraw-Hill Companies, srl 9 Strutture di controllo in C Informatica A – V. Perrone Rappresentare gli algoritmi Linguaggio naturale - Sollevare il ricevitore - Attendere il segnale di linea libera - Comporre il numero - … Pseudo codice Input A,B Tot 0 While A!=0 Do Tot Tot + B A A – 1 Output Tot Linguaggio programmazione #include Int main (void){ puts(ciao mondo!); return Exit_success; } Flow Chart

10 Copyright © The McGraw-Hill Companies, srl 10 Strutture di controllo in C Informatica A – V. Perrone Diagrammi di flusso

11 Copyright © The McGraw-Hill Companies, srl 11 Strutture di controllo in C Informatica A – V. Perrone Diagrammi di flusso I blocchi sono collegati fra loro da archi orientati. –Larco identifica la sequenza delle operazioni –La freccia identifica il flusso della esecuzione SI NO

12 Copyright © The McGraw-Hill Companies, srl 12 Strutture di controllo in C Informatica A – V. Perrone Esempio Esempio: dati in ingresso due numeri A e B, si calcoli e stampi il maggiore.

13 13 Le strutture di controllo

14 Copyright © The McGraw-Hill Companies, srl 14 Strutture di controllo in C Informatica A – V. Perrone Selezione semplice

15 Copyright © The McGraw-Hill Companies, srl 15 Strutture di controllo in C Informatica A – V. Perrone Selezione a due vie

16 Copyright © The McGraw-Hill Companies, srl 16 Strutture di controllo in C Informatica A – V. Perrone Ciclo a condizione iniziale

17 Copyright © The McGraw-Hill Companies, srl 17 Strutture di controllo in C Informatica A – V. Perrone Ciclo a condizione finale

18 18 Alcuni esempi di algoritmo

19 Copyright © The McGraw-Hill Companies, srl 19 Strutture di controllo in C Informatica A – V. Perrone Esempio: il prodotto di due interi positivi Leggi W Leggi Y Somma W a se stesso Y volte Scrivi risultato

20 Copyright © The McGraw-Hill Companies, srl 20 Strutture di controllo in C Informatica A – V. Perrone Prodotto di due interi positivi 1Leggi W 2Leggi Y 3SP = 0 4NS = Y 5SP = SP + W 6NS = NS - 1 7NS = 0? Se NO: torna a 5 8Z = SP 9Scrivi Z Procedimento sequenziale Non ambiguo Formulazione generale Prevede tutti i casi (che succede se Y < 0?)

21 Copyright © The McGraw-Hill Companies, srl 21 Strutture di controllo in C Informatica A – V. Perrone Strumenti per la descrizione degli algoritmi Semi-formali (specifiche iniziali, ancora intelligibili solo allessere umano) Formali (programmi da eseguire): linguaggi di programmazione

22 Copyright © The McGraw-Hill Companies, srl 22 Strutture di controllo in C Informatica A – V. Perrone 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 PROCESSI/O DECISION SI NO

23 Copyright © The McGraw-Hill Companies, srl 23 Strutture di controllo in C Informatica A – V. Perrone Esempio Start Leggi N S 0 I 1 S S+I I I+1 Scrivi S END I > N ? NOSI Calcolare e poi stampare la somma dei primi N numeri naturali

24 Copyright © The McGraw-Hill Companies, srl 24 Strutture di controllo in C Informatica A – V. Perrone 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 lalgoritmo immaginando che i dati di ingresso siano sempre corretti (cioè sempre maggiori di zero). Modificare lalgoritmo in modo da considerare anche la possibilità che siano inseriti valori inferiori a 1.

25 Copyright © The McGraw-Hill Companies, srl 25 Strutture di controllo in C Informatica A – V. Perrone Start Leggi N P 1 I 1 I < N NO SI I I + 1 P P * I Scrivi P End Diverse alternative (e.g. 7!) 1*2=21*2=2 2*3=62*3=6 6*4=24 24*5= *6= *7=5040 7*6=42 42*5= *4= *3= *2=5040 Start Leggi N P N N > 2 NO SI N N - 1 P P * N Scrivi P End

26 Copyright © The McGraw-Hill Companies, srl 26 Strutture di controllo in C Informatica A – V. Perrone T pos NIP note t 1 ?????? t 2 4???? t 3 411I < N t t 5 422I < N t t 7 436I < N t t I = N t t Tracciato dellesecuzione Ipotizziamo di calcolare 4! Start Leggi N P 1 I 1 I < N NO SI I I + 1 P P * I Scrivi P End Attenzione: il valore iniziale non è 0!! Può non esserci oppure esserci ma non essere noto.

27 Copyright © The McGraw-Hill Companies, srl 27 Strutture di controllo in C Informatica A – V. Perrone Start Leggi N P 1 I 1 I < N NO SI I I + 1 P P * I Scrivi P End Le alternative sono diverse? Start Leggi N P N N > 2 NO SI N N - 1 P P * N Scrivi P End Cosa succede se il dato in ingresso non rispetta le specifiche (N > 0)? Per esempio, che risultato restituisce lesecutore per N = 0 ? e per N = -4 ? N = 0 P = 1 N = -4 P = 1 N = 0 P = 0 N = -4 P = -4

28 Copyright © The McGraw-Hill Companies, srl 28 Strutture di controllo in C Informatica A – V. Perrone N > 0 NO SI Scrivi Errore! End P 1 I 1 I < N NO SI I I + 1 P P * I Scrivi P Start Leggi N Start Leggi N P 1 I 1 I < N NO SI I I + 1 P P * I Scrivi P End Come gestire le eccezioni Start Leggi N P 1 I 1 I < N NO SI I I + 1 P P * I Scrivi P End N > 0 NO SI Scrivi Errore! Algoritmo per il caso normale. Come lo modifico per gestire anche i casi che non erano stati previsti?

29 29 Strutture di controllo in C -- Sintassi in C -- Corso di Informatica A Vito Perrone

30 Copyright © The McGraw-Hill Companies, srl 30 Strutture di controllo in C Informatica A – V. Perrone 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");

31 Copyright © The McGraw-Hill Companies, srl 31 Strutture di controllo in C Informatica A – V. Perrone 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

32 Copyright © The McGraw-Hill Companies, srl 32 Strutture di controllo in C Informatica A – V. Perrone 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]; }

33 Copyright © The McGraw-Hill Companies, srl 33 Strutture di controllo in C Informatica A – V. Perrone Il ciclo for (2) /* Programma InvertiSequenza */ #include #defineLunghezzaSequenza100 void main () { intContatore; intMemorizzazione[LunghezzaSequenza]; for(Contatore = 0; Contatore < LunghezzaSequenza; Contatore++) scanf ("%d", &Memorizzazione[Contatore]); for(Contatore = LunghezzaSequenza – 1; Contatore >= 0; Contatore –– ) printf ("%d", Memorizzazione[Contatore]); }

34 Copyright © The McGraw-Hill Companies, srl 34 Strutture di controllo in C Informatica A – V. Perrone Il ciclo for (3) /* Programma ContaCaratteri */ #include #defineDimVettoreFrequenze123 voidmain () { charDato, Cursore; intFrequenzaCaratteri[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 */ …

35 Copyright © The McGraw-Hill Companies, srl 35 Strutture di controllo in C Informatica A – V. Perrone … /* 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'alfabeto e non altro carattere non ammesso */ if(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)

36 Copyright © The McGraw-Hill Companies, srl 36 Strutture di controllo in C Informatica A – V. Perrone … /* 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 compare nel testo è: %d\n", Cursore, FrequenzaCaratteri[Cursore]); } Il ciclo for (5)

37 Copyright © The McGraw-Hill Companies, srl 37 Strutture di controllo in C Informatica A – V. Perrone 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; }

38 Copyright © The McGraw-Hill Companies, srl 38 Strutture di controllo in C Informatica A – V. Perrone 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)

39 Copyright © The McGraw-Hill Companies, srl 39 Strutture di controllo in C Informatica A – V. Perrone switch(Dipendente.Qualifica) { caseCapoProgetto:Dipendente.Retribuzione = (Dipendente.Retribuzione * 11) / 10; break; caseVenditore:Dipendente.Retribuzione = (Dipendente.Retribuzione * 12) / 10; break; caseSegretario: Dipendente.Retribuzione = (Dipendente.Retribuzione * 12) / 10; break; } Il costrutto switch (3)

40 Copyright © The McGraw-Hill Companies, srl 40 Strutture di controllo in C Informatica A – V. Perrone … /* Programma Melodia dal tuo nome */ { charC; intresto; 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)

41 Copyright © The McGraw-Hill Companies, srl 41 Strutture di controllo in C Informatica A – V. Perrone 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 */

42 Copyright © The McGraw-Hill Companies, srl 42 Strutture di controllo in C Informatica A – V. Perrone /* 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 = '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)

43 Copyright © The McGraw-Hill Companies, srl 43 Strutture di controllo in C Informatica A – V. Perrone Listruzione 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");

44 44 Strutture di controllo in C -- Alcuni esercizi -- Corso di Informatica A Vito Perrone

45 Copyright © The McGraw-Hill Companies, srl 45 Strutture di controllo in C Informatica A – V. Perrone 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 Lultimo gruppo è terminato da -1 Si stampino in uscita sequenze di naturali che rappresentano le somme dei valori dei singoli gruppi

46 Copyright © The McGraw-Hill Companies, srl 46 Strutture di controllo in C Informatica A – V. Perrone Un metodo per scrivere programmi (Top-Down) 2/4 Prima iterazione cerca gruppo; while (esiste un gruppo) { calcola sommatoria; stampa sommatoria; passa a prossimo gruppo; } Seconda iterazione int i; scanf(%d, &i); while (i != -1) { /*Esiste un gruppo*/ calcola sommatoria; stampa sommatoria; passa a prox. gruppo; }

47 Copyright © The McGraw-Hill Companies, srl 47 Strutture di controllo in C Informatica A – V. Perrone Un metodo per scrivere programmi (Top-Down) 3/4 Terza iterazione int i; int sum; scanf(%d, &i); while (i != -1) { /*Esiste un gruppo*/ sum=0; accumula sommatoria gruppo attuale printf (%d \n, sum); passa al prossimo gruppo; } Quarta iterazione int 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 */ }

48 Copyright © The McGraw-Hill Companies, srl 48 Strutture di controllo in C Informatica A – V. Perrone 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

49 Copyright © The McGraw-Hill Companies, srl 49 Strutture di controllo in C Informatica A – V. Perrone While e conversione di tipo #include main() { /*legge un carattere e ne stampa il valore ASCII se è 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 (maiuscolo per terminare)\n); scanf (%c, &c); }

50 Copyright © The McGraw-Hill Companies, srl 50 Strutture di controllo in C Informatica A – V. Perrone 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 ); se fosse invece -7, il risultato dovrebbe essere -28 (che corrisponde a (-1)+(-2)+(-3)+(-4)+(-5)+(-6)+(-7)).

51 Copyright © The McGraw-Hill Companies, srl 51 Strutture di controllo in C Informatica A – V. Perrone 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.

52 Copyright © The McGraw-Hill Companies, srl 52 Strutture di controllo in C Informatica A – V. Perrone 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

53 Copyright © The McGraw-Hill Companies, srl 53 Strutture di controllo in C Informatica A – V. Perrone 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"

54 Copyright © The McGraw-Hill Companies, srl 54 Strutture di controllo in C Informatica A – V. Perrone Esercizio L'esecutore deve leggere un intero che rappresenta l'anno, e stampare –la scritta true se lanno in esame è bisestile –la scritta false se lanno 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.

55 Copyright © The McGraw-Hill Companies, srl 55 Strutture di controllo in C Informatica A – V. Perrone 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 lalgoritmo immaginando che i dati di ingresso siano sempre corretti.


Scaricare ppt "1 Strutture di controllo in C -- Flow Chart -- Corso di Informatica A Vito Perrone."

Presentazioni simili


Annunci Google