Está en la página 1de 10

27-9-2015

CUADRO MAGICO
TALLER DE TOPICOS DE
PROGRAMACION

Manuel Flores Nava


ING. TICS
9NO SEMESTRE
PROFESORA:
LIC. ELIZABETH CUATECONTZI
CUAUTLE

Mane Rex
MICROSOFT

Descripcin del problema


Elaborar un programa en java donde se pueda crear cuadros mgicos de tamao n, el
nmero de tamao lo determina el usuario.
Definicin de la solucin
Obtener un cuadro mgico donde el usuario pueda ingresar el numero entero como el tamao
del cuadro que desea crear, pero ese nmero debe cumplir con la regla de que debe ser impar
o mltiplo de 4 sino el programa tendr que advertir que es incorrecto el numero ingresado
adems de ingresar el dato correcto sino tambin tendr que advertir del error
Diseo
Desarrollo de codificacin
Clase Principal del cuadro mgico donde realiza el ordenamiento de los nmeros segn su
casilla.

import javax.swing.*;
public class CuadradoMagico
{
static void lista(int[][]x,int y,int z)
{
String cad = "
Cuadro Magico!!!!!\n";
int k=0;
for (int i=0;i<z;i++)
{
for (int j=0;j<z;j++)
{
cad+="
"+x[i+(y/2)][j+(y/2)]+"";
}
cad+="\n";
}
ES.escribe(cad);
}
static void lista2(int[][]x)
{
String cad = "
Cuadro Magico!!!!!\n";
int k=0;
for (int i=0;i<x.length;i++)
{
for (int j=0;j<x[0].length;j++)
{
cad+="
"+x[i][j]+"";
}
cad+="\n";
}

ES.escribe(cad);
}
public static void main(String [] args )
{
int rep;
do{
int tam;
ES.escribe("Programa para hacer un cuadro
magico.");
tam = ES.entero("Ingresa el tamao del cuadro
magico, tamao = ");
while ((tam%4)!=0 || tam==1)
{
if((tam%2)!=0){
break;}
ES.escribe("Solo puedes crear cuadros
magicos impares, o multiplos de 4!!!");
tam = ES.entero("Ingresa el tamao del
cuadro magico, tamao = ");
}
int par,n,tamFic;
if ((tam%4)==0)
par = 1;//multiplo de 4 para 1
else
par = 2;//impar para 2

int [][]magico;
switch (par)
{
case 1:
magico = new int [tam][tam];int
cont=1;int finMag=tam/4;
for (int i=0;i<magico.length;i++)
for(int j=0;j<magico.length;j++)
{
magico[i][j]=cont;
cont = cont+1;
}
cont=1;
for(int i=(tam-1);i>=0;i--){
for(int j=(tam-1);j>=0;j--)
{
if (i >= (tam-finMag)){
if ((j >= finMag) && (j < (tam-

finMag))){
magico[i][j] = cont;
}
}
if ((i >= finMag) && (i < (tamfinMag))){
if ((j < finMag) || (j >= (tamfinMag))){
magico[i][j] = cont;
}
}
if (i < finMag){
if ((j >= finMag) && (j < (tamfinMag))){
magico[i][j] = cont;
}
}
cont=cont+1;
}
}
lista2(magico);
break;
case 2:
n = (tam/2)*2;
tamFic=tam*tam;
magico=new int[tam + n][tam + n];int
filaI; int colI;int centro=tam-1;int contador=0;
filaI=0;colI=centro;
while (contador<tamFic)
{
for (int i=0;i<tam;i++)
{
magico[filaI+i][colI+i]=contador +
1;
contador = contador +1;
}
filaI = filaI+1;
colI=colI-1;
}
filaI=0;colI=centro;
for (int i = 0; i < ((n/2)+1);i++){
for (int j = 0; j < ((i+1)*2); j = j +
2){
magico[filaI+tam][colI+j] =
magico[filaI][colI+j];

}
filaI = filaI+1;
colI=colI-1;
}
filaI=(tam+n-1);colI=centro;
for (int i = 0; i < ((n/2)+1);i++){
for (int j = 0; j < ((i+1)*2); j = j +
2){
magico[filaI-tam][colI+j] =
magico[filaI][colI+j];
}
filaI = filaI-1;
colI=colI-1;
}
filaI = centro;colI = tam+ n - 1;
for (int i = 0; i < ((n/2)+1);i++){
for (int j = 0; j < ((i+1)*2); j = j +
2){
magico[filaI+j][colI-tam] =
magico[filaI+j][colI];
}
filaI = filaI-1;;
colI=colI-1;
}
filaI=centro;colI=0;
for (int i = 0; i < ((n/2)+1);i++){
for (int j = 0; j < ((i+1)*2); j = j +
2){
magico[filaI+j][colI+tam] =
magico[filaI+j][colI];
}
filaI=filaI-1;
colI=colI+1;
}
lista(magico,n,tam);
break;
}

//REPETICION
String otro =
JOptionPane.showInputDialog("Quieres tratar una vez mas, [1
= si] [2 = no]");
rep = (int)Integer.parseInt(otro);
while (rep < 1 || rep > 2)
{
otro = JOptionPane.showInputDialog("Solo, [1

= si] [2 = no]");
rep = (int)Integer.parseInt(otro);
}
}while (rep == 1);

}
}
Mtodo de lectura para la creacin del cuadro mgico para facilitar el ingreso y ordenamiento
de los nmeros.

import javax.swing.*;
public class ES
{
static String leer(String cad)
{
return JOptionPane.showInputDialog(cad);
}
static void escribe(String cad)
{
JOptionPane.showMessageDialog(null,cad);
}
static double doble(String t)
{
double x=0;
boolean b = true;
do{
try{
x = (double)(Double.parseDouble(leer(t)));
b=true;
}
catch (Exception e)
{
escribe("Te dije numero"+e);
b = false;
}
}while (b == false);
return x;
}
static int entero (String y)
{
int x=0;
boolean b = true;
do{
try{
x = (int)(Integer.parseInt(leer(y)));

b=true;
}
catch (Exception e)
{
escribe("Te dije numero entero"+e);
b = false;
}
}while (!b);
return x;
}
}

Depuracin

y Pruebas

Muestra un cuadro de dialogo con un botn aceptar para crear un cuadro mgico

Se ingresa el tamao del cuadro en este caso es 3 y se da clic en el botn aceptar

Da como resultado un cuadro mgico de 3x3

Este otro ejemplo se realiza con un tamao de 7x7

Este es el resultado del tamao del cuadro de 7x7

A continuacin muestra otro cuadro de dialogo preguntado si quiero crear otro cuadro mgico
o no

En este caso se ingres el 1 refiriendo que si quiero crear otro cuadro mgico

Se da aceptar

Aqu realice una prueba para conocer cmo responde el programa ante estos datos se le
ingreso el nmero 6 que no cumple con la regla de ser un nmero impar o mltiplo de 4.

El resultado es que el programa me da un aviso de que el nmero que ingrese no cumple con
la regla.

Tambin ingrese un dato no permitido como lo que es una letrad

Da como resultado un aviso donde recomienda ingresar un nmero entero

Documentacin
La intencin principal es que este programa sea creador de cuadros mgicos ingresando datos
enteros cumpliendo con la regla de que el nmero sea impar o mltiplo de 4 para no tener
ninguna complicacin al momento de crear un cuadro mgico.
Lo importante de este programa es dar comodidad visual al usuario con un interfaz grfico
donde tenga la facilidad de entender el proceso de creacin de cuadros mgicos con algunos
avisos y recomendaciones para no tener ningn error en ello.
El programa fue construido a base del lenguaje en java ya que brinda la facilidad de poder
codificar compilar y correr el programa conociendo as sus errores y aciertos, asegurando de
que el programa cumple con lo establecido y requerimientos.

También podría gustarte