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 :

Etude de structures


Sujet :

C

  1. #1
    Invité
    Invité(e)
    Par défaut Etude de structures
    Bonjour à tous,

    Actuellement, je suis étudiant et j'apprends le langage C. Et je vois en ce moment les structures. Mon prof vient de me filer un exercice sur les structures que voici :

    Un polynôme à une variable (type "polynôme") sera représenté comme une liste chaînée d'enregistrements, chaque enregistrement (type "terme") contenant le coefficient et le degré d'un terme du polynôme, ainsi qu'un pointeur sur l'enregistrement suivant. Les termes sertont ordonnés par valeurs d'exposants décroissants et les termes de coefficients nul ne seront pas représentés. Par exemple, le coefficient 4*x^3+12*x-7 sera représenté par une liste de trois "termes", le premier ayant le coefficient 4 et le degré 3, le deuxième ayant le coefficient 12 et le degré 1 et le troisième ayant le coefficient -7 et le degré 0.

    a. Donner les déclarations C des types terme et polynôme. Ecrire une fonction C nouveau qui crée un objet de type terme dont les champs portent des valeurs passés en paramètres à la fonction, et qui renvoie son adresse.

    J'ai pensé à cette solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    typedef struct terme {
    int coeff
    int degre
    } terme
     
    typedef struct Polynome{
    terme
    struct Ploynome*  Ploy_suivant
    } Poly
    Par contre, je ne vois pas comment écrire la fonction "nouveau" (au niveau de la structure).

    Attention : Je ne demande pas la solution sur un plateau d'argent mais qu'on m'explique pour que je puisse comprendre (mais je ne pense pas que ça soit la philosophie du forum de donner la réponse sur un plateau).

    D'avance merci...

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut Re: Etude de structures
    Salut,


    Citation Envoyé par overmac
    Par contre, je ne vois pas comment écrire la fonction "nouveau" (au niveau de la structure).
    En C tu ne peux pas 'associer' une fonction à une structure comme tu pourrais le faire avec un langage orienté objet. La solution consiste tout simplement à faire une méthode qui renvoit une structure initialisé afin de ne pas avoir à l'initialiser à la main. La signature de ta méthode pourrait être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    terme* nouveau (int coeff, int degre);
    Et il te suffit d'allouer dynamiquement une nouvelle structure terme (avec malloc) et de l'initialiser avec les paramètres de la méthode...

    Cela se rapproche un peu des langage Orienté Objet en 'cachant' l'organisation exacte de la structure, et en proposant des méthodes pour la création/destruction/moidification... C'est à dire que les personnes qui utiliseront ta structure n'auront pas à connaitre son format exact. Ils utiliseront les méthodes que tu leurs auras fournit.

    Ceci n'est pas forcément évident avec une structure simple comme celle là... mais avec une structure plus compliqué cela devient plus évident...

    a++

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    J'ajoute juste un ptit conseil, l'élément "terme" de ta structure "polynome", met plutot un pointeur vers la structure terme sinon tu va avoir quelques petits soucis
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par CSoldier
    J'ajoute juste un ptit conseil, l'élément "terme" de ta structure "polynome", met plutot un pointeur vers la structure terme sinon tu va avoir quelques petits soucis
    Pourrais-tu expliquer avec du code, je te prie ?(c'est vrai qu'en étant débutant, je ne vois pas bien)

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par overmac
    Citation Envoyé par CSoldier
    J'ajoute juste un ptit conseil, l'élément "terme" de ta structure "polynome", met plutot un pointeur vers la structure terme sinon tu va avoir quelques petits soucis
    Pourrais-tu expliquer avec du code, je te prie ?(c'est vrai qu'en étant débutant, je ne vois pas bien)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    typedef struct terme_s
    {
       int coeff;
       int degre;
    }
    terme_s;
     
    typedef struct Polynome
    {
       terme_s *terme;
       struct Ploynome*  Ploy_suivant;
    }
    Poly;
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci pour ta réponse.

    Donc maintenant, je dois créer une fonction "nouveau" qui crée un objet de type terme dont les champs portent des valeurs passés en paramètres à la fonction, et qui renvoie son adresse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    tydef struct nouveau {
     
    terme_precedent *terme
    struct terme_precedent* terme
    } 
    nouveau;
    Qu'en pensez-vous ?

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Heu ca c'est une structure pas une fonction, je te conseillerais vivement d'ouvrir ton livre de C, ou de relire quelques cours sur internet, c'est le moment où jamais !

    Un prototype de la fonction t'as déjà été fournit plus haut et tu trouve plein de cours sur le site de dvp au cas où, faut apprendre, ca se devine pas !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par CSoldier
    Heu ca c'est une structure pas une fonction, je te conseillerais vivement d'ouvrir ton livre de C, ou de relire quelques cours sur internet, c'est le moment où jamais !

    Un prototype de la fonction t'as déjà été fournit plus haut et tu trouve plein de cours sur le site de dvp au cas où, faut apprendre, ca se devine pas !
    Heu...désolé je recommence.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    terme_s nouveau (int coeff, int degre){
    terme_s *s_terme;
    s_terme = (terme_s*) malloc(sizeof(terme_s));
    s_terme -> coeff = coeff;
    s_terme -> degre = degre;return s_terme;
    }
    Et là, c'est mieux ?

  9. #9
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut Re: Etude de structures
    Pas la peine de caster le malloc et qui plus est il faut toujours et toujours tester le retour de malloc et en plus ta fonction doit retourner un pointeur vers ta structure (le mieux serais vers le nouvel element créé de la liste Poly etant donné que c'est ca ta vraie liste et là en plus ... heu lis ca, je te le conseil !
    http://nicolasj.developpez.com/articles/listesimple/
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  10. #10
    Invité
    Invité(e)
    Par défaut Re: Etude de structures
    Citation Envoyé par CSoldier
    Je vais le lire avec la plus grande attention.

  11. #11
    Membre confirmé Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Par défaut Re: Etude de structures
    Citation Envoyé par adiGuba
    Salut,
    En C tu ne peux pas 'associer' une fonction à une structure comme tu pourrais le faire avec un langage orienté objet.
    rectification, si tu peux le faire, ca s'appelle du C orienté objet, mais dans ton cas tu n'en a pas besoin

Discussions similaires

  1. recuperation de la structure d'une base
    Par pascalT dans le forum 4D
    Réponses: 7
    Dernier message: 07/06/2006, 15h32
  2. [tables systèmes] extraction de la structure d'une base
    Par laffreuxthomas dans le forum Autres SGBD
    Réponses: 6
    Dernier message: 23/03/2006, 13h24
  3. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09
  4. Structure de données de type "RECORD"
    Par chaours dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/09/2002, 17h10
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

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