Gli algoritmi e i linguaggi di programmazione Pag. 1 Definizione di

Gli algoritmi e i linguaggi di programmazione
Pag. 1
Definizione di Algoritmo e Programma
Un ALGORITMO l'insieme delle istruzioni che risolvono un problema. L’algoritmo è un metodo per la
soluzione di un problema.
Siamo abituati a lavorare con gli algoritmi perché i problemi da affrontare, anche nella vita quotidiana
sono tanti.
Problemi
Soluzioni
Come si calcola l'area di un
rettangolo
Libro di Geometria
Come si fa una frittata
Libro di ricette
Come si sintonizza la televisione
Libretto di istruzioni
Istruzione per istruzione, è necessario:
¾
¾
¾
capire in cosa consiste la istruzione da eseguire
mettere in pratica l’istruzione
individuare la istruzione da eseguire successivamente
Svolgere queste operazioni significa ESEGUIRE l’ algoritmo. L’esecutore può essere:
¾
¾
un uomo, come per gli esempi precedenti
oppure una macchina, un computer. In questo caso l’algoritmo si chiama anche programma.
Ovviamente il linguaggio in cui sono scritte le istruzioni di un programma deve essere comprensibile
al computer che lo deve eseguire.
Un programma è quindi un algoritmo scritto per un computer
in un linguaggio ad esso comprensibile
Proprietà di un algoritmo
Solo un algoritmo ben fatto porta alla soluzione del problema. Un algoritmo deve quindi avere le
seguenti caratteristiche:
¾
¾
¾
¾
¾
deve avere un solo punto di inizio cioè deve essere chiaro quale è la istruzione da eseguire per
prima
una volta terminata la esecuzione di una istruzione deve essere univoca la istruzione da
eseguire successivamente cioè l’esecutore non deve avere dubbi sulla istruzione da eseguire
successivamente e, in caso di due alternativa possibili gli deve essere fornito un altrettanto chiaro
criterio per scegliere tra le due istruzioni
ogni istruzione che lo compone deve avere una durata limitata cioè ogni istruzione per quanto
complessa sia la sua esecuzione prima o poi deve terminare e l’esecutore deve poter passare
alla istruzione successiva
ogni istruzione che lo compone deve essere non ambigua cioè non deve prestarsi ad
interpretazioni differenti
ogni istruzione che lo compone deve essere elementare per l'esecutore cioè l’esecutore deve
poter associare alla istruzione le azioni da fare senza necessità di ulteriori spiegazioni
Un algoritmo può avere più punti di fine, se propone istruzioni alternative per risolvere il problema.
Ad esempio un algoritmo che “spiega” come effettuare una telefonata può terminare in modo diverso
in funzione se il numero chiamato è libero oppure occupato
Durante la stesura di un algoritmo non esistono istruzioni "ovvie" che si può pensare di omettere.
Se una istruzione non è presente, l’esecutore non la può aggiungere: se la istruzione era necessaria
la sua mancata esecuzione provocherà il non funzionamento dell’algoritmo. Questo punto è molto
importante nella stesura dei programmi perché il computer non ha iniziativa a differenza di un
esecutore uomo che potrebbe ovviare con il buon senso alla mancanza di una istruzione
A.S. 08-09 ©Rauch
Gli algoritmi e i linguaggi di programmazione
Pag. 2
La sequenza
Eseguire un algoritmo in sequenza significa eseguire tutte le istruzioni che compongono l’algoritmo
dalla prima fino all’ultima senza avere possibilità di scelta.
La sequenza è simile alla visita di una fiera seguendo un percorso obbligato: si visitano tutti gli spazi
espositivi senza saltarne nessuno.
Solo problemi particolarmente semplici possono essere risolti da una sequenza di istruzioni
Spegni la sveglia
Alzati
Lavati
Vestiti
Fai Colazione
Ascolta la radio
Esci di casa
Consideriamo ad esempio la sequenza di istruzioni
qui accanto.
E’ l’algoritmo “RISVEGLIO MATTUTINO” che
nessuno ha mai scritto ma che probabilmente tutti
eseguiamo da anni metodicamente in modo sempre
uguale tutte le mattine.
Ricordiamo che le istruzioni sono ordini da eseguire che obbligano l’esecutore ad eseguire, una
dopo l’altra, una serie di azioni.
L’algoritmo è discutibile ed è solo un esempio perché:
¾
¾
Il risveglio mattutino non è un vero problema (anche se qualcuno potrebbe pensare il contrario)
le istruzioni, sia pure ordinate in un modo più o meno ragionevole, obbligano tutti gli esecutori a
eseguire le stesse azioni
Nella vita quotidiana raramente si eseguono algoritmi in modo rigido. Infatti:
™ Anche se non è frequente, si può spegnere la sveglia dopo essersi alzati.
™ Invece di ascoltare la radio, qualcuno potrebbe voler vedere la televisione o leggere il
giornale.
™ Molti escono da casa digiuni e fanno colazione al bar o non la fanno per niente.
™ Non è detto che si debba fare colazione vestiti di tutto punto, qualcuno preferisce farla ancora
in pigiama.
™ Probabilmente però tutti si vestono prima di uscire di casa!
Un esecutore uomo può concepire questo algoritmo come un promemoria e comportarsi in modo più o
meno simile omettendo delle istruzioni o aggiungendone altre di sua iniziativa.
Quando l’esecutore è una macchina, che non pensa e non ha buon senso, è necessario che le
istruzioni di una sequenza siano ordinate in modo logico perché:
¾
¾
¾
nessuna istruzione può essere arbitrariamente aggiunta
o non eseguita
o eseguita in un ordine diverso da quello prescritto.
A.S. 08-09 ©Rauch
Gli algoritmi e i linguaggi di programmazione
Pag. 3
Il Linguaggio macchina
Il microprocessore comprende solo istruzioni in LINGUAGGIO MACCHINA: un programma
composto da numeri binari.
è
Il primo numero che compone l’istruzione si chiama Codice Operativo.
Gli altri numeri che eventualmente compongono l’istruzione si chiamano operandi
Al Fetch la CPU legge il codice operativo dell’istruzione e nella fase di Decode comprende:
¾ di quale istruzione si tratta
¾ se ci sono operandida leggere
Dopo la eventuale lettura degli operandi la CPU passa alla fase di Execute.
Eseguita la istruzione la CPU fa Fetch del codice operativo della istruzione successiva e così via.
Per un programmatore quindi è difficile scrivere un programma in linguaggio macchina in quanto
dovrebbe conoscere il significato associato ad ogni singolo numero; inoltre è alto il rischio di
commettere errori.
I linguaggi di programmazione
I programmi vengono quindi scritti in un LINGUAGGIO INTERMEDIO, cioè in un linguaggio che pur
non essendo quello della macchina, non è neppure il linguaggio normale in cui il programmatore si
esprime.
In questa situazione per poter fare eseguire al microprocessore un programma scritto in un linguaggio
intermedio è necessario avere a disposizione un traduttore da quel linguaggio al linguaggio che il
microprocessore comprende.
B=3
H=5
AREA = B * H
Traduttore
Linguaggio
intermedio
Linguaggio
macchina
Il linguaggio più vicino al linguaggio macchina: l’ASSEMBLER
Le istruzioni dell’Assembler corrispondono grosso modo a quelle elementari della CPU, con il
vantaggio che, invece di usare i numeri le istruzioni si scrivono con delle paroline chiamate
mnemonici perché aiutano il programmatore a “ricordare” di che istruzione si tratta. Ogni CPU ha il
suo assembler. Famiglie di microprocessori possono avere lo stesso assembler.
Esempio:
La Cpu ha al suo interno i registri, aree di memoria in cui depositare i dati. I registri sono quasi
sempre contrassegnati con le lettere dell’alfabeto A B C etc. E’ possibile per la CPU eseguire
istruzioni di spostamento dei dati da un registro all’altro
Lo mnemonico per l’istruzione di spostamento è quasi sempre:
MOV ( dal verbo inglese to move = spostare ) oppure LOAD (dal verbo to load = caricare)
La sintassi per spostare il dato da un registro (sorgente del dato) ad un altro (destinazione del dato)
MOV registro destinazione , registro sorgente
L’istruzione MOV A , B significa: copia il contenuto del registro B nel registro A.
In questo modo il precedente valore contenuto in A viene distrutto.
Per invertire il contenuto dei registri A e B serve un terzo registro C in cui
“salvare” il contenuto precedente di A prima di copiare B in A. La terza
istruzione porta in B il contenuto di C, cioè il vecchio valore di A
MOV C , A
MOV A , B
MOV B , C
A.S. 08-09 ©Rauch
Gli algoritmi e i linguaggi di programmazione
Pag. 4
I Linguaggi Evoluti
Un linguaggio si definisce tanto più EVOLUTO quanto più è lontano da quello della macchina e
quanto più si avvicina a quello naturale in cui parla il programmatore.
Purtroppo gli autori dei linguaggi intermedi sono di madrelingua inglese. Imparare i linguaggi
intermedi, anche quelli più evoluti, comporta per un italiano uno sforzo aggiuntivo: deve imparare
molti termini inglesi che sono “naturali” invece per i programmatori che parlano normalmente inglese.
Più il linguaggio è evoluto e più la singola istruzione di quel linguaggio verrà tradotta in un gran
numero di istruzioni in linguaggio macchina.
BASIC, PASCAL, COBOL, C, ASSEMBLER, JAVA
sono tutti nomi di linguaggi intermedi. Un programma
scritto in uno di questi linguaggi deve essere tradotto in
linguaggio macchina per poter essere eseguito.
Il programma scritto in un linguaggio di programmazione
viene chiamato programma sorgente (source program).
Il programma tradotto in linguaggio macchina si chiama programma oggetto
Di solito il programmatore scrive il programma su un foglio di carta.
Per poter subire il processo di traduzione da parte del traduttore, il programma deve essere
immagazzinato su disco. Il programmatore deve poter adoperare il computer “come una macchina da
scrivere” e alla fine della digitazione deve poter salvare il programma su disco ( sul floppy o sull’hard
disk). Il programma deve diventare quindi un file su disco. I file sorgente hanno un no me a scelta del
programmatore ma una estensione obbligatoria che identifica il linguaggio di programmazione in cui
sono scritti.
Ad esempio la estensione:
.bas identifica un file che contiene istruzioni scritte in basic
.pas identifica un file che contiene istruzioni scritte in pascal
.c
identifica un file che contiene istruzioni scritte in C
.cpp identifica un file che contiene istruzioni scritte in C++
.asm identifica un file che contiene istruzioni scritte in assembler
.java identifica un file che contiene istruzioni scritte in java
Per programmare in Basic bisogna avere installato nel computer un programma che traduca dal Basic
al linguaggio macchina.
Per programmare in Java ci vuole un traduttore Java e così via.
Il Visual Basic 6.0 installato nei computer del Laboratorio è un traduttore.
Imparare a programmare significa imparare la “grammatica” e la “sintassi” del linguaggio intermedio
che abbiamo scelto.
Alcuni traduttori forniscono al programmatore un completo ambiente di lavoro in cui:
¾
¾
¾
digitare il programma
far tradurre il programma
far eseguire il programma
Questo ambiente si chiama integrated development environment (IDE), in italiano ambiente
integrato di sviluppo,
Oggi gli IDE più noti sono:
•
•
•
•
•
Delphi e Kylix, prodotti della Borland, che supportano il linguaggio Object Pascal.
Visual Studio, prodotto della Microsoft, che supporta i linguaggi VisualBasic, C, C++, J++,.
Visual Studio .NET, prodotto dalla Microsoft, che supporta C#, J sharp Visual Basic .Net e.
Per il linguaggio C e C++
C++Builder, prodotto dalla Borland e Bloodshed Dev C++
JBuilder, prodotto dalla Borland, che supporta il linguaggio Java.
A.S. 08-09 ©Rauch