Corso di Informatica B - Sezione D Esercitazioni Linguaggio...

33
Salvo Daniele Valente Dipartimento di Elettronica e Informazione Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione Facoltà di Ingegneria Industriale Laurea in Ingegneria Energetica, Meccanica e dei Trasporti 1 Corso di Informatica B - Sezione D Esercitazioni Linguaggio C

Transcript of Corso di Informatica B - Sezione D Esercitazioni Linguaggio...

Page 1: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Facoltà di Ingegneria IndustrialeLaurea in Ingegneria Energetica, Meccanica e dei Trasporti

1

Corso di Informatica B - Sezione D

Esercitazioni Linguaggio C

Page 2: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Salvo Daniele Valente

Informazioni utiliDipartimento di Elettronica e Informazione

2Informatica B - Esercitazione 1 del 05/10/2012

‣ Salvo Daniele Valente: assegnista di ricerca presso Sound and Music Computing Lab, Politecnico di Milano - Polo territoriale di Como (http://suono.como.polimi.it)

‣ e-mail:

‣ Pagina web del corso: http://valente.dei.polimi.it‣ Consultate la pagina eb periodicamente, potete seguire anche i fedd RSS‣ Linguaggio C: http://valente.dei.polimi.it/linguaggio_c.html‣ Matlab:http://valente.dei.polimi.it/linguaggio_matlab.html

‣ Esercitazioni: ‣ orario accademico: venerdì 12:15 –14:15‣ orario effettivo 12:30 –14:00, 1h30 senza pause

‣ Variazioni dell’ultima ora: sezione news pagina web

‣ Strumenti utilizzati:‣ Linguaggio C: Code::Blocks‣ Matlab: Matlab/Octave

Laurea in Ingegneria Energetica, Meccanica e dei Trasporti

Page 3: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Facoltà di Ingegneria IndustrialeLaurea in Ingegneria Energetica, Meccanica e dei Trasporti

3

‣ istruzioni base‣operazioni di input-output‣ istruzioni condizionali

Linguaggio C - Esercitazione 1

Informatica B - Esercitazione 1 del 05/10/2012

Page 4: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Salvo Daniele Valente

Qualche consiglio...Dipartimento di Elettronica e Informazione

4

‣ Le diapositive mostrano i concetti con dei richiami di teoria.

‣ Vanno integrate con appunti presi durante le lezioni.

‣ Non è necessario ricopiare il codice, lo trovate sulle slides. Piuttosto segnatevi appunti utili a corredo.

‣ Quando provate l’esecuzione di un programma scrivete il codice manualmente (non copia e incolla). Riscrivere le istruzioni ripetutamente aiuta la memorizzazione.

‣ Le vostre domande sono assolutamente ben accette.

‣ Segnalatemi eventuali errori sulle slides.

Laurea in Ingegneria Energetica, Meccanica e dei Trasporti

Informatica B - Esercitazione 1 del 05/10/2012

Page 5: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Richiami teorici

5

‣ Il linguaggio C è un linguaggio compilato. Questo vuol dire che per passare dal codice al programma vero e proprio serve un passaggio intermedio che ne effettui la trasformazione, il compilatore.

‣Un programma scritto in un linguaggio compilato ha come vantaggio di non aver più bisogno, una volta compilato, del programma specifico per essere eseguito. Inoltre, essendo la traduzione fatta una volta per tutte, sarà di più rapida esecuzione.

‣ Il linguaggio C è uno standard. Nello standard si definiscono le regole sintattiche e le linee guida per il compilatore.

‣Per scrivere codice C basta un editor di testo (tipo Notepad, Word++, Textedit. etc.) ma, come già detto, per creare un programma funzionante dal proprio codice serve un compilatore.

‣ Il C offre anche una serie di funzionalità base (funzioni) che sono raccolte in diverse librerie (vedi dopo).

C - Esercitazione 1

Informatica B - Esercitazione 1 del 05/10/2012

Page 6: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Processo di building

6

C - Esercitazione 1

Pre-processore

Compilatore

Assembler

Linker

/*Hello World program*/#include <stdio.h>int main(){ // Stampo a video la frase printf("Hello World!\n”);}

#include <stdio.h>int main(){ printf("Hello World!\n”);}

section! .text global _start_start:

! mov! edx,len! mov! ecx,msg

Sourcecode

Assemblycode

011001010011001011010

??010100110010110101111001011010001000101101

??010010110100101001100

Objectcode

Codiceeseguibile

Il pre-processor rimuove i commenti e valuta alcune direttive di pre-processamento tipo #include

Il compilatore effettua diversi controlli (tra cui la sintassi) e traduce, file per file, il codice sorgente (alto livello) in codice macchina (basso livello) chiamato anche codice Assembly.

Librerie

L’Assembler crea i file oggetto (binari) ma lascia degli spazi vuoti per le funzioni richiamate esternamente rispetto al codice sorgente.Queste funzioni sono contenute nelle librerie.

Il Linker unisce il l’Object code con le funzioni prelevate dalle librerie e crea il file eseguibile.

011001010011001011010101001100101101001010001011010001000101101101101011110101001101010010110100101001100

build

Informatica B - Esercitazione 1 del 05/10/2012

Page 7: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esempio di codice

7

C - Esercitazione 1

#include <stdio.h>#define MAXNUM 100

/*!Questo è un commento multilinea Usatelo per spiegare cose lunghe USATE I COMMENTI!*/

int main(){!! int i;! // Dichiarazione di i!

! // Inizio il ciclo!! for (i = 1; i <= MAXNUM; i++)!! {! ! printf("%3d)\n", i);! }!! return 0;}

Dichiarazioni pre processore: parola chiave preceduta da #

Commenti: fondamentali. Fateli! Servono per capire cosa state facendo!

Corpo della funzione principale

Informatica B - Esercitazione 1 del 05/10/2012

Page 8: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Fase di esecuzione

8

C - Esercitazione 1

‣ “Se compila, funziona”. NON E' VERO!!!

‣ Se la compilazione è andata a buon fine significa che il codice è formalmente corretto e possiamo lanciare l'eseguibile.

‣ Il lasso di tempo in cui un programma è in esecuzione è anche detto run time

‣ Ciò che succede quando parte il programma è ciò che si è chiesto al programma di fare...che non sempre coincide con quello che avremmo voluto che facesse...questo perchè: il compilatore non conosce le vostre intenzioni!

‣ Tre scenari (i più tipici):‣ Il programma funziona e fa quello che deve.‣ Il programma funziona, ma non fa quello che ci aspettavamo‣ Il programma smette di funzionare

‣ Diagnosticare e risolvere problemi a run time non è semplice. Si ricorre ad uno strumento utilissimo chiamato debugger.

Informatica B - Esercitazione 1 del 05/10/2012

Page 9: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Debugger

9

C - Esercitazione 1

‣ Le righe che compongono il codice di un programma vengono eseguite nell'ordine in cui sono state scritte, grazie al debugger è possibile fermare l'esecuzione in una posizione del codice.

‣ Possiamo segnalare al debugger la posizione in cui fermare l’esecuzione contrassegnando l’istruzione corrispondente con un breakpoint.

‣ Quando l'esecuzione arriva alla riga segnalata il programma va in pausa permettendoci di analizzarne lo stato.

‣ Si può ad esempio:‣ vedere i valori delle variabili ‣ avanzare un passo alla volta nell'esecuzione

‣ Più avanti vedremo come tutto questo si fa ciò nella pratica.

Informatica B - Esercitazione 1 del 05/10/2012

Page 10: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

IDE

10

C - Esercitazione 1

‣ Una IDE (Integrated Developement Environmet) è un programma che contiene al suo interno:‣ Un editor di testo (con syntax highlighting, suggeritore, etc…)‣ Un compilatore‣ Un debugger

‣ Ce ne sono moltissimi, per varie piattaforme (Eclipse, Visual Studio, CodeBlocks, DevC++, NetBeans, Codelite, Xcode, etc...)

‣ Noi useremo Code::Blocks

‣ Sul sito delle esercitazioni trovate:‣ Link per le diverse architetture (Windows, Linux e Mac Intel)‣ Una guida per l'installazione.

‣ Io sono a disposizione per dubbi e problemi

‣ Potete chiedere aiuto anche durante i laboratori

Informatica B - Esercitazione 1 del 05/10/2012

Page 11: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Codice C: come scrivere

11

C - Esercitazione 1

‣ Codice C è formato da istruzioni. Ogni istruzione (e SOLO le istruzioni) deve essere terminata da punto e virgola.

‣ Utile per la leggibilità:

‣ 1 riga. 1 istruzione

‣ Indentazione: allineate le parti di codice (se non state usando un IDE che lo fa automaticamente per voi).

‣ Ricordatevi che il compilatore non ha problemi a leggere un codice estremamente disordinato… ma noi si! Il codice scritto deve essere leggibile.

‣ Essere ordinati aiuta enormemente anche a trovare/risolvere problemi.

Informatica B - Esercitazione 1 del 05/10/2012

Page 12: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 1

12

Stampare a video la scritta:

“Hello world! We are in 2012”

C - Esercitazione 1

Informatica B - Esercitazione 1 del 05/10/2012

Page 13: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 1 - Soluzione

13

C - Esercitazione 1

#include <stdio.h>#define YEAR 2012

Le prime istruzioni da inserire nel codice sono le istruzioni per il pre-processore (quello precedute da #). Nel nostro caso dobbiamo fare un’operazione di output, ovvero stampare un’informazione a schermo. Per farlo utilizzeremo una funzione che è contenuta in una libreria. La libreria è la standard input/output, contenuta nel file <stdio.h>, la includiamo nel codice con l’istruzione #include.

La seconda istruzione è la definizione di una costante. Il pre-processore si occuperà di sostituire il valore 2012 in tutte le posizioni in cui è presente la costante YEAR. Con la #define si posso dichiarare anche brevi funzioni (macro). Per le costanti si utilizza il carattere maiuscolo per una maggiore leggibilità.

Per ulteriori informazioni su #include e #define consulta:http://www.acm.uiuc.edu/webmonkeys/book/c_guide/1.7.html#define

Informatica B - Esercitazione 1 del 05/10/2012

Page 14: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 1 - Soluzione

14

C - Esercitazione 1

Successivamente alle istruzioni del pre-processore inseriamo la funzione principale del codice: main().int main(){...corpo della funzione...}Il corpo della funzione è l’insieme di tutte le istruzioni necessarie allo svolgimento del problema.Definisco la variabile anno corrente:unsigned short currYear = 2012;

Utilizzo la funzione di stampa a video contenuta nella libreria <stdio.h> per visualizzare le date contenute rispettivamente nella variabile currYear e nella costante YEAR (come vedremo, il risultato è identico):printf("Variabile - Hello World! We are in %d!\n", currYear);printf("Define - Hello World! We are in %d!\n", YEAR);

Chiudo il corpo della funzione mail restituendo il valore 0.return 0;

Informatica B - Esercitazione 1 del 05/10/2012

Page 15: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 1 - Soluzione

15

C - Esercitazione 1

La funzione printf("..."); stampa una stringa a video (stringa = insieme di caratteri) con formattazione.

Prende in ingresso due parametri:‣ una stringa da stampare che può contenere n placeholders (segnaposto) con

indicazioni sulla formattazione (simbolo chiave: %)‣ le n variabili da stampare, seguendo l’ordine indicato dai placeholders

Esempio:char nome[10] = {'A', 'n', 'd', 'r', 'e', 'a'};!int anni = 29;!printf("Mi chiamo %s e ho %d anni.", nome, anni);

%s su questo segnaposto verrà inserito il contenuto della variabile nome%d su questo segnaposto verrà inserito il valore di anni

Esistono vari tipi di segnaposto, a seconda del tipo di dato che si vuole stampare.Per ulteriori informazioni su printf e placeholders consulta:http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.12.html#printf

Informatica B - Esercitazione 1 del 05/10/2012

Page 16: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 1 - Soluzione

16

C - Esercitazione 1

Esempi di formattazione: stampare 1977 in tanti modi‣ %d - signed int

printf ("Signed int: %d", 1977);Signed int: 1977

‣ %10d - Signed int preceduto da zeri. Se il numero è più corto di 10 cifre, inserisce zeri o spazi bianchi.printf ("Preceding with blanks: %10d %010d", 1977, 1977); Preceding with blanks: 1977 0000001977

‣ %x - unsigned int stampato in esadecimale‣ %o - unsigned int stampato in ottale‣ forme alternative %#x, %#o

printf ("Some different radixes: %d %x %o %#x %#o", 100, 100, 100, 100, 100);Some different radixes:100 64 144 0x64 0144

Informatica B - Esercitazione 1 del 05/10/2012

Page 17: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 1 - Soluzione

17

C - Esercitazione 1

‣ %f - double precisionprintf ("floats: %4.2f %08.4f %+.0e %E ", 3.1416, 3.1416, 3.1416, 3.1416); (formattazione numerica)floats: 3.14 003.1416 +3e+000 3.141600E+000

‣ %s - stringprintf ("%s ", "A string");A string

Informatica B - Esercitazione 1 del 05/10/2012

Page 18: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 2

18

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

Obiettivi:leggere da input utente

C - Esercitazione 1

Informatica B - Esercitazione 1 del 05/10/2012

Page 19: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 2 - Soluzione

19

C - Esercitazione 1

Questa volta vogliamo effettuare sia una operazione di input che una di output. Ancora una volta la libreria che occorre includere, quindi, è la <stdio.h> .Successivamente procediamo con la scrittura della funzione principale: main().

Definisco le variabili necessarie:int a, b, differenza;

Stampo a video una frase per indicare all’utente di inserire il primo operando...printf("Inserisci il primo numero: ");...e acquisisco il valore che inserisce.scanf("%d",&a); //fflush(stdin);La funzione scanf() legge dallo stdin (tastiera) e mette l'input negli indirizzi delle variabili specificate.Con il placeholder %d si suppone che il numero inserito dall’utente sia un intero.

Nella scanf("%d",&a) è fondamentale passare alla funzione l’indirizzo della variabile e nonla variabile stessa: &a, non a.

Informatica B - Esercitazione 1 del 05/10/2012

Page 20: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 2 - Soluzione

20

C - Esercitazione 1

Ripeto le operazioni per il secondo operandoprintf("Inserisci il secondo numero: ");scanf("%d",&b); // fflush(stdin);

Eseguo la differenza...differenza = a - b; Stampo il risultatoprintf("Differenza: %d", differenza);getchar();

In alcuni casi, una volta visualizzato il risultato a schermo, la finestra di dialogo dell’IDE in uso si chiude automaticamente. La funzione getchar() serve a mantenere attiva la finestra finché non si preme un tasto.

Per ulteriori informazioni su scanf consulta:http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.12.html#scanf

Informatica B - Esercitazione 1 del 05/10/2012

Page 21: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 3

21

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

Obiettivi:Esecuzione condizionaleDifferenza tra assegnamento e confrontoOperatori booleani

Sintassi:if ( condizione ){ ... Se la (le) condizione(i) è (sono) vera(e)...}else{ ... altrimenti}

C - Esercitazione 1

Informatica B - Esercitazione 1 del 05/10/2012

Page 22: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 3

22

C - Esercitazione 1

Operatori di confronto‣ < minore‣ <= minore od uguale‣ > maggiore‣ >= maggiore od uguale‣ == uguale‣ != diverso

‣ x = 29 è un assegnamento. La variabile x assume il valore 29.‣ x == 29 NON assegna, ma valuta l’uguaglianza dei due termini.‣ y == 78 analogamente NON assegna, vale vero o falso (nel nostro

caso falso) ‣ Esempio:

Se la variabile x è maggiore od uguale a 50 fai qualcosa...if( x >= 50 ){ … }

Informatica B - Esercitazione 1 del 05/10/2012

Page 23: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 3

23

C - Esercitazione 1

Capiterà spesso di trovarsi di fronte a condizioni più complesse come:Se x è maggiore di 50 ma minore di 65In questo caso si utilizzano gli operatori Booleani. Booleano è un tipo che può avere solo due valori: vero o falso.‣ && AND‣ || OR

Esempio: verificare se 50 < x ≤ 65x deve essere contemporaneamente maggiore di 50 e minore di 65if( x > 50 && x <= 65)

Esempio: verificare se una persona ha diritto a sconti sullo skipass. L’età deve essere minore di 6 o maggiore di 65if (x < 6 || x >65 )

Attenzione perché l’operatore AND ha la precedenza sull’operatore OR. Usare le parentesi se non si è sicuri.

Informatica B - Esercitazione 1 del 05/10/2012

Page 24: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 3 - Soluzione

24

C - Esercitazione 1

Da ora in poi si sottintenderà che il corpo della funzione sia incluso in nella porzione di codice che segue (salvo diverse indicazioni).#include<stdio.h>

int main() {...}

Analizziamo il corpo della funzione principale.Definisco ed acquisisco le variabili necessarie:int a, b, differenza;

printf("Inserisci il primo numero: ");scanf("%d",&a); fflush(stdin);

printf("Inserisci il secondo numero: ");scanf("%d",&b); fflush(stdin);

Informatica B - Esercitazione 1 del 05/10/2012

Page 25: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 3 - Soluzione

25

C - Esercitazione 1

Controllo chi è il maggioreif ( a > b ){ differenza = a - b;}else{ differenza = b - a;}

Alternativa di controllo con operatore TERNARIO:differenza = (a > b) ? a - b : b - a;ovvero: se (a > b), la differenza vale a - b, altrimenti differenza vale b - a.

Sintassi:variabile=(condiz)? valore_condiz_vera : valore_condiz_falsa;

Informatica B - Esercitazione 1 del 05/10/2012

Page 26: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 3 - Soluzione

26

C - Esercitazione 1

Stampo il risultatoif ( b > a ){ printf("Per la differenza ho invertito i dati di input dato che b>a.");}printf("La differenza vale: %d\n", differenza);

Informatica B - Esercitazione 1 del 05/10/2012

Page 27: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 4

27

Verifica se un anno è bisestile.Un anno è bisestile quando è multiplo di 4 e non di 100 oppure multiplo di 400.

Obiettivi:Operazioni condizioni più complesse

C - Esercitazione 1

Informatica B - Esercitazione 1 del 05/10/2012

Page 28: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 4 - Soluzione

28

C - Esercitazione 1

Definisco ed acquisisco le variabili necessarie:int anno, bisestile;printf("il numero dell'anno: ");scanf("%d", &anno); fflush(stdin); Considero bisestile una variabile booleana, ovvero:se vale 0 --> la considero FALSEaltrimenti --> la consdero TRUE

bisestile = ((anno % 4 == 0) && (anno % 100 != 0)) || (anno % 400 == 0);

L’operazione modulo valore1 % valore2, restituisce il resto della divisione tra i due valori.

Per ulteriori informazioni su tutti gli operatori consulta:http://www.acm.uiuc.edu/webmonkeys/book/c_guide/1.5.html

Informatica B - Esercitazione 1 del 05/10/2012

Page 29: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 4 - Soluzione

29

C - Esercitazione 1

Stampo il risultato:

printf("L'anno %d ",anno);if (! bisestile){ printf("NON ");}printf("e’ bisestile");

Per ulteriori informazioni su tutti gli operatori consulta:http://www.acm.uiuc.edu/webmonkeys/book/c_guide/1.5.html

Informatica B - Esercitazione 1 del 05/10/2012

Page 30: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 5

30

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

Obiettivi:Operatore modulo

C - Esercitazione 1

Informatica B - Esercitazione 1 del 05/10/2012

Page 31: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 5 - Soluzione

31

C - Esercitazione 1

Può essere utile nel codice ripetere delle operazioni diverse volte, magari su elementi diversi.Questo può essere fatto per un numero di volte:‣ infinito (ATTENZIONE!) ‣ finito deciso a runtime‣ finito deciso a compile time

Per farlo esistono diversi costrutti:‣ while‣ for‣ do…while

Informatica B - Esercitazione 1 del 05/10/2012

Page 32: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 5 - Soluzione

32

C - Esercitazione 1

Dichiaro le variabili e prendo in input il prezzoint prezzo, rimanente, n50, n20, n5;printf("Inserisci il prezzo: ");scanf("%d",&prezzo);

Un’operazione facoltativa ma sintomo di buona programmazione è quella svuotare i buffer di ingresso/uscita dopo l’acquisizione dei dati. Si fa con l’istruzione:fflush(stdin);

Calcoliamo il numero di banconote per taglio.Esempio: prezzo 547€Il valore delle divisioni è decimale, ma le variabili sono di tipo int, per cui il valore che verrà  effettivamente assegnato alla variabile sarà la parte intera.n50 = prezzo / 50; numero di banconote da 50 (decimale): 10.94rimanente = prezzo % 50; resto della divisione intera: 47n20 = rimanente / 20; numero di banconote da 20 (decimale): 2.35rimanente = rimanente % 20; resto: 7n5 = rimanente / 5; numero di banconote da 5: 1.4rimanente = rimanente % 5; resto finale: 2

Informatica B - Esercitazione 1 del 05/10/2012

Page 33: Corso di Informatica B - Sezione D Esercitazioni Linguaggio Cvalente.dei.polimi.it/materiale/esercitazioni/c/esercitazione_01.pdf · Esercitazioni Linguaggio C. Politecnico di Milano

Salvo Daniele Valente

Dipartimento di Elettronica e Informazione

Politecnico di Milano - DEI Dipartimento di Elettronica e Informazione

Esercizio 5 - Soluzione

33

C - Esercitazione 1

Stampo i risultatiprintf("Banconote da 50: %d",n50);printf("Banconote da 20: %d",n20);printf("Banconote da 5 : %d",n5);printf("Resto: %d", rimanente); getchar();

Informatica B - Esercitazione 1 del 05/10/2012