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 :

Probleme de conception d'une methode d'enregistrement dans un fichier


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2006
    Messages : 105
    Points : 109
    Points
    109
    Par défaut Probleme de conception d'une methode d'enregistrement dans un fichier
    Bonjour à tous,
    je suis entrain de développer un petit systeme expert, c'est un programme qui a partir de regles de production et de donnéés (faits) il essaye de raisonner pour aboutir à un resultat...

    mon probleme c'est que je travaille avec des structures dont voici le code
    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
     
    #define longueurChaine 50
     
    enum tetat {vrai, faux, indetermine, inconnu};
    typedef char chaine[longueurChaine];
    typedef struct CELL cell;
    typedef cell* pcell;
    typedef struct TFAIT tfait;
    typedef struct TAFFIRMATION taffirmation;
    typedef struct TREGLE tregle;
    typedef struct ENREG_REGLE enreg_regle;
     
    struct TFAIT{
    	chaine libelle;
    	tetat etat;
    	bool editable;
    	bool demandable;
    	pcell deduit_de;
    };
     
     
    struct TAFFIRMATION{
    	pcell fait;
    	tetat etat;
    };
     
    struct TREGLE{
    	pcell cond;
    	taffirmation action;
    	bool active;
    };
     
     
    struct ENREG_REGLE{
    	chaine libelle;
    	tetat etat;
    	bool premisse;
    };
     
    struct CELL{
    	cell* next;
    	union ELEMENT{
    		tregle rval;
    		tfait fval;
    		taffirmation aval;
    	}element;
    };
     
     
     
     
     
     
    /********* Les variables globales*******/
    pcell bfaits;
    pcell bregles;
    mon probleme c'est que je trouve pas une méthode pour enregistrer la base de regles (pointé par bregles) et la base de faits (pointé par bfaits) dans un fichier afin de les chargés dans une prochaine exécution.

    plus précisement je trouve pas une solution aux pointeurs dans les structure car elles sont récursive.

    c comme si on a un graphe de structure dans la memoire qu'on veux le sauvegarder à la fin de l'execution.

    Aidez moi svp et merci d'avance

  2. #2
    Membre averti

    Inscrit en
    Juillet 2008
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 186
    Points : 350
    Points
    350
    Par défaut
    Bonjour,

    La version courte, c'est que le pointeur est un identifiant, et donc dans le fichier, il te faut utiliser aussi un identifiant.

    Tu peux donc utiliser le numéro de ligne (si tu sauvegardes dans un fichier texte) par exemple, ou bien un numéro qui s'incrémente (et tu peux le sauvegarder dans tes structures mémoires), ou alors même la valeur du pointeur (mais dans ce cas, lors du rechargement, cette valeur doit uniquement servir à retrouver l'enregistrement pointé et non à initialiser le pointeur directement)

    Didier

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2006
    Messages : 105
    Points : 109
    Points
    109
    Par défaut
    merci bcoup pour cette reponse rapide mais sans modification de structure et en employant la methode de sauvegarde de pointeur j'aurais une fonction un peu complexe lors du chargement de programme ie lors de chargement de la base dans la memoire bref ça pourra engendrer des prob.

    y a t'il des methode plus simple ??

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par requinham Voir le message
    merci bcoup pour cette reponse rapide mais sans modification de structure et en employant la methode de sauvegarde de pointeur j'aurais une fonction un peu complexe lors du chargement de programme ie lors de chargement de la base dans la memoire bref ça pourra engendrer des prob.

    y a t'il des methode plus simple ??
    on te l'a donnée...

    Tu incrémentes un indicateur..

  5. #5
    Membre confirmé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Points : 646
    Points
    646
    Par défaut
    Salut !
    Peux-tu essayer la chose suivante :

    Sauvegarde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    cell courante = premiere cell
    faire
           si cell-next est null
                ecrire 0
           sinon 
                ecrire 1
           fin si
           ecrire element
           cell courant = cell -next
    tant que cell courant pas null
    chargement :
    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
     
    initialiser cell
    initialiser pointeur courant pcell a cell
    booleen fin = false
    tant que pas fin
          lire cellbkp-next (entier declare pas le pointeur pour eviter les conversions pointeurs/entier non portables)
          si cellbkp-next pas 0
              allouer nouveau cell
              affecter a pcell-next nouveau cell
          sinon
             fin = true
          fin si
         lire pcellbkp-element 
         pcell-element = cellbkp-element 
         si pcell-next n'est pas null
         pcell = pcell-next
         fin si
     fin tant que
    On utilise un indicateur pour controler le chargement dont on ne connait pas le nombre d'elements.

    Maintenant tu pourrais tres bien écrire en premiere ligne le nombre de cell et sur les lignes suivantes seulement les éléments . tu n'aurais plus qu'a creer tes cell chainés dans une boucle. C'est peut -être plus simple ainsi et te permettra de gagner de la place dans le fichier de sauvegarde.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Si j'ai bien compris, le problème est que ton graphe de structures possède des cycles?
    Si c'est le cas, je pense aussi que la solution est de remplacer les pointeurs par des ids.

Discussions similaires

  1. Installer une imprimante pour enregistrer dans un fichier
    Par Ludovic20 dans le forum RedHat / CentOS / Fedora
    Réponses: 1
    Dernier message: 09/12/2011, 18h02
  2. problem d'implementation d'une methode virtual
    Par Halloula dans le forum C++
    Réponses: 4
    Dernier message: 30/10/2009, 15h59
  3. Réponses: 2
    Dernier message: 25/01/2008, 21h41
  4. [Conception] invoquer une methode par son nom
    Par orelero dans le forum Général Java
    Réponses: 13
    Dernier message: 24/10/2006, 11h18
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

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