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

Autres IDE Pascal Discussion :

Erreur(s) de syntaxe


Sujet :

Autres IDE Pascal

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 44
    Points : 25
    Points
    25
    Par défaut Erreur(s) de syntaxe
    Bonjour à tous,
    J'essaie de programmer en ce moment en pascal un jeu de dés inspiré du 421, qu'est le 42. Le principe est simple, il se joue avec deux dés et l'objectif est d'obtenir la combinaison 42. Une partie se joue en plusieurs manches (fixées à 3). Le score de la partie est la somme des scores obtenus dans chacune des manches. L'objectif est d'obtenir le score maximal.
    Lors d'une manche, le joueur dispose de trois lancers pour établir une combinaison. Après le lancer initial des deux dés, il peut soit accepter la combinaison (0), soit relancer les deux dés (2), soit relancer uniquement le premier dé (p) ou le deuxième (d).
    Le score de la manche est calculé sur la combinaison obtenue à l'issue des lancers. Les scores des combinaisons sont indiqués dans mon programme (conditionnelle case).
    Voilà pour le principe. Maintenant, j'ai quelques gros soucis dans mon code. Je cherche un moyen pour inclure 2 variables en même temps dans une conditionnelle case (premier et second lancer). Je pense que c'est la cause de mes erreurs de syntaxe qui n'en finissent plus.
    Voici un copier-coller de mon code édité sous GVIM et compilé sous GNU PASCAL. Me demandez pas pourquoi, c'est dans mon cahier des charges!

    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
    Program  jeu_de_des;
     
       (*Jouer une partie de 42 avec utilisateur et afficher résultat.*)
     
    const
       trois = 3;
     
    Var
     
       Manches, Lancers: Integer;    (*compteurs de manches et de lancers*)
       lancer1, lancer2: Integer; (*premier et second lancer de dès*)
       choix: char; (*propositions après un lancer*)
       score_manche, score_partie: Integer; (*scores provisoires de la manche et de la partie*)
     
    Begin 
     
             score_manche:= 0; 
             score_partie:= 0;
    [25]   case lancer1, lancer2 of
    [26]	     '4, 2':
    [27]	     score_manche:= 10;
    	     '1, 1':
    	     score_manche:= 7;
    [30]	     '6, 6':
    	     score_manche:= 6;
    	     '5, 5':
    	     score_manche:= 5;
    	     '4, 4':
    [35]	     score_manche:= 4;
    	     '3, 3':
    	     score_manche:= 3;
    	     '2, 2'..'6, 5'..'5, 4'..'4, 3'..'3, 2'..'2, 1':
    	     score_manche:= 2
    [40]   else
    	 score_manche:= 1;
             end	   
             Manches:= 1;
             writeln('=============[ Manche ', Manches,' ]==============');
    [45]   Lancers:= 1;
             lancer1:= Random(6)+1;
             lancer2:= Random(6)+1;
             writeln('Lancer ', Lancers,'/', trois,': ', lancer1,' et ', lancer2);
             writeln('Vous pouvez :');
    [50]   writeln('0- accepter la combinaison');
             writeln('p- relancer le premier dé, de valeur ', lancer1);
             writeln('d- relancer le deuxième dé, de valeur ', lancer2);
             writeln('2- relancer les deux dés');
             write('Votre choix : ');
    [55]   readln(choix);
     
             case choix of
    	     '0':
    	     writeln('Score de la manche : ', score_manche);
    [60]	     writeln('Score de la partie : ', score_partie);
             end  (*fin provisoire*)
     
     
    end.
    N.B: j'ai mis quelques numéros de ligne en marge pour vous situer par rapport aux erreurs.
    ERREURS SOUS GNU:
    miniprojet.pas: In main program:
    miniprojet.pas:25: parse error before `,'
    miniprojet.pas:25: missing `of'
    miniprojet.pas:25: case element expected
    miniprojet.pas:26: `case' label does not reduce to a constant of ordinal type
    miniprojet.pas:27: missing semicolon
    miniprojet.pas:28: `case' label does not reduce to a constant of ordinal type
    miniprojet.pas:30: `case' label does not reduce to a constant of ordinal type
    miniprojet.pas:32: `case' label does not reduce to a constant of ordinal type
    miniprojet.pas:34: `case' label does not reduce to a constant of ordinal type
    miniprojet.pas:36: `case' label does not reduce to a constant of ordinal type
    miniprojet.pas:38: parse error before `..'
    miniprojet.pas:38: missing comma
    miniprojet.pas:38: parse error before `..'
    miniprojet.pas:38: missing comma
    miniprojet.pas:38: lower value of `case' range does not reduce to
    miniprojet.pas:38: a constant of ordinal type
    miniprojet.pas:38: lower value of `case' range does not reduce to
    miniprojet.pas:38: a constant of ordinal type
    miniprojet.pas:38: lower value of `case' range does not reduce to
    miniprojet.pas:38: a constant of ordinal type
    miniprojet.pas:27: warning: unreachable code at beginning of `case' statement
    miniprojet.pas:43: parse error before `Manches'
    miniprojet.pas:60: parse error before `Writeln'
    miniprojet.pas:60: extra semicolon

    Bonne lecture;

  2. #2
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    case lancer1, lancer2 of '4, 2':
    Cette syntaxe n'existe pas en Pascal. Il faut reprendre entièrement le programme...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 44
    Points : 25
    Points
    25
    Par défaut
    que proposez vous alors pour inclure 2 variables dans une conditionnelle case?

  4. #4
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Un if basique ?
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  5. #5
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    Idée 1 : Imbriquer des case

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    case lancer1 of 
     '1' : case lancer2 of
            '2' : score_manche := 10;
            ...
            end
           end;
     ...
     end;
    nécessite une petite analyse préalable des différents cas de figure (il n'y en a que 36). Très performant, mais peu lisible.


    Idée 2 : calculer une valeur entière qui identifie le lancer de façon unique. Par exemple 42 pour '4, puis '2', 11 pour '1', puis '1', etc... puis s'en servir dans le case, ou mieux, s'il s'agit seulement d'affecter une valeur à score_manche, définir un tableau de valeurs avec les valeurs à affecter.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 44
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par CapJack Voir le message
    Idée 1 : Imbriquer des case

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    case lancer1 of 
     '1' : case lancer2 of
            '2' : score_manche := 10;
            ...
            end
           end;
     ...
     end;
    nécessite une petite analyse préalable des différents cas de figure (il n'y en a que 36). Très performant, mais peu lisible.


    Idée 2 : calculer une valeur entière qui identifie le lancer de façon unique. Par exemple 42 pour '4, puis '2', 11 pour '1', puis '1', etc... puis s'en servir dans le case, ou mieux, s'il s'agit seulement d'affecter une valeur à score_manche, définir un tableau de valeurs avec les valeurs à affecter.
    En effet, je garde la solution des case of imbriqués en dernier recours. Pour les tableaux de valeurs, je n'ai pas le droit de les utiliser.
    Par contre, j'aime bien l'idée de définir une nouvelle valeur entière. Comment l'introduire? Je définis une variable entière "duo" par exemple et je lui affecte ensuite la valeur duo:= lancer1, lancer2 (pour avoir duo= 42 pour lancer1=4 et lancer2=2 par exemple)??
    Merci pour vos réponses.

  7. #7
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    Citation Envoyé par scarabee10 Voir le message
    duo:= lancer1, lancer2 (pour avoir duo= 42 pour lancer1=4 et lancer2=2 par exemple)??
    Cette syntaxe non plus n'a aucun sens en Pascal. Je ne sais d'ailleurs pas dans quel langage de programmation ça pourrait avoir un sens. Certains langages fonctionnels, peut-être ?

    Par ailleurs, je croyais que lancer1 et lancer2 étaient des caractères ? Attention :

    n'a pas du tout la même signification que
    Le Pascal est un vrai langage de programmation fortement typé, pas un gadget genre php ! Si lancer1 et lancer2 sont de type entier, ben tu peux utiliser une bête formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    duo := 10 * lancer1 + lancer2;
    Par contre, si ce sont des caractères, il faut les convertir d'abord en leurs équivalents entiers.

    Sans vouloir être désobligeant, peut-être qu'une petite initiation aux bases du langage s'impose, non ? Allez, hop : http://pascal.developpez.com/cours/

    Bon courage !

Discussions similaires

  1. Erreur sévère 62 : syntax error in format
    Par Invité dans le forum Fortran
    Réponses: 4
    Dernier message: 04/06/2008, 22h20
  2. [MySQL] Erreur sur une syntaxe echo.
    Par Velkan.nexus dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/05/2008, 16h56
  3. Réponses: 1
    Dernier message: 15/06/2007, 02h23
  4. ou est l'erreur dans cette syntaxe svp ?
    Par delavega dans le forum ASP
    Réponses: 2
    Dernier message: 29/05/2007, 13h03
  5. Erreur 3061 - pb syntaxe?
    Par SylvainJ dans le forum Access
    Réponses: 3
    Dernier message: 13/07/2006, 14h14

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