cs_omnia
Messages postés240Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention22 mars 2009
-
10 juin 2008 à 21:15
FREMYCOMPANY
Messages postés276Date d'inscriptionjeudi 12 janvier 2006StatutMembreDernière intervention22 décembre 2008
-
18 juin 2008 à 13:46
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
FREMYCOMPANY
Messages postés276Date d'inscriptionjeudi 12 janvier 2006StatutMembreDernière intervention22 décembre 2008 18 juin 2008 à 13:46
@VERDI_P : Oui, mais si tu dois parser un polynome où il peut y avoir des termes de même degré, et que tu veux conserver l'ordre des termes et leur duplicité, tu dois passer par un tableau de structure monome. Surtout que mon programme doit enfait aussi gérer les sommes de "bases" différentes ("x", "y", "z", "sin(x)", ...).
Sans quoi tu as bien raison [;)]
Fremy
verdy_p
Messages postés202Date d'inscriptionvendredi 27 janvier 2006StatutMembreDernière intervention29 janvier 2019 18 juin 2008 à 05:59
bof, un polynome se représente dans un simple vecteur par ses coordonnées dans la base implicite (1, x, xˆ2, x^3, ... x^n): un tableau numérique à une seule dimension suffit.
Rappel: l'espace des polynomes est un espace vectoriel, tout polynome a donc des coordonnées définies dans un espace de dimension 1, qui est celui de chacun de ses monomes, autrement dit un simple nombre réel s’il s'agit d'un polynome des réels vers les réels.
Exemples:
* le polynome 4 correspondrait au tableau:
double x[] = {4};
* le polynome 3·x^7 - 12·x^2 + 10.5·x correspondrait au tableau:
double x[] = {0, 10.5, -12, 0, 0, 0, 0, 3};
Pour faciliter la gestion des polynomes de degré quelconque, on a intérêt à n’y stocker que les coefficients utiles (et supprimer les coefficients d'indice supérieur au degré du polymnome, qui sont tous nuls). Du coup la représentation avec un Vector<double> est aussi bien. On emploiera donc la généricité des Vector<T>... dont les instances contiennent la valeur du degré maximum du polynome, et un tableau interne contenant les coefficients.
Du coup l'algorithme pour dériver le polynome (ou aussi l'intégrer en fournissant le coeficient de degré zero arbitraire qu'on peut fixer à zéro) est on ne peut plus simple: il suffit de créer un vecteur dont le degré est réduit de 1 (ou aumenté de 1 si on intègre), puis de décaler d'une position dans le vecteur cible les coefficients du vecteur source après les avoir multiplié par leur position dans le vecteur source (ou divisé par leur position dans le vecteur cible, sachant que cette position indicielle ne peut alors pas être nulle et vaut au moins 1).
C'est de l'algèbre linéaire très élémentaire... Faut-il autant de lignes de code et une représentation aussi compliquée (et lente et inefficace) gérer chaque polynome dans une liste chainée??? J'ai de gros doûte sur la pertinence et la réutilisabilité de ce code.
FREMYCOMPANY
Messages postés276Date d'inscriptionjeudi 12 janvier 2006StatutMembreDernière intervention22 décembre 2008 17 juin 2008 à 18:44
La dérivée d'un polynome = Somme des dérivées des monomes (a*x^n) le composant.
La dérivée d'un monome = n*a*x^(n-1)
N'est-ce pas plus simple à comprendre ici en deux lignes qu'en lisant ton code ?
> Manque d'objets et de fonctions au nom clair
_______________________________________________
J'ai moi-même réalisé le même genre de truc dans un cadre plus étendu, et je te conseille le système de classe suivant :
REM :
- toOrdonatedPolynom : Retourne un polynome egal au premier dans lequel tous les monomes semblables (de même n) ont été regroupés et placés dans l'ordre décroissant dans le tableau "monoms".
- toString renvoie une représentation de l'objet sous forme lisible humainement
- Tu peux bien sûr étendre l'objet Polynom et Monom pour les faire correspondre à tes besoins (par exemple ajouter un fonction statique Polynom parse(String) qui permet et générer un polynome depuis une chaine de caractère.
JPR74
Messages postés9Date d'inscriptionmercredi 1 août 2007StatutMembreDernière intervention16 mars 2009 16 juin 2008 à 10:32
Bonjour,
Votre programme est sans doute intéressant mais, dans 6 mois, vous ne saurez plus vraiment ce qu'il fait car il n'y a aucun commentaire !
Dans ce cas, ne pas mettre la source à disposition des lecteurs car cela devient inutilisable, sans oublier le manque de cadrages (indentations) corrects (comme dans beaucoup de programmes proposés) qui rend la lecture désagréable.
Un bon programme doit être opérationnel, bien écrit, maintenable et agréable à lire !
Les commentaires sont indispensables, y compris pour soi même, pour y voir plus clair et pouvoir envisager des améliorations plus tard !
Cela devrait faire partie de la charte, de même qu'une bonne orthographe dans les textes de présentation et dans les commentaires ... quand il y en a !
Mais on peut vous pardonner puisque vous êtes débutant et vous tenterez sans doute d'améliorer votre écriture, quel que soit le produit utilisé...
cs_temary
Messages postés11Date d'inscriptionjeudi 31 janvier 2008StatutMembreDernière intervention12 août 2008 11 juin 2008 à 15:38
goumé....
je les ai trouvés si lassant que je
n'ai pas pu les rédiger.
toute fois je ferrai mon possible de
faire ce travail ultérièrement.
merci pour votre participation
onacluv
Messages postés13Date d'inscriptionsamedi 15 décembre 2007StatutMembreDernière intervention11 juin 2008 11 juin 2008 à 13:39
Arrrg !
Ton code est inmangeable !
Où sont les commentaires ?
cs_temary
Messages postés11Date d'inscriptionjeudi 31 janvier 2008StatutMembreDernière intervention12 août 2008 10 juin 2008 à 21:30
merci pour ça
cs_omnia
Messages postés240Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention22 mars 2009 10 juin 2008 à 21:15
un conseil réédite le poste les 50000 retour a la ligne de la description c'est n'importe quoi
et dans ton code pareil.
ensuite lorsque l'on poste un projet on ne met pas les fichiers de compilation *.dfm (beaucoup trop gros et servent à rien)
sinon les n'est pas très beau (vue que objet + borland)
et quasiment pas commenté
18 juin 2008 à 13:46
Sans quoi tu as bien raison [;)]
Fremy
18 juin 2008 à 05:59
Rappel: l'espace des polynomes est un espace vectoriel, tout polynome a donc des coordonnées définies dans un espace de dimension 1, qui est celui de chacun de ses monomes, autrement dit un simple nombre réel s’il s'agit d'un polynome des réels vers les réels.
Exemples:
* le polynome 4 correspondrait au tableau:
double x[] = {4};
* le polynome 3·x^7 - 12·x^2 + 10.5·x correspondrait au tableau:
double x[] = {0, 10.5, -12, 0, 0, 0, 0, 3};
Pour faciliter la gestion des polynomes de degré quelconque, on a intérêt à n’y stocker que les coefficients utiles (et supprimer les coefficients d'indice supérieur au degré du polymnome, qui sont tous nuls). Du coup la représentation avec un Vector<double> est aussi bien. On emploiera donc la généricité des Vector<T>... dont les instances contiennent la valeur du degré maximum du polynome, et un tableau interne contenant les coefficients.
Du coup l'algorithme pour dériver le polynome (ou aussi l'intégrer en fournissant le coeficient de degré zero arbitraire qu'on peut fixer à zéro) est on ne peut plus simple: il suffit de créer un vecteur dont le degré est réduit de 1 (ou aumenté de 1 si on intègre), puis de décaler d'une position dans le vecteur cible les coefficients du vecteur source après les avoir multiplié par leur position dans le vecteur source (ou divisé par leur position dans le vecteur cible, sachant que cette position indicielle ne peut alors pas être nulle et vaut au moins 1).
C'est de l'algèbre linéaire très élémentaire... Faut-il autant de lignes de code et une représentation aussi compliquée (et lente et inefficace) gérer chaque polynome dans une liste chainée??? J'ai de gros doûte sur la pertinence et la réutilisabilité de ce code.
17 juin 2008 à 18:44
La dérivée d'un monome = n*a*x^(n-1)
N'est-ce pas plus simple à comprendre ici en deux lignes qu'en lisant ton code ?
> Manque d'objets et de fonctions au nom clair
_______________________________________________
J'ai moi-même réalisé le même genre de truc dans un cadre plus étendu, et je te conseille le système de classe suivant :
Polynom [ Monom[] monoms; String toString(); Polynom derivatedPolynom(); Polynom toOrdonatedPolynom() ]
Monom [ Double a; Double n; String toString() ]
REM :
- toOrdonatedPolynom : Retourne un polynome egal au premier dans lequel tous les monomes semblables (de même n) ont été regroupés et placés dans l'ordre décroissant dans le tableau "monoms".
- toString renvoie une représentation de l'objet sous forme lisible humainement
- Tu peux bien sûr étendre l'objet Polynom et Monom pour les faire correspondre à tes besoins (par exemple ajouter un fonction statique Polynom parse(String) qui permet et générer un polynome depuis une chaine de caractère.
16 juin 2008 à 10:32
Votre programme est sans doute intéressant mais, dans 6 mois, vous ne saurez plus vraiment ce qu'il fait car il n'y a aucun commentaire !
Dans ce cas, ne pas mettre la source à disposition des lecteurs car cela devient inutilisable, sans oublier le manque de cadrages (indentations) corrects (comme dans beaucoup de programmes proposés) qui rend la lecture désagréable.
Un bon programme doit être opérationnel, bien écrit, maintenable et agréable à lire !
Les commentaires sont indispensables, y compris pour soi même, pour y voir plus clair et pouvoir envisager des améliorations plus tard !
Cela devrait faire partie de la charte, de même qu'une bonne orthographe dans les textes de présentation et dans les commentaires ... quand il y en a !
Mais on peut vous pardonner puisque vous êtes débutant et vous tenterez sans doute d'améliorer votre écriture, quel que soit le produit utilisé...
11 juin 2008 à 15:38
je les ai trouvés si lassant que je
n'ai pas pu les rédiger.
toute fois je ferrai mon possible de
faire ce travail ultérièrement.
merci pour votre participation
11 juin 2008 à 13:39
Ton code est inmangeable !
Où sont les commentaires ?
10 juin 2008 à 21:30
10 juin 2008 à 21:15
et dans ton code pareil.
ensuite lorsque l'on poste un projet on ne met pas les fichiers de compilation *.dfm (beaucoup trop gros et servent à rien)
sinon les n'est pas très beau (vue que objet + borland)
et quasiment pas commenté
...
bon codage