Posez votre question Signaler

Matrice Ax = b

maverick1984 25Messages postés 25 septembre 2007Date d'inscription - Dernière réponse le 18 oct. 2007 à 12:19
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];
}
Lire la suite 

Matrice Ax = b »

1 réponses
Réponse
+0
moins plus
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
Ajouter un commentaire
Ce document intitulé « matrice Ax = b » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook