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 :

Range check error while evaluating constants [Free Pascal]


Sujet :

Free Pascal

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2
    Par défaut Range check error while evaluating constants
    Hello,

    Je suis un débutant en Pascal et j'utilise le compilateur FPC sous Linux.

    J'ai un exercice assez simple de calcule de salaire en employant le "case..of" à réaliser mais j'obtiens la même erreur à chaque fois : "range check error while evaluating constants"

    Voici mon code :
    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
    Program exercice14;
    
    var brut,prime,old:integer;
    var com:real;
    var result:real;
    
    begin
    
    writeln('Introduisez le chiffre d''affaire et l''ancienneté du représentant :');
    write('Chiffre d''affaire en €: ');
    readln(brut);
    write('ancienneté du représentant en année: ');
    readln(old);
    
    case brut of
    	0..2499:
    		com:=(brut);
    		
    	2500..12499:
    		com:=(brut*1.075);
    	12500..37500:
    		com:=(brut*1.09)
    	else
    		com:=(brut* 1.113)
    end;
    
    case old of
    		0..1: 
    			prime:=70;
    		2..6:
    			prime:=70+(10*(old-2));
    		7..14:
    			prime:=120+(12*(old-7))
    		else
    			prime:=216+(14*(old-15));
    			if prime > 326 then prime:=326
    end;
    
    
    result:=(prime+com);			
    writeln('Votre salaire est ',result:10:2)
    			
    end.
    Le problème se situe sur cette ligne, alors que quand je rentre la valeur 12500..30000 je peux compiler sans aucun soucis, je ne comprends pas trop d'où vient le problème.

    Si quelqu'un a une idée, qu'il n'hésite pas .

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Par défaut
    integer = entier 16bit = -32768..32767

    essaye comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var 
      brut, prime, old: LongInt;
      com, result: double;
    si ça ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if brut < 2499 then
      com := brut
    else
    if brut < 12499 then
      com := brut * 1.075
    else
    if brut < 37500 then
      com := brut * 1.09
    else
      com := brut * 1.113;
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2
    Par défaut
    Merci beaucoup

    C'est vrai que je n'ai pas pensé à vérifier les propriétés de mes variables.

  4. #4
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Par défaut
    oui, bien vérifié les types !

    je serais toi, crée toi une petite unité utile de ce genre :

    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
    unit SimpleTypes;
     
    interface
     
    type
      Int = LongInt;
      UInt = LongWord;
     
      Int8 = shortInt;
      Int16 = smallInt;
      Int32 = LongInt;
      UInt8 = byte;
      UInt16 = word;
      UInt32 = LongWord;
     
      Float = single;
      Float32 = single;
      Float64 = double;
     
    implementation
     
    end;

    et n'utilise plus que ces types.

    pense aussi à mettre à jours FreePascal.
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

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

Discussions similaires

  1. range check error signifie quoi
    Par zanoubya dans le forum Débuter
    Réponses: 2
    Dernier message: 21/06/2010, 11h31
  2. Gui et ' Error while evaluating uicontrol Callback'
    Par Lohique dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 04/06/2010, 10h31
  3. [Free Pascal] Erreur d'éxecution 201 : Range check error
    Par jeanmich dans le forum Free Pascal
    Réponses: 4
    Dernier message: 15/01/2009, 13h38
  4. IDHTTP : Range check error
    Par Hinox dans le forum Composants VCL
    Réponses: 0
    Dernier message: 12/06/2008, 16h10
  5. Range check error.
    Par Steff2 dans le forum Delphi
    Réponses: 2
    Dernier message: 16/07/2007, 21h02

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