Sei sulla pagina 1di 12

Lezione 24/11/23

Informatica: scienza che si occupa del trattamento automatico (= senza diretto intervento di esseri umani)
delle informazioni* (= entità che contribuiscono alla diminuzione dell’incertezza/aumento della certezza)

Codifica delle info: modalità attraverso cui le info possono essere rappresentate e scambiate

Strumenti: consentono il trattamento delle info in modo automatico

Codifica del trattamento: modalità attraverso cui può essere descritta una sequenza di passi che devono
essere automatici

* INFORMAZIONI

o Non sono entità fisiche: sono create, trasmesse o distrutte


o Posso conservarle o trasmetterle se esiste un supporto fisico (adeguato se può assumere diverse
configurazioni)

Shannon  Entropia: rappresenta quantità di informazione immagazzinata; assume valori da 0 a 1


(rappresenta la massima certezza/incertezza nulla)

o Paradosso di Monty-Hall: tre porte con due capre e un’auto, se ne scelgo una, poi scopro dov’è una
capra e mi chiedono se voglio cambiare, mi conviene sempre cambiare
Nel caso di dispositivi binari (solo due stadi possibili) è meglio utilizzare il log in base 2; può
contenere un’informazione pari a log 2 2=1 definita come bit

Sistema di elaborazione: sistema elettronico che esegue sequenze complesse di operazioni logico-
matematiche; effettua operazioni automatiche su un insieme finito di info

o Dispositivi periferici
o Capace di memorizzare info in modo temporaneo o permanente (anche dopo spegnimento)
o Esegue operazioni secondo una sequenza programmabile

Algoritmo: sequenza ordinata di passi che risolve compiutamente un problema, attraverso serie di
operazioni elementari e non ambigue, non prevede che ci sia un calcolatore

o Se posso svolgere operazioni elementari allora posso risolvere anche problemi più complessi
o Intelligenza di una soluzione è codificata nell’algoritmo e non nelle operazioni
o Algoritmo deve essere descritto attraverso una rappresentazione compatibile col sistema di
elaborazione: passaggio da algoritmo a programma

Programma: insieme di istruzioni che rispettano sintassi precisa; traduzione dell’algoritmo in un linguaggio

Il crivello di Eratostene: come calcolare i numeri primi fino a n?

Scrivo i numeri da 2 a n, elimino tutti i multipli del primo numero e ripeto per tutti i numeri fino a
che non resta un solo numero nel setaccio

-----------------------------------------------------------------------------------------------------------------------------------------------

Lezione 27/11/23

Formalizzazione: descrizione dell’algoritmo attraverso una forma appropriata (varia per livello di dettaglio)
Programma = formalizzazione comprensibile al calcolatore che lo esegue

Un buon algoritmo è caratterizzato:

o Ordinalità: operazioni secondo una sequenza definita


o Eseguibilità: operazioni possibili
o Assenza di ambiguità: operazioni note e condivise tra ideatore ed esecutore
o Terminazione: entro un numero di passi

Primitive:

 Read (name): legge un valore di input e lo associa al simbolo name


 Write (name): scrive in output il valore associato al simbolo name
 Assign to (name) value (expression): associa al simbolo name il valore di expression
 If (condition) then (primitive_list_1) else (primitive_list_2): controllo di una condizione ed
esecuzione di una tra due liste primitive
 While (condition) do (primitive_list): la lista di primitive viene ripetuta finché la condizione è vera

Pseudocodice: “traduzione testuale” dei concetti utilizzati nello sviluppo del programma; parti testuali +
primitive e simboli

Diagramma di flusso (flow chart): rappresentazione grafica della sequenza di operazioni; facili da
comprendere

Strategie elementari (trial-&-error*, generate-&-test, guess-&-check): possibile soluzione verificata a


posteriori
inizi
Strategie top-down: scomposizione in sotto-problemi

Strategie bottom-up: attenzione ai dati e a funzioni, poi combinate per risolvere problema di alto livello

*ordinare in modo alfabetico

o Drunk man sort: genera permutazioni dei cognomi finché risulta ordinata
o Brute force sort: genera tutte le possibili permutazioni e cerca quella ordinata

Implementazione: traduzione dell’algoritmo (programma) in modo compatibile con il sistema di calcolo

Paradigmi:

o Imperativo o procedurale: vicino al concetto di algoritmo, sequenza di comandi


