POLYNOMES_EN_C

DarkC0 Messages postés 51 Date d'inscription dimanche 13 mars 2011 Statut Membre Dernière intervention 11 septembre 2011 - 16 mai 2011 à 06:34
TPB Messages postés 30 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 24 mai 2011 - 23 mai 2011 à 23:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53166-polynomes-en-c

TPB Messages postés 30 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 24 mai 2011
23 mai 2011 à 23:03
Salut tout le monde !
Je me demande à quel moment on va me noter ?
A quoi servent ces notes et ces points ?
S'il vous plait je veux savoir.
Merci !
TPB Messages postés 30 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 24 mai 2011
23 mai 2011 à 22:49
@OPOSSUM_FARCEUR
Peut importe ce que tu peux dire. Ce que j'ai dit reste assez vrai. Serte tu n'as peut être pas les tenants et aboutissants mais tu prouve que tu as les informations qu'il nous faut. Gracias!
opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009
23 mai 2011 à 22:41
Hi!

Je n'ai pas cette prétention.
L'algo est détaillé à l'adresse :
http://pages-perso.esil.univmed.fr/~daniel.m//Algonum/Algonum-cours.pdf
et je ne suis pas sûr d'avoir le niveau requis en maths pour en maîtriser tous les tenants et aboutissants.
TPB Messages postés 30 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 24 mai 2011
23 mai 2011 à 21:30
@OPOSSUM_FARCEUR: Salut !
Finalement tu es mon professeur. Tu résouds tous mes problèmes de programmation et maintenant même ceux de mathématiques. C'est cool d'être toi dans ce domaine.
Gracias !
opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009
23 mai 2011 à 20:33
Hi!

>résolution des équations polynomiales.

La "Méthode de Bairstow" semble avoir fait ses preuves.
Script en C localisé à l'adresse :
http://www.polytech-lille.fr/cours-algos-calcul-scientifique/progrceq.html
TPB Messages postés 30 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 24 mai 2011
22 mai 2011 à 03:02
Salut à tous !
Personne n'a trouvé une erreur de calcul par hasard ? Une erreur mal gérer ? Un plantage spontané du à la demande d'exécution d'une opération ?
Merci de me signaler au cas où !
TPB Messages postés 30 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 24 mai 2011
21 mai 2011 à 15:17
Salut tout le monde!
@RAIKKO21 ; Deux polynômes sont premiers entre eux si le PGCD est égale à 1. Et je crois avoir fais le PGCD de deux polynômes.
Merci pour le reste. J'en tiendrais compte. Mais j'aurais apprécié que tu me les sites toutes. Des plus simples au plus complexe.
La décomposition en facteurs est pratiquement impossibles. Voir les méthodes de SOTTA, CHARLES HERMITE sur la résolution des équations
polynomiales.
raikko21 Messages postés 33 Date d'inscription jeudi 30 septembre 2010 Statut Membre Dernière intervention 24 novembre 2011
20 mai 2011 à 22:13
Salut tlm!
@CptPingu, j'avais suggérer d'en faire genre une calculatrice, ca sera plus pratique a utiliser a mon avis. Mais sinon tout ce que tu dis est très sensé est utile j'apprends beaucoup de choses sur comment faire un bon code.
@TPB, par exemple:
Vérifier si un polynôme est inversible, s'il est irréductible, scindé, séparable, décomposition en facteurs, s'il est premier, si deux polynômes sont premiers entre eux... Enfin il y a beaucoup d'operations et j'ai cité que les plus simples pour commencer. Bon continuation.
TPB Messages postés 30 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 24 mai 2011
20 mai 2011 à 14:08
@opossum_farceur : Salut!

Un grand merci pour ce code. Je trouve pas les mots. Bref Merci !
Merci pour l'idée du sqr(3)/2. je vais m'y mettre.
>Quand ton programme rends la main (suite au code 11, il me semble) il faudrait qu'il restitue l'environnement tel qu'il l'a trouvé en arrivant, c'est-à-dire au moins remettre la couleur du fond d'origine.
Merci pour cette idée je vais également m'y mettre.
Mais tu ne m'as pas donné ton avis sur les fonctionnalités même du code.
Merci quand même pour toute ces remarques constructives. Encore Merci!
opossum_farceur Messages postés 147 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 14 novembre 2009
20 mai 2011 à 00:42
Hi!

"La console de WINDOWS affiche très mal les caractères avec les accents"

si ce bout de code peut être utile :

#include <stdarg.h> // va_list
#include <stdio.h> // printf()

