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


Introduzione alla Codifica dell'Informazione e alla Programmazione, Dispense di Elementi di Informatica

codifica dell'informazione: - Codifica Binaria - Codifica dei caratteri - Software - Linguaggi di programmazione - Proprietà fondamentali degli algoritmi - Linguaggi per descrivere gli algoritmi - Esercizi sugli algoritmi - linguaggi di programmazione

Tipologia: Dispense

2017/2018

Caricato il 13/05/2018

giulia-guzzone
giulia-guzzone 🇮🇹

3.8

(9)

25 documenti

1 / 8

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
CODIFICA DELL’INFORMAZIONE
CODIFICA
Una codifica è una regola per associare in modo univoco i valori di un dato da codificare con
sequenze di simboli. La corrispondenza definita dalla codifica è una convenzione arbitraria. La
convenzione utilizzata deve essere nata e rispettata da chi genera e da chi utilizza i dati. A tale
scopo vengono definiti degli standard.
CODIFICA BINARIA
In un calcolatore i dati sono rappresentati in forma binaria con sequenze di bit, ovvero sequenze di
due soli simboli: 0 e 1.
Occorre associare univocamente ad ogni dato elementare (numeri, caratteri, …) una sequenza di
bit che lo rappresenti.
L’alfabeto è l’insieme dei simboli utilizzabili, costituito da cifre 0 e 1. Con N cifre binarie si possono
codificare 2 n configurazioni diverse: con Nbit si possono rappresentare al più 2 n valori distinti.
Per rappresentare M valori distinti sono necessarie N=[log2M] cifre binarie.
Esempi: con 4 cifre binarie si possono rappresentare 24=16 valori distinti. Per rappresentare i 7 giorni
della settimana, occorrono N=[log27] = 3 cifre binarie.
Una possibile codifica è ad esempio:
LUNEDì 000
SABATO 101
MARTEDI 001
DOMENICA 110
MERCOLEDì 010
GIOVEDI 011
VENERDI 100
CODIFICA BINARIA DEI NUMERI: ARITMETICA BINARIA
Distinguiamo la rappresentazione per:
- Numeri naturali (interi positivi);
- Numeri interi con segno;
- Numeri naturali.
1. numeri interi positivi: La codifica si basa sulla notazione scientifica posizionale o “pesata”
adottata usualmente per i numeri codificati in decimale. Nella notazione posizionale il valore
numerico rappresentato da una cifra difende dal valore della cifra e dalla sua posizione nel
numero.
Data una base B, le cifre ck possono assumere i valori da 0 a B-1. In notazione posizionale
un numero X di Ncifre si può esprimere in base B come somma di potenze della base B.Ad
esempio: 132810= 1*103 + 3*102 + 2*101 + 8*100
3568 = 3*82 + 5*81 + 6*80= 192+40+6 = 23810
Nel caso binario (base B=2), una sequenza di bit bn-1 …, b1, b0.
ESEMPIO (con 8 bit): 00001001 rappresenta il numero 9 (23+1 = 8+1)
pf3
pf4
pf5
pf8

Anteprima parziale del testo

Scarica Introduzione alla Codifica dell'Informazione e alla Programmazione e più Dispense in PDF di Elementi di Informatica solo su Docsity!

CODIFICA DELL’INFORMAZIONE

 CODIFICA

Una codifica è una regola per associare in modo univoco i valori di un dato da codificare con sequenze di simboli. La corrispondenza definita dalla codifica è una convenzione arbitraria. La convenzione utilizzata deve essere nata e rispettata da chi genera e da chi utilizza i dati. A tale scopo vengono definiti degli standard.

 CODIFICA BINARIA

In un calcolatore i dati sono rappresentati in forma binaria con sequenze di bit, ovvero sequenze di due soli simboli: 0 e 1.

Occorre associare univocamente ad ogni dato elementare (numeri, caratteri, …) una sequenza di bit che lo rappresenti.

L’alfabeto è l’insieme dei simboli utilizzabili, costituito da cifre 0 e 1. Con N cifre binarie si possono codificare 2 n^ configurazioni diverse: con Nbit si possono rappresentare al più 2 n^ valori distinti.

