Newsgroup: it.comp.lang.visual-basic
Titolo: Grattacapo

Ciao
Scusate se il quesito e' troppo stupido, ma ci ho perso un pomeriggio.....
Dim i As Byte
Dim var_boh As Variant
' Questo ciclo non da' overflow.
For i = 0 To 10
    var_boh = i * 100000     ' centomila e tutto e' ok.
Next i
' Questo ciclo lo da'.
For i = 0 To 10
    boh = i * 10000       'diecimila e s'incazza!
Next i
Il problema si risolve con CLng(i * 10000), ma non
ho capito perche' il primo ciclo non va in overflow
nonostante il risultato della moltiplicazione sia
piu' grande del secondo ciclo.
il risultato di (i * 10000) dove viene messo prima
di essere trasferito in var_boh???
boh....
Ciao

 Next i
Prova a fare piripicchio=i, prima di uno dei due For.
Poi visualizza piripicchio (Visualizza, Finestra Variabili locali) e
capirai.

Per non perdere anche l'intera serata:
Ehmm, (Option Explicit docet), nel tuo post fai riferimento a var_boh, ma lo
sai che nel ciclo che va in errore usi boh, vero? ;-)

Nel primo caso è come se fosse:
For i = 0 To 10
    var_boh = i * 100000&
Next i
(NB: 100.000 è per forza long o single)
Nel secondo è come se fosse:
For i = 0 To 10
    boh = i * 10000%
Next i
Questo dipende dall'ottimizzatore di VB: usa sempre il tipo più adatto,
quindi, siccome 10000 sta in un integer, usa uno short. Inoltre, quando vb
fa un prodotto, usa sempre il tipo dell'operatore più esteso (in questo caso
l'integer, perché i è un byte, cioè 8 bit) per parcheggiare il risultato
temporaneo. Quindi quello che accade è che nel primo caso usa una temp var
long che regge fino a 2.147.483.647 e ci mette dentro al massimo 1.000.000;
nel secondo caso usa una temp var integer che regge fino a 32.767 e cerca di
metterci dentro un valore massimo 100.000. L'operatore a sinistra è
ininfluente (se non dopo il calcolo).
stefano.

metterci dentro un valore massimo 100.000.
Morale della favola... VB ce la mette tutta per facilitare le cose, ma in
questi casi bisogna sforzarsi di convertire le variabili in un tipo un po'
piu' comodo(per VB) se vogliamo usarle in un espressione?
Tanto per tediarvi un altro po' :
Il programma per cui vi ho chiesto aiuto l'ho terminato, pero'  un paio di
volte e' capitato che funzionando per qualche minuto a un certo punto non
controllasse piu' la porta parallela.
Una volta resettato il PC tutto e' tornato alla normalita' ; vi e' mai
capitato qualcosa di simile?
Grazie per il vostro aiuto
A presto(moooolto presto)
Massimo

 capitato qualcosa di simile?
Ma tu la vuoi davvero una risposta?

> Ma tu la vuoi davvero una risposta?
Comincio a capirti. Scusa se in passato ti ho rotto le palle.
stefano (alias nemesis).

 stefano (alias nemesis).
Ah, beh, mi ricordava un certo stile...
Rotto le palle? No, no, quello sarebbe niente.
Ma tu i tuoi post col precedente nick li hai letti?
Io, sarò duro, ma continuo a non capirti.

Dai, scherzavo!
(Il mio attore preferito è Groucho Marx)
stefano

 Ma tu i tuoi post col precedente nick li hai letti?
A parte che non ho capito a cosa vi riferiate con : "il precedente nick".
Guardate che non e' facile chiedere le cose giuste e spiegare bene quello di
cui si ha bisogno se l'argomento che si affronta e' totalmente nuovo. Magari
voi siete piu' abili ad "ottimizzare" le domande per ottenere esattamente le
risposte che volete e nel piu' breve tempo possibile, ma non siamo tutti
uguali!
Sul ng di elettronica ci sono persone che chiedono se montare un resistore
in un VERSO O NELL'ALTRO  in un determinato circuito, ma nessuno di quelli
esperti si sogna di dare addosso a questi principianti dandogli l'etichetta
di rompiballe.
Se proprio un tizio e' troppo antipatico o troppo stupido per degnarlo di
attenzione, io credo che la migliore cosa sia ignorarlo.
Ciao
Massimo

 attenzione, io credo che la migliore cosa sia ignorarlo.
La mia era un critica alla domanda posta.
Converrai che non c'era alcun elemento per poter dare una risposta tecnica.

 Converrai che non c'era alcun elemento per poter dare > una risposta
tecnica.
Hai ragione.
Rileggendo il mio post me ne rendo conto.
Ora vado a nanna. Mentre prendero' sonno cerchero' qualche altra domanda per
farti incazzare :)
Ciao
Massimo