














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
Appunti di Informatica di base della Prof.ssa Caputo, anno scolastico 2021-2022.
Tipologia: Appunti
1 / 22
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!















Prof. Caputo COS'È L'INFORMAZIONE? Alla parola 'informazione' sono stati dati diversi significati da vari scrittori nel campo generale della teoria dell'informazione. È probabile che almeno un certo numero di questi si rivelerà sufficientemente utile in talune applicazioni da meritare ulteriori studi e riconoscimento permanente. Difficilmente ci si può aspettare che un unico concetto dell'informazione terrebbe conto in modo soddisfacente delle numerose applicazioni possibili di questo campo generale.
Esempio partendo dal codice binario:
1 2 Esempio: 0,01= 1×10^2 Notazione scientifica con numeri binari 101010000= 0, 10101 x 10^9 - 0,10101 X 10^01001 -- converto il 9 in numero binario! SEGNO 0 (0=positivo, 1=negativo) ESPONENTE 0000 01001 MANTISSA 10101000000000000000000 Limiti del calcolo numerico su dispositivi informatici: Errori di overflow Errori di cancellazione numerica Errori di troncamento e moltiplicazione CONVENZIONI Codificare in codice binario i simboli della scrittura comune o parole chiave (ad esempio il carattere speciale che indica la fine della riga) richiede l'uso di convenzioni. Una convenzione molto conosciuta è la codifica ASCII (American Standard Code for Information Interchange), molto diffusa in passato. Questa codifica richiede l'utilizzo di 8 cifre binarie e ogni combinazione associa un simbolo. Altre codifiche dei caratteri testuali più recenti: UTF - Unicode Transformation Format UTF-
Attualmente alla versione 13.1. Emoji introdotte dalla 6.0. Secondo la codifica che abbiamo visto, è possibile individuare un'unità di misura dell'informazione codificata. L'unità elementare della codifica binaria è il bit. Un oggetto fisico si può considerare avente capacità di 1 bit quando questo può assumere in maniera stabile, due stati distinguibili che possono essere associati rispettivamente a 0 e 1. Alcune convenzioni: 8 bit -› 1 byte 1 kilobyte (KB) - 1024 bytes (210 bytes) 1 megabyte (MB) -, 1048576 bytes (220 bytes) 1 gigabyte (GB) -> 1073741824 bytes (230 bytes) 1 terabyte (TB) -> 1099511627776 bytes (240 bytes) 1 petabyte (PB) ->...(250 bytes) LA DIGITALIZZAZIONE Altri tipi di informazione sono archiviabili nei sistemi digitali. I contenuti multimediali sono un altro comune tipo di informazione che necessita della sua codifica: Suoni (e.g. brani musicali) Immagini Video Il processo di codifica e di conversione di una grandezza fisica (o della sua misurazione) in un'informazione discreta (sequenza di bit) è chiamato digitalizzazione. Per esempio, una foto scattata con il telefono è una digitalizzazione dell'informazione luminosa passante per la lente della camera. Continuiamo con l'esempio della foto: supponiamo di scattare una foto con un telefono che fa solo foto in scala di grigi. Il sensore dietro il sistema di lenti riceve la luce a varie intensità, in base alla luminosità dei colori degli oggetti visibili. Le "sfumature" che può assumere la luce in questo senso sono infinite all'interno dell'intervallo bianco-nero. Il sistema del nostro telefono, in quanto digitale, può avere solo un numero finito di colori (o di grigi nel nostro esempio). Il sistema del nostro telefono assegnerà quindi in base a un certo numero di soglie e al loro valore uno dei colori, in numero finito, a ogni parte della nostra foto. Il processo di trasformazione di una quantità da una scala continua di valori a una discreta si dice discretizzazione. Il processo di discretizzazione che avviene per soglie/intervalli si dice quantizzazione. La quantizzazione è quindi un metodo di digitalizzazione. Un ulteriore parametro da considerare per la digitalizzazione di grandezze (e quindi informazioni) misurate rispetto allo scorrere del tempo (i.e. suoni e sequenze video) è la frequenza di campionamento. La frequenza di campionamento porta a una discretizzazione, questa volta, rispetto alla grandezza tempo che permette quindi la digitalizzazione di tale informazione. L'unità di misura della frequenza è l'Hertz (Hz). 1 Hz = 1 ciclo per secondo. Una camera in grado di catturare video a 120fps ha una frequenza di campionamento di 120Hz. Un televisore con una frequenza di 60Hz è in grado di aggiornare l'immagine
intende il non avere mai la codifica di un simbolo come prefisso della codifica di un altro. Una soluzione nota a questo problema è la codifica di Huffman. La lista di film compressa sarà tradotta in un codice più breve e avrà una parte di dizionario dove verranno codificate le informazioni per l'operazione di decompressione. Questo metodo, si può intuire, permette di ricostruire l'informazione originale senza perdita di informazioni. In questo senso si tratta quindi di un approccio Lossless. Cose da ricordare quando si applica una compressione dei dati: la quantità di dati dell'informazione compressa è uguale all'informazione effettiva compressa più l'informazione necessaria per invertire il processo di compressione e riottenere l'informazione originale. Nel nostro esempio sarà il dizionario + lista dei film compressa. Bisogna anche tenere a mente che dove si guadagna in spazio (ridotta quantità di dati) si perde in tempo (tempo necessario per la decompressione). Non è quindi sempre desiderabile comprimere dati. Esempio: alcuni videogiochi per console di vecchia generazione non avevano informazioni compresse per non pesare sulla velocità di calcolo. Esempio applicando un approccio Lossy Metodo di compressione immagini JPEG. Premessa sulla rappresentazione delle immagini in formato digitale: un'immagine non compressa (in genere in formato bitmap) presenta l'informazione 'completa' del colore per ogni pixel assegnando un certo numero di bit per ogni canale di colore (RGBa). Il numero di colori rappresentabili dipende quindi dal numero di bit assegnati per ogni canale. I passi per la compressione in formato JPEG: Suddivisione dell'immagine in blocchi 8x8px Cambio in dominio delle frequenze con Discrete Cosine Transform (DCT) Quantizzazione pesata - componente Lossy Rimozione delle ridondanze Codifica RLE (Run-Length Encoding) ‹ - compressione Lossless Codifica Huffman ‹ - compressione Lossless Ricapitolando! L'informazione è di vario tipo, un modo per rappresentare l'informazione è la codifica. La codifica binaria è una delle possibili codifiche e funziona molto bene per la tecnologia a noi disponibile. Esistono differenti operazioni che si possono effettuare con l'informazione codificata. INTRODUZIONE AGLI ALGORITMI Come si elabora l'informazione? Ovvero: quali metodi e tecniche si usano per eseguire operazioni sulle informazioni codificate? Un vantaggio fondamentale dell'informazione codificata è la possibilità di eseguire operazioni su di essa in maniera automatica. La procedura di automatizzazione dell'elaborazione dell'informazione avviene tramite l'uso di procedure chiamate algoritmi. Non ci sono definizioni che si applicano con sufficiente precisione e generalità al termine algoritmo. Si può capire meglio il concetto di algoritmo tramite alcune caratteristiche fondamentali che gli appartengono. L'algoritmo è quindi una
lista di istruzioni da seguire per risolvere un problema. Un esempio di algoritmo:determinare il maggiore tra due numeri x e y
Introduciamo due 'misure' per capire quali sono i limiti degli algoritmi Calcolabilità : Ci chiediamo se, dato un problema, è possibile creare un algoritmo che sia sempre in grado di dare 'risposta' Complessità : Ci chiediamo qual'è il 'costo' della 'risposta' Limiti della calcolabilità Facciamo un esempio di calcolabilità: immaginiamo di giocare a un nuovo gioco da tavolo con i nostri amici. I pezzi di questo gioco sono tessere del domino un po' particolari. Le tessere hanno delle sequenze di lettere invece di numeri sui due lati, visto che è la prima volta che giochiamo, per semplicità usiamo solo tessere che hanno sequenze A e B. A ogni round si usano 4 tessere pescate a caso. Possibili tessere del nostro dominio. Il gioco ci chiede se possiamo, con le tessere date, costruire una serie (anche usando la stessa tessera più volte) in maniera tale da avere la stessa sequenza sopra e sotto.
Poiché siamo ora fiduciosi dei poteri straordinari degli algoritmi decidiamo di ragionare in maniera algoritmica per vincere a questo gioco. Idea di algoritmo (pseudocodice)
BLU= più complesso GIALLO= meno complesso L'importanza di conoscere la complessità di un problema ci aiuta a capire quali sono le aspettative che possiamo avere per le performance di un algoritmo. Per dire se un problema appartiene a una determinata classe basta esibire un algoritmo che abbia l'efficienza relativa ai limiti della classe in questione. Esempio: vogliamo dimostrare che il problema x appartiene alla classe P, esibiamo allora un algoritmo con un'efficienza che non sarebbe possibile avere se il problema fosse anche solo in NP (la classe superiore). Ovviamente questo metodo può solo dirci che un problema è 'almeno' in una certa classe, cioè potrebbe esistere un altro algoritmo con un efficienza relativa ai limiti di una classe inferiore e quindi spostare la complessità del problema più in basso nella gerarchia. Quindi: esibire un algoritmo per un problema ci dice solo che un problema non è più complesso di una certa classe (potrebbe essere però ancora meno complesso). Ma a noi interessa sapere qual'è la categoria minima alla quale appartiene un problema cioè sapere quando possiamo smettere di cercare un algoritmo più efficiente. Per fare questo ci serve uno strumento chiamato 'riduzione funzionale' o informalmente 'riduzione'. Esempio: 2 giocatori, a ogni turno un giocatore sceglie e 'occupa' uno dei numeri non ancora occupati. Vince chi occupa almeno tre numeri la cui somma fa 15. La strategia di gioco implica cercare di fare 15 con tre numeri mentre si cerca di bloccare l’avversario dal raggiungere lo stesso obiettivo. Immaginiamo di giocare allo stesso gioco riordinando i numeri. Ci accorgiamo di una particolarità.
15 15 15 15 15 15 15 Vediamo come quindi in questo caso è stato possibile prendere gli elementi di un gioco, modificarli leggermente (la posizione delle tessere) e giocare con nuove regole. Vediamo anche che le stesse mosse per vincere al secondo gioco portano a vincere (o a perdere) anche nel primo gioco (e viceversa), pur avendo regole diverse. La stessa idea è applicata anche nel caso della riduzione. La riduzione è un procedimento che traduce un problema X in un problema Y e tale per cui tutti e solo gli input per i quali in X si ha una soluzione siano tutti e solo gli input per i quali nel problema Y si ha soluzione. Riassumendo:
Tutti gli input che sono soluzione del problema X Tutti gli input che NON sono soluzione del problema X Problema X R I D U Z I O N E Tutti gli input che sono soluzione del problema Y Tutti gli input che NON sono soluzione del proeblma Y Problema Y
Perl Linguaggi di programmazione simulazione Linguaggio di Descrizione Hardware (HDL) Il codice è tradotto in un linguaggio macchina che simula una serie di componenti elettroniche e il loro assemblamento. II circuito elettronico simulato, dopo essere stato verificato, viene poi stampato con appositi macchinari in un "circuito integrato" Pros: I sistemi embedded sono in genere più veloci e sicuramente più economici Cons: Ogni sistema embedded può eseguire solo la/le funzione/i per il quale è stato progettato, non è possibile 'riprogrammarlo' Esempi di HDL VHDL, System C, .. ARCHITETTURA DEL CALCOLATORE Modello Von Neumann Architettura generica di un calcolatore di massa Unità di INPUT Unità centrale di elaborazione Memoria centrale Memoria di massa Unità di OUTPUT
Altre USB periferiche: tastiera, mouse Memoria di massa Monitor Tastiera Mouse Altre periferiche USB Altre periferiche PCI B U S P E R I F E R I C O Hub di controllo della memoria CPU Memory bus RAM Monitor Memoria di massa
Memoria di massa (o memoria secondaria): Memoria per l'informazione destinata all'archiviazione. Quando l'informazione archiviata necessita di essere utilizzata viene passata in memoria RAM. Eccezionalmente può estendere "virtualmente la memoria RAM. Memoria permanente, cioè conserva l'informazione anche a calcolatore spento. RAM (Random Access Memory): Memoria per l'informazione relativa a ciò che è in esecuzione (programmi). Memoria volatile, l'informazione viene persa quando il calcolatore è spento. CPU Cache: Memoria per l'informazione relative alle istruzioni in corso di esecuzione dalla CPU o imminenti. Memoria volatile, l'informazione viene persa quando il calcolatore è spento. SISTEMI OPERATIVI Il sistema operativo (OS) è un programma con funzionalità di interfacciamento con l'HW del calcolatore e con l'utente, di gestione delle risorse HW (memoria, CPU, periferiche, etc.) Esempi di sistemi operativi:
Gestione della rete: fornisce l'interfaccia con i dispositivi di connessione alla rete ai programmi che la richiedono Multitasking Obiettivo: gestire più task allo stesso momento (o dare l'impressione di farlo) per garantire l'interattività. In realtà i sistemi operativi sono per lo più sistemi time- sharing. Ad ogni programma viene assegnato un certo tempo per progredire con la sua esecuzione tramite la CPU. Quale programma va in esecuzione e per quanto tempo viene deciso tramite un algoritmo di scheduling. II costo di questa 'interattività' si paga in performance, infatti, il continuo cambio di 'task' comporta delle operazioni di Swap e Context Switch. INTRODUZIONE ALLA HCI Ciclo di interazione utente-macchina