o Logico: descrizione problema > descrizione soluzione (PROLOG)
o Object-oriented: programma costituito da più oggetti autonomi e attivi contemporaneamente che
cooperano in base a necessità
Alto grado di astrazione

PROGRAMMAZIONE STRUTTURATA
 Blocco di elaborazione o concatenazione
 Blocco di selezione o decisione
 Blocco di ripetizione

-----------------------------------------------------------------------------------------------------------------------------------------------

Lezione 29/11/23

Tipi di dato: numeri interi, con virgola

Controlli di flusso: if-then-else o cicli

Swap (a, b): utilizza AUX; ad AUX do il valore di A, poi ad A il valore di B e infine do a B il valore di AUX; in
questo modo non perdo nessuna info; questa funzione ripete queste righe di codice in modo automatico

Es. algoritmo che conta primi n numeri:


BEGIN
Read (n)
Somma  0 nome variabile  valore assegnato
X1
While x<= n do
Somma  0
XX + 1
EndWhile
Write (Somma)
END

Ci sono possibili infiniti algoritmi per risolvere un problema, efficacia (restituisce risposta) ed efficienza
(tempo minore di rivoluzione) discriminano l’algoritmo “migliore”

Ad esempio, l’algoritmo sopra menzionato potrebbe essere semplificato in questo modo


BEGIN
Read (n)
n ( n+1 )
Somma 
2
Write (Somma)
END

Es. BEGIN
read(X)
if (X mod 2) = 0 then
X  X/2
else
X  3X+1
write(X)
END
In questo esempio non c’è un ciclo, è detto one shot, proviamo a trasformarlo in ciclo: continua il ciclo fino
a che X è uguale a 1

BEGIN
read (X)
while X != 1 do X != 1: x diverso da 1
if (X mod 2) = 0 then
X  X/2
else
X  3X+1
endwhile
write (X)
END

Programma traduce messaggio in bit (quantità elementare di informazione) che sono leggibili dalla
macchina
Un dato in forma binaria richiede un numero di bit pari alla quantità di informazione, più informazioni devo
gestire più bit necessito
8 bit = byte (B)

MULTIPLI DEL BYTE

Computer = calcolatore elettronico che utilizza solo 0 e 1


Sistema numerico: metodo per rappresentare
o Posizionale: ad ogni posizione è associato un peso, numero dato dalla somma pesata delle cifre
o Non posizionale: valore delle cifre indipendente dalla posizione es. numeri romani

Sistema binario è posizionale a base 2 (cifre possibili 0 e 1)

Come passare da sistema binario a sistema decimale?

Es. 1101,101₂  1*2³+1*2²+0*2¹+1*2⁰+1*2⁻¹+0*2⁻²+1*2⁻³ = 8+4+1+0,5+0,125 = 13,625₁₀

-----------------------------------------------------------------------------------------------------------------------------------------------

Lezione 01/12/23

In linea di principio, posso rappresentare numeri razionali non periodici e numeri reali approssimati a una
data cifra decimale

I calcolatori adottano due rappresentazioni aritmetiche (intera e decimale) per diverse esigenze

o Limitare numero di cifre


o Ampliare insieme di numeri rappresentabili
o Raggiungere approssimazione adeguata
Ampiezza della rappresentazione (=numero di cifre usato per rappresentazione)

o Varia tra sistemi di calcolo


o Indicatore della potenza id calcolo
n−1
Nel caso di numeri interi, il massimo numero rappresentabile è N=∑ 2 =2 −1
i n
o
i=0

NUMERI INTERI

o Bit a sinistra (bit più significativo) rappresenta segno: 0 = positivo; 1 = negativo


o Gli altri rappresentano valore assoluto del numero

⚠️ Esistono due rappresentazioni dello 0


o PER ECCESSO
Valore costante di eccesso (offset) definisce posizione dello 0; bisogna sottrarlo per trovare vero
valore del numero
o IN COMPLEMENTO A 1
Il modulo dei numeri negativi si ottiene complementando a 1 (01 e 10, ovvero invertire 0 e 1),
davanti metto meno
o IN COMPLEMENTO A 2
Utilizzata da sistemi di calcolo moderni; definito come 2ⁿ - X
Il modulo dei numeri negativi si ottiene invertendo 0 e 1 e sommando 1

OPERAZIONI
o Scorrimento (shift): operazione più semplice; inserisco uno 0
verso destra divisione per 2; verso sinistra moltiplicazione per 2

⚠️Overflow: sforamento della massima rappresentazione


