mercoledì 15 dicembre 2010

Lezione del 15 dicembre 2010

Introduzione ai fogli di calcolo

L'argomento richiede l'estensione di argomenti già affrontati in precedenza. In particolare il concetto di sottoprocedura viene espeso in senso funzionale, cioè una sottoprocedura è una serie di operazioni che restituisce un valore. Un primo semplice esempio:

SOMMA(a, b)
{ return a+b }

è una sottoprocedura che restituisce ("return" è il termine che tradizionalmente si usa) la somma di a e di b. Quindi se troviamo in un programma x=SOMMA(3,7), x assumerà il valore 10. Si chiamano funzioni proprio perché è identico al concetto di funzione matematica.
Un esempio più verosimile (il + non è erto necessario metterlo in una funzione!) è la somma degli elementi di un vettore, che possono essere per esempio i movimenti di un conto bancario dei quali si può voler calcolare il totale. v è il generico vettore che contiene i valori da sommare (può essere anche quello delle carte da gioco ovviamente!), mentre n è il numero degli elementi da sommare:

SOMMA(v, n) 
{
i=1
s=0 
RIPETI FINCHE'(i<=n)
   {
   s = s+v[i]
   i = i+1
   }
return s


Come abbiamo già visto, dato che la memoria è unica all'interno di un programma, è concettualmente possibile riferirci direttamente alle locazioni di memoria, quindi potremmo definire una funzione del tutto simile alla precedente ma che invece di sommare gli elementi di un vettore somma i valori della memoria, da una certa posizione a un'altra posizione. La procedura, la cui modifica è piccolissima (con l'introduzine convenzionale del vettore MEMORIA che si riferisce all'intera memoria dle programma), diventa:

SOMMA(inizio, fine) 
{
i=inizio
s=0 
RIPETI FINCHE'(i<=fine)
   {
   s = s+MEMORIA[i]
   i = i+1
   }
return s


Come già discusso la memoria nella quale opera un programma si può considerare coma una striscia seminfinita di celle che contengono valori. Per comodità è possibile immaginare come se la memoria andasse "a capo" a un certo punto, diciamo per esempio dopo 100 celle (proprio come le pagine di Write) il nastro della memoria può essere spezzato e fatto continuare in basso. La numerazione rimane identica, quindi ogni cella può essere riferita sempre in base al suo ordine.

Ma dato che abbiamo trasformato il nastro unidimensionale in una "pagina" di locazioni bidimensionali, possiamo pensare di riferirci alle celle con le coordinate (come una matrice), la riga e la colonna. Ogni cella è identificata univocamente dalle sue coordinate, e ogni coppia di coordinate "lecite" identifica esattamente una cella.

Questa memoria, così organizzata, è esattamente quello che ci appare quando apriamo un programma di foglio di calcolo come "Calc" della suite OpenOffice sulla quale lavoriamo. Quello che ci appare è una prateria incontaminata di celle di memoria, dentro le quali possiamo inserire tutto quello che ci pare. Nei programmi di questo tipo normalmente le colonne vengono indicate dalle lettere dell'alfabeto, o da loro combinazioni (esercizietti: come descrivere le colonne quando superano la Z? Qual è l'ultima colonna di Calc? QUANTE sono in totale? -- IN DECIMALE!)


Lezione del 15 dicembre 2010 PSINFORM from Marco Tonti on Vimeo.

Nessun commento:

Posta un commento