Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Informatica di base., Appunti di Fondamenti di informatica

Appunti di Informatica di base della Prof.ssa Caputo, anno scolastico 2021-2022.

Tipologia: Appunti

2021/2022

Caricato il 20/02/2023

michellee.ee
michellee.ee 🇮🇹

4.3

(35)

19 documenti

1 / 22

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
INFORMATICA DI BASE
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.
- Claude Shannon (1916-2001)
L'idea di informazione nasce con la creazione della scrittura, metodo più robusto con
cui gli esseri umani hanno iniziato a trasmettere o trascrivere informazioni. Esistono
tre categorie di informazione:
1. Informazione sintattica, scelta di simboli e del loro abbinamento a prescindere
dal loro significato
2. Informazione semantica, significato che l'abbinamento di lettere acquisisce in
una determinata lingua
3. Informazione pragmatica, l'informazione caia in base al contesto
CODIFICA BINARIA
La codifica binaria è un codice con solo due simboli, 0 e 1 per convenzione. II bit è
l'unità minima per la sua rappresentazione. La scelta di tale codifica è stata aiutata
dallo stato dello sviluppo tecnologico dell'epoca (elettricità, fine 1600) e dalla
robustezza di un sistema rappresentato da soli 2 stati. Esempio partendo dal
numero:
-104
Come procedere:
Dividere per 2 la parte intera, tenere il resto, dividere per 2 la parte intera, tenere il
resto, ... finché non si ottiene il valore 0 come risultato della divisione.
104 | 0
52 |10
26 | 0
13 |1
6 |0
3 |1
1 |1
0 |0
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16

Anteprima parziale del testo

Scarica Informatica di base. e più Appunti in PDF di Fondamenti di informatica solo su Docsity!

INFORMATICA DI BASE

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.

  • Claude Shannon (1916-2001) L'idea di informazione nasce con la creazione della scrittura, metodo più robusto con cui gli esseri umani hanno iniziato a trasmettere o trascrivere informazioni. Esistono tre categorie di informazione:
  1. Informazione sintattica, scelta di simboli e del loro abbinamento a prescindere dal loro significato
  2. Informazione semantica, significato che l'abbinamento di lettere acquisisce in una determinata lingua
  3. Informazione pragmatica, l'informazione caia in base al contesto CODIFICA BINARIA La codifica binaria è un codice con solo due simboli, 0 e 1 per convenzione. II bit è l'unità minima per la sua rappresentazione. La scelta di tale codifica è stata aiutata dallo stato dello sviluppo tecnologico dell'epoca (elettricità, fine 1600) e dalla robustezza di un sistema rappresentato da soli 2 stati. Esempio partendo dal numero:
  • 104 Come procedere: Dividere per 2 la parte intera, tenere il resto, dividere per 2 la parte intera, tenere il resto, ... finché non si ottiene il valore 0 come risultato della divisione. 104 | 0 52 | 26 | 0 13 | 6 | 3 | 1 | 0 |

