Capitolo 3 Sviluppo di Programmi Strutturati

Documenti analoghi
Introduzione al linguaggio C

Capitolo 5 - Funzioni

Capitolo 2 Introduzione alla programmazione in C

Capitolo 6 - Array. Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved.

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

Istruzioni iterative (o cicliche)

Corso di Fondamenti di Informatica

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

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

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

Sommario. Obiettivi. Introduzione. JavaScript: Strutture di Controllo. Capire le tecniche di base di problemsolving

Algoritmi e basi del C Struttura di un programma

Esercitazioni di Fondamenti Informatica - Modulo A 1

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

ISTRUZIONI DI ITERAZIONE

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

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

Fondamenti di Informatica

Capitolo 7 I puntatori in C

Programmazione strutturata

INFORMATICA. Strutture iterative

PROGRAMMAZIONE STRUTTURATA

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

C espressioni condizionali

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

Costrutti per il controllo del flusso di esecuzione

7. Strutture di controllo

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Strutture di Controllo

Fondamenti di Informatica

Stringhe. Prof. Lorenzo Porcelli

Algoritmi e basi del C

Strutture di Controllo

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

Istruzioni condizionali di diramazione in Fortran 90

Introduzione a Visual Basic Lezione 2 Cicli e anomalie

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

Programmazione in Java (I modulo)

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

Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j

Operatori in Java. Il Costrutto Condizionale if

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

Linguaggio C Informatica Grafica

Programmazione a blocchi. Algobuild Prof. Sergio Roselli

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

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

If Statement. Il costrutto condizionale if ha la seguente sintassi:

Programmare è un arte

STRUTTURE DI CONTROLLO DEL C++

5 - Istruzioni condizionali

Istruzioni decisionali

Le strutture di controllo in C++

Istruzioni iterative. Istruzioni iterative

COMANDI ITERATIVI. Ivan Lanese

PROGRAMMAZIONE: Le strutture di controllo

opport unamen e t i d en t a i tti if (pippo > 17) { printf( Sei magg ggiorenne! ); } else { printf( Sei minorenne! ); } if (age >= 18)

Le basi del linguaggio Java

Controllo del flusso di esecuzione Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Scrittura formattata - printf

Strutture di ripetizione: while, for e do-while

linguaggio di programmazione e programma

Esercitazione 6. Array

Capitolo 11 Elaborazione di file

Introduzione agli Algoritmi

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

REGISTRATION GUIDE TO RESHELL SOFTWARE

Rappresentazione degli algoritmi

INTRODUZIONE. ALLA PROGRAMMAZIONEColonna 1. in linguaggio C

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

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

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

Espressione di chiamata di funzione

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Programmazione Caratteri, stringhe, tipo unit ed ennuple

Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002

Cap. 4: Espressioni. Operatori

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

Programmare in C. Esempio: Algoritmo del Risveglio

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Laboratorio di Informatica Ingegneria Clinica Lezione 7/11/2011. Prof. Raffaele Nicolussi

Laboratorio di Informatica Ingegneria Clinica Lezione 5/10/2011. Prof. Raffaele Nicolussi

Indice. Ordine di valutazione. Espressioni in C++ Le espressioni in C++ (CAP 4) Alberto Garfagnini e Marco Mazzocco A.A. 2014/ * 20 / 2

Si faccia riferimento all Allegato A - OPS 2016, problema ricorrente REGOLE E DEDUZIONI, pagina 2.

Programmazione web lato client con JavaScript. Marco Camurri 1

$QDOLVLGHOSURJUDPPDTXDGUDWR

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

Fondamenti di Programmazione. Strutture di controllo

Le strutture di controllo

ISTRUZIONI ISTRUZIONI

Programmazione di base

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

Question 1: introduction to computer programming

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

Lezione 6 Introduzione al C++ Mauro Piccolo

CAPITOLO2 PROGRAMMA: PRINTING UN GIOCO DI PAROLE FONDAMENTI DI C. COMPILAZIONE E LINKING USANDO gcc COMPILAZIONE E LINKING. % gcc pun.

Esercizi Programmazione I

Stringhe e allocazione dinamica della memoria

Strutture di controllo del flusso di esecuzione in assembler. MC68000: Status Register

Esercitazione 11. Liste semplici

Transcript:

Capitolo 3 Sviluppo di Programmi Strutturati Introduzione Strutture di controllo If Selection Statement If Else Selection Statement While Repetition Statement Ripetizione Counter-Controlled Uso di una sentinella Operatori di assegnamento Operatori di Incremento e Decremento 1 Introduzione Prima di scrivere un programma: Comprendere a fondo il problema Pianificare con cura un approccio per risolverlo Mentre si scrive un programma: Individuare quali building blocks sono disponibili Usare buoni principi di programmazione 2 3 Strutture di controllo if Selection Statement Teorema di Bohm e Jacopini Tutti i programmi possono essere scritti usando tre strutture di controllo fondamentali SEQUENZA: Nativa nel C. I programmi vengono eseguiti sequenzialmente per default SELEZIONE: Il C ne ha tre tipi: if, if, e switch ITERAZIONE: Il C ne ha tre tipi: while, do while e for Struttura di SELEZIONE: Usata per scegliere tra diverse alternative Pseudocodice: If student s grade is greater than or equal to 0 Print Passed Se la condizione è vera (true) Statement Print eseguito e il programma va al prossimo statement Se falsa (false), print statement ignorato e il programma va al prossimo statement L indentazione rende il programma più leggibile Il C ignora gli spazi bianchi 1

Statement in C: if Selection Statement if ( grade >= 0 ) printf( "Passed\n" ); 5 if Selection Statement if Esegue un azione solo se la condizione è vera (true) if Specifica l azione da eseguire quando la condizione è vera (true) e quando è falsa (false) Pseudocodice: If student s grade is greater than or equal to 0 Print Passed Print Failed Nota la spaziatura e l indentazione if Selection Statement Codice C: if ( grade >= 0 ) printf( "Passed\n"); printf( "Failed\n"); Operatore condizionale ternario (?:) Ha tre argomenti (condizione, valore se true, valore se false) Possiamo scrivere: printf( "%s\n", grade >= 0? "Passed" : "Failed"); Oppure: grade >= 0? printf( Passed\n ) : printf( Failed\n ); 7 if Selection Statement if statement innestati Test per casi multipli tramite if selection statements all interno di if selection statement 8 2

if Selection Statement Pseudocodice per if innestati If student s grade is greater than or equal to 90 Print A If student s grade is greater than or equal to 80 Print B If student s grade is greater than or equal to 70 Print C If student s grade is greater than or equal to 0 Print D Print F 9 if Selection Statement Statement composti: Insieme di statements all interno di coppie di parentesi graffe Esempio: if ( grade >= 0 ) printf( "Passed.\n" ); { printf( "Failed.\n" ); printf( "You must take this course again.\n" ); } Senza le parentesi, lo statement printf( "You must take this course again.\n" ); sarebbe eseguito automaticamente 10 while Repetition Statement Struttura iterativa Il programmatore specifica un azione che deve essere eseguita fino a quando una condizione rimane vera (true) Pseudocodice: While there are more items on my shopping list Purchase next item and cross it off my list Ciclo while ripetuto fino a quando la condizione diviene falsa (false) 11 while Repetition Statement Esempio: int product = 2; while ( product <= 1000 ) product = 2 * product; product <= 1000 true product = 2 * product 12 false 3

Ripetizione Counter-Controlled Ripetizione Counter-controlled Ciclo ripetuto fino a quando un contatore raggiunge un certo valore Il numero di ripetizioni è noto a priori Esempio: 10 studenti rispondono ad un quiz. I risultati (interi tra 0 e 100) per questo quiz sono disponibili. Determinare la media della classe per quel quiz Pseudocodice: Set total to zero Set grade counter to one While grade counter is less than or equal to ten Input the next grade Add the grade into the total Add one to the grade counter Set the class average to the total divided by ten Print the class average 13 1 /* Fig. 3.: fig03_0.c 2 Class average program with counter-controlled repetition */ 3 #include <stdio.h> 5 /* function main begins program execution */ int main() 7 { 8 int counter; /* number of grade to be entered next */ 9 int grade; /* grade value */ 10 int total; /* sum of grades input by user */ 11 int average; /* average of grades */ 12 13 /* initialization phase */ 1 total = 0; /* initialize total */ 15 counter = 1; /* initialize loop counter */ 1 17 /* processing phase */ 18 while ( counter <= 10 ) { /* loop 10 times */ 19 printf( "Enter grade: " /* prompt for input ); */ 20 scanf( "%d", &grade ); /* read grade from user */ 21 total = total + grade; /* add grade to total */ 22 counter = counter + 1; /* increment counter */ 23 } /* end while */ 2 fig03_0.c (Part 1 of 2) 1 25 /* termination phase */ 2 average = total / 10; /* integer division */ 27 28 /* display result */ 29 printf( "Class average is %d\n", average ); 30 31 return 0; /* indicate program ended successfully */ 32 33 } /* end function main */ Enter grade: 98 Enter grade: 7 Enter grade: 71 Enter grade: 87 Enter grade: 83 Enter grade: 90 Enter grade: 57 Enter grade: 79 Enter grade: 82 Enter grade: 9 Class average is 81 fig03_0.c (Part 2 of 2) Program Output 15 Uso di una sentinella Il problema diviene: Sviluppare un programma per calcolare la media della classe su un numero qualsiasi di studenti. Numero di studenti non conosciuto a priori Come fa il programma a sapere quando deve terminare? Usare un valore sentinella Indica la fine dell inserimento dei dati Il ciclo termina quando l utente inserisce il valore sentinella Il valore sentinella viene scelto in modo che non possa essere confuso con un input regolare (ad esempio -1 in questo esempio) 1

