20/10/2014 Informa.ca Appun. della lezione 3 Algebra binaria e logica • C’è un legame tra l’algebra fa?a con i numeri binari e la logica, ossia la disciplina che si occupa del ragionamento • Noi ragioniamo intorno a delle affermazioni, che possono essere vere oppure false* • I valori di verità delle affermazioni sono due: vero o falso e possiamo costruire una codifica binaria • 0 corrisponde al falso, 1 al vero *si tra?a naturalmente di un’idealizzazione: esistono anche affermazioni dal valore di verità incerto o impossibile da verificare 1 20/10/2014 Operatori logici • Come in algebra si eseguono operazioni sui numeri per o?enere altri numeri (esempio banale: applichiamo l’operazione somma a 3 e 5 e o?eniamo 8) così in logica si eseguono operazioni sui valori di verità • Le operazioni sui valori di verità si eseguono mediante i cosiddeQ operatori logici: congiunzione, disgiunzione, negazione Congiunzione • Date due affermazioni A e B, applicando una congiunzione si oQene un’affermazione composta che indichiamo con “A e B” (oppure “A and B”, “A && B”, “A∧B”) che è vera solo quando sia A sia B sono vere, e falsa in tuQ gli altri casi 2 20/10/2014 Disgiunzione • Date due affermazioni A e B, applicando una disgiunzione si oQene un’affermazione composta che indichiamo con “A o B” (oppure “A or B”, “A || B”, “A∨B”) che è falsa solo quando sia A sia B sono false, e vera in tuQ gli altri casi Negazione • Date una affermazione A, applicando una negazione si oQene un’affermazione composta che indichiamo con “non A” (oppure “not A”, “!A”, “¬A”) che è falsa quando A è vera e viceversa • A differenza di congiunzione e disgiunzione, che sono operatori binari perché si applicano a due operandi, la negazione è un operatore unario perché si applica a un solo operando 3 20/10/2014 Disgiunzione esclusiva • Chiamato anche “or esclusivo” e indicato con “xor”, è l’operatore logico con cui costruire una affermazione “A xor B” che è vera quando A (oppure B) è vera e l’altra è falsa, mentre è falsa quando sia A sia B hanno lo stesso valore di verità Tavole di verità • Con le tavole di verità si possono rappresentare graficamente le definizioni dei diversi operatori logici 4 20/10/2014 Uso delle tavole di verità • Le tavole di verità possono essere usate per dimostrare l’equivalenza di certe affermazioni • Due affermazioni si dicono (logicamente) equivalen. quando hanno lo stesso valore di verità in tuQ i casi • Ad esempio, A xor B è equivalente a (A or B) and not(A and B) 5 20/10/2014 Altre equivalenze logiche • • • • • • notA and A ≡ falso notA or A ≡ vero falso and A ≡ falso falso or A ≡ A vero or A ≡ vero vero and A ≡ A • not(A and B) ≡ not A or not B • not(A or B) ≡ not A and not B • Tramite le equivalente logiche certe affermazioni possono essere semplificate in affermazioni equivalen. • Ad esempio: (not A and A) or (not B and C) è equivalente a not B and C Uso della logica in informa.ca • Tipicamente i sistemi informa.ci sono aQva. per eseguire delle operazioni • A volte alcune operazioni devono essere eseguite solo se certe condizioni si verificano • Tali operazioni si chiamano istruzioni condizionali • Le condizioni che devono essere verificate sono di fa?o affermazioni che all’istante della verifica hanno un valore di verità (cioè sono vere oppure false) 6 20/10/2014 Condizioni semplici • Si definisce condizione semplice un’affermazione che confronta due valori • Ha .picamente la forma: valore – operatore di confronto – valore • Esempi (con rela.vo valore di verità): 4 < 10 (vera) 45 ≥ 98 (falsa) x < 100 (dipende dal valore di x al momento della verifica) Condizioni composte • Si costruisce una condizione composta a par.re da condizioni semplici per mezzo di operatori logici • Esempi [e rela.vi valori di verità]: (4 < 10) and (50 ≥ 400) [falsa] (10 ≤ 10) or (100 > 100) [vera] not (x ≤ 5) [dipende dal valore di x] 7 20/10/2014 Tipi di condizioni in base alla verità • Tautologie: condizioni, come notA or A, che sono sempre vere (qualunque sia il valore di A) • Contraddizioni: condizioni, come notA and A, che sono sempre false (qualunque sia il valore di A) • Tu?e le altre condizioni che possono essere sia vere sia false, a seconda dei valori delle loro componen., si dicono con.ngenze Operazioni dei sistemi informa.ci • Le operazioni eseguite dai sistemi informa.ci (che siano condizionali o meno) formano un insieme di istruzioni che, inizialmente concepito da esper. (umani) di informa.ca, viene poi scri?o in un linguaggio compa.bile col funzionamento del sistema informa.co che lo dovrà me?ere in a?o • L’insieme di operazioni concepito dalla mente umana e descri?o in un qualunque linguaggio si chiama algoritmo (torneremo più avan. sulle cara?eris.che di un algoritmo) • Quando un algoritmo viene scri?o con un linguaggio compa.bile con un sistema informa.co prende il nome di programma, e il linguaggio u.lizzato è de?o linguaggio di programmazione 8 20/10/2014 Diagrammi di flusso • Un diagramma di flusso è una notazione grafica con cui è possibile descrivere gli algoritmi • È cos.tuito da una sequenza di blocchi, all’interno dei quali si specificano le operazioni da eseguire • I blocchi sono collega. tra loro da un percorso che fluisce dall’inizio verso la fine dell’algoritmo inizio dell’algoritmo input sì" operazione controllo di condizione no" output fine dell’algor3mo 9 20/10/2014 La freccia entrante in un blocco rappresenta l’istante in cui l’operazione descri8a dal blocco sta per essere eseguita. La freccia uscente da un blocco rappresenta l’istante in cui l’operazione descri8a dal blocco è stata eseguita e si passa a quella successiva. All’interno di ogni blocco, l’operazione da eseguire è descri8a in un linguaggio a scelta, purché compreso dal des3natario del diagramma di flusso. TuC i blocchi hanno una o più frecce in ingresso e una sola in uscita, tranne il blocco di inizio (zero entran3, una sola uscente), il blocco di fine (una o più entran3, zero uscen3) e il blocco di controllo (una o più entran3, due uscen3: una per ciascun possibile esito del controllo). I cerchi gialli rappresentano l’inizio dell’algoritmo e la fine dell’algoritmo. Ci può essere solo un inizio (altrimen3 il sistema non sa da dove deve iniziare), mentre ci possono essere più blocchi di fine (a seconda del percorso che è stato seguito). Input: informazione arriva dall’esterno del contesto dell’esecuzione dell’algoritmo per poter essere elaborata. Controllo di condizione: una condizione viene verificata e a seconda del risultato della verifica l’algoritmo segue un percorso o l’altro. Un’operazione da eseguire è descri8a all’interno di un blocco re8angolare, a meno che non si traC di un 3po speciale di operazione: input (parallelogramma), output (foglie8o), o controllo di condizione (rombo). Output: un risultato (parziale o finale) dell’algoritmo viene inviato verso l’esterno per essere fruito dagli uten3 del sistema. 10 20/10/2014 Numeri primi • Si definisce “primo” un numero intero maggiore di 1 che ha due soli divisori: se stesso e 1 • Esempi di numeri primi: 2, 3, 5, 7, 11, 13… • Cerchiamo l’algoritmo che risolva il seguente problema: – dato un numero intero x in input, si mandi in output la risposta alla domanda “x è primo?” • Descriviamo tale algoritmo mediante un diagramma di flusso L’operazione di modulo • Può essere u.le in questo contesto ricordare un’operazione aritme.ca chiamata “modulo” e indicata col simbolo % • Da. due numeri interi x e y, x%y (“x modulo y”) indica il resto della divisione intera tra x e y • Ad esempio: 7 % 2 = 1 perché 7 diviso 2 fa 3 con resto 1 20 % 4 = 0 perché 20 diviso 4 fa 5 senza resto 11 20/10/2014 Notazione usata nei diagrammi • Quando arriva un dato in input dall’esterno, faremo riferimento ad esso assegnandogli un nome, come ad esempio x • Quando serve usare altri da. nell’algoritmo, assegniamo loro un nome arbitrario e anche un valore iniziale: la scri?ura c←0 vuol dire che usiamo un dato chiamato c e gli assegniamo il valore 0 • Nei sistemi informa.ci ques. da. richiedono spazio per essere conserva. e vengono chiama. variabili perché il loro valore .picamente cambia durante l’esecuzione del programma • Si chiama inizializzazione il primo assegnamento che si fa su una variabile, mentre i successivi sono chiama. semplicemente assegnamento • È possibile che una variabile venga aggiornata con un assegnamento basato sul suo valore precedente: la scri?ura c←c+1 vuol dire che il valore della variabile c viene incrementato di 1 Algoritmo per dire se x è primo 12 20/10/2014 Algoritmo per dire se x è primo • Arriva x in input • Se non è maggiore di 1 sappiamo subito che non è primo • In caso contrario, abbiamo bisogno di due variabili: – c fungerà da contatore dei divisori di x e viene inizializzato a 0 – y giocherà il ruolo di (potenziale) divisore di x e viene inizializzato a 1 • Ci chiediamo se y effeQvamente divide x – se sì aumen.amo c di 1 perché abbiamo trovato un divisore, altrimen. c viene lasciato inta?o – in ogni caso y viene aumentato di 1 perché andiamo a cercare un altro potenziale divisore di x • Se dopo questo incremento y ha superato x, vuol dire che abbiamo esaminato tuQ i potenziali divisori di x (un numero non può essere più piccolo di un suo divisore), altrimen. non abbiamo ancora terminato, e ripe.amo il controllo se y divide x • Quando arriviamo al punto che y ha superato x, controlliamo il valore di c, ossia il numero di divisori di x: – se tale numero è 2, allora x è primo perché ha solo 2 divisori (1 e x stesso) – se tale numero è maggiore di 2, allora x non è primo – in ogni caso diamo la risposta in output e terminiamo Cicli nell’algoritmo • In un algoritmo rappresentato mediante un diagramma di flusso, quando c’è da ripetere un’operazione il flusso torna indietro, a formare un percorso circolare, chiamato ciclo oppure loop • I cicli sono necessari per le operazioni che devono essere ripetute un certo numero di volte, ma a un certo punto devono finire: l’algoritmo, altrimen., non terminerebbe mai • L’espressione “andare in loop” si riferisce proprio a questa (non desiderabile) situazione • Colui che concepisce l’algoritmo deve accertarsi che la condizione che fa uscire dal ciclo sarà raggiunta a un certo punto dell’esecuzione 13 20/10/2014 Massimo Comun Divisore • Da. due numeri interi x e y, si dice loro massimo comun divisore (MCD) il più grande tra i numeri che dividono sia x sia y • Ad esempio: il MCD di 8 e 20 è 4 il MCD di 10 e 100 è 10 • Esercizio: disegnare il diagramma di flusso di un algoritmo che, da. due interi x e y in input, res.tuisca in output il loro MCD Algoritmo per il MCD di x e y 14 20/10/2014 Algoritmo per il MCD di x e y • Arrivano x e y in input • Assegno alla variabile c il più piccolo tra i due (x se sono uguali) • Il minore tra x e y è il più grande potenziale divisore di x e y, quindi è il potenziale MCD • c divide sia x sia y? – se sì, c è il MCD e viene mandato in output – altrimen. bisogna cercare ulteriormente, e diminuiamo c di 1 e ripe.amo il controllo • Tali ripe.zioni a un certo punto finiscono: nel “peggiore” dei casi quando c, di decremento in decremento, raggiunge il valore di 1, che sicuramente divide sia x sia y (due numeri che hanno 1 come MCD si dicono “primi tra loro”) 15