Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: 79137913 en 10 Enero 2011, 16:57 pm



Título: [RETO] Matriz de Cuenta Circular 7913
Publicado por: 79137913 en 10 Enero 2011, 16:57 pm
HOLA!!!

Este es el primer Reto que creo, no es muy dificil, pero para pasar el rato va.

Bueno, el Reto consiste en:

Crear una funcion con esta estructura
Código
  1. Private Function Cuenta_Circular7913(N&, M() As Integer, TIPO As Boolean)
En la variable N no aceptara numeros que no sean pares o mayores a 180 o menores a 2.

La funcion devuelva estas matrices:

Código:
Cuenta_Circular7913(2, Matriz, Verdadero)   :
    7   1   9
    4   0   2
    1   3   3

Cuenta_Circular7913(4, Matriz, Verdadero)   :
    7   1   2   3   9
    12  7   13  9   4
    11  16  0   14  5
    10  1   15  3   6
    1   9   8   7   3

Cuenta_Circular7913(6, Matriz, Verdadero)   :
    7   1   2   3   4   5   9
    20  7   21  22  23  9   6
    19  32  7   33  9   24  7
    18  31  36  0   34  25  8
    17  30  1   35  3   26  9
    16  1   29  28  27  3   10
    1   15  14  13  12  11  3

Cuenta_Circular7913(8, Matriz, Verdadero)   :
    7   1   2   3   4   5   6   7   9
    28  7   29  30  31  32  33  9   8
    27  48  7   49  50  51  9   34  9
    26  47  60  7   61  9   52  35  10
    25  46  59  64  0   62  53  36  11
    24  45  58  1   63  3   54  37  12
    23  44  1   57  56  55  3   38  13
    22  1   43  42  41  40  39  3   14
    1   21  20  19  18  17  16  15  3

Cuenta_Circular7913(2, Matriz, Falso)   :
    7   1   9
    4   0   2
    1   3   3

Cuenta_Circular7913(4, Matriz, Falso)   :
    7   1   2   3   9
    15  7   4   9   5
    14  16  0   8   6
    13  1   12  3   7
    1   11  10  9   3

Cuenta_Circular7913(6, Matriz, Falso)   :
    7   1   2   3   4   5   9
    32  7   6   7   8   9   10
    31  35  7   9   9   15  11
    30  34  36  0   18  16  12
    29  33  1   27  3   17  13
    28  1   26  25  24  3   14
    1   23  22  21  20  19  3

Cuenta_Circular7913(8, Matriz, Falso)   :
    7   1   2   3   4   5   6   7   9
    55  7   8   9   10  11  12  9   17
    54  60  7   13  14  15  9   24  18
    53  59  63  7   16  9   29  25  19
    52  58  62  64  0   32  30  26  20
    51  57  61  1   48  3   31  27  21
    50  56  1   47  46  45  3   28  22
    49  1   44  43  42  41  40  3   23
    1   39  38  37  36  35  34  33  3





GRACIAS POR LEER:


Título: Re: [RETO] Matriz de Cuenta Circular 7913
Publicado por: raul338 en 10 Enero 2011, 19:32 pm
Y en caso de que tipo sea falso?


Título: Re: [RETO] Matriz de Cuenta Circular 7913
Publicado por: 79137913 en 10 Enero 2011, 19:36 pm
HOLA!!!

@Raul:
Segun sea verdadero o falso el tipo lo que cambia es la manera de organizar los numeros.

Osea: Tipo = false seria Tipo1 y Tipo = true seria Tipo2

Para ver que tipo de organizacion tiene el tipo 1 y 2 estan los ejemplos.

P.D: Me voy a la playa, asi que recien mañana voy a poder responder si hay alguna duda, me quedo 10 minutos mas.

GRACIAS POR LEER!!!


Título: Re: [RETO] Matriz de Cuenta Circular 7913
Publicado por: Psyke1 en 10 Enero 2011, 20:08 pm
Yo creo que más o menos ya lo pille.
A final de esta semana intento algo que tengo examenes... :-\

