Language C Polynome

Language C Polynome - C - Programmation

Marsh Posté le 01-03-2014 à 16:28:42    

Bonjours !  
Voilà j'ai un ds de programmation en C et je vous avouerais que je suis totalement perdu dans cette matière, j'ai une prof qui nous as très mal enseigné ce langage (qui m'intéressais beaucoup avant son cours..).
Je regardais donc le ds de l'an dernier et je remarque que je ne sais rien faire, j'aimerais avoir la correction de cet exercice pour que je vois à peu prés comment sa marche et de ce fait je pourrais faire les autres ds. Vous êtes mon dernier espoir merci d'avance.  
 
 
Polynôme: Nous souhaitons travailler sur des polynômes de taille et de degré variables. Un polynôme sera  
représenté comme un tableau de termes, chaque terme comportant un coefficient et un degré.  
 
1) Déterminer la structure de donnée permettant de représenter le terme d’un polynôme en C.  
2) Comment va être représenté le polynôme ?  
3) Sachant qu’on ne sait pas combien de termes comporte le polynôme au moment où l’on  
écrit le programme, comment va-t-on déclarer le polynôme ? Que va-t-on être obligé de  
faire dans le main pour pouvoir l’utiliser ensuite ?  
4) Programmer les fonctions en langage C permettant :  
• De saisir le tableau des termes au clavier  
• D’afficher le polynôme  
• De rechercher un terme de degré donné dans un polynôme (affiche son coefficient ou 0)  
5) Ecrire une fonction C permettant de créer un polynôme à partir de la somme de deux  
polynômes.  
6) Ecrire en C un programme principal permettant de tester le tout.

Reply

Marsh Posté le 01-03-2014 à 16:28:42   

Reply

Marsh Posté le 01-03-2014 à 17:45:57    

Eh bien c'est un problème de structure de donnée principalement, ensuite 3) laisse entendre qu'on veut pouvoir utiliser des polynômes de taille arbitraire et qu'on va faire des allocations mémoire (malloc ou similaire)

 

D'abord l'énoncé ne principe pas de quelle nature sont les coefficients : réels, entiers relatifs.. Bon, disons que c'est des réels, représentés par des float ou des double, ensuite le degré est un int..
Je te laisse imaginer la réponse à la question 1) !

 

Ensuite, tu as plus ou moins le choix. Tu peux faire avec une liste chaînée par exemple, ça m'a l'air facile. Bonus point : représenter le polynôme nul par une liste vide? (ça m'a l'air nécessaire vu que le degré du polynôle nul est mons l'infini..)

 

Enfin, pas tellement le choix si l'on veut faire avec un tableau il faudrait faire un "dynamic array", tableau redimensionnable en français je suppose (c'est un peu nul d'apprendre le C avec tous les termes comme ça en français :o)
J'ai trouvé des infos là-dessus : http://stackoverflow.com/questions [...] wing-array
(attention c'est pas à reprendre tel quel, à adapter, et "I've omitted safety checks for brevity" signifie qu'il n'a pas écrit les trucs pour les malloc qui ont échoué)

 

Mais bon, oublie peut-être ce dynamic array.
Si t'es coincé, commence par faire tout le programme avec comme structure de données un vulgaire tableau à taille fixe (par ex. 1000 éléments). Les éléments du tableau étant des "termes". Il faudra initialiser ce tableau avec des zéros partout.

 

Ensuite, une seconde version avec liste chaînée.

 

Bonus point : ne stocker que les termes à coefficient non nul.


Message édité par blazkowicz le 01-03-2014 à 17:51:11
Reply

Marsh Posté le 01-03-2014 à 19:43:01    

waw... je pense que la prog n'est pas fais pour moi ^^

Reply

Marsh Posté le 01-03-2014 à 21:38:05    

tama80 a écrit :

Bonjours !  
Voilà j'ai un ds de programmation en C et je vous avouerais que je suis totalement perdu dans cette matière, j'ai une prof qui nous as très mal enseigné ce langage (qui m'intéressais beaucoup avant son cours..).
Je regardais donc le ds de l'an dernier et je remarque que je ne sais rien faire, j'aimerais avoir la correction de cet exercice pour que je vois à peu prés comment sa marche et de ce fait je pourrais faire les autres ds. Vous êtes mon dernier espoir merci d'avance.  
 
 
Polynôme: Nous souhaitons travailler sur des polynômes de taille et de degré variables. Un polynôme sera  
représenté comme un tableau de termes, chaque terme comportant un coefficient et un degré.  
 
1) Déterminer la structure de donnée permettant de représenter le terme d’un polynôme en C.  
2) Comment va être représenté le polynôme ?  
3) Sachant qu’on ne sait pas combien de termes comporte le polynôme au moment où l’on  
écrit le programme, comment va-t-on déclarer le polynôme ? Que va-t-on être obligé de  
faire dans le main pour pouvoir l’utiliser ensuite ?  
4) Programmer les fonctions en langage C permettant :  
• De saisir le tableau des termes au clavier  
• D’afficher le polynôme  
• De rechercher un terme de degré donné dans un polynôme (affiche son coefficient ou 0)  
5) Ecrire une fonction C permettant de créer un polynôme à partir de la somme de deux  
polynômes.  
6) Ecrire en C un programme principal permettant de tester le tout.


 

