Buenas les dejo un ejercicio que hice para matar el tiempo, debo confesar que me ayude de lo que encontre de la wikipedia sobre el articulo del cuadrado mágico, Cuadrado Mágico. (http://es.wikipedia.org/wiki/Cuadrado_mágico#Cuadrados_m.C3.A1gicos_de_orden_impar_.28I.29)
Lo dejo por aquí tal vez alguien lo necesite, aunque lo hice más para tratar de aprender un poco sobre estos temas.
/*
Jueves 26 de Julio de 2012
Cuadrado Mágico
Escribir un programa que visualice su cuadrado mágico de orden impar n comprendido entre
3 y 11; el usuario debe elegir el valor de n. Un cuadrado mágico se compone de números enteros
comprendidos entre 1 y n. los números que figuran en cada fila, columna y diagonal son iguales.
Ejemplo:
8 1 6
3 5 7
4 9 2
*/
#include <stdio.h>
#include <stdlib.h>
#define MAX 11
void generar(int a[][MAX], int *max);
int main()
{
int n;
int arr[MAX][MAX];
generar(arr, &n);
return 0;
}
void generar(int a[][MAX], int *max){
int i, j, n, x;
int contador = 1;
puts("LECTURA DEL ARREGLO");
do{
printf("imprima el orden impar del cuadrado mágico: ");
if(n%2 != 0)
break;
else
printf("solo orden impar. \n");
}while(n%2 == 0);
for(i=0; i<n; i++)
for(j=0; j<n; j++)
a[i][j] = 0;
/*srand(time(NULL));
for(i=0; i<n; i++)
for(j=0; j<n; j++)
a[i][j] = rand() % (x);*/
x = n*n;
i=0;
j=n/2;
a[i][j] = 1;
while(contador < x){
if((i-1)>=0){
if((j+1)<(n)){
if(a[i-1][j+1]==0){
i -= 1;
j += 1;
contador += 1;
a[i][j] = contador;
}
else{
i += 1;
contador += 1;
a[i][j] = contador;
}
}
else{
if(a[i-1][0]==0){
i -= 1;
j = 0;
contador += 1;
a[i][j] = contador;
}
else{
i += 1;
contador += 1;
a[i][j] = contador;
}
}
}
else{
if(((j+1)<(n))){
if (a[n-1][j+1]==0){
i = n-1;
j += 1;
contador += 1;
a[i][j] = contador;
}
else{
i += 1;
contador += 1;
a[i][j] = contador;
}
}
else{
i += 1;
contador += 1;
a[i][j] = contador;
}
}
}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
}
}