Visual Basic - Se cuelga al hacer muchos cálculos

Life is soft - evento anual de software empresarial
 
Vista:

Se cuelga al hacer muchos cálculos

Publicado por Eugenio (5 intervenciones) el 23/05/2001 19:50:02
Hola, he realizado algunas aplicaciones en Visual Basic y cuando se realizan muchas operaciones se queda colgado el programa.

Las definiciones de variables están dentro del intervalo, y me da igual que dure 5 minutos en hacerme una cosa, pero que no se cuelgue.

Me parece que si no puede realizar más de 1 millón de cálculos sin bloquearse, el Visual Basic es un lenguaje no muy optimizado.

Este es un ejemplo, cuando le pongo un intervalo mayor a 800 se cuelga el programa.

--------
Option Explicit
Dim suma1 As Long
Dim suma2 As Long
Dim num1 As Long, num2 As Long
Dim i As Long
Dim j As Long
Dim b As Long

Private Function amigos(x As Long, y As Long) As Boolean
Dim k As Long
amigos = False
suma1 = 0
suma2 = 0
For k = 1 To (x - 1)
If x Mod k = 0 Then
suma1 = suma1 + k
End If
Next
For k = 1 To (y - 1)
If y Mod k = 0 Then
suma2 = suma2 + k
End If
Next
If suma1 = y And suma2 = x Then
amigos = True
End If
End Function
Private Sub Command1_Click()
Text3.Text = ""
num1 = Val(Text1.Text)
i = 0
num2 = Val(Text2.Text)
While i < num2
i = i + 1
j = num2 - 1
If amigos(i, j) = True And i <> j Then
Text3.Text = Text3.Text + Str(i) + " y " + Str(j) + vbCrLf
End If
Wend
If Text3.Text = "" Then
Text3.Text = "No hay números amigos"
End If
End Sub
--------

Gracias de antemano
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: El código estaba mal. Este si es el válido

Publicado por Eugenio (5 intervenciones) el 23/05/2001 20:11:57
Option Explicit
Dim suma1 As Long
Dim suma2 As Long
Dim num1 As Long, num2 As Long
Dim j As Long
Dim k As Long

Private Function amigos(x As Long, y As Long) As Boolean
Dim i As Long
amigos = False
suma1 = 0
suma2 = 0
For i = 1 To (x - 1)
If x Mod i = 0 Then
suma1 = suma1 + i
End If
Next
For i = 1 To (y - 1)
If y Mod i = 0 Then
suma2 = suma2 + i
End If
Next
If suma1 = y And suma2 = x Then
amigos = True
End If
End Function
Private Sub Command1_Click()
num1 = Val(Text1.Text)
num2 = Val(Text2.Text)
For j = num1 To num2
For k = j To num2
If amigos(j, k) = True Then
Text3.Text = Text3.Text + Str(j) + " y " + Str(k) + vbCrLf
End If
Next k
Next j
If Text3.Text = "" Then
Text3.Text = "No hay números amigos"
End If
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: El código estaba mal. Este si es el válido

Publicado por Eugenio (5 intervenciones) el 23/05/2001 20:15:37
Pero también se queda bloqueado en un intervalo mayor a 1000
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