tama80 a écrit :

waw... je pense que la prog n'est pas fais pour moi ^^


 
A mon avis, la première chose à faire avant d'attaquer les annales c'est de bien relire les cours et de refaire les TD et les TP. C'est mieux que d'essayer de comprendre à partir des annales.
Si les cours sont si mauvais que ça, il y a plein de tuto sur le net qui reprend les bases de la programmation : http://fr.openclassrooms.com/infor [...] ammer-en-c ou http://franckh.developpez.com/arti [...] uter-en-c/
 
Enfin, un exemple de code (qui n'est pas la solution de l'annale) pour montrer que c'est faisable et compréhensible lorsque l'on a les bases.

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.     int degree = 0;
  6.     printf("Quel est le degree du polynome ? " );
  7.     scanf("%d", &degree);
  8.     printf("Le degree du polynome est %d\n", degree);
  9.     int* tabCoeff = malloc((degree + 1) * sizeof(int));
  10.     int degree_courant;
  11.     for(degree_courant = 0; degree_courant <= degree; degree_courant = degree_courant+1) {
  12.         int coeff = 0;
  13.         printf("Entrez le coefficient pour le degree %d : ", degree_courant);
  14.         scanf("%d", &coeff);
  15.         tabCoeff[degree_courant] = coeff;
  16.     }
  17.     int cpt;
  18.     printf("Le polynome est : " );
  19.     for(cpt = 0; cpt < degree + 1; cpt = cpt+1) {
  20.         if(cpt < degree) {
  21.             printf("%dX^%d + ", tabCoeff[cpt], cpt);
  22.         } else {
  23.             printf("%dX^%d\n", tabCoeff[cpt], cpt);
  24.         }
  25.     }
  26.     printf("Fin du programme.\n" );
  27.     return 0;
  28. }

Reply

Marsh Posté le 01-03-2014 à 23:31:50    

Je te remercie le cours est bien structuré je me lance sur les pointeurs la !

Reply

Marsh Posté le 02-03-2014 à 08:21:36    

   int degree_courant;
    for(degree_courant = 0; degree_courant <= degree; degree_courant = degree_courant+1) {
        int coeff = 0;
        printf("Entrez le coefficient pour le degree %d : ", degree_courant);
        scanf("%d", &coeff);
        tabCoeff[degree_courant] = coeff;
    }

 

Déclarez un int dans la boucle, ce serait pas du C++ ça?
Tu peux toujours déclarer un int coeff=0; au début du main.

 

Je me suis trop emporté avec ces histoires de liste chaînées ou de tableau redimensionnable, en effet la façon ci-dessus de demander le degré du polynôme qu'on veut entrer et de faire un malloc pour créer le tableau c'est très bien.

Message cité 1 fois
Message édité par blazkowicz le 02-03-2014 à 08:24:24
Reply

Marsh Posté le 02-03-2014 à 15:52:56    

blazkowicz a écrit :

   int degree_courant;
    for(degree_courant = 0; degree_courant <= degree; degree_courant = degree_courant+1) {
        int coeff = 0;
        printf("Entrez le coefficient pour le degree %d : ", degree_courant);
        scanf("%d", &coeff);
        tabCoeff[degree_courant] = coeff;
    }
 
Déclarez un int dans la boucle, ce serait pas du C++ ça?
Tu peux toujours déclarer un int coeff=0; au début du main.

Le C a des variables locales a un bloc depuis ses débuts.
Par contre depuis C99 on peut même écrire:
for(int degree_courant = 0; degree_courant <= degree; degree_courant = degree_courant+1) {...
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

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