char* win2dos(char* s)
{
for (int i=0;;i++) switch (s[i]) { // liste non exhaustive
case -80:s[i]=-8;break; // °
case -32:s[i]=-123;break; // à
case -25:s[i]=-121;break; // ç
case -24:s[i]=-118;break; // è
case -23:s[i]=-126;break; // é
case -22:s[i]=-120;break; // ê
case -18:s[i]=-116;break; // î
case -17:s[i]=-117;break; // ï
case -7:s[i]=-105;break; // ù
case -4:s[i]=-127;break; // ü
case -5:s[i]=-106;break; // û
case -30:s[i]=-125;break; // â
case -12:s[i]=-109;break; // ô
case -21:s[i]=-119;break; // ë
case -75:s[i]=-26;break; // µ
case '\0':return s;
}
}

void myprintf(const char* fmt,...)
{
va_list argptr;
char s[80];

va_start(argptr,fmt);
vsprintf(s,fmt,argptr);

printf("%s",win2dos(s));

va_end(argptr);
}

int main()
{
char s[]="°àçèéêîïùüûâôëµ";

myprintf("Hello "%s"!\n",s);

return 0;
}

fin du code...
J'ai réussi à compiler ta source, la présentation en est soignée, les commentaires il me semble suffisants pour en avoir une compréhension générale (aidée il est vrai par les nombreux dialogues homme-machine).
Quand ton programme rends la main (suite au code 11, il me semble) il faudrait qu'il restitue l'environnement tel qu'il l'a trouvé en arrivant, c'est-à-dire au moins remettre la couleur du fond d'origine.
Pour un niveau "initié", j'aurais apprécié en plus le traitement des racines (imaginaires ou pas).
Quant au niveau "expert", j'aurais envisagé le traitement des polynomes avec des expressions symboliques comme par exemple sqr(3)/2 un peu comme quand on apprend l'algèbre à l'école (mais peut-être apprend-t-on maintenant l'algèbre à la calculatrice avec des réels comme coefficients des polynomes?)
TPB Messages postés 30 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 24 mai 2011
19 mai 2011 à 22:01
@CPTPINGU: Je te l'ai dit, je modifierai ce code et aussi celui de la calculatrice que j'ai faite, et je le reporterai pour que les utilisateurs de Windows et Linux puissent le compiler et l'exécuter. J'y mettrai un peu plus de commentaire et j'expliciterai les fonctionnalités du code. Merci pour while() j'étais pas très au courant, tu vois c'est mieux quand tu parles par l'exemple.
Si ce que tu dis es vrai, alors j'ai raison de mettre niveau expert; car j'utilise les structures de données avancées, les listes chaînées. Bref tu auras le temps de vérifier toi même, enfin j'espère.

@RAIKKO21 :>" Tu as déjà fais plusieurs opérations, tu pourra continuer et rajouter quelques unes". Quelques unes comme quoi ? Parle par des exemples c'est plus précis et concis. Je veux bien faire mieux, mais proposez moi des choses vraiment intéressante, ou faites le vous même et postez si vous voulez.
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
19 mai 2011 à 17:31
> Le mode graphique est tout de même important, il y' a plus d'utilisateurs de Windows que de Linux
Si tu parles du mode console, je ne suis pas d'accord. Un terminal est souvent plus pratique qu'une appli fenêtrée, peu importe l'OS.
Si tu parles de la coloration de la console, la couleur est secondaire. Si tu y tiens, essaie au moins de faire en sorte que la couleur fonctionne sous les deux OS (c'est faisable, faut aussi que je fasse un article la dessus :p).

> Tout le monde n'est pas professionnel
Professionnel != Linux/Terminal.

> Montre plutôt quelque chose de mieux
Un exemple imaginaire (qui ne compilera pas, ça reste du théorique):

while (1)
{
if (action == "Action1")
//code
if (action == "Action2")
//code
if (action == "Quitter")
break;
}

devrait être:

bool stop = false;
while (!stop)
{
if (action == "Action1")
//code
if (action == "Action2")
//code
if (action == "Quitter")
stop = true;
}

Largement mieux. Au niveau propreté, on essaie de faire en sorte que la sortie d'une boucle ou d'un scope, soit aisément prévisible. Un break, continue ou exit nuit à la lisibilité du code. Quand tu débugges, tu peux poser un "conditional breakpoint" sur la variable stop en fonction de sa valeur, et geler ton appli au moment où tu vas quitter par exemple. Impossible de réaliser cette action correctement avec un break. Ce n'est qu'un exemple parmis d'autre, mais crois moi c'est très pénible de débugger du code avec du while (1) + break (surtout du while imbriqué). Ici, le cas n'est pas très complexe, mais en cas de possibilité de sortie multiple (plusieurs conditions déclenchent un "break", c'est une horreur).