Per rappresentare M valori distinti sono necessarie N=[log 2 M] cifre binarie.

Esempi: con 4 cifre binarie si possono rappresentare 2^4 =16 valori distinti. Per rappresentare i 7 giorni della settimana, occorrono N=[log 2 7] = 3 cifre binarie.

Una possibile codifica è ad esempio:

LUNEDì 000 SABATO 101 MARTEDI 001 DOMENICA 110 MERCOLEDì 010 GIOVEDI 011 VENERDI 100

 CODIFICA BINARIA DEI NUMERI: ARITMETICA BINARIA

Distinguiamo la rappresentazione per:

  • Numeri naturali (interi positivi);
  • Numeri interi con segno;
  • Numeri naturali. 1. numeri interi positivi: La codifica si basa sulla notazione scientifica posizionale o “pesata” adottata usualmente per i numeri codificati in decimale. Nella notazione posizionale il valore numerico rappresentato da una cifra difende dal valore della cifra e dalla sua posizione nel numero. Data una base B, le cifre ck possono assumere i valori da 0 a B-1. In notazione posizionale un numero X di Ncifre si può esprimere in base B come somma di potenze della base B.Ad esempio: 1328 10 = 110^3 + 310^2 + 210^1 + 810^0 3568 = 38^2 + 58^1 + 6*8^0 = 192+40+6 = 238 10 Nel caso binario (base B=2), una sequenza di bit bn-1 …, b 1 , b0. ESEMPIO (con 8 bit): 00001001 rappresenta il numero 9 (2^3 +1 = 8+1)

Rappresentazione a 4 bit dei numeri interi positivi tra 0 e 15

Base 10 Base 2 Base 10 Base 2 0 1 2 3 4 5 6 7 0000 0001 0010 0011 0100 0101 0110 0111

Codifica dei caratteri

Qualunque codifica deve soddisfare:

  • 'a' < 'b' < ... < 'z'
  • 'A' < 'B' < ... < 'Z'
  • '0' < '1' < ... < '9'

Continuità dei codici delle successioni:

  • 'a', 'b', ..., 'z'
  • 'A', 'B', ..., 'Z'
  • '0', '1', ..., '9'

NB : non è fissa la relazione tra maiuscole e minuscole o fra i caratteri non alfabetici

Codifica dei caratteri

  • Codifica ASCII (American Standard Code for Information Interchange): Comprende caratteri speciali, punteggiatura, a-z, A-Z, 0-9. Utilizza 7 bit (128 caratteri). I codici ASCII estesi usano 8 bit (256 caratteri)
  • Codifica UNICODE: Utilizza 16 bit (65536 caratteri): I primi 128 caratteri sono gli stessi di ASCII, gli altri corrispondono ad altri alfabeti (greco, cirillico,…). Non copre i simboli (oltre 200.000) di tutte le lingue!
  • Codifica esadecimale : La rappresentazione esadecimale consente di esprimere lunghe sequenze binarie in modo più compatto. Ogni gruppo di 4 bit può infatti essere direttamente convertito nella corrispondente cifra esadecimale. Parole di 16 o di 32 bit possono così essere espresse in modo più conveniente rispettivamente con 4 e 8 cifre esadecimali.

Alfabeto costituito da 16 simboli:

  • Esempio: rappresentazione esadecimale dei numeri interi positivi tra 0 e 15:

Base 10 Base 16 Base 10 Base 16 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

8 9 A B C D E F

 Progetto del software: di solito comporta i seguenti passi:

  1. FORMULARE IL PROBLEMA (specifica dei requisiti);
  2. CAPIRE IL PROBLEMA E SCOMPORLO IN PARTI GESTIBILI (analisi);
  3. PROGETTARE UNA SOLUZIONE (Algoritmo);
  4. IMPLEMENTARE LA SOLUZIONE (scrittura del codice);
  5. TESTARE LA SOLUZIONE E CORREGGERE EVENTUALI ERRORI (verifica, testing e debugging);
  6. TENERE AGGIORNATO IL PROGRAMMA (manutenzione).

ALGORITMO

Un algoritmo per la risoluzione di un problema è una sequenza di passi discreti che producono un problema:

  • Di lunghezza finita;
  • Deterministici ( dopo ogni passo si sa precisamente qual è il prossimo);
  • Ripetibili.

Esempio: procedimenti per calcolare il risultato di espressioni aritmetiche o algebriche.

 LINGUAGGI DI PROGRAMMAZIONE

Per scrivere il programma che realizza un algoritmo. Il programmatore deve usare un linguaggio di programmazione. A differenza dei linguaggi naturali, le regole dei linguaggi di programmazione sono rigide, per garantire l’assenza di ambiguità.

 PROPRIETA’ FONDAMENTALI DEGLI ALGORITMI

Proprietà necessarie senza le quali un algoritmo non può essere definito tale:

  1. I passi costituenti devono essere “elementari”, ovvero non ulteriormente componibili (atomicità);
  2. I passi costituenti devono essere interpretabili in modo diretto e univoco dall’esecutore, sia esso umano o artificiale (non ambiguità);
  3. L’algoritmo deve essere composto da un numero finito di passi e richiedere una quantità finita di passi e richiedere una quantità finita di dati in ingresso (finitezza);
  4. L’esecuzione deve avere termine dopo un tempo finito (terminazione);
  5. L’esecuzione deve portare a un risultato univoco (effettività).

 PROCEDIMENTO DI RISOLUZIONE DI UN PROBLEMA

I problemi sono caratterizzati da dati di ingresso (input) variabili, su cui l’algoritmo opererà per giungere alla soluzione e produrre il risultato atteso (output).

Esempio: calcolo del MCD fra due numeri. I dati di ingresso sono due numeri, ad ogni utilizzo differenti. Questo potrebbe apparire come una “famiglia di problemi”: il problema di calcolare il MCD fra 10 e 15, il problema di calcolare fra 40 e 60, fra 35 e 95, ecc…

“problema”: è l’intera famiglia di problemi (calcolo del MCD di qualsiasi coppia di numeri);

“istanza di problema”: ciascuno dei casi specifici ottenuti fissando due particolari valori.

Un algoritmo risolve un problema se per qualunque istanza del problema esso produce in un tempo finito la soluzione desiderata, ovvero un certo risultato (dato in uscita, output).

 ALGORITMI: IMPORTANZA DELL’INFORMATICA

L’idea di algoritmo inizialmente era importante per i matematici. Con l’informatica il termine “algoritmo” ha iniziato a diffondersi. Se per ottenere un certo risultato (risolvere un certo problema) esiste un procedimento infallibile, che può essere descritto in modo non ambiguo fino ai dettagli, e conduce sempre all’obiettivo desiderato in un tempo finito, allora esistono le condizioni per affidare questo compito a un computer; semplicemente introducendo l’algoritmo in questione in un programma (software) scritto in un opportuno linguaggio comprensibile al calcolatore (linguaggio di programmazione).

Imparare gli algoritmi è utile in generale come procedimento per la risoluzione di problemi. Le istruzioni sintetiche per montare un mobile IKEA sono scritte in modo da non essere ambigue, sintetiche e efficaci: sono esempi di algoritmi. Il progetto da parte di un insegnante di una esercitazione in classe può beneficiare enormemente dalla padronanza del processo di sviluppo di algoritmi.

Il processo di sviluppo di algoritmi come metodo per migliorare le proprie capacità di affrontare e risolvere problemi di carattere generale (ad esempio in ambito educativo).

 LINGUAGGI PER DESCRIVERE ALGORITMI

Come si progetta un algoritmo? Un algoritmo viene tipicamente descritto attraverso un diagramma di flusso (flowchart) o ricorrendo a uno pseudocodice.

Il teorema di Böhm – Jacopini afferma che qualunque algoritmo può essere implementato utilizzando tre sole strutture:

  1. SEQUENZA;
  2. SELEZIONE O STRUTTURA CONDIZIONALE;
  3. CICLO O ITERAZIONE. 1. SEQUENZA: è la normale elencazione di istruzioni perché vengono eseguite una di seguito all’altra nell’ordine in cui sono state scritte dal programmatore:

istruzione 1 seguita da ….

Istruzione 2 seguita da ….

Istruzione 3 seguita da ….

