Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
24bit per ogni pixel, 8 per ogni colore, quindi 3byte per ogni pixel
08/10/20
Descrivere il suono con codici binari per intensità, durata, note, oggetto che ha generato quel suono
(Standard MIDI, Music Instrument Digital Interface)
Video
Immagini + suono
Codifica di entrambi
PROCESSORE
CISC Complex, integrare istruzioni e componenti di grafica, suono e memoria dentro al processore, alto
consumo e complessità architetturale
Core
CU coordina le attività
Istruzioni macchina: comando codificato in bit [Codice HEX], eseguibile dal processore
Tipi
Software
15/10/2020
Sistema operativo
Insieme dei software responsabile dell’utilizzo delle risorse hardware(Processore, memoria principale e
periferica, dispositivi input/output.
Gestisce la sicurezza.
Storia
1940\50
1970
1970\80
1990-oggi
COMPONENTI
I programmi non hanno accesso all’Hardware, il kernel ha accesso, che offre servizi allo strato successivo,
ovvero il gestore della memoria.
Struttura a cipolla, per semplificare il sistema.
Se cambio un pezzo Hardware cambia anche il Kernel.
Kernel monolitico:
Microkernel
Kernel ibrido
INTERFACCIA UTENTE
- Command text
Shell, Terminal
- Windows system
GUI, mouse, voce
FILE MANAGER
MEMORY MANAGER
Gestisce la memoria centrale (RAM), verifica che la RAM abbia spazio disponibile, e alloca i programmi.
Quando la RAM finisce trasforma un pezzo della memoria di massa in RAM virtuale.
DEVICE DRIVERS
Programmi che permettono di accedere alle funzioni della periferica installata senza conoscerne le
specifiche.
SCHEDULER
DISPATCHER
Il S.O. controlla tutte le attività, e scrive il log di tutte le informazioni (avvii, errori, accessi…)
Embedded system
FIRMWARE
Algoritmi
Procedura generale: metodo che risolve una classe di problemi, non uno singolo.
Deve essere efficiente e arrivare alla soluzione nel minor tempo possibile con il minor utilizzo di risorse
possibili
Algoritmi deterministici e non deterministici. Il primo da una risposta certa, l’altro è probabilistico.
20/10/2020
DIAGRAMMI A BLOCCHI
VARIABILE
Assegnazione
ES: altezza=183
RAPPRESENTARE UN ALGORITMO
ESEMPIO
Dato un numero intero determinare se pari o dispari
print “pari”
else
print “dispari”
Condizioni
Un’alternativa: SE
If… else
22/10/2020
STRUTTURE ITERATIVE
While pretestloop
Esegue una o piu istruzioni (blocco) fin tantoi che la condizione espressa dal while è soddisfatta/vera. Se la
condizione è falsa si interrompe il ciclo.
La condizione è verificata subito.
Esempio pratico: calcolare l’incasso totale del cinema.
Posti in sala 250, costo del biglietto 10
n=250 incasso=0
while (n>0)
Stampa biglietto (n)
Incasso=incasso+10
n=n-1
Stampa (incasso)
Fino alla soglia n=0
Do/while
Valuta una condizione dopo avereseguito il blocco, while sta in fondo al blocco
N=1
do
stampa (n)
n=n+1
while n<10
For
Ciclo while scritto in maniera più coincisa
Calcolare un algoritmo che calcola la media di voti di un esame (inseriti dall’utente a tastiera)
Ricerca di un valore all’interno di un elenco
STRUTTURE RICORSIVE
Efficienza di un algoritmo, ovvero misurare le risorse minime necessarie per la soluzione del problema.
Si misura stimando i tempi di esecuzione di un algoritmo in tre casi: caso peggiore, medio e migliore.
Nel caso medio l’algoritmo richiede n/2 operazioni; nel caso peggiore n operazioni.
Ricerca binaria:
30000/2=15000
15000/2=7500
…
1.8/2=0.9
Θ per contrassegnare il caso peggiore e per segnare quanti processi richiede l’algoritmo
LINGUAGGI DI PROGRAMMAZIONE
Linguaggio assembly
Svantaggi
I programmi sono dipendenti dalla CPU (op-code, diverso per ogni marchio di processore)
Bisogna scendere in ogni minimo dettaglio.
Compilatore: traduce in linguaggio macchina un linguaggio sorgente, che produce un file eseguibile.
Interprete: traduce linea per linea il codice sorgente. Le istruzioni vengo interpretate ogni volta che si carica
il codice sorgente.
Si appoggiano su memoria, input e output, non sul processore
IV generazione (80’s)
Linguaggi non procedurali, basati su insieme predefiniti di comandi che permettono di portare ai risultati
desiderati.
Risoluzione non passo per passo, arrivano alla soluzione del problema specificando la soluzione che
cerchiamo. Programmi per scopi specifici
Paradigmi di programmazione
Imperativo: sequenza di comandi ed istruzioni che manipolano i dati per arrivare al risultato.
Dichiarativo: Descrizione del problema da risolvere e applico metodi risolutivi già predisposti
Funzionale: logica delle funzioni per risolvere
Ad oggetti: problema in termine di oggetti che hanno proprietà e funzioni proprie.
27/10/2020
Imperativo
Inizializzo una variabile che contiene la lista degli studenti, la carico nel programma.
Leggo elemento per elemento, scrivo un ciclo for o while con il controllo che la lista coincida con il numero
effettivo degli studenti.
Controllo che il voto sia maggiore di 18 per ogni studente
alla fine stampo il numero di studenti promossi
Dichiarativo
Le primitive sono già definite, non le posso estendere, quindi questo approccio è utile solo per problemi
specifici.
La programmazione logica permette di costruire altre primitive per risolovere altri tipi di problemi
Funzi
onale
Il programma è una funzione che accetta degli input e produce dei risultati (output)
Ad oggetti:
Cos’è un programma?
Di controllo: if
Iterative: while
Istruzioni di esecuzione
03/11/2020
Istruzioni C++
ISTRUZIONI STRUTTURATE
10/11/2020
Funzioni
I programmi possono essere gestiti con funzioni, ovvero un blocco di istruzioni al quale viene assegnato un
nome, ha dei parametri in ingresso, e il blocco mi ritorna un risultato.
Posso scorporarlo dal codice sorgente, cosi suddivido il programma in funzioni e sottofunzioni, e migliora la
leggibilità.
FUNZIONI DI LIBRERIA
Codici sorgenti organizzati secondo una logica rispondenti ad un determinato bisogno, manca il main
perché non è un programma, ma una libreria.
Lo compiliamo, e ci crea un file oggetto che traduce le funzioni in linguaggio macchina.
12/11/2020
24/11/2020
Riferimento
“Riferimento a”
Int x= 1
Ciò consente di dare nomi multipli a variabile, modificando una si modifica anche l’altra (aliasing)
Inizializzazione obbligatoria
Double d=3.1
Int &z=d errore, perche sto assegnando un tipo double ad una variabile intera
Double x=3.5
int&y = x
y-= 3
Intx = 4
cout<< &(2*x) errore perche non ha nessun indirizzo di memoria
Intx=1
int &y
y=x
x++ Errore, non posso equiparare un percorso ad una variabile.
26/11/2020
I PUNTATORI
È necessario specificare il tipo di dato perché mi punta ad uno spazio di memoria ben preciso.
Il puntatore è una variabile come tutte le altre.
Qualsiasi sia il tipo di *px, riserva comunque 8 celle di memoria, a differenza di int che ne consuma 4.
Se avessi avuto un char, che occupa 1 cella, il puntatore ne occupa sempre 8.
Cosi si crea un link tra x e px.
01/12/20
STRINGHE
Sequenza di caratteri alfanumerici, vista come unn array di caratteri, il cui ultimo elemento è il carattere
nullo (/0) di terminazione. Lo spazio conta come carattere.
Char parola []= “Ciao” Char parola[]= {‘C’, ‘i’, ‘a’, ‘o’, \0}
Quando dichiaro un array di caratteri posso farlo allo stesso modo di un array di interi
oppure
Parola [0] =c; parola[1]=i … parola[5]= /0; (VA SEMPRE MESSO /0 IN QUESTO CASO)
Funzioni utili
Cin.eof: ritorna true (boolen) se lo stream cin ha raggiunto La sua fine (Va usato sempre dopo almeno
un’operazione di lettura)
Cin.getline (s,n): legge da cin una riga in s fino a capo linea, per un massimo di n-1 caratteri (lo \n non viene
letto)
Return 0, chiude il
programma e tutto è
apposto
I/O su file di testo
03/12/2020
Di solito negli esercizi venivano utilizzate variabili che allocavano memoria nella ram.
Allocazione statica: devo sempre conoscere i dati su cui vado a lavorare, solo che non sempre conosco
come ad esempio dei vettori la memoria che mi serve.
Soluzione: avere variabili dinamiche, ovvero una gestione dinamica della memoria durante l’esecuzione.
Queste variabili vengono allocate nell’heap, un’area esterna allo stack, alla quale accedo solo tramite i
puntatori.
New: allocazione della memoria delete: deallocazione della memoria
Area programmi e costanti: per le istruzioni in linguaggio macchina (es. settings.json) e le costanti del
programma
Area dati statici: per variabili globali o allocate staticamente (int x static, variabile intera di tipo statico).
Hanno un’area apposta nei registri, sono privilegiati
Area heap: vengono caricate tutte le variabili non prevedibili a tempo della compilazione
Es:
DEALLOCAZIONE
…
delete p;
delete[] stringa;
Regola: sempre deallocare memoria allocata dinamicamente non appena serve più
PRO: gestione più efficiente della memoria, perché alloca solo lo spazio necessario
Da utilizzare quando ho strutture di dati dinamiche (liste, alberi,…) elementi di cui non conosco la
dimensione a priori.
ESEMPIO: Word, utilizza memoria dinamica, perche un file di testo è una lista di dati dello stesso tipo,
stringa
ARRAY STATICI
Int a [dim]
Oppure int a= {1,2,3}
10/12/2020
Creato array dinamico di 5 spazi, per essere corretto doveva essere delete[x]
STRUTTURE
Sono un dato complesso composto da una collezione di elementi non omogenei (gruppo di variabili
etichettato con un nome)
Permette di creare nuovi tipi di oggetti, ciò permette di staccarsi dai tipi di base.
Sintassi:
struct identificatore
{
tipo campo1
…
tipoN campoN
Identificatore var_id;
ACCESSO AI CAMPI
Se ho una struttura dentro la quale ci sono dei campi, per accederci si utilizza la notazione punto (s.field)