determinant (pivot)

determinant (pivot) - C - Programmation

Marsh Posté le 07-01-2013 à 02:53:18    

bonsoir ,  
dans ce code  

Code :
  1. double **change(int nbr)
  2. {
  3.     double **tab=NULL;
  4.     int i,j,k;
  5.     for(k=0; k<nbr-1; k++)
  6.     {
  7.         for(i=k+1; i<nbr; i++)
  8.         {
  9.             if(i!=k&&tab[i][k]!=0)
  10.             {
  11.                 for(j=0; j<nbr; j++)
  12.                     tab[k][j]=tab[k][j]+tab[i][j];
  13.                     //changement des lignes.
  14.             }
  15.         }
  16.     }
  17.     return tab;
  18. }
  19. double calculdet(double **tab,int nbr)
  20. {
  21.     int i;
  22.     double det;
  23.     for(i=0; i<nbr; i++)
  24.     {
  25.         det*=tab[i][i];
  26.     }
  27.     return det;
  28. }
  29. double**triangleMatrice(int nbr)
  30. {
  31.     double **tab=NULL;
  32.     int i,j,k;
  33.     double r;
  34.     for(k=0; k<nbr-1; k++)
  35.     {
  36.         for(i=k+1; i<nbr; i++)
  37.         {
  38.             if(tab[k][k]!=0)//si le pivot diffirent de 0
  39.             {
  40.                 r=-(tab[i][k]/tab[k][k]);
  41.                 for(j=k; j<nbr; j++)
  42.                     tab[i][j]=(tab[i][j]+(r*tab[k][j]));
  43.             }
  44.             else //sinon (pivot =0) on change les lignes puis on transforme la matrice
  45. //en triangulaire
  46.                 tab=change(nbr);
  47.             tab=triangleMatrice(nbr);
  48.         }
  49.         printf("%.2f",calculdet(tab,nbr));//on affiche le determinant
  50.     }
  51.     return tab;//retourner le tableau apres les changements
  52.     /*ici je veux que j'affiche les 0 que j'ai ajouté au tableau par la fonction
  53.     trianglematrice(); */
  54. }


ce code sert a calculer le determinant de la matrice en utilisant la methode pivot de gauss.http://fr.wikipedia.org/wiki/Calcu [...] t_de_Gauss
pour la fonction trianglematrice elle transforme une matrice carré en matrice triangulaire sous forme
1 2 3  
0 5 3  
0 0 2  
(exemple nbr=3)
la le déterminant sera plus facile a calculer c'est : 1*5*2
sinon le problème c'est que si le pivot ( tab[k][k] ==0 ) la on doit changer les lignes ou les colonnes puis transformer la matrice.
mon problème c'est que mes deux fonctions ya une fautes j'arrive pas a trouver.
Merci de m'aider.
 

Message cité 1 fois
Message édité par aklim2 le 07-01-2013 à 11:50:55
Reply

Marsh Posté le 07-01-2013 à 02:53:18   

Reply

Marsh Posté le 07-01-2013 à 11:23:05    

Sa serait possible d'avoir la traduction de ton post en français, svp? Parce que c'est pas très compréhensible :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 07-01-2013 à 14:52:15    

Bon, on considère que la matrice que tu veux trianguler est "bonne".
 

aklim2 a écrit :

bonsoir ,  
dans ce code  

Code :
  1. double **change(int nbr)
  2. {
  3.     double **tab=NULL;
  4.     int i,j,k;
  5.     for(k=0; k<nbr-1; k++)
  6.     {
  7.         for(i=k+1; i<nbr; i++)
  8.         {
  9.             if(i!=k&&tab[i][k]!=0)
  10.             {
  11.                   // Un compilo sérieux ne devrait pas râler là ?
  12.             }
  13.         }
  14.     }
  15.     return tab;
  16. }
  17. double**triangleMatrice(int nbr)
  18. {
  19.     double **tab=NULL;
  20.     int i,j,k;
  21.     double r;
  22.     for(k=0; k<nbr-1; k++)
  23.     {
  24.         for(i=k+1; i<nbr; i++)
  25.         {
  26.             if(tab[k][k]!=0)//si le pivot diffirent de 0
  27.             {
  28.                //  Là aussi ça me fait mal aux yeux
  29.         }
  30.         printf("%.2f",calculdet(tab,nbr));//on affiche le determinant
  31.     }
  32. }


 


 
Un petit conseil si tu est débutant : mets des "printf" à différents endroits de ton programme pour voir si les valeurs que tu as bien à ces endroits sont celles que tu souhaites.
 
Notes pour les programmeurs plus expérimentés: un debuggeur c'est bien, mais pour les débutants les printf c'est plus facile à mettre en oeuvre et à comprendre.  


Message édité par leonhard le 07-01-2013 à 14:57:17
Reply

Marsh Posté le 07-01-2013 à 15:43:11    

Bonjour !
 
Dans vos deux fonctions, vous déclarez tab à NULL, puis vous vous en servez comme si la matrice avait été allouée ... Cela ne peut conduire qu'à des plantages ...

Reply

Marsh Posté le 07-01-2013 à 19:40:02    

Merci pour les propositions :D
j'essaye de relire un peu le cours de pointeur/fonction pour réparer ces problèmes.
et je vais utiliser cette méthode de tester le code en utilisant printf.
merci encore !


Message édité par aklim2 le 07-01-2013 à 19:41:07
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed