“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