codifica dell'informazione, aritmetica e...

26
Facoltà di Ingegneria Industriale Laurea in Ingegneria Energetica, Meccanica e dei Trasporti Informatica B Esercitazione 1 Introduzione al C Andrea Galbiati [email protected] Dipartimento di Elettronica e Informazione

Upload: others

Post on 08-Nov-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Facoltà di Ingegneria Industriale

Laurea in Ingegneria Energetica, Meccanica

e dei Trasporti

Informatica B – Esercitazione 1

Introduzione al C

Andrea Galbiati [email protected]

Dipartimento di

Elettronica e Informazione

Page 2: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

INTRODUZIONE ALLE ESERCITAZIONI DEL CORSO INFORMATICA B

Un paio di informazioni utili, prima di inziare

2

Page 3: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Presentazione

• Andrea Galbiati, assegnista di ricerca

presso ISPG

• Telefono: 02 2399 9653

• Email: [email protected]

• No orario di ricevimento fisso, massima

disponibilità dopo le esercitazioni o via

mail

• Pagina web:

3

Page 4: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Organizzazione: orari esercitazioni

• Esercitazioni il venerdì 12h15 – 14h15

– Predilezione per 1h30 senza pause

12h30 – 14h00

• Calendario completo sul sito

• In caso di modifiche o variazioni

dell’ultima ora

• SEZIONE NEWS DELLA PAGINA

WEB!

4

Page 5: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Organizzazione: modalità

• Le diapositive mostrano i concetti con

dei richiami di teoria

• Scrittura ed esecuzione dei programmi

direttamente nell’IDE (Integrated development

environment)

• Strumenti utili (anche per i lab)

– Dev c++ (o Code::Blocks)

• Le vostre domande sono assolutamente

ben accette

5

Page 6: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

LINGUAGGIO C: ISTRUZIONI DI ASSEGNAMENTO, INGRESSO E USCITA (CON FORMATTAZIONE), CONDIZIONALI E ITERATIVE (WHILE).

Passiamo ora alla parte più pratica

6

Page 7: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Codice: struttura

/*

Scrivere un programma che stampa i primi 100 numeri

*/

#include<stdio.h>

int main()

{

int i;

i = 1;

while(i < 100 )

{

printf("%d \n",i) ;

i++; // i=i+1;

}

getchar();

}

7

Page 8: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Codice: struttura

/*

Scrivere un programma che stampa i primi 100 numeri

*/

#include<stdio.h>

int main()

{

int i;

i = 1;

while(i < 100 )

{

printf("%d \n",i) ;

i++; // i=i+1;

}

getchar();

}

8

Commenti: /* */ Multiline// Single line

Page 9: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Codice: struttura

/*

Scrivere un programma che stampa i primi 100 numeri

*/

#include<stdio.h>

int main()

{

int i;

i = 1;

while(i < 100 )

{

printf("%d \n",i) ;

i++; // i=i+1;

}

getchar();

}

9

Direttive pre-processor tipo Include: inserisce definizioni da

librerie esterne

Page 10: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Codice: struttura

/*

Scrivere un programma che stampa i primi 100 numeri

*/

#include<stdio.h>

int main()

{

int i;

i = 1;

while(i < 100 )

{

printf("%d \n",i) ;

i++; // i=i+1;

}

getchar();

}

10

Main: funzione principale eseguita all’avvio del programma

Page 11: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Fasi di building

• Il pre-processor rimuove i commenti e valuta le direttive tipo #include

• Il compilatore controlla la sintassi e che ogni “entità” (eg. variabile) cui ci si riferisce sia stata precedentemente dichiarata e traduce, file per file, il codice sorgente (alto livello) in codice macchina (basso livello)

• L’assembler crea i file oggetto

• Il linker lega i file compilati (objects) e crea l’eseguibile

11Utile conoscere le fasi per fare debug

Pre-processor

Page 12: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Fasi di building

• Il pre-processor rimuove i commenti e valuta le direttive tipo #include

• Il compilatore controlla la sintassi e che ogni “entità” (eg. variabile) cui ci si riferisce sia stata precedentemente dichiarata e traduce, file per file, il codice sorgente (alto livello) in codice macchina (basso livello)

• L’assembler crea i file oggetto

• Il linker lega i file compilati (objects) e crea l’eseguibile

12Utile conoscere le fasi per fare debug

Compiler

Pre-processor

Page 13: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Fasi di building

• Il pre-processor rimuove i commenti e valuta le direttive tipo #include

• Il compilatore controlla la sintassi e che ogni “entità” (eg. variabile) cui ci si riferisce sia stata precedentemente dichiarata e traduce, file per file, il codice sorgente (alto livello) in codice macchina (basso livello)

• L’assembler crea i file oggetto

• Il linker lega i file compilati (objects) e crea l’eseguibile

13Utile conoscere le fasi per fare debug

Compiler

Pre-processor

Assembler

Page 14: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Fasi di building

• Il pre-processor rimuove i commenti e valuta le direttive tipo #include

• Il compilatore controlla la sintassi e che ogni “entità” (eg. variabile) cui ci si riferisce sia stata precedentemente dichiarata e traduce, file per file, il codice sorgente (alto livello) in codice macchina (basso livello)

• L’assembler crea i file oggetto

• Il linker lega i file compilati (objects) e crea l’eseguibile

