¡Hola, Invitado!


Patrocinantes


Síguenos en Facebook


Síguenos en Twitter

Compartir este tema:
[Código] Cuadrado Mágico
Sifaw En línea
Moderador Global
******

Mensajes: 350
Registro en: Jul 2010
MySpace YouTube
Gracias dados: 25
Gracias recibidos: 32
Mensaje: #1
Cuadrado Mágico
  • Compartir en Delicious
  • Compartir en Digg
  • Compartir en Linkedin
  • Compartir en MySpace
  • Compartir en Technorati
  • Compartir en Tuenti
Un cuadrado mágico es una tabla donde se dispone de una serie de números enteros en un cuadrado o matriz de forma tal que la suma de los números por columnas, filas y diagonales principales sea la misma, la constante mágica. Usualmente los números empleados para rellenar las casillas son consecutivos, de 1 a n², siendo n el número de columnas y filas del cuadrado mágico.

El algoritmo usado por el código que les dejo a continuación sería el siguiente:

Código:
1º Colocamos el 1 en la mitad de la primera fila
2º colocamos el siguiente número en la casilla superior izquierda al último número que habíamos colocado
3º Repetimos paso 2 hasta que nos topemos con una casilla con un número. En tal caso, el siguiente número se colocaría en la casilla inferior al último número colocado.
4º Repetimos paso 2 y 3 hasta completar el cuadrado

Y aquí el código en c++:

Lenguaje C++
#include <iostream>
 
using namespace std;
 
const unsigned MAX = 100;
 
typedef int TArray[MAX][MAX];
 
struct TRegistro {
	TArray cuadrado;
	unsigned orden;
};
 
void pedirOrden(TRegistro& matriz);
void crearMagico(TRegistro& matriz);
void mostrarMatriz(const TRegistro& matriz);
 
int main () {
	TRegistro matriz;
	pedirOrden(matriz);
	crearMagico(matriz);
	mostrarMatriz(matriz);
	return 0;
}
 
void pedirOrden(TRegistro& matriz){
	bool bien = false;
	int orden=0;
	while (!bien) {
		cout << "Introduzca el orden de la matriz(>1 e impar): ";
		cin >> orden;
		if ((orden>1) and (orden%2!=0)) {
			matriz.orden = orden;
			bien = true;
		}
	}
	for (unsigned i=0; i<orden; i++) {
		for (unsigned j=0; j<orden; j++) {
			matriz.cuadrado[i][j] = 0;
		}
	}
}
 
void crearMagico(TRegistro& matriz){
	int fila=0, columna, num=1;
	columna = matriz.orden/2;
	while (num<=matriz.orden*matriz.orden) {
		matriz.cuadrado[fila][columna] = num;
		num++;
		fila--;
		columna--;
		if (columna<0) {
			columna = matriz.orden-1;
		}
		if (fila<0) {
			fila = matriz.orden-1;
		}
		if (matriz.cuadrado[fila][columna]!=0) {
			fila += 2;
			columna++;
			if (columna>=matriz.orden) {
				columna -= matriz.orden;
			}
			if (fila>=matriz.orden) {
				fila -= matriz.orden;
			}
		}
 
	}
}
 
void mostrarMatriz(const TRegistro& matriz){
	for (unsigned i=0; i<matriz.orden; i++) {
		for (unsigned j=0; j<matriz.orden; j++) {
			cout << matriz.cuadrado[i][j] << "|";
		}
		cout << endl;
	}
}

[Imagen: moderadorglobal.png]
(Este mensaje fue modificado por última vez en: 28-01-2012 10:57 PM por Sifaw.)
28-01-2012 10:55 PM
Buscar Citar




Usuario(s) navegando en este tema: 1 invitado(s)