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

Тема в разделе "Другие языки программирования", создана пользователем DuBepCaHT, 7 янв 2016.

  1. DuBepCaHT
    Оффлайн

    DuBepCaHT Студент 1 курс

    Сообщения:
    17
    Симпатии:
    2
    Доброго времени суток! Задание такое: перевести ТОЛЬКО из 2-ой СС в 10-ую, 8-ую и 7-ую СС, с одновременным выводом результата, т.е. по запросу вводим бинарник и он выводит результаты 10, 8 и 7 СС. Я написал код, но он переводит из вся и всех СС во все и вся СС, но, как написано выше...
    В общем код:
    Код (Pascal):
    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. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.306
    Код (Pascal):
    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.
    --- Объединённое сообщение, 7 янв 2016 ---
    Код (Pascal):
    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-чной уже как-то сами.
     
    Kиpилл нравится это.
  3. DuBepCaHT
    Оффлайн

    DuBepCaHT Студент 1 курс

    Сообщения:
    17
    Симпатии:
    2
    Код (Pascal):

    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 янв 2016
  4. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.306
    Сами алгоритмы, по которым делал, вот:

    Перевод в десятичную систему счисления
    Быстрый переход между двоичной, 8-ичной и 16-ичной системами
    --- Объединённое сообщение, 8 янв 2016 ---
    Но у Вас опять таки код принципиально ничем не отличается от первого в том плане, что он получился универсальным для обеих СС,
    а не так как Вы просите в задании, чтобы он был "заточен" только под определенную (одну из трех) СС.
    --- Объединённое сообщение, 8 янв 2016 ---
    P.S. И сильно на мой код на "налегайте" по поводу правильности.
    Писал на Pascal впервые за 15 лет (скриптовый язык AVZ не в счет).
     
    Последнее редактирование: 8 янв 2016
  5. DuBepCaHT
    Оффлайн

    DuBepCaHT Студент 1 курс

    Сообщения:
    17
    Симпатии:
    2
    спасибо! пригодится, чтобы вспомнить еще раз перед экзаменами.
     

Поделиться этой страницей