DoEvents! :P


Título: Re: [RETO] Matriz de Cuenta Circular 7913
Publicado por: raul338 en 10 Enero 2011, 22:01 pm
Pero en todos los ej pusiste verdadero :xD


Título: Re: [RETO] Matriz de Cuenta Circular 7913
Publicado por: 79137913 en 10 Enero 2011, 22:21 pm
HOLA!!!
Manana me conecto(perdon por la enie, estoy en el celular)
@Raul:
Que raro, los primeros 4 ejemplos son con verdadero y los ultimos 4 con falso fijate(ultimos 4):

Código:
Cuenta_Circular7913(2, Matriz, Falso)   :
    7   1   9
    4   0   2
    1   3   3

Cuenta_Circular7913(4, Matriz, Falso)   :
    7   1   2   3   9
    15  7   4   9   5
    14  16  0   8   6
    13  1   12  3   7
    1   11  10  9   3

Cuenta_Circular7913(6, Matriz, Falso)   :
    7   1   2   3   4   5   9
    32  7   6   7   8   9   10
    31  35  7   9   9   15  11
    30  34  36  0   18  16  12
    29  33  1   27  3   17  13
    28  1   26  25  24  3   14
    1   23  22  21  20  19  3

Cuenta_Circular7913(8, Matriz, Falso)   :
    7   1   2   3   4   5   6   7   9
    55  7   8   9   10  11  12  9   17
    54  60  7   13  14  15  9   24  18
    53  59  63  7   16  9   29  25  19
    52  58  62  64  0   32  30  26  20
    51  57  61  1   48  3   31  27  21
    50  56  1   47  46  45  3   28  22
    49  1   44  43  42  41  40  3   23
    1   39  38  37  36  35  34  33  3

GRACIAS POR LEER!!!


Título: Re: [RETO] Matriz de Cuenta Circular 7913
Publicado por: raul338 en 10 Enero 2011, 23:27 pm
Ahhh cierto, no vi la barra de desplazamiento (no me acostumbro a verla) :xD


Título: Re: [RETO] Matriz de Cuenta Circular 7913
Publicado por: LeandroA en 11 Enero 2011, 08:45 am
no tiene las comprobaciones de si es Par y mayor a 2 y menor a  180 pero bueno eso ya lo tenemos por sabido.

Código
  1. Private Function Leandro_Cuenta_Circular7913(N&, m() As Integer, TIPO As Boolean)
  2.    Dim Max As Long
  3.    Dim X1 As Long
  4.    Dim X2 As Long
  5.    Dim Y1 As Long
  6.    Dim Y2 As Long
  7.    Dim lCont As Long
  8.    Dim I As Long
  9.    Dim j As Long
  10.    Dim Mitad As Long
  11.  
  12.  
  13.    Max = N * N
  14.  
  15.    ReDim m(0 To N, 0 To N)
  16.  
  17.    If TIPO Then
  18.  
  19.        X2 = N
  20.        Y2 = N
  21.  
  22.        Do While lCont < Max
  23.            m(X1, Y1) = 7
  24.            X1 = X1 + 1
  25.            For I = X1 To N - X1
  26.                lCont = lCont + 1
  27.                m(I, Y1) = lCont
  28.            Next
  29.            m(I, Y1) = 9
  30.            Y1 = Y1 + 1
  31.  
  32.            For I = Y1 To N - Y1
  33.                lCont = lCont + 1
  34.                m(X2, I) = lCont
  35.            Next
  36.            m(X2, I) = 3
  37.            X2 = X2 - 1
  38.  
  39.            For I = X2 To X1 Step -1
  40.                lCont = lCont + 1
  41.                m(I, Y2) = lCont
  42.            Next
  43.            m(I, Y2) = 1
  44.            Y2 = Y2 - 1
  45.  
  46.            For I = Y2 To Y1 Step -1
  47.                lCont = lCont + 1
  48.                m(X1 - 1, I) = lCont
  49.            Next
  50.        Loop
  51.  
  52.    Else
  53.  
  54.       Mitad = N / 2
  55.  
  56.       For I = 0 To Mitad - 1
  57.           m(X1, I) = 7
  58.           X1 = X1 + 1
  59.  
  60.           For j = X1 To N - X1
  61.             lCont = lCont + 1
  62.             m(j, I) = lCont
  63.           Next
  64.           m(j, I) = 9
  65.       Next
  66.  
  67.       For I = N To Mitad + 1 Step -1
  68.  
  69.           Y1 = Y1 + 1
  70.  
  71.           For j = Y1 To N - Y1
  72.             lCont = lCont + 1
  73.             m(I, j) = lCont
  74.           Next
  75.           m(j, I) = 3
  76.       Next
  77.  
  78.       For I = N To Mitad + 1 Step -1
  79.  
  80.           Y2 = Y2 + 1
  81.  
  82.           For j = N - Y2 To Y2 Step -1
  83.             lCont = lCont + 1
  84.             m(j, I) = lCont
  85.           Next
  86.           m(j, I) = 1
  87.       Next
  88.  
  89.       For I = 0 To Mitad - 1
  90.  
  91.           X2 = X2 + 1
  92.  
  93.           For j = N - X2 To X2 Step -1
  94.             lCont = lCont + 1
  95.             m(I, j) = lCont
  96.           Next
  97.  
  98.       Next
  99.  
  100.    End If
  101.  
  102. End Function
  103.  
  104.  

