[Ejercicio] Aca tienen un ejercicio para practicar

Iniciado por Dreamaker, 2 Septiembre 2010, 14:46 PM

0 Miembros y 3 Visitantes están viendo este tema.

Dreamaker

Bueno un ejercicio bien facilito para que practiquen a ver quien lo hace mejor, luego pasaremos a recorrer la matriz de manera espiralada, en zig zag, por anillos etc

A ver quien se anima, es bien facilongo ;D

Hacer un programa que, dada una matriz de 5x5 (5 filas x 5 columnas), la llene con numeros aleatorios al azar SIN repetición entre un rango de 1 a 30(deberán generarse al azar), ordene esos números de menor a mayor, y luego deberá mostrar la X traspuesta que se encuentra impresa en la matriz osea, por ej:

Ejemplo:



Tanto el proceso de CargarMatriz, como el de OrdenarMatriz y el de MostrarMatriz deberán ser realizados con 1 estructura de repetición

PD: Para que vean que no es para hacerme la tearea les dejaré el code al finalizar el ejercicio, a ver quien hace el code más corto y prolijo

Pueden imprimir la matriz con Print o en labels, eso queda a elección

A codear mis buenos programadores! :laugh:

Elemental Code

entonces cargamos numeros al azar en la matrix (jeje me re cope) y despues borramos los que no esten en la X?
no entedi :S

Seria que cargo todo.
y despues borro las etiquetas(X)

O X X X O
X O X O X
X X O X X
X O X O X
O X X X O

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

Dreamaker

#2
Bueno vi que varios se pasaron y al final nadie se animó, salvo vos Elemental Code :-X

Cita de: Elemental Code en  2 Septiembre 2010, 15:51 PM
entonces cargamos numeros al azar en la matrix (jeje me re cope) y despues borramos los que no esten en la X?
no entedi :S

Seria que cargo todo.
y despues borro las etiquetas(X)

O X X X O
X O X O X
X X O X X
X O X O X
O X X X O

No, no tenés que borrar ningún elemento de los que no esté en la X, sino simplemente cargar toda la matriz con números aleatorios sin repetición y luego sólo mostrar la X traspuesta de la matriz como muestra la imagen (osea la matriz estará cargada por completo, pero solo mostrarás la X traspuesta de números que está en ella)

Se evaluará eficiencia aparte de eficacia ya que tanto les gusta medir los tiempos de ejecución como vi por ahí :D

Nota: Aparte de todo esto, un detalle no menor, y es que el código deberá ser bien legible y entendible

Psyke1

.
No entiendo mucho la logica de este reto, pero bueno... :silbar:
Porque tenermos que generar una matriz entera si solo vamos a mostrarlas diagonales?¿ :huh:

DoEvents¡! :P

Dreamaker

#4
Cita de: *PsYkE1* en  2 Septiembre 2010, 16:04 PM
.
No entiendo mucho la logica de este reto, pero bueno... :silbar:
Porque tenermos que generar una matriz entera si solo vamos a mostrarlas diagonales?¿ :huh:

DoEvents¡! :P

La lógica es saber usar matrices y medir la eficacia de un programa de la mejor manera posible (como los retos por tiempo que hacen ahora)

Debes llenar la matriz completa porque así lo dice el ejercicio, luego con esa misma matriz la podrás recorrer de la manera que quieras (en este caso, por la X traspuesta)

Saludos!

PD: Lo importante es ser un programador el cual tenga mucha lógica y sabe programar, no un memorizador de funciones de x lenguaje, así sufren muchos después para migrar a otra plataforma completamente distinta, cuando lo único que cambia prácticamente es la sintaxis si sabes programar de verdad :D. Esto no es más que un ejercicio para practicar y poner a prueba sus conocimientos así mismos

Fijate *PsYkE1* ahora el agregado y verás por qué hay que llenar toda la matriz, aparte deberán ordenar esos números generados sin repetición de menor a mayor, que era la idea previa pero me había olvidado de agregarlo

A codear! :D

Dreamaker

87 visitas y ni uno se anima a hacerlo?

