Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > перевод в другую систему счисления


Автор: armageddon 19.2.2006, 21:03
а именно из десятеричной в двоичную, из десятеричной в восьмеричную
он есть одно но можно пользоватся только следующими типами данных : целочисленный, вещественный, логический
т.е создавать свои типы нельзя, а также нельзя пользоватся строковым типом и массивами
помогите пожалуйста , а то совсем не придумать, чтобы при таких жестких ограничениях написать прогу
примерный алгоритм я знаю, то у меня есть проблема, ведь когда мы после всех делений пишем число(я имею ввиду ручками и на бумаге) мы берем последнее, а потом записываем его на первое место

Автор: volvo877 19.2.2006, 22:10
armageddon,
рекурсия тебе поможет:
Код

function fromdec(n, radix: longint): string;
var T: byte;
begin
  if n = 0 then fromdec := ''
  else begin
    T := succ(n mod radix);
    fromdec := fromdec(n div radix, radix) +
      Chr(47 + T + 7 * Byte(T >= 10));
  end;
end;

begin
  writeln(fromdec(4811, 16)); { Dec to Hex }
end.

Это для примера, что можно сделать задание при заданных тобой ограничениях...

Автор: Albinos_x 19.2.2006, 22:11
Цитата(armageddon @ 19.2.2006, 21:03 Найти цитируемый пост)
из десятеричной в двоичную,

где-то так:
Код

var
     N:Integer;
     res:integer;
     i,r,k:integer;
begin
Writeln('Vvedite celoe chislo');
readln(N);
i:=0; 
res:=0;
while n=0 do
    begin
    r:=(n mod 2);
    k:=i;
    while k>0 do  
        begin
        r:=r*10;
        dec(k);
        end
    res:=res+r;
    n:=n div 2;
    inc(i);
    end;
Writeln('Dvoichnoe chislo : ',res);
Readln
end;

в восьмиричную по аналогии...
только использовать
Код
...
r:=(n mod 8);
...
n:=n div 8;

Добавлено @ 22:17
ЗЫ: по аналогии можно и с рекурсией сделать...

Автор: Albinos_x 19.2.2006, 22:38
к примеру:
Код

function fromdec(n, radix, vl: longint): longint;    
var r: byte;    
     nn,k:longint;
begin    
    r:=(n mod radix);
    k:=vl;    
    while k>0 do    
        begin    
        r:=r*10;    
        dec(k);    
        end    
    nn:=n div radix;
    result:=r+fromdec(nn, radix, vl+1);    
end;    

только с 16-ричной без строк или массивов ен обойтись....

Автор: cardinal 19.2.2006, 22:49
В VB6 FAQ'e в алгоритмах тоже есть пару примеров...

Автор: armageddon 20.2.2006, 19:31
спасибо огромнейшее, я был дал вам по "+" , но не набрал еще достаточно постов!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)