sommare numeri

Per chi ha poca pratica con questi prodotti, quì non troverà  dei guru in grado di snociolare risposte a tutti i quesiti, ma delle persone appassionate che mettono a disposizione tutta la loro passione per trovare insieme le soluzioni migliori.

Moderatori: isex, mariobrossh, donatella

themago
Messaggi: 379
Iscritto il: ven 01 giu 2007 3:29 pm

Messaggio 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
Avatar utente
Capitan Farloc
Site Admin
Messaggi: 9648
Iscritto il: gio 29 dic 2005 10:58 pm
Località: Roma

Messaggio 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
Avatar utente
Capitan Farloc
Site Admin
Messaggi: 9648
Iscritto il: gio 29 dic 2005 10:58 pm
Località: Roma

Messaggio 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
Formica
Messaggi: 12
Iscritto il: gio 29 mag 2008 6:53 pm

Messaggio da Formica »

Ho letto con piacere questa discussione; quanta creativita', complimenti!

Formica47
Formica
Rispondi