Informática
Visual Basic
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
Descargar
Enviado por: | Maria Garcia Copana |
Idioma: | castellano |
País: | Bolivia |