codifica dell'informazione, aritmetica e...
TRANSCRIPT
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
INTRODUZIONE ALLE ESERCITAZIONI DEL CORSO INFORMATICA B
Un paio di informazioni utili, prima di inziare
2
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
• Pagina web:
3
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
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
LINGUAGGIO C: ISTRUZIONI DI ASSEGNAMENTO, INGRESSO E USCITA (CON FORMATTAZIONE), CONDIZIONALI E ITERATIVE (WHILE).
Passiamo ora alla parte più pratica
6
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 !!!
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
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
Esercizio 5 – Bisestile
Testo: Dato un anno, dire se esso è
bisestile o meno.
Quando un anno è bisestile?
Implementare!
26