Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
Codifica del trattamento: modalità attraverso cui può essere descritta una sequenza di passi che devono
essere automatici
* INFORMAZIONI
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
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
Primitive:
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 bottom-up: attenzione ai dati e a funzioni, poi combinate per risolvere problema di alto livello
o Drunk man sort: genera permutazioni dei cognomi finché risulta ordinata
o Brute force sort: genera tutte le possibili permutazioni e cerca quella ordinata
Paradigmi:
PROGRAMMAZIONE STRUTTURATA
Blocco di elaborazione o concatenazione
Blocco di selezione o decisione
Blocco di ripetizione
-----------------------------------------------------------------------------------------------------------------------------------------------
Lezione 29/11/23
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
Ci sono possibili infiniti algoritmi per risolvere un problema, efficacia (restituisce risposta) ed efficienza
(tempo minore di rivoluzione) discriminano l’algoritmo “migliore”
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)
-----------------------------------------------------------------------------------------------------------------------------------------------
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
NUMERI INTERI
OPERAZIONI
o Scorrimento (shift): operazione più semplice; inserisco uno 0
verso destra divisione per 2; verso sinistra moltiplicazione per 2
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⁻¹²⁷
Lezione 04/12/23
-----------------------------------------------------------------------------------------------------------------------------------------------
Unità funzionali: dispositivi periferici di input e output, supporti di memoria, centrali di elaborazione (CPU)
Lezione 06/12/23
Linee di comunicazione:
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
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
MEMORIA:
PRIMARIA:
Lezione 11/12/23
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
-----------------------------------------------------------------------------------------------------------------------------------------------
Ciclo WHILE
vs
Ciclo “FOR”: per iterare sequenze prefissate/precalcolate
For (variabile) in (sequenza) do
…
Endfor
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
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
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
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
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
Mydictionary = {
“brand” = “Ford”,
“model” = “Mustang”,
“year” = 1964
}
Print(mydictionary[“brand”])
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