14Utile conoscere le fasi per fare debug

Compiler

Pre-processor

Linker

Assembler

Page 15: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Codice: le variabili

• Le variabili hanno un nome univoco e memorizzano dati di un certo tipo

• Le variabili vanno dichiarate e possibilmente inizializzate PRIMA di essere usate.– Il compilatore deve sapere di cosa state

parlando...

• Nel codice precedente: dichiaro la variabile i come int (numero intero) e le assegno il valore 1 (essendo il primo assegnamento è anche inizializzazione)

• Ricordatevi che nel C ogni istruzione deve essere terminata con un punto e virgola.

15

Page 16: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Esercizio 1 – Un classico!

Testo: stampare a video:

“Hello World! We are in 2010!”

Obiettivi:

• Assegnamento di variabile

• Per stampare a video: printf(stringa di controllo, elementi da

stampare);

16

Page 17: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Esercizio 1 (2) – La funzione printf

• la funzione printf stampa una stringa a video (stringa = insieme di caratteri)

• Tale stringa (primo parametro della funzione) può contenere indicazioni sulla formattazione delle variabili (secondo parametro della funzione) con il simbolo %:– es: printf(“Ciao! Io ho %i anni”, varAnni) la variabile varAnni verrà formattata come numero intero.

– Possibile con più variabili: printf(“Ciao! Io sono %s e ho %d anni!”, varMioNome, varMieiAnni)

• %s , %d, %i, %f, %c etc.....http://www.cplusplus.com/reference/clibrary/cstdio/printf/

17

Page 18: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Esercizio 1 (3) – La funzione printf

%[flags][width][.precision][length]specifier

18

specifier Output Example

c Character a

d or i Signed decimal integer 392

E

Scientific notation

(mantise/exponent)

using E character

3.9265E+2

f Decimal floating point 392.65

g Use the shorter of %e or %f 392.65

G Use the shorter of %E or %f 392.65

o Signed octal 610

s String of characters sample

u Unsigned decimal integer 7235

x Unsigned hexadecimal integer 7fa

p Pointer address B800:0000

Page 19: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Esercizio 1 (4) – La funzione printf

• Esempi di formattazione:– printf ("Decimals: %d\n", 1977);

• Decimals: 1977

– printf ("Preceding with blanks: %10d

%010d\n", 1977, 1977); (numero lungo 10, se

più corto inserisce spazi o zeri)

• Preceding with blanks: 1977 0000001977

– printf ("Some different radixes: %d %x %o

%#x %#o \n", 100, 100, 100, 100, 100);

• Some different radixes: 100 64 144 0x64 0144

– printf ("floats: %4.2f %08.4f %+.0e %E \n",

3.1416, 3.1416, 3.1416, 3.1416);

(formattazione numerica)

• floats: 3.14 003.1416 +3e+000 3.141600E+000

– printf ("%s \n", "A string");

• A string

19

Page 20: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Esercizio 2 – scanf

Testo: Scrivere un programma che esegua la differenza di due numeri inseriti da tastiera

Per prendere input: scanf(stringa di controllo, indirizzo

variabile di destinazione);

• Stringa di controllo come nella printf

• L’indirizzo di una variabile si ottiene con l’operatore &

20

Page 21: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Esercizio 3 – Costrutto if...else

Testo: Scrivere un programma che, dati due numeri inseriti da tastiera esegua la differenza tra il maggiore e il minore

Condizione: if.... else: if ( condizione )

{

... Se la (le) codizione(i) è (sono) vera(e)...

}

else

{

... altrimenti

}

21

Page 22: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Sintassi if...else

• Relational operators• < less than

• <= less than or equal

• > greater than

• >= greater than or equal

• == equal

• != not equal

• Boolean operators• && and

• || or

• Esempio: verificare se 2<x≤5if( x > 2 && x <= 5)

22

Page 23: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Sintassi if...else

• Relational operators• < less than

• <= less than or equal

• > greater than

• >= greater than or equal

• == equal

• != not equal

• Boolean operators• && and

• || or

• Esempio: verificare se 2<x≤5if( x > 2 && x <= 5)

23

== per le condizioni !!!= per l’assegnamento !!!

Page 24: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Sintassi if...else

• Relational operators• < less than

• <= less than or equal

• > greater than

• >= greater than or equal

• == equal

• != not equal

• Boolean operators• && and

• || or

• Esempio: verificare se 2<x≤5if( x > 2 && x <= 5)

24

== per le condizioni !!!= per l’assegnamento !!!

& operatore indirizzo&& booleano AND

Page 25: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Esercizio 4 – Operazioni matematiche

Scrivere un programma che prende in ingresso un prezzo in euro e restituisce il numero minimo di banconote utilizzando solo pezzi da 50, 20 e 5 euro. Indicare anche la moneta rimanente

Hint: l’operatore % restituisce il resto della divisione intera

es: x = 10 % 4; // x = 2

25

Page 26: Codifica dell'Informazione, Aritmetica e Logicagalbiati.ws.dei.polimi.it/materiale/esercitazioni/c/...•Email: galbiati@elet.polimi.it •No orario di ricevimento fisso, massima disponibilità

Esercizio 5 – Bisestile

Testo: Dato un anno, dire se esso è

bisestile o meno.

Quando un anno è bisestile?

Implementare!

26