Esempio partendo dal codice binario:

  • 1101000 Come procedere: Moltiplicare ogni cifra binaria a sinistra della virgola per 2 n, dove n rappresenta la posizione della cifra (1=0 per la prima cifra a sinistra della virgola, 1 per la seconda, …) (1x 26 ) + (1× 25 ) + (0x 24 ) + (1× 23 ) + (0x 22 ) + (0× 21 ) + (0x 20 ) = 64+32+0+8+0+0+0= 104 CODIFICA ESADECIMALE I numeri da 1 a 9 rimangono invariati; dal 10 in poi si usano le lettere: 1010 = A 16 1110 =B 16 1210 =C 16 1310 =D 16 1410 =E 16 1510 =F 16 Esempio: 1B03F (1×16^4 )+(11×16^3 )+(0x16^2 )+(3×16^1 )+(15×16°)= LA SOMMA DEI NUMERI BINARI Procedere con le seguenti regole:  0 + 0=  0 + 1 = 1  1 + 0 = 1  1 + 1 = 0 con riporto di 1 101+11= Proviamo ora a mettere insieme anche la conversione: 12+13 (convertiamo in codifica binaria, eseguiamo l'operazione e riconvertiamo in base dieci).
  1. Facciamo la codifica binaria dei numeri decimali 12 | 0 13 | 1 6 |0 6 |

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-

 UTF-

 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

  1. Leggere il numero nella variabile x
  2. Leggere il numero nella variabile y
  3. Calcolare x-y e assegnarlo a una variabile z
  4. Valutare se il risultato z è maggiore di 0. Se 'sì', passare al passo 5. Se 'no', passare al passo 6.
  5. Rispondere comunicando che x è maggiore di y e andare al passo 7
  6. Rispondere comunicando che y è maggiore di x
  7. Terminare la procedura La rappresentazione degli algoritmi tramite diagrammi di flusso è un modo più intuitivo e informativo di visualizzare un algoritmo. Si tratta di un diagramma a blocchi dove ogni blocco, in base alla forma, identifica una particolare tipo di passo. I blocchi dei diagrammi di flusso Il blocco di selezione nei diagrammi di flusso può corrispondere ai seguenti tipi di istruzione:
  • Istruzioni condizionali , permettono di controllare il flusso di un algoritmo, si basano sulla valutazione di una 'condizione'. La valutazione della condizione deve risultare in un valore di tipo 'logic' (vero o falso). Per avere una condizione di questo tipo si formulano delle 'espressioni logiche'. Per formulare tali espressioni vediamo due tipi di operatori (i più comuni):  Operatori relazionali, sono operatori binari (utilizzano due operandi). I due operandi devono essere di tipo comparabile (e.g. due numeri) Operatore Descrizione == Verifica l'uguaglianza != (≠, /=) verifica la diversità < verifica se l'operando di sinistra è minore dell’operando di destra

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.

  1. BBAABBBAA
  2. BBAABBBAA Possiamo vedere come alcuni set di tessere non abbiano soluzione. immaginiamo che le tessere di un round siano le seguenti AB AA BBA BB A BBA BBA BB AB AA BBA BB A BBA

Poiché siamo ora fiduciosi dei poteri straordinari degli algoritmi decidiamo di ragionare in maniera algoritmica per vincere a questo gioco. Idea di algoritmo (pseudocodice)

  1. Assegna a una variabile soluzione il valore 'FALSE'
  2. Assegna a una variabile c il valore 1
  3. WHILE (soluzione == FALSE) DO: prova tutte le combinazioni di tessere lunghe c IF (riga sopra == riga sotto) DO: assegna a soluzione il valore TRUE, rispondi con la sequenza di tessere Vincente ELSE: assegna a c il valore di c+
  4. Termina la procedura Notiamo però che qualcosa manca nel nostro algoritmo, cioè una condizione che ci possa dire quando la soluzione non esiste per un certo set di tessere. Per l'esempio visto del set senza soluzione possiamo ipotizzare di aggiungere dei passi al nostro algoritmo che vadano a verificare che il numero di lettere nella parte superiore di ogni tessera non sia sempre superiore al numero di lettere nella parte inferiore (e viceversa). Ci sono però altri set di tessere possibili che non hanno il problema del set senza soluzione visto nell'esempio, ma per i quali non vi è una condizione verificabile a priori. Cioè non vi è una proprietà identificabile 'banalmente' dalle proprietà delle singole tessere per la quale è possibile dire che non esiste soluzione. A questo punto potrebbe sembrare logico esigere l'esibizione di un esempio di set di tessere per le quali non c'è né soluzione, né la possibilità di verificarlo. Ma questo è esattamente il problema della decidibilità, cioè per affermare qualcosa sull'esistenza o meno di una soluzione per un set di tessere bisogna avere un modo per verificarlo. Quindi, non si può avere un esempio di tessere per il quale abbiamo sia verificato che non ammette soluzione e che al tempo stessa sia un set la cui assenza di soluzione sia NON verificabile. Esistono però delle dimostrazioni in grado di provare almeno l'esistenza di tali set di tessere. La computabilità Tesi di Church-Turing: ABA A ABA A BBA BB BBA BA

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:

  • Windows
  • IOS
  • Linux
  • Android Ogni calcolatore moderno (PC, smartphone, etc.) necessita di un sistema operativo (o firmware). Un firmware è un software che adempie a funzioni simili a quelli di un OS con meno 'flessibilità', si usa per dispositivi informatici con architetture particolari ed è integrato in una memoria dedicata (in genere una memoria flash sulla scheda madre). Cosa deve fare un sistema operativo:
  1. Controllo dell'esecuzione dei programmi (caricamento in memoria, interfacciamento con le periferiche, interfacciamento con la rete)
  2. Controllo dispositivi I/O (gestione dei segnali I/O)
  3. Archiviazione dati e programmi (gestire i dispositivi di memoria di archiviazione)
  4. Controllo dell'accesso (gestione utenti)
  5. Contabilizzazione (monitoraggio delle risorse HW)
  6. Gestione malfunzionamenti (risolvere problemi legati all'esecuzione dei programmi, notificare quando possibile malfunzionamenti dell'HW) Come i sistemi operativi svolgono tali funzioni:  Gestione della CPU: decide quali istruzioni di quali programmi la CPU deve eseguire  Gestione della memoria: gestione della Cache/RAM, gestione della memoria di massa tramite un File System  (User Interface) e profili utente: interfaccia grafica, gestione delle credenziali d'accesso, protezione dei dati personali

 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