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 :

liste chainées pour representation de polynome creux


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut liste chainées pour representation de polynome creux
    excusez ma brieveté, mais je suis absolument agassé par un exercice que je devrais presenter dans peu de temps

    voila je vous presente mon exercice, ça fait plus de deux jours que j'essaie avec, mais je reste bloqué, si c'est possible que vous m'aidiez, j'en serais tres reconnaissant









    merci d'avance , si ce n'etait pas tres important pour moi, j'aurais laissé tomber, mais je compte sur vous, chers amis

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Le premier conseil que je pourrai te donner sera: aide nous à t'aider... Dis nous exactement ce sur quoi tu buttes, que ce soit du point de vue de la création l'algorithme ou de celui de sa mise en oeuvre, montre nous ce que tu as déjà fait, et, si tu as des erreurs de compilation/d'exécution, fournis nous un code minimum compilable qui permette de reproduire le problème.

    Il faut en effet savoir que, normalement, un prof va te donner des excercices *relativement* simple à résoudre et que la pire chose que nous puissions faire pour toi est de te donner la solution "toute cuite"...

    En effet, la programmation se base toujours sur l'exploitation et la mise en oeuvre de concepts relativement proches, et, si on te fournis tout tout fait, tu n'apprendra jamais à mettre les concepts en oeuvre...

    "Donne un poisson à quelqu'un, il mangera un jour, apprend lui à pêcher, et il mangera toute sa vie" est l'idée que nous essayons de garder en permanence à l'esprit

    La création de la structure ne devrais pas poser énormément problème, vu que le prof a meme été jusqu'à en donner une certaine représentation graphique (deuxieme image)

    Du point de vue algorithmique, il n'y a rien qui ressemble plus à la logique à mettre en oeuvre pour insérer un élément dans une liste doublement chainée que celle qui permettra d'insérer un élément dans une autre liste doublement chainée... Et on peut tres bien dire la meme chose en ce qui concerne l'affichage de ses élément, la suppression d'un des éléments de la liste, le tri ou la destruction de la liste...

    Le dernier conseil que j'aurais à te donner (parce que, malgré tout, tu comprendras à l'usage que je t'en ai donné pas mal ) c'est qu'une application doit toujours etre envisagée sur le meme schéma:

    1. spécification: répondre, entre autres, aux questions
      • que doit elle faire
      • avec quelle données
      • quelles fonctions seront nécessaires
    2. conception: créer les algorithmes permettant à chacune des fonctions envisagées de remplir son oeuvre
    3. codage: traduire les algorithmes que l'on a créé en [2] dans le langage de programmation que l'on a décidé d'utiliser


    Nous n'avons rien contre le fait de t'aider pour chacune de ces étapes, mais il faut au minimum que tu fasse chaque fois un petit effort personnel...

    Ce que nous, nous ferons, ce ne sera qu'une "mise au point" par rapport à ton propre travail...

    Le deal me semble honnete, non

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    je comprends tres bien le fait que vous vouliez que je m"auto-aide" :d et je vous remercie pour cela, mais si j'ai posté cette demande, c'est que je suis vraiment tout desesperé,j'avoue que j'ai fait une faute, c de pas travailler a l'avance,mais je ne suis pas un grand genie en langage C ( ni meme un petit d'ailleurs)

    mais c'est promi, mes prochains excercices je les ferai ici même, si j'aurais des problemes, je me dirigerai vers vous ( bien sur en precisant mon avancement dans le travail)

    mais cette fois ci,j'ai besoin de votre aide (si je puisse dire) TOTALE

    mais bon, si ce n'est pas possible, je n'aurais qua m'en vouloir, et a moi seul ,

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Tu pourrais déjà commencer par nous écrire, avec tes mots à toi, ce que tu as compris de l'exercice...

    En effet, et tu t'en rendras également compte à l'usage, que tu trouves généralement un minimum de 50% de la réponse dans le simple énoncé de la question...

    Comme je l'ai indiqué en fin de message, il faut bien etre conscient que l'écriture du programme en langage C est la toute dernière étape d'un processus qui, en définitive, n'est pas si compliquée (ni la traduction en C, ni le processus qui y mène)...

    Le tout, c'est de travailler dans un ordre logique: avant de réfléchir à "comment", il faut réfléchir à "quoi".

    Le "quoi", une fois correctement posé (une fois que en tu auras une représentation mentale correcte) t'amenera tout naturellement au comment, et donc à la logique la plus sensée à suivre...

    Cette logique la plus sensée sera alors facile à représenter sous la forme d'un algorithme, et la transformation de l'algorithme en code "C" ne sera plus qu'une simple question de "dactylographie"...

    Pour quelqu'un d'un tant soit peu habitué, l'exercice que tu présentes est réalisable sur deux heures... allez deux heures et demie si tu "tappe à deux doigts" et que tu ne connais pas le clavier...

    Je l'ai écrit, et je ne reviendrai pas dessus, on est tout à fait d'accord pour t'aider dans toutes les étapes, et, surtout, pour diriger ta réflexion de manière à t'aider à trouver la solution adaptée...

    Mais on ne fera jamais un devoir à la place de quelqu'un d'autre...

    Donc, la première étape, c'est de lire ma signature, et surtout la sitation qu'elle contient, de réfléchir un peu à ce qu'elle veut dire, et de mettre sa signification en pratique pour la lecture de ton énoncé...

    Avec cela, tu seras en mesure de répondre à la premiere question: "que doit faire l'application"...

    Donne nous déjà cette réponse

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Allez, histoire de te donner un peu de courrage...

    La conception d'une application, ca s'envisage comme le fait de peler un oignon...

    Chaque peau retirée permet d'accéder à un autre peau qui permet de peaufiner le travail.

    La première peau sera à peu de chose pres toujours la meme et consiste à completer brièvement les phrases
    Je dois faire une application qui [1](breve description)
    Cette application utilisera une structure de [2](trois mots) pour parvenir à ses fins
    La deuxième peau va un peu plus loin et consiste à completer brièvement la phrase
    Pour y arriver, l'application a besoin
    • d'une fonction que je nommerai [3](un nom) qui permettra de [4](breve description)
    • d'une fonction que je nommerai [5](un nom) qui permettra de [6](breve description)
    • d'une fonction que je nommerai [7](un nom) qui permettra de [8](breve description)
    • d'une fonction que je nommerai [9](un nom) qui permettra de [10](breve description)
    • d'une fonction que je nommerai [11](un nom) qui permettra de [12](breve description)
    Avant d'attaquer la troisième peau de l'oignon, il faudra avoir fini de traiter ces deux premières...

    Et toutes les informations qui te sont nécessaires se trouvent directement dans le document qui explique l'exercice

  6. #6
    Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    excuse moi pour le retard

    j'avais un probleme de connexion et je pouvais pas ecrir avant

    merci pour tous tes conseils , je les ai pris on consideration, et a ma donné un grand effort pour le faire seul


    j'ai passé la journée a le faire, et je suis tres fier de moi j'ai reussi a rediger kelke chose, mais j'avais pas le pc sur moi , donc cetait juste manuscrit jvais essayer de le taper en dev , et apres si c possible vous m'aideriez a le compiler


    merci encore pour tout

  7. #7
    Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    voila ce que j'ai reussi a faire jusqua mnt mais ça ne veux pas se compiler


    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    #include <stdio.h>
    #include <stdlib.h>
    #include"poly.h"
     
    typedef struct liste2* monome;
     
    typedef struct liste2
                        {
                                  int deg;
                                  int coef;
                                  monome suivant;
                                  monome precedent;
                        }liste2;
    monome inserer(monome l,int d,int c);
     
    monome monome_vide();
     
     
    void afficher_croi(monome l);
     
    void afficher_d(monome l);
     
     
    int main()
    {monome l=monome_vide();
    int d,c,k;
    do{
    printf("donner le deg et le coef:");
    scanf("%d%d",&d,&c);
    l=inserer(l,d,c);
    printf("1 pour ajouter un autre\n");
    scanf("%d",&k);}
    while(k!=0);
    afficher_croi(l);
    afficher_d(l);
      system("PAUSE");	
      return 0;
    }
    monome monome_vide()
    {monome l;
    l->suivant=NULL;
    l->precedent=NULL;
    return l;
    }
     
     
    monome inserer(monome l,int d,int c)
    {monome pc,pp,px;
    px=(monome)malloc(sizeof(monome));
    if(px==NULL) {printf("pas assez de memoire"); exit(0);}
    px->deg=d;
    px->coef=c;
    px->suivant=NULL;
    px->precedent=NULL;
    pc=l;
    pp=NULL;
    while(pc && pc->deg<d)
    {pp=pc;
    pc=pc->suivant;
    }
    px->suivant=pc;
    px->precedent=pc;
    if(pc)
    pc->precedent=px;
    if(pp)
    pp->suivant=px;
    if(!pp)
    l=px;
    return l;
    }
     
    void afficher_croi(monome l)
    {monome p=l;
    while(p)
    {printf("%dX^%d+",p->deg,p->coef);
    p=p->suivant;
    }
    }
     
    void afficher_d(monome l)
    {monome p=l;
    while(p)
    {p=p->suivant;}
    while(p)
    {printf("%dX^%d+",p->deg,p->coef);p=p->precedent;}
    }

  8. #8
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Quelques remarques:
    La définition de monome cache le fait qu'il s'agit en réalité d'un pointeur sur la structure qui décrit le monôme. Ceci entraine souvent un manque de clarté dans le code. Je préférerais, pour ma part que la structure s'appelle monome et que, si j'ai besoin d'un pointeur, écrire explicitement monome *. Tu t'es laissé prendre à ce piège :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    monome monome_vide()
    {monome l;
    l->suivant=NULL;
    l->precedent=NULL;
    return l;
    }
    l est un pointeur. Créer un pointeur ne crée pas l'objet pointé. l->suivant et l->précédent n'existent pas. Tu dois créer la structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    monome monome_vide()
    {
      monome l = malloc(sizeof(*l));
      if(l !=NULL)
      {
        l->suivant=NULL;
        l->precedent=NULL;
      }
      return l;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    monome inserer(monome l,int d,int c)
    {monome pc,pp,px;
    px=(monome)malloc(sizeof(monome));
    ....
    Alloue la taille d'un pointeur (sizeof(monome)) pas la place pour placer la structure. Ecrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    px=malloc(sizeof(*px));

Discussions similaires

  1. polynomes creux et les listes doublements chainées
    Par mustapha_smist dans le forum C
    Réponses: 3
    Dernier message: 11/05/2011, 09h52
  2. Double liste chainée pour un memory manager
    Par FunkyTech dans le forum C++
    Réponses: 8
    Dernier message: 01/03/2008, 11h36
  3. Réponses: 4
    Dernier message: 04/11/2007, 13h46
  4. Réponses: 8
    Dernier message: 03/12/2006, 17h46
  5. Réponses: 28
    Dernier message: 24/05/2006, 18h20

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