BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio...

25

Transcript of BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio...

Page 1: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.
Page 2: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

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.

Page 3: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

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

Page 4: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

REGOLE SINTATTICHE

Testa del programmaHeader

Programma

BLOCCO .

PROGRAM

………………………………...

BEGIN …………………...END.

PROGRAM identificatore ( identificatore ;)

,

PROGRAM IpotTrianRett (input, output, ...);

Page 5: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

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.

Page 6: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

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)

Page 7: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

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.

Page 8: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

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.

Page 9: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

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

Page 10: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

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

Page 11: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

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)

Page 12: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

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)

Page 13: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

COSTANTIUn parametro che non varia durante l’esecuzione del programma

CONST identificatori ;costante=

CONST Scala=3; Spazio=‘ ‘; VelocitaLuce=3E+08; PiGreco=3.145

Page 14: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

VARIABILIUn parametro che può variare durante l’esecuzione del programma

VAR identificatori ;type:

,

VAR Lato1, Lato2 : real; Numero : integer; Stringa : char;

Page 15: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

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.

Page 16: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

ALLOCAZIONE IN MEMORIA

Scala 3

Lato1 ??E??

Lettera ?????

Numero ?

CONSTScala=3;

VARLato1 : real; Lettera : char; Numero: integer; {ipotenusa }

BEGIN

END

Page 17: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

INTRODUZIONE DATI

read variabile( )

, readln

ATTENZIONE !!! Introdurre i dati così come definiti dalla variabile

Page 18: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

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

Page 19: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

ISTRUZIONI DI ASSEGNAZIONE

variabile ;espressione:=

Assegnare un valore ad una variabile a seguito di una elaborazione.

Es.Int1:=7 DIV 3;Int2:=Int1*2;

Page 20: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

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

Page 21: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

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)

Page 22: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

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)

Page 23: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

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.

Page 24: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

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)

Page 25: BREVE STORIA DELLALGORITMO Da dove proviene il termine algoritmo? Logaritmo ? Algorismo ? Dal Medio Evo : maniera di fare larimetica usando i numerali.

{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)