Controle de saisie, pascal

Résolu
madgyl Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
madgyl Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Voila, j'ai un petit problème avec la procédure qui suit, alors si quelqu'un peut m'aider, merci dja! ;-)
En fait il s'agit de remplir une classe d'étudiants (fichier) avec un minimum de 5 et un maximum de 25.
g utilisé la fonction Ord (avec les codes ASCII) pour contrôler les saisies au clavier;
le problème maintenant est qu'il accepte toute les valeurs numériques, alors que moi je veux des chiffres dans l'intervalle [5..25]
{ ********************************************************************* }
procedure effectif(eff: string);
 var t: boolean; ch: array[1..10] of char;
     i,y: byte;
 Begin
  repeat
  clrscr;
   writeln;
   write(' ','Donner l''effectif de la classe: ');
   t:= true;
   readln(eff);
    for i:= 1 to length(eff) do
     begin
      ch[i]:= eff[i];
          y:= ord(ch[i]);
      if ((y < 48) or (y>57)) then
       t:= false;
     end;
      if t= false then
       begin
        writeln;
         textcolor( red+ blink);
        writeln('     ERREUR DE SAISIE     ');
         textcolor(white);
        writeln(' Nos classes comprennent entre 5 et 25 etudiants ');
        writeln(' Saisissez des entiers svp! ');
        writeln(' Veuillez appuyer sur ENTRER pour resaisir l''effectif ');
        readln;
       end;
  until (t = true);
 End;
A voir également:

1 réponse

amigo
 
bonjour,

L'astuce pour controler la saisie de nombres en pascal, c'est de lire une chaine (et non un nombre) qu'on convertit ensuite en nombre si possible. Pour ça, on uitilise la procédure Val().

Val ( x, s, error ) ;
Procédure qui convertit la chaîne de caractère de nom s en un nombre (Integer ou Real) x et renvoie un code erreur error (de type integer) qui est égale à 0 si la conversion est possible.

Petit programme test:
Program test;

uses crt;

Var
ok : boolean;
s : string;
n : integer;
err: integer;

Begin
ok:=false;
repeat
  Writeln('Entrer un nombre entier compris entre 5 et 25');
  readln(s);
  val(s,n,err);
  if ((err=0) and (n>=5) and (n<=25)) then ok:=true;
until ok ;
Writeln('Vous avez entré le nombre ', n);
readln;
END.

Essaye d'entrer des lettres ou des nombres décimaux ou est entier hors intervalle.

A+.
1
madgyl Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
merci, g comprends mieux maintenant comment fonctionne la proced val
thanks ;-)
0