12 de nov. de 2010

Matriz Magica [C++]

Aqui presento un programa hecho en C++, el cual evalua una Matriz de n x n, y obtener como resultado si es una Matriz Magica o no.

Una Matriz Mágica es la disposición de una serie de números enteros 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 de la Matriz Magica.


Por ejemplo :


*Ingreso de Datos :

** Tamaño de la Matriz = 3

** Matriz[1][1] = 4
** Matriz[1][2] = 9
** Matriz[1][3] = 2
** Matriz[2][1] = 3
** Matriz[2][2] = 5
** Matriz[2][3] = 7
** Matriz[3][1] = 8
** Matriz[3][2] = 1
** Matriz[3][3] = 6

* La Matriz Ingresada es :

4   9   2


3   5   7

8   1   6

//** Podemos darnos cuenta que la suma de cada fila y cada columna y cada una de las diagonales principales suman 15
**//


* Resultado :

**  !!! La Matriz Ingresada es Matriz Magica !!!



Ejemplo Grafico :








El codigo del programa es el siguiente :








#include <iostream>

using namespace std;

int ** Leer_Matriz (int T)
{
    int **A = (int**)malloc(T*sizeof(int*));
    
    cout<<"\n\n\n\t\t INGRESE MATRIZ \n";
    
    for ( int i=0 ; i<T ; i++)
    {
        A[i] = (int*)malloc(T*sizeof(int));
        for ( int j=0 ; j<T ; j++ )
        {
            cout<<"\n\t\t A["<<i+1<<"]["<<j+1<<"]  =  ";
            cin>>A[i][j];
        }
    }
    
    return A;
}

int Suma_Fila (int **M, int T)
{
    int suma2 = 0;
    
    for ( int i=0 ; i<T ; i++ )
    {
        int suma1 = 0;
        
        for (int j=0 ; j<T ; j++ )
            suma1 += M[j][i];
        
        if ( i == 0 )
            suma2 = suma1;
        else
            if( suma2 != suma1 )
                return -1;
    }
    
    return suma2;
}

int Suma_Columna (int **M, int T)
{
    int suma2 = 0;
    
    for ( int i=0 ; i<T ; i++ )
    {
        int suma1 = 0;
        
        for (int j=0 ; j<T ; j++ )
            suma1 += M[i][j];
        
        if ( i == 0 )
            suma2 = suma1;
        else
            if( suma2 != suma1 )
                return -1;
    }
    
    return suma2;
}

int Suma_Diagonal (int **M, int T)
{
    int suma1 = 0;
    int suma2 = 0;
    
    for ( int i=0 ; i<T ; i++ )
        suma1 += M[i][i];
        
    for ( int i=0 ; i<T ; i++ )
        suma2 += M[i][T-i-1];
    
    if( suma2 != suma1 )
        return -1;
    
    return suma1;
}

void Mostrar_Matriz (int **M,int T)
{
     cout<<"\n\n\n\t\t MATRIZ INGRESADA  :\n\n\n\t";
     for ( int i=0 ; i<T ; i++ )
     {
         for ( int j=0 ; j<T ; j++ )
             cout<<"\t "<<M[i][j];
         cout<<"\n\n\t";
     }
}

int main ()
{
    int **M = NULL;
    int T,V;
    char R = 'S';
    
    system("color 9F");
    
    do {
        cout<<"\n\n\n\t\t INGRESE TAMANNO DE LA MATRIZ  :  ";
        cin>>T;
        
        M = Leer_Matriz(T);
        
        Mostrar_Matriz(M,T);
        
        V = Suma_Fila (M,T);
        
        if( Suma_Columna (M,T) == V &&
           Suma_Diagonal (M,T) == V && V != -1 )
           
           cout<<"\n\n\n\t\t !!! LA MATRIZ ES MAGICA !!! ";
           
        else
           cout<<"\n\n\n\t\t !!! LA MATRIZ NO ES MAGICA !!! ";
           
        cout<<"\n\n\n\t\t DESEA CONTINUAR [S/N]  :  ";
        cin>>R;
        
        system("CLS");
        
        } while ( R == 'S' || R == 's' );
        
    return 0;
}





*** GRACIAS POR SU VISITA ***




.

1 comentarios:

int **A = (int**)malloc(T*sizeof(int*));
No Entiendo calichin Y_Y

Publicar un comentario en la entrada

Agrega Un Cometario en —(•·÷[ Programando ]÷·•)—

Twitter Delicious Facebook Digg Stumbleupon Favorites More