Aporte: Cuadrado Mágico de orden impar

Iniciado por dato000, 27 Julio 2012, 02:33 AM

0 Miembros y 1 Visitante están viendo este tema.

dato000

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.

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()
{
    printf("CUADRADO MAGICO\n");
    int n;
    int arr[MAX][MAX];
    generar(arr, &n);

    getchar();
    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: ");
        scanf("%d", &n);

    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++)
          printf("%d ", a[i][j]);


    printf("\n");
  }
}



saddam


TheSj

Gracias por el aporte, me ayudó muchisimo  ::) ;-) :silbar: