Constant out of range

Fermé
fatma - 11 avril 2008 à 09:39
 fatma - 11 avril 2008 à 14:35
Bonjour,

Avec Pascal, j'ai voulu saisir un entier formé de quatre chiffres, j'ai écris :
Repeat
readln(n);
until n IN [1000..9999] ;
n déclaré comme Integer, et même Longint, mais ça na pas marché, message d'erreur "Constant out of range"
pourquoi ? ça marche avec (n<= 9999) et (n>=1000)
Ki peut m'aider!!

2 réponses

artragis Messages postés 481 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 6 avril 2010 146
11 avril 2008 à 09:56
pourquoi ? ça marche avec (n<= 9999) et (n>=1000)
bah si ça marche c'est que tu as réussi non?
n>= 1000 signifie de 1000 à +l'infini
n<=9999 signifie de - l'infinni à 9999
donc ton nombre fera bel et bien 4 chiffres. si tu mets 10000 alors ça fonctionnera pas et 999 non plus car ils ne font pas 4 chiffres.
1
je sais bien que ça marche avec <= et >=
mais logiquement pourquoi pas avec l'opérateur IIIIINNNNNN
0
artragis Messages postés 481 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 6 avril 2010 146 > fatma
11 avril 2008 à 10:49
peut être à cause d'une mauvaise syntaxe.
et puis qu'est-xce qui te gène à ne pas transformer ton "in" en >=1000 and <=9999
0
fatma > artragis Messages postés 481 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 6 avril 2010
11 avril 2008 à 11:06
Je suis enseignante,
j'ai manipulé cette application avec mes élèves en classe, on a trop utilisé l'opérateur IN, mais tu vois ils demandent pourquoi cette fois non (on l'a fais avec nombre de 2 chiffres), alors je dois les répondre et convaincre!!! et cé pour moi aussi
0
artragis Messages postés 481 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 6 avril 2010 146
11 avril 2008 à 11:56
alors, sur ce coup là je sais pas.
on est en longint. un int simple suffit (en effet int prend un entier entre -32 768 et 32 767)
Je recherche sur le web

j'ai trouvé !
donc ensuite apparament la chaine la plus grande pour in[i..j] est i=0 et j=255 ou alors une chaine de 256 valeur possibles au maximum. c'est pour ça. cela onctionnera avec les exprssion inferrieur ou egal... mais pas avec in[..]

(ps escusez moi pour le tutoiement)
0
Merci
cé vrai jé essayé la borne max est 255, mais qd mm je demande pourquoi !!
malgré qu'un entier est signé sur 16 bits et non sur 8, donc 2puiss8=256!!!
> et < cé valable pour les réels aussi, le IN seulement pour les entiers et les caractères (type ordonné)
0
artragis Messages postés 481 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 6 avril 2010 146 > fatma
11 avril 2008 à 13:54
c'est tout à fait logique que In ne soit valable que pour Int et String ordonnés (a,b,c...) car il n'a que 256 valeurs max. or un réel, à fortiori un décimal... il y en a... des tonnes (même en Single...)

en fait IN est signé 8 bits. c'est dommage car ça rend un programme plus lisible, mais bon il faut bien des restrictions si on veut éviter les bugs.
Je pense que c'est aussi une question de mémoire. en effet IN n'est pas un test mais un opérateur. Il prévois donc un interval maximum de 256 espaces mémoire, ce qui est pas mal. on va pas non plus en faire de trop pour éviter les lags.
En somme les tests sont beaucoup plus pratiques.
0
fatma > artragis Messages postés 481 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 6 avril 2010
11 avril 2008 à 14:35
En tout cas, merci beaucoup de ton précieux coup de main.
0