




Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
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
1 / 8
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!





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.
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
Distinguiamo la rappresentazione per:
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:
Continuità dei codici delle successioni:
NB : non è fissa la relazione tra maiuscole e minuscole o fra i caratteri non alfabetici
Codifica dei caratteri
Alfabeto costituito da 16 simboli:
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
Progetto del software: di solito comporta i seguenti passi:
Un algoritmo per la risoluzione di un problema è una sequenza di passi discreti che producono un problema:
Esempio: procedimenti per calcolare il risultato di espressioni aritmetiche o algebriche.
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à.
Proprietà necessarie senza le quali un algoritmo non può essere definito tale:
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).
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).
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:
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.
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
Problema: scrivere un algoritmo per calcolare la media dei voti di N esami i voti vengono letti da tastiera
Nel caso di 3 voti:
Generalizzo a N voti: uso la struttura “iterazione”:
Come faccio a sapere quando ho letto N voti? Utilizzo una variabile contatore di voti ContaVoti. L’algoritmo finale diventa il seguente:
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)
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.