Saisir une chaîne uniquement par .........

MoNdEtYnOtEcK Messages postés 58 Statut Membre -  
MoNdEtYnOtEcK Messages postés 58 Statut Membre -
Bonjour,

Je veux remplir une chaîne de caractères uniquement par des chiffres et des lettre majuscules e l'intervalle [ 'A' .. 'F' ], je ne trouve pas le solution :'(

j'ai besoin d'aide et merciiiiii.

3 réponses

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Salut MoNdEtYnOtEcK,

    Ce que tu veux faire n'est pas clair.

    Peux-tu préciser, stp.

    Sinon, voilà des pistes.

    1.

    Est-ce que tu veux c'est : demander à l'utilisateur d'un programme en mode console de saisir au clavier une chaîne en n'acceptant sa saisie que s'il ne presse que des lettres majuscules et/ou des chiffres et la touche Enter ?

    Si c'est bien cela, il faudrait utiliser ReadKey en n'acceptant la saisie d'un caractère que si la valeur du caractère (fonction ord) est comprise entre celles de A et Z et entre 0 et 9 (compris) https://www.freepascal.org/docs-html/rtl/crt/readkey.html en faisant un echo à l'écran, et en stockant la valeur dans une chaîne.

    2.

    Autrement, tu peux utiliser un readln et vérifier a posteriori, que les caractères de la chaîne saisie sont "acceptables".

    A toi de jouer :-)

    Bon courage,

    Dal
    1
  2. xman
     
    voici une fonction qui fait le test de saisie !
    function verif(ch:string):boolean;
    var
    i:integer;
    begin
    i:=1;
    while(upcase(ch[i]) in ['A'..'Z','0'..'9']) and (i<= length(ch)) do
    inc(i); { i:=i+1;}
    verif:=i>=length(ch);
    end;
    et voici la procédure saisie
    procedure saisie(var ch:string);
    begin
    repeat
    write('Taper une chaine: ');
    readln(ch);
    until(verif(ch));
    end;
    1
  3. MoNdEtYnOtEcK Messages postés 58 Statut Membre
     
    Salut tous le monde,

    Merci pour toi Dal et xman, j'ai trouver la solution :D

    => Pour dal, mon besoin c'est exactement ta hypothèse 1.
    => Pour xman, c'est presque que-ce que je fait.

    La solution :

    Function verif ( ch : string ) : boolean ;
    var
    v : boolean ;
    i : integer ;
    begin
    v := vrai ;
    i := 1 ;
    while ( i <= length(ch)) and ( v ) do
    if (( not ( ch[i] in ['A'..'F','0'..'9'] )) = true ) then
    v := faux
    else
    i := i + 1 ;
    verif := v ;
    end ;

    begin
    repeat
    writeln ( " Taper une chaine : " ) ;
    read ( ch ) ;
    until ( verif ( ch ) ) ;
    end.
    0
    1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      Si c'est l'hypothèse 1., alors cela serait plutôt :

      program test;
      
      uses
        Crt;
      
      var
        ch : Char;
        st : String;
      
      begin
        ClrScr;
        write('Veuillez taper un nombre hexadécimal, ' +
              'c''est à dire, une chaîne de caractères ' +
              'composée uniquement par des chiffres et ' +
              'des lettres majuscules dans l''intervalle ' +
              '[ ''A'' .. ''F'' ]]: ');
        st := '';
        repeat
          ch := ReadKey;
          if (ch in ['A'..'F','0'..'9']) then
          begin
            st := st + ch;
            write(ch);
          end;
        until (ch = #13) and (st <> '');
        writeln;
        writeln('Vous avez tapé : ' + st);
      
        ReadKey;
      end.

      Pour bien faire, il faudrait aussi gérer la touche "Backspace" pour permettre la suppression de texte saisi. Mais, c'est un peu compliqué.


      Dal
      0
    2. MoNdEtYnOtEcK Messages postés 58 Statut Membre
       
      Merci Dal pour ton aide :D
      0