plynôme (fonction)

plynôme (fonction) - C - Programmation

Marsh Posté le 17-04-2006 à 14:46:04    

 :)  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:

Reply

Marsh Posté le 17-04-2006 à 14:46:04   

Reply

Marsh Posté le 17-04-2006 à 14:51:42    

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

Reply

Marsh Posté le 17-04-2006 à 14:54:28    

Ayuget a écrit :

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


 
!!!
 
 
 
 
desoler

Reply

Marsh Posté le 17-04-2006 à 15:17:04    

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/
Reply

Marsh Posté le 19-04-2006 à 16:34:32    

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               ?
 :)

Reply

Marsh Posté le 19-04-2006 à 16:41:12    

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

Reply

Marsh Posté le 19-04-2006 à 16:42:54    

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/
Reply

Marsh Posté le 19-04-2006 à 16:45:55    

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
Reply

Marsh Posté le 19-04-2006 à 16:54:13    

franceso a écrit :


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


 :love:  :love:  :love:

Reply

Marsh Posté le 19-04-2006 à 17:00:21    

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   :)

Reply

Marsh Posté le 19-04-2006 à 17:00:21   

Reply

Marsh Posté le 19-04-2006 à 19:34:01    

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.
Reply

Marsh Posté le 01-05-2006 à 14:32:29    

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
Reply

Marsh Posté le 02-05-2006 à 00:15:01    

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
Reply

Marsh Posté le 02-05-2006 à 00:49:55    

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.
Reply

Marsh Posté le 02-05-2006 à 22:35:23    

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...

Reply

Marsh Posté le 04-05-2006 à 13:14:45    

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
 
...

Reply

Marsh Posté le 04-05-2006 à 14:14:11    

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
Reply

Marsh Posté le 04-05-2006 à 14:35:36    

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:  
 
 

Reply

Marsh Posté le 04-05-2006 à 14:41:06    

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
Reply

Marsh Posté le 04-05-2006 à 14:45:25    

franceso a écrit :

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


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

Reply

Marsh Posté le 04-05-2006 à 17:33:32    

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 … :(  
 
 
 
 
 
 
 
 
 
 
 
 

Reply

Marsh Posté le 04-05-2006 à 17:42:26    

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. }

Reply

Marsh Posté le 04-05-2006 à 18:03:57    

  • 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
Reply

Marsh Posté le 04-05-2006 à 18:17:53    

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....
 
 
 
       :)  
 
 
 
 
 

Reply

Marsh Posté le 04-05-2006 à 20:10:13    

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:  
 
 
 
 

Reply

Marsh Posté le 05-05-2006 à 13:50:16    

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.
Reply

Marsh Posté le 10-05-2006 à 11:02:12    

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
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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