Nombre: cuadrado magico en dev-c++
Descripción:
Aqui les mando el codigo del cuadrado magico que fue tomado en un parcial de la universidad en la que estudio, espero que les sirva ps pdt: no se si es el mas eficiente pero ahi les va ps
URL: http://www.mygnet.net/codigos/cplusplus/matricesyvectores/cuadrado_magico_en_devc_plus_plus.1127
Código Fuente:
// para lo ke no saben ke es el cubo magico aki les va la documentacion
//se trata de hacer un programa en el cual el numero 1 se pone en el medio del
//del "n" osea n/2 entonces lñuego se comienz el siguiente numero que seria dos
//se pone una fila atras pero en la siguiente columna, si se dan cuanta cuando
//corren el programa el uno aparace en el medio(les recomiendo ke ingresen el #3)
//weno el dos apararece en la esquina derecha es kiere decir ke a subido una fila
//y avanzado una columna, entonces el mumero 3 sigue esa secuencia se sube una
//fila y se avanza una columna, con el numero 4 como la fila ke esta arriba y a
//la columna derecha ya esta ocupada con el numero 1 entonces se pone abajo del
//en este caso el 4 kedaria abajo del 3 y asi sucesivamente
#include<iostream>
using namespace std;
int main(){
int n,a=0,i=1,b,m[100][100];//bien aki declaramos un "n" que es el parametro
//ke se va a ingresar para saber el numero de casilleros ke se va a tener
//claro esta ke es una matriz
//i es un contador
//a es el elemento o indice del array
//b es el otro elemnto de la matriz
//m es la matriz de 100x100
cout<<"Ingrese dimension para la matriz = ";cin>>n;
cout<<"n";
b=n/2;//esto es para situar el mumero 1 en el centro
while(i<=(n*n)){//el n*n es por ejemplo si ingresa 3 la matriz sera de 3x3
//en ese caso el maximo numero seria 9 osea de 1 a 9 se completaria los
//casilleros
if(a<0)a=n-1;//a viene las columnas
if(b==n)b=0;//b viene a ser las filas
if(m[a][b]>=1&&m[a][b]<=(n*n)){
a=a+2;b--;
if (!(a<n))a=a-n;
if(b<0)b=n-1;
m[a][b]=i;
}
else {m[a][b]=i;}
--a;++b;
i++;
}
// el for ya solo es para mostrar cuando ya esta toda la operacion hecha
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<m[i][j]<<"tt";
}
cout<<endl;
}
cout<<"nn";
system("pause");
return 0;
}
/*bien explicando entonces como ya se sabe a es las filas b las columnas como saben
todo array comienza de cero en este caso si elegimos 3 el valdria uno pues el array
seria 0,1,2 entonces seria 1 el ke estria en el centro en este caso b ke seria la columna
a=0 inicialmente el valor de i tambien esta inicializado a 1 al entrar al while
los tres primeros if son falsos asi ke se pasa al else en el ke asigna a la matriz
m(a,b)=i en este caso se esta asignando a m(0,1)=1 y se decremneta a y se incrementa "b" e "i"
luego pasa de nuevo al while y como aun i es menor ke 9 entonces pasa al if en este caso si opera
este fi ya ke a vale -1 enotnces le asigna el valor de n-1 = 3-1 =2 entoncesm a=2
y b sigue valiendo 2 de la incrementacion anterior pues luego entra al tercer if
y se fija si m(2,2)>=1 y m(2,2)<=9 en este caso es falso asi ke se asigna el numero 2
a la posicion m(2,2) ke es la eskina derecha, y asi sucesivamente luego viene un problema
cuando la posicion donde debe ir un numero esta ocupada esto sucede cuando se llega al
numero 4 por ke en la posicion donde debe ir el numero 4 esta en 1 entocnes ahi entra en el
tercer if (cave mencionar ke el else es del tercer if), para ponerlo en la posision
ke esta debajo de numero ke se puso debajo weno la mayor parte del codigo ya esta explicado
solo keda esa parte es cosa de uds yo ya me tengo ke ir a clases nos vemos bye...
*** un programador es un mamifero nocturno de ojos rojos capaz de conversar conobjetos
inanimados**** cyberbyte*/