Помощь - Поиск - Пользователи - Календарь
Полная версия: Помощь студенту
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
FIREMAX
Задача: Последовательность 011212201220200112… строится так: сначала 0, затем повторяется следующее действие: уже написанную часть приписывают справа с заменой 0 на 1, 1 на 2, 2 на 0, т.е.
0->01->0112->01121220->011212202001-> 0112122020010112.
Составить алгоритм, который по введённому N, (0<=N<=3 000 000 000) определяет, какое число стоит на N-ом месте в последовательности нулей ( за исключением представления числа 0).Используя эту функцию, получить двоичное 1|16-ричное 2 представления данных пяти чисел.

Помогите разобратся с ошибкой.

procedure TForm1.Button1Click(Sender: TObject);
function getprgvalue(const num:Integer):integer;
var transpcount, pow2, m, a:Integer;
function log2i(const cf:Integer):Integer;
var n:Single;
begin
n:=log2i(cf);
if frac(n)<>0 then
result:=trunc(n)+1
else
result:=trunc(n);
end;
begin
transpcount:=0;
m:=num;
while m>1 do
begin
pow2:=log2i(m);
a:=round(power(2, pow2)/2); ( Ошибка "power" )
m:=m-a;
inc(transpcount);
end;
result:=transpcount mod 3;
form1.Memo1.Lines.Add(floattostr(result));
end;
Федосеев Павел
Полагаю, что для определения цифры в i-ой позиции используется алгоритм, описанный тут. Тогда и подсчёт количества единиц в двоичной записи числа можно взять из пояснений к задаче 5. Да и целочисленный тип подобрать такой, чтобы число 3 000 000 000 в него "помещалось".
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.