Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1958 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Operations sur Tableau à 2 dimention

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Operations sur Tableau à 2 dimention

n°1523235
bad___day
Posté le 03-03-2007 à 14:25:38  profilanswer
 

Salut,
je galère un peut dans la création d'une fonction de calcule du déterminant d'une matrice:
pour l'algo c'est facile:
 

Code :
  1. Fonction determinant (Matrice M)
  2. debut
  3.    det = 0
  4.    pour i de 1 à M.taille
  5.       det += (-1)^(i + 1) * M[1][i] * determinant(sous_matrice(M, 1, i))
  6.    fin pour
  7.    renvoyer det
  8. fin
  9. // sous_matrice(M, i, j) renvoie la sous-matrice de M dont on a retiré la i-ème ligne et la j-ième colonne


 
alors voilà la fonction que j'ai fait pour l'instant, mais elle ne marche pas correctement :

Code :
  1. int determinant( int **mat, int N )  // N étant la dimension de la matrice (carrée)
  2. {
  3.     int c, det = 0;
  4.     if( N == 1 )
  5.         return mat[0][0];
  6.     if( N == 2 )
  7.         return ( mat[0][0] * mat[1][1] - mat[1][0] * mat[0][1] );
  8.     for(c=0; c<N; c++)
  9.     {
  10.         det += pow(-1,c) * mat[0][c] * determinant(sousMatrice(mat,N,c), N);
  11.     }
  12.     return det;
  13. }


 
Le problème est dans la fonction récursive, mais je ne trouve trop où !
 
merci


Message édité par bad___day le 05-03-2007 à 15:43:23
mood
Publicité
Posté le 03-03-2007 à 14:25:38  profilanswer
 

n°1523271
Dag elg
Posté le 03-03-2007 à 17:29:19  profilanswer
 

la sous matrice a pour dim N-1 et pas N comme marque ligne 12
donc la recursion ne se fait pas.

n°1523392
bad___day
Posté le 04-03-2007 à 15:36:34  profilanswer
 

Dag elg a écrit :

la sous matrice a pour dim N-1 et pas N comme marque ligne 12
donc la recursion ne se fait pas.


Ah oui, merci  :)  
et dire que je cherchais plus profond lol
 

n°1523846
bad___day
Posté le 05-03-2007 à 15:47:24  profilanswer
 

Sinon, j'ai essayer de faire un trie par sélection pour une matrice, voici le code:

Code :
  1. /* ordre Decroissant (par selection) */
  2. void TrierMatrice( int **mat, int N, int M )
  3. {
  4.     int i, j, L, C, posColonMax, posLignMax, temp;
  5.     for (i=0; i<N; i++)
  6.         for (j=0; j<N; j++)
  7.         {
  8.             /* Recherche du maximum après A[i][j] */
  9.             posLignMax = i;
  10.             posColonMax = j;
  11.             for (L=i; L<N; L++)
  12.                 for (C=i+1; C<M; C++)
  13.                     if ( mat[L][C] > mat[posLignMax][posColonMax] )
  14.                     {
  15.                         posLignMax = L;
  16.                         posColonMax = C;
  17.                     }
  18.             /* échange de A[I] avec le maximum */
  19.             temp = mat[i][j];
  20.             mat[i][j] = mat[posLignMax][posColonMax];
  21.             mat[posLignMax][posColonMax] = temp;
  22.         }
  23. }
 

Mais ça ne ma pas donnee un bon résultat, ça me parais pourtant juste .
encore merci.

 
Spoiler :

j'aurais due poster dans la catégorie algo ?  :p  

 


Message édité par bad___day le 07-03-2007 à 16:38:31
n°1523849
Taz
bisounours-codeur
Posté le 05-03-2007 à 15:49:38  profilanswer
 

pow(-1,c)
 
Cherche un peu, il y a beaucoup plus simple que ça, et sans calcul flottant.

n°1523850
Taz
bisounours-codeur
Posté le 05-03-2007 à 15:51:00  profilanswer
 

> determinant(sousMatrice(mat,N,c), N);
 
et gaffe à ce que retourne sousMatrice. Fuite de mémoire ?

n°1523941
bad___day
Posté le 05-03-2007 à 17:04:18  profilanswer
 

Taz a écrit :

pow(-1,c)
Cherche un peu, il y a beaucoup plus simple que ça, et sans calcul flottant.


Tu veut dire quoi ?
tu parle de mon 1er ou 2eme poste ?
 

n°1524101
Taz
bisounours-codeur
Posté le 05-03-2007 à 22:07:55  profilanswer
 

je parle de coder (-1)^(i + 1)

n°1525084
bad___day
Posté le 07-03-2007 à 11:45:29  profilanswer
 

Taz a écrit :

je parle de coder (-1)^(i + 1)


