“Pseudocodice”



Un programma per computer lavorerà su in insieme di
“variabili” contenenti i dati del problema, soluzioni
intermedie, soluzioni finali
Le variabili possono essere di tipo diverso, a seconda dei
dati che trattiamo, ad esempio
 Numeri interi
 Numeri reali
 Matrici
 Parole costruite su un alfabeto
 Vettori
 ....
Anche in questo caso dobbiamo prevedere un insieme
“minimale” di tipi di variabili su cui lavorare con lo
pseudocodice
Variabili


I tipi di variabili disponibili e le relative
operazioni dipendono dal linguaggio di
programmazione
Possiamo considerare “universali” due
tipi di variabile:



Variabile “numero”
Variabile “carattere”
Inoltre, possiamo prevedere la
possibilità di gestire


Vettori o matrici di numeri
Sequenze di caratteri (o “stringhe”)
Variabili



La parola “ciao” è composta da quattro
caratteri
In un computer è rappresentata come
un array (o vettore) di quattro elementi
carattere (detto stringa)
Quindi, se abbiamo una variabile di tipo
stringa il cui valore è “ciao” (senza
virgolette!) potremmo anche accedere a
uno qualsiasi dei caratteri della parola
Variabile




Una variabile è definita da un tipo
(numero, carattere, etc.) e da un nome
In un programma non si può
(abbastanza logicamente) assegnare lo
stesso nome a variabili diverse
Tutte le operazioni (assegnazione,
confronto, etc.) devono essere
effettuate su variabili dello stesso tipo
In perl le variabili (qualsiasi sia il loro
tipo) sono precedute dal simbolo $,
mentre i vettori dal simbolo @
Variabili


Mentre, intuitivamente, quando progettiamo
un algoritmo una variabile può essere di
qualsiasi tipo e/o assumere qualsiasi valore,
nei linguaggi di programmazione ogni variabile
ha un TIPO ben definito
Il tipo della variabile definisce l’insieme di
valori che la variabile può assumere:
 Booleano: vero/falso (e operatori logici)
 Intero: un numero intero
 “Floating point”: un numero con virgola
(razionale!)
 Carattere: uno dei 255 caratteri definiti
dalla tabella ASCII associata al computer
che state usando
Codifica ASCII dei caratteri
Variabili e tipi

Linguaggi TIPIZZATI: quando si usa una
variabile in un programma è necessario
definire esplicitamente (la prima volta
che la si usa) che tipo è associato ad
essa, ad esempio:



int x = 10
char c = ‘a’
Linguaggi non tipizzati: quanto sopra
non è necessario. E’ l’interprete del
linguaggio che cerca di “indovinare” di
che tipo di variabile si tratta sulla base
dei valori associati ad essa (utile, ma
pericoloso per chi programma!)
Variabili e tipi

In ogni caso, per qualsiasi di
linguaggio di programmazione
usiate, dovete abituarvi a pensare
di fare fare
assegnamenti/confronti/etc
soltanto tra variabili dello stesso
tipo ed è quindi necessario che,
indipendentemente dal linguaggio,
abbiate sempre chiaro quale tipo è
associato a ciascuna variabile
Tipi di dati “derivati”

Abbiamo accennato all’istruzione “per
ogni”
PER OGNI elemento IN
collezione_di_elementi
ESEGUI
...


Come è possibile definire una
“collezione” di elementi?
Il metodo più utilizzato è quello della
“sequenza” (o “array”, vedi dispense
pagine 20/21)
Gli “array”



L’array (ovvero, insieme ordinato di variabili) è molto
utile per una grande quantità di applicazioni diverse, ed
è supportato virtualmente da tutti i linguaggi di
programmazione (per lo meno, da quelli che interessano
a noi).
Un paio di note: finora abbiamo definito gli elementi
dell’array come, ad esempio ci ovvero con il “pedice”
che si usa in matematica
Poiché i programmi si scrivono in “formato testo”, senza
la possibilità di inserire indici o pedici, la notazione più
comune mette il numero dell’elemento tra parentesi
quadre, quindi


ci si scrive c[i] – ovvero l’i-esimo elemento dell’array c
Seconda nota: in informatica si conta a partire da
zero!!!! Quindi, in un array chiamato c di n elementi, gli
elementi saranno c[0] c[1] c[2] … c[n-1], ovvero gli indici
invece di andare da 1 a n andranno da 0 a n-1!!
Array e sequenze



In bioinformatica è comune scrivere
programmi di analisi di sequenza
La sequenza è rappresentata come
una “stringa”, ovvero (nella nostra
testa mentre programmiamo) come
un array di caratteri
La sequenza S = “ACGTAG” potrà
essere rappresentata come un array
di 6 elementi:

S[0] = ‘A’ S[1]=‘C’ S[2] = ‘G’ e
…e così via…
Array e genomi

Un cromosoma viene quindi
solitamente rappresentato come
un enorme array di milioni di
caratteri, in cui il carattere in
posizione i corrisponderà all’iesimo paio di basi sul cromosoma
(o meglio, all’ (i+1)-esimo paio di
basi, se il primo ha posizione 0
nell’array)
Array e sequenze



Esercizio 1: data una sequenza,
verificare se contiene un codone di
start
Esercizio 2: data una sequenza,
verificare quanti codoni di start
contiene, e il frame di lettura di
ognuno
Esercizio 3: data una sequenza, per
ogni codone di start trovato verificare
se esiste un codone di stop “in
frame” rispetto ad esso
Trovare il codone di start





La sequenza da analizzare è memorizzata in un
array che si chiama “sequenza”
A priori non sappiamo da quanti nucleotidi sarà
composta
Vediamo, carattere per carattere, se ci sono 3
elementi dell’array consecutivi che corrispondono
ad ‘A’, ‘C’, ‘G’
Trovato un codone di start, possiamo a questo
punto calcolare il frame di lettura a partire dalla
posizione in cui lo abbiamo trovato
Trovato un codone di start, possiamo verificare se a
valle di esso c’è un codone di stop nello stesso
frame di lettura
Scarica

numero