Anda di halaman 1dari 10

visual basic (CARACOL)

Matriz Caracol
11111
12345

16

333333
123456
444444
123456
555555
123456
22222
12345

666666
1 2 3 4 26
56

Es una matriz que genera lo siguiente tomamos como ejemplo unas matriz cuadrada de 6x6
1
20
19
18
17
16
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 podramos decir que el valor que ira dejando el caracol en cada variable
es decir 1, 2, 3, ., 36 (en este caso 36 porque el tamao de nuestra matriz ejemplo es 6 y el
ultimo valor que pondr el caracol en la celda de la matriz ser 36 que tambien podra ser
(6*6=36)) este valor lo podramos 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 tamao de la matriz (en nuestro ejemplo es
el 6, pero podramos controlar este valor con una variable que comnmente la

llamamos N )entre dos y luego sacar la parte entera (sacamos la parte entera porque si
tendramos que el tamao de la matriz fuera 5 entonces 5/2=2.5 pero la parte entera ser dos,
generalizando tendramos que int (N/2) ), con eso ya obtenemos cuantas vueltas dar el
caracol. Pero si se tratara de una matriz de tamao impar vemos conveniente colocar
manualmente el ltimo valor de tal manera que el programa nos sirva para tamao para e
impar
Analizando la Lnea 1 vemos un valor que va rebajando desde 6, luego 5 (6-1), y luego 4 (51). Si controlramos 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 vendra a ser el
tamao de la matriz que comnmente la llamamos N entonces tendramos V=N), y este valor
decrecer en cada vuelta que de el caracol de la siguiente manera V =V-1
Analizando la Lnea 2 vemos un valor que va incrementado su valor as como las vueltas, a
este valor tambin podramos controlarlo con una variable que se vaya acumulando y
entonces nos damos cuenta de que casualmente este valor coincide con el nmero de
vueltasque 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 excepcin 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 tambin que la forma en que varan en este caso las columnas las
podemos controlar con una estructura conocida como FOR que es nuestro contador
automtico )
Analizando el primer camino tendramos la variable COL (para controlar las variaciones de
la columna) , que ira desde 1 (vuelta) hasta 6 (V) adems de eso podemos notar que
las filas se mantiene constantes en 1 (vuelta)
Analizando el segundo camino las que varan son las filas y la variable del FOR se
llamara Fila que variar desde 2 (vuelta+1 ) hasta 6 (V) adems 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 decreciendodesde 5 (V - 1) hasta 1 (vuelta) adems
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 condicin 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 recin el caracol recorrer el cuarto camino.
Analizando el cuarto camino las que varan son las filas y la variable del FOR se
llamara Fila que variar desde 5 (V - 1 ) hasta 2 (vuelta + 1) adems de eso podemos notar
que las columnas se mantiene constantes en 1 (vuelta)
Entonces nuestro diagrama de flujo quedara 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

visual basic (CARACOL)

Matriz Caracol
11111
12345

16

333333
123456
444444
123456
555555
123456
22222
12345

666666
1 2 3 4 26
56

Es una matriz que genera lo siguiente tomamos como ejemplo unas matriz cuadrada de 6x6
1
20
19
18
17
16
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 podramos decir que el valor que ira dejando el caracol en cada variable
es decir 1, 2, 3, ., 36 (en este caso 36 porque el tamao de nuestra matriz ejemplo es 6 y el
ultimo valor que pondr el caracol en la celda de la matriz ser 36 que tambien podra ser
(6*6=36)) este valor lo podramos 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 tamao de la matriz (en nuestro ejemplo es

el 6, pero podramos controlar este valor con una variable que comnmente la
llamamos N )entre dos y luego sacar la parte entera (sacamos la parte entera porque si
tendramos que el tamao de la matriz fuera 5 entonces 5/2=2.5 pero la parte entera ser dos,
generalizando tendramos que int (N/2) ), con eso ya obtenemos cuantas vueltas dar el
caracol. Pero si se tratara de una matriz de tamao impar vemos conveniente colocar
manualmente el ltimo valor de tal manera que el programa nos sirva para tamao para e
impar
Analizando la Lnea 1 vemos un valor que va rebajando desde 6, luego 5 (6-1), y luego 4 (51). Si controlramos 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 vendra a ser el
tamao de la matriz que comnmente la llamamos N entonces tendramos V=N), y este valor
decrecer en cada vuelta que de el caracol de la siguiente manera V =V-1
Analizando la Lnea 2 vemos un valor que va incrementado su valor as como las vueltas, a
este valor tambin podramos controlarlo con una variable que se vaya acumulando y
entonces nos damos cuenta de que casualmente este valor coincide con el nmero de
vueltasque 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 excepcin 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 tambin que la forma en que varan en este caso las columnas las
podemos controlar con una estructura conocida como FOR que es nuestro contador
automtico )
Analizando el primer camino tendramos la variable COL (para controlar las variaciones de
la columna) , que ira desde 1 (vuelta) hasta 6 (V) adems de eso podemos notar que
las filas se mantiene constantes en 1 (vuelta)
Analizando el segundo camino las que varan son las filas y la variable del FOR se
llamara Fila que variar desde 2 (vuelta+1 ) hasta 6 (V) adems 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 decreciendodesde 5 (V - 1) hasta 1 (vuelta) adems
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 condicin 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 recin el caracol recorrer el cuarto camino.
Analizando el cuarto camino las que varan son las filas y la variable del FOR se
llamara Fila que variar desde 5 (V - 1 ) hasta 2 (vuelta + 1) adems de eso podemos notar
que las columnas se mantiene constantes en 1 (vuelta)
Entonces nuestro diagrama de flujo quedara 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 DISEO
'**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 TAMAO MAS PEQUEO
.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 TAMAO DE LA


MATRIZ
If (N Mod 2) <> 0 Then
'SI EL TAMAO 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
-9Vemos que varan las filas desde 4 a 3
Vemos que varan las columnas desde 4 a 2
Vemos que varan las filas desde 3 a 5
Vemos que varan las columnas desde 2 a 5

Vemos que varan las filas desde 5 a 2


Vemos que varan las columnas desde 5 a 1
Vemos que varan las filas desde 1 a 6
Vemos que varan las columnas desde 1 a 6
TERCERA VUELTA
SEGUNDA VUELTA
PRIMERA VUELTA
Vemos que varan las filas desde 1 a 6
Vemos que varan las columnas desde 1 a 6

Anda mungkin juga menyukai