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

  FORUM HardWare.fr
  Programmation
  C

  plynôme (fonction)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

plynôme (fonction)

n°1348128
big_dadi_f​at
Posté le 17-04-2006 à 14:46:04  profilanswer
 

 :)  salut  
je chairche un site ou une documentation ou cour tuto... ,  
sur :
comment faire des programmes qui construise une matrice à partire d'un polynome
faire la muliplication (l'adition la soustraction) de 2 polynômes .   (j'ai un probleme avec un exo de ce genre)
 
en langage C
 
merci :jap:  :jap:  :jap:

mood
Publicité
Posté le 17-04-2006 à 14:46:04  profilanswer
 

n°1348129
Ayuget
R.oger
Posté le 17-04-2006 à 14:51:42  profilanswer
 

tu vas nous faire autant de topic que de questions de ton tp?

n°1348135
big_dadi_f​at
Posté le 17-04-2006 à 14:54:28  profilanswer
 

Ayuget a écrit :

tu vas nous faire autant de topic que de questions de ton tp?


 
!!!
 
 
 
 
desoler

n°1348156
Emmanuel D​elahaye
C is a sharp tool
Posté le 17-04-2006 à 15:17:04  profilanswer
 

big_dadi_fat a écrit :

comment faire des programmes qui construise une matrice à partire d'un polynome
faire la muliplication (l'adition la soustraction) de 2 polynômes .   (j'ai un probleme avec un exo de ce genre)


Tu as oublié de poster le code avec lequel tu as un problème...
 
Et au lieu de passer du temps avec la déco, relis toi, parce que ton orthopraphe est déplorable rendant ton texte presque incompréhensible...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1349843
big_dadi_f​at
Posté le 19-04-2006 à 16:34:32  profilanswer
 

bon
je ne vais pas vous demander de resoudre le problaime à ma place  ,
mais ce que je vous demanderer c'est d'esayer de m'expliquer cette exercice (parceque je n'est pas bien compris ce qu'il faut faire):    le voici :
_________________________________________
 
On peut representer un polynome à deux variables x et y par une matrice P de taille m×n, oû m−1et n−1 sont les plus grands exposants respectivement de x et y,  
et oû la valeur P[i][j] represente lecoefficient du monome   x i  y j .
Le polynome f(x,y) = x^3+ 2 x^2 y^2 − 4xy^3 + 7xy^2 + 3y  
sera par exemple represente par la matricesuivante :
 
0 3 0 0
0 0 7 -4
0 0 2 0
1 0 0 0
 
On vous demande d'écrire un programme representant de tels polynomes.  
Les fonctions suivantes devront être implementées :
– constructeur,
– addition de deux polynomes,
– soustraction de deux polynomes,
– multiplication de deux polynomes.
__________________________________________
si c'été un exo destiner a vous comment vous le compreniez               ?
 :)

n°1349854
_darkalt3_
Proctopathe
Posté le 19-04-2006 à 16:41:12  profilanswer
 

Tu ne comprends pas quoi là dedans :??:

n°1349856
Emmanuel D​elahaye
C is a sharp tool
Posté le 19-04-2006 à 16:42:54  profilanswer
 

big_dadi_fat a écrit :

bon
je ne vais pas vous demander de resoudre le problaime à ma place  ,
mais ce que je vous demanderer c'est d'esayer de m'expliquer cette exercice (parceque je n'est pas bien compris ce qu'il faut faire):    le voici :


Hors-sujet. C'est d'abord un problème d'analyse, de conception, d'algorithme... Voir le forum ALGO


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1349861
franceso
Posté le 19-04-2006 à 16:45:55  profilanswer
 

il n'y a pas grand chose à comprendre : tu dois implémenter une structure permettant de travailler sur des polynômes de deux variables. On t'explique comment représenter de tels polynômes grâce à une matrice et on te donne la liste minimale des fonctions à implémenter pour gérer cette structure.
 
Commence à écrire ce que tu peux et reviens nous demander si tu as des questions plus précises.

Message cité 1 fois
Message édité par franceso le 19-04-2006 à 16:47:53

