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

Langage Pascal Discussion :

Type énuméré en Pascal


Sujet :

Langage Pascal

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur électromécanicien
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur électromécanicien
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 23
    Points
    23
    Par défaut Type énuméré en Pascal
    Bonjour à toutes et à tous,

    J'ai crée en Pascal deux type de variable énuméré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TYPE  Matricules = (2532, 2565, 3265, 5421, 5544, 5645, 5700, 5702, 5709, 5812) ;
    Quand j'exécute le programme sur Free Pascal IDE, je reçois ce message d’erreur :
    syntax error "identifier" expected but "ordinal constant" found
    et la compilation s'interrompt.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TYPE  Civilites = (Mr, Mr, Melle, Mr, Mme, Melle, Mme, Melle, Mr, Mme) ;
    Quand j'exécute le programme sur Free Pascal IDE; je reçois ce message d’erreur :
    error : duplicate identifier
    et la compilation s'interrompt.

    Comment puis-je résoudre ces problèmes svp ?

    Cordialement
    Kader

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TYPE  Matricules = (m2532, m2565, m3265, m5421, m5544, m5645, m5700, m5702, m5709, m5812) ;
    TYPE Civilites = (Mr, Mr, Melle, Mr, Mme, Melle, Mme, Melle, Mr, Mme) ;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur électromécanicien
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur électromécanicien
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TYPE  Matricules = (m2532, m2565, m3265, m5421, m5544, m5645, m5700, m5702, m5709, m5812) ;
    Bonjour Paul Toth,

    Merci pour la réponse.

    Autre question, est ce que tu peux me dire comment faire pour affecter à une variable l'élément d'ordre n d'un type énuméré.
    J'ai essayé ce qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Readln(MatriculeE) ;
    NrOrdE := ORD(MatriculeE); // "N° d'ordre du matricule dans le type Matricule"
    CiviliteE := Civilites(NrOrdE); // " j'affecte dans la variable CiviliteE l'élément d'ordre NrOrdE du type Civilites.
    Aussi j'ai essayé de remplacer les parenthèses par des crochets, mais ça ne fonctionne pas toujours.

    Cordialement
    kader

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Voici deux possibilités. Je ne suis pas sûr que cela réponde à votre problème. Que voulez-vous faire exactement ?

    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
     
    program Exercice1;
    {$APPTYPE CONSOLE}
     
    type
      Matricule = (m2532, m2565, m3265, m5421, m5544, m5645, m5700, m5702, m5709, m5812) ;
      Civilite = (M, Mlle, Mme);
     
    const
      Civilites: array[0..9] of Civilite = (M, M, Mlle, M, Mme, Mlle, Mme, Mlle, M, Mme);
     
    var
      mt: Matricule;
      o: Integer;
      c: Civilite;
     
    begin
      mt := m3265;
      o := Ord(mt);
      WriteLn(o); // 2
      c := Civilites[o];
      WriteLn(c); // Mlle
      Write('Appuyez sur la touche Entr'#130'e... ');
      ReadLn;
    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
     
    program Exercice2;
    {$APPTYPE CONSOLE}
     
    type
      Matricule = (m2532, m2565, m3265, m5421, m5544, m5645, m5700, m5702, m5709, m5812) ;
      Civilite = (M, Mlle, Mme);
     
    const
      Civilites: array[Matricule] of Civilite = (M, M, Mlle, M, Mme, Mlle, Mme, Mlle, M, Mme);
     
     var
      mt: Matricule;
      c: Civilite;
     
    begin
      mt := m3265;
      c := Civilites[mt];
      WriteLn(c); // Mlle
      Write('Appuyez sur la touche Entr'#130'e... ');
      ReadLn;
    end.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par kader53 Voir le message
    Bonjour Paul Toth,

    Merci pour la réponse.

    Autre question, est ce que tu peux me dire comment faire pour affecter à une variable l'élément d'ordre n d'un type énuméré.
    J'ai essayé ce qui suit :

    Readln(MatriculeE) ;
    NrOrdE := ORD(MatriculeE); "N° d'ordre du matricule dans le type Matricule"
    CiviliteE := Civilites(NrOrdE); " j'affecte dans la variable CiviliteE l'élément d'ordre NrOrdE du type Civilites.

    Aussi j'ai essayé de remplacer les parenthèses par des crochets, mais ça ne fonctionne pas toujours.

    Cordialement
    kader
    ceci n'a aucun sens, les matricules ne sont pas des civilités
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur électromécanicien
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur électromécanicien
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Bonjour !

    Voici deux possibilités. Je ne suis pas sûr que cela réponde à votre problème. Que voulez-vous faire exactement ?

    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
     
    program Exercice1;
    {$APPTYPE CONSOLE}
     
    type
      Matricule = (m2532, m2565, m3265, m5421, m5544, m5645, m5700, m5702, m5709, m5812) ;
      Civilite = (M, Mlle, Mme);
     
    const
      Civilites: array[0..9] of Civilite = (M, M, Mlle, M, Mme, Mlle, Mme, Mlle, M, Mme);
     
    var
      mt: Matricule;
      o: Integer;
      c: Civilite;
     
    begin
      mt := m3265;
      o := Ord(mt);
      WriteLn(o); // 2
      c := Civilites[o];
      WriteLn(c); // Mlle
      Write('Appuyez sur la touche Entr'#130'e... ');
      ReadLn;
    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
     
    program Exercice2;
    {$APPTYPE CONSOLE}
     
    type
      Matricule = (m2532, m2565, m3265, m5421, m5544, m5645, m5700, m5702, m5709, m5812) ;
      Civilite = (M, Mlle, Mme);
     
    const
      Civilites: array[Matricule] of Civilite = (M, M, Mlle, M, Mme, Mlle, Mme, Mlle, M, Mme);
     
     var
      mt: Matricule;
      c: Civilite;
     
    begin
      mt := m3265;
      c := Civilites[mt];
      WriteLn(c); // Mlle
      Write('Appuyez sur la touche Entr'#130'e... ');
      ReadLn;
    end.


    Bonsoir Roland,
    Je te remercie amplement pour ta réponse.
    J'ai exécuté le programme de l'exercice 1 est ça fonctionne convenablement même quand j'ai changé (mt : m3265) par une introduction matricule readln(mt).

    Malheureusement je me suis inspirer de ce programme pour réécrire le mien intégralement ça ne fonctionne pas le message d'erreur est le suivant identifier not found "CiviliteE".
    Ci-après mon programme:

    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
    (* L'objectif du programme est :
        - L'opérateur saisi et introduit le matricule de l'omployé.
        - Le programme affiche les civilité, nom et prénom de l'employé.
      *)
     
     (* Entête *)
     
    PROGRAM  coordonnees_emploiye  (input, output);
     
    {$mode objfpc}{$H+}
     
    uses
      {$IFDEF UNIX}{$IFDEF UseCThreads}
      cthreads,
      {$ENDIF}{$ENDIF}
      Classes
      { you can add units after this };
     
     (* D‚clarations *)
     
    TYPE
     
    Matricules = (M2532, M2565, M3265, M5421, M5544, M5645, M5700, M5702, M5709, M5812) ;
    Civilites = (Mr, Mlle, Mme);
    Noms = (Daniel, Philipe, Yosra, Ched, Melanie, Sarra, Lina, Kinza, Fizou, Julie) ;
    Prenoms = (Leblanc, Dechamps, Farhani,  Prevosto, Trabelsi, Legrand, Holland, Obama) ;
     
    CONST
    Civilite : array[0..9] of Civilites = (Mr, Mr, Mlle, Mr, Mme, Mlle, Mme, Mlle, Mr, Mme);
    Nom : array[0..9] of Noms = (Daniel, Philipe, Yosra, Ched, Melanie, Sarra, Lina, Kinza, Fizou, Julie) ;
    Prenom : array[0..9] of Prenoms = (Leblanc, Dechamps, Farhani,  Farhani, Prevosto, Trabelsi, Legrand, Holland, Farhani, Obama) ;
     
    VAR
    MatriculeE : Matricules;
    CivilteE : Civilites;
    NomE : Noms;
    PrenomE : Prenoms;
    NrOrdE : integer ;
     
    BEGIN
     
    Writeln('Saisi  Matricule Employé‚ : ');
    Readln(MatriculeE) ;
    NrOrdE := ORD(MatriculeE);
    CiviliteE := Civilite[NrOrdE];
    NomE := Nom[NrOrdE];
    PrenomE := Prenom[NrOrdE];
    Writeln('Affichage des coordonnées de l''employé‚');
    Writeln();
    Writeln();
    Writeln('Il sagit de : ', CiviliteE, NomE, PrenomE );
     
    writeln('Press [Enter] To Quit');
    readln();
     
    end.
    .

    Svp aidez moi à résoudre ce problème.

    Cordialement
    kader

  7. #7
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Tu as fait une faute de frappe au moment de déclarer la variable : CivilteE. (Il manque un "i".)

    D'autre part, tu as inversé le nom du type Civilite et le nom du tableau Civilites.

    Mais le problème, c'est surtout que le type énuméré ne convient pas à ce que tu veux faire. Un enregistrement (record) serait plus approprié. Voici un exemple rapide pour te montrer le principe.

    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
    program Exercice3;
    {$APPTYPE CONSOLE}
     
     
    type
      tPersonne = record
        matricule: integer;
        civilite: string[4];
        nom: string[20];
        prenom: string[20];
      end;
     
    const
      fichier: array[1..10] of tPersonne = (
        (matricule: 100; civilite: 'M.'; nom: 'X'; prenom: 'X'),
        (matricule: 101; civilite: 'M.'; nom: 'X'; prenom: 'X'),
        (matricule: 102; civilite: 'M.'; nom: 'X'; prenom: 'X'),
        (matricule: 103; civilite: 'M.'; nom: 'X'; prenom: 'X'),
        (matricule: 104; civilite: 'M.'; nom: 'X'; prenom: 'X'),
        (matricule: 105; civilite: 'M.'; nom: 'X'; prenom: 'X'),
        (matricule: 106; civilite: 'M.'; nom: 'X'; prenom: 'X'),
        (matricule: 107; civilite: 'M.'; nom: 'X'; prenom: 'X'),
        (matricule: 108; civilite: 'M.'; nom: 'X'; prenom: 'X'),
        (matricule: 109; civilite: 'M.'; nom: 'X'; prenom: 'X')
      );
     
    var
      mat, i: integer;
     
    begin
      WriteLn('Veuillez saisir le matricule de l''employ'#130' :');
      ReadLn(mat);
      for i := 1 to 10 do
        if fichier[i].matricule = mat then
        begin
          WriteLn('Civilit'#130' : ', fichier[i].civilite);
          WriteLn('Nom : ', fichier[i].nom);
          WriteLn('Pr'#130'nom : ', fichier[i].prenom);
        end;
     
      Write('Appuyez sur la touche Entr'#130'e... ');
      ReadLn;
    end.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ingénieur électromécanicien
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur électromécanicien
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Tu as fait une faute de frappe au moment de déclarer la variable : CivilteE. (Il manque un "i".)

    D'autre part, tu as inversé le nom du type Civilite et le nom du tableau Civilites.

    Mais le problème, c'est surtout que le type énuméré ne convient pas à ce que tu veux faire. Un enregistrement (record) serait plus approprié. Voici un exemple rapide pour te montrer le principe.

    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
    program Exercice3;
    {$APPTYPE CONSOLE}
     
     
    type
      tPersonne = record
        matricule: integer;
        civilite: string[4];
        nom: string[20];
        prenom: string[20];
      end;
     
    const
      fichier: array[1..10] of tPersonne = (
        (matricule: 100; civilite: 'M.'; nom: 'X'; prenom: 'X'),
        (matricule: 101; civilite: 'M.'; nom: 'X'; prenom: 'X'),
        (matricule: 102; civilite: 'M.'; nom: 'X'; prenom: 'X'),
        (matricule: 103; civilite: 'M.'; nom: 'X'; prenom: 'X'),
        (matricule: 104; civilite: 'M.'; nom: 'X'; prenom: 'X'),
        (matricule: 105; civilite: 'M.'; nom: 'X'; prenom: 'X'),
        (matricule: 106; civilite: 'M.'; nom: 'X'; prenom: 'X'),
        (matricule: 107; civilite: 'M.'; nom: 'X'; prenom: 'X'),
        (matricule: 108; civilite: 'M.'; nom: 'X'; prenom: 'X'),
        (matricule: 109; civilite: 'M.'; nom: 'X'; prenom: 'X')
      );
     
    var
      mat, i: integer;
     
    begin
      WriteLn('Veuillez saisir le matricule de l''employ'#130' :');
      ReadLn(mat);
      for i := 1 to 10 do
        if fichier[i].matricule = mat then
        begin
          WriteLn('Civilit'#130' : ', fichier[i].civilite);
          WriteLn('Nom : ', fichier[i].nom);
          WriteLn('Pr'#130'nom : ', fichier[i].prenom);
        end;
     
      Write('Appuyez sur la touche Entr'#130'e... ');
      ReadLn;
    end.
    Bonsoir Roland,

    Merci pour l'aide qui inestimable, je suis mdr ...

    Problème résolu ....

    Comme tu l'as certainement remarqué je suis autodidacte amateur en la matière, j'espère que je vais arriver à l'utilisation des enregistrement bientôt.

    Encore une fois amplement merci.

    Cordialement kader.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Questions sur les types énumérés
    Par Premium dans le forum Langage
    Réponses: 5
    Dernier message: 12/11/2006, 18h00
  2. [c# 2.0][DEBUTANT] type énuméré
    Par dsr57 dans le forum C#
    Réponses: 2
    Dernier message: 13/10/2006, 16h03
  3. [D2005] Utilisation des types énumérés
    Par bouha dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 21/07/2005, 22h21
  4. Réponses: 7
    Dernier message: 02/06/2003, 08h38
  5. Transformer un caractère en type énuméré
    Par HT dans le forum Langage
    Réponses: 3
    Dernier message: 22/10/2002, 20h46

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