NOTA

Bienvenido a este humilde Blog, donde podras encontrar codigos fuente de algunos algoritmos o bien programillas sencillos, aqui se reciben criticas constructivas a fin de mejorar el blog... Gracias

jueves, 29 de septiembre de 2011

Metodo Gauss Jordan para algebra lineal en c++


#include <iostream.h>             //BIBLIOTECAS

#include <time.h>

#include <conio.h>

#include <dos.h>

#define maxi 20



float matriz[maxi][maxi],b[maxi][maxi],inter; //VARIABLES GLOBALES

time_t t;                 //variable que contiene la hora de la pila del sistema



                                    //FUNCIONES

void impr_matriz(float x, float y,int l); //funcion para la impresion de la matriz



void titulo();                     //funcion para la impresion del titulo



void salida();                          //funcion para salir de programa



void solucion(int a,int l);        //funcion que presenta la solucion al sistema



void cond(float a);



//FUNCION PRINCIPAL

void main ()

{                                        //inicio main

int n,i,j,a,lon,in,z,c,fin,decear,elige;   //variables locales

char modi,inicio,compr,otro;

inicio:

clrscr();

        titulo();



               cout<<"\nCuantas soluciones tendra el sistema [     ]";

       gotoxy(39,6);

       cin>>n;

               cond(n);

       if (n<=0)

{                       //inicio if n<=0

goto inicio;

}                      //fin if n<=0;

else

                 {                       //inicio else n<=0

for (i=1;i<=n;i++)

{                  //inicio for i

for (j=1;j<=n+1;j++)

{        //inicio for j

cout<<"introduce el valor ["<<i<<","<<j<<"]: ";

cin>>matriz[i][j];

}               //fin for j

  }  //fin for i

      

clrscr();

                titulo();

cout<<"\nLa matriz es:\n";



impr_matriz(i,j,n);

//PROCESO PARA METODO

z=n+1;

do

                 {                           //inicio do

  if (matriz[1][1]==0)

   {                //inicio if matriz

c=z-1;      

for (i=2;i<=c;i++)

{           //inicio for i=2

          if (matriz[i][1]!=0)

{      //inicio if matriz  

  for (j=1;j<=z;j++)

  { //inicio for j=1



             inter=matriz[i][j];

                                      //cout<<"inter vale: "<<matriz[i][j]<<"\t";; getch();

     matriz[i][j]=matriz[1][j];        ///INTERCAMBIAR RENGLONES

                                      //cout<<"matriz[i][j] vale: "<<matriz[1][j]<<"\t"; getch();

     matriz[1][j]=inter;

    //cout<<"matriz[1][j] vale: "<<inter<<"\n"; getch();

    

     }          //fin for j=1

}            //fin if matriz

       }                      //fin for=2

cout<<"\nPresiona una tecla para hacer intercambio de renglones..."; getch();

if (matriz[1][1]==0)

{                             //inicio for matriz

                           elige:

   cout<<"\n\n\n\tEste sistema de ecuaciones no puede resolverse";

              cout<<"\n\n\tDeceas:\n\t1. INGRESAR NUEVOS DATOS\n\t2. SALIR DEL PROGRAMA\n\tElige: ";

    cin>>decear;

    if(decear==1)

                            {                      //inicio if decear=1

goto inicio;

     }                   //fin ir decear=1

    else

      {                    //inicio else decear=1

       if (decear==2)

{               //inicio if decear=2

goto fin;

}                  //fin if decear=2

else

{                //inicio else decear=2

if (decear!=1 && decear!=2)

{             //inicio if decear!=1 && decear!=2

clrscr();

                                  titulo();

goto elige;

}            //fin if decear!=1 && decear!=2

                                 }                //fin else decear=2

                               }                  //fin else decear=1

}                             //fin if decear=1

cout<<"\n\nLa nueva matriz a quedado:\n";



                        impr_matriz(i,j,n);

}                    //fin if matriz



else

{                  //inicio else matriz

for (j=2;j<=z;j++)

{             //inicio for j=2

for (i=2;i<=n;i++)

{            //inicio for i=2

b[i-1][j-1]=matriz[i][j]-matriz[1][j]*matriz[i][1]/matriz[1][1];

                                  // cout<<"b["<<i-1<<"]["<<j-1<<"]= "<<b[i-1][j-1]<<"\t"; getch();

}          //fin for i=2

}               //fin for j=2

for (j=2;j<=z;j++)

{             //inicio for j=2

b[n][j-1]=matriz[1][j]/matriz[1][1];



}             //fin for j=2

z-=1;

for (j=1;j<=z;j++)

{                 //inicio for j=1

for (i=1;i<=n;i++)

{         //inicio for i=1

matriz[i][j]=b[i][j];

                                                            

}         //fin for i=1

}              //fin for j=1

}                      //fin else matriz

}                        //fin do

while (z>1);

                        cout<<"Presiona una tecla para mostrar la solucion al sistema....";

getch();

cout<<"\n\t\t\tLa solucion es:\n ";

                        solucion(i,n);

cout<<"\n\n\nDeseas calcular otro sistema de ecuaciones (S/N): ";

cin>>otro;

if (otro=='s'||otro=='S')

{                        //inicio if otro

goto inicio;

}                      //fin if otro

else

                         {                  //inicio else otro

salida();

}                     //fin else otro

}                           //fin else n<=0



getch();

fin:

clrscr();

salida();

        getch();

}                       //fin funcion principal

                                 //FUNCIONES SECUNDARIAS

void impr_matriz(float x, float y,int l)//funcion para la impresion de la matriz

{                         //inicio funcion impr_matriz

        for (x=1;x<=l;x++)

{                   //inicio for x

for (y=1;y<=l+1;y++)                      

{       //inicio for y

                        cout<<"\t"<<matriz[x][y];

}                   //fin for y

cout<<"\n";

}                       //fin for x

}                    //fin funcion impr_matriz ?



void titulo()                //funcion para la impresion del titulo

{                       //inicio funcion titulo

cout<<"                                   ALGEBRA LINEAL\n";

cout<<"                                Metodo de Gauss-Jordan\n\n";

     cout<<"HOY ES:";

        time (&t);                          //da hora almacenada en &t

gotoxy (10,4);

cout<<ctime(&t);                       //impresion de hora

}



void salida()                     //funcion para salir de programa

{                      //inicio de funcion salida

        clrscr();

cout<<"                                  PUEDES PONER LO QUE QUIERAS AQUI\n";

        cout<<"\n\n\n\nPresiona cualquier tecla para salir...";



}                       //fin funcion salida



void solucion(int a,int l)                //presenta solucion al sistema

{

for (a=1;a<=l;a++)

cout<<"\n\t\t\tX"<<a<<" = "<<matriz[a][1];

}



void cond(float a)

{

char b=65;

for (int i=65;i<90;i++)

         {                              

if (a==b)            

{

cout<<"nel";

}



}

      

}

NOTA:Talvez tengas que hacer algunos ajustes cuando lo copies, es codigo fuente de c++ para algebra lineal aunque otros lo llaman metodos numericos

1 comentario:

  1. mas claro mi hermano creas mas librerías ? mas explicadito c x favor

    ResponderEliminar