Admin Admin
Cantidad de envíos : 40 Fecha de inscripción : 24/10/2008
| Tema: Resolución ejercicio Ley D´Hont Mar Oct 06, 2009 10:48 am | |
| Mi particular visión sobre el ejercicio de la ley D´Hont Empieza la ronda de preguntas - Código:
-
Imports System.Math Module Module1 Structure resultados Dim votos As Single Dim nombre As String
Dim porcentaje As Single Dim escaños As Integer End Structure Sub Main() Dim elec() As resultados Dim escaños As Integer
'introducimos numero escaños introescaños(escaños)
'La función introduce los datos en el array introdatos(elec)
'Calculamos porcentaje porcentaje(elec)
'Ordenamos según numero de votos ordena(elec)
'Aplicamos ley D'hont aplica(elec, escaños)
'Muestra los datos muestra(elec) End Sub Sub introdatos(ByRef elec() As resultados) Dim temporal As String Dim contador As Integer = 0 Do Console.Clear() Console.WriteLine("Introduzca el nombre del partido") temporal = Console.ReadLine() If (temporal <> "") Then
ReDim Preserve elec(contador) elec(contador).nombre = temporal Console.WriteLine("Introduzca el numero de votos") elec(contador).votos = Console.ReadLine() contador += 1 End If Loop Until temporal = "" End Sub Sub muestra(ByRef elec() As resultados) Dim color As Boolean = True
For Each dato In elec Console.WriteLine("----------------------------------") Console.WriteLine("El nombre: " & dato.nombre) Console.WriteLine("Numero de votos: " & dato.votos) Console.WriteLine("Porcentaje: " & dato.porcentaje) Console.WriteLine("Escaños: " & dato.escaños) Console.WriteLine("")
Next Console.ResetColor()
Console.ReadKey() End Sub Sub porcentaje(ByRef elec() As resultados) Dim sumatorio As Integer = 0
For Each dato In elec sumatorio += dato.votos Next For i As Integer = 0 To elec.GetUpperBound(0) elec(i).porcentaje = (elec(i).votos / sumatorio) * 100 Next End Sub Sub ordena(ByRef elec() As resultados) Dim flag As Boolean = False Dim aux As resultados
Do flag = False For i As Integer = 0 To elec.GetUpperBound(0) - 1
If (elec(i).votos < elec(i + 1).votos) Then aux = elec(i) elec(i) = elec(i + 1) elec(i + 1) = aux flag = True End If Next Loop While flag End Sub Sub introescaños(ByRef escaños As Integer) Console.WriteLine("Introduzca numero de escaños a repartir") escaños = Console.ReadLine()
End Sub Sub aplica(ByRef elec() As resultados, ByVal escaños As Integer) Dim cuentan As Integer = 0 Dim mayor(1) As Integer 'Contamos numero partidos con porcentaje mayor o igual a 3 For Each elemento In elec If (elemento.porcentaje >= 3) Then cuentan += 1 Next 'Creamos una tabla con las siguientes dimensiones: 'Filas: numero de partidos validos 'Columnas: numero escaños Dim matriz(cuentan - 1, escaños - 1) As Single For i As Integer = 0 To matriz.GetUpperBound(0) For e As Integer = 0 To matriz.GetUpperBound(1) matriz(i, e) = Math.Round(elec(i).votos / (e + 1), 2) Next Next
For i As Integer = 0 To escaños - 1 For a As Integer = 0 To matriz.GetUpperBound(0) For b As Integer = 0 To matriz.GetUpperBound(1) If (a = 0) And (b = 0) Then mayor(0) = a : mayor(1) = b ElseIf matriz(mayor(0), mayor(1)) < matriz(a, b) Then mayor(0) = a : mayor(1) = b End If Next Next matriz(mayor(0), mayor(1)) *= -1
Next For i As Integer = 0 To matriz.GetUpperBound(0) For e As Integer = 0 To matriz.GetUpperBound(1) Console.Write(matriz(i, e) & vbTab) If (matriz(i, e) < 0) Then elec(i).escaños += 1 Next Console.WriteLine("") Next
Console.ReadKey() End Sub End Module
PD: Este es el posdata pertinente y correspondiente, en acuerdo a Edu
Última edición por Admin el Miér Oct 07, 2009 1:51 pm, editado 1 vez | |
|
Edu Grado2(EDVAC)
Cantidad de envíos : 82 Fecha de inscripción : 30/10/2008
| Tema: Re: Resolución ejercicio Ley D´Hont Mar Oct 06, 2009 10:37 pm | |
| Sólamente objetar que Admin no ha puesto su particular posdata | |
|
Edu Grado2(EDVAC)
Cantidad de envíos : 82 Fecha de inscripción : 30/10/2008
| Tema: Re: Resolución ejercicio Ley D´Hont Jue Oct 08, 2009 5:13 pm | |
| Admin, me refería a posdata del estilo de "Aguilera Power con cariño" o similar xDD | |
|
Contenido patrocinado
| Tema: Re: Resolución ejercicio Ley D´Hont | |
| |
|