Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica...

63
Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione del Sofware (Track B) - A.A. 2016/2017 docente: Cataldo Musto [email protected]

Transcript of Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica...

Page 1: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

Laboratorio di InformaticaLinguaggio C

(Parte 1)

Corso di Laurea in Informatica e Tecnologie per la Produzione del Sofware (Track B) - A.A. 2016/2017

docente: Cataldo Musto

[email protected]

Page 2: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

Linguaggio C

10/03/2017 2

• Perchè il linguaggio C ?• C è piccolo (numero limitato di istruzioni)

• Abbastanza semplice da imparare

• E’ efficiente

• Caratterizzato da un buon livello di portabilità

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Page 3: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

Linguaggio C

10/03/2017 3

• C • Evoluzione di due precedenti linguaggi di

programmazione, BCPL e B (by Ritchie)• Usato per scrivere i moderni sistemi operativi

• Il sistema operativo UNIX è scritto in C

• Standardizzazione• Inizialmente esistevano diverse varianti del C,

ma non erano compatibili tra di loro. E’ statoformato un comitato per creare una definizione“non ambigua, e machine-independent"

• Standard creato nel 1989, aggiornato nel 1999 (la versione più comune, detta C-99) ri-aggiornato nel 2011

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Page 4: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

Editor Preprocessor Compiler Linker Loader

10/03/2017 4

Recap: compilazione codice sorgente

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Page 5: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

Editor Preprocessor Compiler Linker Loader

10/03/2017 5

Recap: compilazione codice sorgente

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Scrittura del codice sorgente (in un IDE o con un semplice file di testo)

Page 6: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

Editor Preprocessor Compiler Linker Loader

10/03/2017 6

Recap: compilazione codice sorgente

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Risoluzione delle direttive, ad esempio #define (utilizzata per definire costanti, ad esempio) e #include (utilizzata per includere codice scritto in librerie esterne)

Page 7: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

Editor Preprocessor Compiler Linker Loader

10/03/2017 7

Recap: compilazione codice sorgente

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Verifica la correttezza sintattica del codice sorgente e costruisce un file oggetto (con estensione .o) che viene salvato su disco.

Errori logici (reversibili o irreversibili) non vengono individuati dal compilatore.

Page 8: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

Editor Preprocessor Compiler Linker Loader

10/03/2017 8

Recap: compilazione codice sorgente

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Collega i vari file oggetto costruiti dal compilatore e unisce eventuali librerie esterne, al fine di generare il file eseguibile

Page 9: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

Editor Preprocessor Compiler Linker Loader

10/03/2017 9

Recap: compilazione codice sorgente

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Carica in memoria e lancia l’eseguibile compilato. Il processo è preso in carico dalla CPU che esegue sequenzialmente le istruzioni ed eventualmente alloca della memoria per creare variabili, file su disco, etc.

Page 10: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 10

Linguaggio C: il primo programma

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

1 /* Fig. 2.5: fig02_05.c

2 Addition program */

3 #include <stdio.h>

4

5 /* function main begins program execution */

6 int main()

7 {

8 int integer1; /* first number to be input by user */

9 int integer2; /* second number to be input by user */

10 int sum; /* variable in which sum will be stored */

11

12 printf( "Enter first integer\n" ); /* prompt */

13 scanf( "%d", &integer1 ); /* read an integer */

14

15 printf( "Enter second integer\n" ); /* prompt */

16 scanf( "%d", &integer2 ); /* read an integer */

17

18 sum = integer1 + integer2; /* assign total to sum */

19

20 printf( "Sum is %d\n", sum ); /* print sum */

21

22 return 0; /* indicate that program ended successfully */

23

24 } /* end function main */

Page 11: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 11

Linguaggio C: il primo programma

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

1 /* Fig. 2.5: fig02_05.c

2 Addition program */

3 #include <stdio.h>

4

5 /* function main begins program execution */

6 int main()

