Sunteți pe pagina 1din 5

#include <math.

h>
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <iomanip>
#define MAX 1000
using namespace std;
using std::setprecision;
//time_t t;
double xi[MAX]; //vector valores x
double yi[MAX]; //vector valores y
double suma[MAX][MAX]; //arreglo para matriz
double b[MAX]; //vector para b
int n,i,m,j,k,z; //contadores
//int inicio2; //etiquetas
void titulo(); //Funcion Muestra titulo
void salida(); //Funcion que sale del programa
void datos(); //Funcion que pide datos
void matriz(); //Funcion imprime matriz
void condiciones(); //Funcion Presenta condiciones
void gauss(double inicio);//Funcion Metodo Gauss-Gordan
void solucion (int a,int l);
int main ()
{ //inicio main o programa
system("color f1"); char otro; int sabeque;
// inicio;
condiciones(); sabeque:
datos();
cout<<"\n\t____________________________________________________________\n";
cout<<"\tPresione una tecla para mostrar el sistema a
resolver...\n\n";getch();
//titulo();
cout<<"\n\t____________________________________________________________";
cout<<"\n\t\tEl sistema a resolver es: \n\n";
matriz();
cout<<"\n\t____________________________________________________________";
cout<<"\n\n\tEnter para mostrar la solucion al sistema...";getch();
gauss(sabeque);
cout<<"\n\n\n\tDeseas calcular otro sistema de ecuaciones (S/N):
";cin>>otro;
if (otro=='s'||otro=='S')
{//inicio if otro
goto sabeque;
}//fin if otro
else
{//inicio else otro
salida();
}//fin else otro
salida();
} //fin main o programa
void datos()
{ //->Inicio funcion datos
inicio:
// titulo();
cout<<"\n\t____________________________________________________________";
cout<<"\n\tDe que grado es n: ";cin>>n;
if (n>1 && n<=MAX)
{
inicio2:
cout<<"\n\t____________________________________________________________\n";

cout<<"\tDe que grado desea la aproximacion: ";cin>>m;


cout<<"\tIngresando datos : \n";
cout<<"\n\t____________________________________________________________\n";
if (m<=0 || m>n)
goto inicio2;
for (i=0;i<n;i++)
{//->inicio for i
cout<<"\tTiempo en dia :"<< "x["<<i<<"]: ";cin>>xi[i];
cout<<"\tNumero de Bacterias :"<<" y["<<i<<"]: ";cin>>yi[i];
}//->fin for i
}
else
{
cout<<"\n\tDebes elegir un grado de entre 1 y "<<MAX<<"...";getch();
goto inicio;
}
} //->fin funcion datos
void matriz() //->Funcion para la impresion de la matriz
{ //->inicio funcion matriz
for (k=1;k<=m+1;k++)
{ //->inicio for k=0
z=k;
for (j=1;j<=m+1;j++)
{ //->inicio for j=0
suma[k][j]=0;
for (i=0;i<n;i++)
{ //->inicio for i=0
suma[k][j]+=pow(xi[i],(j-1)+(z-1));
} //->fin for i=0
}//->fin for j=0
} //->fin for k=0
for (k=1;k<=m+1;k++)
{ //->inicio for k=0
for (j=1;j<=m+1;j++)
{//->inicio for j=0
b[j]=0;
for (i=0;i<n;i++)
{ //->inicio for i=0
b[j]+=pow(yi[i],1)*pow(xi[i],j-1);
}//->fin for i=0
}//->fin for j=0
}//->fin for k=0
for (k=1;k<=m+1;k++)
{//->inicio for k=0
for (j=1;j<=m+1;j++)
{//->inicio for j=0
cout<<"\t"<<suma[k][j]<<" ";
}//->fin for j=0
cout<<"= "<<b[k]<<"\n";
} //->fin for k=0

}//->fin funcion matriz

void titulo()//->Funcion para la impresion de la hora actual de la PC y el titulo


{ //->inicio funcion titulo
cout<<"\n\t____________________________________________________________";
cout<<"\n\tMetodo de Minimos Cuadrados\n\n";
cout<<"\n\tTasa de crecimiento de una bacteria\n";
cout<<"\n\tCalculala segun el ejercicio 1 con 4.5 dias\n";
//cout<<"\n\tHOY ES:";
//time (&t); //->da hora almacenada en &t
//cout<<ctime(&t); //->impresion de hora
} //->fin funcion titulo
void salida() //->Salida del programa
{ //->inicio de funcion salida
cout<<"\n\t__________________________________________________________\n";
cout<<"\n\n\nPresiona ALT+F4 para salir...";
getch();
} //->fin funcion salida

