FAQ PascalConsultez toutes les FAQ
Nombre d'auteurs : 10, nombre de questions : 402, dernière mise à jour : 7 janvier 2018 Ajouter une question
Bienvenue dans la F.A.Q. Pascal !
Celle-ci rassemble les réponses aux questions les plus fréquemment posées sur le langage Pascal et tous ses outils de programmation. Si elle n'a pas pour vocation de répondre à toutes les interrogations possibles, elle reste une bonne base de connaissances sur le Pascal, et ne demande qu'à être enrichie par vos expériences personnelles.
Nous vous invitons à proposer vos propres questions/réponses directement dans la FAQ ou, si vous souhaitez apporter une modification à une question/réponse existante, à la poster dans le fil de discussion renseigné ci-dessous.
Nous vous souhaitons une bonne lecture !
L'équipe Pascal.
Vous avez dû mettre un point-virgule là où le compilateur n'en attend pas : il ne faut pas en mettre devant un else. La structure d'un bloc if est :
Code delphi : | Sélectionner tout |
1 2 3 4 5 | if Condition = True then begin ... end; |
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | if Condition = True then begin ... end else begin ... end; |
Cette erreur est le symptôme d'une situation de débordement. En effet, les nombres sont stockés en mémoire sur un certain nombre de bits. Or si, lors d'une multiplication, la taille du résultat dépasse le nombre de bits prévu, les bits de poids fort qui « débordent » sont tronqués. De fait, si le dernier bit de poids fort pouvant loger est un 1 et que le type utilisé accepte les nombres signés, alors votre nombre apparaîtra comme négatif, et ce, même si vous n'avez utilisé que des nombres positifs.
Cette situation peut se produire dans deux cas de figure, chacun ayant sa méthode de résolution :
- Vous êtes certain que le résultat n'est pas trop grand pour le type utilisé :
C'est donc qu'une opération dans un calcul n'est pas en mesure de loger dans le nombre de bits impartis. Il faut donc forcer le compilateur à utiliser un nombre de bits plus important lors de l'opération intermédiaire, à l'aide d'un transtypage (utiliser un LongInt à la place d'un Integer par exemple) :
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 | Var a, b, c : Integer; Begin a := 300; b := 400; c := (LongInt(a) * LongInt(b)) div (a + b); { car a * b = 120000 > 32768, et pourtant c = 171 } End; |
- Le résultat final est trop grand pour le type choisi :
Choisissez un type plus grand, comme un LongInt à la place d'un Integer :
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 | Var a, b, c : LongInt; Begin a := 300; b := 400; c := a * b; End; |
Une fois que votre programme est terminé, le système (ou l'EDI) reprend la main. Or, si votre programme est très rapide, vous n'aurez pas le temps de voir ce qu'il a affiché !
La solution est toute simple : ajouter une pause à la fin du programme :
Code delphi : | Sélectionner tout |
1 2 3 4 | ... ReadLn; End. |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.