Tema: Ayuda con C
Ver Mensaje Individual
Antiguo 31/10/2009, 17:39   #12
Coke-OFF
Invitado
 
Fecha de ingreso: 08/may/2007
Mensajes: 2.152
Coke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foroCoke-OFF A este paso se convertirá en leyenda de este foro
prueba con mi solucion...

[QUOTE]#include <stdio.h>
#include <conio.h>

/*limitar rango ( limita los valores de x al rango [0, N] )*/
//#define lr( x, N )( (x)<0 ? N+(x)%N : ( (x)>=N ? (x)%N : (x) ) )


void main()
{
int cuadrado[7][7],x,y,n,N=7;

printf( "\nCuadrado Magico de orden %ix%i :\n\n", N, N);

/*Se inicia los elementos del cuadrado magico con ceros*/
for(x=0;x<N;x++)
{
for(y=0;y<N;y++)
{
cuadrado[x][y]=0;
}
}
/*Se aplica el algoritmo general para obtener cuadrados magicos de orden impar*/
for( x=N/2,y=2,n=1; n<=N*N; ) /*se hace N*N iteraciones...*/
{
if(!cuadrado[x][y]) /*si el elemento seleccionado es cero*/
{
cuadrado[x][y] = n++; /*se inserta un número natural */

//x=lr(x+1,N); /*se incrementa x en 1 */

if(++x < 0) x = N+(x)%N;
else if(x >= N) x = (x)%N;
else x = x;

//y=lr(y-1,N); /*se decrementa y en 1 */

if(--y < 0) y = N+(y)%N;
else if(y >= N) y = (y)%N;
else y = y;
}
else
{
//x=lr(x-1,N); /*se decrementa x en 1 */

if(--x < 0) x = N+(x)%N;
else if(x >= N) x = (x)%N;
else x = x;

//y=lr(y-1,N); /*se incrementa y en 2 */

if(--y < 0) y = N+(y)%N;
else if(y >= N) y = (y)%N;
else y = y;
}

}
/*se imprime el cuadrado magico en pantalla*/
for(x=0;x<N;x++)
{
for(y=0;y<N;y++)
{
printf("\n");
for(x=0;x<N;x++)
{
getch();
printf("%4i",cuadrado[x][y]);
}
}
}
printf("\n\n Suma = %i\n\n",(N*(N*N+1))/2); /*se imprime la suma*/

getch();
}
[/QUOTE]

PD: incluso el else final, no tienes que ponerlo...quiero decir...

[QUOTE]#include <stdio.h>
#include <conio.h>

/*limitar rango ( limita los valores de x al rango [0, N] )*/
//#define lr( x, N )( (x)<0 ? N+(x)%N : ( (x)>=N ? (x)%N : (x) ) )


void main()
{
int cuadrado[7][7],x,y,n,N=7;

printf( "\nCuadrado Magico de orden %ix%i :\n\n", N, N);

/*Se inicia los elementos del cuadrado magico con ceros*/
for(x=0;x<N;x++)
{
for(y=0;y<N;y++)
{
cuadrado[x][y]=0;
}
}
/*Se aplica el algoritmo general para obtener cuadrados magicos de orden impar*/
for( x=N/2,y=2,n=1; n<=N*N; ) /*se hace N*N iteraciones...*/
{
if(!cuadrado[x][y]) /*si el elemento seleccionado es cero*/
{
cuadrado[x][y] = n++; /*se inserta un número natural */

//x=lr(x+1,N); /*se incrementa x en 1 */

if(++x < 0) x = N+(x)%N;
else if(x >= N) x = (x)%N;

//y=lr(y-1,N); /*se decrementa y en 1 */

if(--y < 0) y = N+(y)%N;
else if(y >= N) y = (y)%N;
}
else
{
//x=lr(x-1,N); /*se decrementa x en 1 */

if(--x < 0) x = N+(x)%N;
else if(x >= N) x = (x)%N;

//y=lr(y-1,N); /*se incrementa y en 2 */

if(--y < 0) y = N+(y)%N;
else if(y >= N) y = (y)%N;
}

}
/*se imprime el cuadrado magico en pantalla*/
for(x=0;x<N;x++)
{
for(y=0;y<N;y++)
{
printf("\n");
for(x=0;x<N;x++)
{
getch();
printf("%4i",cuadrado[x][y]);
}
}
}
printf("\n\n Suma = %i\n\n",(N*(N*N+1))/2); /*se imprime la suma*/

getch();
}
[/QUOTE]

Coke.

Última edición por Coke-OFF; 31/10/2009 a las 17:45.
Coke-OFF está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir