Newsgroup: it.comp.lang.visual-basic
Titolo: Do Loop... inefficace

Ciao,
devo passare 2 numeri a caso a 2 label e fare in modo che il primo sia
sempre più grande del secondo.
Ho provato così:
(Su Command1) 'perdonate ma a casa non ho VB e posso sbagliare... ;-))
Dim numero, numero1 as integer
numero = Int((Rnd * 100) +1)
numero1=Int((Rnd * 100) +1)
Do Until numero > numero1
    If numero > numero1 then
    label1.caption = numero
    label2.caption = numero1
    Else
    Int((Rnd * 100) +1)=numero
    Int((Rnd * 100) +1)=numero1
   EndIf
Exit Do
Loop
End Sub
=========
Io vorrei che lui mi rifacesse il calcolo di altri due numeri fino a quando
non ne trova 2 tra 1 e 100 dei quali il primo è più grande del secondo
utilizzando il loop.
Così va ma se becca la condizione negativa... il Command fa cilecca!!
Ho provato anche con un DO.... LOOP UNTIL ma non c'è verso, non passa nulla
alle label.
Avete delle dritte??
Excelsior,
Stefano

 (Su Command1) 'perdonate ma a casa non ho VB e posso sbagliare... ;-))
dunque:
Dim numero, numero1 as integer
Do
    numero = Int((Rnd * 100) +1)
    numero1=Int((Rnd * 100) +1)
Loop until numero1 > numero
label1.caption = numero
label2.caption = numero1
 End Sub
cosi' dovrebbe andare meglio
anche se....
numero = Int((Rnd * 100) +1)
numero1=Int((Rnd * (100-numero)) +numero)
forse cosi' eviti il loop
Ciao
Enrico

Ciao, prova così:
Dim l_iNum1 as Integer
Dim l_iNum2 as Integer
l_iNum1 =  Int((Rnd * 100) +1)
l_iNum2 = 0
While l_iNum2 <= l_iNum1 'Ciclo finchè il 2° num. è < del primo
    l_iNum2 =  Int((Rnd * 100) +1)
Wend
'A questo punto hai i due numeri, dato che il 1° è fisso, e il secondo è
valido solo quando maggiore
L'unico problema è se hai la sfiga che il 1° num sia il massimo ottenibile
(100) e quindi ti cicla infinitamente, cmq puoi ovviare al problema dicendo
che il range del 1° num sia tra 1 e 99...
Byez
Tango


Potrei sbagliarmi, ma la funzione rnd ( e le random in genere ) non
comprendono mai l'estremo superiore! 
se x= rnd
0 <= x < 1
ciao
	maxx

Beh, secondo me:
Dim numero, numero1, buffer as integer
numero = Int((Rnd * 100) +1)
numero1=Int((Rnd * 100) +1)
if numero > numero1 then
    buffer=numero
    numero=numero1
    numero1=buffer
end if
Se numero è maggiore di numero1 li scambia...o il loop è così necessario?

 utilizzando il loop.
Perche' vuoi usare per forza il loop? Cosi' non va bene?
Dim Num1 As Integer, Num2 As Integer
Num1 = Int((Rnd * 100) + 1)
Num2 = Int((Rnd * 100) + 1)
If Num1 >= Num2 Then
   Label1.Caption = Num1
   Label2.Caption = Num2
Else
   Label1.Caption = Num2
   Label2.Caption = Num1
End If
Se proprio vuoi usare il loop, segui il suggerimenti di machi
Ricorda pero' che se scrivi
Dim numero, numero1 as Integer
solo numero1 e' intero, numero e' variant.
-- 
Samuele Battarra
mail server: 
libero.it
, account: battarsa
prova il mio newsreader:
http://digilander.iol.it/battarsa/programmi/leggiminews.html

Dim numero, numero1 as integer
Agh... Questa e' sbagliatissima... hai creato un variant e un integer
Dim numero as integer
Dim numero1 as integer
Comunque io non userei nemmeno una variabile:
label1.caption = int((rnd*100)+1)
label2.capgion = val(label1.caption) + abs(int(rnd*100)+1)
Saluti.
-- 
      Gianni "bugbarbeq" Rondinini, 25, RA, 242, 152
  VBR - Vero Birro Romagnolo®, diffidate dalle imitazioni!
 Opel/ECC Calibrezio EVO-VI --- Kawasaki "Gas Gas" ZZ-R 1100
 ICQ# 36893168 - IRCNet: bugbarbeq, @ on #linux-it & #NetBSD
   On contrary of popular belief, Unix *IS* user friendly:
    it just appears to be selective who it is friend with