Código
  1. Option Explicit
  2.  
  3. Private Sub Form_Load()
  4.    Dim X As Long, Y As Long
  5.    Dim m() As Integer
  6.    Dim N As Long
  7.  
  8.    N = 8
  9.  
  10.    Leandro_Cuenta_Circular7913 N, m, False
  11.  
  12.    For Y = 0 To N
  13.        For X = 0 To N
  14.            Debug.Print m(X, Y),
  15.        Next
  16.        Debug.Print
  17.    Next
  18.  
  19.    Debug.Print vbCrLf
  20.    Leandro_Cuenta_Circular7913 N, m, True
  21.  
  22.    For Y = 0 To N
  23.        For X = 0 To N
  24.            Debug.Print m(X, Y),
  25.        Next
  26.        Debug.Print
  27.    Next
  28.  
  29. End Sub
  30.  


Título: Re: [RETO] Matriz de Cuenta Circular 7913
Publicado por: 79137913 en 11 Enero 2011, 16:03 pm
HOLA!!!

Que bueno el primer codigo!
Y, no me extraña que viniendo de Lea me gane en velocidad  :-\.

GRACIAS POR LEER!!!


Título: Re: [RETO] Matriz de Cuenta Circular 7913
Publicado por: 79137913 en 12 Enero 2011, 14:28 pm
HOLA!!!

Bueno... parece que no va a agregarse nadie mas, falta Mr. Frog.... :silbar:
Mañana posteo mi codigo, le pisa los talones al de Lea :P.

Espero.

GRACIAS POR LEER!!!


