BREVE STORIA DELL’ALGORITMO
Da dove proviene il termine algoritmo?
Logaritmo ?
Un anagramma.
Algorismo ?
Dal Medio Evo : maniera di fare l’arimetica
usando i numerali arabi.
Algiros + arithmos ?
Dal greco: Complesso + numero
Abu Ja’Far Mohammed Ibn Mûsa Al-Khovârizm
(825 d.C.)
Padre di Ja’Far
Mohammed
Figlio di Moses
Nativo di Kovarism (odierna Khiva (Russia))
Autore del famoso “Kitab Al Jabr W’Al-Muqabala”
Regole di accorpamento e riduzione
REGOLE SINTATTICHE
Programma
Testa del programma
Header
BEGIN
…………………...
END.
PROGRAM
………………………………...
PROGRAM
identificatore
.
BLOCCO
(
identificatore
)
,
PROGRAM
IpotTrianRett
(input, output,
...);
;
PROGRAM IpotTrianRett(input, output);
{calcolo ipotenusa del triangolo
rettangolo}
{moltiplicata per un fattore di scala}
CONST
Scala=3;
VAR
Lato1, {primo lato del triangolo}
Lato2, {secondo lato del triangolo}
Ipotenusa: real; {ipotenusa }
BEGIN
writeln('Il fattore di scala e''= ', Scala:3);
write('Dammi il primo lato ');
readln(Lato1);
write('Dammi il secondo lato ');
readln(Lato2);
Ipotenusa:=sqrt(sqr(Lato1)+sqr(Lato2))*Scala;
writeln('Ipotenusa del triangolo rettangolo
Ipotenusa:7:3);
readln
END.
= ',
IDENTIFICATORI
Gli identificatori standard vengono messi tutti in minuscolo.
Es.
NomeDelProgramma(input, output, File1, ….)
È previsto l’uso di una
periferica di input
È previsto l’uso di una
periferica di output
È previsto l’uso di un
file denominato File1
N.B. Gli identificatori non possono cominciare con un numero
(33ident) né contenere caratteri diversi da lettere o numeri (a_prov)
BLOCCO
CONST
Scala=3;
Definizione costanti
Definizione variabili
BEGIN
Istruzioni
BEGIN
writeln('Il fattore di scala e'’=', Scala:3);
write('Dammi il primo lato ');
readln(Lato1);
write('Dammi il secondo lato ');
readln(Lato2);
Ipotenusa:=sqrt(sqr(Lato1)+sqr(Lato2))*Scala;
writeln('Ipotenusa del triangolo rettangolo
readln
END.
VAR
Lato1,
Lato2: real;
Ipotenusa: real;
END
.
= ’,
Ipotenusa:7:3);
ALCUNE NOTE E OSSERVAZIONI
Le parentesi  …...  si usano per delimitare i commenti
writeln(…, …, .) dopo la scritta va a capo
write(…, …, .) dopo la scritta non va a capo
N.B. Terminare una sequenza di write sempre con un writeln
Ogni dialetto Pascal ha una dimensione del campo
dei numeri di default quindi se non dichiarata usa quella.
N.B. Nel Turbo Pascal questa dimensione vale 1. Quindi write( 3, 2, 5) sarà mostrato come 325.
Le stringhe vanno messe tra apici ‘…stringaaa…’
Se nella stringa è necessario mettere un apice allora se ne scrivono due
‘io l’’avevo detto’
OPERATORI NUMERICI
+
addiziona numeri interi e reali
-
sottrae numeri interi e reali
*
moltiplica
/
divide numeri reali
DIV
divide i numeri interi
MOD
resto della divisione tra interi
NUMERI INTERI E REALI
La divisione di due numeri può essere eseguita da
DIV se i numeri da dividere sono interi e il risultato è posto in una
variabile intera
/ se i numeri da dividere sono interi o reali e il risultato è posto in
una variabile reale
I numeri reali possono essere rappresentati dalle notazioni
FIXED POINT
es. 75.351 (almeno una cifra prima del .)
FLOITING POINT
es. 75351E-3
N1, N2, intero :integer;
R1, R2, reale:real;
N1=3
N2= 12
R1= 3.00
R2= 12.00
intero= N1 DIV N2= 0
intero= N1 DIV R2= non ammesso
intero= N1 / N2= non ammesso
intero= N1 / R2= non ammesso
reale= N1 DIV N2= 0.00
reale= N1 DIV R2= non ammesso
reale= N1 / N2= 0.25
reale= N1 / R2= 0.25
reale= R1 / N2= 0.25
(corso\lezioni Mod A\esercizi\cap2\Division)
reale= R1 / R2= 0.25
SCRITTURA INTERI E REALI
ALCUNI ESEMPI
write(3+100:2)
write(3+100:1)
write(3+100:10)
write(3.1456:2)
write(3.1456:1)
write(3.1456:10)
write(0.0000009876:9)
write(3.1456:2:4)
write(3.1456:1:3)
write(3.1456:10:2)
write(-0.0000009876:9:3)
write(-0.0000009876:9:13)
|103|
|103|
|…….103|
| 3.1E+00|
| 3.1E+00|
| 3.146E+00|
| 9.88E-07|
|3.1456|
|3.146|
| 3.15|
| -0.000|
|-0.00000098760|
(Formati)
COSTANTI
Un parametro che non varia durante l’esecuzione del programma
CONST
identificatori
=
CONST
Scala=3;
Spazio=‘ ‘;
VelocitaLuce=3E+08;
PiGreco=3.145
costante
;
VARIABILI
Un parametro che può variare durante l’esecuzione del programma
VAR
identificatori
:
,
VAR
Lato1, Lato2 : real;
Numero : integer;
Stringa : char;
type
;
PROGRAM IpotTrianRett(input, output);
{calcolo ipotenusa del triangolo
rettangolo}
{moltiplicata per un fattore di scala}
CONST
Scala=3;
VAR
Lato1, {primo lato del triangolo}
Lato2, {secondo lato del triangolo}
Ipotenusa: real; {ipotenusa }
BEGIN
writeln('Il fattore di scala e''= ', Scala:3);
write('Dammi il primo lato ');
readln(Lato1);
write('Dammi il secondo lato ');
readln(Lato2);
Ipotenusa:=sqrt(sqr(Lato1)+sqr(Lato2))*Scala;
writeln('Ipotenusa del triangolo rettangolo = ',
readln
END.
Ipotenusa:7:3);
ALLOCAZIONE IN MEMORIA
CONST
Scala=3;
VAR
Lato1 : real;
Lettera : char;
Numero: integer; {ipotenusa }
Scala
3
Lato1
??E??
Lettera
?????
Numero
?
BEGIN
END
INTRODUZIONE DATI
read
(
variabile
)
readln
,
ATTENZIONE !!! Introdurre i dati così come definiti dalla variabile
ESEMPI LETTURA DATI
VAR
Lato1: real;
Int1, Int2 : integer;
readln(Int1, Lato1, Int2)
73 98.56 54 <eoln>
73
Int1=73 Lato1=98.56 Int2=54
98.56 <eoln>
54 <eoln>
Int1=73 Lato1 =98.56 Int2=54
73 98.56 54 Ciao <eoln>
Int1=73 Lato1 =98.56 Int2=54
73.1
98.56
54 <eoln>
Error
T73
98.56
54 <eoln>
Error
ISTRUZIONI DI ASSEGNAZIONE
variabile
:=
espressione
;
Assegnare un valore ad una variabile a seguito di una
elaborazione.
Es.
Int1:=7 DIV 3;
Int2:=Int1*2;
VAR
Int1:
Real1:
Caratt1:
integer;
real;
char;
Int1:=73
Lato1:=98.56
Caratt1:=‘A’
Int1:=73 DIV 4
Lato1:=98.56 DIV 3 Error
Caratt1:=‘7’
Error
Int1:=73.01
Error
Lato1:=98A
Caratt1:=‘Ciao’ Error
Int1:=73/2
Lato1:=98+Caratt1
Caratt1:=‘A’+2
Error
Error
Error
Maxint = 32767
+/14
13
12
11
10
9
8
7
2
2
2
2
2
2
2
2
2
16384 8192 4096 2048 1024 512 256 128
6
5
4
2
64
3
2
32
2
2
16
1
2
8
0
2
4
2
2
(Limiti)
1
32767
Esercizio
Dire quale è l’output del seguente programma:
PROGRAM Test(input,output);
CONST
A=130;
B=1000;
VAR
Somma, Prod, Potenza : integer;
BEGIN
Somma:=A+B;
Prod:=(A+B)*Somma;
writeln('Valori letti: ', A:7, 'e ', B:7);
writeln;
writeln('Somma = ', Somma:7);
writeln('Prodotto = ', Prod:7);
readln
END.
(test)
Esercizio
Assegnate le seguenti variabili
A, B, C
intere
X, Y, Z
reali
M, N, O
caratteri
eseguire le seguenti operazioni
A diviso B
M+N
O+A
X diviso C
Y diviso Z
trovare il resto della divisione di A per C
trovare il resto della divisione di B per Y
Mostrare i risultati delle operazioni o segnalare quelle eventualmente errate.
MODO BATCH
Un programma che opera senza interagire con l’utente.
Esempio un programma che legge i dati da un file e li scrive su un altro.
A questo scopo è necessario utilizzare delle variabili per riferirsi ai nomi dei file adoperati.
Esempio
Sia Dat il nome del file da cui leggere i dati di input
Sia Risultat il nome del file su cui scrivere i dati di output
VAR
Dati, Risultati :
Int1:
Real1:
Caratt1:
text;
integer;
real;
char;
Per leggere da un file bisogna aprirlo in lettura
reset(Dati)
Per scrivere su un file bisogna aprirlo in scrittura
rewrite(Risultati)
{legge dal file Dati due numeri reali Re1 e Re2 e scrive
la loro somma Somma e il loro prodotto Prod in un file Risultat}
PROGRAM ProvaFiles(input,output,Dat,Risult);
VAR
Dat, Risult: text;
{esempio di lettura e scrittura di files}
Re1, Re2, Somma, Prod: real;
BEGIN
assign(Dat,'C:\TP\ESEMPI\MODA\DATI.TXT');
assign(Risult,'C:\TP\ESEMPI\MODA\RISULTAT.TXT');
reset(Dat);
rewrite(Risult);
readln(Dat, Re1, Re2);
Somma:=Re1+Re2;
Prod:=Re1*Re2;
writeln('Valori letti: ', Re1:7:5, 'e ', Re2:7:5);
writeln;
writeln('Somma= ', Somma:7:5);
writeln('Prodotto= ', Prod:7:5);
writeln(Risult, 'Valori letti: ', Re1:7:5, ' e ', Re2:7:5);
writeln(Risult, ' Somma e Prodotto ', Somma:7:5, ' e ', Prod:7:5);
close(Risult);
readln
END.
(ProvaFile)
Scarica

program - Virgilio