помогите пожалуйста
(задача Дан целочисленный массив A из N элементов (0<N<100;0<A<100). Определить те его элементы, индексы которых являются степенями двойки (1,2,4,8,16, ...).)
uses crt;
const nmax=99;
var a:array[1..nmax] of integer;
n,i:integer;
begin
clrscr;
randomize;
repeat
write('Размер массива до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Исходный массив:');
for i:=1 to n do
begin
a[i]:=random(99)+1;
write(a[i]:4);
end;
writeln;
writeln('Элементы, чьи индексы есть степени числа 2:');
i:=1;
while i<=n do
begin
write(a[i]:4);
i:=i*2;
end;
readln
end.
Нужна глобальная переменная типа set of byte и при инициализации модуля заполняешь ее значениями полученными в результате сдвига 1 вправо на 0..31 (for i:=0 to 31 do Include(ByteSet, 1 shl i)), ну а в самой процедуре поиска уже проверяешь на на нахождения значения каждого элемента массива в этом ByteSet (if arr in ByteSet then УРЯ!).
Нужна глобальная переменная типа set of byte и при инициализации модуля заполняешь ее значениями полученными в результате сдвига 1 вправо на 0..31 (for i:=0 to 31 do Include(ByteSet, 1 shl i)), ну а в самой процедуре поиска уже проверяешь на на нахождения значения каждого элемента массива в этом ByteSet (if arr in ByteSet then УРЯ!).
А зачем? В результате имеем для каждого элемента проверку вхождения, когда в задании требуется определить элементы, чьи индексы...
Эти индексы и так известны заранее. Двигаем переменную, скажем X = 1, влево на 1, пока результат не станет больше N и попутно выводим элементы arr[x] - вот и все. У ТС, кстати, примерно так же и написано.
It's a long way to the top if you wanna rock'n'roll