Visual Basic

Matriz caracol. Índices de matriz. Diagrama de flujo. Caminos del caracol. Utilización del programa

  • Enviado por: Maria Garcia Copana
  • Idioma: castellano
  • País: Bolivia Bolivia
  • 9 páginas
publicidad

visual basic (CARACOL)

  • Matriz Caracol

  • 11

    12

    13

    14

    15

    16

    21

    22

    23

    24

    25

    26

    31

    32

    33

    34

    35

    36

    41

    42

    43

    44

    45

    46

    51

    52

    53

    54

    55

    56

    61

    62

    63

    64

    65

    66

    Es una matriz que genera lo siguiente tomamos como ejemplo unas matriz cuadrada de 6x6

    1

    2

    3

    4

    5

    6

    20

    21

    22

    23

    24

    7

    19

    32

    33

    34

    25

    8

    18

    31

    36

    35

    26

    9

    17

    30

    29

    28

    27

    10

    16

    15

    14

    13

    12

    11

    Entonces vemos que el camino que sigue matriz caracol será el siguiente si solo colocamos los índices de la matriz (cada par se representara como fila columna )

    Como primer punto podríamos decir que el valor que ira dejando el caracol en cada variable es decir 1, 2, 3, …., 36 (en este caso 36 porque el tamaño de nuestra matriz ejemplo es 6 y el ultimo valor que pondrá el caracol en la celda de la matriz será 36 que tambien podría ser (6*6=36)) este valor lo podríamos controlar con una variable que la llamaremos num la cual se iniciara en cero es decir num=0 y luego se incrementara en uno a medida que el caracol avance por las celdas de la matriz es decir num=num+1

    Podemos observar se repiten los mismos pasos en tres vueltas que dará el caracol, este valor de 3 vueltas lo podemos sacar de dividir el tamaño de la matriz (en nuestro ejemplo es el 6, pero podríamos controlar este valor con una variable que comúnmente la llamamos N ) entre dos y luego sacar la parte entera (sacamos la parte entera porque si tendríamos que el tamaño de la matriz fuera 5 entonces 5/2=2.5 pero la parte entera será dos, generalizando tendríamos que int (N/2) ), con eso ya obtenemos cuantas vueltas dará el caracol. Pero si se tratara de una matriz de tamaño impar vemos conveniente colocar manualmente el último valor de tal manera que el programa nos sirva para tamaño para e impar

    Analizando la Línea 1 vemos un valor que va rebajando desde 6, luego 5 (6-1), y luego 4 (5-1). Si controláramos ese valor mediante una variable (por ejemplo “V” de variable) que vayamos rebajando en 1 su valor en cada vuelta que de el caracol, es decir primero empezamos guardando en la variable el valor de 6 (V=6 : este valor de 6 vendría a ser el tamaño de la matriz que comúnmente la llamamos “N” entonces tendríamos V=N), y este valor decrecerá en cada vuelta que de el caracol de la siguiente manera V =V-1

    Analizando la Línea 2 vemos un valor que va incrementado su valor así como las vueltas, a este valor también podríamos controlarlo con una variable que se vaya acumulando y entonces nos damos cuenta de que casualmente este valor coincide con el número de vueltas que el caracol estará dando (convenientemente nombramos este valor como vuelta que empezara en cero; vuelta = 0 ; y aumentará su valor cuando el caracol empiece a dar sus vueltas vuelta = vuelta +1)

    En cada vuelta que de el caracol tendrá que seguir cuatro caminos a excepción de la última vuelta donde solo recorrerá tres caminos :

    Vemos que se puede controlar esos valores con variables llamemos Fila y COL (columna) a las mismas (vemos también que la forma en que varían en este caso las columnas las podemos controlar con una estructura conocida como FOR que es nuestro contador automático )

    Analizando el primer camino tendríamos la variable COL (para controlar las variaciones de la columna) , que ira desde 1 (vuelta) hasta 6 (V) además de eso podemos notar que las filas se mantiene constantes en 1 (vuelta)

    Analizando el segundo camino las que varían son las filas y la variable del FOR se llamara Fila que variará desde 2 (vuelta+1 ) hasta 6 (V) además de eso podemos notar que las columnas se mantiene constantes en 6 (V)

    Analizando el tercer camino Donde nos damos cuenta que otra vez variaran las columnas COL pero esta vez su valor ira decreciendo desde 5 (V - 1) hasta 1 (vuelta) además de eso podemos notar que las filas se mantiene constantes en 6 (V)

    Antes de analizar el cuarto camino vemos que en la última vuelta EL CARACOL NO DEBE recorrer el cuarto camino por lo que tendremos que colocar una condición para pasar al cuarto camino y esta seria si vuelta <> V-1 ? (3 es distinto de 3 ?) es decir si las fila y columna son diferentes iguales si es asi entonces recién el caracol recorrerá el cuarto camino.

    Analizando el cuarto camino las que varían son las filas y la variable del FOR se llamara Fila que variará desde 5 (V - 1 ) hasta 2 (vuelta + 1) además de eso podemos notar que las columnas se mantiene constantes en 1 (vuelta)

    Entonces nuestro diagrama de flujo quedaría de la siguiente manera

    La interfaz sera

    El codigo seria el siguiente

    ' *************************************************************************

    'TODO LO QUE SE ESCRIBA CON "'**" ES UN COMENTARIO NO ES PARTE DEL PROGRAMA

    ' **************************************************************************

    Option Explicit '**NOS OBLIGA A DECLARAR TODAS LAS VARIABLES

    '** DEFINIMOS TODAS LAS VARIABLES QUE UTILIZAREMOS EN EL PROGRAMA

    Dim V As Integer, N As Integer, COL As Integer

    Dim FILA As Integer, VUELTA As Integer

    Dim k As Integer

    '**LA DEFINICION DE UNA MATRRIZ ES COMO SIGUE

    Dim MATRIZ(1 To 20, 1 To 20) As Integer, NUM As Integer

    '**DAMOS DOBLE CLIC SOBRE EL FORMULARIO PARA QUE APAREZCA ESTA OPCION

    ……………………………………………………………………………………………………………………

    Private Sub Form_Load()

    '**SENTENCIA PARA CENTRAR EL FORMULARIO

    '**PERO TAMBIEN SE LE PUEDE INDICAR EN TIEMPO DE DISEÑO

    '**MEDIANTE SU PROPIEDAD STARTUPPOSITION=1

    Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2

    '**CON LA PALABRA RESERVADA WITH NOS EVITAMOS COLOCAR EN CADA

    '**SENTENCIA QUE SIGUE LA PALABRA MSFLEXGRID1

    With MSFlexGrid1

    '**LO QUE ESTAMOS HACIENDO CON ESTE FOR ES DAR DIMENSION A LAS FILAS Y COLUMNAS

    '**ROWHEIGHT(ALTO DE FILA), COLWIDTH (ANCHO DE COLUMNA)

    For k = 1 To 19

    .ColWidth(k) = 600

    .RowHeight(k) = 400

    .Text = ""

    Next k

    '**CON ESTO LE ESTAMOS DANDO A LA FILA(0) Y COLUMNA (0)

    '**DEL MSFLEXGRID UN TAMAÑO MAS PEQUEÑO

    .ColWidth(0) = 100

    .RowHeight(0) = 100

    End With

    End Sub

    …………………………………………………………………………………………………………………

    '**NO OLVIDEN ESTO BAJO EL SUCESO KEYPRESS

    Private Sub Text1_KeyPress(KeyAscii As Integer)

    If KeyAscii = 13 Then '**SI LA TECLA PRESIONADA ES ENTER

    If Not (Val(Text1.Text) > 0 And Val(Text1.Text) <= 20) Or Text1.Text = "" Then

    MsgBox "SE LE DIJO ENTRE 1 Y 20", vbExclamation + vbOKOnly,

    "CARACOLES!!!"

    Text1.Text = ""

    Else

    caracol.SetFocus '**EL CURSOR SE ENFOCARA EN EL BOTON DEL CARACOL

    End If

    End If

    '**SI LA TECLAS PRESIONADA NO ESTA EN EL RANGO DE 0 A 9, O NO ES LA TECLA DEL BACKSPACE

    '**ESTAMOS VALIDANDO PARA QUE SOLO SE DIGITEN NUMEROS

    If Not ((Chr(KeyAscii) >= "0" And Chr(KeyAscii) <= "9") Or KeyAscii = 8) Then

    Beep

    KeyAscii = 0 '**COLOCAMOS EL CURSOR ALPRINCIPIO DEL TEXTBOX

    End If

    End Sub

    ………………………………………………………………………………………………………………….

    '**ESTA OPCION SUCEDERA CADA VEZ QUESE HAGA CLIC ENEL BOTON DEL CARACOL

    Private Sub caracol_Click()

    N = Val(Text1.Text)

    'ASIGNAMOS EL VALOR OBTENIDO EN EL TEXT1 A LA VARIABLE N TAMAÑO DE LA MATRIZ

    If (N Mod 2) <> 0 Then

    'SI EL TAMAÑO ES IMPAR COLOCAREMOS EL UTLIMO VALOR DEL CARACOL

    MATRIZ(Int(N / 2) + 1, Int(N / 2) + 1) = N * N

    End If

    '**INICIALIZAMOS VARIABLES

    V = N: VUELTA = 0: NUM = 0

    '**EMPEZAMOS EL BUCLE DO...LOOP UNTIL <CONDICION>

    Do

    VUELTA = VUELTA + 1

    For COL = VUELTA To V

    NUM = NUM + 1

    MATRIZ(VUELTA, COL) = NUM

    Next COL

    For FILA = VUELTA + 1 To V

    NUM = NUM + 1

    MATRIZ(FILA, V) = NUM

    Next FILA

    For COL = V - 1 To VUELTA Step -1

    NUM = NUM + 1

    MATRIZ(V, COL) = NUM

    Next COL

    If VUELTA <> V - 1 Then

    For FILA = V - 1 To VUELTA + 1 Step -1

    NUM = NUM + 1

    MATRIZ(FILA, VUELTA) = NUM

    Next FILA

    End If

    V = V - 1

    Loop Until VUELTA = Int(N / 2)

    '**PARA MOSTRAR LA MATRIZ UTILIZANDO EL MSFLEXGRID

    For FILA = 1 To N

    For COL = 1 To N

    MSFlexGrid1.TextMatrix(FILA, COL) = MATRIZ(FILA, COL)

    Next COL

    Next FILA

    End Sub

    …………………………………………………………………………………………………………………..

    Private Sub NUEVO_Click()

    '**LIMPIAMOS EL TEXTBOX

    Text1.Text = ""

    '**LIMPIAMOS EL MSFLEXGRID1

    For FILA = 1 To N

    For COL = 1 To N

    MSFlexGrid1.TextMatrix(FILA, COL) = ""

    Next COL

    Next FILA

    Text1.SetFocus

    End Sub

    …………………………………………………………………………………………………………………..

    '** BOTON PARA SALIR DEL PROGRAMA

    Private Sub SALIR_Click()

    '** UNLOAD (DESCARGAR) ME (YO ES DECIR EL FORMULARIO ACTIVO)

    Unload Me

    End Sub

    - 9 -

    Vemos que varían las filas desde 4 a 3

    Vemos que varían las columnas desde 4 a 2

    Vemos que varían las filas desde 3 a 5

    Vemos que varían las columnas desde 2 a 5

    Vemos que varían las filas desde 5 a 2

    Vemos que varían las columnas desde 5 a 1

    Vemos que varían las filas desde 1 a 6

    Vemos que varían las columnas desde 1 a 6

    TERCERA VUELTA

    SEGUNDA VUELTA

    PRIMERA VUELTA

    Vemos que varían las filas desde 1 a 6

    Vemos que varían las columnas desde 1 a 6