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

 Delphi Discussion :

Liste de regles. Comment agir?


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 14
    Points : 8
    Points
    8
    Par défaut Liste de regles. Comment agir?
    J'ai un objet TRule: class qui contient une Procedure appellee Analyse. C'est a partir de cet objet que j'en cree plusieurs objets:

    Rule1, Rule2, Rule3, Rule4, Rule5 : T Rule;

    A moment que j'execute le programme par <<Rule.analyse(c,d);>> or <<Rule1.analyse(c,d);Regula2.analyse(c,d); . . .>> c'est seulement le premier objet qui fonctionne, Rule1, et j'obtiens comme resultat final seulement le resultat pour Rule1.

    Comment puisse-je faire pour que le programme lise tous les objets avant d'avancer le resultat final?
    Je mentionne que R1, R2..R5, prises individualement, fonctionnent d'une maniere corecte.

  2. #2
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Salut;

    d'après ce que tu avance analyse est une méthode déclarée (mais à quel niveau?)...

    Pour moi c'est trop flou, faut faire voir la classe mère et les descendants pour pouvoir t'aider. (c'est mon opinion).

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Sans en voir plus je ne sais pas exactement pourquoi vous avez vos exécutions avec un opérateur OR (sûrement que Analyse retourne un booléen et vous voulez récupérer l'agrégation des booléen dans une autre variable) néanmoins ici vous faites face à ce qu'on appelle l'évaluation paresseuse.

    L'évaluation paresseuse est une règle qui dit que, dans une condition booléenne, si le premier argument renvoi True (cas avec un opérateur OR) ou False (cas d'un opérateur AND) alors ce n'est pas la peine d''exécuter le reste vu qu'on peut déjà déterminer le résultat final de l'opération booléenne.

    Pour résoudre ce problème, deux solutions : soit ne pas exécuter tout d'un bloc avec des or mais plutôt des if imbriqués, soit entourer la ligne de code par des directives de compilation {$B+} ... {$B-} pour forcer l'évaluation complète puis revenir en évaluation paresseuse.

  4. #4
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 14
    Points : 8
    Points
    8
    Par défaut le code demande
    premierement, je vous remercie pour les reponses. j'y ajoute maintenant les lignes de code, en esperant que le probleme soit plus claire, parceque je n'ai pas encore trouve la reponse.

    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
     unit Unit1;
     
    interface
     
      uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Unit2;
     
      type TRule = class
     
        listaOperations : TList;
        listaIdentif : TList;
     
        public
          constructor Create;
          procedure analyse(var s,d:string) ;
     
      end;
    implementation
     
          constructor TRule.Create();
          begin
            self.listaOperations := TList.Create;
            self.listaIdentif := TList.Create;
     
          end;
     
    procedure TRule.analyse(var s,d:string);
          var
           ......
          begin
           .......  
          end;
    end.
    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
     
    unit Unit2;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Unit1;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        Edit2: TEdit;
        Label1: TLabel;
        Label2: TLabel;
        procedure Button1Click(Sender: TObject);
     
      private
        { Private declarations }
      public
        { Public declarations }
      end;
     
    var
     
      Form1: TForm1;
     
      Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9, Rule10 : TRule;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
      var s, mot, dictionnaire, a: string;
           i:integer;
     
    begin
    mot:=edit1.text;
    dictionnaire:=edit2.Text;
            s:=mot;
     
      Rule1 := TRule.Create;
      Rule1.ajouteIdentificateur(Identifd);
      Rule1.ajouteIdentificateur(Identife);
      Rule1.ajouteOperation(Operationf);
      Rule1.ajouteOperation(Operationg);
     
      Rule2 := TRule.Create;
      Rule2.ajouteIdentificateur(Identifd);
      Rule2.ajouteIdentificateur(Identife);
      Rule2.ajouteOperation(Operationf);
      Rule2.ajouteOperation(Operationg);
     
    ...
    ...
    ...
     
    Rule.analyse(mot,dictionnaire);
     
    end;
    le probleme est le suivant: quand j'applique la procedure d'analyse pour une seule regle, consideree individuellement, la procedure fonctionne. quand j'essaie d'ecrire toutes les sets de regles d'analyse d'un certain mot, la procedure ne fonctionne plus, car elle est valide pour un seul set de regles...

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut
    personne peut répondre à ça ? héhé moi le premier

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/11/2011, 16h36
  2. [Liste simplement chaînée] comment passer d'un élément à un autre ?
    Par beegees dans le forum Algorithmes et structures de données
    Réponses: 21
    Dernier message: 18/02/2008, 22h32
  3. Listes et cases, comment faire?
    Par Umbrella dans le forum Delphi
    Réponses: 3
    Dernier message: 30/08/2006, 09h03
  4. Réponses: 10
    Dernier message: 18/08/2006, 12h14
  5. Réponses: 6
    Dernier message: 21/02/2006, 16h47

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