Autor
|
Tema: [Ejercicio] Aca tienen un ejercicio para practicar (Leído 16,592 veces)
|
79137913
Desconectado
Mensajes: 1.169
4 Esquinas
|
@Karcrack GRACIAS!!! Ya arregle el codigo y funciona perfecto. avisame si ves otro error. GRACIAS POR LEER!!!
|
|
|
En línea
|
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!" "La peor de las ignorancias es no saber corregirlas"
79137913 *Shadow Scouts Team*
|
|
|
Elemental Code
Desconectado
Mensajes: 622
Im beyond the system
|
Tanto el proceso de CargarMatriz, como el de OrdenarMatriz y el de MostrarMatriz deberán ser realizados con 1 estructura de repetición
Me esta carcomiendo las ideas esa parte >.< como verifico que no sean iguales sin repasarlos? osea un for para cargar y un for para evitar repeticiones. pero esto no anda, tengo que hacerlo con uno solo. ¿Existe una funcion que se me este escapando? EDITO: Encontre la funcion filter pero tengo un problema: Porque esta linea me tira "Error 13, No coinciden los tipos" ???? If Filter(Matrix, tmplng, True) <> vbNullString Then GoTo Again es para evitar repeticiones y deberia devolver nada si no encuentra coincidencia.
|
|
« Última modificación: 4 Septiembre 2010, 03:07 am por Elemental Code »
|
En línea
|
I CODE FOR $$$ Programo por $$$ Hago tareas, trabajos para la facultad, lo que sea en VB6.0 Mis programas
|
|
|
Dreamaker
Desconectado
Mensajes: 277
|
Karcrack:Llenas la matriz con números sin repetición pero manualmente, tienen que llenarse con números aleatorios sin repetición, osea siempre llenará con los mismos valores en tu for, debe llenar con un 20 por ejemplo en la posición 0 en la primera carga, un 2 en la segunda y así, de manera aleatoria en todos los elementos del vector, ya que cargará los mismos números por cada vez que apretes el botón y eso no era lo que pedía A ver si puedes corregir eso 79137913:Gastas memoria innecesariamente haciendo las variables públicas, sin mencionar que muchas ni las declaras Había que llenar la matriz con una estructura de repetición, no 2 y más como veo Código ineficiente (no es eficiente), aunque sí me doy cuenta del esfuerzo y eso se valora, fijate si le puedes modificar mientras tanto eso que te dije hasta que lo puedas optimizar por completo cuando ponga mi código y a medida que los demás vayan dejando los suyos Elemental Code:No es necesario que uses ninguna función rara
Se están complicando demasiado para algo que es muy sencillo, el más aproximado es el de Karcrack (muy bien lo de i\5,i mod 5, ya sabés a lo que me refiero, asumo que vas a la univ) aunque también me pareció un poco rebuscado el código innecesariamente cuando se podría hacer mucho más simple En unos días les dejo el code, no es necesario que usen ningún tipo de funciones raras del VB, lógica de programación nada más PD: Sólo 3 se animan a hacer el código? Me extraña y yo que pensaba que habían mejores programadores.. Acuerdense que hay que usar sólo 1 estructura de repetición para cada procedimiento. Luego corregiré el código de los demás, piensen si pueden mejorarlo y/o optimizarlo
|
|
« Última modificación: 4 Septiembre 2010, 04:11 am por Dreamaker »
|
En línea
|
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
No entiendo a que te refieres con lo de los numeros.. La matriz se rellena con valores aleatorios no repetidos ordenados numericamente cada vez que se ejecuta el code... OFFTOPIC: Aun no voy a la uni, aunquq me alaga tu comentario
|
|
« Última modificación: 4 Septiembre 2010, 04:32 am por Karcrack »
|
En línea
|
|
|
|
Dreamaker
Desconectado
Mensajes: 277
|
No entiendo a que te refieres con lo de los numeros.. La matriz se rellena con valores aleatorios no repetidos ordenados numericamente... OFFTOPIC: Aun no voy a la uni, me alaga tu comentario A lo que me refiero Karcrack, si por ejemplo tienes la matriz de 5x5 elementos y lo llenas así For i=0 to 24 Matriz(i\5,i mod 5)=i Next i
Es obvio que los valores no se van a repetir, porque lo llena con los mismos valores en la misma posición, la gracia fijate sería (el rango de números a generar era de 0 a 30) For i=0 to 24 Matriz(i\5,i mod 5)=Int((30 - 1 + 1) * Rnd + 1) Next i
Fijate que pasa en ese caso, la llena con valores al azar en distintas posiciones cada vez que apretas el commandbutton pero son valores repetidos, lo probaste? Bueno ahora sí, la gracia es que genere esos valores al azar pero sin repetición, y no al usar el Rnd a secas, espero que hayas entendido a lo que apuntaba Lo de la uni lo dije porque hay muy pocas personas que lleguen a ese razonamiento que mencioné, te lo mencionaron en algún lado o lo dedujiste vos sólo? Admirable pues entonces ya que eso es lo que importa PD: Ahora me doy cuenta porque casi nadie de los que participan en este foro de VB se anotó para hacer el reto, de ahora en más copiaran la lógica de los demás para hacerlo pero no interesa, acuérdense que lo que importa no es saberse de memoria las funciones de un lenguaje sino tener la lógica de como funciona la programación y con eso, en el lenguaje que sea, podrás pasarte al que más se te de la gana
|
|
« Última modificación: 4 Septiembre 2010, 04:45 am por Dreamaker »
|
En línea
|
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
Ahora estoy desde el movil y no puedo volver a probar el code... Pero cuando lo probe en el PC cada vez que lo ejecutaba generaba nuevas matrices... No se si llego a entender lo que planteas... Respecto a lo de rellenar la matriz, se me ocurrio a mi solito
|
|
|
En línea
|
|
|
|
79137913
Desconectado
Mensajes: 1.169
4 Esquinas
|
@Dreamaker :HOLAAAA!!!! Lo que es ineficiente, lo entiendo y perfectamente, es mas me caracterizo por siempre llegar al objetivo pero de una manera muy enroscada y complicada, casi siempre ineficiente. Lo de las variables, como me recomendas que las declare. Y lo de los bucles, como queres que lo haga, ponele: For x=1 to N+1 if x=N+1 then x=1 y=y+1 if y=6 then exit for endif 'CODIGO DEL FOR Next X
?????? Esa es mi duda. Entre a este foro especificamente para eso, para mejorar y hacer mas eficiente el codigo. Espero ansiosamente la correccion GRACIAS POR LEER!!!
|
|
|
En línea
|
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!" "La peor de las ignorancias es no saber corregirlas"
79137913 *Shadow Scouts Team*
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
Me he dado cuenta que pedias un rango especifico Lo he arreglado, y tambien eso que decias: Option Explicit Option Base 0 Dim bMatrix(4, 4) As Byte Public Sub FillAndSortMatrix() Dim bvTmp(24) As Byte Dim i As Long Call bURGN(bvTmp) Call GnomeSort(bvTmp) For i = 0 To 24 bMatrix((i \ 5), (i Mod 5)) = bvTmp(i) Next i End Sub Public Sub bURGN(ByRef bvArray() As Byte) Dim x As Integer Dim n As Integer Dim colNumbers As New Collection Dim Max As Long Max = 30 With colNumbers For x = 1 To Max .Add x Next x For x = 0 To UBound(bvArray) Call Randomize(Timer * (Timer \ 3)) n = Int((Max - 1) * Rnd) + 1 bvArray(x) = colNumbers(n) colNumbers.Remove (n) Max = Max - 1 Next x End With Set colNumbers = Nothing End Sub Public Sub GnomeSort(ByRef bvArray() As Byte) On Error Resume Next Dim lPos As Long Dim lUbound As Long lUbound = UBound(bvArray) + 1 While lPos < lUbound If (lPos = 0) Or (bvArray(lPos) >= bvArray(lPos - 1)) Then lPos = lPos + 1 Else bvArray(lPos) = bvArray(lPos) Xor bvArray(lPos - 1) bvArray(lPos - 1) = bvArray(lPos - 1) Xor bvArray(lPos) bvArray(lPos) = bvArray(lPos) Xor bvArray(lPos - 1) lPos = lPos - 1 End If Wend End Sub Sub Main() Dim i As Long Dim w As Long Call FillAndSortMatrix For i = 0 To 4 For w = 0 To 4 If (w = i) Or (4 - i = w) Then Debug.Print bMatrix(i, w), Else Debug.Print vbNullString, End If Next w Debug.Print "" Next i End Sub
Es normal que algunos numeros repitan posicion.. por ejemplo el 1... siempre va ir el primero... y al ser tan pequeño el rango (1-30) es realmente probable que salga... Se podria hacer sin las funciones de ordenamiento y la de generar numeros aleatorios... simplemente recorriendo la matriz dandole valores aleatorios cada vez mas grandes (hasta el 30)... asi se mantendria el orden y serian numeros aleatorios...
|
|
« Última modificación: 4 Septiembre 2010, 15:10 pm por Karcrack »
|
En línea
|
|
|
|
Tokes
Desconectado
Mensajes: 140
|
Hola a todos: No sé si esto es lo que se pedía y como se pedía, pero de igual manera lo dejo: Option Explicit
Private Sub Command1_Click() Dim x As Long Dim i As Long Dim aparecido(0 To 30) As Boolean Dim matriz(0 To 24) As Long
'Carga matriz While i < 25 Randomize x = CLng((30 - 1) * Rnd + 1) If Not aparecido(x) Then matriz(i) = x aparecido(x) = True i = i + 1 End If Wend
'Ordena matriz Dim li As Long, ls As Long, lsaux As Long
li = 0 ls = 24 While ls > li lsaux = li For i = 0 To ls - 1 If matriz(i + 1) < matriz(i) Then x = matriz(i + 1) matriz(i + 1) = matriz(i) matriz(i) = x lsaux = i End If Next ls = lsaux Wend
'Visualiza diagonales x = 4 For i = 0 To 24 Step 6 Label1(i).Caption = matriz(i) Label1(i + x).Caption = matriz(i + x) x = x - 2 Next End Sub Se necesita un arreglo de 25 labels en el Form. Saludos.
|
|
|
En línea
|
|
|
|
Dreamaker
Desconectado
Mensajes: 277
|
Hola a todos: No sé si esto es lo que se pedía y como se pedía, pero de igual manera lo dejo: Option Explicit
Private Sub Command1_Click() Dim x As Long Dim i As Long Dim aparecido(0 To 30) As Boolean Dim matriz(0 To 24) As Long
'Carga matriz While i < 25 Randomize x = CLng((30 - 1) * Rnd + 1) If Not aparecido(x) Then matriz(i) = x aparecido(x) = True i = i + 1 End If Wend
'Ordena matriz Dim li As Long, ls As Long, lsaux As Long
li = 0 ls = 24 While ls > li lsaux = li For i = 0 To ls - 1 If matriz(i + 1) < matriz(i) Then x = matriz(i + 1) matriz(i + 1) = matriz(i) matriz(i) = x lsaux = i End If Next ls = lsaux Wend
'Visualiza diagonales x = 4 For i = 0 To 24 Step 6 Label1(i).Caption = matriz(i) Label1(i + x).Caption = matriz(i + x) x = x - 2 Next End Sub Se necesita un arreglo de 25 labels en el Form. Saludos. Me gusta tokes, me gusta, y sin nada rebuscado ni funciones inservibles del VB en este caso cuando se pedía exactamente eso Lo que sí algunas correciones, está de más que las variables las declares como as long ya que como mucho serán as byte (hasta 255 es el máximo, y en este caso el máximo será de 30 así que alcanza y sobra) Por otro lado si puedes tomarte la costumbre de usar Do-Loop en vez de While-Wend, mejor Me gusta que esté comentarizado. Falta usar procedimientos y funciones para cada cosa, el llenado, ordenamiento y mostrado se debían hacer con procedimientos y para verificar que no se repite ningún elemento, una función. Lo mismo para intercambiar los valores, podrías usar un procedimientos Swap que los intercambie, el objetivo es hacer el código lo más simple y optimizado posible, y con la menor cantidad de líneas posible, haciendo uso de la programación en si, no del lenguaje De todas formas fue el que más se aproximó, y si lo pueden comentarizar, mejor, no es mala costumbre, de todas maneras a ver quienes siguen, y una vez terminado se agregarán más y de mayor dificultad siempre y cuando el tiempo lo haga posible
|
|
« Última modificación: 5 Septiembre 2010, 00:04 am por Dreamaker »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Preparación para un ejercicio
Ingeniería Inversa
|
Puntoinfinito
|
1
|
2,537
|
27 Agosto 2012, 04:07 am
por apuromafo CLS
|
|
|
Ayuda con un ejercicio (imports.IO)
.NET (C#, VB.NET, ASP)
|
crashoverride1305
|
2
|
2,650
|
8 Enero 2013, 04:32 am
por Eleкtro
|
|
|
ayuda, Ejercicio para examen!
Programación C/C++
|
edu__87
|
1
|
2,183
|
15 Febrero 2013, 19:43 pm
por durasno
|
|
|
Ayuda con ejercicio a entregar en c++
Programación C/C++
|
gabyricardo92
|
7
|
3,064
|
9 Julio 2013, 16:48 pm
por gabyricardo92
|
|
|
ejercicio de pozos ayuda
Programación C/C++
|
avilacity
|
3
|
2,836
|
14 Septiembre 2013, 15:53 pm
por eferion
|
|