Страница 1 из 1

коментарий к телу программы

Добавлено: 04 июн 2013, 20:09
_ROBERT_
помогите пожалуйста
(задача Дан целочисленный массив 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.

Re: коментарий к телу программы

Добавлено: 01 дек 2013, 03:14
Paymer-Soft-COM
Нужна глобальная переменная типа set of byte и при инициализации модуля заполняешь ее значениями полученными в результате сдвига 1 вправо на 0..31 (for i:=0 to 31 do Include(ByteSet, 1 shl i)), ну а в самой процедуре поиска уже проверяешь на на нахождения значения каждого элемента массива в этом ByteSet (if arr in ByteSet then УРЯ!).

Re: коментарий к телу программы

Добавлено: 03 дек 2013, 11:22
somewhere
Нужна глобальная переменная типа 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] - вот и все. У ТС, кстати, примерно так же и написано.