Controle de saisie, pascal

Résolu/Fermé
madgyl Messages postés 3 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 7 juillet 2008 - 11 avril 2008 à 01:54
madgyl Messages postés 3 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 7 juillet 2008 - 11 avril 2008 à 13:03
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

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 samedi 22 décembre 2007 Statut Membre Dernière intervention 7 juillet 2008
11 avril 2008 à 13:03
merci, g comprends mieux maintenant comment fonctionne la proced val
thanks ;-)
0