Título: Re: [RETO] Matriz de Cuenta Circular 7913
Publicado por: Psyke1 en 12 Enero 2011, 14:59 pm
Tengo aún más examenes... :-( :¬¬
Ya lo haré cuando pueda.

DoEvents! :P


Título: Re: [RETO] Matriz de Cuenta Circular 7913
Publicado por: BlackZeroX en 13 Enero 2011, 07:20 am
Bueno... parece que no va a agregarse nadie mas

No te creas algunos tenemos unos contratiempos ( un servidor en la facultad ).

Dulces Lunas!¡.


Título: Re: [RETO] Matriz de Cuenta Circular 7913
Publicado por: 79137913 en 13 Enero 2011, 12:12 pm
HOLA!!!

Black:
Perdon :P.

( un servidor en la facultad ).

 :o Que le paso al server?

GRACIAS POR LEER!!!


Título: Re: [RETO] Matriz de Cuenta Circular 7913
Publicado por: Psyke1 en 13 Enero 2011, 13:12 pm
Citar
Que le paso al server?
:xD :laugh:

Se refiere a él mismo:
Citar
yo opino que sí
=
Citar
un servidor opina que sí

DoEvents! :P


Título: Re: [RETO] Matriz de Cuenta Circular 7913
Publicado por: 79137913 en 13 Enero 2011, 13:52 pm
HOLA!!!

XD bueno igual no entendi :P

En un rato posteo el code que ya lo tengo bastante bien.

GRACIAS POR LEER!!!


Título: Re: [RETO] Matriz de Cuenta Circular 7913
Publicado por: 79137913 en 13 Enero 2011, 15:30 pm
HOLA!!!

Mi codigo:

Código
  1. Private Function Cuenta_Circular7913(N&, m() As Integer, TIPO As Boolean) 'TIPO: FALSE = BLOQUE, TRUE = ESPIRAL
  2.    Dim X        As Long
  3.    Dim Y        As Long
  4.    Dim MEDIO    As Long ' N/2
  5.    Dim CT       As Long
  6.  
  7.        'If N Mod 2 <> 0 Then Exit Function
  8.        'If N > 180 Then Exit Function
  9.        'If N < 2 Then Exit Function
  10.  
  11.        ReDim m(N, N)
  12.  
  13.        MEDIO = N / 2
  14.  
  15.        For X = MEDIO + 1 To N
  16.            m(N - X, N - X) = 7
  17.            m(X, N - X) = 9
  18.            m(N - X, X) = 1
  19.            m(X, X) = 3
  20.        Next
  21.  
  22.        If TIPO Then 'ESPIRAL
  23.  
  24.            Dim SIGUIENTE   As Long
  25.            Dim SIGUIENTE_2 As Long 'SIGUIENTE * 2
  26.            Dim SIGUIENTE_3 As Long 'SIGUIENTE * 3
  27.  
  28.            For Y = 0 To MEDIO
  29.                CT = CT + SIGUIENTE_3
  30.                SIGUIENTE = N - (Y * 2) - 1
  31.                SIGUIENTE_2 = SIGUIENTE * 2
  32.                SIGUIENTE_3 = SIGUIENTE * 3
  33.  
  34.                For X = (Y + 1) To N - (Y + 1)
  35.                    CT = CT + 1
  36.                    m(X, Y) = CT
  37.                    m(N - Y, X) = CT + SIGUIENTE
  38.                    m(N - X, N - Y) = CT + SIGUIENTE_2
  39.                    m(Y, N - X) = CT + SIGUIENTE_3
  40.                Next
  41.            Next
  42.  
  43.        Else 'TRIANGULAR
  44.  
  45.            Dim MEDIO2     As Long 'MEDIO ^ 2
  46.            Dim MEDIO2_2   As Long 'MEDIO2 * 2
  47.            Dim MEDIO2_3   As Long 'MEDIO2 * 3
  48.  
  49.            MEDIO2 = MEDIO * MEDIO
  50.            MEDIO2_2 = MEDIO2 * 2
  51.            MEDIO2_3 = MEDIO2 * 3
  52.  
  53.            For Y = 0 To MEDIO
  54.                For X = (Y + 1) To N - (Y + 1)
  55.                    CT = CT + 1
  56.                    m(X, Y) = CT
  57.                    m(N - Y, X) = CT + MEDIO2
  58.                    m(N - X, N - Y) = CT + MEDIO2_2
  59.                    m(Y, N - X) = CT + MEDIO2_3
  60.                Next
  61.            Next
  62.        End If
  63. End Function


TEST:
Código:
"TEST HECHO POR 79137913"
Cuenta_Circular7913(180, Matriz, False)           : 0,456 msec
Leandro_Cuenta_Circular7913(180, Matriz, False)   : 0,522 msec
Cuenta_Circular7913(180, Matriz, True)            : 0,424 msec
Leandro_Cuenta_Circular7913(180, Matriz, True)    : 0,398 msec
GRACIAS POR LEER!!!