6587gianluca, il 09/06/2009 - 15:51, ha scritto:
Te l'ho detto Giallù,.....hai fatto troppe domande e mo t'attacchi !!!!!!!!!!!!
'6587gianluca' Porta pazienza....Ricordati che se va bene....ho tempo Sabato e Domenica.
Riprendendo un precedente motto!
A grande richiesta di popolo!: Gli Array.
Vi ricordate la mia visione onirica delle variabili a questo post:
Qui riporto l'immagine della memoria da ingrandire cliccandoci sopra.
mem1.png (15,33K)
Numero di downloads: 7 Le variabili dovreste conoscerle.....
saluto="HELLO" in questo modo abbiamo assegnato alla variabile
saluto un valore sotto forma di stringa che mShell memorizza nella memoria del computer come già spiegato.
Spostandoci a ritroso nel tempo....quando l'uomo viveva nelle caverne...si programmavano i computer

con l'unico linguaggio noto
"Il linguaggio macchina" dove praticamente il programmatore doveva arrangiarsi a far tutto. Per mettere in memoria la parola
"HELLO" doveva dire al computer... prendi la lettera
H ponila alla locazione di memoria 0807 poi prendi la lettera
E poi ponila nella locazione di memoria 0808 e cosi via fino all'ultima lettera.
Noi abbiamo la fortuna che tutto questo lo fa mShell con il comando:
saluto="HELLO"; manco ci accorgiamo che deve prendere una lettera per volta e depositarla in memoria!.
La stessa cosa avviene con il comando
print saluto; che stamperà a video:
> HELLO
L'omino preistorico non l'aveva il comando
print e doveva dire al processore del computer..prendi la lettera
H alla locazione di memoria 0807 e depositala nella memoria video poi prendi la lettera
E alla locazione 0808 e depositala nella memoria video vicino alla H ecc.. ecc..
print saluto; manco ce ne accorgiamo che in realtà mShell prende una lettera per volta e le mette in fila sullo schermo! Fa proprio così.
Siamo fortunati! pensa a tutto mShell! è vero ma non del tutto....
Il nostro antenato informatico a volte si divertiva a fare cose del genere...
Prendeva l'ultima lettera della parola
HELLO e la stampava a video poi prendeva la penultima e la stampava a video e continuava così finché non terminava la stringa.
Cosa si vedeva sullo schermo?? Questo!
> OLLEH
Altre volte si divertiva a prendere le due maiuscole
"LL" e le sostituiva con le minuscole
"ll" e stampava il tutto
> HEllO
Altre volte con stringhe tipo
"ottima giornata oggi" si divertiva a contare quante
"o" ci sono nella stringa e altre volte le sostituiva con delle
"u" e stampava...
uttima giurnata uggi.
E' così non vale! lui va a mettere le mani nella memoria del computer e noi non lo possiamo fare! mShell ci semplifica la vita da una parte e ci stoppa da un altra!
Questo è un problema che tutti i linguaggi di programmazione nati per semplificare la vita hanno dovuto affrontare.
MShell per permetterci di andare a modificare le singole caselle di memoria usa una variabile speciale chiamata Array.
Che cosa ha di diverso Array da una semplice variabile? questo:
saluto="HELLO"; <-----variabile normale
saluto=['H','E','L','L','O']; <------array
Praticamente racchiudendo tra parentesi quadre
[] la parola
HELLO e separando le singole lettere con la virgola avvisiamo mShell che da adesso in poi la variabile
saluto deve avere la capacità di accedere alle singole lettere e non le deve più vedere come una stringa unica.
Perfetto! e mò come faccio a stampare la 'E' a video?
Eggià come facciamo? non posso dire a mShell dammi la lettera che hai messo alla locazione di memoria 0808 ? anche perché non sò dove diavolo là messa nella memoria?.
Ho fatto sta domanda a mShell e sapete cosa mi ha risposto? (Oddio ora parlo pure con i programmi!)
Facciamo così: tu mi dici che variabile ti interessa, saluto poi conti le lettere da sinistra verso destra partendo col numero 0 e mi dici a che numero corrisponde
la lettera che vuoi, metti il numero tra parentesi quadre appiccicato alla variabile e io te la dò Va bene...
Allora....
saluto=['H','E','L','L','O'];
Allora la E è al numero 1 ok!...
print saluto[1];
> E Funziona!!!
Allora basta che ti scriva il nome della variabile ( tra parentesi quadre) a quale numero di casella mi riferisco e tu puoi rendermela o modificarla giusto?
Giusto!.
Perciò per invertire la scritta basta fare così:
saluto=['H','E','L','L','O'];
print saluto[4] + saluto[3] + saluto[2] + saluto[1] + saluto[0];
> OLLEH
// oppure
print saluto[4]; print saluto[3]; print saluto[2]; print saluto[1]; print saluto[0];
> O
> L
> L
> E
> H
// oppure
for c=4 to 0 by -1 do
print saluto[c];
end;
> O
> L
> L
> E
> H
Perciò posso anche alterare le singole lettere in questo modo:
saluto=['H','E','L','L','O'];
saluto[2]='l';
saluto[3]='l';
print saluto[0] + saluto[1] + saluto[2] + saluto[3] + saluto[4];
> HEllO
Allora se voglio contare le
'o' e sostituirle con le
u basta fare..attenzione questa volta l'array ha un numero maggiore di caselle 20 (0-19)
frase=['o','t','t','i','m','a',' ','g','i','o','r','n','a','t','a',' ','o','g','g','i']
ndio=0;
nuovafrase="";
for c=0 to len(frase)-1 do
if frase[c]='o' then ndio=ndio+1; frase[c]='u'; end;
nuovafrase=nuovafrase + frase[c];
end;
print " ci sono ", ndio, " lettere o";
print nuovafrase;
> ci sono 3 lettere o
> uttima giurnata uggi
Come vedi gli Array possono avere lunghezza di caselle differente e ci sono vari modi per determinare quante caselle debba avere.
Il più semplice e tramite l'assegnazione letterale (E' quella che ai visto sin ora.)
Praticamente nel creare l'Array determini anche quante caselle ha.
Durante l'uso si può aggiungere altre caselle con il comando
append
E tramite la libreria Array manipolarli in modo più complesso.
Vabbè ma è tutta qua ste grande vantaggio degli array??? se voglio faccio la stessa cosa con substr() index() ....
Bravo! prova allora ad invertirmi questo....
numeri=[0,1,2,3,4,5,6,7,8,9,128];
Eggià perché gli Array possono fare quello che si fa sulle lettere anche con i numeri.
Non Solo...
Un altro nome utilizzato per gli Array è variabile indicizzata.....Immaginate di avere una serie di nomi di vostri amici.
Mario
Piero
Valerio
Paolo
Saverio
Luca
Gino
Antonio
Matteo
su questa serie di nomi volete compiere varie operazioni tipo:
stampare la lista cosi come è poi in senso inverso poi stamparne uno si uno nò ecc.
Se ogni nome fosse associato ad una variabile per fare quanto qui esposto vi servirebbero molte pagine di codice. Ma se lo vediamo come un Array....
0 Mario
1 Piero
2 Valerio
3 Paolo
4 Saverio
5 Luca
6 Gino
7 Antonio
8 Matteo
Si chiama anche variabile indicizzata perchè è come se ogni nome abbia un indice numerico, per stamapre l'elenco basta fare così.
amici=["Mario","Piero","Valerio","Paolo","Saverio","Luca","Gino","Antonio","Matteo"];
for c=0 to 8 do
print amici[c];
end;
> Mario
> Piero
> Valerio
> Paolo
> Saverio
> Luca
> Gino
> Antonio
> Matteo
per stamparla in inverso così.
amici=["Mario","Piero","Valerio","Paolo","Saverio","Luca","Gino","Antonio","Matteo"];
for c=8 to 0 by -1 do
print amici[c];
end;
> Matteo
> Antonio
> Gino
> Luca
> Saverio
> Paolo
> Valerio
> Piero
> Mario
Così stampa solo i nomi pari.
amici=["Mario","Piero","Valerio","Paolo","Saverio","Luca","Gino","Antonio","Matteo"];
for c=0 to 8 do
if c%2=0 then print amici[c]; else print; end;
end;
> Matteo
>
> Valerio
>
> Saverio
>
> Gino
>
> Matteo
Più in là vedrete che con gli Array potrete ordinare alfabeticamente questi nomi cosa praticamente quasi impossibile con le sole variabili semplici.
Avete notato che stavolta l'Array
amici[] non contiene una lettera sola ma addirittura una stringa?
ecchelelà lo sapevo lento se rintronato!!
In parte è vero nel tentativo di farvela semplice ho barato un pochino...
Più in là vedrete che gli Array possono contenere non solo sequenze congrue di numeri o di lettere ma si può mescolare stringhe e numeri e le singole caselle possono contenere altri Array e funzioni ecc.
Quando un Array contiene altri Array (e solo Array) li si chiama matrici o Array a più dimensioni.
In submarine per memorizzare le immagini si è fatto uso di un Array a più dimensioni.
Per ora conviene fermarsi qui e prendere confidenza con quelli più semplici.
Spero di potervi postare dei semplici esempi come qui riportato per prender pratica nel loro uso.