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


Corso completo di Elementi di Informatica, Appunti di Elementi di Informatica

Corso completo di informatica: informazione, codifica binaria , numeri relativi , numeri reali, rappresentazione di testo e immagine , logica booleana , modello esecutore , introduzione programmazione , dichiarazione di istruzioni elementari, strutture di controllo, introduzione sottoprogrammi , tipi di dati strutturati , sottoprogrammi-passaggio dei parametri

Tipologia: Appunti

2022/2023

In vendita dal 31/01/2023

pina-nuzzo
pina-nuzzo 🇮🇹

5

(1)

15 documenti

1 / 39

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Informatica: scienza della risoluzione dei problemi con l'aiuto degli elaboratori automatici
Informazione: prodotto dell'informare, deriva da informatio ovvero dare forma, un senso a un concetto astratto
Comunicare per aumentare l'informazione e diminuire l'incertezza attraverso un linguaggio comune, concetti per essere capiti (comprensione)
tramite determinate regole
Rappresentazione informazione
Tramite suoni quindi volatile
Scrittura si conservano
Rappresentazione analogica e discreta
O digitale
Rischematizzazione nel tempo e nei valori (quantizzazione)
Frequenza di campionamento inverso del periodo
Rappresentazione grandezze fisiche
Le proprietà del fenomeno rappresentato sono
omomorfe alla forma di rappresentazione (vinili,
elettrocardiogramma)
Senza approssimazione
Informazione e regole di interpretazione
Messaggio modo per veicolare l'informazione
Diminuire incertezza nel destinatario , deve sapere qualcosa in più
Deve variare( non sempre lo stesso simbolo) e seguire regole
Codifica: insieme di regole
concordate tra mittente e
destinatario dell'informazione
per trasformarla in una sua
rappresentazione
decodifica
Codici: sistema di simboli per dare una rappresentazione all'informazione costituiti da:
Simboli elementi atomici della rappresentazione
Alfabeto insieme di tutti i possibili simboli, cardinalità: il numero di elementi dell'alfabeto ( minimo 2 alfabeto binario, Morse)
Parole codice o stringhe sequenze possibili di simboli, lunghezza: numero di simboli dell'alfabeto da cui ciascuna parola codice risulta
composta
Linguaggio che definisce le regole per costruire le parole codice che abbiano significato per l'utilizzatore del codice
Parole codice
Costituite da kvalori diversi di una data informazione e da un alfabeto di nsimboli distinti.
Numero k di parole codici differenti è uguale a disposizione con ripetizione).
Corrispondenza biunivoca: la codifica deve mettere in corrispondenza biunivoca i valori dell'informazione con le parole codice.
La lunghezza quindi deve essere scelta in modo tale che:
ovvero
Cardinalità
alfabeto
Lunghezza
parole codice
Ridondanza
Nel caso di non tutte le configurazioni possibili ( parole codice) vengono utilizzate per la rappresentazione , costituisce uan proprietà utile in
alcuni contesti
Codifica a lunghezza fissa e variabile
Tutte le parole codice hanno sempre la
stessa lunghezza fissata da particolari
esigenze applicative
Non tutte le parole codice hanno la stessa lunghezza e questo introduce
vantaggi nella trasmissione e conservazione dell'informazione
Rappresentazione digitale binaria
Basata su un alfabeto costituito da due simboli distinti che assumono convenzionalmente la forma di "0" e "1" ( cardinalità=2). Questi simboli
rappresentano le unità minime di rappresentazione e memorizzazione digitale e vengono denominate bit da " binary digit"
Vantaggi della rappresentazione binaria
La rappresentazione digitale semplifica la memorizzazione e l'elaborazione delle informazioni e rende i sistemi digitali meno soggetti ai disturbi
elettrici rispetto ai sistemi analogici.
I supporti di memorizzazione delle informazioni vengono realizzati con componenti elementari semplici detti flip-flop, che operano in due soli
stati possibili.
Codice binario
Utilizza un alfabeto
con n=2.
Le informazioni numeriche vengono quindi rappresentate mediante stringhe di bit di lunghezza l che producono configurazioni ( parole codice)
CORSO COMPLETO DI INFORMATICA
martedì 13 settembre 2022
18:42
Nuova sezione 1 Pagina 1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27

Anteprima parziale del testo

Scarica Corso completo di Elementi di Informatica e più Appunti in PDF di Elementi di Informatica solo su Docsity!

Informatica: scienza della risoluzione dei problemi con l'aiuto degli elaboratori automatici Informazione : prodotto dell'informare, deriva da informatio ovvero dare forma, un senso a un concetto astratto Comunicare per aumentare l'informazione e diminuire l'incertezza attraverso un linguaggio comune, concetti per essere capiti (comprensione) tramite determinate regole Rappresentazione informazione Tramite suoni quindi volatile Scrittura si conservano Rappresentazione analogica e discreta O digitale Approssimazione analogica Rischematizzazione nel tempo e nei valori ( quantizzazione ) Frequenza di campionamento inverso del periodo Rappresentazione grandezze fisiche Le proprietà del fenomeno rappresentato sono omomorfe alla forma di rappresentazione (vinili, elettrocardiogramma) Senza approssimazione Informazione e regole di interpretazione Messaggio modo per veicolare l'informazione Diminuire incertezza nel destinatario , deve sapere qualcosa in più (^) Deve variare( non sempre lo stesso simbolo) e seguire regole Codifica : insieme di regole concordate tra mittente e destinatario dell'informazione per trasformarla in una sua rappresentazione decodifica Codici : sistema di simboli per dare una rappresentazione all'informazione costituiti da:

  • Simboli elementi atomici della rappresentazione
  • Alfabeto insieme di tutti i possibili simboli, cardinalità : il numero di elementi dell'alfabeto ( minimo 2 alfabeto binario, Morse) Parole codice o stringhe sequenze possibili di simboli, lunghezza : numero di simboli dell'alfabeto da cui ciascuna parola codice risulta composta
  • Linguaggio che definisce le regole per costruire le parole codice che abbiano significato per l'utilizzatore del codice Parole codice Costituite da k valori diversi di una data informazione e da un alfabeto di n simboli distinti. Numero k di parole codici differenti è uguale a disposizione con ripetizione). Corrispondenza biunivoca: la codifica deve mettere in corrispondenza biunivoca i valori dell'informazione con le parole codice. La lunghezza quindi deve essere scelta in modo tale che: ovvero Cardinalità alfabeto (^) Lunghezza parole codice Ridondanza Nel caso di non tutte le configurazioni possibili ( parole codice) vengono utilizzate per la rappresentazione , costituisce uan proprietà utile in alcuni contesti Codifica a lunghezza fissa e variabile Tutte le parole codice hanno sempre la stessa lunghezza fissata da particolari esigenze applicative Non tutte le parole codice hanno la stessa lunghezza e questo introduce vantaggi nella trasmissione e conservazione dell'informazione Rappresentazione digitale binaria Basata su un alfabeto costituito da due simboli distinti che assumono convenzionalmente la forma di "0" e "1" ( cardinalità=2). Questi simboli rappresentano le unità minime di rappresentazione e memorizzazione digitale e vengono denominate bit da " binary digit" Vantaggi della rappresentazione binaria La rappresentazione digitale semplifica la memorizzazione e l'elaborazione delle informazioni e rende i sistemi digitali meno soggetti ai disturbi elettrici rispetto ai sistemi analogici. I supporti di memorizzazione delle informazioni vengono realizzati con componenti elementari semplici detti flip-flop , che operano in due soli stati possibili. Codice binario Utilizza un alfabeto con n=. Le informazioni numeriche vengono quindi rappresentate mediante stringhe di bit di lunghezza l che producono configurazioni ( parole codice)