> Je coderai désormais en Anglais promis et on dira dans ce cas tant pis pour les francophone il n'auront qu'à s'y mettre eux aussi.
L'anglais est la norme dans ce métier. Pas d'anglais, pas de bras, pas de chocolat ! En entreprise, tu ne peux pas coder autrement qu'en anglais (et c'est génial, parce qu'en équipe internationale, si tous le monde code dans sa langue, bonjour les difficultés !).

> Quand pourrait t' on dire d'après toi qu'un code est de qualité "Expert" ?
Quand il fait intervenir des notions techniques ou algorithmiques qui ne sont à la portée ni d'un débutant, ni d'un développeur un petit peu aguéri. N'ayant pu tester ton code, je ne peux le juger.
TPB Messages postés 30 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 24 mai 2011
19 mai 2011 à 17:08
Salut CPTPINGU!

Moi j'ai deux OS. Windows et Linux. Je code sur CodeBlocks de Windows et avec son compilateur gcc. Je vais voir le problème de portabilité dont tu m'as parlé et tous les autres problèmes que tu as énuméré. J'en tiendrais compte. Le mode graphique est tout de même important, il y' a plus d'utilisateurs de Windows que de Linux. Tout le monde n'est pas professionnel. Je veux que tu puisses tester ce code alors je ferai le nécessaire même si tu dois t'envoyer l'information sur le nouveau code que je mettrai par message privé.
Je coderai désormais en Anglais promis et on dira dans ce cas tant pis pour les francophone il n'auront qu'à s'y mettre eux aussi.
Quant à "- while(1): C'était vraiment nécessaire ? Je ne suis pas super fan.", des goût et des couleurs faut pas souvent en discuter. Pourquoi est ce une mauvaise chose ? Montre plutôt quelque chose de mieux.
Je t'ai déjà posez cette question une fois : Quand pourrait t' on dire d'après toi qu'un code est de qualité "Expert" ?
DarkC0 Messages postés 51 Date d'inscription dimanche 13 mars 2011 Statut Membre Dernière intervention 11 septembre 2011 4
19 mai 2011 à 13:17
Salut CptPingu,

c'est vrais que sa m'intéresserais bien que tu poste un petit article sur les commentaires car il est vrais que je me débrouille comme je peux pour le moment.

Bonne journée.
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
19 mai 2011 à 11:42
Bonjour.

La finalité du code à l'air super intéressante. Malheureusement, tu n'as pas fait du tout attention à la portabilité, et je ne peux le compiler sur ma machine (Linux). Si tu retires les "system" et le conio.h, ça permettrais à tous de pouvoir tester ton programme. Surtout que les fonctionnalités qui brisent cette portabilité sont très secondaires.

J'ai regardé en diagonale le code, ne pouvant tester l'application:
- Tout dans un même fichier: aïe ! Une séparation propre en plusieurs fichiers aurait été souhaitable
- Commentaire: Pas énormément de commentaire. Regarde ce qu'est Doxygen. (Un style de commentaire réputé qui te permet aussi de faire tourner le logiciel Doxygen dessus, qui génère une jolie documentation à partir de tes commentaires, cf mes sources si ça t'intéresse).
- while(1): C'était vraiment nécessaire ? Je ne suis pas super fan. Y a toujours moyen de l'éviter...
- le main monolithique: Une fonction doit être découpée en une série de petites fonctions plus simple. Généralement, on ne dépasse pas 25-30 lignes par fonction. Ici le main, est bien trop gros.
- Essaie de coder en anglais
- Très léger soucis de consistance: Un coup tu vérifies si tu assez de mémoire, un coup tu ne le vérifies pas.
- Des fautes d'orthographe (emploie => emploi), et un anglais un peu approximatif :p (Thank you for "used" this application => using), mais ce n'est pas grave, ce n'est pas le plus important. Pour les accents, il suffit de trouver un terminal qui les gèrent correctement (le terminal de base de windows est infâme).
- Connais-tu le C norme 98 ? Il y a différentes versions du C. Celle historique et celle plus récente, qui date de 1998. Dans cette version (officielle) ont été ajouté de nouveaux éléments comme les booléen (bool), la possiblité de déclarer une variable n'importe où, de faire des commentaires avec // (d'ailleurs il y en a dans ton code ?), etc... Peut être que ça t'éviterais d'avoir à recoder tes booléens. Mais ce n'est pas une obligation.

