Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2009, 18:18   #11
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
тонко намекаю :
2^10 = 1024 ... Ваша функция выдаст такой результат?!
да. Только в двоичной системе счисления, которую никто не оговаривал.
Sergey2 вне форума Ответить с цитированием
Старый 08.08.2009, 20:15   #12
TAVulator
Программист
Форумчанин
 
Аватар для TAVulator
 
Регистрация: 23.07.2009
Сообщений: 101
По умолчанию

как такой вариант решения?
Код:
const
 maxn = maxint;
type
 list = array [0..maxn] of integer;
var
 a: list;

procedure add (k: byte);
var
 buf, i: integer;
begin
 buf := 0;
 for i := 1 to a[0] do
  begin
   a[maxn - i + 1] := a[maxn - i + 1] * k + buf;
   buf := a[maxn - i + 1] div 1000;
   a[maxn - i + 1] := a[maxn - i + 1] mod 1000
  end;
 if buf > 0 then
  begin
   inc (a[0]);
   a[maxn - a[0] + 1] := buf
  end
end;

procedure write_ans ();
var
 i: integer;
 s: string[3];
begin
 for i := a[0] downto 1 do
  if i = a[0] then write (a[maxn - i + 1])
  else
   begin
    str (a[maxn - i + 1], s);
    while length (s) <> 3 do s := '0' + s;
     write (s)
   end
end;

var
 n: integer;
begin
 write('Введите степень числа 2: ');
 readln (n);
 a[0] := 1;
 a[maxn] := 1;
 while n > 1 do
  begin
   add (4);
   dec (n, 2)
  end;
 if n = 1 then add (2);
 write_ans ();
end.
Если вы верите, что можете или не можете
сделать что-то, вы правы в обоих случаях.

______________________________(С) Г.Форд
TAVulator вне форума Ответить с цитированием
Старый 08.08.2009, 20:40   #13
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Цитата:
как такой вариант решения?
Это здорово. А если поставить вопрос так - возможно ли на лету перевести число из одной СС, в другую, не выходя за рамки int?
BaronTreep вне форума Ответить с цитированием
Старый 08.08.2009, 20:50   #14
TAVulator
Программист
Форумчанин
 
Аватар для TAVulator
 
Регистрация: 23.07.2009
Сообщений: 101
По умолчанию

что значит "на лету"?
Если вы верите, что можете или не можете
сделать что-то, вы правы в обоих случаях.

______________________________(С) Г.Форд
TAVulator вне форума Ответить с цитированием
Старый 08.08.2009, 20:52   #15
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Цитата:
Сообщение от TAVulator Посмотреть сообщение
как такой вариант решения?
Вот и мой:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  res:array[0..100000] of Word;
  power,mem,i,j: Integer;
  result:string;
begin
  power:=StrToInt(edit1.Text);
  for i:=0 to 100000 do REs[i]:=0;
  res[1]:=1;
  res[0]:=1;
  mem:=0;
  for i:=1 to power do
  begin
    j:=1;
    while j <= res[0] do
    begin
      res[j]:=res[j]*2+mem;
      mem:=0;
      if res[j] >9 then
        begin
          res[j]:=res[j]-10;
          mem:=1;
        end;
      if (mem=1) and (j = res[0]) then res[0]:=res[0]+1;
      Inc(j);
    end;
  end;
  result:='';
  for i:=1 to res[0] do result:=result + IntToStr(res[res[0]+1-i]);
  //button1.Caption:=result;
  ShowMessage(result);
end;
TwiX вне форума Ответить с цитированием
Старый 08.08.2009, 20:59   #16
TAVulator
Программист
Форумчанин
 
Аватар для TAVulator
 
Регистрация: 23.07.2009
Сообщений: 101
По умолчанию

TwiX, я писал на паскале (Turbo Pascal). там тип String ограничен 255 символами ))
Если вы верите, что можете или не можете
сделать что-то, вы правы в обоих случаях.

______________________________(С) Г.Форд
TAVulator вне форума Ответить с цитированием
Старый 08.08.2009, 21:02   #17
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Цитата:
что значит "на лету"?
Ну вот при обычном алгоритме перевода считается остаток от деления всего числа на основание - если число большое, то остаток нужно реализовывать как функцию в длинной арифметике. На лету - то есть по-битам, или не оперируя всем числом (похоже тут старый вопрос про логарифмическую и экспотенциальную сложность )
BaronTreep вне форума Ответить с цитированием
Старый 08.08.2009, 21:22   #18
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию

Цитата:
Сообщение от BaronTreep Посмотреть сообщение
Это здорово. А если поставить вопрос так - возможно ли на лету перевести число из одной СС, в другую, не выходя за рамки int?
Можно из двоичной в восмеричьную:
(10011110100111101)2=(10.011.110.10 0.111.101)2=(236475)8
Sergey2 вне форума Ответить с цитированием
Старый 08.08.2009, 22:17   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

TAVulator, решение отличное!
Вот только под TurboPascal оно не компилируется!
Вы под чем его проверяли? Под Дельфи? Под FreePascal?
почему не идёт под TP
1) type
list = array [0..maxint] of integer;
тип данных слишком большой (в DOS паскале ни одна структура не может быть больше 64 кб)
Данная программа компилируется только при
maxn = 32423;

2) procedure write_ans ();
пустые параметры в процедуре/функции не допускаются. ну тут достаточно просто скобочки убрать.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.08.2009, 22:22   #20
TAVulator
Программист
Форумчанин
 
Аватар для TAVulator
 
Регистрация: 23.07.2009
Сообщений: 101
По умолчанию

Serge_Bliznykov, признаюсь - писал в Free Pascal :-)
Если вы верите, что можете или не можете
сделать что-то, вы правы в обоих случаях.

______________________________(С) Г.Форд
TAVulator вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите, может кому интересно будет Gab Свободное общение 6 04.09.2012 15:09
Интересно (Builder) alun Общие вопросы C/C++ 0 16.01.2009 12:56