Me hacen creer que sólo usan las funciones del lenguaje pero no saben los fundamentos de la programación que bien es lo más importante, el lenguaje es una herramienta nada más, la programación está adentro de uno

No me hagan pensar mal y que alguno se anime a hacerlo por lo menos..

Vamos que acordarse la sintaxis y las funciones de un lenguaje es muy fácil :laugh:

Karcrack

He tenido un ratito libre y he hecho mi code :D
No se si es exactamente lo que se pedia, pero algo es algo :laugh:
Código (vb) [Seleccionar]
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 = 255
   
   With colNumbers
       For x = 0 To 255
           .Add x
       Next x
       For x = 0 To UBound(bvArray)
           Call Randomize(Timer)
           n = Int(Max * Rnd)
           bvArray(x) = colNumbers(n + 1)
           colNumbers.Remove (n + 1)
           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

79137913

#7
HOLA!!!

Creo que hice lo que pedis:

El form tiene un array de labels de 25 items (0-24) llamados LBL().

CODIGO DEL FORM :
Código (vb) [Seleccionar]
Dim MATRIX() As Integer
Public N As Integer ' DIMENSION DE LA MATRIZ
Public PASA As Boolean ' VERIFICA LA REPETICION DE NUMEROS
Public ORDENADO As Boolean ' VERIFICA QUE ESTE ORDENADO

Private Sub Form_Load()
   Randomize
   Me.Caption = "Ejercicio de Matrices"
   'CREA LA MATRIZ
   N = 5
   ReDim MATRIX(N, N)
   'MATRIZ CREADA
   Call LLENAR_MATRIZ
   Call ORDENAR_MATRIZ
   Call MOSTRAR_MATRIZ
End Sub

Private Sub LLENAR_MATRIZ()
   For Y = 1 To N
       For X = 1 To N
           MATRIX(Y, X) = Int(Rnd() * 30)
           'VERIFICA SI ESTA REPETIDO Y LO CAMBIA
           PASA = False
           While PASA = False
               PASA = True
               For Y2 = 1 To N
                   For X2 = 1 To N
                       If MATRIX(Y, X) = MATRIX(Y2, X2) And Not (X2 = X And Y2 = Y) Then
                           PASA = False
                       End If
                   Next X2
               Next Y2
               If PASA = False Then
                   MATRIX(Y, X) = Int(Rnd() * 30)
               End If
           Wend
           'VERIFICA SI ESTA REPETIDO Y LO CAMBIA
       Next X
   Next Y
End Sub

Private Sub ORDENAR_MATRIZ()
   Dim AUX As Integer
   While ORDENADO = False
       ORDENADO = True
       For Y = 1 To N
           For X = 1 To N
               If Not (X = N And Y = N) Then
                   If X = N Then
                       If MATRIX(Y, X) > MATRIX(Y + 1, 1) Then
                           AUX = MATRIX(Y + 1, 1)
                           MATRIX(Y + 1, 1) = MATRIX(Y, X)
                           MATRIX(Y, X) = AUX
                           ORDENADO = False
                       End If
                   Else
                       If MATRIX(Y, X) > MATRIX(Y, X + 1) Then
                           AUX = MATRIX(Y, X + 1)
                           MATRIX(Y, X + 1) = MATRIX(Y, X)
                           MATRIX(Y, X) = AUX
                           ORDENADO = False
                       End If
                   End If
               End If
           Next X
       Next Y
   Wend
End Sub

Private Sub MOSTRAR_MATRIZ()
   For Y = 1 To N
       For X = 1 To N
           If X = Y Then
               LBL(CT).Caption = MATRIX(Y, X)
           End If
           If X + Y = N + 1 Then
               LBL(CT).Caption = MATRIX(Y, X)
           End If
           CT = CT + 1
       Next X
   Next Y
End Sub



GRACIAS POR LEER!!!
"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

@79137913: La matriz ha de estar ordenada y sus valores no pueden estar repetidos.

ssccaann43 ©

Karcrack te has pasado...! Te quedo muy bueno el code...! Saludos...
- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"