---------------
TriScale innov
n°1349867
big_dadi_f​at
Posté le 19-04-2006 à 16:54:13  profilanswer
 

franceso a écrit :


Commence à écrire ce que tu peux et reviens nous demander si tu as des questions plus précises.


 :love:  :love:  :love:

n°1349872
big_dadi_f​at
Posté le 19-04-2006 à 17:00:21  profilanswer
 

bon  
a ceque j'ai comprit l'utilisateur doit saisire deux polynômes , ensuite grace à la fonction constructeur
je doit les trensformer sous forme de matrices ,
et je doit ensuite utiliser les fonction :addition et soustraction et multiplication , pour calculer la somme , la difference et le produit de ces 2 polymomes ;   enfin j'affiche les resultat sous forme polynômiale ?
 
ces ca ou je me trompe  :??:  
 
merci   :)

mood
Publicité
Posté le 19-04-2006 à 17:00:21  profilanswer
 

n°1350022
Sve@r
Posté le 19-04-2006 à 19:34:01  profilanswer
 

Tu m'excuseras de commencer par corriger ton texte...
 

big_dadi_fat a écrit :

bon  
à ce que j'ai compris l'utilisateur doit saisir deux polynômes , ensuite grâce à la fonction constructeur  
je dois les transformer sous forme de matrices , et je doit ensuite utiliser les fonction :addition et soustraction et multiplication , pour calculer la somme , la difference et le produit de ces 2 polynômes ;   enfin j'affiche les resultat sous forme polynômiale ?  
 
c'est ça ou je me trompe  :??:  
 
merci   :)


 
Exactement.


Message édité par Sve@r le 19-04-2006 à 19:37:22

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1357141
ema83
ema83
Posté le 01-05-2006 à 14:32:29  profilanswer
 

salut tous le monde,  
j'ai bien compris ce qu'il veut dire, mais je suis qu'une debutante j'ai essayer de lui faire le programme mais ça n'a pas marcher.
mon idée c'est de travailler ce programme avec les strucures (struct).
tous le probléme est dans le constructeure c'est a dire le contruction des matrices pour les deux polynomes, et grace a ces 2 matrices on peut faire on fait la somme,multiplication et soustraction des polynomes.
 on construit la matrice comme suit:
 la plus grande puissance de x c'est le nombre de ligne et celle de y c'est le nombre de colonnes et on voit ça clairement deans son exemple.
                           
                     
[size=2]                   [/size]0 3 0 0
                   0 0 7 -4
                   0 0 2 0
                   1 0 0 0

[size=2]la lus grande puissance de x c'est 3 don ça nous fait 4 lignes
[/size][size=2]x^0 x^1 x^2 et x^3
[/size][size=2]et la meme chose pour y
[/size]


---------------
Il faut aider les gens pour trouver l’aide autre fois
n°1357484
el muchach​o
Comfortably Numb
Posté le 02-05-2006 à 00:15:01  profilanswer
 

big_dadi, c'est trop te demander que de passer ton texte à un correcteur grammatical (celui de Word par ex) avant de poster ?
Je pense que tout le monde s'accorde sur le fait que ton orthographe est navrante de nullité et c"est franchement désagréable à lire.

Message cité 2 fois
Message édité par el muchacho le 02-05-2006 à 00:15:59

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1357495
Sve@r
Posté le 02-05-2006 à 00:49:55  profilanswer
 

el muchacho a écrit :

big_dadi, c'est trop te demander que de passer ton texte à un correcteur grammatical (celui de Word par ex) avant de poster ?
Je pense que tout le monde s'accorde sur le fait que ton orthographe est navrante de nullité et c"est franchement désagréable à lire.


 
Ben Harkonnen  l'a viré pour 2 jours => http://forum.hardware.fr/hardwaref [...] 8960-1.htm


Message édité par Sve@r le 02-05-2006 à 00:51:07

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1358161
brojnev
Posté le 02-05-2006 à 22:35:23  profilanswer
 

el muchacho a écrit :

