Перевод чисел из 2 СС в 10-ую, 8-ую, 7-ую

DuBepCaHT

Новый пользователь
Сообщения
24
Реакции
4
Доброго времени суток! Задание такое: перевести ТОЛЬКО из 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.
 
ТОЛЬКО из 2-ой СС в 8-ую
Код:
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.
ТОЛЬКО из 2-ой СС в 10-ую
Код:
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.

А с 7-чной уже как-то сами.
 
Код:
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.
Но серавно спасибо Вам!!! Попробую и Ваш код разобрать, для саморазвития!
 
Последнее редактирование:
Сами алгоритмы, по которым делал, вот:

Перевод в десятичную систему счисления
Быстрый переход между двоичной, 8-ичной и 16-ичной системами
вот вариант, который мне предложили на другом форуме
Код:
V:=Convert(8,D);
S:=Convert(7,D);
Но у Вас опять таки код принципиально ничем не отличается от первого в том плане, что он получился универсальным для обеих СС,
а не так как Вы просите в задании, чтобы он был "заточен" только под определенную (одну из трех) СС.
P.S. И сильно на мой код на "налегайте" по поводу правильности.
Писал на Pascal впервые за 15 лет (скриптовый язык AVZ не в счет).
 
Последнее редактирование:
Назад
Сверху Снизу