elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  No Puedo poner los for que me da la gana
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: No Puedo poner los for que me da la gana  (Leído 4,122 veces)
llegaraprogramador

Desconectado Desconectado

Mensajes: 6


Ver Perfil
No Puedo poner los for que me da la gana
« en: 12 Junio 2010, 00:51 am »

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


En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.724


<3


Ver Perfil WWW
Re: No Puedo poner los for que me da la gana
« Respuesta #1 en: 12 Junio 2010, 00:56 am »

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:
Código
  1. Dim a As Integer
  2. Dim b As Integer
  3. Dim c As Integer
  4. Dim d As Integer
  5. Dim e As Integer
  6. Dim f As Integer
  7.  
  8. For a = 0 To 10
  9.  For b = 0 To 10
  10.    For c = 0 To 10
  11.      For d = 0 To 10
  12.        For e = 0 To 10
  13.          For f = 0 To 10
  14.            MsgBox "Esto para que?"
  15.          Next
  16.        Next
  17.      Next
  18.    Next
  19.  Next
  20. Next

2. Pon el código entre la etiqueta correspondiente.
3. Que quieres hacer?


« Última modificación: 12 Junio 2010, 00:59 am por shellroot@alex-laptop:~$ » En línea

Te vendería mi talento por poder dormir tranquilo.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: No Puedo poner los for que me da la gana
« Respuesta #2 en: 12 Junio 2010, 01:07 am »

Cuando llega el codigo al algoritmo de la burbuja:

Aqui tienes uno mas rapido:

Código:

http://foro.elhacker.net/empty-t272312.0.html


y aqui uno por parte de LeandroA

Código:

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!¡.
En línea

The Dark Shadow is my passion.
Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.724


<3


Ver Perfil WWW
Re: No Puedo poner los for que me da la gana
« Respuesta #3 en: 12 Junio 2010, 01:45 am »

Todo eso para ordenar por burbuja?
Código
  1. Private Sub Command1_Click()
  2.  Dim numescaños As Double
  3.  Dim temp, n As Double
  4.  Dim hasta As Double
  5.  Dim m As Double
  6.  Dim i, j As Double
  7.  Dim votos(3) As Long
  8.  ReDim matriz(numescaños, 3)
  9.  ReDim vector(n)
  10.  
  11.  numescaños = Val(Text3.Text - 1)
  12.  n = Val(4 * (numescaños + 1))
  13.  m = 0
  14.  matriz(0, 0) = Text1(0).Text
  15.  matriz(0, 1) = Text1(1).Text
  16.  matriz(0, 2) = Text1(2).Text
  17.  matriz(0, 3) = Text1(3).Text
  18.  
  19.  vector(0) = Text1(0).Text
  20.  vector(1) = Text1(1).Text
  21.  vector(2) = Text1(2).Text
  22.  vector(3) = Text1(3).Text
  23.  
  24.  minimo = -3 ' ¿?
  25.  
  26.  For i = 1 To numescaños
  27.    minimo = minimo + 3
  28.    For j = 0 To 3
  29.      dimension = Val(i + j + minimo + 3)
  30.      matriz(i, j) = Val(matriz(0, j) / (i + 1))
  31.      vector(dimension) = Val(matriz(0, j) / (i + 1))
  32.      'MsgBox (matriz(i, j))
  33.    Next j
  34.  Next i
  35.  
  36.  For z = 0 To n - 1
  37.    For x = 0 To n
  38.      If vector(x) > vector(x + 1) Then
  39.        temp = vector(x)
  40.        vector(x + 1) = vector(x)
  41.        vector(x) = temp
  42.      End If
  43.    Next x
  44.  Next z
  45.  
  46.  For a = 0 To n - 1
  47.    MsgBox (vector(a)) ' ¿(a)?
  48.  Next a
  49.  
  50.  hasta = vector(numescaños)
  51.  MsgBox (hasta)
  52.  
  53.  MsgBox (hasta)
  54.  For t = 0 To 3
  55.    votos(t) = 0' ¿?
  56.  Next t
  57.  
  58.  For x = 0 To numescaños
  59.    For j = 0 To 3
  60.      If matriz(x, j) > hasta Then
  61.        votos(j) = Val(votos(j) + 1)
  62.        k = k + 1
  63.      Else
  64.        'What the fuck this is?
  65.      End If
  66.    Next j
  67.  Next x
  68.  
  69.  MsgBox (k) ' ¿Que es k?
  70.  
  71.  For z = 0 To 3
  72.    MsgBox (votos(z)) ' ¿(z)?
  73.  Next z
  74.  
  75. End Sub
