Другие языки программирования и технологии

Помогите написать очень простую прогу по программированию в Делфи 7

Необходимо среди введеных M целых чисел распознать степени двойки(например 1,2,4,8,16)
S. Ainidin
S. Ainidin
68
а может вот так будет проще:
var
N, D : Longint;
begin
N := StrToInt(Edit1.Text);
D := 1;
while D < N do D := D shl 1; // побитовый сдвиг - то же самое, что и *2
if D = N then Label1.Caption := 'является' else Label1.Caption := 'не является';
end;
АА
Алексей Ануфриев
58 921
Лучший ответ
Помогаю: признаком того что целое число есть степень двойки является равенство нулю результата конъюнкции между проверяемым этим числом и числом, полученным вычитанием единицы из проверяемого числа.

> Влад Симкин

Бредятина.

a:=sqrt(b); // 3 = КвадрКореньИз (9)
if Frac(a) = 0 then label1.caption:='это число степень 2'; // с сег. дня число 9 есть степень двойки.. . Ура, товарищи !
Виталий Ятчев
Виталий Ятчев
32 502
procedure Button1.Click(Sender:TObject);
var a:real; b:integer;
begin
b:=strtoint(edit1.text);
if b>0 then begin // если число положительное выполнять
a:=sqrt(b);
if (b mod 2 = 0) and (Frac(a) = 0) or (b = 1) then label1.caption:='это число степень 2' else label1.caption:='это число степенью 2 не является';
end;
end;

сорри, забыл одно условие =)

если необходимо массивом, то загоняешь тело процедуры в цикл с конечным M.

УВАЖАЕМЫЙ SM, можно поподробнее объяснить логику вашего высказывания, я не могу уложить в голове фразу коньюнкция между ..числом и .. числом, я полагаю фраза будет истинной если это числа 0 и 1 .поправте меня.
Алмаз Губашев
Алмаз Губашев
3 774
Хм а если число не одно а несколько в едите забито через делитель ...то строка b:=strtoint(edit1.text); не имеет смысла =(