begin process at 2012 02 12 10:24:36
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Maths

 > 

la methode d'echange


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

la methode d'echange

lundi 19 mai 2008 à 21:16:32 | la methode d'echange

cleopatre1988



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]);
     }
   }

lundi 19 mai 2008 à 21:27:36 | Re : la methode d'echange

Pistol_Pete

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 : [ Lien ]

lundi 19 mai 2008 à 21:44:54 | Re : la methode d'echange

jfrancois

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

lundi 19 mai 2008 à 22:53:05 | Re : la methode d'echange

cleopatre1988

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]);
     }
   }
}  



  
  
lundi 19 mai 2008 à 23:15:23 | Re : la methode d'echange

Pistol_Pete

J 'ai exécuté le programme et paf : Division par zéro...

Mon site internet : [ Lien ]

lundi 19 mai 2008 à 23:37:59 | Re : la methode d'echange

jfrancois

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<iDimension ; ++i)
   {
      for (j=0 ; j<iDimension ; ++j)
      {
         printf("A[%d][%d] = ",i,j);
         scanf("%d",&A[i][j]);
      }
   }

   // --- 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<iDimension ; ++i)
   {
      for (j=0 ; j<iDimension ; ++j)
      {
         if (A[i][j] > 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<iDimension ; ++j)
      A[i0][j] = -A[i0][j] / iPivot;

   for (i=0 ; i<iDimension ; ++i)
      A[i][j0] = A[i][j0] / iPivot;

   // --- 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<iDimension ; ++i)
   {
      for (j=0 ; j<iDimension ; ++j)
      {
         printf(" %d ",A[i][j]);
      }
      printf("\n");
   }
   printf("\n");
}

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



Cette discussion est classée dans : printf, void, for, i0, j0


Répondre à ce message

Sujets en rapport avec ce message

probleme d'allocation d'une matrice [ par emomar ] salut à tous voila j'ai un probleme avec la fonction remplir voila le code si quelqu'un peut m'aider merci code : [code=cpp]#include #include int n fonction en c [ par badsha ] j'ai un code qui inverse une matrice et je veux l'appliquer sur plusieurs matrices je n'arrive pas à mettre à l'entrée de la fonction des matrices, je aide pour ajouter 2 nombre au tableau [ par Rido159 ] [size=100][b]Bonjour je suis débutant en C, j ai besoin de votre aide svp [^^mad5] j ai déclarer un tableau , j ai fais l'initialisation mais je suis Table Ascii [ par Oxie666 ] Hello, je suis tout nouveau ici (et forcement méga débutant) et j'ai une question :J'ai écrit un petit programme afin d'avoir sous la main une table a pgcd [ par cherif2009 ] excusez moi voici le code #include #include #include void pgcd(); main() { pgcd(); } void pgcd() { int a,b,pg; printf("enter le premier entier"); scan Probleme : Sudoku en C [ par seth59222 ] Bonsoir, voila je suis actuellement en première année d'info, donc assez novice et je viens de créer ce petit bout de programme en C qui consiste a ré appel de fonction [ par ibnjabal ] Bonjour j'essaie de faire une fonction qui calcule la somme de deux matrice et ça fonctionne bien mais seulement c'est quand j'essaie de le faire dans pyramides [ par zell61 ] bonjour j ai un petit probleme j ai reussi a faire un code pour faire une pyramide en visual c++ que voici #include void main() { int n,j,i; printf(" rectification dune code C et/ou aide sur l'algorithme [ par negets ] bonjour, besoin d'aide; j'aimerai dégager l'algorithme de ce code afin de le programmer sous matlab je connais plus rien en C et C++(je commence à lir Problème de transport primal dual [ par mouradmaster ] Bonjour tous, Je cherche un code source (en C, C++, java ou C#) concernant le problème de transport par primal dual (optimisation des coûts !). En ef


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,764 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales