INFORMATICA
INFORMATICA
Il termine informatica viene coniato negli anni ’60 da Philippe Dreyfus (contrazione dei termini francesi “information” e
“automatique”).
-INFORMATICA= disciplina in grado di trattare o elaborare in modo automatico l’informazione. Modernamente, questo
viene fatto col calcolatore/elaboratore elettronico, il computer. [Negli anni 50’ il computer è l’individuo che fa i
calcoli/conti]
-DATI= rappresentano l’informazione mediante (tipicamente) dei simboli [rappresentano 1/più proprietà di un oggetto
nel mondo reale
→ Uno degli alfabeti piu’ usati nell’informatica (a basso livello) e’ un alfabeto estremamente ridotto, che contiene
soltanto i simboli 0 e 1, un bit (contrazione di binary digit)= l’alfabeto binario.
- scelta di usare questo alfabeto: dalla semplicità con cui i suoi simboli possono essere rappresentati da dispositivi
bistabili: dispositivi fisici capaci di assumere e mantenere nel tempo (a meno di sollecitazioni esterne) due configurazioni
alternative: 0 e 1 [Presenza di fori nella scheda, Polarizzazione o presenza/assenza di carica elettrica in una sostanza,
Passaggio/non passaggio di corrente da un cavo conduttore, Passaggio/non passaggio di luce da un cavo ottico]
-PROBLEMA= domanda che ha bisogno di risposte (es. risolvere ax^2+bx+c=0, per x): domande generali & se c’è una
domanda specifica=ISTANZA
→ obbiettivo= trovare la procedura per risolvere tutte le istanze ad un problema dato (non solo a uno specifico):
ALGORITMO con un po’ di dettagli extra
-ALGORITMO= una descrizione (in una lingua) di una sequenza finita di operazioni che, quando eseguite, portano alla
soluzione del problema che è corretto per tutte le sue istanze
-ORIGINE DEL NOME ALGORITMO= da Muḥammad ibn Mūsā al-Khwārizmī (780-850 A.C.): matematico diede un
importante contributo a ALGEBRA(= estensione dell’aritmetica, contiene X), con il libro “The Compendious Book on
Calculation by Completion and Balancing” {termine algebra= danneggiamento del termine al-jabr: operazione di
sommare/sottrarre la stessa quantità dal lato sx e da quello dx di un’equazione per cancellare il termine fuori)
-è anche noto per il libro “ On the Calculation with Hindu Numerals” → I connessione semantica al significato moderno
(sequenza di operazioni è documentato nel 13esimo secolo, con la parola ALGORISM, nella vecchia Francia)
-350 A.C. GRECI (Euclide) ALGORITMO= ha elaborato il M.C.D. di un numero naturale {algoritmo di Euclide/ Euclidean
algoritm}
-276-195 A.C. Erastotene ALGORITMO= ha trovato tutti i numeri primi (fino a uno aggiornato) [Crivello i
Erastotene/Sieve of Erastothenes}
-3 TIPI DI CALCOLATORE:
1. MANUALE= codificare i dati in forma precisa, ma affidano all’uomo l’elaborazione (noi, abaco…)
2. SEMI-AUTOMATICI= eseguire singole (spesso semplici) elaborazioni sui dati senza intervento umano; per
elaborazioni piu’ complesse, pero’, richiedono l’interazione continua da parte dell’uomo (vecchia calcolatrice
tascabile)
3. AUTOMATICI= memoria (interna o esterna) su cui sono rappresentati sia dati che le istruzioni (cioè’
l’algoritmo); non richiedono l’intervento umano (a patto che abbiano ricevuto un input corretto). (computer,
smartphones…)
-ALAN TURING
• famoso per aver ideato la Macchina di Turing (MdT)= un modello matematico del moderno calcolatore; è
costituita da: un alfabeto (un insieme finito di simboli - un nastro per lettura/scrittura - una testina posizionata
su una cella del nastro (puo’ leggere e scrivere) - un insieme di stati (tra cui quello iniziale e quello finale) - una
tabella delle azioni o funzione di transizione; (in base a come si appoggia al blocchetto capisce i numeri 0 e 1,
legge gli input e output escono, cambia scheda e cambia funzionamento)
-TESI/CONGETTURA DI CHURCH-TURING
se una funzione matematica e’ calcolabile → esiste allora almeno una macchina di Turing in grado di calcolarla:
è il modello di calcolo più potente che abbiamo, grazie a tali tesi:
1. proprietà degli algoritmi= possono essere studiate analizzando il comportamento sulle mdT &
2. confrontare un nuovo modello di calcolo e/o un nuovo tipo di computer con gli altri, verificando
formalmente se sai o meno potente come la mdT
-condannato per omosessualità & costretto a scegliere tra 2 anni di carcere/ castrazione chimica attraverso estrogeni
(sceglie quest’ultima)
-genio della crittografia
-macchina= spesso utilizzata come modello teorico per il calcolo (unità che fa il calcolo & sistema di input e output)
-IL PC
1. HARWARE:
- CPU= esegue le istruzioni (avvalendosi della arithmetic-logic unit, o ALU)
- RAM (random-access memory)= e’ la memoria del PC (modernamente 4, 8, 12, 32 GB o gigabytes); e’
volatile (spegnendo il pc, il suo contenuto viene cancellato) ed e’ sia leggibile che scrivibile
- ROM (read-only memory)= e’ una piccola memoria solo leggibile ch contiene le istruzioni di bootstrap del
PC (un piccolo software che viene avviato prima del sistema operativo stesso)
- memorie di massa (o secondarie)= sono persistenti, hanno grossa capacita’ e costi bassi; sono molto piu’
lente della RAM; possono essere ferromagnetiche (i “vecchi” hard disks), ottiche (i “vecchi” CD e gli altrettanto
vecchi Blue Ray), o flash (le chiavette USB e le memory card)
- cache= una piccola memoria volatile piu’ veloce dalla RAM
- periferiche (di input/output)= tastiera, mouse, schermo, stampante, …
{Nel PC, i dati e le istruzioni vengono continuamente spostati dalle memorie piu’ lente (e grandi) a quelle piu’
veloci (ma piccole) fino ad arrivare alla CPU → questo viene fatto per ridurre i tempi di attesa di accesso al
memorie lente)}
• 2. SOFTWARE:
1)APPLICATIVO= paccheto Office, il browser, Call of Duty
2)DI BASE= permette all’utente di interagire con il calcolatore a basso livello: è il sistema operativo
-ALGORITMI= nella vita quotidiana; metodo per risolvere un’equazione di secondo ordine, eseguendolo a mano/ a
computer
-RICETTA/ISTRUZIONI= sequenza dettagliata per eseguire azioni → ALGORITMO presuppone un esecutore (es. Wolfram
Alpha= se scrivi un’equazione la risolve)
-- presuppone un esecutore che presi dati in input → esegue le istruzioni dell’algoritmo per produrre l’output
[L’algoritmo deve essere formulato in un linguaggio comprensibile all’esecutore, indicando in modo completamente non
ambiguo che istruzioni, o operazioni elementari, vadano eseguite].
LINGUAGGI DI PROGRAMMAZIONE
- Nei computer, gli algoritmi (come tutti i SW) vengono codificati attraverso un linguaggio di programmazione
(=linguaggi estremamente strutturati con regole di produzione grammaticale precise).
-La formulazione di un algoritmo (che potrebbe essere descritto anche in italiano)in un linguaggio di programmazione
e=programma.
• FORMALI= libero dal contesto (non ha ambiguità) → linguaggio della logica (algebra) preciso per parlare a una
macchina
→ Data una frase e un grammatica (formale) di un certo linguaggio, è possibile utilizzare un algoritmo per determinare
se la frase appartenga a quel linguaggio o meno. Farlo consiste nel risolvere il famoso problema della acceptance,
recognition, o detection. (= il problema fondamentale dell’informatica teorica)
-GERARCHIA DI CHOMSKY
2. TIPO 1=contestuale (autonoma lineare, MT) → grammatiche dipendenti dal contesto, linguaggi dipendenti
dal contesto
3. TIPO 2= non contestuale (autonoma a pila) → grammatiche libere dal contesto, linguaggi liberi dal contesto
{italiano= tipo 0; linguaggi formali in cui si programma calcolatore (come Pyton)= tipo 2}
-ABACO=primo embrione di computer, un sistema di calcolo manuale basato su una rappresentazione numerica
posizionale
• si crede tradizionalmente sia stato inventato in Cina, in realtà nacque prima dei cinesi (200-100 A.C.)
• l’hanno utilizzato: romani, greci, persiani, sumeri (2700-2300 A.C.)= tavolette di argilla
→ 1632, William Oughtred= matematico inglese: REGOLO CALCOLATORE= diretto successore dell’abaco
→ 1642, Blaide Pascal= matematico, fisico, filosofo, teologo francese: PASCALINA= I calcolatrice meccanica (francese:
pascaline)
→ 1623 Wilhelm Schickard precede Pascal di 20 anni e costruisce: OROLOGIO CALCOLATORE= > fama della Pascalina a
causa della propaganda illuministica del 17esimo secolo
• MACCHINA DI SHICKARD= > efficiente della Pascalina nelle sottrazioni, ma non esegue automaticizzate i riporti
(no sopravissuti esemplari originali), sottraeva e sommava numeri fino a 6 cifre
→ Leibniz realizza: STEPPED RECKONER= (calcolatore a passi/Rechnenmachine) calcolatrice a manovella che realizza
tutte e quattro le operazioni matematiche
• problemi meccanici; difetto di progettazione nel meccanismo di trasmissione dei riporti (non permetteva alla
macchina di funzionare in modo affidabile)
→ 1837 Charles Baggage=matematico, filosofo, inventore, ingegnere meccanico progetta: ANALYCAL ENGINE=
macchina che opera in input & output su schede perforate (mai realizzata) conteneva molti ingredienti di un computer
moderno (unità aritmetico-logica, controllo di flusso mediante conditional branching, cicli, una memoria integrata): I
progetto computer general-porpuse
→ 1842 Luigi Federico= matematico italiano ascolta Babbage descrivere a un congresso la sua macchina, realizza: una
descrizione in francese, tradotta poi in inglese & ampliata da Ada King (contessa di Lovelace, figlia di Lord Byron)
• Lovelace= molti lavori teorici per la macchina di Babbage, tra cui PRIMO PROGRAMMA INFORMATICO DELLA
STORIA= un algoritmo per il calcolo dei numeri di Bernoulli
→ 1936 (ultimato nel 1938) Konrad Zuse= ingegnere tedesco intraprende la progettazione e costruzione di: Z1
(inizialmente in casa, con l’aiuto economico dei suoi genitori)= computer programmabile con memoria, istruzione (in
input) immesse attraverso un nastro di celluloide perforato, dove veniva scritto anche l’output
• usava una tecnologia elettromeccanica & un sistema di memorie meccaniche (da piastrine metalliche scorrevoli
sovrapposte a incastro)
- nelle versioni successive (Z2 & Z3) inizia a usare i relè (1938-39 solo per le unità di calcolo dello Z2) poi per
tutti i componenti dello Z3 (1939-41)
• Z1= primo computer moderno (progettato, realizzato e utilizzato), ha inoltre inventato il primo linguaggio di
programmazione della storia (per lo Z1): PLANKALKUL
→ 1920 ENIGMA= macchina a rotori elettromeccanica sviluppata in Germania negli anni 1920 per la
crittazione/decrittazione di messaggi segreti (i suoi settaggio/chiave venivano cambiati ogni giorno).
→ 1939 Alan Turing matematico, logico, crittografo, filosofo britannico progetta: BOMBE= dispositivo elettromeccanico
usato da crittografi britannici per scoprire alcuni settaggi di Enigma (decisiva per esito della guerra); in realtà merito da
BOMBA dal predecessore polacco Marian Rejewski, inventata per decrittare la prima versione di ENIGMA
→ 1943-45 codebreakers britannici sviluppano: COLOSSUS per decifrare la cifratrice tedesca Lorenz (>ore a Enigma):
decifrava circa 4000 messaggi tedeschi, giapponesi, italiani ogni gg
• =totalmente basato su valvole termoioniche (usate anche oggi negli amplificatori valvolari); [diversamente da
Bombe di Turing & Rejewski= dispositivi elettromeccanici]
→ 1945 John Mauchly & J. Presper Eckert: ENIAC= ((Electronic Numerical Integrator and Computer) è il primo computer
programmabile, elettronico e general-purpose (il primo a godere di queste funzionalita’ tutte insieme) a programma
cablato
• progettato per fare calcoli balistici nella World War II → risoluzione problemi: studio di fattibilita’ per armi
termonucleari (un mese di lavoro); da l Los Alamos National Laboratory dove il matematico ungherese
(nazionalizzato americano) John von Neumann (uno dei genii, seppur guerrafondaio, del secolo scorso) stava
calcolando come sganciare la bomba H (voleva colpire Tokio in origine) per massimizzarne i danni.
• costava 7237h di lavoro; 486804,22 $(5 milioni); 18000 valvole termoioniche che scaldavano l’ambiente fino a
50°C, 180m^2, peso=30 tonnellate; prima accensione= blackout nel quartiere ovest di Filadelfia (consumava
200KW)
→ 1949 Mauchly & Eckert (stessi progettisti dell’ENIAC) progettano: EDAVC= (Electronic Discrete Variable Automatic
Calculator) a programma memorizzato, usava la memoria a linea di ritardo interna in cui i dati & il
programma/algoritmo era memorizzato
→ anni 50’ TRANSITOR= dispositivi a semiconduttore funzionalmente identici a valvole termoioniche ma sensibilmente
> piccoli
→ 1979 SHARO ELSI MATE EL-8048 giapponese= calcolatrice che ancora affiancava alla calcolatrice elettronica che
conosciamo un abaco: pare che i giapponesi fossero cosi’ rapidi a usarlo che, per operazioni semplici, lo preferissero per
velocita’ alla calcolatrice elettronica!
-CIRCUITO INTEGRATO= ideato da Jack St. Clair Kilby (1958) Nobel per la fisica nel 2000) = circuito elettronico
miniaturizzato contenente una moltitudine di transistor che vengono tutti realizzati (costruiti) simultaneamente da un
processo chimico. → dimensioni di circa 5 mm x 5 mm.
(A volte viene impropriamente detto chip,=il supporto del circuito integrato, un piccolo pezzetto di materiale staccato
(chipped per l’appunto) da un supporto (detto wafer) di un materiale semiconduttore (tipicamente silicio), sul quale
vengono realizzate le porte)
ALGEBRA BOOLEANA
1) INTRODUZIONE
CALCOLO PROPOSIZIONALE
-idea di Boole (come di Leibniz)= sviluppare un sistema algebrico per determinare valore di verità di proposizioni
composte → proposizioni atomiche di cui conosciamo valore di verità= combinate con connettivi logici
PROPOSIZIONI ATOMICHE → VALORI DI VERITA → V=1 o F=0
CONNETTIVI= operazioni vero-funzionali → applicazione modifica falsità o verità delle proposizioni a cui vengono
applicate
- ogni operazione=funzione che prende in input 1/+ proposizioni & le combina in una nuova proposizione
- ogni operazione= rappresentata attraverso una tabella (/lookup table)= sempre possibile farlo per funzioni con n finito
di valori in input
- formula (proposizion)= composta= interpretata sempre come vera: TAUTOLOGIA (greco antico TAUTOS= stesso &
LOGOS=spiegazione)
= tupla di 6 elementi:
• insieme A
→ associatività: A ∨ (B ∨ C) = (A ∨ B) ∨ C A ∧ (B ∧ C) = (A ∧ B) ∧ C
→ commutatività: A ∨ B = B ∨ A A ∧ B = B ∧ A
→ assorbimento: A ∨ (A ∧ B) = A A ∧ (A ∨ B) = A
→ identità: A ∨ 0 = A A ∧ 1 = A
→ distributività: A ∨ (B ∧ C) = (A ∨ B) ∧ (A ∨ C) A ∧ (B ∨ C) = (A ∧ B) ∨ (A ∧ C )
→ complemento: A ∨ ¬A = 1 A ∧ ¬A = 0
OPERATORI:
1) NOT
2) AND
3) OR
Nota: anche se basta che almeno una delle due espressioni sia
soddisfatta; per questo l’OR vale 1 se entrambi i suoi argomenti
valgono 1; in questo specifico caso le due espressioni non
possono essere soddisfatte simultaneamente (non c’`e nessun x
che sia al contempo ≤ −3 e ≥ 3).
1) NOT
2) AND
3) OR
→ (¬P) ∨ (O ∧ U)
tavola di verità:
LEGGI DI DE MORGAN
= leggi (/proprietà la cui correttezza è dimostrabile) → riscrivere formule complesse (AND, OR) in modo > semplice
→ possiamo riscrivere AND attraverso solo OR & NOT: A ∧ B = ¬ ¬(A ∧ B) = ¬(¬A ∨ ¬B)
→ possiamo riscrivere OR attraverso solo AND & NOT: A ∨ B = ¬ ¬(A ∨ B) = ¬(¬A ∧ ¬B)
le due leggi di De Morgan= anche per sequenze di AND & OR di lunghezza arbitraria:
¬(A ∧ B ∧ . . . ∧ Z) = ¬A ∨ ¬B ∨ . . . ∨ ¬Z
¬(A ∨ B ∨ . . . ∨ Z) = ¬A ∧ ¬B ∧ . . . ∧ ¬Z (diap. 27)
XOR
-OR inclusivo & esckusivo
• VEL= o inclusivo (voglio mangiare o carne o pesce) → va bene mangiare entrambe le cose (carne, pesce, o
carne e pesce)
• AUT= o esclusivo (voglio mangiare o carne o pesce) → (carne, pesce, ma non insieme)
XOR = O ESCLUSIVO
- da operatore OR
→ per il concetti di aut (=o esclusivo) → nuovo operatore: XOR (da inglese eXclusive OR); da simbolo ∨
esercizi diap 31
1) (A∨B)∨C
2) A∨(B∨C)
- implicazione al contrario:
B= condizione necessaria per A (B= vero → affinché pure A lo sia; A= vera → B= anche vera → se B= vera, A= può
essere falsa)
[esempio: e necessario aver passato INFORMATICA per potersi laureare in ECONOMIA a UniBg ma aver passato
INFORMATICA non basta per potersi laureare (passare INFORMATICA non `e sufficiente) ]
= necessario che noi siamo a casa → affinché oggi possa piovere; se non fossimo a casa= non potrebbe piovere affatto
(altrimenti saremmo fuori con pioggia: no possibile)
es. se vogliamo negare che: A ⇒ B `e vera → negando antecedente: A = 0 → per forza avere che acnhe conseguente sia
falso: B = 0 → altrimenti A ⇒ B : sarebbe falsa (avremmo 0 ⇒ 1)
→ per dimostrare che A ⇒ B : sufficiente assumere B=1, imporre A=0 & dimostrare che si deduce B=0 → nasce una
contraddizione
IFF
- possiamo combinare 2 implicazioni opposte in un singolo operatore (derivato): se e solo se o IFF (da inglese if & onli
if) : A ⇔ B
A ⇔ B := (A ⇒ B) ∧ (B ⇒ A)
A ⇔ B ≡ ¬(A∨B)
A ∼∧ B := ¬(A ∧ B)
DIAP 43
-NAND= non è associativo
A ∼∨ B := ¬(A ∨ B)
verifica:
esercizi: diap 47
in simboli:
- imponendo l’ingresso di una porta logica → opportuni segnali elettrici (= 0 o 1) → porta può calcolare output
dell’operatore che implementa automaticamente (in tempi rapidissimi)
→ elettronicamente una porta logica= realizzata in vari modi → es. attraverso diodi, transitor, NMOS (tipo speciale di
transitor)
- dimensioni= ridottissime (nanometro= miliardesimo di metro, 10 -9)
CIRCUITI INTEGRATI= ideato da Jack St. Clair Kilby nel 1958, nobel per fisica nel 2000
• a volte viene detto chip (anche se chip è supporto del circuito integrato= piccolo pezzetto di materiale staccato
[chipped] da un supporto [wafer] di un materiale semiconduttore [solitamente silicio] → su cui vengono
realizzate le porte)
• montato un
package
(contenitore)
di ceramica;
lunghezza= 5-
15mm x 20-50
mm
• contatti su cui
viaggia
segnali di input/output= spesso a lati
- tradurre una funzione booleana in un circuito logico: semplice se a disposizione porte logiche in numero & tipo
corretto = tanti quanti sono gli operatori presenti nella funzione
← esempio
- sintetizzare funzioni logiche: anche se non conosciamo forma algebrica direttamente da tavola di verità
→ funzione D (tabellarmente:)
→ metodo : esprimere qualsiasifunzione booleana F nella forma normale disgiunta (DFN= desjunctive normal form)=
funzione algebrica di F contenente una disgiunzione (insieme di OR) di clausole → ogni clausola= serie di congiunzioni
(=AND) degli input della funzione & della loro negazione
1. ogni combinazione c di valori di input, per cui F= vera → introduzione di una clausola (congiunzione AND)
contenente: input di F (funzione non negati) se c prende valore 1 & negato se c prende valore 0
→ altre forme oltre a DNF: fomra normale congiuntiva (CFN= conjuctive normal form): congiunzione (AND) o
disgiunzioni (OR)
F(A, B) = (A ∧ ¬B) ∨ (¬A ∧ ¬B) = = ((A ∧ ¬B) ∨ ¬A) ∧ ((A ∧ B) ∨ ¬B) = = (A ∨ ¬A) ∧ (¬B ∨ ¬A) ∧ (A ∨ ¬B) ∧ (B ∨ ¬B)
ESERCIZI:
2. Si riscriva la funzione F = (A ∧ B) ∨ (B ∧ ¬C) in CNF e se ne disegni il circuito. Usiamo la propriet`a distributiva per
portare la funzione in CNF: (A ∧ B) ∨ (B ∧ ¬C) = ((A ∧ B) ∨ B) ∧ ((A ∧ B) ∨ ¬C) = = (A ∨ B) ∧ (B ∨ B) ∧ (A ∨ ¬C) ∧ (B ∨
¬C)
- costruire, manipolare espressioni in logica proposizionale; tramutare funzioni booleane in circuiti logici = realizzabili
attraverso componenti digitali (transitor)
→ storia dell’informatica: aspettiamo che operazioni artimetiche (NON logica proposizionale)= fondamento
dell’informatica
= connessione tra funzioni & circuiti logici → realizzare operazioni aritmetiche tra numeri (in formato binario)
RAPPRESENTAZIONE DELL’INFORMAZIONE
1) SISTEMI DI NUMERAZIONE
- nei sistemi posizionali → numeri= rappresentati da cifre, valore cambia a seconda della loro posizione (ogni posizione
ha un peso)
SISTEMA DECIMALE
3 · 100 + 2 · 10 + 7 · 1 + 2 · 0, 1 + 3 · 0, 01 =
in decimale è:
1 · 2 3 + 1 · 2 2 + 0 · 2 1 + 1 · 2 0 + 0 · 2 −1 + 1 · 2 −2 =
1 · 8 + 1 · 4 + 0 · 2 + 1 · 1 + 0 · 1/2 + 1 · 1/4 =
1 · 8 + 1 · 4 + 0 · 2 + 1 · 1 + 0 · 0, 5 + 1 · 0, 25 = 13, 25
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
8 1.000
9 1.001
10 1.010
11 1.011
12 1.100
13 1.101
14 1.110
15 1.111
16 10.000
NUMERI RAPPRESENTABILI
→ n cifre = possono rappresentare 2n numeri → elenco numero + grande che si può scrivere con n bit:
ESERCIZI:
• 35 = 32 + 2 + 1 = 10 0000 + 10 + 1 = 10 0011
• 12 = 8 + 4 = 1000 + 100 = 1100
• 255 = 256 − 1 = 100 0000 − 1 = 1111 1111
• 260 = 256 + 4 = 100 0000 + 100 = 100 0100
• 51 · 4 = (32 + 16 + 2 + 1) · 4 = (10 0000 + 1 0000 + 10 + 1) · 100 = 11 0011 · 100 = 1100 1100
• 50/8 = (32+16+2)/8 = (10 0000+1 0000+10)/1000 = 11 0010/1000 = 110, 010
- moltiplicazione/ divisione di un numero binario per una potenza del 2= SHIFT → si comporta in modo identico a
moltiplicazione/divisione di un numero decimale per una potenza del 10= traslazione shift del numero verso sx/dx → in
tante posizioni (quanti il numero di zeri nella potenza)
0 0 0
1 1 1
2 10 3
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
8 1.000 8
9 1.001 9
10 1.010 A
11 1.011 B
12 1.100 C
13 1.101 D
14 1.110 E
15 1.111 F
16 10.000 10
- rappresentazione canonica (in decimali): 4 numeri interi tra 0 & 255 separati da un punto:
= in binario → 0110 1000 {104} . 0001 0010 {18} . 0000 0011 {3} . 1111 0100 {244}
- contando tutti gli indirizzi possibili tra 0.0.0.0 & 255.255.255.255 : numero max di indirizzi= 256 . 256 . 256 . 256= 4
294 967 296 ≃ 4 miliardi (4 giga)
basato su alfabeto inglese & in qualche forma europeo (ad es. accenti italiani o umlaut tedesco) → non permette di
rappresentare molti caratteri (ad es. greci, cinesi, cirillici, …)
UNICODE= standard proposto nel 1987 & curatoo da Unicode Consortium → per ovviare a mancanze dell’ASCII
→ versione corrente= rappresentare 149,186 caratteri → coprendo 161 lingue (vive & morte) & include molti simboli,
emoji, caratteri di formattazione
→ usa un numero variabile di byte (a 8) & completamente compatibile con ASCII (caratteri unicode contenenti solo 2
byte coincidono con quelli ASCII) [✔️️❤️ ★ Unicode Character Table (unicode-table.com) ]
per calcolare ogni bit n-esimo del risultato= 3 valori di ingresso: bit n-esimo di A, bit n-esimo di B & riporto di n-1
esimo (sempre 0 se n è quella > a dx, 0-esima)
→ produce 2 valori al posto di uno → tavola di vrità scritta= due funzioni (=multifunzione) → funzione per il calcolo di
S & quella per il calcolo di C
- per il calcolo di C & S → per il caso in cui A & B= contengono 1 solo bit → calcolare C & S con un semplice AND &
un semplice XOR
→ disegnare il circuito per il calcolo di C & S (circuito= semi sommatore o half adder) → direttamente senza passare
per forme normali
ESTENSIONE A 2 O + CIFRE
- costruire un circuito per somma di 2 numeri binari con solo una cifra
→ ora: estendere il risultato per poter sommare numeri binari contenenti un numero arbitrario di bit
tabella di verità:
Sn = (An ∧ ¬Bn ∧ ¬Cn−1) ∨ (¬An ∧ Bn ∧ Cn−1) ∨ (¬An ∧ ¬Bn ∧ Cn−1) ∨ (An ∧ Bn ∧ Cn−1)
- disegno:
→ dimostrare: es. simulando tutte le combinazioni: questo circuito (> compatto)= equivalente a precedente
4-BIT ADDER
- per sommare numeri contenenti una quantità di bit arbitraria → collegare diversi sommatori in cascata
ALTRE OPERAZIONI
- con idee logiche (& sforzo scientifico)=costruire circuiti logici → implementano funzioni > avanzate tra cui:
• sottrazioni
• moltiplicazioni
• divisioni
• a operazioni complesse (es. rendering in tempo reale dell’ambiente tri-dimensionale di un videogioco → può
richiedere esecuzione di un numero enorme di operazioni di algebra matriciale ogni millesimo di secondo)
- in un PC regolare, i numeri in virgola mobile= sono decodificati come 64-bit di stringhe che seguono la IEE 754-2005
(binary64) standard come
con:
CANCELLAZIONI CATASTROFICHE
- il risultato di un operazione aritmetica tra 2 virgole mobili: operandi potrebbero eccedere 64 bits → in questo caso: IEE
745 satndard= descrive che tale risultato dovrebbe essere corretto con 0,5 unità nell’ultimo posto (ULPs) (i.e., con
all’interno l’errore di approssimazione del numero risultante)
esempio: x = 1 = 1 × 2 0
→ y = 0. 0 . . . 0 { 52 } 1 = 1 × 2 −53
che ha una mantissa di 54>53 bits → viene arrotondato verso l’alto a 1,0...1 {53}x2 0 o sotto a 1,0...0 {53}x20
[nel secondo caso incorriamo a una cancellazione catastrofica che risulta in x+y=x]
→ facile intuire che sia impossibile rappresentare un numero irrazionale (e.g. √ 2 ) = decimale ma non periodico ←
attraverso una sequenza finita di cifre
- rappresentazione dei numeri non interi= problematica per i soli numeri razionali (=rappresentabili come frazioni)
per calcolare quanto buona sia l’approssimazione 0,00101 con 5 cifre dopo la virgola → 0,00101= 101 2 · 2-5= 5· 2 -5
≃
0,15625
BASI DI DATI: MODELLIZZAZIONE
CLASSICHI ARCHIVI: attività di raccolta, organizzazione & conservazione dei dati= uno dei principali compiti
dell’informatica
→ approccio convenzionale a gestione dei dati informatici= file (fascicoli) ← modalità con cui gestiti classici archivi
• sistema di archiviazione a file= archiviare & ricercare dati → solo semplici meccanismi di accesso &
condivisione
- problema principale= ogni informazione pertinente a > fascicoli: deve essere replicata → problemi di ridondanza &
incoerenza dell’archivio (es. archivio clienti, studenti, movimenti,…)
- = insieme di archivi integrati → costituire una base di lavoro per utenti diversi con applicazione diverse
• persistenti= dati rimangono memorizzati anche quando programmi che li utilizzano sono finiti
-venditori -→clienti /
-fatturazione → clienti
GESTIONE INTEGRATA:
- cancellazioni di dati
=attività di costruzione di una rappresentazi0one astratta della realtà osservata o del problema → individuando elementi
caratterizzanti & legami tra essi
→ considerare 3 livelli:
1. concettuale= realtà dei dati & associazioni tra essi ← attraverso schema di alto livello (=sintesi tra visione informale
degli utenti & precisa dei progettisti di un’applicazione)
2. logico= descrive composizione & formato dei dati negli archivi elettronici ← derivato da livello concettuale attraverso
regole di trasformazione
3. fisico= rappresenta effettiva installazione di archivi elettronici → implementazione del livello logico su suporti per
memorizzazione dati
REALTA:
modello concettuale → modello logico → modello fisico (DATABASE)
- MODELLO E/R:
ENTITA
=entità : oggetto (concreto o astratto) → significato se considerato in modo isolato (es. persone, automobile, movimenti
contabili, studenti, facoltà)
→ rappresentate attraverso rettangolo con nome delle entità (in genere sostantivo)
ATTRIBUTI
-CARATTERISTICHE
• formato di un attributo= indica tipo di valori che può assumere (es. carattere, numerico, data/ora)
= insieme minimale di 1/+ attributi → consentono di distinguere univocamente un’istanza da altra: chiave primaria (O
primary key)
ASSOCIAZIONI
• indicata attraverso un verbo, ha un verso con una punta di una freccia (indica il senso di lettura)
• molteplicità di un’associazione= n delle possibili istanze delle entità che partecipano a associazione
esempio 1
MODELLO RELAZIONALE
→ relazione è di grado n
4. ordine delle colonne= signifcativo & corrisponde a ordine dei domini A 1, A2,…,An → su cui la relazione R è definita
tabella= entità
MODELLO MODELLO
CONCETTUALE RELAZIONALE
Entità relazione
istanza tupla
attributi colonne
• associazioni uno a molti (Tra entità di partenza & una di arrivo)= rappresentata nella tabella dell’entità di arrivo
con un attributo → contenente identificatore univoco dell’entità di partenza che nella tabella di arrivo= da
chiave esterna (foreign key)
• associazioni molti a molti= una nuova tabella (In aggiunta a tabelle derivate da entità): composta da
identificatori univoci delle 2 entità & da eventuali attributi dell’associazione
-PROBLEMI DI RIPETIZIONE/RIDONDANZA
RINDONDANZA
STIPENDIO di ciascun impiegato: ripetuto in tutte le tuple & dipende solo da cognome
BUDGET del progetto= ripetuto in tutte le tuple & dipende solo da progetto
-ANOMALIA DI AGGIORNAMENTO
3. rischio di creare inconsistenze (ad es. aggiorniamo lo stipendio nella prima tupla ma non lo facciamo nella seconda)
-ANOMALIA DI CANCELLAZIONE
se impiegato= decide di interrompere partecipazione a tutti i progetti senza lasciare azienda → bisognerebbe cancellare
tuple chelo associano a progetto → perderemmo traccia del suo cognome & stipendio (supposizione che non ci
possano essere campi vuoti
→ vale anche per progetto: se viene sospeso → si perdono i dati degli impiegati
-ANOMALIA DI INSERIMENTO
non si può inserire un nuovo impiegato finché questi non venga assegnato a un progetto
→ vale lo stesso per i progetti: non si può inserire un progetto finché non gli viene assegnato un impiegato
EDGAR F. CODD
informatico inglese, nel 1970 (mentre lavorava per IBM) propose (e estese) il modello relazionale in una serie di articoli,
tra cui:
→ Codd, E. F. (1970) “A Relational Model of Data for Large Shared Data Banks”. Comunicaztions of the ACM. 13 (6): 377-
387; doi: 10.1145/362384.362685.S2CID 207549016
→ Codd, E. F. “Further Normalization of the Data Base Relational Model”, republished in Randall J. Rustin (ed.), Data
Systems: Courant Computer Science Symposia Series 6.Prentice-Hall, 1972
FORME NORMALI
- relazione= non soddisfa nessuna forma normale → contiene informazioni rindondanti= possono diventare
problematiche quando eseguite operazioni di inserimento, modifica & cancellazione
-principio di fondo= ogni tabella: deve corrispondere a un singolo oggetto della realtà
NORMALIZZAZIONE
= procedimento che prende una tabella & (se necessario) la scompone in > tabelle → aderiscono a una/+ forme
normali
2. mantengono dipendenze tra attributi → ciascuna tabella, ogni attributo= dipende direttamente da chiave
3. evitati problemi di rindondanza & incosistenza dei dati
2. attributi= rappresentano informazioni elementari (non decomponibili) → in particolare attributi= no essi stessi delle
relazioni/tabelle
3. tutti i valori che compaiono in una colonna= appartengono a stesso dominio (no dati eterogenei)
esempio di 1NF
DIPENDENTI
DIPENDENZE
2 tipi di dipendenze:
1. FUNZIONALE= (diretta) tra attributi → solo valore di un attributo A1= sufficiente a determinare valore di un attributo
A2 A1 → A2
= elimina la dipendenza parziale degli attributi della chiave, formalmente una relazione è in 2NF se:
2. non contiene attributi non primari (o non chiave) ← che dipendono soltanto da una parte della chiave
-ATTRIBUTI PRIMARI= attributi che assumono combinazione unica & distinta in ogni riga
→ chiamati anche: chiavi candidate o superchiavi minime → potrebbero essere usati come chiavi
-2NF: no impedisce che un attributo non primario ← dipenda da un altro attributo non primario (esiste infatti una terza
forma normale per evitarlo)
esempio di 2NF:
• è in 2NF
• tutti attributi non-chiave ← dipendono direttamente da chiave (no esistono attributi non chiave che ←
dipendono da altri attributi non chiave)
→ 3NF= no elimina tutte le anomalie di cui un DB relazionale può soffrire → nel 1974 Codd propone un’ulteriore forma
normale: forma normale di Boyce-Codd
OATH (GIURAMENTO)
- nel libro: Kent, William “A simple Guide to Five Normal Forms in Relational Database Theory”; communications of the
ACM 26 (2), Feb. 1983, pp.120-125
Bill Kent= riassume la definizione di 3NF → rifacendosi a giuramento tradizionale (davanti a una corte di giustizia negli
USA) : “every non-key must provide a fact about the key, the whole key, and nothing but the key”
NOTA
- quella oggi chiamata “forma normale di Boyce-Codd” → rifacendoci a forma proposta da Boyce & Codd nel 1971
ACM SIGFIDET Workshop on Data Description, Access & Control, San Diego, Calif (November 11th-12th, 1971)
→ secondo alcuni è un curioso caso della cosidetta “legge dell’eponimia di Stigler” che afferma: “a una scoperta
scientifica non si da mai il nome dell’autore”
- già visto un es. della legge di Stigler → al-Khwarizmi, i numeri arabi (che furono in realtà stati inventati in India)
1. esempio:
• A1, A2 → A3 (corretto)
R31(A1,A2,A3), R32(A1,A2,A4)
2. esempio:
considerare una compagnia: tutti impiegati di un reparto= rispondono a stesso numero di telefono
Impiegati
- nomereparto & telreparto= no attributi primari & ← da tutta la chiave; relazione è in 2NF
ALGEBRA RELAZIONALE:
- di tipo dichiarativo= specifica le proprietà del risultato che andiamo cercando (anziché algoritmo con cui produrlo,
anche se per capirlo > esempi procedurali)
-su operazioni relazionali= operatori agiscono su una/+ relazioni (=tabelle) → per ottenere una nuova relazione
→ operazioni= tipicamente combinati per effettuare interrogazioni > complesse (queries) → risultato= nuove tabelle
1. selezione (select)
2. proiezione (project)
3. congiunzione (join)
OPERATORE DI SELEZIONE
=SELECT: genera una nuova relazione contenente solo tuple della relazione di partenza A → soddisfano una determinata
condizione o predicato (attraverso formula booleana, cui variabili= attributi)
- esempio di selezione
=PROJECT: genera una nuova relazione → estraendo da tabella iniziale A: 1/+ colonne (corrispondono a attributi
prefissati)
-relazione risultante:
2. cardinalità </0 a quella di partenza: è = se i campi su cui proiettano sono una superchiave → cancellando le colonne
si ottengono righe distinte (generalmente la rimozione di colonne → righe uguali → ridotte a una riga sola)
PROIEZIONE
-grado da 4 → scende a 2
esempio:
2. Considerazione della 1 riga (con Rossi Milano) → cancellazione tutte le altre righe con Rossi Milano (poiché sono
duplicate)
3. considerazione della 2 riga Bianchi Torino → cancellazione tutte le altre occorrenze di Bianchi Torino
=NATURAL JOIN: combina 2 relazioni A & B → 1/+ attributi in comune → generando una nuova relazione (contiene
tutte le righe combinate, affiancate di A & B che negli attributi comuni hanno gli stessi valori)
-relazione risultante
1. grado uguale a somma dei gradi delle relazioni di A & B – numero di attributi in comune
2. cardinalità: variabile (cardinalità massima pari a prodotto delle cardinalità con ogni riga di B)
→ cardinalità minima= 0 se nessuna riga di A può essere combinata con una riga di B
→ considerazione delle relazioni studente & corso, con associazione (molti a molti) Frequentare.
1 solo attributo in comune: matricola → chiave primaria in studente & chiave esterna in corso
THETA JOIN
= operatore di congiunzione → specificata una condizione (predicato) ← secondo cui le righe di 2 tabelle A & B:
devono essere combinate
esempio:
→ volontà: tutte le coppie automobile-barca = la 1 è la + costosa (della seconda) → si può applicare il theta join con la
condizione: Automobili.CostoAuto > Barche.CostoBarca
EQUI JOIN
→ utile per fare il join tra relazioni con campi: semanticamente identici ma con nome diverso
esempio:
SELF JOI
esempio:
• LEFT (OUTER) JOIN= tutte le righe della tabella A → affiancate a quelle della tabella B (se si combinano) → le
righe di A non combinate, compaiono nel risultato ma con campi di B NULL
• FULL OUTER JOIN= contiene tutte le righe del left & right outer join
→ per tabelle con struttura omogenea: righe con stesso n di attributi, tipo & nello stesso ordine → introduciamo 3
ulteriori operatori:
1. UNIONE
2. INTERSEZIONE
3. DIFFERENZA
esempio:
2. INTERSEZIONE= elenco delle persone che si servono sia presso macelleria sia cartoleria (Fabbri Paolo)
3. DIFFERENZA= Clienti_Macelleria – Clienti_Cartoleria: clienti si servono presso macelleria ma non presso cartoleria
(Mauri Antonella & Zeni Umberto)
→ volontà: Cognome, Nome, Descrizione della Facoltà per gli studenti residenti a Milano
interrogazione:
SQL
4. aggiungere/rimuovere/manipolare i dati
= si occupa di organizzare dati nelle memorie di massa & recuperarli quando richiesto
• no richiede di sapere dove & in che formato sono memorizzati fisicamente i dati
- interrogazione fatta: di alto livello → DBMS traduce in istruzioni di basso livello → verranno poi eseguite su dati stessi
DBMS= progettato → eseguire le operazioni necessarie a interrogazione in modo efficiente (es. operando su interi
gruppi di righe o su intera tabella, anziché su una riga per volta)
1. DDL (data definition language)= linguaggio per descrizione di: dati, tabelle (viste) → per creare struttura fisica del
data base ← riferimento a schema logico
2. DML (data manipulation language)= linguaggio per trattamento (manipolazione) dei dati: inserimento, modifiche,
cancellazioni
3. DCL (data control language)= linguaggio per controllo di accessi & permessi (Non tutti possono avere accesso a tutti
i dati)
4. QUERY LANGUAGE= linguaggio per interrogazioni (strumento per rinnovare datu → su base di criteri di ricerca
richiesti da utente)
→ moderni DBMS (es. microsoft acess): linguaggio contiene tutti 4 livelli: DDL+DML+DCL+QUERY LANGUAGE
= linguaggio standard → per interrogazioni di basi di dati ← utilizzato da molti DBMS (oracle, SQLserver, Acess,…)
-suo antenato= da E. Codd nell’articolo del 1970 in cui introdusse basi di dati relazionali
(Codd, E.F., 1970. A relational model of data for large shared data banks, communications of the ACM, 13(6), PP.377-
387)
BREVE STORIA
anni 70 a IBM ← sviluppato da Domand D Chamberlin & Raymond F. Boyce (lesse artciolo di Codd) con il nome
SEQUEL (structured english query language) → disegnato per manipolare il DBMS quasi-relazionale di IBM (system R,
sviluppato poco prima)
- square= specific queries in a relational environment → I tentativo di Chamberlin & Boyce di sviluppare linguaggio per
basi di dati relazionali (complicato, scarso successo)
- 1937: iniziano a lavorare a un seguito di SQUARE: SQL → acronimo ottenuto rimuovendo 2 lettere da SEQUEL
(Marchio registrato presso una compagnia britannica)
• no general purpose (come ad es. Python o C++, per agire su tabelle & produrne di nuove)= sue operazioni si
possono comporre
• no procedurale= non spiega a calcolatore come ottenere il risultato (Python ad es. lo fa): indica che risultato
vuole ottenere → DBSM= si occuperà del come
→ nelle versioni base (SQL-86, SQL-92): SQL= non è Turing completo: no essere utilizzato per scrivere un
qualsiasi programma eseguibile da computer
- versioni > recenti di SQL & alcuni suoi dialetti= versioni customizzate con caratteristiche extra; contemplano:
→ versioni Turing-complete
esempio:
https://www.youtube.com/watch?v=b005iHf8Z3g
-versioni SQL
1. SELECT= nomi delle colonne da elencare separati da virgola (tutti gli attributi=*)
3. WHERE= condizione da controllare su valori delle righe (condizione può contenere sottocondizioni con AND, OR,
NOT)
→ usando SELECT DISTINCT: righe duplicate nella tabella risultante= ridotte a una
SELEZIONE: esempio
FORMA GENERALE:
esempi:
-quesito 1: elencare codici & nomi delle anagrafiche
-quesito: elenco di movimenti con Nome & Importo → riferiti a anagrafiche aventi un indirizzo prefissato
-SELECT= colonne che saranno mostrate & in che ordine (= calcoli su colonne)
SQL standard:
SQL di Access:
Ci sono diversi linguaggi , quella a noi più nota è la query che ci permette di ottenere ciò che domandiamo.
SQL
Ci permette di descrivere operazioni che vogliamo svolgere., il suo antenato è SQUEL, ma non era il top.
Dopo pochi anni usa SQL( lo accorciano perché quello di prima era un marchio registrato).
Cosa è:
è un linguaggio specializzato, pensato solo per far operazione con base dati. Prende in imput tabelle e le esegue,
creando una tabella in ouput.
Non è Turing completo, ovvero non può essere usato per qualsiasi programma eseguibile dal computer.
I linguaggi storico naturali ma anche informatici si evolvono nel tempo, ma i secondi in modo controllato e a opera
dell’uomo
select; 1 determinato