big_dadi, c'est trop te demander que de passer ton texte à un correcteur grammatical (celui de Word par ex) avant de poster ?
Je pense que tout le monde s'accorde sur le fait que ton orthographe est navrante de nullité et c"est franchement désagréable à lire.


 
À ce qu'il m'a dit en privé, il est étranger donc, on pourrait être indulgent quant à son orthographe...

n°1359480
big_dadi_f​at
Posté le 04-05-2006 à 13:14:45  profilanswer
 

Re salut à tous  :hello:               ( et désolé )[u]
 
Bon, j'est fais le programme avec une structure, mais je ne suis qu'un débutant en C , alors je n'est pas bien bien utiliser ce que vous m'aviez déjà proposer dans le topique précédant ,  
alors ce que je veux c'est une amélioration de ce code --> sans utiliser de nouvelle notion pour moi
(je rappelle que je suis débutant) [i]comme les allocation dynamique ou ... etc .
Donc je veux l'améliorer en laissant mes idées comme elles sont.
 
Voici le code:
 

Code :
  1. #include<stdio.h>
  2. #define n 5
  3. #define n1 1   /*le plus grand exposent de X (dans le 1er poly)*/
  4. #define m1 2   /*le plus grand exposent de Y (dans le 1er poly)*/
  5. #define n2 1   /*le plus grand exposent de X (dans le 2eme poly)*/
  6. #define m2 3   /*le plus grand exposent de Y (dans le 2eme poly)*/
  7. struct poly
  8. {
  9.  int coef;      /* pour les coefficients */
  10.  int px;     /* pour les puisance de x */
  11.  int py;     /* pour les puisance de y */
  12. };
  13. /*______________________________________________________________*/
  14. void constructeur(poly P[],int mat[][n],int l,int c)
  15. {
  16.  int i,j;
  17.  for(i=0;i<=l;i++)
  18.   for(j=0;j<=c;j++)
  19.   {
  20.    printf(" le coeficien du monome  ( x^%d y^%d )   : ",i,j);
  21.    scanf("%d",&P[(c+1)*i+j].coef);
  22.    P[(c+1)*i+j].px = i;
  23.    P[(c+1)*i+j].py = j;
  24.    mat[i][j] = P[(c+1)*i+j].coef;
  25.   }
  26. }
  27. /*______________________________________________________________*/
  28. void addition( int a[][n] , int b[][n] , poly P[] , int l , int c )
  29. {
  30. int i,j;
  31. for(i=0;i<=l;i++)
  32.  for(j=0;j<=c;j++)
  33.  {
  34.    P[(c+1)*i+j].coef = a[i][j]+b[i][j];
  35.    P[(c+1)*i+j].px = i;
  36.    P[(c+1)*i+j].py = j;
  37.  }
  38. }
  39. /*_______________________________________________________________*/
  40. void soustraction( int a[][n] , int b[][n] , poly P[] , int l , int c )
  41. {
  42. int i,j;
  43. for(i=0;i<=l;i++)
  44.  for(j=0;j<=c;j++)
  45.  {
  46.    P[(c+1)*i+j].coef = a[i][j]-b[i][j];
  47.    P[(c+1)*i+j].px = i;
  48.    P[(c+1)*i+j].py = j;
  49.  }
  50. }
  51. /*______________________________________________________________*/
  52. void multiplication( int a[][n] , int b[][n] )
  53. {
  54. int i,j,g,z,multip[2*n][2*n];
  55. for(i=0;i<2*n;i++)
  56. for(j=0;j<2*n;j++)
  57.  multip[i][j] = 0;
  58. for(i=0;i<=n1;i++)
  59. for(j=0;j<=m1;j++)
  60.   for(g=0;g<=n2;g++)
  61.   for(z=0;z<=m2;z++)
  62.   multip[i+g][j+z] += a[i][j] * b[g][z];
  63. for(i=0;i<=n1+n2;i++)
  64. for(j=0;j<=m1+m2;j++)
  65.  if(multip[i][j] != 0)
  66.   printf(" +(%d) X%d Y%d",multip[i][j],i,j);
  67. }
  68. /*______________________________________________________________*/
  69. Affich_poly( poly P[] , int dim )
  70. {
  71. int i;
  72. for(i=0;i<dim;i++)
  73.  if(P[i].coef != 0)
  74.    printf(" +(%d) X%d Y%d",P[i].coef,P[i].px,P[i].py);
  75. }
  76. /*______________________________________________________________*/
  77. void ligne(void)
  78. { printf("\n\n------------------------------------------\n\n" ); }
  79. /*______________________________________________________________*/
  80. int main()
  81. {
  82. int  t1[n][n] , t2[n][n]  ,i,j,ll,cc;
  83. poly P1[n*n] , P2[n*n] , P3[n*n];
  84. /* initialisation DE t1 et t2*/
  85. for(i=0;i<n;i++)
  86. for(j=0;j<n;j++)
  87.  t1[i][j] = t2[i][j] = 0;
  88. constructeur(P1,t1,n1,m1);
  89. ll=(n1+1)*(m1+1); /* c'est pour la dimention du vect P1 */
  90. printf("\nP1(X,Y) =" );
  91. Affich_poly(P1,ll);
  92. ligne(); /*______________________________________________*/
  93. constructeur(P2,t2,n2,m2);
  94. ll=(n2+1)*(m2+1);   /* c'est pour la dimention du vect P2 */
  95. printf("\nP2(X,Y) =" );
  96. Affich_poly(P2,ll);
  97. ligne(); /*______________________________________________*/
  98. /* prevoir les plus grandes dimentions pour
  99. les utiliser dans l'addition et la soustraction */
  100. if(n1>n2) ll=n1; else ll=n2;
  101. if(m1>m2) cc=m1; else cc=m2;
  102. addition( t1,t2,P3,ll,cc );
  103. printf("P1 + P2 =" );
  104. Affich_poly(P3,(ll+1)*(cc+1));
  105. ligne(); /*______________________________________________*/
  106. soustraction( t1,t2,P3,ll,cc );
  107. printf("P1 - P2 =" );
  108. Affich_poly(P3,(ll+1)*(cc+1));
  109. ligne(); /*______________________________________________*/
  110. printf("P1 * P2 =" );
  111. multiplication( t1,t2 );
  112. return 0;
  113. }

 
 
