Ayuda con programa en C

n666n

Bovino de alcurnia
#1
buenas noches amigos bakunos...


se que aqui no se vienen a hacer tareas, pero no vengo a que me la hagan, sino, vengo a que me ayuden a encontrar mi error y a corregirlo...


el problema aqui es el siguiente:

el programa que voy a poner enseguida, nos da la resolucion de un cuadro magico, para el cual el usuario introduce la dimension cuadrada del mismo.

el problema es en la funcion que inserta los numeros en las celdas de la matriz. no rellena los numeros de acuerdo como se debe plantear el algoritmo, hice pruebas de escritorio, pero segun yo si estoy bien, pero bueno...

espero le puedan dar una ojeada y me digan en que esta mal


//autor: n666n

#include<stdio.h>
#include<stdlib.h>
#define N 15
int damet();
void valida(int m[N][N]);
void llenamagic(int t, int m[N][N]);
void imprimemagic(int t,int m[N][N]);
int main()
{
int tamano,magico[N][N];
tamano=damet();
valida(magico);
llenamagic(tamano,magico);
imprimemagic(tamano,magico);
system("pause");
return 0;
}
int damet()
{
int t;
do//se pide el numero al usuario
{
printf("\nEscribe el tamaño del cuadro magico [nota: el tamaño no puede pasar 15 y tiene que ser un numero impar mayor que uno ;) ] :\t ");
scanf("%d",&t);
}
while((t<3||t%2==0)||(t==1));//se valida que el numero que se introduce sea mayor o igual a 3 e impar
return t;
}
void valida(int m[N][N])//se llena todo el arreglo con 0's
{
int r,c;
for(r=0;r<N;r++)
{
for(c=0;c<N;c++)
{
m[r][c]=0;
}
}
return;
}
void llenamagic(int t, int m[N][N])//aqui se llena el cuadro con el algoritmo y es en esta funcion donde tengo problemas.
{
int r=0,c=t/2,num;
for(num=1;num<=(t*t);num++)
{
m[r][c]=num;
r--;
c++;
if((r==-1&&c==t)||(m[r][c]!=0))//para cuando los renglones y las columnas salen del tamaño del cuadro
{
c--;
r+=2;
}
else
{
if(r==-1&&c<t)//para cuando se sale de los renglones pero las columnas permanecen
r=t-1;
else
{
if(c==t&&r>=0)//para cuando las columnas se salen pero los renglones permanecen
c=0;
}
}
}
return;
}
void imprimemagic(int t, int m[N][N])//imprime el cuadro
{
int r,c;
printf("Tu cuadro magico de %d x %d queda asi ^^ :\n\n",t,t);
for(r=0;r<t;r++)
{
for(c=0;c<t;c++)
{
printf("%d\t",m[r][c]);
}
printf("\n\n");
}
return;
}
pues bueno amigos, espero me puedan ayudar...

que conste que no vengo a que me hagan la tarea, ya la hice, pero me trabe y me gustaria que me echaran una mano...


de antemano muchas gracias =)

:):):)
 
Arriba