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

Turbo Pascal Discussion :

[TP] Problème de parenthèse


Sujet :

Turbo Pascal

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut [TP] Problème de parenthèse
    Bonjours à tous.
    Je vous écris car j'ai un souci dans mon programme.
    Turbo Pascal 7.0 veux me mettre une parenthèse après mon type personnel quand je le met dans mon programme (appel tout simple, with ...)

    Je vous mets mon code actuel, c'est le résultat d'un TD de Projet en L2 d'info

    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    Program Super_Libraire ;
     
    Const max_personnel = 40 ;
          max_bouquin = 50 ;
     
    Type statut = (Employe, Stagiaire, Boss) ;
     
    Type Personne = record
                     nom, prenom, mdp, adresse, nom_tel, date_naissance : string ;
                     stat : statut ;
                    end ;
     
    Type tablo_personne = array[1..max_personnel] of personne ;
     
    Type personnel = record
                      liste : tablo_personne ;
                      effectif : integer ;
                     end ;
     
    Type categorie = (Science, Literature, Autre) ;
     
    Type rayon = (Sud, Est, Ouest, Nord) ;
     
    Type lieu = (Magasin, Stock, Commande) ;
     
    Type lieu_sioux = record
                       le_lieu : lieu ;
                       nb : integer ;
                      end ;
     
    Type livre = record
                  titre, auteur, editeur, reference : string ;
                  mes_cat : categorie ;
                  mes_rayons : rayon ;
                  annee_sortie : integer ;
                  prix : real ;
                  statut_livre : lieu_sioux ;
                  nb_vendu : integer ;
                 end ;
     
    Type ma_librairie = array[1..max_bouquin] of livre ;
     
    Type librairie = record
                      une_librairie : ma_librairie ;
                      nb_total_bouquin : integer ;
                     end ;
     
    Procedure recherche_conec(don_nom, don_prenom : string ; Var son_mdp : string ; Var existe : boolean) ;
        Var i : integer ;
    Begin
         for i := 1 to personnel.effectif do
              if (don_nom = personnel.liste[i].nom) and (don_prenom = personnel.liste[i].prenom) then
              begin
              existe := true ;
              son_mdp := personnel.liste[i].mdp ;
              end
              else
              existe := false ;
    end ;
     
    Function connection : boolean ;
        Var nom, prenom, mdp : string ;
            existance : boolean ;
     
        Procedure recup_info(Var n, p, m : string) ;
        Begin
        Writeln('Veuillez entre votre nom.') ;
        Readln(n) ;
        Writeln('Veuillez entrer votre prenom.') ;
        Readln(p) ;
        Writeln('Veuillez entrer votre mot de passe. (… l abrit des regard)') ;
        Readln(m) ;
        end;
    Begin
    recup_info(nom, prenom, mdp) ;
    writeln('Vous vous identifiez comme : ', nom, ' ', prenom, '.') ;
    writeln('Nous allons vérifier si vous appartenez au personnel') ;
    recherche_conec(nom, prenom, a_verif, existance) ;
    if not existance then
    Begin
         writeln('Vous n existez pas dans la base de donn‚e du personnel') ;
         writeln('Veulliez contacter votre patron') ;
    end
    else
    writeln('Vous existez au sein de la librairie.') ;
    {Vérif mdp}
    writeln('Vous êtes maintenant connecté') ;
    connection := true ;
    end ;
     
    Begin
    Writeln('Super Libraire') ;
    While not connection do
    connection ;
    writeln('Vous allez être déconnecté ...') ;
    readln ;
    end.

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 951
    Points : 59 625
    Points
    59 625
    Billets dans le blog
    2
    Par défaut
    Bonjour et bienvenue !

    C'est logique puisque Personnel est un identificateur de type et non de variable.

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 663
    Points
    5 663
    Par défaut
    Suo,

    - Il faut faire un effort sur la présentation du code : indentation régulière et cohérente (tu verras à l'usage que ça te rendra rapidement service).

    - Quand tu déclares plusieurs types à la suite, comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Type statut = (Employe, Stagiaire, Boss) ;
     
    Type Personne = record
                     nom, prenom, mdp, adresse, nom_tel, date_naissance : string ;
                     stat : statut ;
                    end ;
    il est inutile de répéter le mot-clé type (Tu l'as bien fait pour const, pourquoi pas là ?).

    - Ton système pour établir la connexion n'est pas satifaisant : on entre dans une boucle infinie si l'utilisateur ne réussit pas à se connecter.

    Dans ce genre de situation, on accepte généralement un nombre limité de tentatives, on met très souvent 3, et on quitte le programme si l'identification n'est pas réussie après ce nombre d'essais.


  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Que veux-tu dire par "indentation régulière et cohérente" ?
    Il faut faire un effort sur la présentation du code : indentation régulière et cohérente
    Pour ce qui est des "type" répétés, je les laisse pour le moment car celà me permet de mieu me repérer (pour le moment) dans la petite inteface qu'est Turbo Pascal 7. Donc ne t'inquiette pas, au final, il n'y aura plus qu'un seul mot "type"

    Pour ce qui est de la procédure de connection, on part du fait que tu ne peut pas quitter le logiciel sauf si tu en as envie. De toute façon, je n'ai pas fini de programmer cette partie.

    Mon problème, c'est cette histoire de parethèse pour le moment !

    Alcatîz
    C'est logique puisque Personnel est un identificateur de type et non de variable
    Je doix faire quoi alors ? personnel() ?
    Pourtant, normalement, il ne faut pas de parenthèse ici. (c'est ce qui pour moi est logique )

  5. #5
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Tu doit declarer personnel non pas comme un type, mais plutot comme variable: var personnel:record
    ....
    end;
    Tu as aussi utilisé la variable a_verif de type string sans l' avoir declarée au préalable dans la fonction connection:recherche_conec(nom,prenom,a_verif,existance);

    Si tu rectifie ces erreurs, je crois ton prog marchera. D' abord je l' ai deja testé.

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    A ba oui chui bête, j'appelle un type et pas une variable ...
    Bon, je corrige ça tout de suite, merci

    Je vais regarder cette histoire de variable a_verif de type string sans declaration ...

    Je rectifie ces erreurs et je vous dis si tout va bien

    Modif

    Je viens de rajouter les variables correspondantes, mais maintenant, j'ai une erreur 96 : j'ai trop de variable.
    Il y a-t-il un moyen de réduire mon nombre de variable dans mon programme ou bien d'augmenter le nombre de variable de mon programme ?

  7. #7
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Je ne sais pas ce que tu as fait pour avoir l' erreur 69 ...
    Reprend le programme que tu avais posté:
    -remplace "type personnel= ... ;" par "var peronnel: ... ;"
    ensuite declare " var a_verif : string; " dans la partie declarative principale.
    Je crois qu' il n' y aura pas de probleme.
    Mais tu dois normalement declarer a_verif dans dans la fonction connection.
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    Program Super_Libraire ;
     
    Const max_personnel = 40 ;
          max_bouquin = 50 ;
     
    Type statut = (Employe, Stagiaire, Boss) ;
     
         Personne = record
                     nom, prenom, mdp, adresse, nom_tel, date_naissance : string ;
                     stat : statut ;
                    end ;
     
         tablo_personne = array[1..max_personnel] of personne ;
     
         categorie = (Science, Literature, Autre) ;
     
          rayon = (Sud, Est, Ouest, Nord) ;
     
         lieu = (Magasin, Stock, Commande) ;
     
         lieu_sioux = record
                       le_lieu : lieu ;
                       nb : integer ;
                      end ;
     
         livre = record
                  titre, auteur, editeur, reference : string ;
                  mes_cat : categorie ;
                  mes_rayons : rayon ;
                  annee_sortie : integer ;
                  prix : real ;
                  statut_livre : lieu_sioux ;
                  nb_vendu : integer ;
                 end ;
         ma_librairie = array[1..max_bouquin] of livre ;
     
         librairie = record
                      une_librairie : ma_librairie ;
                      nb_total_bouquin : integer ;
                     end ;
    {modification;voir aussi la fonction connection}
    var personnel : record
                      liste : tablo_personne ;
                      effectif : integer ;
                     end ;
     
     
     
    Procedure recherche_conec(don_nom, don_prenom : string ; Var son_mdp : string ; Var existe : boolean) ;
        Var i : integer ;
    Begin
         for i := 1 to personnel.effectif do
              if (don_nom = personnel.liste[i].nom) and (don_prenom = personnel.liste[i].prenom) then
              begin
              existe := true ;
              son_mdp := personnel.liste[i].mdp ;
              end
              else
              existe := false ;
    end ;
     
    Function connection : boolean ;
        Var nom, prenom, mdp : string ;
            existance : boolean ;
            {modification}
            a_verif:string;
     
        Procedure recup_info(Var n, p, m : string) ;
        Begin
        Writeln('Veuillez entre votre nom.') ;
        Readln(n) ;
        Writeln('Veuillez entrer votre prenom.') ;
        Readln(p) ;
        Writeln('Veuillez entrer votre mot de passe. (… l abrit des regard)') ;
        Readln(m) ;
        end;
    Begin
    recup_info(nom, prenom, mdp) ;
    writeln('Vous vous identifiez comme : ', nom, ' ', prenom, '.') ;
    writeln('Nous allons vérifier si vous appartenez au personnel') ;
    recherche_conec(nom, prenom, a_verif, existance) ;
    if not existance then
    Begin
         writeln('Vous n existez pas dans la base de donn‚e du personnel') ;
         writeln('Veulliez contacter votre patron') ;
    end
    else
    writeln('Vous existez au sein de la librairie.') ;
    {Vérif mdp}
    writeln('Vous êtes maintenant connecté') ;
    connection := true ;
    end ;
     
    Begin
    Writeln('Super Libraire') ;
    While not connection do
    connection ;
    writeln('Vous allez être déconnecté ...') ;
    readln ;
    end.

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Mettre Var comme ça ??
    Je ne connais pas, je n'ai pas encore vu ça

    Et ça change quoi par rapport aux type ?
    Je vais essayer avec ce que tu me dis
    Merci

    Au fait, c'est l'erreur 96 et pas 69
    mais maintenant, j'ai une erreur 96 : j'ai trop de variable.
    Edit

    Toujours le même problème avec ce changement de type à variable.
    En plus, si je rajoute le a_verif, il me dira encore qu'il y a trop de variable (pour le moment).

    Code actuel :
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    Program Super_Libraire ;
     
    Const max_personnel = 40 ;
          max_bouquin = 50 ;
     
    Type statut = (Employe, Stagiaire, Boss) ;
     
    Type Personne = record
                     nom, prenom, mdp, adresse, nom_tel, date_naissance : string ;
                     stat : statut ;
                    end ;
     
    Type tablo_personne = array[1..max_personnel] of personne ;
     
    Type categorie = (Science, Literature, Autre) ;
     
    Type rayon = (Sud, Est, Ouest, Nord) ;
     
    Type lieu = (Magasin, Stock, Commande) ;
     
    Type lieu_sioux = record
                       le_lieu : lieu ;
                       nb : integer ;
                      end ;
     
    Type livre = record
                  titre, auteur, editeur, reference : string ;
                  mes_cat : categorie ;
                  mes_rayons : rayon ;
                  annee_sortie : integer ;
                  prix : real ;
                  statut_livre : lieu_sioux ;
                  nb_vendu : integer ;
                 end ;
     
    Type ma_librairie = array[1..max_bouquin] of livre ;
     
    Type librairie = record
                      une_librairie : ma_librairie ;
                      nb_total_bouquin : integer ;
                     end ;
     
    Var Ma_librairie_a_moi : librairie ;
        personnel : record
                      liste : tablo_personne ;
                      effectif : integer ;
                     end ;
     
    Procedure recherche_conec(don_nom, don_prenom : string ; Var son_mdp : string ; Var existe : boolean) ;
        Var i : integer ;
    Begin
    With Mon_personnel_a_moi do
         for i := 1 to effectif do
              if (don_nom = liste[i].nom) and (don_prenom = liste[i].prenom) then
              begin
              existe := true ;
              son_mdp := liste[i].mdp ;
              end
              else
              existe := false ;
    end ;
     
    Function connection : boolean ;
        Var nom, prenom, mdp : string ;
            existance : boolean ;
     
        Procedure recup_info(Var n, p, m : string) ;
        Begin
        Writeln('Veuillez entre votre nom.') ;
        Readln(n) ;
        Writeln('Veuillez entrer votre prenom.') ;
        Readln(p) ;
        Writeln('Veuillez entrer votre mot de passe. (… l abrit des regard)') ;
        Readln(m) ;
        end;
    Begin
    recup_info(nom, prenom, mdp) ;
    writeln('Vous vous identifiez comme : ', nom, ' ', prenom, '.') ;
    writeln('Nous allons v‚rifier si vous appartenez au personnel') ;
    recherche_conec(nom, prenom, a_verif, existance) ;
    if not existance then
    Begin
         writeln('Vous n existez pas dans la base de donn‚e du personnel') ;
         writeln('Veulliez contacter votre patron') ;
    end
    else
    writeln('Vous existez au sein de la librairie.') ;
    {V‚rif mdp}
    writeln('Vous ˆtes maintenant connect‚') ;
    connection := true ;
    end ;
     
    Begin
    Writeln('Super Libraire') ;
    While not connection do
    connection ;
    writeln('Vous allez ˆtre d‚connect‚ ...') ;
    readln ;
    end.

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 663
    Points
    5 663
    Par défaut
    Fuo,

    Tu as "trop de variables" parce que leur taille totale dépasse 65536 octets (ou une valeur proche de ça, je ne sais plus).

    Tu n'as que 3 solutions :

    1) voir si tu peux te passer de certaines. Si le programme est bien conçu, ce ne sera pas le cas.

    2) pour chaque variable et/ou type, voir si tu peux utiliser moins de place (par exemple, utiliser string pour une chaîne, sans préciser de taille, réserve automatiquement 256 octets pour la chaîne, dont on n'a que rarement besoin).

    3) remplacer tes variables statiques par des pointeurs, et gérer le tout via des réservations de mémoire, sans oublier de libérer la place à la fin du programme.


  10. #10
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    je ne sais pas quel configuration tu as sur ton ordinateur mais chez moi le programme s' execute sans probleme

  11. #11
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    As tu essayé le programme que j' ai posté ? - Je ne crois pas.
    Je sais d' où viens ton erreur 96. La taille des variables que tu declarées depace 64k. Tu peux y remedier en remplaçant les string par string[50] par exemple.
    Aussi, je ne sais pas pourquoi tu ne veux pas declarer a_verif. On ne peut pas utiliser une variable sans l' avoir declarée au paravant.
    Une autre erreur dans la premiere procedure :
    With Mon_personnel_a_moi do
    Je crois que c' est plutot :With personnel do ...
    Apres ces modifications, j' obtient :

Discussions similaires

  1. [RegEx] Problème de parenthèses capturantes
    Par Tuttu dans le forum Langage
    Réponses: 3
    Dernier message: 27/02/2009, 14h37
  2. Problème de parenthèses dans un String
    Par cameron dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 15/10/2008, 07h15
  3. ALTER MODIFY problème de parenthèse
    Par ldims24 dans le forum SQL
    Réponses: 1
    Dernier message: 30/06/2008, 14h37
  4. [ANTLR] Problème de parenthèses imbriquées
    Par vkphoenixfr dans le forum Autres langages
    Réponses: 0
    Dernier message: 30/11/2007, 11h40
  5. Problème de parenthèse
    Par kj_83 dans le forum C++Builder
    Réponses: 14
    Dernier message: 08/07/2006, 17h31

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