RICAPITOLANDO…

18
BIOINFO3 - Lezione 19 1 Un ALGORITMO rappresenta la successione dei passi da eseguire per risolvere un PROBLEMA. L’algoritmo 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 l’algoritmo al computer è necessario scrivere un PROGRAMMA che lo implementi. Il programma è una sequenza di ISTRUZIONI RICAPITOLANDO… RICAPITOLANDO…

description

Un ALGORITMO rappresenta la successione dei passi da eseguire per risolvere un PROBLEMA. L’algoritmo può essere descritto formalmente attraverso un FLOW-CHART. Algoritmi e flow-chart non sono però direttamente comprensibili ed eseguibili da un computer. - PowerPoint PPT Presentation

Transcript of RICAPITOLANDO…

Page 1: RICAPITOLANDO…

BIOINFO3 - Lezione 19 11

Un ALGORITMO rappresenta la successione dei passi da eseguire per risolvere un PROBLEMA.

L’algoritmo 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 l’algoritmo al computer è necessario scrivere un PROGRAMMA che lo implementi.

Il programma è una sequenza di ISTRUZIONI (che richiedono al computer l’esecuzione di AZIONI) ed è scritto in un LINGUAGGIO di programmazione comprensibile al computer

RICAPITOLANDO…RICAPITOLANDO…

Page 2: RICAPITOLANDO…

BIOINFO3 - Lezione 19 22

SCHEMA LOGICOSCHEMA LOGICO

Possiamo ricapitolare questi concetti in un semplice schema

PROBLEMA

?

?

ALGORITMO PROGRAMMA

Page 3: RICAPITOLANDO…

BIOINFO3 - Lezione 19 33

LINGUAGGI DI PROGRAMMAZIONELINGUAGGI DI PROGRAMMAZIONE

L’unico 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 l’introduzione di un codice mnemonico per ogni istruzione macchina e di nomi simbolici per indicare gli indirizzi di memoria. Nasceva il linguaggio chiamato ASSEMBLER, anch’esso caratteristico del singolo processore,in corrispondenza 1:1 con il linguaggio macchina,

Page 4: RICAPITOLANDO…

BIOINFO3 - Lezione 19 44

LINGUAGGI DI PROGRAMMAZIONELINGUAGGI 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++ (Programmazione ad oggetti)

Page 5: RICAPITOLANDO…

BIOINFO3 - Lezione 19 55

LINGUAGGI DI PROGRAMMAZIONELINGUAGGI DI PROGRAMMAZIONEANNI 90

Con l’avvento 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 l’amministrazione 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 nell’estrazione di informazione da file (“PARSERIZZAZIONE”) e nella preparazione di report

Page 6: RICAPITOLANDO…

BIOINFO3 - Lezione 19 66

GERARCHIA DEI LINGUAGGIGERARCHIA 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.

L’ASSEMBLER è 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

PROGRAMMA IN ASSEMBLER

PROGRAMMA IN LINGUAGGIO MACCHINA

TRADUTTORE

ASSEMBLATORE

Page 7: RICAPITOLANDO…

BIOINFO3 - Lezione 19 77

COMPILATORI ED INTERPRETICOMPILATORI ED INTERPRETI

L’esecuzione di un programma scritto in un linguaggio ad alto livello può avvenire in due differenti modalità:

Con un COMPILATORE l’intero 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 dell’eseguibile.

Con un INTERPRETE, per eseguire un programma sorgente si chiederà invece l’esecuzione 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 quest’ultimi sono più rapidi da modificare in fase di sviluppo e collaudo. Sia i compilatori che gli interpreti verificano la correttezza sintattica del programma.

Page 8: RICAPITOLANDO…

BIOINFO3 - Lezione 19 88

PERLPERL

L’esecuzione 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 l’esecuzione 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 l’interprete, 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 l’interprete.

Page 9: RICAPITOLANDO…

BIOINFO3 - Lezione 19 99

PATH DEI PROGRAMMIPATH DEI PROGRAMMI

Sia l’interprete perl sia il programma da eseguire saranno localizzati in qualche posto nell’albero delle directory

Normalmente l’interprete 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 (l’interprete).

usr

binperl

Page 10: RICAPITOLANDO…

BIOINFO3 - Lezione 19 1010

Esiste una variabile d’ambiente chiamata PATH, definita dall’amministratore 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 d’ambiente (che sono settate all’inizio del nostro collegamento)

PATH DEI PROGRAMMIPATH DEI PROGRAMMI

Page 11: RICAPITOLANDO…

BIOINFO3 - Lezione 19 1111

Se nel PATH è indicata la directory /usr/local allora potremo richiamare l’interprete 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 (l’interprete perl)

PATH DEI PROGRAMMIPATH DEI PROGRAMMI

Page 12: RICAPITOLANDO…

BIOINFO3 - Lezione 19 1212

PATH DEI PROGRAMMIPATH DEI PROGRAMMI

Lo stesso discorso vale per il nostro programma, scritto in Perl, che vogliamo eseguire. Supponiamo che esso si chiami pippo.pl Anch’esso si troverà in una certa posizione nell’albero delle directory, ad esempio, se sono l’utente bioinfo3-01, nella mia home directory, ovvero in /home/bioinfo3-01/

usr

binperl

home bioinfo3-01pippo.pl

Page 13: RICAPITOLANDO…

BIOINFO3 - Lezione 19 1313

Se ci troviamo nella stessa directory dove si trova il file da far eseguire all’interprete possiamo riferirci ad esso semplicemente con il suo nome. Altrimenti, se siamo in un’altra 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 un’altra directory avrei dovuto specificare il path (assoluto o relativo del programma)

PATH DEI PROGRAMMIPATH DEI PROGRAMMI

Page 14: RICAPITOLANDO…

BIOINFO3 - Lezione 19 1414

DIRITTO DI ESECUZIONEDIRITTO DI ESECUZIONE

E’ importante verificare che l’utente 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 all’utente del sistema deputato all’esecuzione del server web. Si può usare ls –al per verificare i diritti sui programmi di una certa directory

Nell’esempio tutti gli utenti del sistema hanno il diritto di eseguire (x) il programma pgmm.pl. La prima tripletta rwx assegna all’utente 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

Page 15: RICAPITOLANDO…

BIOINFO3 - Lezione 19 1515

CHMODCHMOD

Se desideriamo cambiare i diritti sui file possiamo eseguire il comando CHMOD. Di solito, come nell’esempio 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

Page 16: RICAPITOLANDO…

BIOINFO3 - Lezione 19 1616

PARAMETRI DEL PROGRAMMAPARAMETRI 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, dall’interno del programma Perl, sarà possibile recuperare questi parametri

Page 17: RICAPITOLANDO…

BIOINFO3 - Lezione 19 1717

RE-DIREZIONE INPUT E OUTPUTRE-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 < o > è possibile re-direzionare input ed output. Ad esempio si potrà leggere l’input da un file o stampare l’output su un altro file (ovviamente anche entrambi contemporaneamente)

./pippo.pl <prova >risultati

Nell’esempio si chiede l’esecuzione del file pippo.pl, posto nella directory corrente (in realtà ad essere eseguito è l’interprete Perl se pippo.pl è scritto in PERL e contiene nella prima riga #!/usr/bin/perl). L’input è preso dal file “prova” della directory corrente, anziché da tastiera, e l’output 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 l’occasione.

Page 18: RICAPITOLANDO…

BIOINFO3 - Lezione 19 1818

RIEPILOGORIEPILOGO

•Linguaggi di programmazione

•Compilatori ed interpreti

•Esecuzione di un programma (Perl): Path del programma, diritti, parametri, input e output