IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Polynôme en C


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 22
    Points : 0
    Points
    0
    Par défaut Polynôme en C
    Bonjour, je dois faire programme qui peut:
    initialiser un polynôme au polynôme nul
    –lire un polynôme, calculer sa dérivée par rapport à x et écrire le résultat
    –lire deux polynômes, calculer leur somme et écrire le résultat

    Selon moi, il faut écrire 3 fonctions à part (void initialiser, void somme, ...) mais pour le contenu, quelqu'un pourrait t-il m'aider?
    Merci d'avance

    J'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct Monome {
        double coefficient; 
        long degre;
        struct Monome * next;
    } Monome;
    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct{
        List * monomes;
        long degre;
    } Polynome;

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    <insérer ici exactement ce que l'on veut, l'utilisateur ne le lira pas et n'y répondra pas non plus à l'image de ses 5 autres threads sur le même modèle>

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Bonjour,

    La dérivation de polynômes est effectivement un exercice fréquent et toujours aussi à propos.

    Citation Envoyé par couturierclaire Voir le message
    Selon moi, il faut écrire 3 fonctions à part (void initialiser, void somme, ...) mais pour le contenu, quelqu'un pourrait t-il m'aider?
    Merci d'avance
    En effet, c'est une bonne approche mais sais-tu déjà dériver un polynôme ? (sur papier, s'entend). C'est extrêmement simple mais ça ne s'invente pas forcément si on ne sait pas le faire. Si ce point est clair pour toi, alors le côté algorithmique de la chose devrait te venir plus ou moins naturellement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct{
        List * monomes;
        long degre;
    } Polynome;
    C'est assez pertinent mais souviens-toi que le degré d'un polynôme est celui de son plus haut monôme, et comme ceux-ci doivent normalement être triés dans ta liste chaînée, alors le degré de ton polynôme est celui de ton premier maillon. Il est donc inutile de le répéter dans la structure « Polynome ». Et comme, du coup, ta structure « Polynome » ne contient plus qu'un pointeur vers le début de la liste, elle devient elle-même sans objet. Par contre, certains professeurs sont parfois tentés de cacher le pointeur derrière un typedef, ce qui est une TRÈS mauvaise habitude. :-)

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Bonjour Obsidian, bonjour BufferBob, bonjour les autres
    Citation Envoyé par Obsidian Voir le message
    En effet, c'est une bonne approche mais sais-tu déjà dériver un polynôme ? (sur papier, s'entend).
    Tu devrais aller lire tout ça.
    http://www.developpez.net/forums/d15...ine-caracteres
    http://www.developpez.net/forums/d15...ine-caracteres
    http://www.developpez.net/forums/d15.../c/pointeurs-c

    A mon avis non il ne sait pas et en fait il n'en a rien à cirer...

    Citation Envoyé par Obsidian Voir le message
    C'est extrêmement simple mais ça ne s'invente pas forcément si on ne sait pas le faire. Si ce point est clair pour toi, alors le côté algorithmique de la chose devrait te venir plus ou moins naturellement.
    A mon avis, le coté algorithmique de la chose sera long long long à venir, même plus ou moins naturellement...

    Citation Envoyé par Obsidian Voir le message
    Et comme, du coup, ta structure « Polynome » ne contient plus qu'un pointeur vers le début de la liste, elle devient elle-même sans objet.
    Perso je préfère quand-même garder un type dédié à la liste. Déjà ça déporte le soucis du double pointeur (au lieu de devoir gérer un t_monome** dans les fonctions d'insertions de maillon, tu gères juste un t_polynome*) mais surtout ça aide à l'évolutivité. Si demain tu veux rajouter des outils dans ta liste (comme par exemple le nombre d'éléments ou autre), te suffit de le rajouter dans le t_polynome* et toutes les fonctions de gestion de ta liste y ont alors instantanément accès...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 22
    Points : 0
    Points
    0
    Par défaut
    Bonjour, j'ai réussi à faire le programme ci-dessous, cependant je n'ai pas utilisé la structure que mon enseignant m'a donné(voir en bas), j'aimerais savoir si quelqu'un pourrait m'aider à modifier mon programme de telle sorte que la structure que j'ai faite soit remplacée par celle de mon enseignant (que mon programme utilise plutôt la structure donnée par mon ensegnant)?
    Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct Monome {
     double coefficient;
     long degre;
     struct Monome * next;
    } Monome;
    typedef Monome List;
    typedef struct{
     List * monomes;
     long degre;
    } Polynome;

    Voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    #include <stdio.h>
    #include <stdlib.h>
    typedef struct polynome{
    int degre;
    float *coeff;
    }polynome;
     
     
     
    polynome *initialiser()
    {
    polynome *p;
    int deg;
    float *tab;
    int i;
    printf("Degre =\n");
    scanf("%d", &deg);
    tab = (float *) malloc(deg * sizeof(float));
    for (i=0; i<=deg; i++)
    {
    printf("Coeff x^%d = ", i);
    scanf("%f", tab+i);
    }
    p = (polynome *) malloc(sizeof(polynome));
    p->degre = deg;
    p->coeff = tab;
    return p;
    }
     
     
     
    void afficher(polynome *p)
    {
    int i;
    printf("P(x) = ");
    for (i=p->degre; i>0; i--)
    {
    if (p->coeff[i] != 0)
    printf("%f*x^%d + ", p->coeff[i], i);
    }
    printf("%fx^0\n\n", p->coeff[0]);
    }
     
    polynome *ajouter(polynome *p1, polynome *p2)
    {
    polynome *res;
    int deg_max;
    float *tab;
    int i;
    if (p1->degre < p2->degre)
    deg_max = p2->degre;
    else
    deg_max = p1->degre;
    tab = (float *) malloc(deg_max * sizeof(float));
    for (i=0; i<=deg_max; i++)
    tab[i] = p1->coeff[i] + p2->coeff[i];
    res = (polynome *) malloc(sizeof(polynome));
    res->degre = deg_max;
    res->coeff = tab;
    return res;
    }
     
     
    int main(int argc, char **argv)
    {
    polynome *p1, *p2, *p3;
    p1 = initialiser();
    afficher(p1);
    p2 = initialiser();
    afficher(p2);
    p3 = ajouter(p1, p2);
    afficher(p3);
    free(p1);
    free(p2);
    free(p3);
    exit(0);
    }

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 22
    Points : 0
    Points
    0
    Par défaut
    je suis désolé, c'était pas bon le code ,je l'ai modifié,veuillez revoir mon message précédent

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Il faut absolument que tu tiennes compte des remarques que l'on te fait et que tu consultes tes messages privés :



    Ensuite, ce que tu as écrit est encourageant mais inutilement compliqué. Et même beaucoup trop ! Par exemple, pourquoi allouer un float avec malloc() et recueillir son adresse dans le pointeur tab, alors que tu pourrais directement déclarer un flottant en tant que variable locale comme tu le fais déjà pour deg ?

    Ensuite, tu n'as pas encore dérivé ton polynôme. Fais une recherche sur ce site. il y a un an, quelqu'un a eu exactement le même problème et la solution est quelque part dans les forums.

  8. #8
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 22
    Points : 0
    Points
    0
    Par défaut
    Finalement voici le début de mon programme, mais il me manque la fonction d'affichage, quelqu'un pourrait t-il m'aider?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    void lecture_polynome(Polynome * polynome, char * filename)
    {
        double coefficient;
        long degre;
        int n;
     
        Monome * nouveau = NULL;
        Monome * debut = polynome->monomes;
     
        FILE * source = NULL;
        source =  fopen(filename,"r");
        if (source == NULL)
        {
            fprintf(stderr, "ERREUR ouverture de %s t \n", filename);
            return 1;
        }
     
        while ((n = fscanf(source,"%lf %ld ", &coefficient, &degre)) == 2)
        {
            nouveau = (Monome*) malloc(sizeof(Monome));
            if (nouveau != NULL)
            {
                //insertion eb tête
                nouveau->next = debut;
                nouveau->coefficient = coefficient;
                nouveau->degre = degre;
                debut = nouveau;
            }
            printf("Coefficient = %lf\tDegre = %ld\n", nouveau->coefficient, nouveau->degre);
        }
     
        polynome->degre = debut->degre;
     
        fclose(source);
    }
     
     
     
    int main()
    {
        Polynome polynome;
     
     
        lecture_polynome(&polynome, "bis.txt");
     
     
        return 0;
    }

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Par exemple, pourquoi allouer un float avec malloc() et recueillir son adresse dans le pointeur tab, alors que tu pourrais directement déclarer un flottant en tant que variable locale comme tu le fais déjà pour deg ?
    T'as pas bien étudié son code (ceci dit, vu sa quantité impressionnante de commentaires explicatifs...)
    Il a défini sa structure polynôme comme contenant un tableau de flottants ; chaque flottant représentant alors un monôme individuel (mais les monômes étant, chez-lui, non chainés). Donc au début il alloue "deg" flottants...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Résolution de polynôme
    Par ninie37 dans le forum Pascal
    Réponses: 5
    Dernier message: 29/12/2006, 21h49
  2. [TP] Projet Pascal Polynômes
    Par dtrack dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 13/12/2006, 20h07
  3. division euclidienne de polynôme
    Par gronaze dans le forum Mathématiques
    Réponses: 1
    Dernier message: 29/06/2006, 20h53
  4. polynômes
    Par ford_escort dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 29/01/2006, 18h06
  5. Programme d'évaluation d'un polynôme
    Par gitx dans le forum C++
    Réponses: 3
    Dernier message: 27/01/2006, 21h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo