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