Доброго времени суток! Задание такое: перевести ТОЛЬКО из 2-ой СС в 10-ую, 8-ую и 7-ую СС, с одновременным выводом результата, т.е. по запросу вводим бинарник и он выводит результаты 10, 8 и 7 СС. Я написал код, но он переводит из вся и всех СС во все и вся СС, но, как написано выше...
В общем код:
Код:
program ir1;
uses crt;
var cs1,cs2,res,change:integer;
TD:string;
function FromDec(n,r:longint):string;
var
s:string;
const
digit:string[16]='0123456789ABCDEF';
begin
s:='';
repeat
s:=digit[(n mod r)+1]+s;
n:=n div r;
until n=0;
FromDec:=s;
end;
function ToDec(n:string; r:longint):longint;
var
m,i:longint;
const digit:string[16]='0123456789ABCDEF';
begin
m:=0;
while n[1]='0' do delete(n,1,1);
for i:=1 to length(n) do m:=m*r+pos(n[i],digit)-1;
ToDec:=m;
end;
begin
clrscr;
writeln('Из какой СС перевод:');
repeat
readln(cs1);
until
(cs1>=2) and (cs1<=36);
writeln('Введите число соответствующее СС:');
readln(TD);
writeln('Введите в какую СС переводить:');
repeat
readln(cs2);
until
(cs2>=2) and (cs2<=36);
writeln('Перевод из ',cs1,' СС в ',cs2,' СС:');
writeln(FromDec(ToDec(TD,cs1),cs2));
readln
end.
Program BinTo8;
uses crt;
var
t8 : array[0..111] of byte;
nSrc : string;
nRet : integer;
i : integer;
TC,L,D: byte;
begin
clrscr;
{ Читаем константную таблицу триад }
t8[000] := 0;
t8[001] := 1;
t8[010] := 2;
t8[011] := 3;
t8[100] := 4;
t8[101] := 5;
t8[110] := 6;
t8[111] := 7;
Write('Введите число в 2-чной СС: ');
Readln(nSrc);
L := length(nSrc);
{ Если 1-я триаа неполная }
TC := L mod 3;
if 0 <> TC then
begin
VAL (Copy (nSrc, 1, TC), D );
nRet := t8[D];
end;
for i := TC + 1 to L do { счет начат с 1-й полной триады }
begin
{ шаг = 3 }
if (i - TC - 1) mod 3 = 0 then
begin
VAL (Copy (nSrc, i, 3) , D );
nRet := nRet * 10 + t8[D];
end;
end;
Write(nRet);
Readln;
end.
Program BinTo10;
uses crt;
var
nSrc : string;
nRet : integer;
i, j, S : integer;
r, D : byte;
begin
clrscr;
Write('Введите число в 2-чной СС: ');
Readln(nSrc);
r := 0;
{ умножение байта разряда числа на 2 в степени номера этого разряда (от 0 и выше) }
for i := length(nSrc) DownTo 1 do
begin
S := 1;
for j := 1 to r do
S := S * 2;
VAL (Copy (nSrc, i, 1), D);
nRet := nRet + D * S;
inc(r);
end;
Write(nRet);
Readln;
end.
Program BinTo8;
[code=PASCAL]function Convert(k,aD:integer):string;
var t:integer;
c:char;
m:string;
begin
m:='';
While aD<>0 do
begin
t:=aD mod k;
aD:=aD div k;
c:=Char(t+Ord('0'));
Insert(c,m,1);
end;
Convert:=m;
end;
var st,V,S:string;
i,D:integer;
begin
Write('Dvoicnoe = ');
Readln(st);
Writeln;
D:=0;
for i:=1 to Length(st) do
D:=2*D+Ord(st[i])-Ord('0');
V:=Convert(8,D);
S:=Convert(7,D);
Writeln('Desyaticnoe = ',D);
Writeln('Vosmericnoe = ',V);
Writeln('Semericnoe = ',S);
Readln;
end.
Но серавно спасибо Вам!!! Попробую и Ваш код разобрать, для саморазвития!
Но у Вас опять таки код принципиально ничем не отличается от первого в том плане, что он получился универсальным для обеих СС,
а не так как Вы просите в задании, чтобы он был "заточен" только под определенную (одну из трех) СС.
P.S. И сильно на мой код на "налегайте" по поводу правильности.
Писал на Pascal впервые за 15 лет (скриптовый язык AVZ не в счет).