o Tutte le operazioni canoniche si eseguono normalmente ma con sole due cifre
 Se di segno diverso (in modulo e segno): addizione diventa differenza tra moduli
o Confronto: per verificare uguaglianza tra operandi; risultato è valore booleano (TRUE/FALSE);
verifico risultato della differenza o confronto bit a bit dal più significativo

Rappresentazione in virgola mobile (floating point): deriva dalla notazione scientifica X.Y * 10ᵂ
mantissa ordine di grandezza
o Overflow se il risultato è maggiore in modulo del più grande numero rappresentabile e
underflow se è minore del più piccolo numero rappresentabile (si approssima a 0)
o Non tutti in numeri possono essere rappresentati in questo modo es. numeri razionali periodici
 si arrotonda al numero rappresentabile più prossimo
o Forma normalizzata, una sola cifra pari a 1 per la parte intera della mantissa: (-1) * 1.M * 2ᵉ
o Nella rappresentazione standard si usano 32 bit di cui 1 bit per il segno, 23 per la parte
frazionaria, 8 per E calcolato per eccesso da 127 (esponente parte da 127)
o Posso rappresentare da 2^32 numeri
o In virgola mobile il numero più grande rappresentabile è 1.111…
*2¹²⁷ e il più piccolo è 1.111…*2⁻¹²⁷

Rappresentazione del testo: codifica di ogni singolo carattere (simbolo grafico


a cui deve essere associata una sequenza di bit); standard di codifica = ASCII:
128 simboli grafici, quindi 7 bit, a volte 8 per caratteri speciali
UNICODE: 16 bit, estensione dell’ASCII, mi permette di rappresentare 65536 diversi simboli

Lezione 04/12/23

ESERCIZI SISTEMA BINARIO

 Con 4 bits quanti interi positivi posso rappresentare? 2^4=16


Qual è il massimo numero intero rappresentabile? (1111)₂ = (15)₁₀
 Con 4 bits quanti interi con segno possiamo rappresentare in complemento a 2? 16
Qual è l’intero più piccolo e più grande rappresentabili? 2^(4 – 1) - 1 = 7 e -2^(4 - 1) = -8
 Quanti bits servono per rappresentare -27 in modulo e segno? 6 bits, di cui uno per il segno e
log₂27 per il modulo
 Valore di 100101:
o Modulo e segno: - (1+4) = -5
o Complemento a 1: - (0+2+0+8+16) = -26 011010
o Complemento a 2: - (1+2+0+0+16) = -27 011011
 Quale produce un overflow? Scorrimento a sx di 11001101, scorrimento a sx di 10001101,
0101 + 0100, 1101 + 1111
o 10011010  - 102
o 00011010  da numero positivo diventa negativo, quindi OVERFLOW
o 1001  somma tra due positivi non può dare negativo, quindi OVERFLOW
o (1)1100  il bit (1) è fuori rappresentazione ma non genera overflow perché 1100 è uguale
a -4 nella rappresentazione complemento a 2
 “-17” in complemento a 2: 1011111
 93 in binario puro (faccio divisioni successive e calcolo resto): 1011101

-----------------------------------------------------------------------------------------------------------------------------------------------

ARCHITETTURA DEI CALCOLATORI

Unità funzionali: dispositivi periferici di input e output, supporti di memoria, centrali di elaborazione (CPU)

Comunicano tra loro grazie a BUS di comunicazione

MACCHINA ELEMENTARE costituita da:

o Centrale aritmetica CA: contiene circuiti logici capaci di


eseguire operazioni aritmetiche, estrazioni di radici, confronto,
trasferimento dei dati tra registri e tra registri e memoria
o Centrale di controllo CC
o Memoria indirizzabile M costituite da celle di ampiezza definita
(es. 32 bit); contiene sia i dati che il programma per elaborarli
(sotto forma di sequenze di bit*)
o Celle di memoria aggiuntiva  registri
o Le operazioni avvengono tra gli operandi nei registri I e J, il
risultato viene scritto nel registro O

*Il primo bit è:


 0: gli altri bit rappresentano il numero
 1: i primi n bit rappresentano un’operazione (OP CODE) e gli altri sono inutilizzati
Istruzioni di salto: CC deve conservare indirizzo corrente da cui riprendere

Lezione 06/12/23

IAS costituita da:

o CA modificata con collegamento al registro accumulatore, in


