Sujet de TP sur les listes
Cartographie d'auteurs | Revue de presse : On parle de Baldr dans Studyrama » [1308] lecturesPour raison de grève, j'étend la date limite de rendu du projet au vendredi 30 au soir dernier délais. Attention, dès le lundi 26, nous passeront au deuxième sujet (sur les arbres) cela veux dire que si vous avez besoin de continuer le TP sur les listes vous devez le faire sur votre temps libre , pas sur le volume horaire de TP (je ne veux pas que vous preniez du retard sur le deuxième TP)...
préambule
Ce document est certainemennt appelé à être modifié (correction d'erreur, explications additionnelles, etc...). Il est donc très important que vous regardiez à chaque nouvelle séance si des choses ont été changées ou ajoutées.
Ce TP comme tous les TP se fait en binôme ou seul, aucun trinôme ne sera accepté.
Si j'ai des doutes sur le travail d'une personne d'un binôme, je me reserve le droit de demander une séance de vérification sur le sujet de ce TP. Je vous demanderai alors simplement de me montrer que vous savez comment fonctionne votre programme pour enlever le doute. Si les explications ne sont pas correctes, la note de TP sera bien sûr annulée... Donc essayez de vous mettre en binôme à peu près de même niveau pour éviter que l'un fasse le TP sans que l'autre n'y comprenne rien...
Le logiciel Baldr sera utilisé pour analyser pour detecter les fraudes éventuelles. Cela veux dire que toute copie de code risque fort de se voir. Ce qui impliquera la note F ainsi que d'autres sanctions. L'échange d'idées et d'explications est lui par contre tout à fait conseillé.
L'objectif
Il s'agit dans ce TP de créer un programme capable de faire du calcul symbolique, c'est à dire de gérer des fonctions mathématique, de faire des opérations sur ces fonctions etc... Il s'agit évidement d'une tâche très complexe si on veux la réaliser pour tout type de fonctions. Nous allons donc grandement simplifier le problème en ne gérant que les polynomes et seulement quelques opérations de base.
Le programme que vous allez réaliser devra être capable de gérer des polynomes via un simple système de commandes formatés venant de l'entrée standard.
Voici un exemple :
p=+12x^3-3x^2 g=-2x^6+3x^2-12x^0 g(5)=? résultat de g(5) f=+g+p+3x^0 h=+g'+gNotez :
- seul la demande d'évaluation d'un polynome à une syntaxe légèrement différente du reste, ce cas pourra être traité comme un cas particulier.
- pour tous les autres cas : chaque ligne commence par le nom d'un polynome puis le caractère "=", puis une suite de monômes
- un monôme est toujours de la forme : + | - [valeur numérique entière x^ exposant entier | nom de polynôme]
- le nom d'un polynôme n'est composé que d'une lettre, éventuellement suivit d'un " ' " (opérateur de dérivation).
Ce que doit comprendre le programme c'est la définition de deux polynômes p et g, puis la demande d'évaluation du polynome g avec comme valeur 5 (le programmes doit alors afficher la valeur correspondante). Le programme devra être capable de reconnaître la re-utilisation de polynôme déjà déclarés et de les combiner, comme dans l'exemple de la définition du polynôme f. Un opérateur de dérivation pourra aussi être gèré comme dans la dernière ligne de l'exemple.
Avant les premières fonctions
Avant de créer les fonctions de gestion des polynômes, il faut d'abord être capable d'interprèter les commandes et d'extraire les paramètres des commandes.
Il y a une commande par ligne, la fonction « gets » nous permettra de lire les commandes une par une. Ensuite les fonctions sur les chaines de caractères permettrons d'extraire le détail de chaque commande.
Ecrivez le code nécessaire à à la recupération des informations d'un type de commande, puis écrivez les fonctions sur les polynômes et appelez-les avec les paramètres récupérés. L'ordre proposé des différents types de commande correspond à une difficultée croissante, il est donc fortement conseillé de le suivre.
La stucture
Faire une structure de données en C, permettant la représentation d'une liste chaînée. Cette structure devra contenir des polynômes. Plus précisément chaque case ou élément de la structure stockera un monôme du type : a*xn. Les données à stocker dans la structure (en plus des données de chaînage) sont donc le coefficient (a) ainsi que le degré (n). Ainsi un pointeur sur une telle structure représentera alors un polynôme.
Il nous faudra ensuite générer une seconde structure permettant de stocker une liste de polynomes chaque polynome ayant un nom ainsi qu'un pointeur vers le polynôme lui-même.
Création d'un polynome
Si la commande correspond à une création de polynome, alors créez une nouvelle case dans la liste des polynômes puis inserez y les monômes un à un.
Evaluation d'un polynome
Si la commande correspond à une évaluation, recherchez alors le polynôme correspondant dans la liste, puis évaluez le, monôme par monôme. Le programme ne devra afficher que le résultat de l'évaluation et rien d'autres. Tout autre affichage gènera l'interprétation des résultats par le script de notation!
Re-utilisation de polynômes déjà déclarés
Reprenez le code de la création de polynôme, si à la place d'un chiffre on trouve une chaîne de caractère c'est qu'il s'agit de l'utilisation d'un polynôme déjà déclaré. Il suffit alors de le chercher dans la liste des polynômes, parcourir la liste de ses monômes et de les insérer dans le polynome courant.
Dérivation
Dans la partie de création de polynome, lorsqu'on tombe sur un nom de polynome se finisant par le caractère « ' »(l'apostrophe , sur la touche « 4 »), cela veux dire qu'on va copier ici non pas le polynome correspondant mais sa dérivé (attention le polynome original, lui, ne doit pas être modifié). Il suffit alors parcourir la liste de monômes et de les modifier (dériver) un à un au moment de l'insertion dans le polynome courant.
Note : Il est inutile de supprimer les monôme qui disparaissent par dérivation, mettre leur coefficients à 0 sera suffisant.
Fin du programme
Lorsqu'il n'y a plus rien sur l'entrée standard (quand la fonction « gets » retourne NULL), le programme devra désallouer toute la structure de donnée qui aura été crée jusque là.
Remarques Importantes :
Il est très important que vous testiez votre programme avec plein d'exemples différents pour être bien sûr qu'il fonctionne correctement ! (et avec valgrind bien sûr...)
Ils se peut que certain points du TP vous semblent actuellement hors de porté, ne vous inquiètez pas ces points difficiles seront détaillés en cours de TP.
Notation
Chaque fonctionnalité est notée sur 5 points :
vous perdez 1 point si la désallocation ne fonctionne pas
vous perdez 2 points si il y a une erreur de type pointeur
Vous n'avez aucun point si le résultat est faux (ou si il ne respecte pas le format imposé!)
Attention : le seul moyen à ma disposition de tester que votre programme fonctionne est l'évaluation des polynomes, il est donc très important que cela fonctionne correctement et selon le format imposé. Aucune réclamation ne sera possible à ce sujet.
Pour vous faciliter le debuggage vous avez intérêt à programmer une fonction d'affichage du polynome. Dans la version finale que vous rendrez il est très important que votre programme n'affiche rien qui ne soit pas demandé.Typiquement dans votre version finale il ne doit y avoir qu'un seul et unique printf("%i\n",...); qui affiche le résultat d'une évaluation.
Rendu
Le rendu s'effectuera par un seul et unique mail par binôme à cette adresse wassner@esiea.fr . (Vous recevrez de ma part un mail d'accusé reception dans les 3 jours).
Vous attacherez votre fichier de code « .c » (pas de copié collé dans le corps du mail). Le nom de ce fichier doit être le "logname" de celui qui l'envoie. Par exemple, si Jean Dupond dont l'email est "jdupond@et.esiea.fr" envoie sont TP, le fichier attaché devra s'appeler : "jdupond.c". Cela me permet très rapidement d'envoyer un mail en cas de problème (de compilation par exemple)...
Le projet est à rendre pour le lundi 26 novembre au plus tard (2 points de pénalité par jour de retard)
Ce fichier contiendra en commentaire sur la premiere ligne les noms et classe du binôme.
Tout non respect des modalité de rendu pourront faire l'objet de points de pénalité.
Ces contraintes peuvent vous paraître exagéré mais pensez que je vais devoir recuperer une quarantaine de projets via ce moyen, si personne ne respecte les formats la correction devient une tâche titanesque. Sachez aussi que la rigueur fait partie des qualités qui sont appréciées auprès des ingénieurs, et c'est une qualité qui se forge dès aujourd'hui.
Si vous avez des questions n'hésitez pas à les poster ici, j'y répondrai le plus rapidement possible.
Les 4 fichiers d'exemple ci-dessous sont très proche de ce que j'utiliserai pour évaluer votre travail. Seul quelques "détail" seront modifiés.

Commentaires
Le mardi 13 novembre 2007 à 16:09, par Alizier benjamin
Je suis tout seul et avec ma main droite cassée, je cherche donc un binome pour le TP.
Merci
Le samedi 29 décembre 2007 à 23:17, par fellague136
je cherche un programme en pascal qui permit de : -saisir un polynome -l'affichage à l'ecran calculer sa valeur en un point calculer le polynome dirivé
Le mercredi 9 janvier 2008 à 12:33, par Hubert WASSNER
Désolé mais nous avons fait cela en langage C ...
Ajouter un commentaire