fase di programmazione

Download Report

Transcript fase di programmazione

ECDL MODULO 1.0
DAL PROBLEMA AL PROGRAMMA
Prof. Papi Serena
Concetto di Algoritmo
Risoluzione di Problemi
1.FASE DI ANALISI: Individuare il problema cioè capire che tipo di
risultato vogliamo.
2.FASE DI PROGETTAZIONE: Individuare una soluzione del problema
cioè definire una delle possibili soluzioni e scegliere quella ottimale.
3.STESURA DELL’ALGORITTMO: Generare una soluzione del problema
che sia effettiva cioè dare la descrizione ordinata di tutti i passi che sono
necessari ad un "esecutore" per ottenere la soluzione.
Definizione di Algoritmo:
Dato un problema, un algoritmo è una procedura, cioè una
sequenza ordinata e finita di passi, che può essere eseguita da un
esecutore in modo da risolvere il problema dato.
La procedura di risoluzione di un dato problema consiste nel prendere alcuni
dati iniziali (input) relativi al problema e nel fornire un risultato (output) che
risolve quest’ultimo.
Esempio1 di algoritmo: Instructions to go to the Plaza Hotel, in Paris
1. take the Vivier Merle Boulevard;
2. turn on the right and arrive on the Servient Street;
3. go ahead into the Victor Augagner quay
4. turn on your left
5. walk ahead until you reach the hotel
Esempio2 di algoritmo: Spaghetti all'arrabbiata
Ingredienti: (per 6 persone) spaghetti g 500 - polpa di pomodoro fresco g 400 cipolla mondata g 30 - olive nere - capperi - peperoncino piccante - basilico - olio
d'oliva – sale.
Lessate gli spaghetti in abbondante acqua salata. Intanto, in una larga casseruola,
fate riscaldare 3 cucchiaiate d'olio, insaporendolo con la cipolla tritata, un
peperoncino intero, una decina di olive e una cucchiaiata di capperi. Unite quindi la
polpa di pomodoro e fate cuocere il tutto per 5'. Scolate la pasta al dente e fatela
saltare velocemente nel sugo, poi trasferitela in una terrina e servitela guarnita con
basilico fresco.
Esempio3 di algoritmo: La costruzione di un kit di montaggio:
- Procuriamo il kit e gli strumenti;
- Apriamo la scatola;
- Leggiamo le istruzioni;
- Mettiamo insieme i pezzi seguendo le istruzioni in ordine.
Proprietà caratterizzanti un algoritmo
Non ambiguo: ogni passo deve essere elementare e non ambiguo. Devono essere
evitate contraddizioni. Il significato di ogni istruzione deve essere chiaro per
chiunque esegua l'algoritmo.
Finito: la sequenza di passi deve essere finita (numero finito di passi).
Generale: un algoritmo risolve una classe di problemi: la descrizione
dell'algoritmo non cambia quando cambiano i dati. Un algoritmo è quindi
indipendente dai dati in ingresso.
Eseguibile: le istruzioni possono essere eseguite dal risolutore.
Completo: deve considerare tutti i casi possibili
Corretto: un algoritmo è corretto se la soluzione calcolata è quella per cui è
stato elaborato, senza che ci siano errori in ogni singolo passo.
Efficiente: un algoritmo è efficiente se la soluzione corretta è calcolata
utilizzando la minore quantità di risorse fisiche (tempo, memoria, tempo di CPU)
Per descrivere gli algoritmi degli esempi precedenti abbiamo usato un
linguaggio naturale. Occorre sapere che i linguaggi si distinguono in 2
categorie:
Linguaggi Naturali
Linguaggi che hanno regole
ma non univocamente
interpretabili
Linguaggi Formali
(o linguaggi di progetto)
linguaggi che hanno regole
univocamente interpretabili
Si descrive un algoritmo cercando di sintetizzare il più possibile la sua
sequenza di passi. La descrizione avviene mediante :
• pseudo-codice (cioè un linguaggio di progetto), oppure
• diagramma di flusso o diagrammi a blocchi (o flow chart) .
I diagrammi di flusso permettono di descrivere in modo grafico le azioni che
costituiscono un algoritmo e il loro flusso di esecuzione.
Ogni azione elementare è rappresentata da un blocco.
Esistono 4 tipi di blocchi.
I diagrammi di flusso
Istruzioni di inizio/fine
algoritmo
Operazioni di Lettura (dati in input)
e operazioni di scrittura (dati in output)
Operazioni / Azioni
da eseguire
Istruzioni condizionali
Descrivere, mediante diagramma di flusso e mediante pseudocodice, un
algoritmo che determini il massimo tra due numeri letti in input.
Inizio
Leggi X
Leggi Y
Se (X > Y) allora
Stampa X
altrimenti
Stampa Y
Fine se
Fine
I Linguaggi
Affinché una macchina riesca a
comprendere ed eseguire i passi
specificati da un algoritmo, si deve
effettuare
la
fase
di
programmazione in cui l’algoritmo
deve essere prima codificato in un
opportuno programma scritto in un
linguaggio di programmazione di
alto livello.
I linguaggi di alto livello si distinguono in:
Linguaggi Procedurali: adatti alla risoluzione di problemi numerici, in cui occorre
pensare come risolvere un problema scomponendolo in sottoproblemi o procedure
(C, Fortran, Pascal…)
Linguaggi Non Procedurali: programmazione in cui il flusso delle informazioni
non è “rigido”, “prevedibile” ma varia a seconda degli eventi generati dall’azione
dell’utente sugli oggetti (Java, C++).
La macchina comprende solo il Linguaggio macchina (cioè istruzioni in codice
binario) che è invece un linguaggio di basso livello e quindi serve un
traduttore che traduce le istruzioni del linguaggio ad alto livello in istruzioni in
linguaggio macchina.
Esistono due tipi di Traduttori:
Interpreti: traducono un’istruzione alla volta e ogni volta che viene eseguito il
programma.
Compilatori: traducono l’intero programma producendo un file eseguibile (o programma
oggetto) che viene eseguito direttamente.
La rappresentazione dei numeri
Sistema Decimale: Sistema di numerazione posizionale in cui ogni cifra (0-9)
del numero assume un valore in base alla “posizione” in cui si trova:
221 = 2 x 100 + 2 x 10 + 1 x 1
=2 x 102 + 2 x 101 + 1 x 100
Ogni numero si esprime come la somma dei prodotti di ciascuna cifra per la
base elevata all’esponente che rappresenta la posizione della cifra.
La notazione posizionale può essere usata con qualunque base creando così
differenti sistemi di numerazione.
La numerazione decimale utilizza una notazione posizionale basata su 10 cifre
(da 0 a 9) e sulle potenze del 10.
In informatica si utilizza il Sistema di numerazione binario.
Il sistema di numerazione binario utilizza una notazione posizionale basata su 2
cifre (0 e 1) e quindi sulle potenze di 2.
Il numero 1001 in base 2 può essere rappresentato esplicitamente come:
10012 = 1 x 23 +0 x 22 + 0 x 21 + 1 x 20 = 910
Cambiamento di base
Per convertire un numero dal sistema binario (base2) al sistema decimale
(base10) è sufficiente rappresentarlo esplicitamente:
11012 =1 x 23 +1 x 22 + 0 x 21 + 1 x 20 = 1310
Per convertire un numero decimale nel sistema binario (base 2) occorre
trovare tutti i resti delle successive divisioni del numero per la base 2.
Ad esempio si vuole trovare la rappresentazione in binario del numero 210
basterà dividere 210 per la base 2 via via ……
I Connetivi Logici
(Algebra di Boole)
NOT
Nell’algebra di Boole si fa uso di predicati
che possono assumere solo due possibili
valori Vero o Falso (0/1 o Acceso/Spento).
Vi sono 3 operazioni fondamentali:
P1
Not P1
0
1
1
0
OR
AND
P1
P2
P1 and P2
P1
P2
P1 or P2
0
0
1
1
0
1
0
1
0
0
0
1
0
0
1
1
0
1
0
1
0
1
1
1
La rappresentazione dei caratteri
Per poter rappresentare le informazioni è necessario utilizzare sequenze di bit.
Utilizzando due bit si possono rappresentare quattro informazioni diverse:
00
01
10
11
Il processo che fa corrispondere ad una informazione una configurazione di bit
prende il nome di codifica dell’informazione.
In generale, con n bit si possono rappresentare 2n differenti informazioni.
8 bit = 1 Byte
256 valori differenti
Si è valutato che in totale servono 220 caratteri circa: 52 lettere alfabetiche
maiu./min. - 10 cifre (0, 1, …, 9) - Segni di punteggiatura (, . ; : ! ” ? ’ ^ \ …) Simboli matematici (+, -, ´ , ±, {, [, >, …) - Caratteri accentati (à, è, ì, ò, ù, ç, ñ, ö,
...) - Altri segni grafici (©, ¬, , °, @, …)
Si pone quindi la necessità di codificare in numeri binari almeno 220 caratteri.
La sequenza di bit necessaria a rappresentare 220 simboli deve essere
composta da almeno 8 bit e prende il nome di CODICE.
I codici standard sono:
• EBCDIC codice a 8 bit, rappresenta 256 caratteri
• ASCII, codice a 8 bit, rappresenta 256 caratteri.
• UNICODE, 16 bit per carattere da cui 65536 simboli. Ora codifica fino a 21
bit (milioni di caratteri)
“Computer” in ASCII diventa:
C=67=01000011,
o=111=01101111,
m=109=001101101,
p=112=01110000,
u=117=01110101,
t=116=01110100,
e=101=01100101,
r=114=01110010.
01000011- 01101111- 01101101- 11100000-01110101-01110100-01100101- 01110010
Le immagini digitali
Processo
di
acquisizione
Un’immagine per essere elaborata da un PC deve essere digitalizzata cioè
discretizzata.
Esistono due tipologie di immagini digitali: Immagini Bitmap o Raster e
Immagini vettoriali.
Le immagini Bitmap o Raster
Le immagini Vettoriali