[TP] Problème de conversion de base
Bonjour,
je viens de faire un programme qui permet de transformer une base donnée en une autre base.
L'idée que j'ai utilisée est de convertir chaque nombre en décimal puis le diviser sur la base désirée.
Mais ça n'a pas marché.
SVP aidez-moi à corriger ce programme ou donnez-moi une autre idée.
Merci d'avance :lol:
Voilà mon programme
Code:
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
| program base;
uses wincrt;
type
tab=array[1..100] of integer;
var
t:tab;
b1,b2,c,result:integer;
ch:string;
procedure lecture(var b1:integer;var b2:integer;var ch:string);
begin
writeln('donner la base a transferé');
readln(b1);
writeln ('donner la base auqelle vous aller transformé');
readln(b2) ;
writeln('donner le chiffre');
readln (ch);
end;
procedure som( ch:string;b1:integer);
var
i, L, poid,Result : integer ;
begin
L := Length(Ch) ;
Poid := 1 ;
Result := 0 ;
for i := L downto 1 do
begin
Result := Result + ( Ord(Ch[i]) - Ord('0') ) * Poid ;
Poid := Poid * b1 ;
end ;
end ;
procedure divi(b1:integer;var result:integer) ;
var
i,c : integer ;
begin
c := 0 ;
repeat
c:=c+1;
t[i]:= result mod b1;
result:=result div b1;
until result =0
end;
procedure affichage(t:tab;c:integer);
var
i:integer;
begin
for i:= c downto 1 do
if t[i] in [1..9] then write (t[i])
else write(chr(ord('A')+t[i]-10) );
end;
begin
lecture(b1,b2,ch);
som(ch,b1);
divi(b1,result);
affichage(t,c);
end. |
voici le progamme executable
merci pour tout ce qui a m'aider et vois mon programme
Code:
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
| program base;
uses wincrt;
type
tab=array[1..100] of integer;
var
b1,b2,s,c:integer;
ch:string;
t:tab;
{ **** procedure lecture ****}
procedure lecture(var b1:integer;var b2:integer;var ch:string);
begin
writeln ('donner la base auqelle vous aller transformé');
readln(b2) ;
writeln('donner la base de laquelle transferé');
readln(b1);
writeln('donner le chiffre');
readln (ch);
end;
{ **** procedure som , elle permet de convertir un nombre donné à la
base dicimale **** }
procedure som( ch:string;b1:integer; var s:integer);
var
c:char;
n,i,l,p:integer;
begin
s:=0;p:=1;
l := Length(Ch) ;
for i := l downto 1 do
begin
c:= upcase(ch[i]);
if c in ['0'..'9'] then
begin
n:= ord(c)-ord('0');
end
else
begin
n:= ord(c)-ord('7');
end;
s:= s+(n*p) ;
p:=p* b1;
end;
end;
{**** procedure divi , elle permet la divition du nombre décimale
sur b2 puis de l'affiché ***}
procedure divi (b2:integer; var s:integer);
var
i,c:integer;
t:tab;
begin
c :=0;
repeat
c:=c+1;
t[c]:= s mod b2;
s:=s div b2;
until s=0;
write('le chiffre devient:');
for i:= c downto 1 do
if t[i] in [0..9] then write(t[i]:2 )
else write (chr(ord('A')+t[i] -10):2)
end;
begin
lecture (b1,b2,ch);
som(ch,b1,s);
divi(b2,s);
end. |