Uso di una sentinella 17 1 /* Fig. 3.8: fig03_08.c 2 Class average program with sentinel-controlled repetition */ 3 #include <stdio.h> 5 /* function main begins program execution */ int main() fig03_08.c (Part 1 of 2) 18 Initialize total to zero Initialize counter to zero 7 { 8 int counter; /* number of grades entered */ 9 int grade; /* grade value */ 10 int total; /* sum of grades */ 11 Input the first grade While the user has not as yet entered the sentinel Add this grade into the running total Add one to the grade counter Input the next grade (possibly the sentinel) 12 float average; /* number with decimal point for average */ 13 1 /* initialization phase */ 15 total = 0; /* initialize total */ 1 counter = 0; /* initialize loop counter */ 17 18 /* processing phase */ 19 /* get first grade from user */ If the counter is not equal to zero Set the average to the total divided by the counter Print the average Print No grades were entered 20 printf( "Enter grade, -1 to end: " ); /* prompt for input */ 21 scanf( "%d", &grade ); /* read grade from user */ 22 23 /* loop while sentinel value not yet read from user */ 2 while ( grade!= -1 ) { 25 total = total + grade; /* add grade to total */ 2 counter = counter + 1; /* increment counter */ 27 28 printf( "Enter grade, -1 to end: " ); /* prompt for input */ 29 scanf("%d", &grade); /* read next grade */ 30 } /* end while */ 31 32 /* termination phase */ 33 /* if user entered at least one grade */ 3 if ( counter!= 0 ) { 35 3 /* calculate average of all grades entered */ fig03_08.c (Part 2 of 2) 19 Enter grade, -1 to end: 75 Enter grade, -1 to end: 9 Enter grade, -1 to end: 97 Enter grade, -1 to end: 88 Enter grade, -1 to end: 70 Enter grade, -1 to end: Enter grade, -1 to end: 83 Enter grade, -1 to end: 89 Enter grade, -1 to end: -1 Class average is 82.50 Program Output 20 37 average = ( float ) total / counter; 38 39 /* display average with two digits of precision */ Enter grade, -1 to end: -1 No grades were entered 0 printf( "Class average is %.2f\n", average ); 1 } /* end if */ 2 { /* if no grades were entered, output message */ 3 printf( "No grades were entered\n" ); } /* end */ 5 return 0; /* indicate program ended successfully */ 7 8 } /* end function main */ 5

21 22 Problema Un college ha una lista di risultati di test (1 = superato, 2 = fallito) per 10 studenti Scrivere un programma che analizzi i risultati Se più di 8 studenti superano il test, allora stampa Insegnamento OK" Nota Il programma deve processare 10 resultati del test Sarà usato un ciclo counter-controlled Possono essere usati due contatori Uno per il numero di superato, uno per il numero di fallito Ogni risultato del test result è un numero 1 oppure 2 Se il numero non è 1, assumiamo sia 2 Top level outline Analyze exam results and decide if tuition should be raised First Refinement Initialize variables Input the ten quiz grades and count passes and failures Print a summary of the exam results and decide if tuition should be raised Refine Initialize variables to Initialize passes to zero Initialize failures to zero Initialize student counter to one 23 2 Refine Input the ten quiz grades and count passes and failures to While student counter is less than or equal to ten Input the next exam result If the student passed Add one to passes Add one to failures Add one to student counter Refine Print a summary of the exam results and decide if tuition should be raised to Print the number of passes Print the number of failures If more than eight students passed Print Raise tuition Initialize passes to zero Initialize failures to zero Initialize student to one While student counter is less than or equal to ten Input the next exam result If the student passed Add one to passes Add one to failures Add one to student counter Print the number of passes Print the number of failures If more than eight students passed Print Raise tuition

