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 :

comparaison entre opérateurs POO


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 18
    Points : 9
    Points
    9
    Par défaut comparaison entre opérateurs POO
    bonjour, je suis très novice en delphi ..et je dois dans un programme réaliser une comparaison entre opérateurs dans le cadre d'un jeu

    la classe opérateurs TC_operateur a comme sous classes les classes + et * par exemple

    dans chaque sous classe sera donc définie la procédure de calcul
    plus.calculer(nbr1,nbr2) ou multiplie.calculer(nbr1,nbr2), et je me demandais comment écrire la procédure TC_operateur.estprioritaire(un_operateur:TC_operateur)
    dans la classe operateur, afin de définir quel opérateur est prioritaire sur l'autre lors d'une comparaison. (je connais les régles de priorité, mais ne sais pas comment transcrire tout cela en classes)

    je sais pas si c'est très clair...
    merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 706
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 706
    Points : 25 585
    Points
    25 585
    Par défaut
    Je dirais un truc du genre

    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
    type
      TC_operateur = class(TObject)
        class function IndefOfOperator(Operator: TC_operateur): TOperatorType;
        function estprioritaire(Operator: TC_operateur): boolean;   
      end:
     
      TC_plus = class(TC_operateur)
      ...  
      end;
     
      TC_multiplie = class(TC_operateur)
      ... 
      end;
     
      TC_operateur_Class = class of TC_operateur;
     
    TOperatorType = (otnone, otmultiplie, otplus);
     
    const
      OPERATORS_RULES = array[TOperatorType] of TC_operateur_Class = (nil, TC_multiplie, TC_plus );
     
    class function TC_operateur.IndefOfOperator(Operator: TC_operateur): TOperatorType;
    begin
      for Result := Low(TOperatorType) to High(TOperatorType)
        if OPERATORS_RULES[Result] = Operator.ClassType then
          Exit;
     
      Result := otnone;
    end;
     
    function TC_operateur.estprioritaire(Operator: TC_operateur): boolean; 
    begin
      Result := IndefOfOperator(Self) < IndefOfOperator(Operator);
      // none à gérer au cas où
    end;

  3. #3
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 564
    Points : 3 968
    Points
    3 968
    Par défaut
    Salut

    Tu peux associer un entier (rang) à chaque priorité. Pour définir, ces valeurs il te faut recenser les opérateurs, les regrouper par priorité equivalente (- et + ont la même priorité) et les trier par priorité décroissante, il va de soi que les rang reflètent la priorité :

    -(unaire) : classe 3
    * /: classe 2
    + - : classe 1
    ...

    Pour chaque classe d'opérateur, tu créer une fonction de classe qui retourne le rang de priorité :
    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
     
     
    // essentiel pour bénéficier du polymorphisme
    TC_Abstrait = class
    public
      class function Priority: Integer; virtual; abstract;
    end;
    // Opérateur +
    TC_Plus = class
    public
      class function Priority: Integer; override;
    end;
     
    ...
     
    class function TC_Plus.Priority: Integer; 
    begin
      Result := 3;
    End;
    Ce principe reste à valider par rapport à ton problème.

    cdlt

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    merci beaucoup ! je vais voir ce que je peux faire

Discussions similaires

  1. Comparaison entre deux champs de deux tables différentes
    Par liam81150 dans le forum Requêtes
    Réponses: 1
    Dernier message: 26/09/2005, 21h53
  2. Requete de comparaison entre 2 champs
    Par wallaz dans le forum Access
    Réponses: 2
    Dernier message: 23/09/2005, 20h17
  3. Comparaison entre les classes et les fonctions
    Par Ashgenesis dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 08/09/2005, 20h09
  4. comparaison entre 2 tables
    Par halina dans le forum Requêtes
    Réponses: 10
    Dernier message: 13/05/2005, 16h18
  5. Réponses: 6
    Dernier message: 21/01/2004, 14h25

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