Documente Academic
Documente Profesional
Documente Cultură
ENCICLOPEDIA CONOCIENDO
Próximame
nte en
Internet y
en su
librería más
cercana
TOMO LXI
JAVA
MATRICES
ELABORADO POR:
CONTIENE
CONCEPTOS DE
MATRICES,
EJEMPLOS,
EJERCICIOS
PROPUESTOS Y ALGO
MÁS.
SEPTIEMBRE DE 2003.
INTRODUCCIÓN
Tenía unos apuntes, desorganizados y solo los entendía yo, así que
decidí poner todo mi empeño en el desarrollo de este material y
espero que se siga mejorando este material, así como he mejorado
otros materiales que desde hace mucho tiempo he venido publicando,
como son los libros de Algoritmia y Programación, JavaScript, Bases
de Datos con énfasis en SQL Server, ASP, etc.
Espero que este material sea una muy buena herramienta para las
personas que se introducen en el mundo de Java y para las personas
experimentadas que ya tienen algún conocimiento de este excelente
lenguaje de programación. De antemano, gracias a mis familiares por
la paciencia que me tuvieron cada vez que me veían trabajando horas y
horas en el computador y gracias a mi novia Esmeralda, por comprender
que la elaboración de este material demanda tiempo y paciencia.
Gracias a DIOS TODOPODEROSO por haberme dado salud, paciencia y
licencia de culminar este material que hoy presento a cualquier
persona que quiera iniciar, conocer, profundizar y afianzar sus
conocimientos de Java.
Cualquier sugerencia que me quieran hacer sobre el presente material, será bien
recibida y la pueden hacer en el correo luchofelipe2000@yahoo.com y mientras siga
trabajando en la Universidad en el correo lwanumen@udistrital.edu.co.
SOBRE EL AUTOR
PROLOGO
La organización de este libro sigue una secuencia más o menos clásica, pues se
comienza dando los fundamentos de cómo utilizar el compilador, las principales
estructuras del lenguaje java, las matrices y programas cada vez más elaborados,
juegos y al final se dedican esfuerzos por explicar swing y la conexión de java con
bases de datos.
Este es un material que trata al máximo de colocar ejercicios resueltos con el fin de
lograr que el aprendizaje sea rápido por parte del estudiante, pues mi experiencia me
ha demostrado que el estudiante aprende mejor cuando se le dan ejemplos ya
elaborados que le van mostrando como se aplican los diversos conceptos, casi se
puede decir que siguiendo linealmente los ejercicios desarrollados en este libro, el
estudiante está en capacidad de ir asimilando los conceptos sin necesidad de incluir
mucha teoría. Obviamente la teoría se incluye en temas críticos como el inicio, en el
cual hay necesidad de orientar al estudiante sobre la estructura, forma y alcances de la
programación en java y en capítulos sobre matrices y vectores que son temas bastante
trabajados en cursos de programación, pero en donde la mayoría de profesores carecen
de ejercicios completos que muestren como se aplican dichos conceptos.
AGRADECIMIENTOS
15) El presente material no puede ser utilizado por ningún otro docente, ni
comercializado por persona alguna a menos que se tenga por escrito la
autorización del autor: Luis Felipe Wanumen Silva y en ningún caso se
transpasará, cederán, venderán o regalarán propiedades de autoría por parte del
autor de parte(s) o totalidad del material aquí expuesto.
16) Los estudiantes que hallan sido estudiantes del profesor Luis Felipe Wanumen
tienen un permiso explícito concedido en esta parte para fotocopiar, reproducir,
imprimir y utilizar este material únicamente con fines académicos para clase y
para sí mismos y en ningún caso puede utilizar este material como ayuda
didáctica para dictar una cátedra de programación y/o entregar copias a
terceros a menos que tenga una autorización escrita del autor y no le cambie
nada al material, como son encabezados, portadas citas, explicaciones y en
ningún caso se ceden licencias comerciales o transferencias de propiedad de
autoría a ninguna persona natural o jurídica.
17) El derecho a adquirir la versión mejorada del presente material por parte de ex
-estudiantes del profesor y que sean graduados se tiene únicamente si se le
avisa al autor que se desea la adquisición de dicha copia y es responsabilidad
utilizar dicha copia y sacarle copias escritas o por otro medio únicamente para
sí mismo y en ningún caso para publicación para ser vista por terceros; y
aunque la copia sea para sí mismo en ningún caso se permite la alteración del
contenido, de los encabezados de página, de los pies de página y páginas de
presentación.
18) A ningún estudiante se le obliga a comprar el presente material al profesor en
forma electrónica o escrita, el profesor vendería las fotocopias del mismo
solamente a estudiantes que así lo hallan solicitado. Ningún estudiante puede
vender fotocopias del presente material a personas que no sean estudiantes del
profesor y el derecho a repartir copias electrónicas del presente material está
reservado únicamente al profesor.
19) El profesor le regala a sus estudiantes el derecho a copiar este material en
forma electónica únicamente para fines académicos y estrictamente
relacionados con su crecimiento profesional en el curso y no para distribuir o
fotocopiar este material para terceros. Para sí mismo cada estudiante puede
sacarle cuantas copias desee de la manera que desee, pero nunca con el ánimo
de lucro.
20) Si algún estudiante pretende publicar este material en un sitio web, lo puede
hacer siempre y cuando cuente con la aprobación del profesor, deje intacto el
material,no le quite ni le añada, no lo utilice con fines lucrativos indirecta o
directamente y haga una referencia al autor siempre que se refiera a este
material.
21) El profesor no se hace responsable por el uso que sus estudiantes hagan del
presente material, ni mucho menos por las consecuencias ocasionadas en los
equipos de cómputo, estaciones de trabajo o afines por la utilización,
aplicación de conceptos y demás cuestiones expuestas en el presente material.
22) Bajo ninguna circunstancia un estudiante puede lucrarse con este material
reproduciendo por cualquier medio el presente y vendiéndolo a terceros, así los
terceros sean estudiantes del docente en mención.
23) La propiedad intelectual, de autoría y patente está únicamente dada al autor
Luis Felipe Wanumen Silva y en ningún caso será cedida.
24) Cualquier marca aquí expuesta en el presente material es propiedad de la
respectiva empresa y si en algún caso la mención de alguno de ellos se hace
con el fin de causar deterioro de imagen, goodwill de empresa alguna, se dice
que esta no es la intencion, puesto que se respetan las marcas, empresas,
propiedades, patentes y estandares y a nadie se le discrimina por se empresa de
software libre o propietaria, por tener o dejar de tener cualquier caracteristica y
en la medida de lo posible se pretende dar a entender en el presente material
que no se pretende pordebajear otros lenguajes de programacion, empresas,
revistas o cualquier entidad relacionada directa o indirectamente con este
material.
25) La utilización del presenta material es responsabiliad solamente de la persona
que lo haga y el autor no corre con ninguna responsabilidad que se haga del
mismo.
26) El autor no garantiza que en un 100% los conceptos sean válidos, actuales,
verídicos, pero garantiza que frecuentemente hace revisiones al presente
material e intenta mejorar errores encontrados en versiones anteriores.
27) El presente material no es propiedad intelectual de ningún estudiante, empresa,
universidad, multinacional o similar diferente al autor: Luis Felipe Wanumen
Silva.
28) El derecho comercial y de lucro del presente material es exclusividad del autor:
Luis Felipe Wanumen Silva
En este capitulo relacionado con las matrices es importante notar que un tema bien
importante es la inicilización de la matriz con valores. Para hacer la cuestión bien
didáctica, vamos en primera instancia a llenar la matriz con valores colocados por el
programa y a medida que vayamos avanzando iremos incorporando nuevas
complejidades. El siguiente programa solamente inicializa los valores de una matriz y
posteriormente los imprime.
/******************************************************************
Nombre : matriz3.java
Descripcion : El siguiente programa muestra como se
: crean e inicializan matrices de tipo int
Tipo: : No Maneja apuntadores, maneja arrays (Matrices)
: Es de tipo APPLET
: El tamaño de la matriz es establecido por
: el programador
Autor : Luis Felipe Wanumen luchofelipe2000@yahoo.com
Revision : No hay revisiones por el momento.
Agradecimientos : No hay
D.Historico : 03/05/2003
******************************************************************/
import java.awt.*;
import java.applet.*;
/******************************************************************
Nombre : matriz1.java
Descripcion : El siguiente programa muestra como se
: crean e inicializan matrices de tipo int
: Como se le asignan valores y posteriormente
: se imrime el contenido en un TextArea
Tipo: : El programa utiliza CONCAT de la clase STRING
: No Maneja apuntadores, maneja arrays
: Es de tipo Autonomo
: El tamaño de la matriz es ditigado por el
: usuario
Autor : Luis Felipe Wanumen luchofelipe2000@yahoo.com
Revision : No hay revisiones por el momento.
Agradecimientos : No hay
D.Historico : 12/04/2003
******************************************************************/
import java.awt.*;
import java.awt.event.*;
area.setText("");
for(int ii=0; ii<fil; ii++)
{
for(int jj=0; jj<col; jj++){
Integer auxiliar = new Integer(Matriz[ii][jj]);
String areas = new String(area.getText());
String matris = new String(auxiliar.toString()+" ");
area.setText(areas.concat(matris.toString())+"");
matris.concat(auxiliar.toString());
}
area.setText(area.getText()+"\n");
}
campo.setText("Que paso");
campo.setVisible(false);
boton1.setVisible(true);
campo.setText("");
contador++;
tamano = fil*col;
area.setVisible(true);
}
else
{
}//cierra comparo2==0 && contador==0
}
return true;
}
public MyApp()
{
this.addWindowListener (new WindowAdapter(){
public void windowClosing(WindowEvent e){
dispose();
System.exit(0);
}
});
p.add(etiqueta);
p.add(campo);
p.add(area);
p.add(boton1);
p.show();
boton1.setVisible(false);
}
1.3. PROGRAMA QUE PIDE CADA UNO DE LOS VALORES DE UNA MATRIZ
1 2 3
4 5 6
7 8 9
/******************************************************************
Nombre : matriz3a.java
Descripcion : El siguiente programa llenar una matriz
: de tamaño prdeterminado con valores
: digitados por el usuario.
: El programa halla una nueva matriz inserva e
: imrime el contenido de la misma en un TextArea
Tipo: : El programa utiliza ciclos
: Maneja matrices estaticas
: Es de tipo Applet
matriz[pos_x][pos_y] =
Integer.parseInt(t1.getText().trim());
if(pos_x<2){
pos_x = pos_x+1;
}
else{
if((pos_y+1)<3){
pos_y = pos_y+1;
pos_x = 0;
}
} // Cierra else interno
System.out.println("DESPUES = x = "+pos_x);
System.out.println("DESPUES = y = "+pos_y);
System.out.println(" ");
} // Cierra if (pos_x<2 && pos_y<2)
} // Cierra actionPerformed
} // Cierra class almacenar
}
En donde el usuario puede comenzar a digitar los valores que harán parte de la matriz
“matriz”. Cuando el usuario presione el botón con el rótulo “OK” se insertará dicho
valor en el respectivo de la matriz. Al momento de insertar el último valor, no solo se
inserta, sino que también se calcula su inversa y se muestra en el “TextArea” ubicado
en la parte inferior de la aplicación. Para ser didácticos supongamos que insertamos
los siguientes valores:
1 2 30
0 0
4 5 60
0 0
7 8 90
0 0
El programa siguiente es una mejora del anterior programa, por cuanto el programa
además de permitir al usuario insertar los datos digitados por el usuario en una matriz,
también crea una matriz con la transpuesta y la muestra al usuario.
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
add(p1);
add(ta);
p1.add(t1);
p1.add(b1);
b1.addActionListener(obj);
}
Panel p1
TextArea ta
add(p1);
add(ta);
Ahora bien, dentro del Panel “p1” se colocan dos elementos, tal como se muestra a
continuación:
Panel p1
TextArea ta
TextField t1 Button b1
p1.add(t1);
p1.add(b1);
En donde se puede observar que los elementos van a ser insertados dentro del panel
superior, el cual en nuestro caso tiene el nombre de “p1”.
En este ejercicio, se ascocia un objeto de tipo evento a nuestro boton, el cual para este
caso es el botón b1, mediante la instrucción:
b1.addActionListener(obj);
b1
Clase Tipo
ActionListener
De tal suerte que cuando se hace click sobre el botón, en realidad se activa la clase
Tipo ActionListener. Las clases que implementan ActionListener son clases evento en
java, por esta razón una clase para que sea activada como un evento debe implementar
la clase ActionListener
Otra cuestión importante que es necesario tener en cuenta es el hecho que cuando se
activa una clase tipo “ActionListener”, se ejecuta la función actionPerformed, tal
como se muestra en el siguiente diagrama conceptual:
Funcion
Clase Tipo ActionListener ¡ACTIVESE!
actionPerformed
¡EJECUTE FUNCION
ACTIONPERFORMED!
Con todo lo mostrado hasta el momento, vemos pues que todo el programa en esencia
se reduce a comprender el funcionamiento de las instrucciones inmersas en la función
“actionPerformed”:
if(contador<16){
int valor;
valor=Integer.parseInt(t1.getText().trim());
matriz[x][y]=valor;
matrizT[y][x]=valor;
//System.out.println(""+valor);
if(y<3){
y=y+1;
}
else {
y=0;
x=(x+1);
}
contador=contador+1;
}
Las cuales verifican que la variable contador sea menor que 16 y si ello se cumple se
toma el valor que hay en la caja de texto, se convierte a entero y finalmente se
almacena en la matriz, tal como se muestra en el siguiente diagrama conceptual:
b1
Es necesario que el amigo lector / estudiante tenga en cuenta que si para este ejercicio
en particular, si estamos situados en la primera, segunda o tercera columna podemos
insertar el valor en la matriz y posteriormente incrementar la variable de la columna,
en este caso, la variable “y”, tal como se muestra en el siguiente diagrama conceptual:
b1
if(y<3){
y=y+1;
}
else {
y=0;
x=(x+1);
}
Esta situación se presentará las primeras 16 veces que el usuario haga click sobre el
botón. La verdad es que cuando el usuario haga click por vez 17, se ejecutará las
instrucciones contenidas en el bloque “else”:
else{
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
cadena=cadena+matrizT[i][j]+ "\t";
}
cadena=cadena+"\n";
}
t1.setVisible(false);
b1.setVisible(false);
ta.setText(cadena);
}
Las cuales vuelven a recorrer la matriz pero con el fin de colocar los datos de la matriz
transpuesta en una variable “cadena”, la cual es asignada como contenido del
TextArea. Al finalizar la inserción de elementos, el programa produce una pantalla
similar a la siguiente con los resultados que se muestran a continuación:
Esto obviamente se debe a que existe la instrucción que deshabilita el botón y la caja
de texto, haciéndola invisible al usuario. Este efecto se obtiene cuando se ejecutan las
instrucciones:
t1.setVisible(false);
b1.setVisible(false);
y suponiendo por supuesto que han sido asignados valores enteros consecutivos que
van del 1 al 16 y se iban insertando en la matriz.
/******************************************************************
Nombre : matriz2.java
Descripcion : El siguiente programa muestra como se
: implementa el algoritmo de la MATRIZ
: MAGICA
: se imrime el contenido en un TextArea
Tipo: : El programa utiliza CONCAT de la clase STRING
: No Maneja apuntadores, maneja arrays
: Es de tipo Autonomo
: El tamaño de la matriz es ditigado por el
: usuario
Autor : Luis Felipe Wanumen luchofelipe2000@yahoo.com
Revision : No hay revisiones por el momento.
Agradecimientos : No hay
D.Historico : 12/04/2003
******************************************************************/
import java.awt.*;
import java.awt.event.*;
fila = fil-1;
columna = (col-1)/2;
while(valor<fil*fil);
area.setText("");
campo.setText("Que paso");
campo.setVisible(false);
boton1.setVisible(true);
campo.setText("");
contador++;
tamano = fil*col;
area.setVisible(true);
}
else
{
}//cierra comparo2==0 && contador==0
}
return true;
}
public MyApp()
{
this.addWindowListener (new WindowAdapter(){
public void windowClosing(WindowEvent e){
dispose();
System.exit(0);
}
});
p.add(etiqueta);
p.add(campo);
p.add(area);
p.add(boton1);
p.show();
boton1.setVisible(false);
}
System.out.println("Starting App");
MyApp f = new MyApp();
f.setSize(400,300);
f.show();
}
}
/******************************************************************
Nombre : matriz3.java
Descripcion : El siguiente programa muestra como se
: implementa una matriz de TextField. Tambien
: muestra como dibujar un tablero de ajedrez
: con dichos TextField y numerar las diagonales
Tipo: : El programa utiliza AWT de la clase APPLET
: No Maneja apuntadores, maneja matrices
: Es de tipo Applet
: El tamaño de la matriz es 8*8
Autor : Luis Felipe Wanumen luchofelipe2000@yahoo.com
Revision : No hay revisiones por el momento.
Agradecimientos : No hay
D.Historico : 12/05/2003
******************************************************************/
import java.awt.*;
import java.applet.*;
double par;
par = (i+j) % 2;
textos[i][j] = new TextField();
add(textos[i][j]);
if(par == 1.0){
textos[i][j].setBackground(Color.green);
textos[i][j].setForeground(Color.black);
}
else{
textos[i][j].setBackground(Color.blue);
textos[i][j].setForeground(Color.white);
}
textos[i][j].setText(""+(i+j));
}
}
}
}
Para poder entender este ejemplo es necesario que se vea con detenimiento la
siguiente matriz:
Fila/Columna 0 1 2 3 4 5 6 7
0 4
1 4
2 4
3 4
4 4
5
6
7
Las celdas que tienen el número cuatro tienen algo en común y es que la suma de sus
índices suman cuatro. Veamos pues, la siguiente tabla mejorada:
Fila/Columna 0 1 2 3 4 5 6 7
0 0+4 0+7
=4 =7
1 1+3 1+6
=4 =7
2 2+2 2+5
=4 =7
3 3+1 3+4
=4 =7
4 4+0 4+3
=4 =7
5 5+2 5+7
=7 =12
6 6+1 6+6
=7 =12
7 7+0 7+5
=7 =12
Fila/Columna 0 1 2 3 4 5 6 7
0 0 1 2 3 4 5 6 7
1 1 2 3 4 5 6 7 8
2 2 3 4 5 6 7 8 9
3 3 4 5 6 7 8 9 10
4 4 5 6 7 8 9 1 11
0
5 5 6 7 8 9 1 1 12
0 1
6 6 7 8 9 1 1 1 13
0 1 2
7 7 8 9 1 1 1 1 14
0 1 2 3
Según esto para dibujar un tablero de ajedrez, es posible preguntar por la suma de los
indices (es decir de las posiciones de la fila y la columna) y posteriormente preguntar
si es par o si es impar para proceder a colocarle el color que se quiera. Es decir, se
debe adicionar una variable, en este caso una denominada “par”, la cual va a tomar el
residuo entre la suma de fila y columna con el numero dos. Es decir va a tomar el
siguiente valor:
Par = (i+j) mod 2 para todos los valores de i y todos los valores de j.
Al utilizar dicha variable veremos que la matriz con los valores de par toma la
siguiente forma:
Fila/Columna 0 1 2 3 4 5 6 7
0 0 1 0 1 0 1 0 1
1 1 0 1 0 1 0 1 0
2 0 1 0 1 0 1 0 1
3 1 0 1 0 1 0 1 0
4 0 1 0 1 0 1 0 1
5 1 0 1 0 1 0 1 0
6 0 1 0 1 0 1 0 1
7 1 0 1 0 1 0 1 0
Ahora, si, para finalizar veamos gráficamente el resultado del programa en java
mostrado anteriormente:
0 1 2 3 4 5 6 7
1 2 3 4 5 6 7 8
2 3 4 5 6 7 8 9
3 4 5 6 7 8 9 10
4 5 6 7 8 9 1 11
0
5 6 7 8 9 1 1 12
0 1
6 7 8 9 1 1 1 13
0 1 2
7 8 9 1 1 1 1 14
0 1 2 3
Fila/Columna 0 1 2 3 4 5 6 7
0 0 1 2 3 4 5 6 7
1 1 2 3 4 5 6 7 8
2 2 3 4 5 6 7 8 9
3 3 4 5 6 7 8 9 10
4 4 5 6 7 8 9 1 11
0
5 5 6 7 8 9 1 1 12
0 1
6 6 7 8 9 1 1 1 13
0 1 2
7 7 8 9 1 1 1 1 14
0 1 2 3
Es decir una diagonal en forma gráfica ascendente y hacia la derecha, tal como se
muestra en el siguiente gráfico:
Fila/Columna 0 1 2 3 4 5 6 7
0
1
2
3
4
5
6
7
Fila/Columna 0 1 2 3 4 5 6 7
0
1
2
3
4
5
6
7
Esta diagonal, también la podemos identificar mediante los índices, pero esta vez,
mediante la resta de sus índices, tal como se muestra a continuación:
Fila/Column 0 1 2 3 4 5 6 7
a
0 0-0 = 0 0 – 4 = -4
1 1-1 = 0 1-5 = -4
2 2-2 = 0 2-6 = -4
3 3-3 = 0 3-7 = -4
4 4-0 = 4 4-4 = 0
5 5-1 = 4 5-5 = 0
6 6-2 = 4 6-6 = 0
7 7-3 = 4 7-7 = 0
Fila/Columna 0 1 2 3 4 5 6 7
0 0 -1 -2 -3 -4 -5 -6 -7
1 1 0 -1 -2 -3 -4 -5 -6
2 2 1 0 -1 -2 -3 -4 -5
3 3 2 1 0 -1 -2 -3 -4
4 4 3 2 1 0 -1 -2 -3
5 5 4 3 2 1 0 -1 -2
6 6 5 4 3 2 1 0 -1
7 7 6 5 4 3 2 1 0
Ahora sólo restaria asignar a la variable par el valor del residuo, pero hay que tener en
cuenta que el operador “%” no funciona bien cuando el numerador es negativo y el
mod es positivo, con lo cual hay que preguntar quien es mayor. Es decir:
Con lo cual el programa definitivo que implementa esta tablero de ajedrez, pero
siguiendo la lógica de las diagonales descendentes, se muestra a continuación.
Veamos:
/******************************************************************
Nombre : matriz4.java
Descripcion : El siguiente programa muestra como se
: implementa una matriz de TextField. Tambien
: muestra como dibujar un tablero de ajedrez
: con dichos TextField y numerar las diagonales
Tipo: : El programa utiliza AWT de la clase APPLET
: No Maneja apuntadores, maneja matrices
: Es de tipo Applet
: El tamaño de la matriz es 8*8
Autor : Luis Felipe Wanumen luchofelipe2000@yahoo.com
Revision : No hay revisiones por el momento.
Agradecimientos : No hay
D.Historico : 12/05/2003
******************************************************************/
import java.awt.*;
import java.applet.*;
{
g.drawString("Hello World", 20, 20);
}
0 -1 -2 -3 -4 -5 -6 -7
1 0 -1 -2 -3 -4 -5 -6
2 3 0 -1 -2 -3 -4 -5
3 4 5 0 -1 -2 -3 -4
4 5 6 7 0 -1 -2 -3
5 6 7 8 9 0 -1 -2
6 7 8 9 1 1 0 -1
0 1
7 8 9 1 1 1 1 0
0 1 2 3
Con todos los ejercicio hechos hasta el momento no es difícil entender que la fórmula
para identificar que un elemento se encuentre en una triangular o en una diagonal
específica, está dada por la siguiente tabla:
En donde se encuentra Forma para identificarlo con los indices de columna y fila
En la triangular superior Fila – columna < 0
En la triangular inferior Fila – columna > 0
En la diagonal ascendente Fila + Columna = máximo valor de indice de la matriz
cuadrada
En la diagonal descendente Fila = columna
/******************************************************************
Nombre : matriz5.java
Descripcion : El siguiente programa muestra como se identifica
: las diagonales de una matriz.
: También se identifican los triangulos superior e
: e inferior formados por dichas diagonales
Tipo: : El programa utiliza AWT de la clase APPLET
: No Maneja apuntadores, maneja matrices
: Es de tipo Applet
: El tamaño de la matriz es 8*8
Autor : Luis Felipe Wanumen luchofelipe2000@yahoo.com
Revision : No hay revisiones por el momento.
Agradecimientos : No hay
D.Historico : 12/05/2003
******************************************************************/
import java.awt.*;
import java.applet.*;
if(i>j){
textos[i][j].setBackground(Color.green);
textos[i][j].setForeground(Color.black);
}
if(i<j){
textos[i][j].setBackground(Color.blue);
textos[i][j].setForeground(Color.white);
}
if(i==j){
textos[i][j].setBackground(Color.red);
textos[i][j].setForeground(Color.white);
}
if( (i+j)==7){
textos[i][j].setBackground(Color.cyan);
textos[i][j].setForeground(Color.black);
}
textos[i][j].setText(""+(i-j));
}
}
}
}
0 -1 -2 -3 -4 -5 -6 -7
1 0 -1 -2 -3 -4 -5 -6
2 3 0 -1 -2 -3 -4 -5
3 4 5 0 -1 -2 -3 -4
4 5 6 7 0 -1 -2 -3
5 6 7 8 9 0 -1 -2
6 7 8 9 1 1 0 -1
0 1
7 8 9 1 1 1 1 0
0 1 2 3
La idea de esta parte del libro es ir dando elementos para desarrollar completamente el
problemas de un buscaminas, pero para poder hacerlo, es necesario que primero se
haga el ejercicio de colocar 15 minas en una matriz. La forma de hacerlo, es definiento
dos vectores denominados vectx[] y vecty[], los cuales contendrán 15 posiciones
vistas como parejas; es decir:
Posición 0 = matriz[vectx[0]][vecty[0]]
Posición 1 = matriz[vectx[1]][vecty[1]]
Posición 2 = matriz[vectx[2]][vecty[2]]
Posición 3 = matriz[vectx[3]][vecty[3]]
Posición 4 = matriz[vectx[4]][vecty[4]]
Posición 5 = matriz[vectx[5]][vecty[5]]
Posición 6 = matriz[vectx[6]][vecty[6]]
Posición 7 = matriz[vectx[7]][vecty[7]]
Posición 8 = matriz[vectx[8]][vecty[8]]
Posición 9 = matriz[vectx[9]][vecty[9]]
Posición 10 = matriz[vectx[10]][vecty[10]]
Posición 11 = matriz[vectx[11]][vecty[11]]
Posición 12 = matriz[vectx[12]][vecty[12]]
Posición 13 = matriz[vectx[13]][vecty[13]]
Posición 14 = matriz[vectx[14]][vecty[14]]
Posición 15 = matriz[vectx[15]][vecty[15]]
Y en dichas posiciones de la matriz estarán las minas. Ahora bien, por medio de unas
instrucciones, se garantiza que siempre se van a colocar 15 minas, es decir en 15
posiciones de la matriz estará el número “1” y en el resto, estará el número “0”. Las
instrucciones mencionadas son las siguientes:
for(int x=0;x<15;x++)
{
minasx = (int)(Math.random()*10);
minasy = (int)(Math.random()*10);
if(minas[minasx][minasy] != 1)
{
minas[minasx][minasy] = 1;
vecx[x] = minasx;
vecy[x] = minasy;
}
else x--;
}
/******************************************************************
Nombre : matriz6.java
Descripcion : El siguiente programa muestra como se colocan
: quince unos en diferentes posiciones de una matriz
: para despues mostrarlos gráficamente
: Lo cual será util para desarrollar un buscaminas
Tipo: : El programa utiliza AWT de la clase APPLET
: No Maneja apuntadores, maneja matrices
: Es de tipo Applet
: El tamaño de la matriz es 10*10
Autor : Luis Felipe Wanumen luchofelipe2000@yahoo.com
Revision : No hay revisiones por el momento.
Agradecimientos : No hay
D.Historico : 26/05/2003
******************************************************************/
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
for(int x=0;x<15;x++)
{
minasx = (int)(Math.random()*10);
minasy = (int)(Math.random()*10);
if(minas[minasx][minasy] != 1)
{
minas[minasx][minasy] = 1;
vecx[x] = minasx;
vecy[x] = minasy;
}
else x--;
}
add(comandos);
comandos.setBounds(0,0,100,30);
comandos.add(boton1);
boton1.addActionListener(new aleatorio());
for(int i = 0; i<10; i++){
for(int j = 0; j<10; j++){
paneles[i][j] = new Panel();
principal.add(paneles[i][j]);
// paneles[i][j].setBackground(Color.green);
} // Cierra for interno
} // Cierra for externo
En donde los paneles de color rojo son los paneles que indican que existe una mina en
dicha posición.
Ahora intentaremos colocar en las posiciones alrededor de las minas los números
correpondientes al número de minas que debe tener cada posición. Es decir que se va a
colocar un valor para las posiciones cuya parte izquierda, derecha, inferior, superior o
diagonal en cualquier sentido tenga una mina. El programa mejorado con respecto al
anterior es pues, el siguiente:
/******************************************************************
Nombre : matriz7.java
Descripcion : El siguiente programa muestra como se colocan
: valores en las posiciones cercanas a las minas
: del anterior ejercicio
: Es el mismo programa anterior, pero mejorado
Tipo: : El programa utiliza AWT de la clase APPLET
: No Maneja apuntadores, maneja matrices
: Es de tipo Applet
: El tamaño de la matriz es 10*10
Autor : Luis Felipe Wanumen luchofelipe2000@yahoo.com
Revision : No hay revisiones por el momento.
Agradecimientos : No hay
D.Historico : 26/05/2003
******************************************************************/
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
vecy[x] = minasy;
}
else x--;
}
numeros[i][j]++;
letreros[i][j].setText(""+numeros[i][j]);
}
// Si hay una mina abajo a la derecha
if(i<9 && j<9 && minas[i+1][j+1]==1 && minas[i][j]!= 1){
numeros[i][j]++;
letreros[i][j].setText(""+numeros[i][j]);
}
} // Cierra for interno
} // Cierra for externo
1 M 2 2 1 1
1 1 2 2 M 3 M 1
1 M 1 1 2 M 2 1
1 2 2 1 1 1 2 1 1
2 4 M 2 1 M 1
M M M 2 1 1 2 1 1
2 3 2 1 1 M 2 1 1 1
1 2 M 2 2 M
1 1 1 1 2 M 2 1
1 M 1 1 1 1
Ahora bien, después de haber analizado los dos anteriores programas, vemos que es
cuestión de ocultar las minas y de agregar una variable global que se llame
“comienzo”, la cual cuando tenga el valor de “1” es porque es el comienzo del
programa y cuando tenga el valor de “0”, es porque es el fin del programa. Entonces
como se verá en el siguiente programa, lo que se hace es añadir a la función “paint()”,
una pregunta para indagar por el valor de esta variable y si es el comienzo se juega. En
caso de ser el final, se buscan las minas y se muestran (con setVisible(true)),
utilizando para ello la matriz denominada “minas[][]”.
for(int x=0;x<10;x++){
for(int y=0;y<10;y++){
if(minas[x][y] == 1){
paneles[x][y].setBackground(Color.red);
letreros[x][y].setVisible(true);
//paneles[x][y].setBackground(Color.yellow);
}
} // Cierra for interno
} // Cierra for externo
También se agrega una función mouseDown, con la cual se pregunta en que panel se
hace clic y se compara si en dicha posición hay o no hay mina, si no hay mina, se va
descrubriendo el Label, tal como se muestra en el siguiente fragmento de código:
Y en caso de ser una mina, se termina el juego colocando la variable comienzo en cero
y volviendo a llamar a la función “paint()”. Recordemos que cuando se llame a la
función “paint()” y la variable comienzo valga cero sencillamente se descubren todas
las minas.
Bueno, pero ahora para lograr un entendimiento global del programa veamos, el
programa completo que implementa un buscaminas:
/******************************************************************
Nombre : matriz8.java
Descripcion : El siguiente programa muestra como se implementa
: en su totalidad un buscaminas. Es la mejora a los
: dos ejercicios anteriores
Tipo: : El programa utiliza AWT de la clase APPLET
: No Maneja apuntadores, maneja matrices
: Es de tipo Applet
: El tamaño de la matriz es 10*10
Autor : Luis Felipe Wanumen luchofelipe2000@yahoo.com
Revision : No hay revisiones por el momento.
Agradecimientos : No hay
D.Historico : 26/05/2003
******************************************************************/
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
//paneles[x][y].setBackground(Color.yellow);
}
} // Cierra for interno
} // Cierra for externo
} // Cierra si comienzo NO ES 1 "SI ES FINAL DE JUEGO"
} // Cierra funcion paint()
visibles[i][j] = 0;
} // Cierra for interno
} // Cierra for externo
repaint();
} // Cierra if
// repaint();
} // Cierra actionPerformed
} // Cierra aleatorio()
}
El siguiente programa, funciona con algunos valores, la verdad no funciona con todos
los valores, por cuanto no se tuvo en cuenta el caso en el que al hacer la resta se
disminuye un valor. Es decir cubre el caso: 82-75 = 7 (El resultado tiene una cifra
menos que los operandos), pero no cubre los casos en los cuales el resultado tiene el
mismo número de digitos que los operandos. Por ejemplo para los siguientes casos
funciona:
44389 / 452
443892 / 45
369852 /587
Y para otros valores no funciona. Pero bueno, usted se estará preguntando porque en
un libro como este aparece un ejercicio que no funciona con todos los valores. La
respuesta es muy sencilla: ¡Es un ejercicio para que usted amigo lector practique con
las matrices y con la programación en Java!.
/******************************************************************
Nombre : matriz9.java
Descripcion : Programa que enseña a dividir
: Con algunos valores no funciona
: Si el problema sobrepasa el No de paneles
: produce un error de desbordamiento.
Tipo: : El programa utiliza AWT de la clase APPLET
: No Maneja apuntadores, maneja matrices
: Es de tipo Applet
: El tamaño de la matriz es 11*11
Autor : Luis Felipe Wanumen luchofelipe2000@yahoo.com
Revision : No hay revisiones por el momento.
Agradecimientos : No hay
D.Historico : 27/05/2003
******************************************************************/
import java.awt.*;
import java.applet.*;
import java.util.Vector;
import java.awt.event.*;
}
int oper_resta1 = Integer.parseInt(cadena);
int oper_resta2 = Integer.parseInt(cadena1);
int subtotal = oper_resta1 - oper_resta2;
System.out.println(subtotal);
String sub_resta = new String(""+subtotal);
} // Cierra if comienzo == 2
operando1.setBounds(0,30,90,30);
pregunta.add(denominador);
pregunta.add(operando2);
denominador.setBounds(100,0,90,30);
operando2.setBounds(100,30,90,30);
pregunta.add(boton1);
boton1.setBounds(200,20,90,30);
boton1.addActionListener(this);
add(respuesta);
GridLayout grilla = new GridLayout(11,11,2,2);
respuesta.setBounds(0,60,300,290);
respuesta.setBackground(Color.cyan);
respuesta.setLayout(grilla);
for(int i = 0; i<11; i++){
for(int j = 0; j<11; j++){
textos1[i][j] = new TextField("X");
respuesta.add(textos1[i][j]);
numeros[i][j] = -1;
} // Cierra for interno
} // Cierra for externo
} // Cierra funcion init()
textos1[1][n+6].setText(aux.trim());
numeros[1][n+6] = Integer.parseInt(aux);
System.out.println(""+aux );
System.out.println("Bien dentro"+numeros[1][n+6]);
}
int columna = 0;
int longitud = 0;
int pos_cociente = 0;
int valor_cociente = 0;
Suponga un tablero de ajedrez de ocho por ocho como es lo común. ¿Se acuerda como
se mueve el caballo en un tablero de ajedrez?, pues bien, de lo que se trata es de hacer
la suposición que en el tablero de ajedrez, solamente existe un caballito y que dicho
caballito debe desplazarse por todo el tablero de ajedrez, recorriendo las 64 posiciones
del mismo, sin repetir posición. A continuación se muestra una solución a dicho
problema en el cual la posición inicial está marcada con el número uno (1) y la
posición siguiente que ocupa el mismo caballito es la indicada por el número dos (2),
y así sucesivamente. Veamos pues el cuadro:
37 56 25 2 27 40 15 4
24 1 38 57 14 3 28 41
55 36 13 26 39 58 5 16
12 23 64 59 50 47 42 29
35 54 49 46 63 60 17 6
22 11 62 51 48 45 30 43
53 34 9 20 61 32 7 18
10 21 52 33 8 19 44 31
La implementación es la siguiente.
/******************************************************************
Nombre : caballito.java
Descripcion : El siguiente programa implementa el juego
: del movimiento del caballo en el ajedrez
: de tal suerte que ocupe todas las casillas
Tipo: : El programa utiliza java.awt.* y java.applet.*
: No Maneja apuntadores, no maneja matrices
: Es de tipo Applet
: NO ES RECURSIVO
Autor : Luis Felipe Wanumen luchofelipe2000@yahoo.com
Revision : No hay revisiones por el momento.
Agradecimientos : No hay
D.Historico : 28/05/2003
******************************************************************/
import java.awt.*;
import java.applet.*;
public void valida(int fil, int col, int par1, int par2){
if(fil<8 && fil>=0 && col<8 && col>=0 && par1 == par2){
if(matriz[fil][col]==0){
matriz[fil][col] = par1;
System.out.println("fil="+fil+" col = "+col+ " par1 ="+par1);
fila = fil;
columna = col;
contador++;
} // Cierra if interno
} // Cierra if externo
} // Cierra funcion valida
1 2 3 5 1 1 2 40
1 4 7 2 4 7
3 5 1 2 3 4 2 15
6 1 2 5 8 1
2 1 5 5 1 2 3 28
3 0 3 8 3 6 9
5 3 6 6 4 5 1 3
0 5 4 1 2 5 6
9 2 5 5 5 6 2 44
2 7 4 9 2 9
3 4 6 6 5 4 4 17
4 9 0 3 6 3
2 8 4 3 1 6 4 30
1 7 2 9 5
4 3 2 7 4 3 1 5
8 3 0 6 1 8
Bueno, se estará preguntando que este ejercicio soluciona el problema de otra forma,
la pregunta es: ¿existen muchas formas de solucionar el problema?. La respuesta es:
¡Si!, pues todo depende de la posición en la que empiece el movimiento del caballo en
el ajedrez. Surge entonces otra pregunta: ¿qué regla sigue el caballo para moverse por
el ajedrez?. La respuesta no es tan rápida e inmediata como se piensa, pues el
movimiento del caballito en el ajedrez, depende de la posición en la que se encuentre o
mejor dicho de la región del ajedrez en la que se encuentre actualmente el caballo.
Supongamos el caballo que se encuentra donde está la letra “X” en las casillas
blancas, las celdas sombreadas indican el número de fila o columna respectiva
En dicho tablero el caballo ubicado en esta posición se encuentra en una región que
cumple la siguiente condición: Fila <= Columna, con lo cual los movimientos que
puede hacer el caballo se evaluan en un orden especifico de acuerdo al primero que
sea válido y ese se ejecutará. El orden de los movimientos a evaluar para un caballo
8 1
Region A
7 2
caballit
o
6 3
5 4
Y para las veces en que el caballo se encuentre en la diagonal inferior del tablero de
ajedrez, se debe seguir la evaluación de posibles movimientos en el orden mostrado
por la siguiente figura:
4 5
3 6
Region B
caballit
o
2 7
1 8
Recordemos que los movimientos se evalúan en este orden, y tan pronto se ejecuta un
movimiento por ser valido (no haber terminado el juego y estar la siguiente posición
sin pisar), los demás movimientos ya no se ejecutan y de acuerdo a la siguiente
posición se vuelve a mirar en que posición del ajedrez se encuentra el caballo y se
procede a continuar evaluando los movimientos según el caso.
Bueno, pero para llegar a ser un poco más didáctico analicemos la siguiente posición
que debe tomar el caballo que venimos trabajando:
Retroceder dos filas y avanzar dos columnas, no lo puede hacer debido a que se saldría
del tablero. El siguiente movimiento a evaluar es retroceder una fila y avanzar dos
columnas y este movimiento si lo puede hacer. A continuación se muestra la posición
resultado de hacer dicho movimiento y se marca con la letra “Y”. Veamos:
Dado que el contador de nuestro programa comenzó con cero, es necesario hacer 64
movimientos y el uno se coloca en la posición Y, lo cual produce nuestro resultado:
Bien, hay algo muy importante que resaltar con respecto al problema del movimiento
del caballo en el ajedrez, y es que no siempre utilizando el mismo algoritmo descrito
anteriormente se llega a una respuesta completa, es decir que cubra todas las casillas
del ajedrez. Osea que el algoritmo descrito funciona solo si la posición inicial está
entre la siguiente lista de posiciones:
(1,2), (2,3), (5,4), (6,5) y (6,7), donde las parejas (x,y) indican fila “x” y columna “y”.
Ahora bien, sería necesario solucionar estos pequeños problemas para lograr que el
juego se pueda desarrollar independientemente de la posición inicial en la que se
comience el juego. La implementación de este juego para que funcione desde
cualquier posición en la que inicie el juego es la siguiente:
/******************************************************************
Nombre : caballito1.java
Descripcion : El siguiente programa implementa el juego
: del movimiento del caballo en el ajedrez
: de tal suerte que ocupe todas las casillas
: Es la mejora a la anterior implementacion
: Independiente de la posicion inicial de juego
Tipo: : El programa utiliza java.awt.* y java.applet.*
: No Maneja apuntadores, no maneja matrices
: Es de tipo Applet
: NO ES RECURSIVO
Autor : Luis Felipe Wanumen luchofelipe2000@yahoo.com
Revision : No hay revisiones por el momento.
Agradecimientos : No hay
D.Historico : 28/05/2003
******************************************************************/
import java.awt.*;
import java.applet.*;
matriz1[filis][columnis] = contar;
System.out.println("LF matriz1["+filis+"]
["+columnis+"]="+matriz1[filis][columnis]);
if(filis>columnis)
{
if(mover(filis+2,columnis-1,contar+1)||
mover(filis+1,columnis-2,contar+1)||mover(filis-1,columnis-
2,contar+1)||mover(filis-2,columnis-1,contar+1)||mover(filis-
2,columnis+1,contar+1)||mover(filis-1,columnis+2,contar+1) ||
mover(filis+1,columnis+2,contar+1) ||
mover(filis+2,columnis+1,contar+1))
return true;
} // Cierra if(filis>columnis)
else{
if(mover(filis-2,columnis+1,contar+1)||mover(filis-
1,columnis+2,contar+1)||mover(filis+1,columnis+2,contar+1)||
mover(filis+2,columnis+1,contar+1)||
mover(filis+2,columnis-1,contar+1)||mover(filis+1,columnis-
2,contar+1)||mover(filis-1,columnis-2,contar+1)||mover(filis-
2,columnis-1,contar+1))
return true;
} // Cierra else if(filis>columnis)
return false;
} // cont<=64
else
return true;
} // Cierra mover
Como podrá apreciar estimado lector / estudiante, este ejercicio fue desarrollado
implementando la recursividad y funciona para cualquier posición inicial.
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
p1.add(t1[i][j]);
String m_a = t1[i][j].getText().trim();
A[i][j] = Integer.parseInt(m_a);
B[j][i] = A[i][j];
}
}
for(int x = 0; x<4; x++){
for(int y = 0; y<4; y++){
t2[x][y] = new TextField(" "+x +" " +y);
p2.add(t2[x][y]);
}
} // Cierra for externo
} // Cierra init
} // Cierra applet
Tengamos en cuenta que en la función INIT() del programa anterior se colocan los
objetos de interfaz y esto se hace con el fin de lograr que los objetos aparezcan en el
preciso momento en el que se carga el applet, debido a que la función INIT() es la
primera que se ejecuta cuando se carga el applet.
De otra parte es bueno que se tenga en cuenta que sin importar lo que
el usuario digite en cualquiera de las cajas de texto de la parte
izquierda, en todos los casos siempre será tomado dicho valor como un
valor tipo String, lo cual obliga lógicamente a que sea convertido a
entero mediante las instrucciónes:
1 2 3
4 0 1
2 2 1
0 0 1
1 4 2 0
2 0 2 0
3 1 1 1
Para la matriz A, se tiene Para la matriz A, se tiene Para la matriz A, se tienePara la matriz A, se tiene
que varía la columna de que varía la columna de que varía la columna de que varía la columna de
la primera matriz y la primera matriz y la primera matriz y la primera matriz y
permanece la fila en 0. permanece la fila en 0. permanece la fila en 0. permanece la fila en 0.
Para la matriz B, se tiene Para la matriz B, se tiene Para la matriz B, se tienePara la matriz B, se tiene
que permanece en todo que permanece en todo que permanece en todo que permanece en todo
momento en la columna momento en la columna momento en la columna momento en la columna
0 y la fila es la que varia 1 y la fila es la que varia 2 y la fila es la que varia
3 y la fila es la que varia
Para la matriz A, se tiene Para la matriz A, se tiene Para la matriz A, se Para la matriz A, se tiene
que varía la columna de que varía la columna de tiene que varía la que varía la columna de
la primera matriz y la primera matriz y la primera matriz y
permanece la fila en 1. permanece la fila en 1.
columna de la permanece la fila en 1.
Para la matriz B, se tiene Para la matriz B, se tiene primera matriz y Para la matriz B, se tiene
que permanece en todo que permanece en todo permanece la fila en que permanece en todo
momento en la columna momento en la columna 1. momento en la columna
0 y la fila es la que varia 1 y la fila es la que variaPara la matriz B, se tiene 3 y la fila es la que varia
que permanece en todo
momento en la columna
2 y la fila es la que varia
Para la matriz A, se Para la matriz A, se tiene Para la matriz A, se tiene Para la matriz A, se tiene
tiene que varía la que varía la columna de que varía la columna de que varía la columna de
la primera matriz y la primera matriz y la primera matriz y
columna de la permanece la fila en 2. permanece la fila en 2. permanece la fila en 2.
primera matriz y Para la matriz B, se tiene Para la matriz B, se tiene Para la matriz B, se tiene
permanece la fila en que permanece en todo que permanece en todo que permanece en todo
2. momento en la columna momento en la columna momento en la columna
Para la matriz B, se tiene 0 y la fila es la que varia 2 y la fila es la que varia 3 y la fila es la que varia
que permanece en todo
momento en la columna
0 y la fila es la que varia
Para la matriz A, se tiene Para la matriz A, se tiene Para la matriz A, se Para la matriz A, se tiene
que varía la columna de que varía la columna de tiene que varía la que varía la columna de
la primera matriz y la primera matriz y la primera matriz y
permanece la fila en 3. permanece la fila en 3.
columna de la permanece la fila en 3.
Para la matriz B, se tiene Para la matriz B, se tiene primera matriz y Para la matriz B, se tiene
que permanece en todo que permanece en todo permanece la fila en que permanece en todo
momento en la columna momento en la columna 3. momento en la columna
0 y la fila es la que varia 1 y la fila es la que varia Para la matriz B, se tiene 3 y la fila es la que varia
que permanece en todo
momento en la columna
2 y la fila es la que varia
Con el fin de lograr que el amigo lector / estudiante profundice sobre las matrices a
continuación se presentan los ejercicios que se deben desarrollar para lograr un
completo cubrimiento del tema de arreglos bidimensionales:
Recordemos que una matriz por ejemplo de tamaño 6*6 tiene el siguiente aspecto:
En la diagonal descendente
Fila = columna
En la triangular inferior
Fila - columna > 0
Matriz A Matriz B
3 65
76 28
43 89
25 86
8 7
5 55
7 67
68 3
29 46
27 36
58 25
9 5
4 53
8 18
2 53
8 35
3 4
7 86
8 86
5 98
8 35
7 19
43 38
92 53
86 64
36 36
8 75
35 64
59 83
54 9
8 57
53 25
85 35
37 71
62 87
79 69
53 4
5 43
34 35
54 53
35 89
87 68
23 87
25 5
43 93
68 87
87 23
64 34
4 72
89 64
93 24
72 54
56 64
46 74
87 65
64 55
46 87
35 99
99 33
74 45
64 46
85 35
33 85
65 35
86 56
35 46
45 64
55 86
2.1. VERSIÓN 1
1 1 1 1 1 1 1 1 1 1 1 1
1
1 2 2 2 2 2 2 2 2 2 2 2
1
1 2 3 3 3 3 3 3 3 3 3 2
1
1 2 3 4 4 4 4 4 4 4 3 2
1
1 2 3 4 5 5 5 5 5 4 3 2
1
1 2 3 4 5 6 6 6 5 4 3 2
1
1 2 3 4 5 6 7 6 5 4 3 2
1
1 2 3 4 5 6 6 6 5 4 3 2
1
1 2 3 4 5 5 5 5 5 4 3 2
1
1 2 3 4 4 4 4 4 4 4 3 2
1
1 2 3 3 3 3 3 3 3 3 3 2
1
1 2 2 2 2 2 2 2 2 2 2 2
1
1 1 1 1 1 1 1 1 1 1 1 1
1
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
else{
matrix[x][i]=total;
System.out.println("matrixxz["+x+"]["+i+"]= "+ matrix[x]
[i]);
}
} // Cierra else if(j<total)
} // Cierra for(int x=0;x<N;x++)
System.out.println("re");
} // Cierra for externo
for(int i=0;i<13;i++){
for(int j=0;j<13;j++){
System.out.println("matriz["+i+"]["+j+"]= "+ matrix[i][j]);
cad = cad + matrix[i][j];
cad = cad + "\t";
}
cad = cad + "\n";
}
ta.setText(cad);
} // Cierra actionPerformed
} // Cierra clase MyApp
2.2. VERSIÓN 2
1 0 0 0 0 0 0
0 1 0 0 0 0 0
0 0 1 0 0 0 0
0 0 0 1 0 0 0
0 0 0 0 1 0 0
0 0 0 0 0 1 0
0 0 0 0 0 0 1
Fila = Columna
0 0 0 0 0 0 1
0 0 0 0 0 1 0
0 0 0 0 1 0 0
0 0 0 1 0 0 0
0 0 1 0 0 0 0
0 1 0 0 0 0 0
1 0 0 0 0 0 0
0 0 0 0 0 0 1
0 0 0 0 0 1 0
0 0 0 0 1 0 0
0 0 0 1 0 0 0
0 0 1 0 0 0 0
0 1 0 0 0 0 0
1 0 0 0 0 0 0
import java.awt.*;
import java.applet.*;
uno, debido a que se debe comenzar con el número “1”, pero por la
naturaleza de las matrices en los diversos lenguajes de programación,
la primera posición es la posición “0”. También es bueno notar que se
pinta dicha caja de texto, pero se muestran todas las cajas de texto.
Obviamente las que no cumplen la condición no se les asigna número y
tampoco se les coloca color de fondo, con lo cual el resultado
producido por el anterior programa es similar al siguiente:
1 1 1 1 1 1 1 1 1 1 1 1 1
0 2 2 2 2 2 2 2 2 2 2 2 0
0 0 3 3 3 3 3 3 3 3 3 0 0
0 0 0 4 4 4 4 4 4 4 0 0 0
0 0 0 0 5 5 5 5 5 0 0 0 0
0 0 0 0 0 6 6 6 0 0 0 0 0
0 0 0 0 0 0 7 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 2 1
0 0 0 0 0 0 0 0 0 0 3 2 1
0 0 0 0 0 0 0 0 0 4 3 2 1
0 0 0 0 0 0 0 0 5 4 3 2 1
0 0 0 0 0 0 0 6 5 4 3 2 1
0 0 0 0 0 0 7 6 5 4 3 2 1
0 0 0 0 0 0 0 6 5 4 3 2 1
0 0 0 0 0 0 0 0 5 4 3 2 1
0 0 0 0 0 0 0 0 0 4 3 2 1
0 0 0 0 0 0 0 0 0 0 3 2 1
0 0 0 0 0 0 0 0 0 0 0 2 1
0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 7 0 0 0 0 0 0
0 0 0 0 0 6 6 6 0 0 0 0 0
0 0 0 0 5 5 5 5 5 0 0 0 0
0 0 0 4 4 4 4 4 4 4 0 0 0
0 0 3 3 3 3 3 3 3 3 3 0 0
0 2 2 2 2 2 2 2 2 2 2 2 0
1 1 1 1 1 1 1 1 1 1 1 1 1
import java.awt.*;
import java.applet.*;
setLayout(grilla);
for(int i = 0; i<13; i++){
for(int j = 0; j<13; j++){
matriz[i][j] = new TextField();
add(matriz[i][j]);
2.3. VERSIÓN 3
Fila = Columna
Es decir que dentro del ciclo for, la fila en la que comienza debe
ser la columna en la que se encuentra ubicado. La columna está dada
por la variable “izq”, es decir que la fila en la que comienza el
ciclo for debe ser también la que tiene la variable “izq” y dado que
la variable “der” va disminuyendo conforme aumenta la variable “izq”,
está tendrá el límite hasta el cual se va a recorrer verticalmente el
vector.
Para no ir más lejos con las explicaciones, podemos decir que las
siguientes instrucciones:
int izq = 0;
int der = N;
while (izq < der){
for(int i=izq;i<der;i++){
Espi[i][izq] = izq+1;
}
izq++;
der--;
}
1 0 0 0 0 0 0 0 0 0 0 0 0
1 2 0 0 0 0 0 0 0 0 0 0 0
1 2 3 0 0 0 0 0 0 0 0 0 0
1 2 3 4 0 0 0 0 0 0 0 0 0
1 2 3 4 5 0 0 0 0 0 0 0 0
1 2 3 4 5 6 0 0 0 0 0 0 0
1 2 3 4 5 6 7 0 0 0 0 0 0
1 2 3 4 5 6 0 0 0 0 0 0 0
1 2 3 4 5 0 0 0 0 0 0 0 0
1 2 3 4 0 0 0 0 0 0 0 0 0
1 2 3 0 0 0 0 0 0 0 0 0 0
1 2 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0
int izq = 0;
int der = N;
while (izq < der){
for(int i=izq;i<der;i++){
Espi[izq][i] = izq+1;
}
izq++;
der--;
}
1 1 1 1 1 1 1 1 1 1 1 1 1
0 2 2 2 2 2 2 2 2 2 2 2 0
0 0 3 3 3 3 3 3 3 3 3 0 0
0 0 0 4 4 4 4 4 4 4 0 0 0
0 0 0 0 5 5 5 5 5 0 0 0 0
0 0 0 0 0 6 6 6 0 0 0 0 0
0 0 0 0 0 0 7 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
Las instrucciones:
int izq = 0;
int der = N;
while (izq < der){
for(int i=izq;i<der;i++){
Espi[N-i-1][N-izq-1] = izq+1;
}
izq++;
der--;
}
0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 2 1
0 0 0 0 0 0 0 0 0 0 3 2 1
0 0 0 0 0 0 0 0 0 4 3 2 1
0 0 0 0 0 0 0 0 5 4 3 2 1
0 0 0 0 0 0 0 6 5 4 3 2 1
0 0 0 0 0 0 7 6 5 4 3 2 1
0 0 0 0 0 0 0 6 5 4 3 2 1
0 0 0 0 0 0 0 0 5 4 3 2 1
0 0 0 0 0 0 0 0 0 4 3 2 1
0 0 0 0 0 0 0 0 0 0 3 2 1
0 0 0 0 0 0 0 0 0 0 0 2 1
0 0 0 0 0 0 0 0 0 0 0 0 1
int izq = 0;
int der = N;
while (izq < der){
for(int i=izq;i<der;i++){
Espi[N-izq-1][N-i-1] = izq+1;
}
izq++;
der--;
}
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 7 0 0 0 0 0 0
0 0 0 0 0 6 6 6 0 0 0 0 0
0 0 0 0 5 5 5 5 5 0 0 0 0
0 0 0 4 4 4 4 4 4 4 0 0 0
0 0 3 3 3 3 3 3 3 3 3 0 0
0 2 2 2 2 2 2 2 2 2 2 2 0
1 1 1 1 1 1 1 1 1 1 1 1 1
int izq = 0;
int der = N;
while (izq < der){
for(int i=izq;i<der;i++){
//Triangulo de la izquierda
Espi[i][izq] = izq+1;
// Triangulo de arriba
Espi[izq][i] = izq+1;
// Triangulo de abajo
Espi[N-izq-1][N-i-1] = izq+1;
// Triangulo de la derecha
Espi[N-i-1][N-izq-1] = izq+1;
}//Cierra for(int i=izq;i<der;i++)
izq++;
der--;
} // Cierra while
y produciría el resultado:
1 1 1 1 1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 2 2 2 2 1
1 2 3 3 3 3 3 3 3 3 3 2 1
1 2 3 4 4 4 4 4 4 4 3 2 1
1 2 3 4 5 5 5 5 5 4 3 2 1
1 2 3 4 5 6 6 6 5 4 3 2 1
1 2 3 4 5 6 7 6 5 4 3 2 1
1 2 3 4 5 6 6 6 5 4 3 2 1
1 2 3 4 5 5 5 5 5 4 3 2 1
1 2 3 4 4 4 4 4 4 4 3 2 1
1 2 3 3 3 3 3 3 3 3 3 2 1
1 2 2 2 2 2 2 2 2 2 2 2 1
1 1 1 1 1 1 1 1 1 1 1 1 1
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
// Triangulo de la derecha
Espi[N-i-1][N-izq-1] = izq+1;
}//Cierra for(int i=izq;i<der;i++)
izq++;
der--;
} // Cierra while
TABLA DE CONTENIDO
Pais: Colombia
Enciclopedia Conociendo
Luis Felipe Wanumen Silva
Copyright Enero de 2004
ISBN En proceso de registro
Edición autorizada para venta en Colombia
Impreso en Colombia – Printed in Colombia
Derechos Reservados
Los derechos de publicación en cualquier lengua de
cualquier tomo de la Enciclopedia Conociendo, no han
sido transferidos a editor alguno. El editor solamente
está autorizado para imprimir 1000 ejemplares y
vendérselos únicamente al autor.
NOTA IMPORTANTE
El autor no será jurídicamente responsable por daños y
perjuicios causados en datos, archivos, información o
hardware por el uso directo o indirecto ya sea correcto
o incorrecto del presente material.
Impresión
Editorial Kimpres Ltda.
Tels: 260 1680 – 4 13 6884