Le titre est assez explicite non?
Pas forcément super bien détaillé, mais les variable sont pas trop mal nommé. Je me suis inspiré de ce pdf
http://www.dil.univ-mrs.fr/~garreta/generique/sujets/PB01.pdf
.
Source / Exemple :
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <math.h>
#define N_Eq 11
int main()
{
//long double buf;
long double T_Eq[N_Eq][N_Eq]={{ 1 , 10 , 100 , 1000 , 10000 , 100000 , 1229 } ,
{ 1 , 30 , 900 , 27000 , 810000 , 24300000 , 4249 } ,
{ 1 , 50 , 2500 , 125000 , 6250000 , 312500000 , 12358 } ,
{ 1 , 60 , 3600 , 216000 , 12960000 , 777600000 , 19956 } ,
{ 1 , 80 , 6400 , 512000 , 40960000 , 3276800000 , 47434 } ,
{ 1 , 100 , 10000 , 1000000 , 100000000 , 10000000000 ,101450 }};
int i_Equation;
int i_Monome;
int n_Equation=6;//Variable constante représentant le nombre d'équation
int n_Monome = n_Equation ;//Nombre de Monome
printf("Programme du pivot de gauss");
/*printf("\nEntrez le nombre d'équation :");
scanf("%d",&n_Equation);
printf("\n\n");
n_Monome = n_Equation ;//Nombre de Monome
for (i_Equation=0;i_Equation<n_Equation;i_Equation++)
{
printf("Equation n°%i\n",i_Equation+1);
for (i_Monome=0;i_Monome<n_Monome;i_Monome++)
{
printf("valeur %i = ",i_Monome+1);
scanf("%Lf",&buf);
T_Eq[i_Equation][i_Monome]=buf;
}
//printf("\n");
printf("Equation %i =",i_Equation+1);
scanf("%lf",&T_Eq[i_Equation][n_Monome]);
printf("\n\n");
} // on a saisi les facteurs des equations
long double Pivot;
long double PivotEq;
int reference;
int Tri_Equation;
int PathS[N_Eq];
for(i_Equation = 0;i_Equation<n_Equation-1;i_Equation++) // Nous parcourons l'ensemble des equations
{
reference = 0;
Pivot = T_Eq[i_Equation][reference];
for(i_Monome=1;i_Monome<n_Monome;i_Monome++) //Nous parcourons l'ensemble des monomes pour chercher le pivot!
{
if(fabs(T_Eq[i_Equation][i_Monome])>fabs(Pivot))
{ Pivot = T_Eq[i_Equation][i_Monome];
reference = i_Monome;
}
}
PathS[i_Equation]=reference;
for(Tri_Equation = i_Equation + 1; Tri_Equation<n_Equation;Tri_Equation++) // triangulation du systeme.
{
PivotEq = T_Eq[Tri_Equation][reference] ;
for(i_Monome=0;i_Monome<=n_Monome;i_Monome++) //Nous parcourons l'ensemble des monomes
{ if(T_Eq[Tri_Equation][i_Monome]!=0)
{
T_Eq[Tri_Equation][i_Monome]= T_Eq[Tri_Equation][i_Monome] *Pivot/PivotEq- T_Eq[i_Equation][i_Monome];
}
}
}
}
//Recherche de l'élément >0 dans la dernière equation pour trouver le résultat...
int Depart=0;
bool Ok = false;
while((Depart<n_Monome)&&(Ok==false))
{ i_Monome=0;
while((i_Monome<n_Monome)&&(Ok==false))
{
if(Depart ==PathS[i_Monome]) Ok = true;
i_Monome++;
}
if(Ok==true){ Ok=false; Depart++;}
else Ok=true;
}
PathS[n_Equation - 1] = Depart;
//reference = Depart;
long double Solution[N_Eq];
long double ASoustraire;
long double ADiviser;
int d_Monome = n_Monome-1;
for(i_Equation = n_Equation-1;i_Equation>=0;i_Equation--)
{
Depart = PathS[i_Equation];
i_Monome = n_Monome-1;
ASoustraire =0;
ADiviser = 0;
while(i_Monome>=d_Monome)
{
if(i_Monome==d_Monome)
ADiviser += T_Eq[i_Equation][PathS[i_Monome]];//Partie de l'équation
else
ASoustraire += T_Eq[i_Equation][PathS[i_Monome]]*Solution[PathS[i_Monome]];
i_Monome--;
}
Solution[Depart] = (T_Eq[i_Equation][n_Monome]-ASoustraire)/ADiviser ;
d_Monome--;
}
//Passons au remplacage..
printf("Solution aux equations :\n");
for(i_Equation =0;i_Equation<n_Equation;i_Equation++)
{ printf("valeur %d = % Lf",i_Equation + 1,Solution[i_Equation]);
}
printf("\n\nAppuyer sur une touche pour terminer...");
scanf("%d",&n_Equation);
return 0;
}
Conclusion :
Je m'en sert pour faire mes propres fonction en génie climatique. Dorénavent et suite à un crash de mon disque dur, je mettrai beaucoup plus de source sur le net!
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.