ESEMPIO: (Problema) dato un valore letto da tastiera (input), moltiplicato per 5 e sommargli 3, e produrre tale risultato come output.

  1. Ricevere da tastiera un valore e lo assegno alla variabile x;
  2. Moltiplico x per 5 (sia Z il risultato): Z X*
  3. Sommo 3 a (sia Y il risultato): Y Z+
  4. Visualizzo su schermo Y

L’algoritmo è costituito da una sequenza di 4 istruzioni.

Problema: leggo da tastiera un numero, se è < 0 ripeto la lettura, fino a quando il numero letto di diventa positivo. Calcolo quindi la sua radice quadrata e la visualizzo sullo schermo

  1. DO ricevo da tastiera un valore e lo assegno a x While (x<0);
  2. Y radice quadrata i x “assegna Y il valore della radice quadrata di x”;
  3. Visualizza Y su schermo.

ESERCIZI SU ALGORITMI

Problema: scrivere un algoritmo per calcolare la media dei voti di N esami i voti vengono letti da tastiera

Nel caso di 3 voti:

  • Leggo da tastiera il primo voto e lo assegno alla variabile somma;
  • Leggo il 2° voto e lo aggiungo a somma: somma somma + secondo voto ( la freccia significa assegnazione)
  • Leggo il 3° voto e lo aggiungo a somma: somma + 3° voto
  • Eseguo somma diviso 3 e scrivo su video il risultato.

Generalizzo a N voti: uso la struttura “iterazione”:

  • Somma 0
  • Do Leggo un voto da tastiera e lo assegno alla variabile voto Somma somma + voto << aggiungo a somma il valore voto >>
  • While (ho letto N voti);
  • Scrivo su video il valore di somma diviso N.

Come faccio a sapere quando ho letto N voti? Utilizzo una variabile contatore di voti ContaVoti. L’algoritmo finale diventa il seguente:

  • Somma 0 << all’inizio la somma è zero>>
  • ContaVoti 0 << all’inizio non ho letto ancora nessun voto>>
  • DO Leggo voto da tastiera e lo assegno alla variabile Voto Somma somma + voto << incremento Somma del valore del voto appena letto>> ContaVoti ContaVoti +1 << incremento il Contatore ContaVoti di 1>>
  • While (ContaVoti < N)
  • Scrivo su video il valore di somma diviso N

Problema: è data un’immagine greyscale di dimensione 1000x800, impostare un algoritmo che a tutti i pixel della prima riga dell’immagine con valore di grigio inferiore a 50 assegna il valore 0.

Supponiamo che l’immagine sia già memorizzata in una variabile, ad esempio V [1000, 800] una matrice di 1000 x 800 pixel greyscale.

Il pixel i-esimo della prima riga dell’immagine è quindi V [i, 1].

Per accedere a tutta la 1° riga occorre scorrere V [i, 1] con la variabile i che varia da 1 a 1000.

Bozza di algoritmo: introduciamo la variabile intera i per contare i pixel, che utilizziamo come indice del pixel della prima riga della matrice

i 1 << considero il primo pixel>>

DO

IF (V [ i , 1]< 50) THEN V [ i, 1] 0

<< se il pixel i-esimo ha valore <50, il suo valore viene riassegnato a 0>>

i i+1 << passo al pixel successivo incremento i >>

WHILE ( i <= 1000)

Si noti che se il pixel i-esimo non è <50 allora non viene eseguita nessuna operazione su di esso e si passa direttamente al pixel successivo ( il valore di i viene incrementato di 1).

LINGUAGGI DI PROGRAMMAZIONE

Una volta scritto l’algoritmo, nel caso di esecuzione da parte di un computer, occorre tradurlo in un programma software, scritto utilizzando un linguaggio di programmazione, ovvero in un linguaggio che può essere tradotto automaticamente in linguaggio macchina (comprensibile al computer e quindi eseguibile)

ALGORITMO

LINGUAGGIO

NATURALE

LINGUAGGIO DI

PROGRAMMAZIONE

LINGUAGGIO

MACCHINA

Un programma scritto in un linguaggio di programmazione viene tradotto da speciali programmi (compilatori e interpreti) in un programma equivalente ma scritto in linguaggio macchina, che così può essere compreso ed eseguito dal computer.