@DarkC0: Rajouter plus de fioritures secondaires, brisera encore plus la portabilité. Et c'est bien dommage.
Attention aux commentaires que tu proposes. Il y a des bons et des mauvais commentaires. Ceux proposés sont mauvais. Un bon commentaire explique ce que fait l'algorithme présent après. Il ne doit pas paraphraser le code ou le nom de la fonction, ni montrer l'évidence. Tu soulèves un point intéressant, je vois très souvent des commentaires inefficaces ou mal écrits. Ça me donne envie d'écrire un petit article sur la manière d'écrire des commentaires efficaces (à suivre donc).

@raikko21: Autre chose, pourquoi tu travailles en mode console?
Parce que c'est le plus adapté, tout simplement. Avoir ce programme en Graphique, n'apporterait strictement rien. Au final, tu taperais la même chose, mais tu aurais un programme plus lourd, et un développement plus long (la console gère le retour à la ligne automatiquement, pas forcément ton appli graphique). Je ne vois vraiment pas l'intérêt...
Je vois plein d'avantage à avoir ce programme en console. Avoir un programme console permet de l'utiliser à distance en ssh, ou sur un serveur qui n'aurait pas d'environnement graphique. Avec un mode non intéractif (bon ici l'auteur ne l'a pas fait), on pourrait aussi réutiliser cet outil dans des scripts.

@TPB: Ton programme à l'air super intéressant, c'est dommage que je ne puisse le tester. En revanche, je ne sais pas si j'aurais été jusqu'à mettre "Expert" (je n'ai pas testé le code, donc impossible, pour l'instant, de juger cet aspect).
raikko21 Messages postés 33 Date d'inscription jeudi 30 septembre 2010 Statut Membre Dernière intervention 24 novembre 2011
18 mai 2011 à 23:58
Salut TPB,
J'ai essayé ton code et j'ai aimé c'est très utile et assez bien fait. Ce que je voulais te proposer c'est de faire une application sous windows (WINAPI ou WindowsForm) style calculatrice mais qui travaille avec des polynomes. Tu as déjà fais plusieurs opérations, tu pourra continuer et rajouter quelques unes.
Voila, OK je vais essayé de faire des modifications.
@+
TPB Messages postés 30 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 24 mai 2011
18 mai 2011 à 20:11
Oui RAIKK021. Merci pour ce chaleureux commentaire. J'aime les commentaires de ceux qui regardent mes codes, ça me motive et ça me fait croire que je suis utile en quelque chose en ce monde.
Je ne comprends pas très bien le sens de ta question " pourquoi tu travailles en mode console? ". Ce code est là pour montrer ce qu'on peut faire avec le langage C en restant en mode console. Et au fait, j'aime la console ça fait professionnel.
Cependant, que me propose tu ? Je veux bien aussi faire le mode graphique mais en langage C, qu'as tu pour m'aider dans cet optique ?
Les fautes d'orthographe que tu as vu pour la plus par ne sont pas des erreurs d'inattention c'est expressément. La console de WINDOWS affiche très mal les caractères avec les accents. D'où je conjugue très souvent un peu de travers. Pour avoir un affichage correct.
Oui c'est vrai j'aurais pu utiliser beaucoup moins de ligne. Mais si tu modifiais et me montrais ça serait un peu plus cool comme ça j'apprendrais aussi.
raikko21 Messages postés 33 Date d'inscription jeudi 30 septembre 2010 Statut Membre Dernière intervention 24 novembre 2011
17 mai 2011 à 22:41
Salut tlm!
Je trouve le programme assez intéressant et utile (pour les lycéens), sinon je trouve le code un peu long a mon gout et je suis de l'avis de DARKC0 sur ce point, a mon avis pour les opérations que tu fais sur les polynômes t'aurais pu utiliser beaucoup moins de lignes, mais c'est assez sympa. Autre chose, pourquoi tu travailles en mode console?
Je voulais te signaler aussi quelques erreurs d'orthographe. Sinon c'est cool.
Cordialement
DarkC0 Messages postés 51 Date d'inscription dimanche 13 mars 2011 Statut Membre Dernière intervention 11 septembre 2011 4
17 mai 2011 à 15:58
Salut TPB,

euh je voulais savoir si tu avais bien reçus mes messages que je t'ai envoyer avec la messagerie de Codes-Sources à ton adresse car j'ai l'impression que non en fait ?