void condiciones ()//funcion de condiciones


{
int aceptar;
titulo(); getch();
cout<<"\n\t____________________________________________________________";
cout<<"\n\t\t\t\tCONDICIONES DE USO";
cout<<"\n\tPara su buen funcionamiento y obtencion de su resultado
correcto.";
cout<<"\n\tEl programa de Minimos Cuadrados tiene las siguientes
condiciones:";
cout<<"\n\t*En el apartado en donde pide los datos;\n";
cout<<"\tunicamente se puede ingresar numeros y no caracteres.\n\n";
cout<<"\t*No ingresar numeros muy exagerados.\n";
cout<<"\tLos valores deben ser reales, es decir no invetados.\n\n\n";
cout<<"\tPresiona una tecla para continuar...";getch();
cout<<"\n\t____________________________________________________________\n";
}//fin de la funcion condiciones

void gauss(double inicio)//funcion gauss


{
double z,c,inter,decear,fin,r;
double /*b[MAX][MAX],*/d[MAX][MAX],h[MAX];
inicio:
//cout<<"\nLa matriz es:\n";
// impr_matriz(i,j,n);
//INICIO PROCESO PARA METODO
z=m+2;
do
{ //inicio do
if (suma[1][1]==0)
{ //inicio if matriz
c=z-1;
for (i=2;i<=c;i++)
{ //inicio for i=2
if (suma[i][1]!=0)
{ //inicio if matriz
for (j=1;j<z;j++)
{ //inicio for j=1
inter=suma[i][j];
cout<<"inter vale: "<<suma[i][j]<<"\t";; getch();
suma[i][j]=suma[1][j]; ///INTERCAMBIAR RENGLONES
cout<<"matriz[i][j] vale: "<<suma[1][j]<<"\t"; getch();
suma[1][j]=inter;
cout<<"suma[1][j] vale: "<<inter<<"\n"; getch();
} //fin for j=1
}//fin if matriz
} //fin for=2
cout<<"\n\tPresiona una tecla para hacer intercambio de renglones...";
getch();
if (suma[1][1]==0)
{ //inicio for matriz
elige:
cout<<"\n\t____________________________________________________________";
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;
cout<<"\n\t____________________________________________________________";
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
titulo();
goto elige;
}//fin if decear!=1 && decear!=2
} //fin else decear=2
}//fin else decear=1
} //fin if decear=1
cout<<"\n\t____________________________________________________________";
cout<<"\n\n\tLa nueva matriz a quedado:\n";
// impr_matriz(i,j,n);
}//fin if matriz
else
{//inicio else matriz
for (i=1;i<=m+1;i++)
{ r=m-2; ///como coregir este error
suma[i][1/*r*/]=b[i];//r estaba en 1
}
for (j=2;j<=z;j++)
{ //inicio for j=2
for (i=2;i<=m+1;i++)
{//inicio for i=2
d[i-1][j-1]=suma[i][j]-suma[1][j]*suma[i][1]/suma[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
d[m+1][j-1]=suma[1][j]/suma[1][1];
//cout<<"\nb["<<n<<"]["<<j-1<<"]=matriz"<<"["<<1<<"]["<<j<<"]/matriz"<<"[1][1]=
"<<suma[1][j]<<"/"<<suma[1][1]<<"= "<<b[n][j-1]<<"\t"; getch();
}//fin for j=2
z-=1;
for(j=1;j<=z;j++)
{//inicio for j=1
for(i=1;i<=m+1;i++)
{//inicio for i=1
suma[i][j]=d[i][j];
//cout<<"matriz["<<i<<"]["<<j<<"]=b["<<i<<"]["<<j<<"]="<<suma[i][j]<<"="<<b[i]
[j]<<"\t\n"; getch();
}//fin for i=1
}//fin for j=1
}//fin else matriz
}//fin do
while (z>1);
cout<<"\n____________________________________________________________";
cout<<"\n\t\t\tLa solucion es:\n ";
solucion(i,m+1);
//fin else n<=0
getch();
fin:
salida();
getch();
// goto sabeque;
} //fin funcion gauss
void solucion(int a,int l) //presenta solucion al sistema , funcin sol
{
cout<<"\n____________________________________________________________";

for (a=1;a<=l;a++)
cout<<setprecision(4)<<"\n\t\t\tX"<<a<<" = "<<suma[a][1];
}//fin de la funcion

S-ar putea să vă placă și