ingresso/uscita dal sommatore
o MAR (Memory Access Register): registro di indirizzamento della
memoria
o Registro R3: permette connessione diretta tra CA e memoria
o PC (Program counter) tiene traccia della prossima istruzione da
cercare

10 bit di OP CODE + 10 bit di dato

In un’unica operazione macchina carica sia istruzione che dato,


riconosce le due parti distinte

MACCHINA MODERNA (RASP) costituita da:

o ALU (Aritmetic Logic Unit): circuito di calcolo


o Numero di registri aumenta per facilitare esecuzione di
istruzioni complesse
o Registri diventano ad uso esclusivo della ALU
o Registi + CU + ALU = CPU (Central Power Unit)
o PSW dove vanno a finire errori
o MDR: registrati dati da e per la memoria

Linee di comunicazione:

o D: bus dati collegato a MDR


o A: bus indirizzi collegato a MAR
o C: bus controlli collegato a CU

Istruzioni: n bit di OP CODE + m bit di OPERAND FIELD; n e m sono


arbitrari

Tre tipi di indirizzamento:

o Immediato: l’OPERAND FIELD è un dato, valore numerico di immediato utilizzo; non serve accesso
alla memoria
o Diretto: i bit dell’OPERAND FIELD sono un indirizzo di memoria che mi dicono dove recuperare
valore numerico
o Indiretto: i bit dell’OPERAND FIELD sono un indirizzo di memoria il cui valore numerico è l’indirizzo
di memoria che mi dice dove recuperare valore numerico

Ciclo fondamentale di calcolo formato da due fasi:

1. FETCH: prelievo, caricamento di un’istruzione dalla memoria; serie di operazioni


2. EXECUTE: esecuzione dell’istruzione; attivazione di parti della CU e della ALU
La CPU alterna tra fetch ed execute; scandito da clock di sistema; frequenza del clock di sistema è un buon
parametro e indicatore della velocità di esecuzione della CPU

Dimensione dei registri interni = parallelismo della CPU  indicatore delle prestazioni del processore
perché indica quantità di informazione che la circuiteria elettronica è in grado di trattare in un singolo ciclo
macchina

Spazio di indirizzamento: parametro importante per valutazione del processore, numero delle singole celle
memoria indirizzabili dalla CPU; legato ad ampiezza del registro MAR

ALU: esegue operazioni aritmetiche, logiche, di manipolazione e di confronto; il risultato finale va nell’ACC
mentre gli altri registri sono a supporto (es. per risultati parziali); MO (memory quotient) usato per
registrare quoziente di una divisione

Dispositivi di memoria: conservano programmi e dati, mantengono risultati contemporanei e definitivi

MEMORIA:

o Primaria (centrale)  prossima a CPU, RAM


o Secondaria (di massa)  a sé stante, lenta e di grandi dimensioni

o Ad accesso casuale (RAM): tempo di accesso indipendente da posizione dell’elemento


o Ad accesso sequenziale: memorizza dati in sequenza e accesso dipende da posizione dell’elemento
o Ad accesso quasi-casuale: tempo di accesso dipende dalla posizione dell’elemento ma non è
prevedibile a priori

PRIMARIA:

 Insieme di celle in cui è registrata quantità atomica di info


 Prima locazione indirizzata dal valore 0 e poi in modo crescente
 Dimensione della locazione è 8 o 16 bit  word o parola memoria (=quantità di info singolarmente
manipolabile in un’operazione di scrittura/lettura; può contenere dato/istruzione; corrisponde a

indirizzo di memoria) ⚠️calcolatori moderni lavorano con parole di 32/64 bit


 Dove sono i byte più significativi? 1. Indirizzo crescente (big endian) 2. Indirizzo decrescente (little
endian)  es. processori INTEL
 Sono tutte ad accesso casuale

Lezione 11/12/23

Memoria cache (si pronuncia cash):


dimensione ridotta rispetto a memoria
lavoro, più veloce (SRAM), velocizza
accesso a informazioni per CPU

Memoria secondaria: memorizza in


modo duraturo, maggiore capacità del
dispositivo  maggiore tempo di
accesso, es. hard disk, memorie FLASH
e dischi ottici

più veloce
più lento

memorie di massa “distribuite” es. drive, cloud, dropbox  velocità minore perché
legato a connessione internet

BUS

o Dati
o Indirizzi
o Controlli

Dispositivi periferici/periferiche: dispositivi connessi al bus; portabili/trasportabili quindi connessi

attraverso collegamenti temporanei (⚠️anche le memorie di massa); moduli di interfaccia permettono


