English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
Todas las categorías

Pasenme el código please es mi evaluación en la esucela, ya logro generar la matriz por medio de referencias, ya logro validr que el número sea impar pero no logro acomodar los numeros para que me de el cuadro magico auxiliooooo.

2006-10-05 12:02:27 · 3 respuestas · pregunta de Mortixxxia 6 en Ordenadores e Internet Programación y Diseño

3 respuestas

Este es el codigo fuente. Esta en VisualC++. Espero que te sirva!

#include "stdafx.h"
#include

using namespace std;

void OddMagicSquare(vector > &matrix, int n);
void DoublyEvenMagicSquare(vector > &matrix, int n);
void SinglyEvenMagicSquare(vector > &matrix, int n);
void MagicSquare(vector > &matrix, int n);
void PrintMagicSquare(vector > &matrix, int n);

int main(int argc, char* argv[])
{
int n;
printf("Enter order of square: ");
scanf("%d", &n);

vector > matrix(n, vector (n, 0));

if (n<3)
{
printf("\nError: n must be greater than 2\n\n");
return -1;
}

MagicSquare(matrix, n);

//Print results
PrintMagicSquare(matrix, n);

return 0;
}

void MagicSquare(vector > &matrix,int n)
{
if (n%2==1) //n is Odd
OddMagicSquare(matrix, n);
else //n is even
if (n%4==0) //doubly even order
DoublyEvenMagicSquare(matrix, n);
else //singly even order
SinglyEvenMagicSquare(matrix, n);
}

void OddMagicSquare(vector > &matrix, int n)
{
int nsqr = n * n;
int i=0, j=n/2; // start position

for (int k=1; k<=nsqr; ++k)
{
matrix[i][j] = k;

i--;
j++;

if (k%n == 0)
{
i += 2;
--j;
}
else
{
if (j==n)
j -= n;
else if (i<0)
i += n;
}
}
}

void DoublyEvenMagicSquare(vector > &matrix, int n)
{
vector > I(n, vector (n, 0));
vector > J(n, vector (n, 0));

int i, j;

//prepare I, J
int index=1;
for (i=0; i for (j=0; j {
I[i][j]=((i+1)%4)/2;
J[j][i]=((i+1)%4)/2;
matrix[i][j]=index;
index++;
}

for (i=0; i for (j=0; j {
if (I[i][j]==J[i][j])
matrix[i][j]=n*n+1-matrix[i][j];
}
}

void SinglyEvenMagicSquare(vector > &matrix, int n)
{
int p=n/2;

vector > M(p, vector (p, 0));
MagicSquare(M, p);

int i, j, k;

for (i=0; i for (j=0; j {
matrix[i][j]=M[i][j];
matrix[i+p][j]=M[i][j]+3*p*p;
matrix[i][j+p]=M[i][j]+2*p*p;
matrix[i+p][j+p]=M[i][j]+p*p;
}

if (n==2)
return;

vector I(p, 0);
vector J;

for (i=0; i I[i]=i+1;

k=(n-2)/4;

for (i=1; i<=k; i++)
J.push_back(i);

for (i=n-k+2; i<=n; i++)
J.push_back(i);

int temp;
for (i=1; i<=p; i++)
for (j=1; j<=J.size(); j++)
{
temp=matrix[i-1][J[j-1]-1];
matrix[i-1][J[j-1]-1]=matrix[i+p-1][J[j-1]-1];
matrix[i+p-1][J[j-1]-1]=temp;
}

//j=1, i
//i=k+1, k+1+p
i=k;
j=0;
temp=matrix[i][j]; matrix[i][j]=matrix[i+p][j]; matrix[i+p][j]=temp;

j=i;
temp=matrix[i+p][j]; matrix[i+p][j]=matrix[i][j]; matrix[i][j]=temp;
}


void PrintMagicSquare(vector > &matrix, int n)
{
for (int i=0; i {
for (int j=0; j printf(" %3d", matrix[i][j]);

printf("\n");
}

printf("\n\n");
}

2006-10-05 16:21:44 · answer #1 · answered by Pepe 8a 2 · 1 0

concuerdo con el alejandro
ah y yo hice eso en visual basic pero lastimosamente formatee la maquina asi que aunque quisiera no puedo ayudarte

2006-10-05 15:39:28 · answer #2 · answered by Als_Virus 6 · 0 2

Y te imaginás que alguien se va a poner a hacer semejante código solo para responder esto?? Por qué no te dedicás a la decoración de interiores y dejás la programación para gente que resuelve sus propios problemas en vez de pedir a los demás que lo hagan por vos..?

2006-10-05 13:32:00 · answer #3 · answered by Eneas 6 · 0 2

fedest.com, questions and answers