7 {

8 int integer1; /* first number to be input by user */

9 int integer2; /* second number to be input by user */

10 int sum; /* variable in which sum will be stored */

11

12 printf( "Enter first integer\n" ); /* prompt */

13 scanf( "%d", &integer1 ); /* read an integer */

14

15 printf( "Enter second integer\n" ); /* prompt */

16 scanf( "%d", &integer2 ); /* read an integer */

17

18 sum = integer1 + integer2; /* assign total to sum */

19

20 printf( "Sum is %d\n", sum ); /* print sum */

21

22 return 0; /* indicate that program ended successfully */

23

24 } /* end function main */

Riga 3: direttive al preprocessore. Aggiunge le funzioni per gestire i flussi di input/output

Page 12: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 12

Linguaggio C: il primo programma

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

1 /* Fig. 2.5: fig02_05.c

2 Addition program */

3 #include <stdio.h>

4

5 /* function main begins program execution */

6 int main()

7 {

8 int integer1; /* first number to be input by user */

9 int integer2; /* second number to be input by user */

10 int sum; /* variable in which sum will be stored */

11

12 printf( "Enter first integer\n" ); /* prompt */

13 scanf( "%d", &integer1 ); /* read an integer */

14

15 printf( "Enter second integer\n" ); /* prompt */

16 scanf( "%d", &integer2 ); /* read an integer */

17

18 sum = integer1 + integer2; /* assign total to sum */

19

20 printf( "Sum is %d\n", sum ); /* print sum */

21

22 return 0; /* indicate that program ended successfully */

23

24 } /* end function main */

Riga 3: direttive al preprocessore. Aggiunge le funzioni per gestire i flussi di input/output

Riga 6: il main è la funzione principale

Page 13: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 13

Linguaggio C: il primo programma

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

1 /* Fig. 2.5: fig02_05.c

2 Addition program */

3 #include <stdio.h>

4

5 /* function main begins program execution */

6 int main()

7 {

8 int integer1; /* first number to be input by user */

9 int integer2; /* second number to be input by user */

10 int sum; /* variable in which sum will be stored */

11

12 printf( "Enter first integer\n" ); /* prompt */

13 scanf( "%d", &integer1 ); /* read an integer */

14

15 printf( "Enter second integer\n" ); /* prompt */

16 scanf( "%d", &integer2 ); /* read an integer */

17

18 sum = integer1 + integer2; /* assign total to sum */

19

20 printf( "Sum is %d\n", sum ); /* print sum */

21

22 return 0; /* indicate that program ended successfully */

23

24 } /* end function main */

Riga 3: direttive al preprocessore. Aggiunge le funzioni per gestire i flussi di input/output

Riga 6: il main è la funzione principale

Riga 8-10: dichiariamo variabili di tipo intero

Page 14: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 14

Linguaggio C: il primo programma

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

1 /* Fig. 2.5: fig02_05.c

2 Addition program */

3 #include <stdio.h>

4

5 /* function main begins program execution */

6 int main()

7 {

8 int integer1; /* first number to be input by user */

9 int integer2; /* second number to be input by user */

10 int sum; /* variable in which sum will be stored */

11

12 printf( "Enter first integer\n" ); /* prompt */

13 scanf( "%d", &integer1 ); /* read an integer */

14

15 printf( "Enter second integer\n" ); /* prompt */

16 scanf( "%d", &integer2 ); /* read an integer */

17

18 sum = integer1 + integer2; /* assign total to sum */

19

20 printf( "Sum is %d\n", sum ); /* print sum */

21

22 return 0; /* indicate that program ended successfully */

23

24 } /* end function main */

Riga 3: direttive al preprocessore. Aggiunge le funzioni per gestire i flussi di input/output

Riga 6: il main è la funzione principale

Riga 8-10: dichiariamo variabili di tipo intero

Riga 12-13: stampa di una stringa, lettura di un valore e memorizzazione in una variabile. Ricordiamo che una variabile è un nome che identifica una locazione di memoria, quindi serve l’operatore & per referenziare l’indirizzo di quella variabile

Page 15: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 15

Linguaggio C: il primo programma

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

1 /* Fig. 2.5: fig02_05.c

2 Addition program */

3 #include <stdio.h>

4

5 /* function main begins program execution */

6 int main()

7 {

8 int integer1; /* first number to be input by user */

9 int integer2; /* second number to be input by user */

10 int sum; /* variable in which sum will be stored */

11

12 printf( "Enter first integer\n" ); /* prompt */

13 scanf( "%d", &integer1 ); /* read an integer */

14

15 printf( "Enter second integer\n" ); /* prompt */

16 scanf( "%d", &integer2 ); /* read an integer */

17

18 sum = integer1 + integer2; /* assign total to sum */

19

20 printf( "Sum is %d\n", sum ); /* print sum */

21

22 return 0; /* indicate that program ended successfully */

23

24 } /* end function main */

Riga 3: direttive al preprocessore. Aggiunge le funzioni per gestire i flussi di input/output

Riga 6: il main è la funzione principale

Riga 8-10: dichiariamo variabili di tipo intero

Riga 12-13: stampa di una stringa, lettura di un valore e memorizzazione in una variabile. Ricordiamo che una variabile è un nome che identifica una locazione di memoria, quindi serve l’operatore & per referenziare l’indirizzo di quella variabile

Page 16: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 16

Linguaggio C: il primo programma

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

1 /* Fig. 2.5: fig02_05.c

2 Addition program */

3 #include <stdio.h>

4

5 /* function main begins program execution */

6 int main()

7 {

8 int integer1; /* first number to be input by user */

9 int integer2; /* second number to be input by user */

10 int sum; /* variable in which sum will be stored */

11

12 printf( "Enter first integer\n" ); /* prompt */

13 scanf( "%d", &integer1 ); /* read an integer */

14

15 printf( "Enter second integer\n" ); /* prompt */

16 scanf( "%d", &integer2 ); /* read an integer */

17

18 sum = integer1 + integer2; /* assign total to sum */

19

20 printf( "Sum is %d\n", sum ); /* print sum */

21

22 return 0; /* indicate that program ended successfully */

23

24 } /* end function main */

Riga 3: direttive al preprocessore. Aggiunge le funzioni per gestire i flussi di input/output

Riga 6: il main è la funzione principale

Riga 8-10: dichiariamo variabili di tipo intero

Riga 12-13: stampa di una stringa, lettura di un valore e memorizzazione in una variabile. Ricordiamo che una variabile è un nome che identifica una locazione di memoria, quindi serve l’operatore & per referenziare l’indirizzo di quella variabile

Riga 18-20: somma aritmetica, assegnazione di un valore a a una nuova variabile e stampa del valore. Lo specificatoredi conversione %d serve a indicare che la variabile è di tipo intero.

Page 17: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 17

Linguaggio C: cenni sulla memoria

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

integer1 45

integer2 72

integer1 45

integer2 72

sum 117

Ogni variabile è identificata attraverso tre elementi. Quali?

Page 18: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 18

Linguaggio C: cenni sulla memoria

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

integer1 45

integer2 72

integer1 45

integer2 72

sum 117

Ogni variabile è identificata attraverso tre elementi. Quali?• Nome• Tipo• Valore

Quando dichiariamo una variabile è importante inizializzarla. Perché?

Nome

Tipo-Valore

Page 19: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 19

Linguaggio C: cenni sulla memoria

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

integer1 45

integer2 72

integer1 45

integer2 72

sum 117

Ogni variabile è identificata attraverso tre elementi. Quali?• Nome• Tipo• Valore

Quando dichiariamo una variabile è importante inizializzarla. Perché?• Per sovrascrivere il precedente

valore memorizzato in quella locazione di memoriaNome

Tipo-Valore

Page 20: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 20

Linguaggio C: cenni sulla memoria

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

integer1 45

integer2 72

integer1 45

integer2 72

sum 117

Ogni variabile è identificata attraverso tre elementi. Quali?• Nome• Tipo• Valore

Quando dichiariamo una variabile è importante inizializzarla. Perché?• Per sovrascrivere il precedente

valore memorizzato in quella locazione di memoria

Quando assegniamo un valore bisogna usare l’operatore &, per indicare di memorizzare il valore nella locazione di memoria cui punta la variabile.

Nome

Tipo-Valore

Page 21: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 21

Linguaggio C: cenni sulla memoria

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

integer1 45

