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

Fermé
MoNdEtYnOtEcK Messages postés 49 Date d'inscription samedi 21 avril 2012 Statut Membre Dernière intervention 2 novembre 2013 - Modifié par MoNdEtYnOtEcK le 22/02/2013 à 01:01
MoNdEtYnOtEcK Messages postés 49 Date d'inscription samedi 21 avril 2012 Statut Membre Dernière intervention 2 novembre 2013 - 25 févr. 2013 à 22:25
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.
A voir également:

3 réponses

[Dal] Messages postés 6180 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 15 mai 2024 1 084
22 févr. 2013 à 14:46
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
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
MoNdEtYnOtEcK Messages postés 49 Date d'inscription samedi 21 avril 2012 Statut Membre Dernière intervention 2 novembre 2013
Modifié par MoNdEtYnOtEcK le 24/02/2013 à 22:14
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
[Dal] Messages postés 6180 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 15 mai 2024 1 084
25 févr. 2013 à 12:07
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
MoNdEtYnOtEcK Messages postés 49 Date d'inscription samedi 21 avril 2012 Statut Membre Dernière intervention 2 novembre 2013
25 févr. 2013 à 22:25
Merci Dal pour ton aide :D
0