merci à tous,  
et surtout pour brojnev
 
...

n°1359584
franceso
Posté le 04-05-2006 à 14:14:11  profilanswer
 

salut :hello:
 
je ne suis pas sûr de bien comprendre ton type de données : ta structure poly ne stocke pas un polynome complet, mais seulement un monôme. Si j'ai bien compris, ton polynôme est un tableau de monômes. Toujours si j'ai bien compris, tu trouves dans P[(c+1)*i+j] le monôme de degré (i,j). L'information est donc redondante : tu auras toujours P[(c+1)*i+j].px = i et P[(c+1)*i+j].py = j.
 
A mon avis (et pour rester dans le cadre des tableaux statiques), tu devrais plutôt utiliser une structure de données du type :

Code :
  1. #define n 5 /* le plus grand degre possible pour les polynomes */
  2. struct poly
  3. {
  4.   int dx; /* degre en x */
  5.   int dy; /* degre en y */
  6.   double coeffs[n][n]; /* la tableau des coefficients du polynôme */
  7. };


---------------
TriScale innov
n°1359620
big_dadi_f​at
Posté le 04-05-2006 à 14:35:36  profilanswer
 

franceso a écrit :

salut :hello:
 
je ne suis pas sûr de bien comprendre ton type de données : ta structure poly ne stocke pas un polynome complet, mais seulement un monôme. Si j'ai bien compris, ton polynôme est un tableau de monômes. Toujours si j'ai bien compris, tu trouves dans P[(c+1)*i+j] le monôme de degré (i,j). L'information est donc redondante : tu auras toujours P[(c+1)*i+j].px = i et P[(c+1)*i+j].py = j.
 
A mon avis (et pour rester dans le cadre des tableaux statiques), tu devrais plutôt utiliser une structure de données du type :

Code :
  1. #define n 5 /* le plus grand degre possible pour les polynomes */
  2. struct poly
  3. {
  4.   int dx; /* degre en x */
  5.   int dy; /* degre en y */
  6.   double coeffs[n][n]; /* la tableau des coefficients du polynôme */
  7. };



 
