Matrice Ax = b

maverick1984 Messages postés 27 Statut Membre -  
c-moi Messages postés 82 Statut Membre -
Bonjour,

Je recherche activement de l'aide concernant ce programme ci dessous permettant de résoudre le système linéaire Ax=b et contanant éalement les donctions de saisie, d'affichage, de remontée, d'élimination et de permutation, j'y travaille depuis une semaine et à la compilation on me renvoie toujours des erreurs, là je suis vraiment bloqué. Je compte très sincèrement sur votre aide pour débugger le programme ou s'il le faut me donner le lien d'un programme similaire qui marche car c'est un projet que je dois rendre demain. En vous remerciant chaleureusement j'espère avoir bientôt de vos nouvelles. Bonne journée.

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

/*Les fonctions*/
int saisie_taille();
int recherche_pivot(k,i0,A);

/*Les proc‚dures*/
void saisie_matrice(n,A);
void afficher(x,n);
void remontee(b,x,A);
void elimination(k,b,A);
void permuter(k,i0,b,A);

int main ()
{
const max=100;
int A[max][max];
int b[max],x[max];
int k,n,i0,arret;

/*D‚but du programme*/
n = saisie_taille();
saisie_matrice(n,A);

k=1; arret=0;

do
{
if (A[k][k]!=0)
{
elimination(k,b,A);
k+=1;
}
else if (A[k][k]==0)
i0=recherche_pivot(k,i0,A);
if (i0==k)
{
elimination(k,i0,A);
k+=1;
}
else if (i0!=k)
{
permuter(k,i0,b,A);
elimination(k,b,A);
k+=1;
}
else
arret=1;

}while(arret=1 || k=n);
if ( arret=0 && A[n][n]!=0 )
{
remontee(A,b,x);
afficher(x);

}
else
printf("Pas de solution");

return 0;

}

/* fonction qui saisit n*/
int saisie_taille()
{
int n;
do
{
printf("donner n");
scanf("%s",&n);
}while((n>0) && (n<=max));
return n;
}

/*fonction recherche pivor*/
int recherch_pivot(A,k)
{
int i0;
while ((i0<=n) && A[i0][k]==0)
{
i0-=1;
if (i0==(n-1))
i0=0;

}

return 0;
}

/*procedure qui saisit les ‚l‚ments d'une matrice*/
void saisi_matrice(n,A)
{
for(int i=0;i<=n;i++)
for(int=0;j<=n;j++)
{
printf("Donner A[%d][%d]",i,j);
scanf("%d",&A[i][j]);
}

}

/*procedure afficher*/
void afficher(n,x)
{
for (int i=0;i<=n;i++)
printf("%d",x[i]);

}

/*procedure remont‚e*/
void remontee(A,b,x)
{

for(int i=0;i<=(n-1);i--)
{
x[i]=b[i];
for(int j=i+1;j<=n;j++)
{
c=x[i]-(A[i][j]*x[j]);
x[i]=c/A[i][j];

}
}

}

/* procedure d'elimination*/

void elimination (A,b,k);
{
float r;
for(int i=k+1;i<=n;i++)
{
r=A[i][k]/A[k][k];
for(int j=k;j<=n;j++)
{
A[i][j]=A[i][j]-(r*A[k][j]);
b[i]=b[i]-(r*b[k]);

}
}

}

/*proc‚dure permuter */
void permuter (A,i0,k,b);
{
int tp,l2,li;
for(int j=1;j<=n;j++)
{
A[k][j]=tp;
tp=A[li][j];
A[l2][j]=tp;

}

b[li]=tp;
tp=b[l2];
b[l2]=b[li];

}

1 réponse

c-moi Messages postés 82 Statut Membre 10
 
Salut,

Si tu nous donnais les erreurs renvoyées par gcc / ton compilateur ? Je n'ai jamais développé sous Windows (je présume que tu le fais, au vu de l'entête conio.h) donc ne connait pas les différences avec le C sous Linux, mais je vois un
const max=100;
. En C (Linux) je préfère utiliser un
#define MAX 100
après l'inclusion des entêtes, ou un
static const int max = 100;
.

Bon courage,

c-moi
0