integer2 72

Nome

Tipo-Valore

• Il tipo di dato determina il range e la tipologia di valori che una variabile puòassumere• La scelta del tipo di dato più corretto per

una variabile è una importante sceltaprogettuale in fase di risoluzione del problema e codifica dell’algoritmo

• Ad esempio le variabili di tipo “int” possono assumere valori tra -32768 e 32767 (65536 valori in tutto)

• Perchè esattamente 65536?

Page 22: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 22

Linguaggio C: tipi di dato

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Tipo di dato Dimensione (bits)

bit 1

char 8

unsigned char 8

short 16

unsigned short 16

int 16

unsigned int 16

short long 24

unsigned short long 24

long 32

unsigned long 32

float 24

double 24/32

La scelta del tipo di dato da associare a una variabile deve essere operata valutando il dominio della variabile (l’insieme dei valori che può assumere).

Variabili più piccole riducono la quantità di memoria richiesta dal programma, ma bisogna assicurarsi che i valori da memorizzare nella variabile siano adeguati al tipo di dato scelto.

Perché le variabili intere occupano 16 bit, quindi possono assumere 216

diverse combinazioni

Page 23: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 23Cataldo Musto - Linguaggio C (parte 1)

Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Page 24: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 24

Problem Solving

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

• Prima di scrivere un programma• Comprendere a fondo il problema (analisi)

• Pianificare con cura un approccio per risolverlo (approccio top-down, bottom-up)

• Produrre una soluzione in pseudo-codice o con I flow-chart

• Mentre scrivete un programma• Individuate quali “building blocks” sono disponibili (riuso del codice)

• La maggior parte dei programmi segue una struttura “standard”• Definizione e inizializzazione delle variabili

• Elaborazione dei dati

• Visualizzazione in output dei risultati

Page 25: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 25

Problem Solving

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

• Prima di scrivere un programma• Comprendere a fondo il problema (analisi)

• Pianificare con cura un approccio per risolverlo (approccio top-down, bottom-up)

• Produrre una soluzione in pseudo-codice o con I flow-chart

• Mentre scrivete un programma• Individuate quali “building blocks” sono disponibili (riuso del codice)

• La maggior parte dei programmi segue una struttura “standard”• Definizione e inizializzazione delle variabili

• Elaborazione dei dati

• Visualizzazione in output dei risultati

Page 26: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 26

Programmazione Strutturata

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

• Teorema di Bohm e Jacopini: tutti i programmi possono essere scritti usandotre strutture di controllo fondamentali• Sequenza:

• Nativa nel C. I programmi vengono eseguitisequenzialmente per default

• Selezione: • Il C ne ha tre tipi: if, if…else, e switch

• Iterazione: • Il C ne ha tre tipi: while, do…while e for

Page 27: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 27

Problema 1.1

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Scrivere un programma che stampi un messaggio diverso a seconda chel’utente sia maggiorenne o minorenne.

Input?

Output?

Quale tipologia di istruzioni ci serve?

Page 28: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 28

Problema 1.1

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Scrivere un programma che stampi un messaggio diverso a seconda chel’utente abbia un voto d’esame maggiore o minore di 18.

Input?Voto dell’utente, memorizzata in una variabile di tipo interoOutput?Messaggio, diverso a seconda che il voto sia maggiore o minore di 18Quale tipologia di istruzioni ci serve? Perché?Struttura di selezione. Perché il programma sulla base del valore inserito può sviluppare due diverse alternative.

Page 29: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 29

Struttura di Selezione

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Istruzione Pseudocodice Traduzione in C

if Se il voto dello studente è maggiore di 18Stampa “Promosso”

if…else Se il voto dello studente è maggiore di 18Stampa “Promosso”

Altrimenti Stampa “Bocciato”

Usata per scegliere tra diverse alternative

Page 30: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 30

Struttura di Selezione

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Istruzione Pseudocodice Traduzione in C

if Se il voto dello studente è maggiore di 18Stampa “Promosso”

if ( voto >= 18 ) puts( "Promosso\n" );

if…else Se il voto dello studente è maggiore di 18Stampa “Promosso”

