La methode d'echange

Signaler
Messages postés
4
Date d'inscription
mardi 13 mai 2008
Statut
Membre
Dernière intervention
19 mai 2008
-
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
-
salut
  bon j'essai de faire un programme qui correspond au methode d'echange
d'une matrice,voila le script en langage c mais il y'a un probleme dans la fonction de  trait.

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



int A[50][50];
int B[50];
int X[50];
int i,j,n,choix;


main()
{  void lire(void);
   void trait(void);
       lire();
       trait();
      
       system("pause");
}
 
void lire(void)   //debut de fonction
{
printf("Entrer la dimension de la matrice A\n");
scanf("%d",&n);
if ((n<0)||(n==0)) printf(" entrer une dimension valide \n");


for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{ printf(" A[%d][%d]=",i,j);
  scanf("%d",&A[i][j]);
}
}
 printf(" la matrice est :\n");
  for(i=1;i<=n;i++)
{
     for(j=1;j<=n;j++)
  {       printf(" %d ",A[i][j]);
         
  }
    printf("\n");
}
}                 // fin de fonction


void trait(void)
{ int piv=1,i0,j0;
 
 for(i=1;i<=n;i++)
 {
     for(j=1;j<=n;j++)
     {  if (A[i][j]>piv)  { i0=i;j0=j;piv=A[i][j];}
     }
 }
 
A[i0][j0]= (float)(1/A[i0][j0]);


for (j=1;j<=n;j++)
 {  A[i0][j]=(float)(-A[i0][j]/A[i0][j0]);
 }
 
for(i=1;i<=n;i++)
 {  A[i][j0]=(float)(A[i][j0]/A[i0][j0]);
 }
 
 printf(" la matrice resultat \n");
    for(i=1;i<=n;i++)
   {
     for(j=1;j<=n;j++)
     { printf(" %d ",A[i][j]);
     }
   }

5 réponses

Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Salut

J'ai pas regarder en détail le code, mais n'oublie pas qu'un tableau en C est indicé de 0 à n-1 et NON de 1 à n.
Ici dans toutes tes boucles, tu écris et tu lis en dehors de ton tableau.

A+
Mon site internet : http://pistol.petesampras.free.fr
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Bonsoir,

1) Pas de prototypes dans une fonction.
2) if ((n<0)||(n==0)) ... : if (n <= 0) ...
3) Les indices commencent à zéro.
4) A[i][j0]=(float)(A[i][j0]/A[i0][j0]); : A est entier, le cast avec float ne sert à rien. Et les divisions par zéro ne sont pas exclues.

Jean-François
Messages postés
4
Date d'inscription
mardi 13 mai 2008
Statut
Membre
Dernière intervention
19 mai 2008

bon merci pour vos reponses j'ai fais ce que vous avez dit et voila mon code
mais il y'a toujours le probleme:je n'ai pas compris (pas de prototype dans une fonction).
#include <stdio.h>
#include<stdlib.h>

int A[50][50];
int B[50];
int X[50];
int i,j,n,choix;



main()
{ void lire(void);
void trait(void);

lire();
trait();

system("pause");
}

void lire(void) //debut de fonction
{
printf("Entrer la dimension de la matrice A\n");
scanf("%d",&n);


for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{ printf(" A[%d][%d]=",i,j);
scanf("%d",&A[i][j]);
}
}
printf(" la matrice est :\n");
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{ printf(" %d ",A[i][j]);

}
printf("\n");
}
} // fin de fonction

void trait(void)
{ int piv=1,i0,j0;

for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{ if (A[i][j]>piv) { i0=i;j0=j;piv=A[i][j];}
}
}

A[i0][j0]= (float)(1/A[i0][j0]);

for (j=0;j<=n-1;j++)
{ A[i0][j]=(-A[i0][j]/A[i0][j0]);
}

for(i=0;i<=n-1;i++)
{ A[i][j0]=(A[i][j0]/A[i0][j0]);
}

printf(" la matrice resultat \n");
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{ printf(" %d ",A[i][j]);
}
}


}





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

int A[50][50];
int B[50];
int X[50];
int i,j,n,choix;



main()
{ void lire(void);
void trait(void);

lire();
trait();

system("pause");
}

void lire(void) //debut de fonction
{
printf("Entrer la dimension de la matrice A\n");
scanf("%d",&n);


for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{ printf(" A[%d][%d]=",i,j);
scanf("%d",&A[i][j]);
}
}
printf(" la matrice est :\n");
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{ printf(" %d ",A[i][j]);

}
printf("\n");
}
} // fin de fonction

void trait(void)
{ int piv=1,i0,j0;

for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{ if (A[i][j]>piv) { i0=i;j0=j;piv=A[i][j];}
}
}

A[i0][j0]= (float)(1/A[i0][j0]);

for (j=0;j<=n-1;j++)
{ A[i0][j]=(-A[i0][j]/A[i0][j0]);
}

for(i=0;i<=n-1;i++)
{ A[i][j0]=(A[i][j0]/A[i0][j0]);
}

printf(" la matrice resultat \n");
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{ printf(" %d ",A[i][j]);
}
}
}
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
J 'ai exécuté le programme et paf : Division par zéro...

Mon site internet : http://pistol.petesampras.free.fr
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Quelques modifs notamment au niveau du pivot mais il faudrait vérifier la méthode :

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




// --- Prototypes des fonctions
void LireMatrice(void);
void TraiterMatrice(void);
void VoirMatrice(const char*);




// --- Variables globales
int A[50][50];
int iDimension;




 




// ===================
// Fonction principale
// ===================
int main(void)
{
   LireMatrice();
   TraiterMatrice();
   system("pause");
   return 0;
}
 






// ===============
// Lire la matrice
// ===============
void LireMatrice(void)
{
   int i,j;




   // --- Saisir la dimension de la matrice
   printf("Dimension de la matrice A : ");
   scanf("%d",&iDimension);




   // --- Saisir la matrice
   for (i=0 ; i




   // --- Visualiser la matrice saisie
   VoirMatrice("A");
}




 




// ==================
// Traiter la matrice
// ==================
void TraiterMatrice(void)
{
   int i,j;




   // --- Recherche du pivot
   int i0,j0,iPivot = - INT_MAX;
   for (i=0 ; i iPivot)
         {
            i0     = i;
            j0     = j;
            iPivot = A[i][j];
         }
      }
   }
   printf("Pivot A[%d][%d] = %d\n",i0,j0,iPivot);



   A[i0][j0] = 1 / iPivot;



   for (j=0 ; j



   for (i=0 ; i




   // --- Visualiser la matrice résultat
   VoirMatrice("resultat");
}




 




// ===============
// Voir la matrice
// ===============
void VoirMatrice(const char* pszTexte)
{
   int i,j;



   printf("\nMatrice %s :\n",pszTexte);
   for (i=0 ; i

Ce qui donne :

Dimension de la matrice A : 3
A[0][0] = 1
A[0][1] = 2
A[0][2] = 3
A[1][0] = 4
A[1][1] = 5
A[1][2] = 6
A[2][0] = 7
A[2][1] = 8
A[2][2] = 9



Matrice A :
 1  2  3
 4  5  6
 7  8  9



Pivot A[2][2] = 9



Matrice resultat :
 1  2  0
 4  5  0
 0  0  0



Jean-François