Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D La Corte in Rete
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Giovanni Paolella » 6.Programmazione e algoritmi


Biotecnologie cellulari e molecolari

Programmazione e algoritmi

Prof. Giovanni Paolella

Dott. Leandra Sepe

Che cos’è un programma

Nelle lezioni precedenti sono stati descritti numerosi programmi, sia per l’assemblaggio di sequenze genomiche che per l’annotazione di caratteristiche strutturali e funzionali. Alcuni di questi sono inseriti in package come Emboss discusso nella scorsa lezione.

Ma che cos’è un programma?

Un programma è un file che contiene una lista di istruzioni che complessivamente dicono al computer cosa fare per ottenere un certo risultato. Poichè i programmi sono scritti dai programmatori, ma devono essere eseguiti da una macchina, è necessario che siano scritti in modo che il computer possa capire le istruzioni in maniera non ambigua ed eseguirle nell’ordine, in modo da ottenere il risultato atteso.

E’ utile, anche se non necessario, che il programma sia comprensibile facilmente anche alle persone che devono scriverlo e tenerlo in funzione.

Cos’è un algoritmo

Un programma è una cosa diversa dall’algoritmo su cui è basato. Per algoritmo si intende la descrizione delle procedure necessarie per ottenere un dato risultato. Non dovendo però essere utilizzato direttamente dal computer, un algoritmo può essere descritto in linguaggio comune, anche se l’uso di una sintassi rigorosa può aiutare ad evitare ambiguità.

Ad esempio, per cercare siti di restrizione all’interno di una sequenza, si può procedere come indicato in figura:

  1. la sequenza di riconoscimento cercata (nell’esempio GAATTC di EcoRI), viene allineata con il primo nucleotide della sequenza in esame
  2. ciascun nucleotide della sequenza di riconoscimento viene confrontato con quello corrispondente della sequenza in esame e vengono contati quelli uguali
  3. se la conta risulta uguale a 6, la posizione viene registrata come un sito riconosciuto da EcoRI
  4. la sequenza viene ora allineata con il nucleotide successivo e la procedura si ripete a partire dal punto 2

Esempio di programma semplice

Un algoritmo è quindi una descrizione di una procedura. Come si fa a passare da un algoritmo ad un programma in grado di funzionare e di generare un risultato? E’ necessario trascrivere l’algoritmo in una forma utilizzabile dalla macchina usando un linguaggio di programmazione. Questa operazione può essere eseguita da un ricercatore, anche se per programmi di una certa complessità è necessaria la competenza di un programmatore.

Il programma eseguito nell’esempio calcola i quadrati dei primi mille numeri interi e può essere descritto dall’algoritmo indicato in prima figura. L’algoritmo di per sè non può essere eseguito dalla macchina, ma può essere utilizzato per generare un programma utilizzando un linguaggio di programmazione. L’esecuzione del programma produce il risultato desiderato, come riportato in seconda figura.


Descrizione del programma

Il programma in grado di generare il risultato descritto è molto semplice e può essere compreso con poca difficoltà:

  • $max è una variabile, cioè una locazione in cui conservare un valore, e, nella prima riga, le viene assegnato il valore 1000
  • l’istruzione “for ($i=1;$i<=$max;$i++){istruzioni}” significa esegui ciclicamente le istruzioni contenute tra { e } finchè la variabile $i, che all’inizio è posta uguale a 1 e viene incrementata di 1 ad ogni ciclo, risulta <= $max
  • le istruzioni nel ciclo calcolano il quadrato e stampano il risultato per ciascun valore di $i

Che cos’è un linguaggio di programmazione?

Un linguaggio di programmazione consiste in una serie di regole che definiscono come scrivere il codice. Elementi tipici di ogni linguaggio sono:

  • Variabili (es. numeri o stringhe di caratteri)
  • Espressioni (es. “2+3″)
  • Comandi (es. print, read)
  • Istruzioni per il controllo del flusso (es. for, if)

L’esempio descritto precedentemente è stato realizzato utilizzando il PHP, un linguaggio relativamente facile da usare, costituito di istruzioni in grado di eseguire operazioni anche molto complesse. Lo stesso programma è riportato in figura trascritto in C, un linguaggio di più difficile utilizzazione in quanto richiede più istruzioni per descrivere le stesse procedure. E’ comunque molto facile riconoscere le corrispondenze tra le due versioni del programma.


Linguaggio macchina e assembler

In realtà il processore presente in qualsiasi computer non esegue direttamente nè il codice scritto in PHP ne’ quello in C; ogni processore è in grado di comprendere un solo linguaggio definito linguaggio macchina, costituito di un numero più limitato di istruzioni molto semplici come “sposta un numero in una casella di memoria” o “somma due numeri”.

Per poter eseguire i programmi, è necessario quindi convertire qualsiasi linguaggio in linguaggio macchina, questa operazione è fatta da programmi definiti compilatori o interpreti che traducono il codice, istruzione per istruzione, e lo trasformano in linguaggio macchina. Nella figura è riportata la traduzione del programma in C in linguaggio macchina.

Le istruzioni del linguaggio macchina sono di tipo numerico, ma vengono di solito rappresentate in forma simbolica per renderle più comprensibili, una rappresentazione chiamata Assembler. Il linguaggio macchina è naturalmente di difficile comprensione, e in genere anche programmatori professionisti tendono a non usarlo direttamente se non in casi particolari in cui questo si rende necessario.

L’uso del C, e ancor più del linguaggio macchina, presenta difficoltà notevoli, ma ha il vantaggio di ottenere dal processore le migliori prestazioni.


Linguaggi di programmazione di alto e di basso livello

I linguaggi di programmazione possono quindi prevedere o un’ampia gamma di istruzioni diverse che corrispondono ad operazioni complesse, o un piccolo numero di istruzioni più semplici.

Naturalmente i primi risultano in programmi più brevi e di più facile comprensione, ma che richiedono traduzioni complesse per essere eseguiti e sono quindi più lenti. I secondi risultano più difficili da utilizzare in fase di programmazione e producono programmi pu’ lunghi, ma sono molto efficienti e ottengono elevate velocità di esecuzione.

I linguaggi del primo tipo sono definiti di alto livello e sono indicati in alto in figura, in constrasto con quelli di basso livello riportati in basso.


  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion

Fatal error: Call to undefined function federicaDebug() in /usr/local/apache/htdocs/html/footer.php on line 93