DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE C: miti e realtà Marco D. Santambrogio – [email protected] Ver. aggiornata al 8 Marzo 2013 Sulla semantica… DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Che giorno è oggi? 14 Marzo o anche… 14.3 o anche… 3.14 2 Sulla codifica… DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 3 Info di servizio DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Laboratori http://tinyurl.com/IEIMlab2013 Divisione in gruppi • Lunedi’: 95 studenti • Giovedi’: 80 studenti Oggetto del primo lab • Cosa e’ e come funziona un compilatore • Sistemazione degli ambienti di sviluppo • Comandi base da linea di comando • Per progetto sostitutivo Dove: NECST Lab Quando: Mercoledì 20 Marzo @ 8am 4 Maiuscolo: solo if DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 5 Condizione da verificare DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Il carattere inserito deve essere X: =>a Y: <= z • X e Y devono essere entrambe vere X Y X and Y 0 0 0 0 1 0 1 0 0 1 1 1 (prodotto logico) 6 Maiuscolo: AND DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 7 Maiuscolo: codice ottimizzato DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 8 Maiuscolo: esecuzione DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 9 Tautologie e Contraddizioni DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Tautologia Una espressione logica che è sempre vera, per qualunque combinazione di valori delle variabili • Esempio: principio del “terzo escluso”: A or not A (tertium non datur, non si dà un terzo caso tra l’evento A e la sua negazione) • Contraddizione Una espressione logica che è sempre falsa, per qualunque combinazione di valori delle variabili • Esempio: principio di “non contraddizione”: A and not A (l’evento A e la sua negazione non possono essere entrambi veri) 10 Equivalenza tra espressioni DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Due espressioni logiche si dicono equivalenti (e si indica con ) se hanno la medesima tabella di verità. La verifica è algoritmica. Per esempio: AB not A and not B not (A or B) 00 1 and 1 = 1 not 0 = 1 01 1 and 0 = 0 not 1 = 0 10 0 and 1 = 0 not 1 = 0 11 0 and 0 = 0 not 1 = 0 • Espressioni logiche equivalenti modellano gli stessi stati di verità a fronte delle medesime variabili 11 Proprietà dell’algebra di Boole DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • L’algebra di Boole gode di svariate proprietà, formulabili sotto specie di identità cioè formulabili come equivalenze tra espressioni logiche, valide per qualunque combinazione di valori delle variabili 12 Algebra Booleana a due valori: Assiomi DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Gli operatori descritti godono delle proprietà definite dai seguenti assiomi (postulati di Huntington): Le operazioni di disgiunzione (+) e congiunzione (·) sono commutative, cioè per ogni elemento a,b B a+b = b+a a·b = b·a Esiste un elemento neutro (o identità) rispetto a + (indicato con 0) e un elemento neutro rispetto a · (indicato con 1), cioè: a+0=a a·1=a Le due operazioni sono distributive rispetto all’altra, cioè per ogni a,b,c B, risulta: a+(b·c)=(a+b)·(a+c) a·(b+c)=(a·b)+(a·c) Per ogni a B esiste l’elemento a’ B, detto negazione logica o complemento di a, tale che: a+a’=1 a·a’=0 13 Algebra di Commutazione: Proprietà 1 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 1: associativa a+(b+c)=(a+b)+c a*(b*c)=(a*b)*c 2: idempotenza a+a=a a*a=a 3: elemento nullo a+1=1 a*0=0 4: unicità elemento inverso: il complemento di a, a’, è unico 5: assorbimento a+(a*b)=a a*(a+b)=a 14 Algebra di Commutazione: Proprietà 2 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 6: Semplificazione a+a’b = a+b a*(a’+b) = a*b 7: involuzione ((a)’)’ = a 8: Leggi di De Morgan (a+b)’ = a’*b’ (a*b)’ = a’+b’ 9: consenso a*b+a’*c+b*c = a*b + a’*c (a+b)*(a’+c)*(b+c)=(a+b)*(a’+c) 15 Fine, domande? DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Pausa 10’ 16 Obiettivi DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • La struttura di un programma C • Teorema di Böhm e Jacopini • La calcolatrice 17 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() {...} 18 Teorema di Böhm e Jacopini DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Tutti i programmi possono essere scritti in termini di tre strutture di controllo: Sequenza: istruzioni eseguite in ordine Selezione: istruzioni che permettono di prendere strade diverse in base a una condizione (costrutto di tipo se-allora) Iterazione: istruzioni che permettono di eseguire ripetutamente un certo insieme di altre istruzioni (costrutti di tipo fintantoché) 19 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; 20 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 21 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. 22 La calcolatrice? DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Umh…. Meglio! 23 La calcolatrice! DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Problema Si scriva un programma in C che, dati due numeri, permette all’utente di calcolarne la somma, sottrazione, moltiplicazione, e la divisione tra essi • L’utente, per ogni coppia di numeri inseriti, potrà eseguire una e una sola operazione La calcolatrice potrà essere utilizzata più volte e… • ammettere l’operazione di sommatoria per un numero variabile, deciso dall’utente, di valori 24 Problemi di fine giornata… DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Si scriva un programma in C che richiede l’inserimento di un numero intero positivo, se l’inserimento e’ errato ritorna un messaggio di errore • Si scriva un programma in C che, dati due caratteri, li ordina in ordine alfabetico “inverso” 25 Fonti per lo studio + Credits DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Fonti per lo studio Informatica arte e mestiere, S. Ceri, D. Mandrioli, L. Sbattella, McGrawHill • Capitolo 6 • Credits Daniele Braga - http://home.dei.polimi.it/braga/