Bon c'est sur, il y a des fonctions integrées qui pourraient reduire la taille du code, mais le but etait de mettre en oeuvre les manieres de conversions apprises en cours.
C'est un de mes 1ers petits projet, mais je le poste, je n'ai pas vu d'equivalent...
il faudrait que je gere le depassement de capacité des variables integer lorsqu'on saisit un gros chiffre,je vais penser à ca.
Pour l'instant il ne gere pas encore les virgules, mais je suis en train de tenter de gerer ca (ce qui est deja une autre histoire lol)
Source / Exemple :
function decibinr(decival : integer) : string;
var
i : integer;
j : integer;
h : string;
n : string;
begin
i := decival ;
while i <> 0 do
begin
j := i mod 2;
i := i div 2;
h := inttostr(j) + h ;
end;
decibinr := h;
end;
function decioct(decival : integer) : string;
var
j : integer;
h : string;
b : string ;
res : string;
n : integer;
begin
n := decival ;
while n >= 8 do
begin
j := n mod 8;
n := n div 8;
b := inttostr(j) + b;
end;
b := inttostr(n) + b ;
decioct := b;
end;
function decihexa(decival : integer) : string;
var
h : string;
res : string;
n : integer;
b : integer;
begin
n := decival;
while n >= 16 do
begin
b := n Mod 16 ;
n := n div 16 ;
CASE b of
0 : h := '0';
1 : h := '1';
2 : h := '2';
3 : h := '3';
4 : h := '4';
5 : h := '5';
6 : h := '6';
7 : h := '7';
8 : h := '8';
9 : h := '9';
10 : h := 'A';
11 : h := 'B';
12 : h := 'C';
13 : h := 'D';
14 : h := 'E';
15 : h := 'F';
END;
res := h + res;
end;
CASE n of
0 : h := '0';
1 : h := '1';
2 : h := '2';
3 : h := '3';
4 : h := '4';
5 : h := '5';
6 : h := '6';
7 : h := '7';
8 : h := '8';
9 : h := '9';
10 : h := 'A';
11 : h := 'B';
12 : h := 'C';
13 : h := 'D';
14 : h := 'E';
15 : h := 'F';
END;
res := h + res ;
decihexa := res;
end;
function bindeci(binval : string) : integer;
var
i : integer;
res : variant;
h : string;
bin : string;
begin
bin := binval ;
res := 0 ;
for i := 0 to Length(bin)-1 do
begin
h := copy(bin,length(bin)-i,1) ;
if i = 0 then
begin
if h = '1' then res := res + 1 ;
h := '0';
end ;
if h = '1' then res := res + Exp(i*Ln(2)) ;
end ;
bindeci := res;
end;
function octdeci(octval : integer) : integer;
var
i : integer;
j : string;
h : string;
test : integer;
b : integer;
n : integer;
res : integer;
result2 : variant;
result3 : integer;
oct : integer;
begin
oct := octval;
n := length(inttostr(oct)) - 1 ;
for i := 0 to n do
begin
j := inttostr(oct) ;
b := strtoint(copy(j,n-i+1,1));
if i = 0 then
begin
res := b ;
end
else
begin
result2 := exp(i*ln(8)) * b ;
result3 := result3 + result2
end;
end;
result2 := res + result3 ;
octdeci := result2;
end ;
function hexadeci(hexaval : string) : integer;
var
z : integer;
x : integer;
v : integer;
p : integer;
b : variant;
h : integer;
n : integer;
begin
x := Length(hexaval);
v := x;
p := 0;
n := 0;
b := 0;
while v >= 1 do
begin
z := Ord(hexaval[v]) ; {Je recupere la valeur du charactere pour pouvoir utiliser le Case * of ... j'aurais donc pu directement les convertir en hexa, mais c'est pas le but}
Case z of
48 : h := 0 ;
49 : h := 1 ;
50 : h := 2 ;
51 : h := 3 ;
52 : h := 4 ;
53 : h := 5 ;
54 : h := 6 ;
55 : h := 7 ;
56 : h := 8 ;
57 : h := 9 ;
65 : h := 10;
66 : h := 11;
67 : h := 12;
68 : h := 13;
69 : h := 14;
70 : h := 15;
End;
b := exp(p * ln(16)) * h;
p := p + 1;
v := v - 1;
n := n + b;
end;
hexadeci := n;
end;
Conclusion :
Je met un zip qui montre comment utiliser les fonctions, et comment empecher la saisie de characteres qui entraineraient une erreur dans les Edit .
Ne ralez pas parcqu'il y a des fichiers inutiles dans le zip, je ne sais pas lesquels ne sont pas necessaires...
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.