C’est vraie que c’est vachement plus efficace , mais je ne vois pas comment je peux accéder au tableau des coeffs pour le remplir , pour les 2 polynôme ?
Est se que je déclare 2 variable a et b du type poly,  et ensuite je le remplie grâce à
 a.coeffs[i][j]       et      b.coeffs[i][j] ,
Ou comment je dois faire ?
 
 :sweat:  
 
 

n°1359629
franceso
Posté le 04-05-2006 à 14:41:06  profilanswer
 

big_dadi_fat a écrit :

Est se que je déclare 2 variable a et b du type poly,  et ensuite je le remplie grâce à
 a.coeffs[i][j]       et      b.coeffs[i][j]

oui, c'est comme ça qu'il faut faire.


---------------
TriScale innov
n°1359643
big_dadi_f​at
Posté le 04-05-2006 à 14:45:25  profilanswer
 

franceso a écrit :

oui, c'est comme ça qu'il faut faire.


 
 :)  :)  :)    OK , je vais essayer   :)  :)  :)  
 
 
merci
 
 
 

n°1359868
big_dadi_f​at
Posté le 04-05-2006 à 17:33:32  profilanswer
 

Je crois que j’ai un peut resolue le probléme , presque tout les fonction marche sauf :
Celle de la soustraction , ca m’affiche un polynôme FAUX , :(  
Le resultat du polynôme   P1 – P2   qui s’affiche n’est meme pas complait ,
Et je ne vois pas ou se trouve le probléme tout me parait parfait ,
(j’est pris en compt les plus grande puisance des 2 poly , comme pour l’addition mais ca ne marche pas  :heink: )
 
SVP , aider moi , je suis perdu … :(  
 
 
 
 
 
 
 
 
 
 
 
 

n°1359877
big_dadi_f​at
Posté le 04-05-2006 à 17:42:26  profilanswer
 

aidez moi svp :
 
voici le code:
 

Code :
  1. #include<stdio.h>
  2. #define n 5    /* le plus grand degre possible pour les polynomes c'est n-1 */
  3. struct poly
  4. {
  5.   int dx; /* plus grand degre de X */
  6.   int dy; /* plus grand degre de Y */
  7.   int coef[2*n][2*n]; /*le tableau des coefficients du polynome
  8.        on declare avec le cas generale de 2*n
  9.        car on vas utiliser cette meme structure
  10.        pour representer le poly de multiplication*/
  11. };
  12. /*______________________________________________________________*/
  13. void constructeur( poly *P )
  14. {
  15.  int i,j;
  16.  /* l'initialisation */
  17.   for(i=0;i<2*n;i++)
  18.    for(j=0;j<2*n;j++)
  19.     P->coef[i][j] = 0;
  20.  printf("le plus grand exposent de x :  " );  scanf("%d",&P->dx);
  21.  printf("le plus grand exposent de y :  " );  scanf("%d",&P->dy);
  22.  for(i=0;i<=P->dx;i++)
  23.   for(j=0;j<=P->dy;j++)
  24.   {
  25.    printf(" le coeficien du monome  ( x^%d y^%d )   : ",i,j);
  26.    scanf("%d",&P->coef[i][j]);
  27.   }
  28. }
  29. /*______________________________________________________________*/
  30. void addition( poly *A , poly *B , poly *P )
  31. {
  32. int i,j;
  33. for(i=0;i<=P->dx;i++)
  34.  for(j=0;j<=P->dy;j++)
  35.   P->coef[i][j] = A->coef[i][j] + B->coef[i][j];
  36. }
  37. /*_______________________________________________________________*/
  38. void soustraction( poly *A , poly *B , poly *P )
  39. {
  40. int i,j;
  41. for(i=0;i<=P->dx;i++)
  42.  for(j=0;j<=P->dy;j++)
  43.   P->coef[i][j] = A->coef[i][j] - B->coef[i][j];
  44. }
  45. /*______________________________________________________________*/
  46. void multiplication( poly *A , poly *B , poly *P )
  47. {
  48. int i,j,g,z;
  49. for(i=0;i<=P->dx;i++)
  50.  for(j=0;j<=P->dy;j++)
  51.   P->coef[i][j] = 0;
  52. for(i=0;i<=A->dx;i++)
  53. for(j=0;j<=A->dy;j++)
  54.   for(g=0;g<=B->dx;g++)
  55.   for(z=0;z<=B->dy;z++)
  56.   P->coef[i+g][j+z] += A->coef[i][j] * B->coef[g][z];
  57. }
  58. /*______________________________________________________________*/
  59. void Affich_poly( poly *PP )
  60. {
  61. int i,j;
  62. for(i=0;i<=PP->dx;i++)
  63.  for(j=0;j<=PP->dy;j++)
  64.    if(PP->coef[i][j] != 0)
  65.     printf(" +(%d) X%d Y%d",PP->coef[i][j],i,j);
  66. }
  67. /*______________________________________________________________*/
  68. void ligne(void)
  69. { printf("\n\n ------------------------------------------\n\n" ); }
  70. /*______________________________________________________________*/
  71. int main()
  72. {
  73. poly P1 , P2 , P3 , P4 , P5;
  74. constructeur(&P1);
  75. printf("\nP1(X,Y) =" );
  76. Affich_poly( &P1 );
  77. ligne(); /*______________________________________________*/
  78. constructeur( &P2 );
  79. printf("\nP2(X,Y) =" );
  80. Affich_poly( &P2 );
  81. ligne(); /*______________________________________________*/
  82. /* prevoir les plus grandes dimentions
  83. pour l'addition et la soustraction */
  84. if(P1.dx>=P2.dx) { P3.dx = P1.dx;        P4.dx = P1.dx; }
  85. else  { P3.dx = P2.dx;        P4.dx = P2.dx; }
  86. if(P1.dy>=P2.dy) { P3.dy = P1.dy;        P4.dx = P1.dy; }
  87. else    { P3.dy = P2.dy;      P4.dx = P2.dy; }
  88.   /*______________________________________________*/
  89. addition( &P1 , &P2 , &P3 );
  90. printf("\nP1 + P2 =" );
  91. Affich_poly( &P3 );
  92. ligne(); /*______________________________________________*/
  93. soustraction( &P1 , &P2 , &P4 );
  94. printf("\nP1 - P2 =" );
  95. Affich_poly( &P4 );
  96. ligne(); /*______________________________________________*/
  97. /* prevoir les  dimentions (de X et de Y)
  98. pour la multiplication */
  99. P5.dx = P1.dx + P2.dx;
  100. P5.dy = P1.dy + P2.dy;
  101. multiplication( &P1 , &P2 , &P5 );
  102. printf("\nP1 * P2 =" );
  103. Affich_poly( &P5 );
  104. return 0;
  105. }

n°1359904
franceso
Posté le 04-05-2006 à 18:03:57  profilanswer
 

  • le calcul des degrés des polynomes renvoyés par une addition ou une soustraction doivent être faits dans les fonctions correspondantes.
  • fais attention : mathématiquement, tu as uniquement l'inégalité deg(A+B) <= max( deg(A), deg(B) ). L'égalité n'est vraie que si les monômes de plus haut degré de A et B sont différents.
  • dans les boucles de tes fonctions addition() et soustraction(), tu utilises des coefficients de A et B qui ne sont pas forcément définis (ici, je pense que ça ne pose pas trop de problèmes car tes matrices sont statiques et ont donc normalement été initialisées à 0)
  • il y a une coquille (un copier/coller malheureux ?) dans le calcul des degrés des résultats de la multiplication / soustracion (dans le cas où P1.dy>=P2.dy)


Essaie de corriger ces détails pour voir si c'est pas de là que viennent tes problèmes


---------------
TriScale innov
n°1359914
big_dadi_f​at
Posté le 04-05-2006 à 18:17:53  profilanswer
 

franceso a écrit :

  • le calcul des degrés des polynomes renvoyés par une addition ou une soustraction doivent être faits dans les fonctions correspondantes.
  • fais attention : mathématiquement, tu as uniquement l'inégalité deg(A+B) <= max( deg(A), deg(B) ). L'égalité n'est vraie que si les monômes de plus haut degré de A et B sont différents.
  • dans les boucles de tes fonctions addition() et soustraction(), tu utilises des coefficients de A et B qui ne sont pas forcément définis (ici, je pense que ça ne pose pas trop de problèmes car tes matrices sont statiques et ont donc normalement été initialisées à 0)
  • il y a une coquille (un copier/coller malheureux ?) dans le calcul des degrés des résultats de la multiplication / soustracion (dans le cas où P1.dy>=P2.dy)


Essaie de corriger ces détails pour voir si c'est pas de là que viennent tes problèmes


 
 
MERCI
OK je vais essayer de corrigé ces détails ,  
 
mes je ne vois toujours pas pourquoi ca ne marche pas que dans la soustraction ,comme j'est fais !
ca me parés vrais !!!
 
mais bon je vais esayer surtout de comprendre ce que tu m'a signaler pour voir (car j'ai pas bien comprit ce que tu veux dire ) , ensuite je vais les corrigé,
 
merci ^ 100000....
 
 
 
       :)  
 
 
 
 
 

