Помощь - Поиск - Пользователи - Календарь
Полная версия: Конвертор
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
nik.bstu
Есть мной написанный конвертор числа в двоичный код... Как его можно ускорить... Нужно для ускорения полнопереборных лгоритмов...
const n=15;
type t_kod=array[1..n] of 0..1;
procedure convertor(var a:t_kod; y:longint );
var t:longint;
    x,q: longint;

begin
  t:=n;
  x:=y;
  if x<0 then a[1]:= 1;
  x:=abs(x);
  repeat
  q:=x mod 2;
  a[t]:=q;
  x:= x div 2;
  t:=t-1;
  until (x=0) or (t = 1);
end;


Тегами пользуйся...
klem4
FAQ : Системы счислений

Неужели так сложно зайти в FAQ ?
nik.bstu
Цитата(klem4 @ 2.03.2006 21:02) *

FAQ : Системы счислений

Неужели так сложно зайти в FAQ ?


Да мне нужен числовой массив. а что там за команда "digit[(n mod radix)+1]" ... что то типа взврата символа?
volvo
klem4, а ты приведенную программу ВНИМАТЕЛЬНО смотрел? Уверен, что в FAQ-е есть аналог?

nik.bstu, заменять div 2 на shr 1 (будет быстрее), t := t-1 на dec(t) (тоже быстрее), избавляемся от лишней переменной...
Вот результат:
procedure convertor(var a:t_kod; y:longint );
var
  t: longint;
  x: longint;
begin
  t := n; x := y;
  if x<0 then a[1]:= 1;
  x := abs(x);
  repeat
    a[t] := x and $1;
    x := x shr 1;
    dec(t);
  until (x = 0) or (t = 1);

end;

Ну, и естественно, НЕ переусердствуй заранее, решай проблемы по мере появления, ибо "Premature optimization is the root of all evil..." ©
klem4
Volvo,
Цитата
Есть мной написанный конвертор числа в двоичный код


Где тут слово массив ?
А привиденную программу я смотрел и как раз подумал, что автору надо показать как это делается без массива.
volvo
Цитата(klem4 @ 3.03.2006 9:19)
Где тут слово массив ?

Здесь:
Цитата
type t_kod=array[1..n] of 0..1;


Значит, так смотрел программу!
klem4
/ offtop
Не буду естественно с тобой спорить,я видел этот массив smile.gif , но подумал что автор сделал конвертор каким-то не изученным наукой методом, поэтому и дал ссылку на FAQ, чисто теоретически его массив 1 и 0 можно перевести в string и и использовать процедуру из нашего FAQ, но так как это не требуется, прошу прощения.

ps
И всетаки в самом задании не сказано, что для представления числа в двоичной сс надо использовать массив ;)

Дополнительный код smile.gif Все понял, виноват, исправлюсь ;)
volvo
Понимаешь, в чем дело... Если человек описывает отдельный тип для числового массива, а потом еще в программе делает:
  if x<0 then a[1]:= 1; { <-- Вот это !!! }
, значит, ему нужно нечто отличное от просто строки...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.