Bonjour tout le monde,
je veux faire un programme qui permet de convertir un nombre hexadecimal en binaire. voici le code source:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
program convert_hexa;
uses WinCrt;
  var p:real;
  var n:string;
function convcar(c:char):string;
var d:integer;
var r,e,i:integer;
var ch1,c2:string;
 
begin       
if(c in['0'..'9'])then
val(c,d,e)
else
d:=ord(c)-ord('A')+10;
ch1:='0000';
i:=4;
repeat
r:=d mod 2;
str(r,c2);
ch1[i]:=c2[1];
i:=i-1;
d:=d div 2;
until (d=0);
convcar:=ch1;
end;  
 
 
function convertir(ch:string):string;
var res:string;
         i:integer;
begin
     res:='';
     for i:=1 to length(ch)do
     begin
     res:=res+convcar(ch[i]);
     end;
     convertir:=res;
 
end;
function valide(ch:string):boolean;
var i: integer;
var b:boolean;
 
begin
 
b:=false;
writeln('entrée dans valide');
i:=0;
     repeat
     i:=i+1;
     writeln('le caractère ',i, 'est: ',ch[i]);
     b:=UPCASE(ch[i])in['0'..'9','A'..'F']  ;
     {writeln(b);}
     until ((b=false) or (i=length(ch)))
end;
procedure saisie(var n:string);
begin
     repeat
     write('Donnez le nombre hexadecimal: ');
     readln(n);
     until(valide(n));
     writeln('la valeur de valide est : ',valide(n));
end;
begin
saisie(n);
 
writeln('le code binaire est: ',convertir(n));
end.
le problème est que la saisie accepte tout et en plus elle ne répète pas la saisie si le nombre donné n'est pas valide.
pouvez vous m'aider s'il vous plait, je n'arrive pas à détecter l'erreur
Merci pour votre aide