ok,
et pour le Trier de la Matrice http://forum.hardware.fr/forum2.ph [...] 0#t1523846

n°1525146
Taz
bisounours-codeur
Posté le 07-03-2007 à 12:51:37  profilanswer
 

bah j'ai pas compris. C'est quoi pour toi une matrice ordonnée ?

mood
Publicité
Posté le 07-03-2007 à 12:51:37  profilanswer
 

n°1525347
bad___day
Posté le 07-03-2007 à 15:47:38  profilanswer
 

Taz a écrit :

bah j'ai pas compris. C'est quoi pour toi une matrice ordonnée ?


O_o
Bah une matrice trier, quoi ...
 

n°1525351
Taz
bisounours-codeur
Posté le 07-03-2007 à 15:48:18  profilanswer
 

Si t'es pas capable de l'expliquer, c'est que ça doit être drôlement clair pour toi.

n°1525360
bad___day
Posté le 07-03-2007 à 15:53:11  profilanswer
 

Peut être que je devrai mettre les élément de la matrice dans un vecteur, le trier, et les remettre dans la matrice...
mais je veut le faire directement....
 
Sinon pour la fonction de déterminant, je ne vois pas où est le problème à faire pow(-1,c)
 

n°1525361
Taz
bisounours-codeur
Posté le 07-03-2007 à 15:55:30  profilanswer
 

1) tu parles de bricolage alors que tu ne sais pas clairement ce que tu veux faire. Qu'est-ce qu'une matrice ordonnée ?
2) cette expression implique un calcul flottant inutile et couteux. On peut la simplifier trivialement du fait des propriétés de (-1)^(2n) and (-1)^(2n+1)

n°1525375
bad___day
Posté le 07-03-2007 à 16:06:59  profilanswer
 

Taz a écrit :

1) tu parles de bricolage alors que tu ne sais pas clairement ce que tu veux faire. Qu'est-ce qu'une matrice ordonnée ?


Tu veut que j'explique l'algorithme ?

 


Taz a écrit :

2) cette expression implique un calcul flottant inutile et couteux. On peut la simplifier trivialement du fait des propriétés de (-1)^(2n) and (-1)^(2n+1)


Faire par exemple :

Code :
  1. int signe = 1;
  2. for(c=0; c<N; c++)
  3. {
  4.        det += signe * mat[0][c] * determinant(sousMatrice(mat,N,c), N);
  5.        signe = signe * (-1);
  6. }


?

 


Message édité par bad___day le 07-03-2007 à 16:07:11
n°1525396
Taz
bisounours-codeur
Posté le 07-03-2007 à 16:25:32  profilanswer
 

1) non, je veux savoir ce qu'est une matrice ordonnée.
2) par exemple !

n°1525573
el muchach​o
Comfortably Numb
Posté le 07-03-2007 à 22:06:04  profilanswer
 

Très inefficace, comme manière de calculer un déterminant. Cette définition n'a pas d'intérêt pratique. Il vaut mieux trigonaliser la matrice avec une élimination de Gauss et faire le produit des éléments diagonaux.


Message édité par el muchacho le 07-03-2007 à 22:20:47
n°1525581
Taz
bisounours-codeur
Posté le 07-03-2007 à 22:25:20  profilanswer
 

bah quoi, n! c'est bien non ?

n°1525584
el muchach​o
Comfortably Numb
Posté le 07-03-2007 à 22:30:29  profilanswer
 

Ah non au contraire c'est catastrophique. En tout cas, c'est bcp moins bien que O(n^3) (Gauss).

 

Essaye de calculer le déterminant d'une matrice 30x30 avec n! Tu te retrouves avec du 10^32 calculs, t'as intérêt à être patient !
Alors que 30^3 = 27 000


Message édité par el muchacho le 07-03-2007 à 22:32:19
n°1525619
Taz
bisounours-codeur
Posté le 08-03-2007 à 00:25:15  profilanswer
 

humour ...

n°1525623
el muchach​o
Comfortably Numb
Posté le 08-03-2007 à 00:40:39  profilanswer
 

Arf, j'ai eu un doute, mais à force, on n'a plus l'habitude de deviner sans le smiley qui signale "attention ironie"...


Message édité par el muchacho le 08-03-2007 à 00:41:52
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Operations sur Tableau à 2 dimention

 

Sujets relatifs
[newbie] Spécifier la taille d'un tableau par une variable ??[CSS/HTML] double couleurs de fond de tableau
[Resolu] Tableau de byte -> floatTaille d'un tableau associatif
Tableau : scroller le contenu et pas l'enteteParser un tableau associatif complexe en JS
Problème avec tableau dynamique à deux dimensionsPbleme parcours tableau + ajout dans variable
tableau a deux dimensions d'objetsCréer un tableau grâce à une boucle
Plus de sujets relatifs à : Operations sur Tableau à 2 dimention


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR