All pastes #386737 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-03-08 21:17 UTC
rendered paste body
// Incluir E/S y Librerías Standard
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;

// Zona de Declaración de Constantes
const int MAX=10;

// Zona de Declaración de Tipos
typedef float TMatriz[MAX][MAX];

struct TMatriz2
{
int filas,columnas;
TMatriz m;
};

// Zona de Cabeceras de Procedimientos y Funciones
float signo(int i, int j);
void adjunta(TMatriz2 m, int i, int j, TMatriz2 &adjm);
float determinante(TMatriz2 m);
void reemplazar(TMatriz2 m, int col, TMatriz2 n, TMatriz2 &m2);

// Programa Principal
int main()
{
    // Zona de Declaración de Variables del Programa principal
    int l=10,i,j;
    float det;
    TMatriz2 matriz={10,10,5.14435748236162,1.03833590322352,-1.08928803421938,-2.95716068121277,0.40007351584052,-4.37640716007125,1.50354192673255,-4.19857806310219,-2.62212422004806,-1.88194436425199,1.19155186137784,-1.31042589271134,-0.11461282117064,1.09612167506736,-4.53418240242485,4.04369179257216,1.60605268046386,-8.50916509119349,4.81589938910403,-4.36725402770197,0.61662113016546,-7.18601392490508,3.95561597855334,4.02002318936209,-5.80631975611702,5.35993195681827,-8.12117818859680,1.40298520172515,0.49465525813866,-0.56358144149329,-0.40927432915451,-0.61094354987249,-0.57187846479440,-1.50904345653654,1.22483418182794,-3.54631967955703,-2.75734203723752,0,0.46080617332599,-0.17548921224798,3.43174990911225,2.76461898848090,-0.45068888163272,-1.80321964953049,3.96935887366159,6.75777201526540,-1.86240399546343,0.77557271993867,2.22964819345597,-1.18932674290514,0.71654239725005,0,8.65472766433713,-3.24280053827802,0,0.04927799659601,0,-1.92273999771262,-4.98067171227347,-4.28981756542038,-1.63852896928179,1.07370338963501,-0.80065583527792,-2.04536157885527,-3.82400227177818,-0.49846224295440,5.03183822795381,-0.95660138173987,-2.82852260227743,0.35004036390074,0.49191986753354,0.50605345382527,-0.01466887527935,2.17218512612959,-1.30909339052857,3.13543609121954,-0.73259969198931,-3.40737878932938,4.74879642314561,0.01423301592330,-2.97405678959259,-6.93180453256085,4.55364599737398,0.46882591081651,-0.18590445122522,3.93083520762505,0.70085723323733,6.75466408749840,-2.72081540148203,-3.20989983549837,-0.90898934903532,0.32895530216404,-6.95946343894454,2.22080807851986,-0.54141893028953,2.73407272056329,4.26008434861019,3.60847008964217,0.81620570916196,1.99717271586476},matrizr={10,1,1.29049814714069,0.98298778204643,0,2.11070296501079,0.86374677121395,-0.43444053822029,-0.59717077926034,0.95168928079750,-0.30768793545853,2.48659342878277}, matriz2;
    clock_t comienzo, final;
    
    comienzo = clock();

    //Calcular soluciones
    det = determinante(matriz);
    if (det != 0.0)
    {
        cout << "Solucion:" << endl;
        for (i=0;i<l;i++)
        {
        reemplazar(matriz, i, matrizr, matriz2);
        cout << "incognita" << i+1 << " = " << determinante(matriz2)/det << endl;
        }
    }
    else
    {
        cout << "No tiene solucion!" << endl;
    }
    final = clock();
    cout << "Tiempo: " << ((clock()-comienzo)/(double)CLOCKS_PER_SEC ) << " segundos" << endl;

    system("Pause");    // Hacer una pausa
    return 0;           // Valor de retorno al S.O.
}

// Implementación de Procedimientos y Funciones

//Signo
float signo(int i, int j)
{
    //Variables
    float resul;
    if ((i+j)%2==0)
    {
        resul=1.0;
    }
    else
    {
        resul=-1.0;
    }
    return resul;
        
}

//Matriz Adjunta
void adjunta(TMatriz2 m, int i, int j, TMatriz2 &adjm)
{
    //Variables
    int k, l,x,y;

    //Calcular adjunta
    adjm.filas = m.filas -1;
    adjm.columnas = m.columnas -1;
    
    x=0;
    for (k=0;k<m.filas;k++)
    {
        y=0;
        for (l=0;l<m.columnas;l++)
        {
            if ((k!=i)&&(l!=j))
            {
                //tenemos que copiar este elemento en la adjunta
                adjm.m[x][y]= m.m[k][l];
                y++;

            }          
        }
        if (k!=i)
        {
            x++;
        } 
    }

}

//Determinante
float determinante(TMatriz2 m)
{
    //Variables
    int i;
    float resul;
    TMatriz2 adj;
        
    if ((m.filas==1) && (m.columnas==1))
    {
        resul = m.m[0][0];
    }
    else
    {
        resul = 0.0;
        for (i=0;i<m.filas;i++)
        {
            adjunta(m,0,i,adj);
            resul = resul + signo(0,i) * m.m[0][i] * determinante(adj);
        }
            
    }
    return resul;
}

//Reemplazar
void reemplazar(TMatriz2 m, int col, TMatriz2 n, TMatriz2 &m2)
{
    //Variables
    int i,j;
    
    //Reemplazar
    for (i=0;i<m.filas;i++)
    {
        for (j=0;j<m.columnas;j++)
        {
            if (j==col)
            {
                m2.m[i][j] = n.m[i][0];
            }
            else
            {
                m2.m[i][j] = m.m[i][j];
            }
        }
    }
    m2.filas = m.filas;
    m2.columnas = m.columnas;

}