collegamento e riconoscimento del dispositivo specifico
es. monitor, tastiera, mouse, stampante

USB: Universal userial bus

-----------------------------------------------------------------------------------------------------------------------------------------------

Ciclo WHILE
vs
Ciclo “FOR”: per iterare sequenze prefissate/precalcolate
For (variabile) in (sequenza) do

Endfor

Stringa = sequenza di caratteri con un ordine prestabilito

Nested loops (cicli innestati)

Tipo array: tipo di dato strutturato (=non elementare); per rappresentare e gestire sequenze (immagazzina
più valori in una singola variabile a cui si accede per posizione)

Elementi  item

Per accedere ad un item dell’array uso l’operatore []  nome array[posizione] ⚠️in Python la numerazione
degli elementi inizia da 0

Per conoscere lunghezza dell’array uso la funzione “lenght”  in Python len()

es. algoritmi su array: contare quante volte un elemento compare; dire se elemento è presente nell’array;
cercare un elemento ed eventualmente restituire la posizione

Array non è modificabile per quanto riguarda la lunghezza, sempre stesso numero di elementi
Non tutti i linguaggi di programmazione permettono di aggiungere/eliminare elementi dall’array
(modificando la lunghezza) es. in Python possiamo usare le LISTE per lavorare sulla lunghezza dell’array

Altri problemi sull’array: verificare se una sequenza è palindroma

Uso due indici: uno da inizio a fine array e l’altro in direzione opposta e verifico se i due indici
Coincidono

Lezione 12/01/24

Strutture dati in Python:

 Set ≈ insiemi
 Dictionary ≈ dizionari
 Tuple

SET

o Usati per memorizzare due elementi con unico nome di variabile; collezione di elementi NON
ordinati ( non significa che non sono in ordine crescente, ma solo che non hanno una posizione),
NON modificabili*, NON indicizzati ( non posso accedervi per posizione)
o Se faccio print successivi di un set, ottengo sempre un ordine diverso
o Definito attraverso parentesi graffe o costruttore set ()
Es. mybrands =
mybrands = set((“Ibanez”,”Fender”,”Gibson”))
o NON possono essere duplicati

Metodi degli oggetti set

o len ()
o Scorrere tutti gli elementi: for x in mybrands
o Controllare se elemento è nel set: print (“Musicman” in mybrands)  scriverà false
o *Aggiungere e rimuovere elementi:
 Aggiungere: .add() o mybrands.update(yourbrands)  per aggiungere tutti gli elementi di

un altro set (anche di una lista) ⚠️se ci sono duplicati non vengono copiati
 Eliminare: .remove() o .discard()

⚠️remove solleva errore se elemento non è presente nella lista, mentre discard no
SE NON INTERESSA CHE ELEMENTO VIENE RIMOSSO POSSO USARE .POP() CHE ELIMINA
ELEMENTO A CASO DEL SET
 Svuotare set da elementi: .clean()
 Cancellare variabile set: .del()
o .union()  crea nuovo set che è unione tra due set ≈ operazione su insiemi matematici
o .intersection()  restituisce nuovo set con elementi in comune
o .intersection_update()  modifica set mantenendo solo elementi in comune con l’altro

DICTIONARY

o Utili per memorizzare dati del tipo key: value


o Elementi sono ordinati, modificabili, non ammettono duplicati, accessibili con key

Mydictionary = {
“brand” = “Ford”,
“model” = “Mustang”,
“year” = 1964
}
Print(mydictionary[“brand”])

o .keys(): restitutisce tutte le chiavi del dizionario


o Modificare value: mydictionary[“year”]
o Aggiornamento dizionario: mydictionary.update({“year”:2020})
o Aggiungere elementi: mydictionary[“color”] = “red”
o Scorrere tutti gli elementi:
 Chiavi
 Valori
 Coppie
o Copiare dizionario: .copy()
o Nested dictionary = dizionario nel dizionario

TUPLE
o Elementi ordinati, indicizzati, non modificabili, permettono duplicati
o Definita attraverso le parentesi tonde
o Len()

o ⚠️mytuple =
o Accesso posizionale, quindi vale accesso come nelle liste
o Immodificabili MA si possono convertire in lista, applicare modifiche e convertirla di nuovo in tupla

Nell’array tutti gli elementi sono dello stesso tipo, mentre in queste strutture dati gli elementi possono
essere di qualsiasi tipo

Potrebbero piacerti anche