Altrimenti Stampa “Bocciato”

if ( voto >= 18 ) {puts( "Promosso\n" );

}else

puts( “Bocciato\n" );

Oppure

voto >= 60 ? puts( "Promosso\n" ): puts( “Bocciato\n" );

Importante: l’indentazione rende il programma più leggibile

Usata per scegliere tra diverse alternative

Page 31: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 31

Struttura di Selezione

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Istruzione Pseudocodice Traduzione in C

switch Se il voto dello studente è maggiore di 18Stampa “Promosso”

Altrimenti Stampa “Bocciato”

Usata per scegliere tra diverse alternative

Lo pseudocodice è analogo a quella dell’istruzione if…elsema si esprime in modo diverso.

Page 32: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 32

Struttura di Selezione

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Istruzione Pseudocodice Traduzione in C

switch Se il voto dello studente è maggiore di 18Stampa “Promosso”

Altrimenti Stampa “Bocciato”

switch(eta) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17:

puts("Utente minorenne"); break;

default: puts("Utente maggiorenne");

}

Usata per scegliere tra diverse alternative

Lo pseudocodice è analogo a quella dell’istruzione if…elsema si esprime in modo diverso.

Page 33: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 33

Struttura di Selezione

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Istruzione Pseudocodice Traduzione in C

switch Se il voto dello studente è maggiore di 18Stampa “Promosso”

Altrimenti Stampa “Bocciato”

switch(eta) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17:

puts(“Promosso\n"); break;

default: puts(“Bocciato\n");

}

Usata per scegliere tra diverse alternative

Lo pseudocodice è analogo a quella dell’istruzione if…elsema si esprime in modo diverso.

E’ una tipologia di istruzione molto utile se dobbiamo valutare diverse alternative di tipo categorico (non numerico!) – es: città di nascita, provincia di residenza, voto di

un esame (in lettere, tipo ‘A’, ‘B’, ‘C’), gruppo sanguigno, etc.

Page 34: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 34

Problema 1.1

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Scrivere un programma che stampi un messaggio diverso a seconda chel’utente sia maggiorenne o minorenne.

…if ( voto >= 18 ) {

puts( "Promosso\n" ); }else

puts( “Bocciato\n" );…

Aprire una nuova sessione su Repl.it e codificare la soluzione del problema in linguaggio C. Gestire anche eventuali casi limite.

Page 35: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 35

Problema 1.2

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Input?Costo dei singoli Output?Messaggio, diverso a seconda che l’età sia maggiore o minore di 18Quale tipologia di istruzioni ci serve? Perché?Struttura di selezione. Perché il programma sulla base del valore inserito può sviluppare due diverse alternative.

Scrivere un programma che conteggi il costo totale dei prodotti in un carrello. Sappiamo che il carrello può contenere esattamente cinque prodotti.

Page 36: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 36

Problema 1.2

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Scrivere un programma che conteggi il costo totale dei prodotti in un carrello. Sappiamo che il carrello può contenere esattamente cinque prodotti.

Input?Costo dei singoli prodottiOutput?Costo totale della spesao minore di 18Quale tipologia di istruzioni ci serve? Perché?Struttura di iterazione. Perché il programma effettua una operazione (ciclica) sommando il costo dei cinque prodotti nel carrello.

Page 37: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 37

Struttura di Iterazione - while

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Utilizzata per esprimere operazioni che si ripetono finchè una determinata condizione resta vera.

condition action

true

false

Ripete le istruzioni contenute nel ciclofinchè la condizione

è vera.

Page 38: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 38

Struttura di Iterazione – do..while

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Utilizzata per esprimere operazioni che si ripetono finchè una determinata condizione resta vera.

Ripete le istruzioni contenute nel ciclofinchè la condizione

è vera.

Importante: esegue almeno un ciclo!

true

false

action(s)

condition

Page 39: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 39

Struttura di Iterazione – for

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Utilizzata per esprimere operazioni che si ripetono finchè una determinata condizione resta vera.

counter = 1

conditiontrue

counter = 1

counter++action

Segue la stessa struttura del while, ma utilizza una variabile contatore che

viene incrementata dopo il blocco delle istruzioni (action)

Page 40: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 40

Struttura di Iterazione

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Istruzione Pseudocodice Traduzione in C

while

do..while

for

Utilizzata per esprimere operazioni che si ripetono finchè una determinata condizione resta vera.

Scrivere un programma checonteggi il costo totale dei

prodotti in un carrello. Sappiamo che il carrello

può contenere esattamentecinque prodotti.

Page 41: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 41

Struttura di Iterazione

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Istruzione Pseudocodice Traduzione in C

while finchè(numero_prodotti<5)leggi costoaggiungi il costo al totale

do..while

for

Utilizzata per esprimere operazioni che si ripetono finchè una determinata condizione resta vera.

Scrivere un programma checonteggi il costo totale dei

prodotti in un carrello. Sappiamo che il carrello

può contenere esattamentecinque prodotti.

Page 42: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 42

Struttura di Iterazione

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Istruzione Pseudocodice Traduzione in C

while finchè(numero_prodotti<5)leggi costoaggiungi il costo al totale

do..while ripetileggi costoaggiungi il costo al totale

finchè(numero prodotti<5)

for finchè(numero_prodotti<5)leggi costoaggiungi il costo al totale

Utilizzata per esprimere operazioni che si ripetono finchè una determinata condizione resta vera.

Scrivere un programma checonteggi il costo totale dei

prodotti in un carrello. Sappiamo che il carrello

può contenere esattamentecinque prodotti.

Page 43: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 43

Struttura di Iterazione

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Istruzione Pseudocodice Traduzione in C

while finchè(numero_prodotti<5)leggi costoaggiungi il costo al totale

do..while ripetileggi costoaggiungi il costo al totale

finchè(numero prodotti<5)

for finchè(numero_prodotti<5)leggi costoaggiungi il costo al totale

Utilizzata per esprimere operazioni che si ripetono finchè una determinata condizione resta vera.

Come lo rendiamo in linguaggio C?

Page 44: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 44

Struttura di Iterazione

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Istruzione Pseudocodice Traduzione in C

while finchè(numero_prodotti<5)leggi costoaggiungi il costo al totale

while(products<5){scanf(«%d»,&costo);totale = totale + costo;products++;

}

do..while ripetileggi costoaggiungi il costo al totale

finchè(numero prodotti<5)

do {scanf(«%d»,&costo);totale = totale + costo;products++;

} while(products<5);

for finchè(numero_prodotti<5)leggi costoaggiungi il costo al totale

for(products=0; products<5; products++) {scanf(«%d»,&costo);totale = totale + costo;

}

Utilizzata per esprimere operazioni che si ripetono finchè una determinata condizione resta vera.

Page 45: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

Soluzione (parziale)

10/03/2017 45Cataldo Musto - Linguaggio C (parte 1)

Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Scrivere un programma che conteggi il costo totale dei prodotti in un carrello. Sappiamo che il carrello può contenere esattamente cinque prodotti.

while(products<5){scanf(«%d»,&costo);totale = totale + costo;products++;

}Soluzione con while

Aprire una nuova sessione su Repl.it e codificare la soluzione del problema in linguaggio C. Gestire anche eventuali casi limite (quali?)

Page 46: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

Soluzione (con while)

10/03/2017 46Cataldo Musto - Linguaggio C (parte 1)

Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Page 47: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

Soluzione (con do…while)

10/03/2017 47Cataldo Musto - Linguaggio C (parte 1)

Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Page 48: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

Soluzione (con for)

10/03/2017 48Cataldo Musto - Linguaggio C (parte 1)

Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Page 49: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 49

Problema 1.3

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Scrivere un programma che conteggio il costo totale dei prodotti in un carrello. Non sappiamo quanti prodotti può contenere il carrello.

Input?Costo dei singoli prodottiOutput?Costo totale della spesao minore di 18Quale tipologia di istruzioni ci serve? Perché?Struttura di iterazione. Perché il programma effettua una operazione (ciclica) sommando il costo dei prodotti nel carrello. Non conosciamo a priori il numero di prodotti da inserire.

Page 50: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 50

Problema 1.3

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Scrivere un programma che conteggio il costo totale dei prodotti in un carrello. Non sappiamo quanti prodotti può contenere il carrello.

Input?Costo dei singoli prodottiOutput?Costo totale della spesao minore di 18Quale tipologia di istruzioni ci serve? Perché?Struttura di iterazione. Perché il programma effettua una operazione (ciclica) sommando il costo dei prodotti nel carrello. Non conosciamo a priori il numero di prodotti da inserire.

E’ necessario introdurre il concetto di iterazione non controllata!

Page 51: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 51

Problema 1.3

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Scrivere un programma che conteggio il costo totale dei prodotti in un carrello. Non sappiamo quanti prodotti può contenere il carrello.

Input?Costo dei singoli prodottiOutput?Costo totale della spesao minore di 18Quale tipologia di istruzioni ci serve? Perché?Struttura di iterazione. Perché il programma effettua una operazione (ciclica) sommando il costo dei prodotti nel carrello. Non conosciamo a priori il numero di prodotti da inserire.

E’ necessario introdurre il concetto di iterazione non controllata!Non si utilizza un contatore fisso, si utilizza un valore sentinellaSe il valore letto è uguale a quel valore, esce dal ciclo.

Page 52: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 52

Struttura di Iterazione (non controllata)

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Istruzione Pseudocodice Traduzione in C

while finchè(sentinella=true)leggi costoaggiungi il costo al totale

while(costo != -1){scanf(«%d»,&costo);totale = totale + costo;

}

Do..while ripetileggi costoaggiungi il costo al totale

finchè(sentinella=true)

do {scanf(«%d»,&costo);totale = totale + costo;

} while(costo != -1);

for finchè(sentinella=true)leggi costoaggiungi il costo al totale

for(costo = 0; costo != -1;) {scanf(«%d»,&costo);totale = totale + costo;

}

Utilizzata per esprimere operazioni che si ripetono finchè una determinata condizione resta vera.

Page 53: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 53

Struttura di Iterazione (non controllata)

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Istruzione Pseudocodice Traduzione in C

while finchè(sentinella=true)leggi costoaggiungi il costo al totale

while(costo != -1){scanf(«%d»,&costo);totale = totale + costo;

}

Do..while ripetileggi costoaggiungi il costo al totale

finchè(sentinella=true)

do {scanf(«%d»,&costo);totale = totale + costo;

} while(costo != -1);

for finchè(sentinella=true)leggi costoaggiungi il costo al totale

for(costo = 0; costo != -1;) {scanf(«%d»,&costo);totale = totale + costo;

}

Utilizzata per esprimere operazioni che si ripetono finchè una determinata condizione resta vera.

Il valore sentinella va nella condizione. Si tendono ad utilizzare valori non validi per quella variabile

Page 54: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 54

Struttura di Iterazione (non controllata)

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Istruzione Pseudocodice Traduzione in C

while finchè(sentinella=true)leggi costoaggiungi il costo al totale

while(costo != -1){scanf(«%d»,&costo);totale = totale + costo;

}

Do..while ripetileggi costoaggiungi il costo al totale

finchè(sentinella=true)

do {scanf(«%d»,&costo);totale = totale + costo;

} while(costo != -1);

for finchè(sentinella=true)leggi costoaggiungi il costo al totale

for(costo = 0; costo != -1;) {scanf(«%d»,&costo);totale = totale + costo;

}

Utilizzata per esprimere operazioni che si ripetono finchè una determinata condizione resta vera.

Soluzione poco leggibile e poco interpretabile

Page 55: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 55

Struttura di Iterazione (non controllata)

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Istruzione Pseudocodice Traduzione in C

while finchè(sentinella=true)leggi costoaggiungi il costo al totale

while(costo != -1){scanf(«%d»,&costo);totale = totale + costo;

}

Do..while ripetileggi costoaggiungi il costo al totale

finchè(sentinella=true)

do {scanf(«%d»,&costo);totale = totale + costo;

} while(costo != -1);

for finchè(sentinella=true)leggi costoaggiungi il costo al totale

for(costo = 0; costo != -1;) {scanf(«%d»,&costo);totale = totale + costo;

}

Utilizzata per esprimere operazioni che si ripetono finchè una determinata condizione resta vera.

Suggerimento: while e do...while si tendono a preferire per le iterazioni non controllate, mentre il for è la struttura più semplice da adottare quando sappiamo a priori il numero di iterazioni da eseguire è noto.

Page 56: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 56Cataldo Musto - Linguaggio C (parte 1)

Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Soluzione (con while + valore sentinella)

Page 57: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 57Cataldo Musto - Linguaggio C (parte 1)

Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Soluzione (con while + valore sentinella)Quesito: perchè sono necessarie le istruzioni alla riga 8 e 9? Non si poteva partire direttamente con il while?

Page 58: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 58Cataldo Musto - Linguaggio C (parte 1)

Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Soluzione (con while + valore sentinella)Quesito: perchè sono necessarie le istruzioni alla riga 8 e 9? Non si poteva partire direttamente con il while?

Questo è un esempio di programmazione difensiva

Page 59: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 59

Siano: int c = 3, d = 5, e = 4, f = 6, g = 12;

Operatore di assegnamento

Esempio di espressione

Spiegazione Assegna

+= c += 7 c = c + 7 10 a c -= d -= 4 d = d - 4 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.

Cataldo Musto - Linguaggio C (parte 1)Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Recap: operatori di assegnamento

Sono più efficienti perché riducono gli accessi in memoria non creando oggetti temporanei

Page 60: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

10/03/2017 60Cataldo Musto - Linguaggio C (parte 1)

Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Recap: precedenza degli operatoriOperatori Associatività Tipo

++ -- + - ! (type) right to left unary

* / % left to right multiplicative

+ - left to right additive

< <= > >= left to right relational

== != left to right equality

&& left to right logical AND

|| left to right logical OR

?: right to left conditional

= += -= *= /= %= right to left assignment

, left to right comma

Fig. 4.16 Precedenza tra operatori e associatività.

Page 61: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

Recap – Domande?

10/03/2017 61Cataldo Musto - Utilizzo di Eclipse CDT

Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Laboratorio di Informaticadocente: Cataldo [email protected]

Page 62: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

Esercitazione 1

• Obiettivo: utilizzare i concetti base di programmazione strutturata, combinando istruzioni di iterazione e selezione per risolvere problemi complessi. Dimostrare anche di avere conoscenza relativa alla tipizzazione.

• Assignment su Repl.it

10/03/2017 62Cataldo Musto - Utilizzo di Eclipse CDT

Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017

Page 63: Laboratorio di Informaticaswap/labinf1617/2_Linguaggio_C_Parte_1.pdf · Laboratorio di Informatica Linguaggio C (Parte 1) Corso di Laurea in Informatica e Tecnologie per la Produzione

Esercitazione 1

• Il Body Mass Index (BMI) è calcolato come il rapporto tra il peso e il quadrato dell’altezza (espresso in metri) di un individuo

• Scrivere un algoritmo che acquisisca in input età, altezza e peso di dieci individui, e calcoli il BMI di ciascuno di essi e lo mostri sullo schermo.

• L’algoritmo deve calcolare il massimo di altezza e peso e la media del BMI , distinguendo minorenni e maggiorenni

• L’algoritmo deve anche stampare in output i valori massimi di altezza e peso (per le due categorie) e infine stampare un messaggio sullo schermo del tipo «Il campione è mediamente sovrappeso» oppure «il campione è mediamente sottopeso» a seconda che il BMI medio sia maggiore o minore di 25 (sia per i minorenni che per i maggiorenni).

• Modificare l’algoritmo utilizzando un valore sentinella invece di un ciclo con valore predefinito

• Porre attenzione alla scelta dei tipi di dato di ogni variabile e all’eventuale definizione di costanti che possono essere utili all’algoritmo

• Commentare adeguatamente il codice e motivare nei commenti le scelte operate in termini algoritmici e in termini di tipi di dato scelti per le variabili

10/03/2017 63Cataldo Musto - Utilizzo di Eclipse CDT

Laboratorio di Informatica (ITPS, Track B) – Università degli Studi di Bari – A.A. 2016/2017