FAQ PascalConsultez toutes les FAQ

Nombre d'auteurs : 10, nombre de questions : 401, dernière mise à jour : 5 novembre 2017  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.

Commentez


SommaireLe langage PascalLes erreurs courantes (3)
précédent sommaire suivant
 

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;

Mis à jour le 6 mars 2004 Eric Sigoillot

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;
Il est possible que votre programme provoque une erreur en cas de débordement si l'option de contrôle de débordement ($Q+) est activée.

Mis à jour le 10 janvier 2007 Alcatîz Eric Sigoillot

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.
L'utilisateur doit presser Enter avant que le programme se termine. D'autres solutions sont possibles : utiliser Delay, ReadKey, etc.

Mis à jour le 6 mars 2004 Alcatîz Eric Sigoillot

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 ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les 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 © 2017 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.

 
Responsables bénévoles de la rubrique Pascal : Gilles Vasseur - Alcatîz -