CORSO COMPLETO DI INFORMATICA

martedì 13 settembre 2022 18:

Le informazioni numeriche vengono quindi rappresentate mediante stringhe di bit di lunghezza l che producono configurazioni ( parole codice) diverse. Se si devono rappresentare k informazioni diverse occorrono bit per associare ad esse codici diversi, ovvero: Byte e Words Stringhe con l uguale a 8 sono dette byte Sequenze di bit più lunghe di un byte sono dette word ed l dipende dal sistema , ma è sempre un multiplo del byte: 16, 32, 64 o 128 bit ( i.e. 2,4, o 16 byte). Con otto bit ( un byte) si rappresentano solo (256) valori diversi Nel caso in cui un solo byte non fosse sufficiente per rappresentare i k valori dell'informazione, allora si individua il numero b di byte tale che La codifica quindi è a lunghezza fissa ed adotta parole codice con una lunghezza che ha valori multipli di 8 L'adozione di stringhe a lunghezza finita e definita implica che i numeri gestiti siano definiti all'interno di un prefissato intervallo di estremi ( min, max) determinati e la più piccola differenza tra due valori consecutivi è fissata Overflow Quando il risultato non appartiene all'insieme dei valori rappresentabili( maggiore del max e minore del min ). Un altro caso si verifica quando il risultato dell'operazione non è compreso nell'insieme dei valori rappresentabili, pur non essendo né troppo grande e né troppo piccolo. Approssimare quando il risultato non è rappresentabile Algebra con precisione finita La proprietà associativa ( a+(b-c) = ( a + b ) - c ) e la proprietà distributiva ( a x ( b-c) = a x b - a x c ) non sempre vengono rispettate poiché potrebbe generarsi un overflow in base all'ordine. L'algebra dei numeri a precisione finita ( es. gradi degli angoli e tempo) deve essere gestita applicando i criteri di period icità. Per la periodicità, i valori esterni all'intervallo di definizione vengono ricondotti ad esso prendendo il resto della divisi one dei valori per il periodo Sistema (di numerazione ) Binario Molto importante in informatica poiché consente di rappresentare numeri mediante la combinazione di due soli simboli, ovvero di codificare i numeri direttamente in bit. All'interno dei calcolatori viene adottata un'algebra dei numeri a precisione finita con un intervallo di definizione che dip ende dal numero di byte associato alla rappresentazione. In un byte il bit più a destra è quello con meno significato a posizione o peso 0 detto anche Least Significant Bit mentre quello più a sinistra è quello più significativo a posizione o peso 7 detto anche Most Significant Bit Poiché un byte può rappresentare valori diversi, si possono , ad esempio con 8 bit gestire i seguenti intervalli di numeri interi: [0,255] e [-127,128] Entrambi gli intervalli sono costituiti da 256 numeri Sistemi di Numerazione Insieme di simboli (cifre) e regole che assegnano ad ogni sequenza di cifre uno ed un solo valore numerico I sistemi di numerazione vengono classificati in:

  • Posizionali in cui ogni cifra della sequenza ha un'importanza variabile a seconda della relativa posizione(es. sistema decimale)
  • Non posizionali in cui ogni cifra esprime una quantità non dipendente dalla posizione ( es. sistema romano) Numerazione posizionale pesata Un sistema di numerazione posizionale associa alle cifre c un diverso peso in base alla posizione i occupate da quest'ultime nella stringa che compone il numero , dove il peso dipende dalla base b di numerazione In un sistema posizionale in base b servono b simboli per rappresentare i diversi valori delle cifre compresi tra 0 e ( b - 1 ) Conversione nella base 10 da qualsiasi base b , calcolando la sommatoria dei prodotti delle per i pesi Esempio: (101111)= Conversione da decimale in binario

Sono presenti due configurazioni dello zero , lo 0 positivo (00000000) e lo 0 negativo (10000000) quindi le operazioni di somma e sottrazione devono essere corrette nell'attraversamento dello zero Operandi concordi A>0 e B>0 A+B; A<B e B<0 A+B=-( ) Operandi discordi A>0 e B<0 se altrimenti A+B= A<0 e B>0 se altrimenti A+B= Complemento a due Le configurazioni che hanno il bit più significativo uguale a zero, comprese nell'intervallo [0, ], rappresentano se stesse ( numeri positivi) Le configurazioni col bit più significativo uguale a uno, cioè quelle rientranti nell'intervallo [ ] rappresentano i numeri negativi che si ottengono traslando a sinistra l'intervallo di , cioè l'intervallo [- Il complemento a 2 del valore si ottiene complementando alla base tutte le cifre del valore assoluto del numero x e sommando poi 1 al valore ottenuto. Analogamente partendo da destra si lasciano invariati tutti i bit fino al primo 1 compreso e poi si complementa bit a bit. Nella rappresentazione per complemento a 2 , i valori rappresentati sono compresi nell'intervallo [ - e sono sempre : [0, - 1] per i valori positivi e zero [- - 1] per i valori negativi L'intervallo non è simmetrico: valore assoluto del minimo

  • 1 valore del massimo Esiste una sola rappresentazione dello zero Complemento alla base diminuita Il complemento a uno del numero x si differenzia dal complemento a 2 dello stesso numero per una unità Il complemento a 1 di un numero si ottiene complementando tutte le cifre del numero Doppia rappresentazione dello zero che complica le operazioni di somma e sottrazione quindi è stato abbandonato Intervallo: [-( - 1), - 1 ] Rappresentazione in eccesso Numeri negativi iniziano con 0 Numeri positivi iniziano con 1 Intervallo:[- - 1 ] Da decimale a binario si somma con l'eccesso ( ) e si converte poi in binario Da binario a decimale si sottrae l'eccesso Rappresentazione in eccesso k E' possibile rappresentare in eccesso un qualsiasi numero k con l bit k≤ Intervallo:[-k, - k- 1 ] Rappresentazione dei numeri reali In un intervallo reale esistono infiniti valori ma i valori rappresentabili in binario appartengono invece ad un sottoinsieme che contiene un numero finito di valori reali. Ciò provoca diversi errori di approssimazione. La disciplina chiamata calcolo numerico si pone come obiettivo la ricerca di algoritmi appropriati per la soluzione di problemi matematici che fanno largo uso di numeri reali. I numeri reali rappresentabili in binario godono della seguente proprietà: Dove ε rappresenta 'errore che si commette sostituendo x a X e : X=X se si approssima per difetto X= se si approssima per eccesso In generale se - m è il peso della cifra meno significativa, l'errore massimo che si commette è: I numeri reali vengono rappresentati in binario attraverso la seguente notazione scientifica: r=m e^ con m numero frazionario detto mantissa che determina la precisione del numero ossia con quante cifre significative sarà rappresentato

m numero frazionario detto mantissa che determina la precisione del numero ossia con quante cifre significative sarà rappresentato la base b numero naturale prefissato, ed e numero intero chiamato esponente o caratteristica che determina l' ampiezza dell'intervallo di valori preso in considerazione Con un numero finito di cifre è possibile rappresentare solo un numero razionale che approssima con un certo errore il numero reale dato. Le notazioni possibili sono due: Virgola fissa che dedica una parte (prestabilita) delle cifre alla parte intera e le altre alla parte frazionaria, la posizione della virgo la è fissata su un bit prestabilito; Virgola mobile (floating point) che dedica alcune cifre a rappresentare un esponente della base che indica l'ordine di grandezza del numero rappresentato Sfrutta la notazione scientifica E' utile perché permette di rappresentare in maniera compatta numeri molto grandi ma anche molto piccoli, sia positivi che negativi Estende l'intervallo di numeri rappresentati a parità di cifre, rispetto alla notazione in virgola fissa La rappresentazione in virgola mobile, fissata la base b, consente di esprimere lo stesso valore con infinite coppie <mantiss a, esponente> I numeri reali sono rappresentati tramite una coppia di numeri<m,e> m:mantissa (significante) normalizzata ( quando la prima cifra è diversa da zero e la parte intera un numero minore della base ) tra due potenze successive della base e:esponente I numeri reali rappresentabili sono definiti in un insieme limitato con estremi predefiniti [-minreal,maxreal] Overflow condizione che si verifica quando i valori sono: più piccoli di minreal, più grandi di maxreal Underflow condizione che si verifica quando un valore viene confuso con lo zero tra [-1,0000 x 10-^99 , 1,0000 x 10-^99 ] Operazioni in virgola mobile La somma e la sottrazione richiedono l'allineamento degli esponenti che potrebbe far scomparire alcune cifre rappresentative del numero Il prodotto e la divisione richiedono operazioni separate sulle mantisse e sugli esponenti ( es. le mantisse si moltiplicano e gli esponenti si sommano ) Standard IEEE 754 definisce principalmente tre formati numerici a virgola mobile: singola precisione (32 bit ) doppia precisione (64 bit ) precisione estesa ( 80 bit ) La mantissa è normalizzata per cui comincia sempre con un 1 seguito da una virgola binaria, e poi a seguire il resto delle ci fre. Lo standard prevede l'assenza sia del primo bit sia del bit della virgola perché sono sempre presenti ( valori normalizzati) Esempi

Rappresentazione testi Un testo digitale è una stringa di simboli ad ognuno dei quali viene associato un codice binario secondo un prefissato standa rd Rappresentazione dei caratteri Per rappresentare i caratteri esistono vari codici

Le immagini in movimento ( o video ) L'occhio umano ricostruisce l'informazione di movimento se riceve una successione sufficientemente rapida di immagini fisse ( video come sequenza di immagini ) La sequenza continua di immagini della realtà viene quindi discretizzata ottenendo una serie di immagini ( detti frame ) che variano velocemente, ma a intervalli stabiliti Il frame-rate è il numero di frame mostrati per secondo (fps) Lo standard MPEG ( moving picture expert group ) prevede la codifica di ciascun frame fisso. Oltre alla codifica dei suoni, attraverso tecniche di compressione dei dati, senza compressione 1 minuto di filmato a 24 fps occuperebbe 644 MB Compressione Per risolvere problemi connessi con le dimensioni elevate sono stati introdotti processi di compressione i quali riducono lo spazio occupato mediante: la diminuzione del numero di bit necessari per codificare una singola informazione ( compressione entropica ); oppure la diminuzione del numero di informazioni da memorizzare o trasmettere ( compressione differenziale , compressione semantica ) La compressione può conservare integralmente o no il contenuto della rappresentazione originale secondo due tecniche principali: la compressione senza perdita di informazione ( lossless , reversibile ) che sfrutta le ridondanze nella codifica del dato Avviene tramite una classe di algoritmi che consentono di ricostruire tutta l'informazione iniziale partendo da quella compre ssa la compressione con perdita di informazione ( lossy , irreversibile ) che invece sfrutta le ridondanze nella percezione dell'informazione Comporta riduzioni notevoli delle dimensioni, ma la ricostruzione dell'informazione da quella compressa non è identica a quel la iniziale Tali metodi rimuovono parti che possono non essere percepite come avviene nel caso di immagini, video e suoni Tra le tecniche di compressione lossy troviamo: Codifica dell'audio Il suono è un segnale analogico funzione del tempo consistente in vibrazioni che formano un'onda, la cui ampiezza misura l'al tezza dell'onda e il periodo è la distanza tra due onde Anche il suono deve essere campionato e quantizzato per poter essere digitalizzato L'operazione di campionamento discretizza il segnale con una frequenza dell'ordine delle decine di KHz ( migliaia di campioni al secondo ) perché è dimostrato che l'orecchio umano percepisce fedelmente il suono originale se il suo campionamento è non inferiore a 30KHz Per Nyquist la frequenza di campionamento deve essere almeno il doppio della frequenza del segnale audio analogico per non av ere perdita di informazione. La quantizzazione è un processo irreversibile che conduce a una sicura perdita di informazioni, tanto più l'operazione è accu rata tanto più la qualità del suono è preservata La quantità di bit usati per rappresentare il suono dipende allora dal numero di bit usato per la quantizzazione, chiamato an che profondità del suono, dalla frequenza di campionamento e quindi dalla durata del suono Informazioni, Dati e Metadati Dato Rappresentazione di fatti concreti in maniera formale, tale da permetterne l'elaborazione attraverso strumenti automatici L'uomo tratta informazioni, l'elaboratore tratta dati Il dato da solo ( senza contesto ) potrebbe non avere significato .L'ambiguità può essere risolta dando al dato un'interpretazione. L'informazione dipende dalla percezione del dato attraverso interpretazione Metadati Dati che descrivono altri dati riportandone struttura, significato o descrizione. Secondo le nuove proposte del Web Semantico, il metadato è l'informazione che dà significato al dato rendendolo comprensibile alle macchine I metadati possono essere distinti in : descrittivi finalizzati al recupero dei dati gestionali necessari alla gestione dei dati Operatori booleani Sulle stringhe di bit sono anche definiti operatori che lavorano bit a bit. Essi sono detti booleani e sono: AND : dati due bit restituisce il valore 1 se e solo se i bit erano entrambi posti a 1, in tutti gli altri casi il risultato è 0; AND è detto anche prodotto logico e indicato con il simbolo "•" OR : dati sue bit restituisce il valore 0 se e solo se i bit erano entrambi posti a 0, in tutti gli altri casi il risultato è 1, O R è anche detto somma logica e indicato anche con il simbolo " + " NOT : dato un bit restituisce il valore 0 se esso era posto a 1 , restituisce invece 1 se il bit era posto a 0; NOT viene anche d etto operatore di negazione o di complementazione e indicato anche con il simbolo "-".

negazione o di complementazione e indicato anche con il simbolo "-". Considerando 1 come vero e 0 come falso , gli operatori booleani su definiti corrispondono ad operatori logici. Altro operatore binario è OR disgiuntivo ( XOR ) che dati due bit restituisce il valore 1 se e solo se uno solo dei bit era posto a 1 , in tutti gli altri casi il risultato è 0; XOR è anche detto disgiunzione esclusiva a XOR b equivale ad ( a AND ( NOT b )) OR ((NOT a) AND b) Tavola di verità Le tavole ( o tabelle ) di verità prevedono un numero di colonne pari al numero di operandi dell'operatore più una ( corrispondente al risultato) , e un numero di righe pari a tutte le possibili combinazioni di valori di verità ( 2n^ con n numero degli argomenti ) Operazioni logiche per-bit su stringhe : esempi Operazioni logiche per-bit su stringhe : applicazioni Una stringa di bit può essere usata come bitmask (insieme di valori booleani,ciascuno detto flag ). In tal caso gli operatori bitwise hanno diversi usi:

  • Valutare un particolare bit da una bitmask ( x AND 0100 )
  • Resettare alcuni o tutti i bit a zero ( x AND 0000 )
  • Complementare il valore di un bit ( x XOR 0010 ) Altri usi comuni si hanno nella crittografia (XOR) , nell'analisi delle immagini ( applicazione di maschera ) , etc. Algebra delle proposizioni Una proposizione ( o predicato ) semplice ( condizione ) è una qualsiasi affermazione che può essere vera o falsa Operatori di relazione Permettono il confronto di valori ( operandi ) qualsiasi Gli operatori di relazione più noti sono quelli che permettono di confrontare quantità numeriche:
  • Uguale ( = )
  • Diverso ( ≠ )
  • Maggiore ( > )
  • Minore ( < )
  • Maggiore o uguale ( ≥ )
  • Minore o uguale ( ≤ ) Gli operatori uguale e diverso si possono applicare a valori di qualunque natura, mentre gli altri operatori si possono appli care a valori su cui sia definita una relazione d'ordine Predicati semplici con operatori di relazione Gli operatori di relazione permettono di esprimere predicati semplici che non possono essere scomposti in parti che siano ancora delle condizioni, cioè sono atomici Esempi di condizioni atomiche: 1<2 ( valore : vero ) 7<0 ( valore : falso ) x≠ 0 ( valore : dipende cosa rappresenta x ) oggi = mercoledì ( valore: dipende cosa rappresenta oggi ) Gli operatori di relazione non sono operatori logici , ma consentono di costruire espressioni che possono essere usate come argomenti di operatori logici Proposizioni composte : esempio Le preposizioni composte sono formate da condizioni più semplici unite da operatori ( o connettivi ) logici Esempio: Un impiegato di un ufficio postale accetta un altro bollettino di conto corrente se:

Logica delle proposizioni La legge di dualità vale anche per la logica delle proposizioni. Da qualsiasi proposizione logica se ne può ricavare un'altra per dualità, sostituendo cioè ad ogni operatore e ai valori falso e vero il rispettivo duale : AND OR D V F Nei passaggi da una proposizione alla sua duale l'operatore NOT non subisce modifiche Due espressioni duali non sono equivalenti ma entrambe valide nell'algebra di Boole Regole di precedenza Le regole di precedenza tra gli operatori logici prevedono :

  • la precedenza massima per l'operatore NOT,
  • seguito dall'operatore AND,
  • a sua volta seguito dall'operatore OR
  • Gli operatori di relazione hanno sempre precedenza su tutti gli operatori logici. Alcuni teoremi
  • 0 e 1 sono l'uno il complemento dell'altro Dimostrazione: Ponendo a=1 per la P6 e a= 0 per la P'6 , verificate la definizione di complemento esiste ed è unico : a • ā = 0 ( P7 ) e a + ā = 1 ( P'7 ) 1 • 0 = 0 1 + 0 = 1 (P6, P'6) Convoluzione Negando due volte un elemento si ottiene l'elemento stesso Dimostrazione : Applicate la definizione di complemento sia ad un elemento a che al suo negato ā , poi la proprietà commutativa e ricordate che il complemento è unico a • ā = 0 a+ā= 1 ( P7, P'7) ā • ā = 0 ā+ā= 1 (unicità del complemento) Elementi neutri di somma e prodotto 0 è l'elemento neutro della somma 1 è l'elemento neutro del prodotto Dimostrazione: Per le proprietà dell'assorbimento ( P4,P'4) a + ( a • 0 ) = a e a • ( a + 1 ) = a Per la proprietà del minimo e del massimo ( P6,P'6) a • 0 = 0 e a + 1 = 1 Quindi a + 0 = a e a • 1 = a Assorbimento del complemento a + āb = a + b Dimostrazione: Applicate la proprietà distributiva ( P'5 ) ed infine il complemento ( P'7 ) a + āb = ( a + ā ) ( a + b ) ( P5 ) a + āb = ( a + b ) ( P7 ) Teorema di De Morgan In un algebra di Boole valgono le due relazioni di De Morgan :
  1. Il complemento di una somma è uguale al prodotto dei complementi dei termini
  2. Il complemento di un prodotto è uguale alla somma dei complementi dei fattori Dimostrazione: Consideriamo (1) : bisogna dimostrare che a+b è il complemento dell'espressione al secondo membro, per farlo si applica la de finizione di complemento Altri possibili modelli di algebra di Boole: Algebra degli insiemi

La relazione d'ordine ≤ equivale alla relazione di inclusione tra insiemi Algebra della logica L ' insieme K={ F, V } in cui siano definite le operazioni:

  • Congiunzione (^)
  • Disgiunzione ( v )
  • Negazione ( - ) È un'algebra di Boole con: F=0, V= 1 Congiunzione = • , disgiunzione = + , negazione = - Due funzioni notevoli nell'algebra delle proposizioni:
  • Funzione equivalenza
  • Funzione implicazione Si dice che x implica y se e solo se dalla verità di x ( antecedente ) scaturisce necessariamente la verità di y ( conseguente ) In termini algebrici, essendo l'implicazione falsa se e solo se x è vera e y è falsa , applicando il teorema di De Morgan si ha: Circuiti logici Circuiti elettronici nei quali una grandezza elettrica ai morsetti di ingresso e di uscita può assumere solo due valori, convenzionalmente rappresentati con i due elementi dell'algebra di Boole 0 ed 1. In elettronica digitale si studia come realizzare circuiti elettronici per i quali il legame tra ingressi ed uscite corrisponde a quello delle operazioni fondamentali AND,OR e NOT dell'algebra di Boole. AND,OR e NOT corrispondono ad altrettante porte logiche che sono i componenti base dei circuiti logici L'algebra dei circuiti associa i simboli 0 e 1 ai livelli logici basso e alto Un circuito è descritto dalla funzione logica (booleana ) Dove y=bit di uscita , x 1 ,x 2 ,…,xn= bit di ingresso Algebra dei circuiti: reti unilaterali Il flusso di informazione procede in un unico senso ( ingresso uscita ) Porte logiche o gate

Il modello di Von Neumann si basa sul concetto di programma memorizzato La macchina immagazzina nella propria memoria i dati su cui lavorare e le istruzioni per il suo funzionamento Da cui ne deriva una grande flessibilità operativa Macchine nate per fare calcoli possono essere impiegate nella risoluzione di problemi di natura completamente diversa , come problemi di tipo amministrativo, gestionale e produttivo Memorie Insieme di contenitori fisici, detti anche registri , di dimensioni finite e fissate a cui si può far riferimento mediante la posizione occupata nell'insieme detta indirizzo di memoria La dimensione di un registro si misura in numero di bit I dispositivi per memorizzare i singoli bit possono essere fatti in diversi modi: Nelle memorie di tipo elettronico sono circuiti detti flip-flop che mostrano un valore di tensione a 5 volt o a 0 volt , nelle memorie di tipo magnetico è una sorta di calamita polarizzata o positivamente o negativamente , nelle memorie di tipo ottico è una superficie con o senza buco in modo da riflettere diversamente il raggio laser che la colpisce In ogni caso il dispositivo di lettura deve essere in grado di associare allo stato del bit il valore 1 ( ad esempio tensione a 5 volt, polo positivo, assenza di buco ) o il valore 0 ( ad esempio tensione a 0 volt, polo negativo, presenza di buco ) Operazioni sulla memoria Load : si preleva l'informazione contenuta nel registro senza però distruggerla Store : si inserisce un'informazione nel registro eliminando quella precedente Leggere informazioni a patto che vi siano state scritte La lettura non cancella quanto scritto La scrittura di nuove informazioni obbliga a cancellare quelle precedenti che pertanto vengono perse ( sovrascritte ) La memoria è un sistema che assolve al compito di conservare il dato, depositandolo in un registro nel caso di operazione di scrittura e di fornire il dato conservato in un registro , per l'operazione di lettura Funzionamento di una memoria La CPU indica preventivamente l'indirizzo del registro interessato dall'operazione. La memoria decodifica tale indirizzo abilitando solo il registro ad esso corrispondente affinchè:

  • Per una store ( write ) copi il dato del buffer nel registro
  • Per una load ( read ) copi il dato del registro nel buffer Dove il buffer può essere vista come un'area di transito dei dati dalla CPU alla memoria e viceversa Le operazioni di load e store richiedono tempi di attuazione che dipendono dalle tecnologie usate per la costruzione delle memorie e dalle modalità di accesso Per il load , il tempo di accesso misura il tempo che trascorre tra la selezione del registro di memoria e la disponibilità del suo contenuto nel registro di buffer Per lo store misura invece il tempo necessario alla selezione del registro e il deposito del contenuto del registro di buffer in esso Diversi tipi di memoria Memoria ad accesso casuale : il tempo di accesso non dipende dalla posizione- R.A.M ( Random Access Memory ) Memoria ad accesso sequenziale : il tempo di accesso dipende dalla posizione , come avviene nei nastri magnetici Alcune memorie vengono realizzate in modo che sia possibile una sola scrittura di informazioni Tali memorie vengono dette a sola lettura o R.O.M ( Read Only Memory 9 L'uso di queste memorie è necessario quando si desidera che alcune istruzioni o dati non siano mai alterati o persi Memorie volatili : perdono le informazioni in esse registrate quando il sistema viene spento, memorie elettroniche Memorie permanenti : memorie di tipo magnetico, ottico e tutti i tipi di ROM Memorie di massa Le memorie di massa sono memorie ausiliare caratterizzate da una elevata capacità Le informazioni contenute nella memoria di massa devono essere dapprima trasferite nella memoria centrale e successivamente elaborate Le informazioni prodotte dalla CPU , viceversa , devono essere depositate in memoria centrale per poi essere conservate nelle memorie di massa Le memorie di massa hanno tempi di accesso maggiori dovuti alle tecnologie impiegate per realizzarle e sono memorie non volatili Per ovviare alla differenza di velocità tra i due dispositivi si impiegano tecniche che prevedono che la memoria centrale con tenga anche aree di accumulo dei dati in transito verso tutti i dispositivi esterni ( buffer ) La C.P.U ( Central Processing Unit ) Contiene i dispositivi elettronici in grado di acquisire , interpretare ed eseguire il programma contenuto nella memoria centrale ALU : unità logica aritmetica CU : unità di controllo Registri interni ( IR,PI,CC,ACC,OP) Control Unit È preposto all'interpretazione delle singole istruzioni e all'attivazione di tutti i meccanismi necessari per eseguire le sin gole istruzioni In particolare la CU ha il compito di : Prelevare ogni istruzione dalla memoria centrale e decodificarla Prelevare i dati dalla memoria se servono all'istruzione Eseguire l'istruzione Al termine dell'esecuzione di una istruzione , la CU procede al prelievo dalla memoria della successiva istruzione secondo un ordine rigidamente sequenziale L'esecuzione di una istruzione può avere inizio solo se la precedente è stata portata a termine Arithmetic Logic Unit Esegue operazioni:

Esegue operazioni:

  • Aritmetiche, di confronto o bitwise
  • Sui dati della memoria centrale o dei registri interni della CPU L'esito dei suoi calcoli viene segnalato da appositi bit in un registro chiamato Condition Code ( CC ) Nei sistemi attuali l'ALU viene affiancata da processori dedicati alle operazioni sui numeri in virgola mobile detti processo ri matematici Durante le sue elaborazioni la CU può depositare informazioni nei suoi registri interni in quanto sono più facilmente individ uabili e hanno tempi di accesso inferiori a quelli dei registri della memoria centrale Registri interni Il numero e il tipo di tali registri varia a seconda dell'architettura della CPU In molte CPU troviamo: Istruction Register (IR) : contiene l'istruzione prelevata dalla memoria e che l'unità di controllo sta eseguendo Prossima Istruzione (PI) : ricorda alla CU la posizione in memoria ( indirizzo ) della successiva istruzione da eseguire Nei casi in cui ogni registro di memoria contenga un'intera istruzione , e l'insieme delle istruzioni del programma sia dispo sto ad indirizzi consecutivi, la CU incrementa di uno il valore contenuto in PI dopo ogni prelievo di una istruzione della memoria Accumulatore (ACC) : serve come deposito di dati da parte della ALU nel senso che contiene prima di un'operazione uno degli operandi, e al termine della stessa operazione il risultato calcolato Condition Code (CC) : indica le condizioni che si verificano durante l'elaborazione , quali risultato nullo, negativo e overflow Il ciclo del processore A partire da una fase iniziale detta di boot il processore esegue ininterrottamente l'algoritmo detto ciclo del processore Le tre fasi del ciclo vengono anche dette:
  • Fetch
  • Operand Assembly
  • Execute Fetch
  1. Per avviare un programma, residente nella memoria principale, bisogna inserire l'indirizzo della prima istruzione nel PI.
  2. La CU ricopia il contenuto del PI nel MAR e viene effettuato un accesso in lettura a quell'indirizzo.
  3. Il dato prelevato dall'indirizzo , cui si è acceduto, viene conservato in MDR. Il contenuto di MDR viene ricopiato in IR. Nel frattempo PI si è , in maniera automatica, aggiornato alla locazione successiva ( indirizzo della successiva istruzione ).

Decode L'istruzione viene interpretata, prelevando eventualmente dalla memoria altri dati necessari ( operand assembly ) se l'istruzione completa non è contenuta nel dato prelevato in precedenza. In ogni caso, alla fine , PI punterà all'istruzione da eseguire successivamente. Execute Se , per esempio, l'istruzione da eseguire è una somma , i registri Op1 e Op2 verranno caricati con i numeri da sommare e la CU invia alla ALU il comando per l'esecuzione della somma. La ALU esegue l'operazione. Il risultato prodotto sarà conservato in uno dei registri ( ad es. ACC o in memoria ) e verrà aggiornato il CC. Il bus È un canale di comunicazione condiviso da più utilizzatori È fisicamente costituito da uno o più fili su cui possono transitare uno o più bit contemporaneamente A seconda delle informazioni trasportate si hanno:

  • Bus dati ( data bus )
  • Bus indirizzi ( address bus )
  • Bus comandi o di controllo ( command o control bus ) Il control bus serve alla CU per indicare ai dispositivi cosa devono fare Tipici segnali del control bus sono quelli di read e write mediante i quali la CU indica ai dispositivi se devono leggere un dato dal data bus ( read ) o scriverlo su di esso ( write ) Il data bus permette ai dati di fluire da CPU a registro di memoria selezionato per operazioni di write ( store ) e viceversa per quelle di read ( load ) L' address bus serve alla CU per comunicare l'indirizzo del dispositivo interessato da un'operazione di lettura o scrittura. In quest'ottica anche i dispositivi di input/output sono identificati da un indirizzo alla stessa stregua dei registri di mem oria Tutti i componenti del sistema ( memoria, input, output, memoria di massa , etc.) devono essere dotati della capacità di riconoscere sull'address bus il proprio indirizzo In altri termini attraverso l'address bus la CU effettua la selezione del dispositivo a cui sono rivolti i comandi e i dati. Scambio di informazioni La CPU è l'unico elemento che fornisce l'indirizzo all'address bus Memorie e dispositivi di input ed output devono ascoltare l'address bus per attivarsi quando su di esso compare il proprio indirizzo identificativo Nel caso della memoria l'attivazione avviene quando viene riconosciuto l'indirizzo corrispondente ad uno dei registri di cui essa è composta. Il dispositivo attivo deve interpretare i segnali del control bus per eseguire i comandi della CU Le memorie prelevano dati dal data bus o immettono dati in esso in funzione del comando impartito dalla CU I dispositivi di input possono solo immettere dati sul data bus. Viceversa i dispositivi di output possono solo prelevare dati dal data bus Bus seriale e parallelo Un bus costituito da un solo filo è chiamato bus seriale e su di esso i bit transitano uno dietro l'altro Un bus costituito da n fili è chiamato bus parallelo perché su di esso transitano n bit alla volta: tipici sono i bus da 8 e 32 fili L'address e il data bus sono paralleli e le loro dimensioni caratterizzano i sistemi di calcolo Il numero di bit dell'address bus indica la capacità di indirizzamento della CPU: ossia la sua capacità di gestire la dimensi one della memoria centrale e il numero di dispositivi di input ed output ( un address bus con n bit consente di selezionare un registro tra 2n) La dimensione del data bus condiziona invece la velocità di scambio delle informazioni tra i diversi dispositivi in quanto co n m fili solo m bit possono viaggiare contemporaneamente Il clock Le attività di tutti i dispositivi vengono sincronizzate tra loro mediante un orologio interno che scandisce i ritmi di lavoro. Il clock è un segnale periodico di periodo fisso Un'onda quadra caratterizzata da un periodo T ( detto ciclo ) e da una frequenza f ( f=1/T) misurata in Hertz (Hz). La frequenza dei clock presenti nei moderni sistemi spazia dai MHz ( 1 milione di battiti al secondo ) ai GHz ( un miliardo d i battiti al secondo ) Clock e velocità di elaborazione La velocità di elaborazione di una CPU dipende dalla frequenza del suo clock ( maggiore frequenza maggiore velocità di esecuzione ) Alla frequenza del clock è legato il numero di operazioni elementari che vengono eseguite nell'unità di tempo dalla CU. In realtà tale ipotesi non è sempre vera in quanto l'esecuzione di una operazione può richiedere più cicli di clock sia per l a complessità delle operazioni che per la lentezza dei dispositivi collegati alla CPU ( ad es. memorie più lente della CPU) Esempio di tempificazione LOAD

una qualsiasi entità esterna alla CPU può richiederle attenzione. Le interruzioni Con la presenza del segnale di interruzione la CPU può attivare un processore periferico e disinteressarsi delle due attività Quando un processore dedicato termina il suo compito, avanza una richiesta di interruzione al processore centrale e aspetta che gli venga rivolta attenzione. Mentre i processori periferici lavorano, la CPU può lavorare anch'essa a meno che non sia indispensabile quanto richiesto all o specifico processore. ISR Per consentire alla CU di accorgersi del verificarsi di una interruzione il registro di condizione CC è stato dotato di un bit che diventa uguale a uno quando arriva una interruzione La CU controlla il bit al termine dell'esecuzione di ogni istruzione. Se è uguale zero (NO interrupt) procede normalmente con il prelievo dell'istruzione successiva (Fetch) In caso contrario (SI interrupt) comincia l'esecuzione di un programma di sistema operativo, detto ISR (Interrupt Service Routine) che ha come compito primario di capire la causa dell'interruzione, ossia quale dispositivo ha avanzato la richiesta. Nel caso si accorga della presenza di più richieste stabilisce quale servire per prima secondo criteri di importanza o priorità di intervento. Evoluzione del modello di Von Neumann: le cache Per ridurre i tempi di trasferimento dalla memoria centrale ai registri interni della CPU, viene replicata una porzione di memoria e posta tra memoria e CPU stessa. Tale memoria, molto veloce, viene chiamata cache e fa da buffer per il prelievo di informazioni dalla memoria centrale Con operazioni particolari, istruzioni e dati vengono trasferiti dalla memoria centrale nella cache secondo la capacità di qu est'ultima La CU procede nelle tre fasi del suo ciclo al prelievo di istruzioni e operandi dalla cache Quando la CU si accorge che il prelievo non può avvenire scatta un nuovo travaso dalla memoria centrale Se la cache è interna alla CPU viene detta di primo livello (L1) La cache di secondo livello (L2) sono invece esterne e solitamente un po' più lente di quelle di primo livello ma sempre più veloci della memoria centrale. I due livelli possono coesistere. Gerarchia di memorie Consente di offrire ai programmi l'illusione di avere una memoria grande e veloce Nella gerarchia i livelli più prossimi alla CPU ( le memorie cache ) sono quelli più veloci, ma sono anche quelli con dimensi oni più piccole visto il loro elevato costo. I livelli più lontani sono quelli che mostrano una capacità massima, ma anche tempi di accesso maggiori Firmware e software L'insieme dei microprogrammi composti dalle microistruzioni memorizzate nella memoria interna alla CU prende il nome di firmware L'insieme di tutte le applicazioni del computer, quindi di tutti i programmi per computer, prende il nome di software In una eccezione più ampia il termine software può essere inteso come tutto quanto può essere preteso dall'hardware: basta in fatti inserire in memoria un programma diverso perché il sistema cambi le sue attività. Tra tutte le macchine automatiche il computer è un sistema polifunzionale in quanto può eseguire infinite funzioni sempre che venga progettato un programma per ogni applicazione. Diversi tipi di software Programmi che servono a tutti gli utenti del sistema sono denominati software di base ( sistemi operativi, utilità e traduttori dei linguaggi di programmazione ) Programmi che risolvono problemi specifici sono denominati software applicativo Middleware È il software che fornisce un'astrazione di programmazione che maschera l'eterogeneità di elementi sottostanti: Reti, hardware, sistemi operativi, linguaggi di programmazione Il middleware definisce una macchina generalizzata fissandone le modalità di interazione con le applicazioni Sistema operativo Il Sistema Operativo (S.O.) è un insieme di programmi che deve garantire la gestione delle risorse hardware in modo semplice ed efficiente a tutti gli utenti del sistema. I primi calcolatori non avevano il sistema operativo. In essi il programmatore doveva prevedere tutto. Al termine dell'esecuzione del programma il programmatore o l'operatore del sistema doveva provvedere ad un nuovo caricamento in memoria ed ad una successiva attivazione. Con il sistema operativo il passaggio da un'applicazione ad un'altra è svolto in automatico. La CPU si trova così ad eseguire i programmi del sistema operativo in alternanza con quelli applicativi.

Sistema operativo e sviluppo Il sistema operativo offre una serie di funzionalità di base allo sviluppatore, tra cui l'accesso ai dispositivi di I/O (estr aendone i dettagli hardware). I driver del dispositivo sono la parte di codice del S.O. che comandano un modello di dispositivo I/O Per ogni linguaggio di programmazione, le funzionalità del S.O. sono accessibili tramite moduli software raggruppati in librerie di sistema. Linguaggi di basso/alto livello I linguaggi assembly richiedono un ragionamento ad un livello basso di astrazione : si lavora con i registri e le singole operazioni del processore Tale livello di dettaglio e controllo è necessario solitamente per:

  • Creare parti del sistema operativo che interagiscono direttamente con l'hardware ( device drivers)
  • Dispositivi specializzati ( anche senza sistema operativo ) Negli altri casi si utilizzano linguaggi con un maggiore livello di astrazione che di fatto ignorano i dettagli hardware e le cui istruzioni sono più vicine al modo di pensare umano grazie ad astrazioni ( es.: memoria, file, operazioni complesse) I linguaggi di alto livello sono usati per scrivere i sistemi operativi ( il linguaggio C nasce per questo ) Ciclo di vita dei programmi C++ Programmazione : capacità di progettare algoritmi indipendentemente dal linguaggio dell'esecutore Le sue difficoltà crescono con la complessità del problema da affrontare ( lavori di una segreteria studenti vs lancio di una navicella spaziale ) Codifica: traduzione in un linguaggio appropriato per rendere comprensibile l'algoritmo all'esecutore a cui è destinato. La descrizione di un algoritmo in un linguaggio comprensibile ad un calcolatore è detto programma Il linguaggio nel quale viene scritto il programma è detto linguaggio di programmazione ( ad es. C,C++,Fortran, Java, Python ) Tipi di istruzione Elementari quelle istruzioni che l'esecutore è in grado di comprendere ed eseguire Non elementari quelle non note all'esecutore Perché un'istruzione non elementare possa essere eseguita dall'esecutore a cui è rivolta, deve essere specificata in termini più semplici Il procedimento che trasforma una istruzione non elementare in un insieme di istruzioni elementari, prende il nome di raffinamento o specificazione dell'istruzione non elementare Il processo di raffinamento è molto importante. Senza di esso si dovrebbero esprimere gli algoritmi direttamente nel linguaggio di programmazione disponibile che potrebbe avere una bassa potenza espressiva o essere eccessivamente artificioso Esecuzione di un algoritmo L'esecuzione di un algoritmo da parte di un esecutore si traduce in una successione di azioni che vengono effettuate nel tempo: Evoca un processo sequenziale; Serie di eventi che occorrono uno dopo l'altro, ciascuno con un inizio e una fine identificabili Si definisce sequenza di esecuzione la descrizione del processo sequenziale Elenco di tutte le istruzioni eseguite, nell'ordine di esecuzione detta anche sequenza dinamica Un algoritmo può prescrivere più di una sequenza di esecuzione Se il processo descritto è ciclico , il numero di sequenze può essere infinito Processo che non ha mai termine ( generalmente da evitare !) Sequenza statica e dinamica In un programma

Linguaggi di programmazione Il linguaggio di programmazione è una notazione formale per descrivere algoritmi ed è dotato di un alfabeto, un lessico, una grammatica, una sintassi ed una semantica. Un limitato insieme di regole definisce il lessico del programma, ovvero le parole del linguaggio. L'organizzazione delle parole in frasi è invece guidata da regole di grammatica. I periodi sono costruiti in base alla sintassi. L'attribuzione di un significato alle frasi è oggetto delle regole semantiche. Il linguaggio C/C++ Il linguaggio C è stato sviluppato nel 1972 da Dennis Ritchie presso i laboratori della AT&T Bell Labs ANSI C versione standardizzata dall'American National Standards Institute (ANSI) completata nel 1989. Pensato come linguaggio capace di operare ad alto livello Programmazione indipendente dalla macchina fisica ma che consente di controllare il comportamento dei singoli bit della memor ia. Grazie a questi elementi tipici dei linguaggi di basso livello i programmi C sono altamente flessibili e si traducono efficie ntemente in istruzioni