n°1359986
big_dadi_f​at
Posté le 04-05-2006 à 20:10:13  profilanswer
 

c'est bon j'ai résolu le prob ,
 
voici le nouveau code:  (dites moi si je peux encore l'améliorer ?)
 

Code :
  1. #include<stdio.h>
  2. #define n 5    /* le plus grand degre possible pour les polynomes c'est n-1 */
  3. struct poly
  4. {
  5.   int dx; /* plus grand degre de X */
  6.   int dy; /* plus grand degre de Y */
  7.   int coef[2*n][2*n]; /*le tableau des coefficients du polynome
  8.        on declare avec le cas generale de 2*n
  9.        car on vas utiliser cette meme structure
  10.        pour representer le poly de multiplication*/
  11. };
  12. /*______________________________________________________________*/
  13. void constructeur( poly *P )
  14. {
  15.  int i,j;
  16.  /* l'initialisation */
  17.   for(i=0;i<2*n;i++)
  18.    for(j=0;j<2*n;j++)
  19.     P->coef[i][j] = 0;
  20.  printf("le plus grand exposent de x :  " );  scanf("%d",&P->dx);
  21.  printf("le plus grand exposent de y :  " );  scanf("%d",&P->dy);
  22.  for(i=0;i<=P->dx;i++)
  23.   for(j=0;j<=P->dy;j++)
  24.   {
  25.    printf(" le coeficien du monome  ( x^%d y^%d )   : ",i,j);
  26.    scanf("%d",&P->coef[i][j]);
  27.   }
  28. }
  29. /*______________________________________________________________*/
  30. void addition( poly *A , poly *B , poly *P )
  31. {
  32. int i,j;
  33. /*il faut determiner la dimention de la matrice
  34. avec la puisance du poly */
  35. if(A->dx > B->dx) P->dx = A->dx;     else  P->dx = B->dx;
  36. if(A->dy > B->dy) P->dy = A->dy;     else  P->dy = B->dy;
  37. for(i=0;i<=P->dx;i++)
  38.  for(j=0;j<=P->dy;j++)
  39.   P->coef[i][j] = A->coef[i][j] + B->coef[i][j];
  40. }
  41. /*_______________________________________________________________*/
  42. void soustraction( poly *A , poly *B , poly *P )
  43. {
  44. int i,j;
  45. for(i=0;i<=P->dx;i++)
  46.  for(j=0;j<=P->dy;j++)
  47.   P->coef[i][j] = A->coef[i][j] - B->coef[i][j];
  48. }
  49. /*______________________________________________________________*/
  50. void multiplication( poly *A , poly *B , poly *P )
  51. {
  52. int i,j,g,z;
  53. for(i=0;i<=P->dx;i++)
  54.  for(j=0;j<=P->dy;j++)
  55.   P->coef[i][j] = 0;
  56. for(i=0;i<=A->dx;i++)
  57. for(j=0;j<=A->dy;j++)
  58.   for(g=0;g<=B->dx;g++)
  59.   for(z=0;z<=B->dy;z++)
  60.   P->coef[i+g][j+z] += A->coef[i][j] * B->coef[g][z];
  61. }
  62. /*______________________________________________________________*/
  63. void Affich_poly( poly *PP )
  64. {
  65. int i,j;
  66. for(i=0;i<=PP->dx;i++)
  67.  for(j=0;j<=PP->dy;j++)
  68.    if(PP->coef[i][j] != 0)
  69.     printf(" +(%d) X%d Y%d",PP->coef[i][j],i,j);
  70. }
  71. /*______________________________________________________________*/
  72. void ligne(void)
  73. { printf("\n\n ------------------------------------------\n\n" ); }
  74. /*______________________________________________________________*/
  75. int main()
  76. {
  77. poly P1 , P2 , P3 , P4 , P5;
  78. constructeur(&P1);
  79. printf("\nP1(X,Y) =" );
  80. Affich_poly( &P1 );
  81. ligne(); /*______________________________________________*/
  82. constructeur( &P2 );
  83. printf("\nP2(X,Y) =" );
  84. Affich_poly( &P2 );
  85. ligne(); /*______________________________________________*/
  86. addition( &P1 , &P2 , &P3 );
  87. printf("\nP1 + P2 =" );
  88. Affich_poly( &P3 );
  89. ligne(); /*______________________________________________*/
  90. P4.dx = P3.dx;
  91. P4.dy = P3.dy;  /*la puissance du poly soustraction
  92.      est egale a celle de l'addition*/
  93. soustraction( &P1 , &P2 , &P4 );
  94. printf("\nP1 - P2 =" );
  95. Affich_poly( &P4 );
  96. ligne(); /*______________________________________________*/
  97. /* prevoir les  dimentions (de X et de Y)
  98. pour la multiplication */
  99. P5.dx = P1.dx + P2.dx;
  100. P5.dy = P1.dy + P2.dy;
  101. multiplication( &P1 , &P2 , &P5 );
  102. printf("\nP1 * P2 =" );
  103. Affich_poly( &P5 );
  104. return 0;
  105. }


 
 
NB: je n'est toujours pas compris pourquoi ca ne marché pas avec l'autre version (avent cella)  :sleep:  
 
 
 
 

n°1360390
Sve@r
Posté le 05-05-2006 à 13:50:16  profilanswer
 

big_dadi_fat a écrit :

(dites moi si je peux encore l'améliorer ?)


=> Remplacer chaque

/* l'initialisation */
   for(i=0;i<2*n;i++)
    for(j=0;j<2*n;j++)
     P->coef[i][j] = 0;


Par

/* l'initialisation */  
memset(P->coef, sizeof(P->coef), 0);


Message édité par Sve@r le 05-05-2006 à 13:51:55

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1363076
franceso
Posté le 10-05-2006 à 11:02:12  profilanswer
 

les fonctions soustraction() et multiplication(), devraient gérer le degré du polynôme résultat : ce n'est pas à main() de faire ce genre de choses.
 
Par ailleurs, ton calcul du degré des polynômes somme ou différence n'est pas exact d'un point de vue mathématique : il se pourrait que les monômes de plus haut degré des opérandes s'annulent et que ton polynôme somme / différence soit de degré inférieur au max des degrés des opérandes. Il pourrait être judicieux de prendre en compte ces cas particuliers dans ton code.


---------------
TriScale innov
mood
Publicité
Posté le   profilanswer
 


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

  plynôme (fonction)

 

Sujets relatifs
Fonction SQL => Enregistrement au HasardInterrompre une fonction php
Aide fonction Dir (VBA)La fonction header se comportant bizarrement
[VBA] Fonction qui ne retourne rien. Possible ?Préremplir un email avec la fonction mailto:
programmation socket. fonction accept() retourne 0Fonction HTML to BMP gratuite ? Convertir une page Web en image...
Contenu d'une liste en fonction d'une autre le tout dynamiquement fonction feof (), ecriture sur un fichier texte
Plus de sujets relatifs à : plynôme (fonction)


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