Pagina 2 di 2

Inviato: gio 08 nov 2007 11:45 am
da themago
stefy ha scritto::) , c'è un particolare che mi sfugge: con la macro del capitano ho aggiunto per sbaglio una lettera oltre che ai numeri, e non ha dato il risultato.
Ho provato a fare lo stesso con la macro di ixa e tutto funziona, per quale ragione
Provo a risponderti:
La macro del Cap ha defininito (DIM) che le varibili siano dei numeri (integer).
Ixa non ha messo questa "limitazione"
Ciao

Inviato: gio 08 nov 2007 11:08 pm
da Capitan Farloc
Hai ragione ixa, mi ero già accorto (proprio con le indicazioni che hai dato per effettuare il debug) che si fermava su quella istruzione, ma non capivo il perchè. Io avevo proprio tolto la funzione STR() perchè tanto la variabile di input era già definita come stringa.
Volevo invece soffermarmi un pochino (per chi non è così "ferrato" nella programmazione) a spiegare le istruzioni usate da me e da ixa...
in particolare:
For Ind = 1 To Len(Valore_in_Cella)
If IsNumeric(Mid(Valore_in_Cella, Ind, 1)) Then stefy = stefy + Val(Mid(Valore_in_Cella, Ind, 1))
Next Ind
LEN(...) è una funzione che (come quella che abbiamo costruito noi, ma questa esiste già e fa parte del linguaggio) prende in input una "stringa di caratteri" (una parola, una frase ecc.) e "ritorna" la lunghezza, cioè il numero di caratteri da cui è formata. Questa è un po la chiave che ci consente di risolvere un problema dove quello che scriviamo (come nel nostro caso) può essere più lungo o più corto.
For Ind = 1 To Len(Valore_in_Cella)
...
Next Ind

Questo gruppo di istruzioni si dicono "iterative" in quanto è un sistema per eseguire una certa operazione un numero N di volte. In queto caso tutte le istruzioni che sono scritte tra l'istruzione FOR e quella NEXT vengono ripetute tante volte quanti sono i numeri tra 1 ed il "Numero di Caratteri che compone la parola o frase scritta in Valore_in_Cella" (cioè il valore ritornato dalla funzione Len() ) ed ogni volta che queste istruzioni vengono ripetute, nel campo "Ind" ci sarà un valore numerico che parte da 1 e viene incrementato di 1 in ogni ciclo fino ad arrivare al suo massimo.
Mid(Valore_in_Cella, Ind, 1)
Mid() è un'altra funzione che ha tre parametri in input, e ritorna della stringa messa come primo carattere, i caratteri a partire dal valore contenuto nel secondo parametro per una lunghezza di caratteri definita con il terzo parametro... quindi messa dentro il ciclo for di prima l'istruzione consente di prendere di volta in volta un carattere alla volta della stringa di input e... farci quello che vogliamo...
Siccome volevamo sommare tutte le cifre del numero dato in input...
stefy = stefy + Val(Mid(Valore_in_Cella, Ind, 1))
Val è un altra funzione che converte una numero dal formato "stringa" al formato "numerico"...
Un campo o "variabile" in formato stringa può contenere qualsiasi carattere stampabile della tastiera, lettere, numeri, simboli, punti, virgole ecc. mentre un campo definito numerico può contenere soltanto numeri, ma è l'unico campo con cui si possono eseguire delle operazioni algebriche. Quindi se vogliamo eseguire operazioni con numeri contenuti in un campo stringa dobbiamo convertirli in numerico con la vunzione VAL(). Naturalmente se nella stringa che diamo in input alla funzione non c'è un numero, la funzione ritorna zero.
Domani (se a qualcuno può interessare) parliamo un pochino dei valori booleani e dell'istruzione IF
Ciao

Inviato: dom 11 nov 2007 5:44 pm
da Capitan Farloc
Eccoci finalmente a parlare di una delle istruzioni fondamentali per qualsiasi linguaggio di programmazione...
L'istruzione che ci permettere di decidere cosa fare se....
Come nell'esempio che ixa ha aggiunto alla funzione in cui dice:
Se è un numero allora sommalo, altrimenti... no!
L'istruzione IF
Ma prima di parlare dell'istruzione vera e propria, dovremo accennare qualcosa sulle "variabili booleane".
Fino ad ora abbiamo visto che le variabili (i campi per intenderci) possono essere di tipo:
STRINGA = Posono contenere sia lettere che numeri ma non possono essere usate per operazioni algebriche anche se contengono solo numeri
NUMERICO = Può contenere solamente numeri ed è utilizzabile per fare qualsiasi tipo di operazione algebrica.
Ora introduciamo un nuovo tipo di variabile
BOOLEANA = Che può valere soltanto VERO o FALSO (o detto in inglese TRUE o FALSE).
Badate bene, non la scritta "VERO" o "FALSO" ma il valore logico VERO o FALSO.
Naturalmente non solo una variabile può essere di tipo Booleano, ma anche una funzione o una espressione può ritornare un valore Vero o Falso.
Esempi:
L'espressione (5 = 3) ritorna un valore FALSO
L'espressione (5 > 3) cinque maggiore di tre ritorna un valore VERO
La funzione IsNumeric() ritorna VERO se ciò che gli è passato come parametro all'interno delle parentesi è un numero, FALSO in caso contrario.
Ma cosa ci facciamo poi con questi valori?
Li utilizziamo con l'istruzione IF
If IsNumeric(Mid(Valore_in_Cella, Ind, 1)) Then stefy = stefy + Val(Mid(Valore_in_Cella, Ind, 1))
La sintassi è:
IF (espressiono vera o falsa) THEN (istruzione da eseguire nel caso che l'espressione assuma il valore VERO)
Oppure nella forma completa:
IF (espressiono vera o falsa) THEN
(gruppo di istruzioni da eseguire nel caso che l'espressione assuma il valore VERO)
ELSE
(gruppo di istruzioni da eseguire nel caso che l'espressione assuma il valore FALSO)
END IF
Ciao Ciao e... alla prossima

Inviato: ven 30 mag 2008 7:26 pm
da Formica
Ho letto con piacere questa discussione; quanta creativita', complimenti!

Formica47