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

Free Pascal Discussion :

[Free Pascal] Erreur stupide introuvable de compilation : le end final


Sujet :

Free Pascal

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    Points : 39
    Points
    39
    Par défaut [Free Pascal] Erreur stupide introuvable de compilation : le end final
    Bonjour, je suis un débutant niveau programmation, j'ai eu un "gros" exercice à faire.

    Je pense avoir tout bien fait mais le compilateur me dit qu'il y a une erreur avec mon "end." de fin; j'ai cherché pendant des heures et j'ai rien trouvé

    Est-ce que quelqu'un sait m'aider svp, suis désespéré là

    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
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    program eurovisin;
    const N = 5;
    type encode = record
                score:integer;
                pays:string[20];
         end;
    type tabpays = array [1..N] of encode;
     
    var a:tabpays;
        choix:char;
        comptpays,i,m:integer;
     
    procedure classement (t:tabpays;compt,z:integer);
       var i,j:integer;
           k:encode;
     
       begin
         for i:=1 to compt-1 do
           begin
             for j:=i+1 to compt do
                begin
                  if t[j].score < t[i].score then
                     begin
                       k:= t[i];
                       t[i]:= t[j];
                       t[j]:= k;
                     end;
                end;
           end;
         for i:=1 to compt do writeln('num ',i,': ',t[i].pays,' score: ',t[i].score);
         if z = 0 then
                    begin
                      writeln('podium');
                      writeln('------');
                      writeln();
                      for i:=1 to 3 do writeln('num ',i,': ',t[i].pays,' score: ',t[i].score);
                    end;
        end;
     
     
    procedure encodepays(var tab:tabpays; c:integer);
       var i:integer;
           t:char;
     
       begin
         c:=c + 1;
         t:= 'o';
         repeat
          if c > 5 then
                       begin
                          writeln('vous ne pouvez incérer plus de pays');
                          t:= 'n';
                       end
                    else
                       begin
                          writeln('le numéro du pays à encoder attention 5 pays max');
                          readln(i);
                          writeln('tappez nom du pays : ');
                          readln(tab[i].pays);
                          writeln('encoder autre pays ?  [n,o]');
                          readln(t);
                       end;
          until (t = 'n') or (t = 'N');
       end;
     
    procedure encodevotes (var tab:tabpays; c:integer);
       var i,j,k,mm:integer;
       begin
         mm := 1;
         for i:=1 to c do
           begin
             writeln(tab[i].pays,'distribue les points');
             for j:=1 to 8 do
               begin
                 writeln('a qui donnez vous ', j,' points ? (tappez numero de pays)');
                 readln(k);
                 tab[k].score:= tab[k].score + j ;
               end;
             writeln('a qui donnez vous 10 pts?');
             readln(k);
             tab[k].score:= tab[k].score + 10;
             writeln('a qui donnez vous 12 pts?');
             readln(k);
             tab[k].score:= tab[k].score + 12;
             classement(tab,c,mm);
          end;
       end;
     
    procedure quitter(var choix:char);
       begin
         writeln('quitter ? [o,n]');
         readln(choix);
         if (choix = 'o') or (choix = 'O') then choix:= '@';
       end;
     
    begin
       m := 0;
       for i:=0 to N do a[i].score:= 0;
       comptpays:=0;
       repeat
         repeat
            writeln('concours eurovision');
            writeln('-------------------');
            writeln();
            writeln('1. Encodage des pays');
            writeln('2. Encodage des votes');
            writeln('3. Classement final');
            writeln();
            writeln('0. Quitter');
            readln(choix);
         until choix in ['0'..'3'];
         case choix of
             '0':quitter(choix);
             '1':encodepays(a,comptpays);
             '2':encodevotes(a,comptpays);
             '3':classement(a,comptpays,m);
         end;
      until choix = '@';
    end.

  2. #2
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    C'est quoi le "until choix = @;" en avant-dernière ligne ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    Points : 39
    Points
    39
    Par défaut
    Quand on rentre dans la procédure quitter si la personne confirme, la variable choix prend la valeur '@' et la boucle du programme principale ce termine.
    en fait y a une petite erreur c'est que j'ai oublier les ' ', mais ca change rien j'ai tjrs mon erreur

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,

    Cette erreur se produit généralement quand un bloc begin...end n'est pas fermé par un end.

    Je n'ai pas détaillé ton code, mais en raison de
    Citation Envoyé par kronoss
    Quand on rentre dans la procédure quitter si la personne confirme, la variable choix prend la valeur '@' et la boucle du programme principale ce termine.
    je suis un peu percplexe sur ta démarche.

    j'aurais plutôt fait quelque chose comme ceci:
    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
    ...
    
    function quitter (choix char) : boolean;
    var
      r : boolean;
    begin
      { write au lieu de writeln, que la lecture se fasse sur la même ligne que le message]
      write('quitter ? [o,n]');
      readln(choix);
      r = false; { non par défaut }
      if (choix = 'o') or (choix = 'O') then r = true
      quitter = r;
    end;
    ...
    { et dans le programme principal }
    var
      ...
      sortir : boolean;
    begin
      ...
      sortir = false ; { a priori inutile, mais j'initialise toujours les variables }
    
      repeat
        ...
        case choix of
             '0': sortir := quitter(choix);
      ...
      until sortir;
      ...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    Points : 39
    Points
    39
    Par défaut
    j'ai deja essayer d'eliminer tout a fais la procedure quitter j'ai toujours la meme erreur

    et les begin et end j'ai verifier 10X

    Sinon tampis

    Merci pour ton aide

  6. #6
    Membre confirmé Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Points : 573
    Points
    573
    Par défaut
    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
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    program eurovisin;
    const N = 5;
    type encode = record
       score:integer;
       pays:string[20];
       end;
    type tabpays = array [1..N] of encode;
     
    var a:tabpays;
        choix:char;
        comptpays,i,m:integer;
     
    procedure classement (t:tabpays;compt,z:integer);
    var i,j:integer;
         k:encode;
    begin
       for i:=1 to compt-1 do
          for j:=i+1 to compt do
             if t[j].score < t[i].score then
                begin
                   k:= t[i];
                   t[i]:= t[j];
                   t[j]:= k;
                end;
       for i:=1 to compt do writeln('num ',i,': ',t[i].pays,' score: ',t[i].score);
       if z = 0 then
          begin
             writeln('podium');
             writeln('------');
             writeln;
             for i:=1 to 3 do writeln('num ',i,': ',t[i].pays,' score: ',t[i].score);
          end;
    end;
     
    procedure encodepays(var tab:tabpays; c:integer);
    var i:integer;
         t:char;
    begin
       c:=c + 1;
       t:= 'o';
       repeat
          if c > 5 then
             begin
                writeln('vous ne pouvez incérer plus de pays');
                t:= 'n';
             end
          else
              begin
                 writeln('le numéro du pays à encoder attention 5 pays max');
                 readln(i);
                 writeln('tappez nom du pays : ');
                 readln(tab[i].pays);
                 writeln('encoder autre pays ?  [n,o]');
                 readln(t);
              end;
       until (t = 'n') or (t = 'N');
    end;
     
    procedure encodevotes (var tab:tabpays; c:integer);
    var i,j,k,mm:integer;
    begin
       mm := 1;
       for i:=1 to c do
          begin
             writeln(tab[i].pays,'distribue les points');
             for j:=1 to 8 do
                begin
                   writeln('a qui donnez vous ', j,' points ? (tappez numero de pays)');
                   readln(k);
                   tab[k].score:= tab[k].score + j ;
                end;
             writeln('a qui donnez vous 10 pts?');
             readln(k);
             tab[k].score:= tab[k].score + 10;
             writeln('a qui donnez vous 12 pts?');
             readln(k);
             tab[k].score:= tab[k].score + 12;
             classement(tab,c,mm);
          end;
    end;
     
    procedure quitter(var choix:char);
    begin
       writeln('quitter ? [o,n]');
       readln(choix);
       if (choix = 'o') or (choix = 'O') then choix:= '@';
    end;
     
    begin
       m := 0;
       for i:=0 to N do a[i].score:= 0;
       comptpays:=0;
       repeat
          repeat
             writeln('concours eurovision');
             writeln('-------------------');
             writeln;
             writeln('1. Encodage des pays');
             writeln('2. Encodage des votes');
             writeln('3. Classement final');
             writeln;
             writeln('0. Quitter');
             readln(choix);
          until choix in ['0'..'3'];
          case choix of
             '0':quitter(choix);
             '1':encodepays(a,comptpays);
             '2':encodevotes(a,comptpays);
             '3':classement(a,comptpays,m);
          end;
       until choix = '@';
    end.
    j'ai enlevé les () a tout les endroits où t'avais mis writeln(); et ça compile sans problème.
    Sinon j'ai aussi enlevé des begin end inutiles et j'ai légerement réindenté le programme.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    Points : 39
    Points
    39
    Par défaut
    Merci beaucoup

    j'ai plus qu'a corriger tout ce qui va va

    edit: je vie,s de faire une grande découverte, apparement s'il voulais pas compiler c'est parsqu'il était trop loin dans les répertoire, j'ai mis la 1ere version que j'ai faite qui fonctionnnais pas dans c:\ et du coup ca compile...

    je cherche pas a savoir pkoi ^^

  8. #8
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Points : 176
    Points
    176
    Par défaut
    bonjour,

    pour info FreePascal n'aime pas trop les noms de fichiers avec des espaces du type "C:\program files" ou "mes documents"
    alors personnellement je créé à la racine du disque dur un repertoire du type c:\pgm\fpc dans lequel je mets le compilateur (je limite aussi à 8 caracteres les noms des fichiers et 3 pour les extention exemple comptav2.pas (à la mode DOS ... eh oui ...)

    alors pas d'espace, pas d'accents et 8.3 ! c'est ma règle mais ça n'engage que moi..

    bonne semaine

  9. #9
    HRS
    HRS est déconnecté
    Membre confirmé
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    678
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 678
    Points : 638
    Points
    638
    Par défaut
    j'ai compilé votre source avec FP 2.0.4 sous Windows

    pas d'erreur

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

Discussions similaires

  1. [Dev-Pascal] [Free Pascal] Erreurs de compilation avec Link.res
    Par swayly dans le forum Autres IDE
    Réponses: 7
    Dernier message: 16/03/2008, 02h37
  2. [Free Pascal] Unité Strings introuvable
    Par Bruno13 dans le forum Free Pascal
    Réponses: 1
    Dernier message: 24/10/2006, 23h47
  3. [Free Pascal] Erreur de compilation hallucinante
    Par molesqualeux dans le forum Free Pascal
    Réponses: 9
    Dernier message: 06/05/2006, 22h10
  4. [Free Pascal] Erreur lors de l'éxecution. (exitcode = 106)
    Par phoebos dans le forum Free Pascal
    Réponses: 2
    Dernier message: 03/03/2006, 23h24
  5. [Free Pascal] Problème lors de la compilation
    Par llaurentt dans le forum Free Pascal
    Réponses: 2
    Dernier message: 31/01/2006, 10h40

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