TECNICHE DI PROGRAMMAZIONE
1
Descrivere in maniera non ambigua cosa deve fare il programma
POCO PRECISO
Es. Scrivere un programma per calcolare l’area di tre figure
geometriche (quadrato, triangolo, cerchio) e fare quindi la
somma delle aree.
PIU’ PRECISO
Es. Scrivere un programma per caricare e mostrare il lato del
quadrato, la base e l’altezza del triangolo, il raggio del cerchio,
calcolare l’area del quadrato,del triangolo e del cerchio,
mostrare i valori delle aree, fare la loro somma e mostrarle.
TECNICHE DI PROGRAMMAZIONE
2
Accertarsi che il problema sia risolvibile.
Test della frase
Indicare se la seguente frase è VERA o FALSA
"in queta frase ci sono tre erori"
FALSA
VERA
ALTRO
INDECIDIBILE
TECNICHE DI PROGRAMMAZIONE
3
Se il problema è risolvibile allora è sempre
possibile scrivere un algoritmo per trovare la
soluzione.
TECNICHE DI PROGRAMMAZIONE
4
Metodo successive approssimazioni.
1- Descrivere mediante frasi o diagrammi di flusso il problema.
LEGGI I DATI
CALCOLO AREA QUADRATO,
TRINGOLO E CERCHIO E MOSTRALI
SOMMA AREA QUADRATO,
TRINGOLO E CERCHIO E MOSTRA
Metodo successive approssimazioni.
2- Raffinare la descrizione usando un linguaggio più simile
al linguaggio di programmazione.
Leggi i valori per:
LatoQuadrato, BaseTriangolo, AltezzaTriangolo, RaggioCerchio
AreaQuadrato  LatoQuadrato x LatoQuadrato
AreaTriangolo  (BaseTriangolo x AltezzaTriangolo)/2
AreaCerchio  PiGreco x (Raggio)2
mostra AreaQuadrato, AreaTriangolo, AreaCerchio
SommaAree  AreaQuadrato + AreaTriangolo + AreaCerchio
mostra SommaAree
Metodo successive approssimazioni.
2- Scrivere il programma.
PROGRAM Area(input,output);
{calcolo aree quadrato, trinagolo, cerchio e sommale}
CONST
PiGreco=3,14;
VAR
LatoQuadrato, BaseTriangolo, AltezzaTriangolo, RaggioCerchio : integer;
AreaQuadrato, AreaTriangolo, AreaCerchio, SommaAree : real;
BEGIN
AreaQuadrato:= LaqoQuadrato* LaqoQuadrato;
AreaTriangolo:= BaseTriangolo* AltezzaTriangolo/2;
AreaCerchio:= PiGreco*sqr(RaggioCerchio);
writeln(‘Area Quadrato’, AreaQuadrato :5:2);
writeln(‘Area Triangolo’, AreaTriangolo :5:2);
writeln(‘Area Cerchio’, AreaCerchio :5:2);
writeln(‘Somma Aree ‘, SommaAree :6:2);
END.
TECNICHE DI TEST
TRACE - Si usano dati noti che producono risultati noti.
Limite: vale solo per i dati di test.
ASSERTION - Seguire passo passo l’algoritmo e verificare che
ogni passo sia logicamente coerente con i precedenti.
Limite: per algoritmi molto complessi è difficile da fare.
ON-LINE - Inserisci scritte di controllo per verificare la
correttezza dell’elaborazione.
Limite: vale solo per i dati usati nei test.
MANUTENZIONE - Si usano le scritte di controllo e commento.
1 - DEFINISCI IL PROBLEMA
no
E’ RISOLVIBILE?
si
LASCIA PERDERE O
RIDEFINISCI IL PROBLEMA
2 - PIANIFICA E RAFFINA UNA SEQUENZA DI AZIONI
no
SEMBRA CHE IL PROBLEMA SIA RISOLVIBILE ?
si
RIVEDI IL PUNTO 2
3 - SCRIVI E COMPILA IL CODICE SORGENTE
CI SONO ERRORI DI SINTASSI ?
si
RIVEDI IL PUNTO 3
no
4 - LANCIA IL PROGRAMMA
I RISULTATI SONO CORRETTI ?
no
RIVEDI IL PUNTO 4
si
5 - USA IL PROGRAMMA
SONO RICHIESTE ALTRE MODIFICHE ?
si
RIPARTI DAL PUNTO 1
USO DI PSEUDO-CODICE
Uno pseudo-codice è una scrittura informale di un programma o
di una sua parte a cui corrispondono eventuali istruzioni in un
linguaggio tipo Pascal (codice sorgente o source code).
Esempio 1 - Introduci tre caratteri e stampali in ordine inverso a
quello di inserimento.
Pseudo codice.
INPUT: leggi i valori del carattere1, carattere2 e carattere3 e
mostrali sul monitor.
OUTPUT: mostra sul monitor il carattere3, il carattere2, il carattere1
Source code.
PROGRAM InvertiCaratteri(input,output);
Introduci tre caratteri e stampali in ordine inverso a quello di
inserimento.
VAR
Carattere1,
Carattere2,
Carattere3:
Primo carattere.
Secondo carattere.
Terzo carattere.
char;
BEGIN
write(‘Introduci tre caratteri e poi premi Invio : ’;
readln(Carattere1, Carattere2, Carattere3);
writeln(‘I caratteri in ordine inverso sono: ‘, Carattere3, Carattere2,
Carattere3)
END.
Generalizzando potremmo definire un algoritmo per la lettura
dei dati, la loro elaborazione e la presentazione dei risultati.
Algoritmo per leggere, elaborare e mostrare.
leggi i valori dei dati
elabora i dati
mostra a video i risultati
Fine dell’algoritmo.
ESEMPI LETTURA DATI
VAR
Real1, Real2: real;
Int1, Int2 : integer;
Carattere: char;
readln(Int1, Int2, Real1, Real2, Carattere)
readln(Carattere, Int1, Int2, Real1, Real2)
LE STRINGHE
Una variabile di tipo stringa rappresenta un gruppo di caratteri messi
insieme con un qualche criterio.
Per definire le stringhe si usa la parola riservata
STRING.
STRING
[
VAR
Stringa1,
Stringa2: STRING[10];
costante
intera
]
E’ possibile definire un tipo per introdurre un indicatore di riferimento
invece di usare tipi anonimi, legati cioè a singole variabili.
TYPE
identificatore
TYPE
Stringa10 = STRING[10];
VAR
Stringa1, Stringa2: Stringa10;
=
tipo
;
Esempio
Programma per dare il benvenuto agli studenti del corso.
Pseudo-codice
Mostra la frase di benvenuto generale
Chiedi il nome dello studente
Mostra la frase di benvenuto usando il nome dello studente
PROGRAM BenvenutoAlCorso(input,output);
Questo programma dà il benvenuto ad ogni studente del corso di
Programmazione
CONST
NomeDocente = ‘Ernesto Burattini’;
MaxLungStringa = 50; massimo numero di caratteri permessi
TYPE
NomeTipo = STRING[MaxLungStringa];
VAR
NomeStud = NomeTipo;
BEGIN
writeln(‘Buongiorno’, il mio nome e’’, NomeDocente, ‘, ’);
writeln(‘Potrei sapere il nome dello studente seduto in prima fila
a destra?’);
readln(NomeStud);
writeln(‘Benvenuto al Corso di Programmazione ‘, NomeStud)
END.
Benven
ALCUNE FUNZIONI STANDARD
Ogni funzione è richiamata facendo riferimento al suo identificatore.
Ogni funzione deve avere un argomento.
funzione
identificatore
(
espressione
Ipotenusa:=sqrt(sqr(Lato1)+sqr(Lato2))
)
Nome
Funzione
Tipo
Argomento
Tipo
Risultato
abs
Valore
assoluto
dell’argo
mento
Quadrato
dell’argo
mento
Radice
quadrata
dell’argo
mento
Numerico
Come
ValAss=abs(-3)  3
l’argomento
Numerico
Come
Quadr=sqr(5)  25
l’argomento
Numerico
Reale
sqr
sqrt
Esempio
RadQuad=sqrt(16) )  4
Nome
Funzione
pred
Predecessore Carattere
dell’argomento
Carattere
PredCar=pred(‘c’)  b
succ
Successore
Carattere
dell’argomento
Carattere
SuccCar=pred(‘c’)  d
chr
Carattere il
Intero
cui valore
numerico è
l’argomento
Valore
Carattere
numerico il
cui carattere è
l’argomento
Carattere
Carattere=chr(65) )  A
ord
Tipo
Tipo
Argomento Risultato
Intero
Esempio
ValNum=ord(‘A’) )  65
CODIFICA CARATTERI
ASCII
American Standard Coded
Information Interchange
EBCDIC
Extended Binary Coded Decimal
Interchange Code
Se vogliamo sapere in binario come è codificato un certo carattere
è sufficiente applicare la funzione ord al carattere e quindi fare il
binario del numero decimale così ottenuto.
ord(‘A’)=65 -------- Binario(65)=01000001
Si noti che se chr(65)=‘A’ allora chr(ord(‘A’))=‘A’
Dec
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
Esad
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
50
51
52
53
54
55
56
57
58
59
5A
Simb
Dec
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
Esad
61
62
63
64
65
66
67
68
69
6A
6B
6C
6D
6E
6F
70
71
72
73
74
75
76
77
78
79
7A
Simb
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Poiché nel codice ASCII la differenza tra i codici delle maiuscole e
minuscole è costante, cioè:
[ord(‘a’)-ord(‘A’)]= [ord(‘b’)-ord(‘B’)]=….= [ord(‘z’)-ord(‘Z’)]
Allora è possibile scambiare la minuscole con le maiuscole con la
seguente istruzione:
Letter := chr(ord(Letter)+ord(‘A’)-ord(‘a));
Esercizio
spazio
a capo
Dato un testo, controllare che dopo (. Þ) o dopo (. ¶) il testo successivo
inizi con la maiuscola. Se non accade sostituire la minuscola con la
corrispondente maiuscola.
PROGRAMMAZIONE TOP-DOWN
- Dividere il problema in sotto problemi (quando possibile)
- Rappresentare graficamente la struttura del problema
- Assegnare ad ogni identificatore un nome legato al suo
significato. Il nome relativo (di una costante o variabile) non
deve cambiare nel corso del programma, non si deve cioè
chiamare con due nomi diversi lo stesso oggetto. Il valore delle
variabili però, pur se il significato resta lo stesso può cambiare
nel corso del programma.
Esempio
Definizione del problema
Dato il rapporto di cambio tra l’Euro e le monete europee,
supponiamo di dover fare un viaggio attraverso Italia, Francia e
Germania. Abbiamo disponibili 1000 Euro e spendiamo :
Lit 650.000 in Italia
FF 870 in Francia
DM 280 in Germania
Ci chiediamo quanti Euro restano a fine viaggio.
PSEUDO CODICE INIZIALE
•Calcolare la spesa in Euro in Italia
•Calcolare la spesa in Euro in Francia
•Calcolare la spesa in Euro in Germania
•Sommare tutte le spese in Euro
•Calcolare la differenza tra la spesa in Euro e la cifra iniziale
RAPPRESENTAZIONE GRAFICA
SpeseLit
SpeseFF
SpeseDD
LitEuro
FFEuro
DDEuro
SpeseLitEuro
SpeseFFEuro
SpeseDDEuro
CifraEuro
SpeseTotEuro
LitEuro
FFEuro
DDEuro
SpeseLit
SpeseFF
SpeseDD
CifraEuro
Resto
Viaggio
SpeseLitEuro
SpeseFFEuro
SpeseDDEuro
Calcola la
differenza
SpeseTotEuro
Introduci
valori del
cambio
Introduci
le spesein
Lit, FF, DD e
la cifra iniziale
in Euro
Trasforma
le spese in
Euro
Calcola la spesa
totale in Euro
Mostra il
risultato
I rapporti di cambio tra euro e Lit, FF e DD sono
Lit
1936,27
FF
1,955830258
DD
6,559580191
Scrivere il programma in PASCAL
Euro
Scarica

tecniche di programmazione