Désolé de mettre ça en commentaire.
TPB Messages postés 30 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 24 mai 2011
16 mai 2011 à 20:36
OK! DARCKC0 c'est cool. Merci bien pour toutes ces remarques elles sont très intéressante. Mais j'aurais apprécié que tu m'eusse donné le code pour faire clignoter du texte surtout si sa marche sur l'IDE codeblock. Ceci pour dire que je voudrais la fonction pour faire clignoter du texte il y'a longtemps que je voulais la voir fonctionner sur codeblocks. Parce que sur turbo C cette fonction est quelque chose comme textcolor(14+blink). blink pour faire clignoter. Mais ça ne marche pas sous Code block. Merci de me passez cette fonction. Que pense tes camarades de ce code sur les polynomes ? Je te demande ça parce que tu es le seul à faire des commentaires et je voudrais avoir un peu l'avis d'autres personnes. Merci!
DarkC0 Messages postés 51 Date d'inscription dimanche 13 mars 2011 Statut Membre Dernière intervention 11 septembre 2011 4
16 mai 2011 à 18:01
C'était juste un conseil, après tu à raison sur le nombres de lignes, sa ne les diminues en rien, j'appuyais plus sur le fait que le code à une meilleure clarté en faisant ceci.

Pour les commentaires je pense qu'il y en a suffisamment, bon il est vrais que je ne les ai pas tous lus mais si tu a détaillé les choses les plus compliquées sa devrait le faire.

Je trouve qu'il est difficile de distinguer chaque partie, comme les void ou autre.
Moi, ce que je fais sur mes codes, c'est que je met à chaque parties différentes un commentaire, du style :
//Programme principale. ou //Fonction pour l'addition. etc..., tu vois ce que je veux dire.

Pour les améliorations de ton code, tu pourrais utiliser la fonction Color(); comme je te l'avais dit.
Ensuite pour la présentation du début je pense que tu pourrais améliorer ça en mettant, par exemple, du texte qui défile de la droite ou sinon en utilisant le code ASCII pour faire un tableau plus net de même pour les consignes, tu pourrais mettre un peu plus de couleurs, par exemple tu met ton titre, "Suivez attentivement....", en vert sur un fond bleu puis les consignes principales du autre couleur, de même pour la forme du polynôme.
Enfin, lorsque l'utilisateur doit rentrer ses polynômes, il y a une petite phrase pour un si grand cadre, c'est dommage, tu pourrais par exemple mettre le titre de ton programme en haut puis laisser les possibilités de 0 à 11 sur le côté gauche séparé par une ligne et créer un cadre à droite pour scanner les polynômes de l'utilisateur.

Si tu veux j'ai aussi une fonction pour faire clignoter du texte. Cela pourrais te servir lorsque tu demande à l'utilisateur de bien observer le polynôme qu'il a rentré.

Voila, euh j'espère que tu auras tout compris, après ce sont des choses que MOI je ferais mais c'est ton code pas le mien :)
TPB Messages postés 30 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 24 mai 2011
16 mai 2011 à 14:38
Oui mon cher je tu as tout à fais raison pour les headers. Mais je sache mon "ami" que sa ne réduis en rien le nombre de ligne;au contraire il faudra augmenter des lignes pour les directives du préprocesseurs genre #ifdef ... tu vois ce que je veux dire j'espère. Mais par contre ça donne de la clarté au code et ça facilite la recherche des erreurs dans les fichiers créer. Je le ferai la prochaine fois promis.
Mais est ce que tu le trouve assez commentez ? Compréhensible ? Avez vous des idées d'amélioration ? Quelque chose que je pourrai ajouter ?
DarkC0 Messages postés 51 Date d'inscription dimanche 13 mars 2011 Statut Membre Dernière intervention 11 septembre 2011 4
16 mai 2011 à 06:43
Par contre évite de mettre 1967 lignes dans ton programme car tu risque de chercher un moment si tu à un problème dedans. Je te conseille de faire des .h (headers), tu pourrais mieux t'y retrouver et il y aurai beaucoup moins de lignes.
DarkC0 Messages postés 51 Date d'inscription dimanche 13 mars 2011 Statut Membre Dernière intervention 11 septembre 2011 4
16 mai 2011 à 06:34
Salut TPB,

sa tu vois c'est très utile quand on doit calculer des polynômes en classe de maths, je crois que ma prof va être verte quand je vais lui montrer :D

Bonne journée.
Rejoignez-nous