




























































































Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Si parte dalle basi dell'informatica, con la definizione di algoritmo e la codifica dei dati nel linguaggio binario. Si trattano in breve i sistemi operativi e ampiamente il linguaggio di programmazione C++. Partendo dalle strutture di controllo più semplici fino alla OOP e alla programmazione generica. Si trattano in breve anche gli ADT.
Tipologia: Appunti
1 / 161
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!





























































































III
da applicare ai dati in ingresso affinché possa produrre quelli in uscita
Bisogna trovare un procedimento risolutivo sistematico per problemi generici che
prevede:
fare;
L’algoritmo è del tutto generale, ma, in qualsiasi caso, il procedimento avrà termine
e fornirà una risposta precisa in un numero finito di passi.
Dev’essere perfettamente definito: quale operazione si debba compiere e anche
il momento in cui il procedimento si debba ritenere concluso.
La descrizione dell’intero procedimento è presentata in termini finiti, anche se può
essere applicata a numeri naturali di dimensioni illimitate.
Bisogna definire:
per renderlo più operativo (sottoprogrammi)
Problema:
Si vuole suddividere un rettangolo AxB in quadrati aventi il lato della maggiore
lunghezza possibile e diverso da 1. Tutte le dimensioni sono numeri interi.
Definire i dati:
Ridefinire il problema:
dal MCD.
Algoritmo risolutore:
taglio è possibile e che la misura del lato del quadrato è C
Un programma può essere suddiviso in sottoprogrammi per facilitarne l'esecuzione,
consentendo al codice di essere più generale e applicabile in diverse situazioni
Calcolo MCD
Algoritmo Euclide
Esempio: x=48 y=28 r=
x=28 y=20 r=
x=20 y=8 r=
x=8 y=4 r=
In questo modo abbiamo espanso l’algoritmo e possiamo riutilizzare i sotto-algoritmi
ogni volta che sono necessari.
Come programmatore, è importante considerare tutti i possibili scenari di dati ed
errori, in modo da gestirli.
L’algoritmo dev’essere espresso in un linguaggio comprensibile all’esecutore.
Una volta definito, l’algoritmo deve essere sottoposto ad un esecutore, che deve
essere in grado di:
accedere alle informazioni memorizzate e modificarle.
N.B. L’esecutore non è necessariamente consapevole di quello che sta facendo.
Infatti questi linguaggi sono imperativi, poiché contengono comandi che
l’esecutore si limita a eseguire, senza capirli.
Calcolo del resto R
Esempio: m=48 n=
m=20 n=
resto=
nb: non sempre sono possibili entrambe le operazioni
registro di memoria
supporto per la memorizzazione di un’informazione;
insieme di n celle elementari, che può assumere uno tra 2
𝑛
stati possibili;
i più piccoli sono formati da 8 bit ( un byte );
operazioni: si leggono 8 bit/tensioni per volta
si scrivono contemporaneamente/si caricano 8 tensioni
corrispondenza biunivoca
si possono associare:
Si associa il valore di un tipo di dato (una categoria: numeri, testo, immagini, suoni…)
alle sequenze binarie. Se cambio il formato, sto cambiando il modo in cui associo il
bit alle informazioni (modo in cui codifico il formato).
La macchina interpreta i bit in base alle informazioni che gli vengono passate
dall’ utente.
Per rappresentare informazioni metto i bit in sequenza : se uso n bit ho 2
𝑛
informazioni
(stati) che posso rappresentare.
La più piccola unità di informazione che legge la macchina è il byte.
La codifica è:
limitata dal numero di bit: il numero di bit
limita il valore da rappresentare;
discreta nel caso di numeri reali: non si può
rappresentare una grandezza continua in
maniera completa poiché le sequenze di bit
sono numerabili
Oltre ai dati, bisogna memorizzare le istruzioni
- > le singole azioni elementari che l’unità centrale
può eseguire
- > si specifica l’ operazione da compiere e i dati
coinvolti
Il numero delle istruzioni possibili è finito, pertanto si può rappresentare con un
certo numero di bit (codice operativo): ogni operazione viene associata a un
codice operativo (sequenza di bit).
L’istruzione è rappresentabile da una sequenza di bit
divisa in due parti:
1. codice operativo - > le operazioni 2. campo operandi - > i dati (variabili, costanti…)
NB: al processore non interessano i dati in sé, bensì l’indirizzo in cui sono contenuti.
Il processore conosce tutto quello che gli serve per eseguire l’istruzione.
Ogni tasto corrisponde a una sequenza di bit che viene inviata alla macchina
la tastiera è un dispositivo di input che si adatta alla lingua.
A merican S tandard C ode for I nformation I nterchange
È un sistema di codifica dei caratteri alfanumerici a 7 bit.
Estensione ad 8 bit per raddoppiare il numero di caratteri rappresentabili ( extended
ASCII ). In questo caso sono codificati simboli speciali per i diversi alfabeti quali
lettere greche, lettere accentate, ecc.
Si ha uno standard code che permette di identificare univocamente un carattere:
il carattere corrispondente ad ogni byte.
Il numero di caratteri codificati è 2
8
è stata introdotta per estendere il numero di bit associato a ogni carattere
(256 erano pochi)
È un sistema di codifica che assegna un una combinazione di bit a ogni carattere
in maniera indipendente dal programma, piattaforma e dalla lingua.
È compatibile col codice ASCII e codifica i simboli di quasi tutti gli alfabeti moderni.
Inizialmente era un codice a 16 bit (corrispondenti a 65536 caratteri diversi).
Oggigiorno si basa su tre tipi di codifiche diverse: a 8 bit (byte), a 16 bit (word) e a
32 bit (double word), per rappresentare la totalità dei caratteri.
Un esempio è l’utf8 (una codifica Unicode a 8 bit).
2. Quantizzazione riduce il numero di grandezze rappresentabili in base alle
sequenze di bit disponibili
si discretizzano i valori rappresentabili (insieme di cardinalità finita)
Si assegna un valore numerico a ogni campione:
uno tra N valori (livelli di quantizzazione)
Gli intervalli di quantizzazione Q sono scelti in base
alle caratteristiche del segnale.
Quantizzatore uniforme:
𝐹𝑆
𝑁
dove FS = MaxVal - MinVal (fondo scala) - > dove N sono i livelli di quantizzazione
Il quantizzatore tira fuori una serie di valori associate a sequenze numeriche.
occupa troppo spazio in memoria (acquisisce troppi valori);
poiché si misura una grandezza e si associa un altro valore alla stessa,
pertanto tanto è piccolo l’intervallo di quantizzazione tanto lo è l’errore.
3. Codificatore trasforma i valori numerici forniti dal quantizzatore in bit.
La scelta del codice dal tipo di informazione che si rappresenta
Esempio: ho un codificatore da 8 bit (può rappresentare 256 numeri) - > il
quantizzatore prende la forma d’onda e divide l’intervallo in 256 valori.
(Rappresentazione discreta di segnale continuo)
non è presente la dimensione temporale ma sono presenti
due dimensioni spaziali.
Per rappresentare una fotografia bisogna conoscere la posizione esatta di ogni
singolo oggetto e dei colori.
Si rappresentano attraverso una serie di pixel - > si utilizzano per la codifica delle
immagini
Si associa a un pixel una sequenza di bit:
rappresentazione a quadratini (si memorizza
l’informazione relativa al colore nel
quadratino)
Immagini in bianco e nero
(picture elements), cioè le unità costituenti
l’immagine
La qualità della rappresentazione dipende da:
attraverso una coppia di numeri.
Aumentando il numero di pixel si definisce meglio la forma.
Sfumature di grigio
Per ogni pixel viene misurato il livello medio di intensità luminosa (il livello di grigio)
8 bit associati a ogni pixel: si possono rappresentare 2
8
= 256 livelli di grigio
Immagini a colori
Si individua un certo numero di sfumature di colore differenti e si codifica ogni
sfumatura mediante un'opportuna sequenza di bit
Il numero di bit è detto profondità di colore , misurata in bpp.
La rappresentazione di un’immagine mediante la codifica diretta dei pixel viene
chiamata bitmap.
Il numero di byte memorizzati per un’immagine dipende dalla risoluzione e dal
numero di colori che ogni pixel può assumere.
La rappresentazione di solito è su tre colori - > sintesi additiva : tramite i colori primari
si possono rappresentare tutti gli altri ( RGB ) cambiando le tonalità/gradazioni dei
singoli colori. Ogni sfumatura di colore primario è rappresentabile da 1 byte.
Oggi si usano rappresentazioni a 16 bit che permettono di essere molto precisi, a
discapito dell’occupazione di memoria.
Aritmetica dei registri
I registri di memoria sono supporti di
lunghezza finita , ciò impone delle
restrizioni all’insieme di numeri
rappresentabili e, di conseguenza,
impone dei vincoli all’aritmetica.
Registro a n bit:
𝑛
valori diversi rappresentabili
Intervallo di rappresentazione [0, 2
𝑛− 1
Non ci sono problemi nel caso in cui
l’operazione produce un risultato
rappresentabile nel registro.
Overflow - > la macchina non riesce a
rappresentare il numero su 9 bit,
poiché è la rappresentazione è
limitata. - > ERRORE
Se il risultato non è rappresentabile, si
produce un riporto uscente dal
registro, all’interno rimane una parte
della rappresentazione del risultato
La congruenza è di mod 2
𝑛
: R mod 2
𝑛
1.Rappresentazione in segno e modulo
(per avere compatibilità con i +)
posso rappresentare due informazioni.
L’intervallo di rappresentazione è [− 2
𝑛− 1
𝑛− 1
− 1 , ] - > n = 8 bit [-127, +127]
Esempio:
Il modulo è lo stesso dell’altra rappresentazione.
Svantaggio : si rappresenta lo zero con il segno ( doppia rappresentazione dello zero )
Le operazioni diventano alquanto complicate. Somma e sottrazione sono
operazioni nettamente diverse.
2.Rappresentazione in complemento alla base (complemento
a due)
sono rappresentati come complemento a 2 del numero
rappresentato
R(x)=
𝑛
𝑛
Sommo la potenza massima che posso avere con n bit al
numero e “tolgo” le cifre oltre gli n bit (con il modulo).
(n - > numero di bit disponibili)
Si rende circolare la rappresentazione: arrivati a un certo punto
le sequenze si ripetono.
L’intervallo di rappresentazione è [− 2
𝑛− 1
𝑛− 1
Esempio n = 8
8
= 293 la conversione si fa su questo numero!
8
modulo di 𝟐
𝒏
si buttano via i bit fuori dal registro
8
Vantaggi:
o Le somme sono somme di rappresentazioni R(x+y) = R(x) + R(y)
o Le differenze non esistono, sono somme di negativi R(x-y) = R(x) + R(-y)
00000000 - > 0; 10000000 - > il più piccolo negativo
Svantaggi:
in cui si ecceda la rappresentabilità del
registro (anche con i num negativi!)
NB trucchetto - > calcolo rapido per negativi!
00100101 rappresento +
11011010 inverto i bit 1 a 1 (operazione di negazione/complemento)
1 sommo 1
11011011 ottengo - 37
Base 2 - > base 10
La rappresentazione dei numeri reali in base 2 è analoga a quella in base 10:
Parte intera.parte frazionaria
La parte frazionaria è formata da cifre che pesano le potenze di 2 a esponente
negativo:
Base 10 - > base 2
Si convertono separatamente le due parti:
nell’ordine in cui compare
Per rappresentare i numeri reali nel registro è necessario codificare la posizione del
punto frazionario (per esempio per le operazioni):
1. Codifica esplicita - > si prefissa la posizione esatta del punto 2. Codifica implicita - > rappresenta un fattore di scalo tramite cui si può
spostare il punto
Con la codifica esplicita dovremmo rappresentare sia il numero che il suo fattore
di scala - > antieconomico e complicato
Numeri senza segno
Nel registro fisso il punto in fase di costruzione del processore, dividendo il registro
in due parti:
(non c’è bisogno sapere a memoria gli svantaggi)
C’è un problema legato alla precisione di rappresentazione.
Si vuole rappresentare il valore X , che nel registro equivale a 𝐾 × 2
−𝑝
, dove K è il
valore che otterremmo se interpretassimo come intero il contenuto del registro.
N - > numero di bit del registro
L’intervallo di rappresentabilità per K sarebbe [0, 2
𝑁
L’intervallo di rappresentabilità per X è [0, ( 𝟐
𝒏
−𝒑
Esempio
N = 8, p = 4
8
− 4
] = X [0, 255 x
1
16
La rappresentabilità del numero dipende da dove posiziono la virgola:
si limitano entrambi le parti - > bisogna trovare un equilibrio tra le due parti
È chiaro che i numeri rappresentati sono sempre 256, ma si rappresentano a
intervalli di 2
−𝑝
incapace di rappresentare un numero perché è compreso tra due valori
consecutivi rappresentabili ( mancanza di rappresentazione ).
Tutti i valori compresi tra 0.03125 e 0.09375 sono rappresentati da 0.
troppo piccolo per essere rappresentato nella memoria dell'elaboratore e
viene confuso con lo zero.
Tutti i valori compresi tra 0 e 0.03125 sono rappresentati da 0.
E assoluto =
2
−𝑝
2
per diminuirlo si aumenta p
Il vero problema riguarda
E relativo =
𝐸 𝑎𝑠𝑠𝑜𝑙𝑢𝑡𝑜
𝑚𝑜𝑑𝑢𝑙𝑜 𝑑𝑖 𝑋
Avvicinandosi allo zero E relativo - > ∞
Allontanandosi E relativo - > 0
Bisogna trovare un compromesso tra la
precisione e il range (intervallo):
aumento p - > aumenta la precisione;
aumento n - > aumento il range;
Di solito si preferisce la rappresentazione in virgola mobile, per questioni di
precisione. L’unico caso in cui si preferisce la fissa è quando p = N: si ha un registro
in cui tutti i bit rappresentano la parte frazionaria.