Newsgroup: it.comp.lang.visual-basic
Titolo: non si finisce mai di imparare

avete presente il ciclo for?
credo che sia presente in tutti i vari dialetti "basic" fin dalla loro
creazione, non dovrebbe riservare più alcuna sorpresa...
ebbene, giusto ieri, ho scoperto una cosa nuova. nuova per me, naturalmente.
dim i as integer
dim j as integer
j = 10
for i = 1 to j
    j = j - 1
next i
msgbox i
avrei giurato che nel msgbox dovesse comparire una cosa del tipo "6", e
invece compare "11"
-- 
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

 e invece compare "11"
E' strano ma a senso...
Direi che il dor viene settato e non guarda più la variabile j ma cicla sul
valore della variabile all'inizio...
-- 
Alex
"Un uomo saggio impara dall'esperienza,
un uomo ancora più saggio impara dall'esperienza degli altri." (Saggio
Cinese)

 cicla sul valore della variabile all'inizio...
direi anche io che il funzionamento è quello, ma non me ne ero mai reso
conto.


 invece compare "11"
Forse c'e' un motivo per cui non lo sapevi...perche' non si fa!! NON SI
FA!!!
;-D
Oltre a rendere il codice piu' difficile da leggere, lo rende anche molto
piu' complicato da debuggare e da prevedere.
E poi non e' sicuro, perche' il modo in cui il For Next viene tradotto in
codice macchina potrebbe anche cambiare sensibilmente, rendendo non
funzionante il codice.
(spero di non essermi espresso in maniera troppo brusca, lungi da me
l'atteggiamento da "professore" :-) )

 e invece compare "11"
Non vedo il problema... La variabile del ciclo č i ed č quella che esponi
nel MsgBox (all'uscita č uno step in piů, o in meno se lo step č
decrescente, del limite "To"), la variabile che modifichi nel ciclo č j,
altra cosa. Puoi spiegarti meglio?

 
Non capisco il dubbio. L'intervallo per i viene definito all'entrata del 
ciclo.
i = 1 to j non e' una assegnazione.
ciao
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

 
Leggi "assegnazione permanente"


ciclo.
Beh, mica detto. 
Altri linguaggi (C++, Java) valutano la variabile di fine ciclo a ogni
ciclo. E mi par di ricordare che lo facesse anche il Pascal.....
Ciao!
Luca

 maxx
ciaociao

 è j, altra cosa. Puoi spiegarti meglio?
Credo d'aver capito cosa intendi: la j di fine ciclo "(... To j)" viene
"congelata/duplicata" all'attivazione del ciclo e il limite non cambia anche
se cambi la variabile. Cosa diversa sarebbe (con pasticciacci potenziali) se
tu modificassi, nel ciclo, i...
    j = 10
    For i = 1 To j
        j = 0
        Debug.Print i, j
    Next i

Il 20/04/2004 17.06, Luca Menegotto scrisse:

Scusa, ma forse hai sbagliato NG!
;-)


[Luca Menegotto = 
circa_otl...@yahoo.it
 in
11fa80hqq5ar5eade...@4ax.com
] ha scritto:

Puň essere (non li conosco), ma qualcosa di simile č emulabile in VB con Do
While/Until. Il For di VB congela...

 decremento j, il ciclo dovrebbe terminare prima
No, i limiti Da/A  vengono congelati al primo avvio del ciclo.


Per me è ok, volevo solo spiegare il dubbio di Sergio.... ;-)
ciaociao


Ripeto, nell'istruzione for in visual basic (perche' altrimenti ci sono 
dei pignoli che mi dicono che si puo' scrivere i++;j-- ;-) non c'e' 
assegnazione di variabile, i non e' un riferimento all'oggetto j+1 e 
quindi se varia j, varia anche i.
Ma all'inizio dell'esecuzione della for viene effettuata l'assegnazione 
dei limiti per la variabile i.


 maxx
ciaociao

 
Ed io di fugarli.
:-)


 maxx
allora quota lui :-D
(va beh, ci siamo capiti!!) ;-)
ciaociao

 quindi se varia j, varia anche i.
Scusa, forse non ho capito bene il senso del tuo messaggio, ma non mi sembra
che abbia niente a che vedere con il problema esposto.
Anzi, ad essere sinceri non mi pare proprio che abbia senso il mex in se :-)

 
Lui e' gia' andato a casa!


 Anzi, ad essere sinceri non mi pare proprio che abbia senso il mex in se 
P.S. Io ci andrei piano a scrivere certe frasi a chi non si conosce, con 
o senza faccine.


 o senza faccine.
Beh, per prima cosa scrivere
"i = 1 to j non e' una assegnazione permanente" e' una frase senza
significato, tanto piu' se detta ad un programmatore, se consideri che in
nessun linguaggio di programmazione comunemente conosciuto puo' esistere un
costrutto del genere.
e parimenti il periodo
"Ripeto, nell'istruzione for in visual basic non c'e'
assegnazione di variabile, i non e' un riferimento all'oggetto j+1 e
quindi se varia j, varia anche i.
"
In cui si enuncia che la variabile J+1 non e' un oggetto, beh...a me sembra
una frase senza senso. Tantomeno riferita ad un oggetto, visto che se anche
i fosse un puntatore e j fosse un oggetto la scrittura i=j+1 farebbe puntare
i alla locazione di memoria successiva a J, svincolandola completamente da
quest'ultima.
Insomma, mi sembrava che il messaggio non fosse ne' corretto dal punto di
vista dei contenuti ne' avesse qualcosa a che fare con il problema di
CSSoft.
Tutto questo, ovviamente, IMHO. Nel caso, giudichino gli altri.

 reso conto.
Beh anche io ovviamente :-)


 
Si', sto qui ad aspettare le votazioni.
Buonanotte
	maxx


 i = 1 to j non e' una assegnazione.
temo ci sia stato un bel missingunderstanding (cit. Briatore) tra te e
drizzt.
il mio dubbio verteva proprio sul fatto che pensavo che la verifica della
variabile del ciclo (nell'esempio che ho fatto io la i) fosse effettuata, ad
ogni interazione, valutando al momento le variabili coinvolte (perchè in
questo caso l'intervallo è definito in riferimento ad una variabile)
invece vb, evidentemente, "fotografa" l'intervallo all'entrata del ciclo, e
lo tiene valido per tutte le iterazioni.
quando tu, in un post successivo scrivi:
"Per dare l'interpretazione che si aspettava lui e' come se, una volta
assegnato i=1 to j, il valore di i variasse al variare di j nel ciclo."
esprimi abbastanza scorrettamente il tuo stesso pensiero (lo riconosco, era
la quarta volta che lo spiegavi, e forse le metafore cominciavano a
scarseggiare), perchè variando j nessuno penserebbe mai di cambiare il
valore di i, ma semmai il limite del valore di i


 ciclo. E mi par di ricordare che lo facesse anche il Pascal.....
Posso confermare per quanto riguarda C++ e Java
bye
-- 
Esistono 10 tipi di persone: chi conosce il binario e chi no.
Gestione Ottica - Gestionale per Ottici e Programmi Gratuiti su:
http://www.nicolaottomano.it