DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – [email protected] Ver. aggiornata al 24 Agosto 2015 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Benvenuti nel fantastico mondo del C 2 Il primo programma: ciao mondo DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 3 Ciao Mondo: stdio.h DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Come prima cosa, dobbiamo includere le librerie necessarie al funzionamento del nostro programma. • La libreria stdio.h Standard Input Output Permette di utilizzare I comandi necessari per richiedere dati o visualizzare dei messaggi. 4 Ciao Mondo: main DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Tutti i programmi in C contengono un elemento principale: Il main • main contiene le istruzioni che verranno eseguite all’avvio del nostro programma 5 Ciao Mondo: main DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • La sequenza di istruzioni che caratterizzano il main sono racchiuse tra parentesi graffe • Tale blocco di istruzioni e’ anche noto come corpo • Ogni istruzione deve essere seguita da un punto e virgola 6 Ciao Mondo: printf DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 7 Ciao Mondo: printf DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Stampa a video il mesaggio “Ciao Mondo!” • printf e’ contenuta in stdio.h • Il messaggio da stampare e’ contenuto tra “” 8 Ciao Mondo: printf DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • return e' un comando che ci permette di comunicare con il sistema ospite • In questo caso viene utilizzato per comunicare lo stato di terminazione del programma • 0 indica una terminazione corretta del nostro programma 9 Struttura di un programma C DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE parte dichiarativa globale inclusione librerie / per poter invocare funzioni utili (i/o, ...) / dichiarazione di variabili globali e funzioni int main ( ) { parte dichiarativa locale dichiarazione di variabili locali istruzione 1; istruzione 2; istruzione 3; istruzione 4; ... istruzione N; / tutti i tipi di operazioni, e cioè: / / istr. di assegnamento / / istr. di input / output / / istr. di controllo (condizionali, cicli) / parte esecutiva } Ogni programma C deve contenere un modulo int main() {...} 10 Struttura di un programma C DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Parte dichiarativa: contiene le dichiarazioni degli elementi del programma Dati, ed eventualmente funzioni (ma solo nella parte globale) • Parte esecutiva: contiene le istruzioni da eseguire, che ricadono nelle categorie: Istruzioni di assegnamento () Strutture di controllo: • Condizionali (if-then-else e switch) • Iterative, o cicli (while, do e for) Istruzioni di Input/Output (printf, scanf, ...) 11 Istruzioni semplici e composte DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Sequenze di istruzioni semplici Ogni istruzione semplice termina con ; ; è detto il “terminatore” dell’istruzione • Si possono raggruppare più istruzioni in sequenza tra { e } a costituire un blocco Il blocco costituisce una “super-istruzione” • Non è necessario il ; dopo }, in quanto il blocco è già una istruzione e non necessita del terminatore per diventarla 12 Mostra caratteri DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Problema Si scriva un programma che richieda l’inserimento di un carattere e lo mostri a video 13 Mostra caratteri DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Problema Si scriva un programma che richieda l’inserimento di un carattere e lo mostri a video • Sotto-problema E dove lo salvo il carattere??? 14 Variabili e assegnamenti DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Le variabili non sono altro che dei contenitori (aree di memoria) identificati da un nome univoco. Le variabili vengono definite da un tipo e da un nome. 15 Mostra caratteri DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Problema Si scriva un programma che richieda l’inserimento di un carattere e lo mostri a video 16 Mostra caratteri DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Problema Si scriva un programma che richieda l’inserimento di un carattere e lo mostri a video 17 Tipo carattere e codifica ASCII DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 18 Attenti al “32” DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 19 Attenti al “32” DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 20 Un esempio di calcolo DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 21 Variabili e loro valore DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Problema Come assegno un valore ad un variabile??? 22 Esecuzione degli assegnamenti DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • valutazione dell’espressione che compare a destra del simbolo = • il valore delle variabili che vi compaiono si trova memorizzato nelle celle corrispondenti, e da lì è letto memorizzazione del risultato dell'espressione nella variabile a sinistra del simbolo = 23 Esempi di assegnamento DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE x = 23; w = 'a'; y = z; alfa = x + y; r3 = ( alfa * 43 – xgg ) * ( delta – 32 * j ); x = x + 1; Abbreviazioni (operatori di assegnamento): a = a + 7; a += 7; a = a * 5; a *= 5; a = a + 1; ++a; a = a - 1; --a; Istruzioni della forma variabile = variabile operatore espressione; si possono scrivere come: variabile operatore = espressione; 24 Aritmetica (1/2) DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Operatori aritmetici in C: * per la moltiplicazione e / per la divisione La divisione tra interi elimina il resto (quoziente): 13 / 5 è uguale a 2 L’operatore modulo calcola il resto della divisione: 13 % 5 è uguale a 3 • Precedenza degli operatori: Come in aritmetica, moltiplicazione e divisione hanno priorità su addizione e sottrazione • si usano le parentesi quando c’è ambiguità Per esempio: la media aritmetica di a, b, c: a + b + c / 3 NO !!!! (a + b + c ) / 3 SI 25 Aritmetica (2/2) DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Operazione Operatore C Espressione Espressione C aritmetica Addizione + f+7 f + 7 Sottrazione - p-c p – c Moltiplicazione * bm b * m Divisione / x/y x / y Modulo % r mod s r % s Operatori C Operazioni Precedenza ( ) Parentesi Valutate per prime. Se ci sono degli annidamenti, si valuta prima la coppia più interna. Se ci sono più coppie allo stesso livello, si valuta da sinistra a destra. * , / , % Moltiplicazione, Divisione, Modulo Valutate per seconde. Se ce ne sono diverse, si valutano da sinistra a destra. + , – Addizione, Sottrazione Valutate per ultime. Se ce ne sono diverse, si valutano da sinistra a destra. 26 Come interagiamo con “l’esterno”? DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Input - Output 27 Come interagiamo con “l’esterno”? DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Input - Output printf viene utiizzata per fornire un output del programma a video 28 Come interagiamo con “l’esterno”? DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Input - Output printf viene utiizzata per fornire un output del programma a video scanf viene utilizzato per fornire degli input, e.g. da tastiera, al nostro programma 29 Inserimento dati DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Problema Richiedi all’utente la sua altezza in centrimentri e mostrala a video in metri • Pseudocodice 1.Scrivi “quanto sei alto?” 2.Leggi altezzacm 3.Altezzam = alteccacm/100 4.Scrivi “sei alto: altezzam” 30 Pseudocodice vs Codice C DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Pseudocodice 1. 2. 3. 4. Scrivi “quanto sei alto?” Leggi altezzacm Altezzam = alteccacm/100 Scrivi “sei alto: altezzam” 31 Un primo errore DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 32 Un secondo errore DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 33 Un terzo errore DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 34 Soluzione corretta DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 35 Tipi di dato in C DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • In C esistono diversi tipi di dato built-in, tra cui int: numeri interi float: numeri con virgola (singola precisione) double: numeri con virgola (doppia precisione) char: caratteri (sono interi che possono variare tra 0-255) • Inoltre il C fornisce anche la possibilità di definire dei nuovi tipi di dato 36 Problemi di fine lezione… DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Scrivere un programma che, letti due numeri, individua quello maggiore • Rappresentare in pseudocodice l’agoritmo che, letti 3 numeri, ne calcola il minimo comune multiplo 37 Fonti per lo studio + Credits DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Fonti per lo studio how to solve it, Poyla G • http://math.hawaii.edu/home/pdf/putnam/PolyaHowToSolveIt.p df Informatica arte e mestiere, S. Ceri, D. Mandrioli, L. Sbattella, McGrawHill • Capitolo 3 Introduzione ai sistemi informatici, D. Sciuto, G. Buonanno, L. Mari, 4a Ed, McGrawHill • Capitolo 3, 4 The Art & Craft of Computing, S. Ceri, D. Mandrioli, L. Sbattella, Addison-Wesley • Capitolo 3