Cuando llega el codigo al algoritmo de la burbuja, no me ordena los vaores de la matriz, no puedo poner muchos for, esa es la pregunta.
Un salduo
Gracias
Private Sub Command1_Click()
Dim numescaños As Double
numescaños = Val(Text3.Text - 1)
Dim temp, n As Double
Dim hasta As Double
Dim m As Double
n = Val(4 * (numescaños + 1))
Dim i, j As Double
ReDim matriz(numescaños, 3)
ReDim vector(n)
Dim votos(3) As Long
m = 0
matriz(0, 0) = Text1(0).Text
matriz(0, 1) = Text1(1).Text
matriz(0, 2) = Text1(2).Text
matriz(0, 3) = Text1(3).Text
vector(0) = Text1(0).Text
vector(1) = Text1(1).Text
vector(2) = Text1(2).Text
vector(3) = Text1(3).Text
minimo = -3
For i = 1 To numescaños
minimo = minimo + 3
For j = 0 To 3
dimension = Val(i + j + minimo + 3)
matriz(i, j) = Val(matriz(0, j) / (i + 1))
vector(dimension) = Val(matriz(0, j) / (i + 1))
'MsgBox (matriz(i, j))
Next
Next
For z = 0 To n - 1
For x = 0 To n
If vector(x) > vector(x + 1) Then
temp = vector(x)
vector(x + 1) = vector(x)
vector(x) = temp
End If
Next x
Next z
For a = 0 To n - 1
MsgBox (vector(a))
Next
hasta = vector(numescaños)
MsgBox (hasta)
MsgBox (hasta)
For t = 0 To 3
votos(t) = 0
Next
For x = 0 To numescaños
For j = 0 To 3
If matriz(x, j) > hasta Then
votos(j) = Val(votos(j) + 1)
k = k + 1
Else
End If
Next
Next
MsgBox (k)
For z = 0 To 3
MsgBox (votos(z))
Next
End Sub
1. No entendí un carajo. Obviamente puedo poner todos los FOR que se te de la gana, la cuestión es el motivo de usar tantos. Por ejemplo:
Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim d As Integer
Dim e As Integer
Dim f As Integer
For a = 0 To 10
For b = 0 To 10
For c = 0 To 10
For d = 0 To 10
For e = 0 To 10
For f = 0 To 10
MsgBox "Esto para que?"
Next
Next
Next
Next
Next
Next
2. Pon el código entre la etiqueta correspondiente.
3. Que quieres hacer?
Cita de: llegaraprogramador en 12 Junio 2010, 00:51 AM
Cuando llega el codigo al algoritmo de la burbuja:
Aqui tienes uno mas rapido:
http://foro.elhacker.net/empty-t272312.0.html
y aqui uno por parte de LeandroA
http://www.leandroascierto.com.ar/foro/index.php?topic=279.0
PD.: Usa Geshi
code=vb, Ordena tu Codigo para que sea mas legible. seguro no puedes agregar muchos For Next por que no as cerrado algun
For!¡.
Dulce Infieno Lunar!¡.
Todo eso para ordenar por burbuja?
Private Sub Command1_Click()
Dim numescaños As Double
Dim temp, n As Double
Dim hasta As Double
Dim m As Double
Dim i, j As Double
Dim votos(3) As Long
ReDim matriz(numescaños, 3)
ReDim vector(n)
numescaños = Val(Text3.Text - 1)
n = Val(4 * (numescaños + 1))
m = 0
matriz(0, 0) = Text1(0).Text
matriz(0, 1) = Text1(1).Text
matriz(0, 2) = Text1(2).Text
matriz(0, 3) = Text1(3).Text
vector(0) = Text1(0).Text
vector(1) = Text1(1).Text
vector(2) = Text1(2).Text
vector(3) = Text1(3).Text
minimo = -3 ' ¿?
For i = 1 To numescaños
minimo = minimo + 3
For j = 0 To 3
dimension = Val(i + j + minimo + 3)
matriz(i, j) = Val(matriz(0, j) / (i + 1))
vector(dimension) = Val(matriz(0, j) / (i + 1))
'MsgBox (matriz(i, j))
Next j
Next i
For z = 0 To n - 1
For x = 0 To n
If vector(x) > vector(x + 1) Then
temp = vector(x)
vector(x + 1) = vector(x)
vector(x) = temp
End If
Next x
Next z
For a = 0 To n - 1
MsgBox (vector(a)) ' ¿(a)?
Next a
hasta = vector(numescaños)
MsgBox (hasta)
MsgBox (hasta)
For t = 0 To 3
votos(t) = 0' ¿?
Next t
For x = 0 To numescaños
For j = 0 To 3
If matriz(x, j) > hasta Then
votos(j) = Val(votos(j) + 1)
k = k + 1
Else
'What the fuck this is?
End If
Next j
Next x
MsgBox (k) ' ¿Que es k?
For z = 0 To 3
MsgBox (votos(z)) ' ¿(z)?
Next z
End Sub
por hay lei que
For z = 0 To 3
MsgBox (votos(z)) ' ¿(z)?
Next
Es mas rapido que
For z = 0 To 3
MsgBox (votos(z)) ' ¿(z)?
Next z
Ya que Next buscaria el for que invoca al contador z
Dulce Infierno Lunar!¡,
Interesting donde lo leiste, igual yo no lo uso, solo los puse para identificar la cantidad y cierre de FOR's
Cita de: shellroot@alex-laptop:~$ en 12 Junio 2010, 02:00 AM
Interesting donde lo leiste, igual yo no lo uso, solo los puse para identificar la cantidad y cierre de FOR's
yo hago algo similar solo que enlugar de poner la variable contador porgo la expresion xP
For z = 0 To 3
MsgBox (votos(z)) ' ¿(z)?
Next ' // For z = 0 To 3
Aqui un codigo de Prueva para lo del
For ... Next (Aun que no estoy muy convensido)
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Sub main()
Dim Lng_Ini As Long
Dim Lng_IniforNext As Long
Const Lng_ForNextMax As Long = 9999952#
Dim Int_Test As Integer
Const Int_CantTest As Integer = 10
Int_Test = 0
Do While Int_Test < Int_CantTest
Debug.Print ""
Debug.Print "prueba Numero"; Int_Test + 1
Debug.Print "Inicializando: For ... Next Lng_IniforNext"
Lng_Ini = GetTickCount
For Lng_IniforNext = 1 To Lng_ForNextMax
Next
Debug.Print "Tiempo Transcurrido;"; GetTickCount - Lng_IniforNext
Debug.Print "Inicializando: For ... Next"
Lng_Ini = GetTickCount
For Lng_IniforNext = 1 To Lng_ForNextMax
Next Lng_IniforNext
Debug.Print "Tiempo Transcurrido;"; GetTickCount - Lng_IniforNext
Int_Test = Int_Test + 1
Loop
End Sub
P.D.: Creo que lo vi en VBSpeed.
Dulce Infierno Lunar!¡.
Este programa es para calcular los votos de cuatro partidos polítocos por la lei de d´hont http://www.elmundo.es/elecciones2000/cifras/dhont.html, para realizar esta tarea tengo que hacer division de los votos por cada escaña es decir:
El indice de partidos y escaños empieza por 0 para que sea mas facil de orientarse en una matriz
Partido A: 60 VOTOS
PARTIDO B: 100 VOTOS
PARTIDO C: 400 VOTOS
PARTIDO D: 200 VOTOS
En cada escaño se van haciendo sucesivas divisiones.
Partidos/Escaños 0 (Escaño1) 1 (Escaño2) 2 (Escaño 3) 3 (Escaño 4)
0 (A) 60 30 20 15
1 (B) 100 50 16,3 25
2 (C) 400 200 133,33 100
3 (D) 200 100 66,6 50
Se cogen los valores mas altos de todo el array, hasta el numero de escaños que quieras. En el ejemplo de arriba 400,200,200,133,3
Como lo quiero hacer yo, creo una matriz de dos dimensiones, los valores del primer escaño ya los pongo directamente sin bucle, despues con un bucle for anidadado hago las sucesivas divisiones para los demas escaños
For i = 1 To numescaños
minimo = minimo + 3
For j = 0 To 3
dimension = Val(i + j + minimo + 3)
matriz(i, j) = Val(matriz(0, j) / (i + 1))
vector(dimension) = Val(matriz(0, j) / (i + 1))
'MsgBox (matriz(i, j))
Next
Next
ademas creo otra matriz pero esta vez unidireccional para despues ordenarlos, es decir una matriz de 16 dimensiones para el ejemplo anterior. Los cuatro primeros valores de esa matriz tambien son introducidos manualmente.
Pero despues para introducir las dimensiones al mismo tiempo que la matriz de dos dimensiones hago esto
minimo = -3
For i = 1 To numescaños
minimo = minimo + 3
For j = 0 To 3
dimension = Val(i + j + minimo + 3)
matriz(i, j) = Val(matriz(0, j) / (i + 1))
vector(dimension) = Val(matriz(0, j) / (i + 1))
para enterdo seria asi
que hace el bucle con la matriz de dos dimensiones
10= 1 + 3 +0 20= 2 +3 +3 30=3 + 3 + 6
11= 2 + 3 + 0 21=3 + 3 +3 31= 4 + 3 +6
12= 3 + 3+ 0 22=4 + 3 + 2 32 = 5 + 3 + 6
13= 4 + 3 +0 23= 5 + 3 + 3 33= 6 + 3 +6
despues con un algorimo de ordenamiento, por ejemplo el de burbuja pretendo ordenar esa matriz unidirecional para 15 elementos, posteriormente cogeria el valor que coincide con la variable numdeescaños
hasta = vector(numescaños)
Con unos bucles for anidados pretendo hacer comparar todo el array de dos dimensiones con el valor hasta anteriormnete calculado, los valores iguales o mayores que los introduzca a otro array con un contador.
La variable es para saber si conto el numero de escaños que debia, hay bastantes msgbox por todo el programa, son para saber si hace lo que tiene que hacer
Un saludo
Gracias
Espero que entienedan el funcionamiento del programa
Todo el problema viene cuando empieza a ordenar en el algoritmode burbuja, coge valores atípicos en el segundo valore
For x = 0 To numescaños
For j = 0 To 3
If matriz(x, j) >= hasta Then
votos(j) = Val(votos(j) + 1)
k = k + 1
Else
End If
Next
Next
Private Sub Command1_Click()
Dim numescaños As Double
numescaños = Val(Text3.Text - 1)
Dim temp, n As Double
Dim hasta As Double
Dim m As Double
n = Val(4 * (numescaños + 1))
Dim i, j As Double
ReDim matriz(numescaños, 3)
ReDim vector(n)
Dim votos(3) As Long
m = 0
matriz(0, 0) = Text1(0).Text
matriz(0, 1) = Text1(1).Text
matriz(0, 2) = Text1(2).Text
matriz(0, 3) = Text1(3).Text
vector(0) = Text1(0).Text
vector(1) = Text1(1).Text
vector(2) = Text1(2).Text
vector(3) = Text1(3).Text
minimo = -3
For i = 1 To numescaños
minimo = minimo + 3
For j = 0 To 3
dimension = Val(i + j + minimo + 3)
matriz(i, j) = Val(matriz(0, j) / (i + 1))
vector(dimension) = Val(matriz(0, j) / (i + 1))
'MsgBox (matriz(i, j))
Next
Next
For z = 0 To n - 1
For x = 0 To n
If vector(x) > vector(x + 1) Then
temp = vector(x)
vector(x + 1) = vector(x)
vector(x) = temp
End If
Next x
Next z
For a = 0 To n - 1
MsgBox (vector(a))
Next
hasta = vector(numescaños)
MsgBox (hasta)
MsgBox (hasta)
For t = 0 To 3
votos(t) = 0
Next
For x = 0 To numescaños
For j = 0 To 3
If matriz(x, j) > hasta Then
votos(j) = Val(votos(j) + 1)
k = k + 1
Else
End If
Next
Next
MsgBox (k)
For z = 0 To 3
MsgBox (votos(z))
Next
End Sub
Alguien me ayuda a arreglar esto
Te recomiendo que escribas tu código en GeSHi porque sino resulta ilegible el código y nadie le hará la gana de leerlo
Un poco más prolijo los posts señores.. :¬¬
Private Sub Command1_Click()
Dim numescaños As Double
numescaños = Val(Text3.Text - 1)
Dim temp, n As Double
Dim hasta As Double
Dim m As Double
n = Val(4 * (numescaños + 1))
Dim i, j As Double
ReDim matriz(numescaños, 3)
ReDim vector(n)
Dim votos(3) As Long
m = 0
matriz(0, 0) = Text1(0).Text
matriz(0, 1) = Text1(1).Text
matriz(0, 2) = Text1(2).Text
matriz(0, 3) = Text1(3).Text
vector(0) = Text1(0).Text
vector(1) = Text1(1).Text
vector(2) = Text1(2).Text
vector(3) = Text1(3).Text
minimo = -3
For i = 1 To numescaños
minimo = minimo + 3
For j = 0 To 3
dimension = Val(i + j + minimo + 3)
matriz(i, j) = Val(matriz(0, j) / (i + 1))
vector(dimension) = Val(matriz(0, j) / (i + 1))
'MsgBox (matriz(i, j))
Next
Next
For z = 0 To n - 1
For x = 0 To n
If vector(x) > vector(x + 1) Then
temp = vector(x)
vector(x + 1) = vector(x)
vector(x) = temp
End If
Next x
Next z
For a = 0 To n - 1
MsgBox (vector(a))
Next
hasta = vector(numescaños)
MsgBox (hasta)
MsgBox (hasta)
For t = 0 To 3
votos(t) = 0
Next
For x = 0 To numescaños
For j = 0 To 3
If matriz(x, j) > hasta Then
votos(j) = Val(votos(j) + 1)
k = k + 1
Else
End If
Next
Next
MsgBox (k)
For z = 0 To 3
MsgBox (votos(z))
Next
Sabes español? Lee lo que te puse en el anterior mensaje.