breve storia dellalgoritmo da dove proviene il termine algoritmo? logaritmo ? algorismo ? dal medio...
TRANSCRIPT
BREVE STORIA DELL’ALGORITMO
Da dove proviene il termine algoritmo?
Logaritmo ?
Algorismo ? Dal Medio Evo : maniera di fare l’arimetica usando i numerali arabi.
Algiros + arithmos ? Dal greco: Complesso + numero
Un anagramma.
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
Testa del programmaHeader
Programma
BLOCCO .
PROGRAM
………………………………...
BEGIN …………………...END.
PROGRAM identificatore ( identificatore ;)
,
PROGRAM IpotTrianRett (input, output, ...);
PROGRAM IpotTrianRett(input, output);{calcolo ipotenusa del triangolo rettangolo}{moltiplicata per un fattore di scala}
CONSTScala=3;
VARLato1, {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); readlnEND.
IDENTIFICATORI
Gli identificatori standard vengono messi tutti in minuscolo.
Es.NomeDelProgramma(input, output, File1, ….)
È previsto l’uso di unaperiferica di input
È previsto l’uso di unaperiferica di output
È previsto l’uso di unfile denominato File1
N.B. Gli identificatori non possono cominciare con un numero(33ident) né contenere caratteri diversi da lettere o numeri (a_prov)
BLOCCO
Definizione costanti
CONSTScala=3;
Definizione variabili VARLato1, Lato2: real;Ipotenusa: real;
BEGIN Istruzioni
.END
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); readlnEND.
Le parentesi …... si usano per delimitare i commenti
writeln(…, …, .) dopo la scritta va a capo
write(…, …, .) dopo la scritta non va a capo
Ogni dialetto Pascal ha una dimensione del campodei numeri di default quindi se non dichiarata usa quella.
Le stringhe vanno messe tra apici ‘…stringaaa…’Se nella stringa è necessario mettere un apice allora se ne scrivono due
‘io l’’avevo detto’
ALCUNE NOTE E OSSERVAZIONI
N.B. Terminare una sequenza di write sempre con un writeln
N.B. Nel Turbo Pascal questa dimensione vale 1. Quindi write( 3, 2, 5) sarà mostrato come 325.
OPERATORI NUMERICI
* moltiplica
/ divide numeri reali
DIV divide i numeri interi
MOD resto della divisione tra interi
+ addiziona numeri interi e reali
- sottrae numeri interi e reali
NUMERI INTERI E REALI
FIXED POINT es. 75.351 (almeno una cifra prima del .)
FLOITING POINT es. 75351E-3
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
N1, N2, intero :integer;R1, R2, reale:real;
N1=3N2= 12R1= 3.00R2= 12.00intero= N1 DIV N2= 0intero= N1 DIV R2= non ammessointero= N1 / N2= non ammessointero= N1 / R2= non ammesso
reale= N1 DIV N2= 0.00reale= N1 DIV R2= non ammessoreale= N1 / N2= 0.25reale= N1 / R2= 0.25reale= R1 / N2= 0.25reale= R1 / R2= 0.25 (corso\lezioni Mod A\esercizi\cap2\Division)
SCRITTURA INTERI E REALI ALCUNI ESEMPI
write(3+100:2) |103|write(3+100:1) |103|write(3+100:10) |…….103|write(3.1456:2) | 3.1E+00|write(3.1456:1) | 3.1E+00|write(3.1456:10) | 3.146E+00|write(0.0000009876:9) | 9.88E-07|write(3.1456:2:4) |3.1456|write(3.1456:1:3) |3.146|write(3.1456:10:2) | 3.15|write(-0.0000009876:9:3) | -0.000|write(-0.0000009876:9:13) |-0.00000098760|
(Formati)
COSTANTIUn parametro che non varia durante l’esecuzione del programma
CONST identificatori ;costante=
CONST Scala=3; Spazio=‘ ‘; VelocitaLuce=3E+08; PiGreco=3.145
VARIABILIUn parametro che può variare durante l’esecuzione del programma
VAR identificatori ;type:
,
VAR Lato1, Lato2 : real; Numero : integer; Stringa : char;
PROGRAM IpotTrianRett(input, output);{calcolo ipotenusa del triangolo rettangolo}{moltiplicata per un fattore di scala}
CONSTScala=3;
VARLato1, {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); readlnEND.
ALLOCAZIONE IN MEMORIA
Scala 3
Lato1 ??E??
Lettera ?????
Numero ?
CONSTScala=3;
VARLato1 : real; Lettera : char; Numero: integer; {ipotenusa }
BEGIN
END
INTRODUZIONE DATI
read variabile( )
, readln
ATTENZIONE !!! Introdurre i dati così come definiti dalla variabile
VAR Lato1: real; Int1, Int2 : integer;
ESEMPI LETTURA DATI
readln(Int1, Lato1, Int2)
73 98.56 54 <eoln> Int1=73 Lato1=98.56 Int2=54
Int1=73 Lato1 =98.56 Int2=54
73 98.56 <eoln>
54 <eoln>
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;
VARInt1: integer;Real1: real;Caratt1: char;
Int1:=73 Lato1:=98.56 Caratt1:=‘A’
ErrorError
Int1:=73 DIV 4Lato1:=98.56 DIV 3Caratt1:=‘7’
Int1:=73.01 Lato1:=98A Caratt1:=‘Ciao’ Error
ErrorErrorInt1:=73/2
Lato1:=98+Caratt1 Caratt1:=‘A’+2 Error
Error
Maxint = 32767
+/-14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
2 2 2 2 2 2 2 2 2 2 2 2 2 2 216384 8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 1 32767
(Limiti)
PROGRAM Test(input,output);CONSTA=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);
readlnEND.
EsercizioDire quale è l’output del seguente programma:
(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 BATCHUn 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.
EsempioSia Dat il nome del file da cui leggere i dati di inputSia Risultat il nome del file su cui scrivere i dati di output
VARDati, Risultati : text;Int1: integer;Real1: real;Caratt1: char;
Per leggere da un file bisogna aprirlo in letturareset(Dati)
Per scrivere su un file bisogna aprirlo in scritturarewrite(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; 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); readlnEND.
{esempio di lettura e scrittura di files}
(ProvaFile)