Visual Basic - duda con procedimiento

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

duda con procedimiento

Publicado por raymond (107 intervenciones) el 15/06/2003 12:06:56
como puedo hacer para meter dos datos en un procedimiento y que me cambien los originales por ejemplo=

Private Sub simplifica(nume As Integer, deno as integer)
While (nume Mod 2 = 0) Or (nume Mod 5 = 0)
If nume Mod 2 = 0 Then
nume = nume / 2
deno = deno / 2
Else: nume = nume / 5
deno = deno / 5
End If
Wend
End Sub
.
.
("lo llamo en el programa")

simplifica (nume1,deno1)
simplifica (nume2,deno2)

ocupo que me cambien lo valores de nume1,nume2,deno1 y deno2...
como lo puedo hacer ?
se entiende??
esque no lo puedo hacer..
.
.
.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:duda con procedimiento

Publicado por Draker (5 intervenciones) el 15/06/2003 12:37:26
Utiliza el comando ByRef, ya que cuando se omite el comando previo en los parametros de los procedimientos estos pasan por valor (ByVal). Intenta completando tu codigo de la manera siguiente:

Private Sub simplifica(ByRef nume As Integer,ByRef deno as integer)
While (nume Mod 2 = 0) Or (nume Mod 5 = 0)
If nume Mod 2 = 0 Then
nume = nume / 2
deno = deno / 2
Else: nume = nume / 5
deno = deno / 5
End If
Wend
End Sub

Espero te funcione
Draker

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:duda con procedimiento

Publicado por raymond (107 intervenciones) el 15/06/2003 12:50:43
No me sirvio..
checa mi programa y ve si puedes decirme que pasa?
porfavor....
aqui esta:

Option Explicit
Dim numero1 As String
Dim numero2 As String
Dim nume1 As Integer
Dim nume2 As Integer
Dim deno1 As Integer
Dim deno2 As Integer
Dim valor1 As String
Dim valor2 As String

Private Sub simplifica(ByRef nume As Integer, ByRef deno As Integer)
While (nume Mod 2 = 0) Or (nume Mod 5 = 0)
If nume Mod 2 = 0 Then
nume = nume / 2
deno = deno / 2
Else: nume = nume / 5
deno = deno / 5
End If
Wend
End Sub
Private Sub Command1_Click()
Dim i As Integer
nume1 = 0
nume2 = 0
valor1 = ""
valor2 = ""
Randomize (10000)
numero1 = ((6 * Rnd) + 1)
Randomize (10000)
numero2 = ((6 * Rnd) + 1)
For i = 1 To 4
If i <> 2 Then
nume1 = (nume1 * 10)
nume1 = nume1 + (Mid(numero1, i, 1))
nume2 = (nume2 * 10)
nume2 = nume2 + (Mid(numero2, i, 1))
End If
Next
deno1 = 100
deno2 = 100
simplifica(nume1,deno1)
simplifica(nume2,deno2)
MsgBox (nume1 & " / " & deno1 & " " & nume2 & " / " & deno2)
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:duda con procedimiento

Publicado por Draker (5 intervenciones) el 16/06/2003 08:09:37
el error que veo es de sintaxis, el procedimiento simplifica no se puede llamar con los parametros entre parentesis, esto solo se puede realizar con las funciones. En otras palabras cambia tu codigo de la siguiente manera:
de: simplifica(nume1,deno1)
a : simplifica nume1, deno1 ' Sin parentesis'

Si tu codigo tiene los parentesis probablemente esta en rojo tu codigo en esas lineas. Siempre se tiene que escribir ByRef, a parte de este error. Copie el codigo y lo corri, y me dio los siguientes resultados:
' para los valores:
' nume1 = 168, deno1 = 100, nume2 = 662, deno2 = 100
' al palicar el procedimiento
simplifica nume1, deno1
simplifica nume2, deno2
' Resulta:
' nume1 = 21
' deno1 = 12
' nume2 = 331
' deno2 = 50

Verifique tu procedimiento y los valores son los esperado. Pruebalo y me avisas.
Draker

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:duda con procedimiento

Publicado por raymond (107 intervenciones) el 16/06/2003 10:27:35
racias si ya me sirvio..
agradesco tu ayuda..
cualquier cosa en que te pueda ayudar solo escribe..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar