Title: Un ALGORITMO rappresenta la successione dei passi da eseguire per risolvere un PROBLEMA.
1RICAPITOLANDO
- Un ALGORITMO rappresenta la successione dei passi
da eseguire per risolvere un PROBLEMA. - Lalgoritmo può essere descritto formalmente
attraverso un FLOW-CHART. Algoritmi e flow-chart
non sono però direttamente comprensibili ed
eseguibili da un computer. - Per far eseguire lalgoritmo al computer è
necessario scrivere un PROGRAMMA che lo
implementi. - Il programma è una sequenza di ISTRUZIONI (che
richiedono al computer lesecuzione di AZIONI)
ed è scritto in un LINGUAGGIO di programmazione
comprensibile al computer
2SCHEMA LOGICO
- Possiamo ricapitolare questi concetti in un
semplice schema
?
ALGORITMO
PROGRAMMA
PROBLEMA
?
3LINGUAGGI DI PROGRAMMAZIONE
- Lunico linguaggio di programmazione
comprensibile dal computer è il linguaggio
macchina, formato da sequenze di bit secondo un
determinato codice che è tipico del processore.
Ogni processore ha il suo linguaggio macchina
La prima evoluzione verso una programmazione più
umana si è avuta negli anni 50 con lintroduzione
di un codice mnemonico per ogni istruzione
macchina e di nomi simbolici per indicare gli
indirizzi di memoria. Nasceva il linguaggio
chiamato ASSEMBLER, anchesso caratteristico del
singolo processore,in corrispondenza 11 con il
linguaggio macchina,
4LINGUAGGI DI PROGRAMMAZIONE
- Successivamente, a partire dagli anni 60, nascono
i cosiddetti linguaggi ad alto livello, che
utilizzano istruzioni tratte dal linguaggio
naturale (abbiamo visto quanto naturali siano le
istruzioni di SQL).
ANNI 60 ALGOL ALGOrithmic Language (applicazioni
matematiche) FORTRAN FORmula TRANslation
(applicazioni scientifiche) COBOL COmmon
Business Oriented Language (appl.
gestionali) ANNI 70-80 BASIC Beginners All
purpose Symbolic Instruction Code (per
principianti) PASCAL LISP LISt Processing
(elaborazioni di liste ed A.I.) PROLOG PROgramming
LOGic (Logica Matematica) C C (Programmazion
e ad oggetti)
5LINGUAGGI DI PROGRAMMAZIONE
- ANNI 90
- Con lavvento dei sistemi operativi a finestre
(WINDOWS) nascono i linguaggi visuali che
permettono la gestione di interfacce grafiche
semplici e user-friendly - VISUAL C
- VISUAL BASIC
- JAVA (dal nome di un caffè in polvere, facilmente
trasportabile e solubile, permette di eseguire
dei programmi, installati su pagine WEB
direttamente nei browser (e quindi non sul server
ma sul client, eventualmente può interagire con
il server) - PERL Practical Extraction and Report Language
- Pur se nato negli anni 80, nella seconda metà
degli anni 90 assistiamo al successo incredibile
di Perl, che diventa il linguaggio preferito per
preparare degli script per lamministrazione di
sistema nel sistema operativo LINUX e soprattutto
per scrivere programmi cgi-bin da eseguire nei
server WEB. Come dice il nome stesso Perl è
vincente per la sua praticità, semplicità,
potenza e compattezza (in un programma Perl di
poche righe si possono concentrare decine e
decine di righe di programma scritte in C)
soprattutto nellestrazione di informazione da
file (PARSERIZZAZIONE) e nella preparazione di
report
6 GERARCHIA DEI LINGUAGGI
- Come dicevamo, ogni programma scritto in un
qualsiasi linguaggio dovrà alla fin fine essere
tradotto in linguaggio macchina per poter essere
eseguito dal computer. - LASSEMBLER è tradotto direttamente in linguaggio
macchina da un programma ASSEMBLATORE. I
linguaggi ad alto livello dovranno perciò a loro
volta essere preventivamente tradotti in
ASSEMBLER da un programma TRADUTTORE (che vedremo
potrà essere di due tipi)
PROGRAMMA IN UN LINGUAGGIO AD ALTO LIVELLO
TRADUTTORE
PROGRAMMA IN ASSEMBLER
PROGRAMMA IN LINGUAGGIO MACCHINA
ASSEMBLATORE
7COMPILATORI ED INTERPRETI
- Lesecuzione di un programma scritto in un
linguaggio ad alto livello può avvenire in due
differenti modalità - Con un COMPILATORE lintero programma (sorgente)
viene tradotto (compilato) in un programma
equivalente in assembler. Si ottiene così un
programma in codice macchina (eseguibile). Quando
si vuole eseguire il programma si chiederà perciò
al computer di eseguire direttamente la versione
eseguibile.Ogni modifica del sorgente comporta la
ricompilazione del programma per ottenere una
versione aggiornata delleseguibile. - Con un INTERPRETE, per eseguire un programma
sorgente si chiederà invece lesecuzione di un
programma interprete il quale leggerà man mano la
singola istruzione del sorgente e solo in quel
momento eseguirà delle corrispondenti istruzioni
macchina. - I programmi compilati sono quindi molto più
veloci di quelli interpretati, ma questultimi
sono più rapidi da modificare in fase di sviluppo
e collaudo. Sia i compilatori che gli interpreti
verificano la correttezza sintattica del
programma.
8PERL
- Lesecuzione di un programma scritto nel
linguaggio PERL avviene tramite un interprete,
quindi questo linguaggio non è il più indicato
per programmi in cui il tempo di esecuzione sia
un fattore critico. - Da linea di comando UNIX lesecuzione di un
programma scritto nel linguaggio perl e contenuto
in un file (che indichiamo con nome-file) può
avvenire in due modi - perl nome-file
- nome-file
- In entrambi i casi viene attivato linterprete,
però nel secondo caso ciò avviene solo se la
prima riga del file nome-file ha una sintassi
particolare (!/usr/bin/perl) che a sua volta
richiama linterprete.
9PATH DEI PROGRAMMI
- Sia linterprete perl sia il programma da
eseguire saranno localizzati in qualche posto
nellalbero delle directory - Normalmente linterprete Perl si trova nella
directory /usr/bin (se non sappiamo dove si trova
possiamo scoprirlo con il comando whereis) - Quindi significa che esiste una directory usr che
contiene una directory bin che contiene il
programma perl (linterprete).
usr
bin
perl
10PATH DEI PROGRAMMI
- Esiste una variabile dambiente chiamata PATH,
definita dallamministratore di sistema, che
specifica in quali directory ricercare un
programma da eseguire. Per verificarne il valore
possiamo eseguire il comando UNIX env che
mostra i valori correnti di tutte le variabili
dambiente (che sono settate allinizio del
nostro collegamento)
11PATH DEI PROGRAMMI
- Se nel PATH è indicata la directory /usr/local
allora potremo richiamare linterprete perl da
qualunque directory in cui ci trovassimo.
Altrimenti è necessario spostarsi nella directory
/usr/local con un comando di cd (change
directory) - Oppure (sempre se /usr/local non fosse definita
nel PATH) specificare il path completo del file
da eseguire (linterprete perl)
12PATH DEI PROGRAMMI
- Lo stesso discorso vale per il nostro programma,
scritto in Perl, che vogliamo eseguire.
Supponiamo che esso si chiami pippo.pl Anchesso
si troverà in una certa posizione nellalbero
delle directory, ad esempio, se sono lutente
bioinfo3-01, nella mia home directory, ovvero in
/home/bioinfo3-01/
home
bioinfo3-01
pippo.pl
usr
bin
perl
13PATH DEI PROGRAMMI
- Se ci troviamo nella stessa directory dove si
trova il file da far eseguire allinterprete
possiamo riferirci ad esso semplicemente con il
suo nome. Altrimenti, se siamo in unaltra
directory dobbiamo specificare il suo path
completo - In questo esempio mi trovavo nella mia directory
chiamata b. Posso quindi far eseguire
direttamente il programma pgmm.pl residente
proprio in b - N.B. E comunque necessario dire che il programma
si trova nella directory corrente usando ./ in
quanto la mia directory /b non si trovava nel
PATH. - Se invece mi trovavo in unaltra directory avrei
dovuto specificare il path (assoluto o relativo
del programma)
14DIRITTO DI ESECUZIONE
- E importante verificare che lutente che vuol
eseguire il programma ne abbia effettivamente il
diritto. Uno degli errori più comuni, quando si
prepara un programma cgi-bin da far eseguire al
server web httpd, è quello di dimenticarsi di
concedere il diritto di eseguire il nostro
programma allutente del sistema deputato
allesecuzione del server web. Si può usare ls
al per verificare i diritti sui programmi di una
certa directory - Nellesempio tutti gli utenti del sistema hanno
il diritto di eseguire (x) il programma pgmm.pl.
La prima tripletta rwx assegna allutente nicola
il diritto di leggere (r), scrivere (w) ed
eseguire il file gli utenti del gruppo lab
potranno solo leggere ed eseguire (x) il file ma
non scriverlo (modificarlo o cancellarlo), manca
w gli altri utenti (e quindi anche quello che
esegue httpd) possono analogamente leggerlo o
eseguirlo
15CHMOD
- Se desideriamo cambiare i diritti sui file
possiamo eseguire il comando CHMOD. Di solito,
come nellesempio appena visto, va bene assegnare
come diritti il valore 755 - 4 2 1
- user 7 r w x
- group 5 r - x
- other 5 r - x
- Esempio
- chmod 755 pgmm.pl
16PARAMETRI DEL PROGRAMMA
- A questo punto il programma è effettivamente
eseguibile. Possiamo passare dei parametri al
programma elencandoli separati da spazio nella
stessa riga del comando di esecuzione, dopo il
nome del programma - nome-file parametro1 parametro2 parametron
- oppure
- perl nome-file parametro1 parametro2
parametron - Vedremo come, dallinterno del programma Perl,
sarà possibile recuperare questi parametri
17RE-DIREZIONE INPUT E OUTPUT
- Se non specificato diversamente il programma
prende il suo input dallo standard input,
indicato con il simbolo STDIN (la tastiera) e
produce il suo output sullo standard output,
indicato con il simbolo STDOUT (il video). - Come abbiamo già visto con il comando mysqldump,
usando i simboli lt o gt è possibile re-direzionare
input ed output. Ad esempio si potrà leggere
linput da un file o stampare loutput su un
altro file (ovviamente anche entrambi
contemporaneamente) - ./pippo.pl ltprova gtrisultati
- Nellesempio si chiede lesecuzione del file
pippo.pl, posto nella directory corrente (in
realtà ad essere eseguito è linterprete Perl se
pippo.pl è scritto in PERL e contiene nella prima
riga !/usr/bin/perl). Linput è preso dal file
prova della directory corrente, anziché da
tastiera, e loutput scritto sul file risultati
anziché a video. Il file risultati se non esiste
già nella directory corrente (in questo caso
viene sovrascritto!) viene creato ex-novo per
loccasione.
18RIEPILOGO
- Linguaggi di programmazione
- Compilatori ed interpreti
- Esecuzione di un programma (Perl) Path del
programma, diritti, parametri, input e output