En línea

Te vendería mi talento por poder dormir tranquilo.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: No Puedo poner los for que me da la gana
« Respuesta #4 en: 12 Junio 2010, 01:49 am »


por hay lei que
Código
  1.  For z = 0 To 3
  2.    MsgBox (votos(z)) ' ¿(z)?
  3.  Next
  4.  

Es mas rapido que

Código
  1.  For z = 0 To 3
  2.    MsgBox (votos(z)) ' ¿(z)?
  3.  Next z
  4.  

Ya que Next buscaria el for que invoca al contador z

Dulce Infierno Lunar!¡,
En línea

The Dark Shadow is my passion.
Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.724


<3


Ver Perfil WWW
Re: No Puedo poner los for que me da la gana
« Respuesta #5 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
En línea

Te vendería mi talento por poder dormir tranquilo.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: No Puedo poner los for que me da la gana
« Respuesta #6 en: 12 Junio 2010, 07:08 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

Código
  1.  
  2.    For z = 0 To 3
  3.        MsgBox (votos(z)) ' ¿(z)?
  4.    Next    '   //  For z = 0 To 3
  5.  
  6.  

Aqui un codigo de Prueva para lo del For ... Next (Aun que no estoy muy convensido)

Código
  1.  
  2. Option Explicit
  3. Private Declare Function GetTickCount Lib "kernel32" () As Long
  4. Sub main()
  5. Dim Lng_Ini             As Long
  6. Dim Lng_IniforNext      As Long
  7. Const Lng_ForNextMax    As Long = 9999952#
  8. Dim Int_Test            As Integer
  9. Const Int_CantTest      As Integer = 10
  10.  
  11.    Int_Test = 0
  12.    Do While Int_Test < Int_CantTest
  13.        Debug.Print ""
  14.        Debug.Print "prueba Numero"; Int_Test + 1
  15.        Debug.Print "Inicializando: For ... Next Lng_IniforNext"
  16.        Lng_Ini = GetTickCount
  17.        For Lng_IniforNext = 1 To Lng_ForNextMax
  18.        Next
  19.        Debug.Print "Tiempo Transcurrido;"; GetTickCount - Lng_IniforNext
  20.  
  21.        Debug.Print "Inicializando: For ... Next"
  22.        Lng_Ini = GetTickCount
  23.        For Lng_IniforNext = 1 To Lng_ForNextMax
  24.        Next Lng_IniforNext
  25.        Debug.Print "Tiempo Transcurrido;"; GetTickCount - Lng_IniforNext
  26.        Int_Test = Int_Test + 1
  27.    Loop
  28. End Sub
  29.  
  30.  

P.D.: Creo que lo vi en VBSpeed.

Dulce Infierno Lunar!¡.
« Última modificación: 12 Junio 2010, 07:10 am por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
llegaraprogramador

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: No Puedo poner los for que me da la gana
« Respuesta #7 en: 12 Junio 2010, 10:47 am »

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
En línea

llegaraprogramador

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: No Puedo poner los for que me da la gana
« Respuesta #8 en: 17 Junio 2010, 15:24 pm »

Alguien me ayuda a arreglar esto
En línea

Dreamaker

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Re: No Puedo poner los for que me da la gana
« Respuesta #9 en: 17 Junio 2010, 15:51 pm »

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.. :¬¬
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
por que no puedo poner un label al poner un skin?
Programación Visual Basic
Senior++ 4 6,021 Último mensaje 13 Junio 2011, 21:17 pm
por Senior++
Puedo poner disquetera en conector flopy
Hardware
desna 8 4,101 Último mensaje 10 Enero 2021, 10:02 am
por desna
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines