Besion d' aide

Signaler
Messages postés
1
Date d'inscription
mercredi 21 février 2007
Statut
Membre
Dernière intervention
28 mars 2007
-
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
-
j'ai  fais un programme sur devc++ pour resoudre l'equation matricielle : A*X=B ,  je vois pas ou est elle euruer ?

est ce que vous pouvez aidez SVP,

voila le programme

/* ========================================================================== */
/*                Gauss pivot pariel et total                                                            */
/* ========================================================================== */
#include
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include<windows.h>


int i,j,k;
int n;
float a[19][19],b[19];
char valider;


// fonction de remplissage
void remplissage(void)
{
// entrer le système
printf("\n\n * Nombre d'equation-inconues : \n\n N= ");scanf("%d",&n); 
printf("\n * La matrice A:\n\n");
for (i=0;i<n;i++)
{printf(" Equation %d : ",i+1);for (j=0;j<n;j++) scanf("%f",&a[i][j]);}
printf("\n * Le vecteur B:\n\n");
for(i=0;i<n;i++)
{printf(" Equation %d : ",i+1);scanf("%f",&b[i]);}
}


// fonction d'affichage matrice


void affichage_mat(float a[19][19],int n)
{
for (i=0;i<n;i++)
{
printf(" [");
for (j=0;j<n;j++)
{
printf("  %.4f  ",a[i][j]);
}
printf("]\n");
}
}


// fonction d'affichage système


void affichage(float a[19][19],float b[19],int n)
{
for (i=0;i<n;i++)
{
printf(" [");
for (j=0;j<n;j++)
{
printf("  %.4f  ",a[i][j]);
}
printf("] [  %.4f  ]",b[i]);
printf("\n");
}
}




// -------------------------------------------------------------
//              Résolution Par Gauss pivot pariel
// -------------------------------------------------------------


/*
void gauss_pivot_partiel(float a[19][19],float b[19],int n)
{
float x[19],p,eps=1e-6,ref,pivot;int ligne;    
for(k=0;k<n-1;k++)
{
// max pour le pivot partiel               
ref=0;
for(i=k;i<n;i++) if(fabs(a[i][k])>ref) {ref=fabs(a[i][k]);ligne=i;}


// pivotations
for(j=k;j<n;j++)
{pivot=a[k][j]; a[k][j]=a[ligne][j] ;a[ligne][j]=pivot; }


pivot=b[k]; b[k]=b[ligne]; b[ligne]=pivot;


for(i=k+1;i<n;i++)
{
p=a[i][k]/a[k][k];
for (j=k;j<n;j++)
{
a[i][j]=a[i][j]-p*a[k][j];
if (fabs(a[i][j])<eps)
a[i][j]=0;
}
b[i]=b[i]-p*b[k];
if(fabs(b[i])<eps)
b[i]=0;
}
}
float s=0;
for(i=n-1;i>=0;i--)
{  
for(j=i+1;j<n;j++)s=s+a[i][j]*x[j];                   
x[i]=(b[i]-s)/a[i][i];
s=0;
}
printf("\n-------- Gauss avec pivot partiel --------\n");
printf("\n * La triangularisation avec les pivotations partielles :\n\n");
affichage(a,b,n);
printf("\n * La resolution donne :\n\n");
for (i=0;i<n;i++)    
printf(" X_%d =  %f  ;\n",i+1,x[i]);
printf("\n");
}


*/


// -------------------------------------------------------------
//              Résolution Par Gauss pivot total
// -------------------------------------------------------------


void gauss_pivot_total(float a[19][19],float b[19],int n)
{
float x[19],p,eps=1e-6,ref,pivot;
int ligne,colonne,pivot_sol[19],sol;


// vecteur de pivotation des solutions
for(i=0;i<n;i++) pivot_sol[i]=i;
for(k=0;k<n-1;k++)
{


// max pour le pivot total               


ref=0;
for(i=k;i<n;i++)
for (j=k;j<n;j++)
if((a[i][j])>ref) {ref=(a[i][j]);ligne=i;colonne=j;}


// pivotations
for(j=k;j<n;j++)
{pivot=a[k][j]; a[k][j]=a[ligne][j] ;a[ligne][j]=pivot;}


pivot=b[k]; b[k]=b[ligne]; b[ligne]=pivot;


for(i=0;i<n;i++)
{pivot=a[i][k]; a[i][k]=a[i][colonne] ;a[i][colonne]=pivot;}


// remplissage du vecteur accordé aux pivotations


//algo forme triangulaire d'un systeme lecointe


{
sol=pivot_sol[k];
pivot_sol[k]=pivot_sol[colonne];
pivot_sol[colonne]=sol;
}


for(i=k+1;i<n;i++)
{
p=a[i][k]/a[k][k];
for (j=k;j<n;j++)
{
a[i][j]=a[i][j]-p*a[k][j];
if (fabs(a[i][j])<eps)
a[i][j]=0;
}
b[i]=b[i]-p*b[k];
if(fabs(b[i])<eps)
b[i]=0;
}
}
float s=0;
for(i=n-1;i>=0;i--)
{  
for(j=i+1;j<n;j++)
s=s+a[i][j]*b[j];                   
b[i]=(b[i]-s)/a[i][i];
//s=0; ????
}
// pivotation des solutions
for(i=0;i<n;i++)
{
x[pivot_sol[i]]=b[i];
}


printf("\n--------- Gauss avec pivot total ---------\n");
printf("\n * La triangularisation avec les pivotations totales :\n\n");
affichage(a,b,n);
printf("\n * La resolution donne :\n\n");
for (i=0;i<n;i++)    
printf(" X_%d =  %f  ;\n",i+1,x[i]);
printf("\n");
}


/*void choix_de_la_methode()
{
printf("\n-----------------------------------------------\n");                 
printf("\n * Resolution de A x = B :\n");   
printf("\n * Choix de la methode:\n");


printf("     1 => Gauss pivot partiel     \n");
printf("     2 => Gauss pivot total       \n");
printf("\n-- 3 => Quitter ------------------\n");


reprendre_choix:
printf("\n------ => donner votre choix ------ : ");
scanf("%s",&valider);
switch(valider)
{
           
case '1' : remplissage();printf("\n\n* Le systeme est :\n\n");
             affichage(a,b,n);gauss_pivot_partiel(a,b,n);break;
            
case '2' : remplissage();printf("\n\n* Le systeme est :\n\n");
             affichage(a,b,n);gauss_pivot_total(a,b,n);break;
            
     
default : goto reprendre_choix;


}
}


*/


 


 


int main()


{
void remplissage(void);
void affichage_mat(float a[19][19],int n);
void affichage(float a[19][19],float b[19],int n);
void gauss_pivot_total(float a[19][19],float b[19],int n);
system("PAUSE");


}

6 réponses

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
21
Dans ta fonction main, tu appelles tes fonctions en mettant les types des params !
exemple :
void affichage_mat(float a[19][19],int n);

Rouge = erreur !

Je n'ai pas regardé le reste.
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
Salut Yann:

Si je ne me trompe pas, il s'agit des prototypes des fonctions et je pense qu'il possible de les mettre au début du main.


________________________________________________________________________________
A.B. : 
"Dieu nous donne des mains, mais il ne bâtit pas les ponts
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
Le main c'est un gag ?
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
21
>> Ombitious_Developper : Es-tu sur que ce sont des prototypes ?????????
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
Salut:

Se sont des prototypes belle et bien. Ce que veux dire que le "main" est vide.
C'est vrai que je n'ai pas employé les bonne termes ("je crois", "je pense", ...)


________________________________________________________________________________
A.B. : 
"Dieu nous donne des mains, mais il ne bâtit pas les ponts
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
21
Quant on place le main à la fin du module, c'est bien pour éviter de déclarer les prototypes...
Je pense que le problème ici vient du fait d'un copié/collé de code sans vraiment comprendre ce qu'il fait.