1 /* Fig. 3.10: fig03_10.c 2 Analysis of examination results */ 3 #include <stdio.h> 25 25 { /* otherwise, increment failures */ 2 failures = failures + 1; 27 } /* end */ 2 5 /* function main begins program execution */ int main() fig03_10.c (Part 1 of 2) 28 29 student = student + 1; /* increment student counter */ 30 } /* end while */ fig03_10.c (Part 2 of 2) 7 { 31 8 /* initialize variables in definitions */ 32 /* termination phase; display number of passes and failures */ 9 int passes = 0; /* number of passes */ 33 printf( "Passed %d\n", passes ); 10 int failures = 0; /* number of failures */ 3 printf( "Failed %d\n", failures ); 11 int student = 1; /* student counter */ 35 12 int result; /* one exam result */ 3 /* if more than eight students passed, print "raise tuition" */ 13 37 if ( passes > 8 ) { 1 /* process 10 students using counter-controlled loop */ 38 printf( "Raise tuition\n" ); 15 while ( student <= 10 ) { 39 } /* end if */ 1 0 17 /* prompt user for input and obtain value from user */ 1 return 0; /* indicate program ended successfully */ 18 printf( "Enter result ( 1=pass,2=fail ): " ); 2 19 scanf( "%d", &result ); 3 } /* end function main */ 20 21 /* if result 1, increment passes */ 22 if ( result == 1 ) { 23 passes = passes + 1; 2 } /* end if */ Passed Failed Passed 9 Failed 1 Raise tuition Program Output 27 Operatori di assegnamento Gli operatori di assegnamento abbreviano le espressioni di assegnamento c = c + 3; può essere abbreviato in c += 3 Statement nella forma variable = variable operator expression; possono essere riscritti nella forma variable operator= expression; Esempi di altri operatori di assegnamento: d -= (d = d - ) e *= 5 (e = e * 5) f /= 3 (f = f / 3) g %= 9 (g = g % 9) 28 7

29 30 Operatori di assegnamento Operatori di Incremento e Decremento Siano: int c = 3, d = 5, e =, f =, g = 12; Operatore di Esempio di Spiegazione Assegna assegnamento espressione += c += 7 c = c + 7 10 a c -= d -= d = d - 1 a d *= e *= 5 e = e * 5 20 a e /= f /= 3 f = f / 3 2 a f %= g %= 9 g = g % 9 3 a g Fig. 3.11 Operatori aritmetici di assegnamento. Operatore di Incremento (++) Può essere usato invece di c+=1 Operatore di Decremento (--) Può essere usato invece di c-=1 Preincremento L operatore è usato prima della variabile (++c or --c) La variable è cambiata prima che l espressione che la contiene sia valutata Postincremento L operatore è usato dopo la variabile (c++ or c--) L espressione viene eseguita prima che la variabile sia cambiata Operatori di Incremento e Decremento Se c è uguale a 5, allora printf( "%d", ++c ); Stampa printf( "%d", c++ ); Stampa 5 In entrambi i casi, c ha il valore Quando la variabile non è in un espressione Preincremento e postincremento hanno lo stesso effetto ++c; printf( %d, c ); Ha lo stesso effetto di c++; printf( %d, c ); 31 1 /* Fig. 3.13: fig03_13.c 2 Preincrementing and postincrementing */ 3 #include <stdio.h> 5 /* function main begins program execution */ int main() 7 { 8 int c; /* define variable */ 9 10 /* demonstrate postincrement */ 11 c = 5; /* assign 5 to c */ 12 printf( "%d\n", c ); /* print 5 */ 13 printf( "%d\n", c++ ); /* print 5 then postincrement */ 1 printf( "%d\n\n", c ); /* print */ 15 1 /* demonstrate preincrement */ 17 c = 5; /* assign 5 to c */ 18 printf( "%d\n", c ); /* print 5 */ 19 printf( "%d\n", ++c ); /* preincrement then print */ 20 printf( "%d\n", c ); /* print */ 21 22 return 0; /* indicate program ended successfully */ 23 2 } /* end function main */ fig03_13.c 32 8

5 5 5 Program Output 33 9