Constant out of range
fatma
-
fatma -
fatma -
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!!
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
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.
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.
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)
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)
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.
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.
mais logiquement pourquoi pas avec l'opérateur IIIIINNNNNN
et puis qu'est-xce qui te gène à ne pas transformer ton "in" en >=1000 and <=9999
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