INFOB
INFORMATICA
Scienza dell’informazione. Capire i dati, quali sono importanti e cosa farci.
÷
L’informazione può essere concreta o astratta.
Cosa fare con informazione?
1) Rappresentarla - sotto forma di immagine, suono, parola, ecc.
2) Elaborarla - trovare modo per cui l’informazione diventi di valore per noi, tramite delle
operazioni capire se l’informazione ha valore per noi (tipo diagnosi da radiografia). ALGORITMI
ALGORITMO:
Qualcosa che trasforma ed elabora le informazioni.
Un algoritmo è eseguibile anche da un umano, ma usiamo il calcolatore perché è in grado di
considerare tanti dati insieme e quindi svolgere velocemente l’algoritmo.
DEFINIZIONE
Un algoritmo è una sequenza di operazioni, definite con precisione (non possono essere vaghe),
-
| -
che portano alla realizzazione di un compito preciso. (es. algoritmo per fare la pasta, non puoi dire
solo “fai la pasta”, devi dare tutte le istruzioni precise in sequenza).
-
Le operazioni devono essere:
- COMPRENSIBILI —> No ambiguità
← -
- ESEGUIBILI da strumento automatico (esecutore)
- ←
- Portare a realizzazione del compito in un TEMPO DEFINITO (numero finito di passi, ognuno con
tempo definito)
Inizialmente useremo un linguaggio naturale, in italiano, ma comunque sarà caratterizzato da:
- SEQUENZIALITÀ delle istruzioni (istruzioni scritte eseguite dall’alto in basso) [ordine temporale]
=
- COSTRUTTO CONDIZIONALE (istruzioni eseguite a volte alcune, a volte altre) [se...allora...sennò]
- COSTRUTTO ITERATIVO (ripetizione di più volte della stessa operazione) [fai...finché]
Useremo “foglietti”, dove scriveremo i nostri valori.
Sempre, quando risolveremo un problema, passeremo dal linguaggio naturale, per capire e
strutturare il problema, poi scriveremo in codice. )
RAPPRESENTAZIONE A BLOCCHI Èe
Ogni blocco è un istruzione, blocchi
eseguiti dall’alto in basso, quindi devono +
avere coerenza e ordine temporale COSTRUITO
! ↳
F è
iter
cono f-
.
← t
t |
L puoi essere ESEGUE €
ANCHE solo KCICLO
↳ DEL
RAMO '
FINCHE
venatoria " Diventa
-
CONTINUA falso
Oltre
& sto
Esempio del pallottoliere: non posso dire sposto tutte le palline, devo dare precise istruzioni
ATOMICHE, ovvero sposto una pallina alla volta, fino a quelle che mi servono (in caso vedi slide).
In un algoritmo devo controllare:
CORRETTEZZA: arriva alla soluzione del problema per cui è progettato
EFFICIENZA: deve usare un numero minimale o ragionevole di risorse, ovvero il minor numero
=
possibile di operazioni e utilizzare il minor spazio possibile del calcolatore, risparmiare spazio e
tempo.
ALGORITMI TIPO:
- Per SCAMBIARE il contenuto di due foglietti devo servirmi di un terzo foglietto.
- Per trovare il numero MASSIMO (o minimo), prendo il primo a prescindere e lo scambio con
eventuali altri più grandi, confrontando il numero che ho con tutti quelli che restano (importante: al
primo istante prendo il primo valore).
- Per verificare se una condizione è VERA PER TUTTI gli elementi di una entità (insieme): appena
ne trovo uno falsa mi interrompo e ho verificato che non è vera per tutti.
- Per CERCARE un elemento: utilizzando un archivio ordinato per autore, cerco libro in biblioteca.
Ricerca scheda del libro, segnare su un foglio numero scaffare e posizione libro, raggiungere scafale.
Esamino una scheda e vedo se è quella che contiene il libro giusto, se non è quella vado avanti e
rifaccio. Ma non è efficiente, le schede sono ordinate, quindi utilizzo N/2 (dove N è il numero delle
schede), e verifico se è quella, sennò confronto la lettera iniziale di N/2 con la mia, e vedo se
prendere in considerazione la prima o la seconda metà dell’archivio, e di quella metà fare idem.
È un problema ripetuto su delle istanze più piccole e semplici. È un algoritmo RICORSIVO, ripete le
stesse operazioni ma su problemi sempre più semplici. Quando (se) N=0 mi fermo, posso non aver
trovato il libro che quindi non c’è.
Ma noi vogliamo usare il calcolatore, quindi da algoritmo dobbiamo passare al codice.
calcolatore
Il è:
Rapido:
- grandi quantità di informazioni
Preciso:
- non commette mai errori
Non spirito critico
- ha
PROGRAMMI: comprensibili da un calcolatore.
algoritmi codificati in linguaggi
Lingua molto formale, errori di ortografia/sintassi/grammatica possono compromettere il tutto.
Compito dell’informatico (strettamente in questo ordine):
Ideare
- l’algoritmo: conoscere soluzione del problema con determinati passi (parte più difficile)
Codificare
- l’algoritmo in un programma: tramite il linguaggio di programmazione (traduzione)
Passaggi:
Capire
- e definire correttamente il problema.
- Ricavare l’algoritmo: difficile, richiede creatività e rigore.
codice:
- Scrivere il è la parte più semplice ma deve essere corretto ed efficiente. Questi linguaggi
via di mezzo umano calcolatore.
sono una tra linguaggio e linguaggio del
Compilazione:
- traduzione da linguaggio di programmazione a linguaggio macchina, eseguibile
dal calcolatore (fa lui questa operazione).
RAPPRESENTAZIONE DELL’INFORMAZIONE
0 1, stati di tensione,
I calcolatore capiscono solo e ovvero bassa (0V) e alta (5V).
Non ci sono valori intermedi, es (2.5V) perché potrebbe stararsi nel tempo.
BIT; 1 BYTE 2^8 (256) numeri diversi).
Ogni 0 o 1 è un 8 bit = (può rappresentare
base 10,
Noi usiamo solitamente la decimale.
posizionale:
La nostra notazione è la posizione della cifra dà più o meno valore, significati diversi.
Abbiamo a disposizione 10 cifre, da 0 a 9. I numeri sono sequenze ordinate di cifre da 0 a 9.
m cifre 10^m numeri differenti.
Con in base 10 in un numero posso scrivere
base 2 con m cifre, 2^m NUMERI DIVERSI.
Se abbiamo posso fare
Conversione: " 21
23
10010 22 2° 8
1
1 2 1-
+
0
+ 0 0
+ +
-
= . =
. .
1 Byte = 8 bit = 2^3 bit
1 KiloByte (kB) = 10^3 Byte (in realtà 1024 Byte, ovvero 2^10 Byte, 2^13 bit)
1 MegaByte = 10^6 Byte (1024 KiloByte, ovvero 2^20 Byte, 2^23 bit)
1 GigaByte = 2^33 bit
1 TeraByte = 2^43 bit
LETTERE: ASCII a 8 bit.
codifica Ogni carattere alfanumerico specifico codice binario di 8 bit.
l’ASCII base non ha ad esempio i caratteri accentati, ha solo i caratteri base (byte che iniziano con lo
0), per gli altri caratteri si usano quelli che iniziano con 1 e ogni paese sceglie cosa farci, in base ai
caratteri di cui necessitano.
IMMAGINI: ogni pixel un numero.
è associato a
- ALTO —> BIANCO ; basso —> scuro (es. nero = 00000000).
Ogni pixel: 1 Byte.
(WB) 8 bit = Immagini pesanti perché ogni pixel pesa 1 Byte.
Tre canali
(COLORI) (RGB, rosso - verde - blu): ogni canale 1 Byte (livello di saturazione del canale),
Ogni pixel 3 Byte.
pesa Più è alto il numero, più è saturato il colore.
256^3 colori diversi, ovvero 2^24.
Quindi in RGB ci sono ovvero (2^8)^3,
pixel per pixel
Non per forza la codifica è scritta (bitmap).
codifiche riducono le dimensioni,
Spesso conviene che in due modi:
lossless: senza perdere informazioni.
- codifiche permettono di comprimere l’immagine
lossy: perdita di qualità.
- codifiche comprimono l’immagine ma con
Ad esempio si possono esprimere funzioni per cui una certa zona è tutta di un certo colore (tipo jpg).
-
SISTEMI INFORMATICI
Esecutore di un programma (pc, smartphone, sensori, server, ecc)
Sono costituiti da elementi complessi che comunicano tra loro, divisi in:
Hardware:
- componenti fisici del sistema.
Software:
- componenti non tangibili che vanno a utilizzare l’hardware (programmi).
MACCHINA (O ARCHITETTURA) DI VON NEUMANN
quattro elementi
Modello composto da funzionali:
Unità di elaborazione (CPU):
- interpreta/esegue programmi, coordina la macchina, fa operazioni.
Memoria centrale (MM, Main Memory):
- contiene dati e istruzioni (RAM), dati salvati
volatile,
temporaneamente. È una memoria informazioni restano solo su necessità.
Interfacce delle periferiche:
- scambio di informazioni con mondo esterno (stampante, HDD, ...)
Bus di sistema:
- collegamenti tra gli altri elementi funzionali.
MEMORIA CENTRALE
Contiene i programmi, sequenze di istruzioni, relativi dati.
sotto forma di in esecuzione e i
sequenza di celle:
Schema:
Ogni cella
- di memoria h bit detti “parola”, “word”. +
numero massimo di bit
h è il per ogni informazione.
cella indirizzo: 2^k spazi.
- Ogni ha un servono altri
(k=numero di celle, di bit) per indicare gli indirizzi
Se abbiamo 1024 celle abbiamo bisogno 1024 indirizzi diversi.
dati istruzioni.
Nella cella: ed
diversi tipi
Ci sono di memoria:
RAM volatile.
(random acces memory), è
ROM permanente,
(read only memory, c’è solo in certi casi) non è volatile, è non si può cambiare.
EPROM intermedia, riprogrammabili.
è rimangono le informazioni ma sono
CPU
Sottoparti:
CU (unità di controllo): preleva/decodifica le istruzioni da MM e invia segnali per eseguire istruzioni.
Clock di sistema: sincronizza operazioni della CPU, determina l’ordine e il “quando”.
ALU (unità aritmetico logica): esegue le operazioni logiche e aritmetiche.
REGISTRI: memorie molto molto veloci che registrano informazioni utili alle operazioni:
dati
- Registro (DR), lungo h bit (come word) memorizza il dato che arriva da MM.
indirizzi
- Registro (AR) lungo k bit, memorizza indirizzo che arriva da MM.
Istruzione Corrente
- Registro (CIR): lungo h bit, registra l’istruzione in esecuzione.
Contatore di Programma
- Registro (PC): dice dove siamo arrivati nel programma.
Interruzioni
- Registro (INTR): indica stato delle periferiche, per rilevare i segnali.
Registri intermedi: per capire cosa succede nella ALU
di stato:
- Registri verifica se operazione è andata a buon fine o meno.
operando:
- Registro dove vengono inseriti i dati per eseguire certa operazione (es. somma).
di lavoro:
- Registri contiene altre informazioni utilizzate di frequente.
BUS DI SISTEMA:
connessioni tra due entità funzionali.
Insieme di che trasferiscono informazioni
OGNI informazione passa attraverso bus di sistema.
Ci sono solo due tipi di connessione:
CPU (leader) <-> MM (follower)
- CPU (leader) <-> Interfaccia periferica (follower)
- leader l’unica che può dare istruzioni
CPU è perché tutto passa da lei ed è
Non esiste connessione diretta tra MM e periferica.
Tre tipi di linee per scambiare tre tipi di informazioni differenti:
Bus dati
- Bus indirizzi
- Bus controlli
- (si occupa di controllare gli stati delle operazioni, se andate a buon fine).
LETTURA E SCRITTURA SU MEMORIA
Lettura:
Passo indirizzo bus indirizzi.
1) da cui voglio leggere tramite
CPU dice alla MM di leggere bus controlli.
2) La l’informazione in quell’indirizzo con
MM passa l’informazione bus dati.
3) riceve l’istruzione e sul
MM controlli).
4) dice che ha inviato l’informazione (bus
Scrittura: dove indirizzo.
1) Passo il vogliamo scriverla, quindi inviamo l’informazione
dato dati).
2) Passo il che voglio scrivere (bus
scrivere bus controlli.
3) Dico di con
MM scrive bus controlli.
4) e dà l’ok su
INTERFACCE:
Collegano calcolatore periferiche estrarne.
il alle
registri per scambio dati
Ogni interfaccia ha con periferica:
Registro dati
- della periferica (PDR): per scambio dati con periferica. I
Registro comandi
- della periferica (PCR): contiene comandi dati dalla periferica.
Registro di stato
- (PCS): contiene informazioni sullo stato della periferica. VEDI
- SCHEMI
VARI
SLIDE
SULLE .
PROGRAMMI NELLA MACCHINA DI VON NEUMANN /
Istruzioni: binario parole nella MM.
codificate in e sono salvate in
Divise in:
codice operativo (4 bit): tipo
- indica il di istruzione, cosa fare
due zeri (00)
- Indirizzo operando (10 bit): dove
- indica il eseguire l’operazione.
Codici operativi (istruzioni eseguibili da CPU):
lettura
- da periferica;
scrittura
- su periferica;
load: caricare dato
- da MM a Registro CPU;
store: salvare dato
- su MM da Registro CPU;
operazioni aritmetiche;
- istruzioni di salto:
- per cambiare flusso di esecuzione del programma.
TRE FASI PER ESEGUIRE OPERAZIONE
Fetch:
1) Acquisizione dell’istruzione dalla MM;
Trasferimento da PC a AR
a. dell’indirizzo della cella contenente l’istruzione da eseguire.
Lettura istruzione dalla MM
b. nella cella all’indirizzo in AR.
Spostamento istruzione da DR a CIR
c. poiché è l’istruzione in esecuzione.
Incremento PC.
d.
Decodifica: dal CIR codice operativo.
2. legge il
Esecuzione: specifica.
3. dipende dall’istruzione
Ricorda: due istruzioni carica possono avere codici diversi a seconda del luogo di riferimento.
Es.
- 0000 —> carica nel registro A
- 0001 —> carica nel registro Bn
LINGUAGGI DI PROGRAMMAZIONE
calcolatore istruzioni.
permettono ad un di eseguire le
BASSO livello: linguaggio macchina.
- a vicino al
ALTO livello: lingua comune
- ad vicino alla parlata.
~ Linguaggio macchina: poche difficile
istruzioni, codificare algoritmi e interpretare codice
È un linguaggio:
Preciso.
- controllo completo
- Dotato di di tutte le risorse.
~ Alto livello:
preciso, sintetico
- Rimane ma più (tipo: fai la somma, senza registri ecc.).
simbolici
- Riferimenti (non dico ogni volta dove certo dato, ma solo come si chiama, es. ‘a’).
linguaggio naturale,
- Istruzioni vicine a più comprensibile.
Traduzione: compilatore: alto livello macchina.
eseguita da programma detto linguaggio —>
LINGUAGGIO C (1972)
sistemi operativi,
Pensato per scrivere poi adottato anche
programmi “generici”.
per
interfaccia più semplice della
Si all’hardware in un modo ancora
macchina di Von Neumann solo due periferiche,
(sempre e t
un solo input e un solo output)
VARIABILI cella di
Utilizziamo (equivalenti dei fogliettini visti in precedenza): corrispondono a una
memoria nella macchina C.
nome:
Ogni variabile —> (lettere, cifre, _ : carattere iniziale esclusivamente lettera; no spazi).
CASE SENSITIVE, maiuscole/minuscole.
- Linguaggio è “sensibile” alle
cambiare nome/valore.
- “Variabili” perché gli si può
Posso utilizzare il nome dato alla cella per eseguire le operazioni su di essa.
definire il tipo di dato
Bisogna che una cella può contenere (lettere, numeri interi/decimali, ecc.):
Così posso conoscere:
Operazioni eseguibili
- sono per quella cella.
Dimensione
- di quella cella (se è presente un solo carattere, la cella dovrà contenere solo 8 bit)
FORTEMENTE TIPIZZATO, sempre specificare il tipo
Il C è poiché devo di una variabile.
Tipi semplici:
char:
- caratteri della tabella ASCII,corrisponde a una lettera o un numero compreso tra 0 e 255.
int:
- numeri interi il cui massimo e minimo dipendono dalle dimensioni della parola della macchina.
float:
- numeri decimali a singola precisione (quanti numeri posso esprimere).
double:
- numeri decimali a doppia precisione rispetto a float.
DICHIARARE VARIABILE: parte di memoria
riservare una per la cella. Bisogna definire:
Tipo
1) variabile
Nome
2) variabile
Inizializzare: valore
dare a variabile, altrimenti randomico.
ISTRUZIONI: frasi eseguibili del linguaggio; ogni istruzione termina con simbolo “;”.
Assegnamento valore a variabile: simbolo “=” seguito da valore accettabile o espressione.
sbianco,
Ogni volta che assegno un valore a una variabile, la cancello quello che c’era prima.
Assegnamento fa due cose in ordine:
Valuta espressione
1. e legge eventuali variabili richieste.
Memorizza
2. il risultato nella cella in questione.
assegnamento, confronto logico).
(“=”: “==”:
ATTENZIONE: divisione tra int dà un int, per un float deve esserci almeno un float nell’espressione.
resto
“%” (modulo): per ottenere il valore del della divisione intera.
input e output,
Istruzioni in ingresso e in uscita, visibili nel TERMINALE:
printf
Scrivere a schermo:
scanf
Leggere dei dati:
Es.
printf (stringaControllo);
1. //stringaControllo è sequenza di caratteri racchiusa da doppi apici “...”.
scanf (“%d”, &a);
2. //& è l’indirizzo della variabile a, non la variabile a.
linguaggio sequenziale: dall’alto al basso.
C è
Commenti: spiegare
servono a ciò che si fa, il programma non li legge, li ignora. Due modi:
- /* ... */ su più righe
- // su una riga
#include serve a includere le librerie, ovvero dei codici pre stabiliti per utilizzare le varie funzioni
void main () non restituisce valori alla fine
int main () restituisce un valore di controllo, return 0 è il termine del programma
prima parte è DICHIARATIVA,
La dichiaro tutte le variabili che mi servono poi nel programma.
%d —> int
%f —> float
%c —> char
%s —> stringa (sequenza di cara
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.