Prob en c

ahlem -  
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   -
salut si quelqu'un peut m'aider s'il vous plait je n'arrive pas a le faire.
il s'agit de la programmation en c

on represente un polynome a 2 variables x,y par une matrice

d'une taille m, n où m,n sont les plus grand composants exposants

respectivement de x,y, et a[i][j] represente le coeficient du

monome xi yj

le programme doit construire deux matrices de deux polynomes

entré et faire leurs addition et multiplication.

le probléme est dans la constructions des matrices

exemple:
 x^3 + 2x^2y^2 -4xy^3 + 3y

la matrice de cet polynome
0 3 0 0
0 0 7 -4
0 0 2 0
1 0 0 0

3 réponses

mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Tu devrais commencer par créer une classe de matrice permettant :

1) de créer une matrice MxN
2) de faire une addition matricielle
3) de faire un produit matriciel
4) de libérer la mémoire occupée par une matrice
5) d'accéder au terme i,j
6) de moficier le terme i,j

Ci dessous le .h correspondant :
#ifndef MATRIX_H
#define MATRIX_H

struct matrix{
  int **val;
  unsigned int nb_row;
  unsigned int nb_col;
};

struct matrix new_matrix(unsigned int nb_row,unsigned nb_col);
void del_matrix(struct matrix);
void set(struct matrix m,unsigned int i,unsigned int j,int val);
int get(const struct matrix m,unsigned int i,unsigned int j);
struct matrix add(const struct matrix a,const struct matrix b);
struct matrix times(const struct matrix a,const struct matrix b);

#endif

Je te laisse faire la suite.

Bonne chance
0
ahlem
 
salut mamiemando, tu sait je suis qu'une debutante dans ce domaine et j'aime pas recopier sans comprendre . moi j'ai esseyer de le faire avec les tableaux de structure.
tu peut me le faire avec? SVP
merci mon ami d'avance.@+
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
L'idée c'est de définir une structure permettant de stocker les infos contenues dans ta matrice. Si c'est une matrice d'entier comme le tableaux est en 2D c'est un int ** (tableau de tableau d'entiers). Par exemple si c'était une matrice 3D de double, ce serait un double ***.

Tu as en effet certainement vu en court qu'un tableau int[] décrivant un tableau d'int, s'écrivait aussi int *. Le problème c'est qu'aucune de ces deux notations ne permet de connaître le nombre d'éléments dans le tableau. C'est pourquoi dans la structure je stocke aussi les dimensions de la matrices.

Le rôles des fonctions que je t'ai donné est de manipuler cette structure de sorte à ce que ça gestion soit complètement transparente. En effet, un autre programmeur n'est sensé utiliser que ces fonctions que tu auras défini, sans intervenir dans la structure. On appelle cela la programmation modulaire : tu implémentes dans le .c, mais les autres ne sont sensés utiliser que le .h.

En toute rigueur on devrait même mettre dans le .h un truc du genre :
typedef struct matrix * matrix_t;

Et n'utiliser que des matrix_t dans les différentes fonction. Le type struct matrix étant décrit dans le .c.

Ton rôle consiste juste à remplir le code dans le .c des différentes fonctions dont je t'ai donné les prototypes. Exemple :
void set(struct matrix m,unsigned int i,unsigned int j,int x){
  if (i>m.nb_row || j>nb_col){
    fprintf(stderr,"index out of bounds !");
    return;
  }
  m.val[i][j]=x;
}

Une fois cette "classe" de matrice codée, il sera à mon avis beaucoup plus facile pour toi de résoudre ce problème de polynomes.

Bonne chance
0