Страница 1 из 1
Спасите девушку!!!!!!!!!
Добавлено: 06 апр 2007, 11:52
July
Привет, ребята! Спасите девушку! Требуется помощь!! Помогите, пожалуйста, решить задачу на Pascale функцией и процедурой!!!!!!!

Задача:Найти все натуральные числа, не превосходящие заданного числа n, в двоичном представлении которых номера ненулевых разрядов образуют арифметическую прогрессию.
Re: Спасите девушку!!!!!!!!!
Добавлено: 06 апр 2007, 13:24
somewhere
Код: Выделить всё
Uses crt;
Type
TByteList = Record Count : Byte;
Items : Array[1..255] of Byte;
end;
Var
CurN, MaxN : Integer;
X, Diff : Byte;
binr : String;
poslist : TByteList;
IsProg : Boolean;
{ Result is string as binary representation of I }
Function GetBinaryRepresent(I: Integer):String;
var x:Byte;
begin
GetBinaryRepresent := '0000000000000000';
for x:=0 to 15 do GetBinaryRepresent[16-x] := chr($30 + (I shr x) and 1);
end;
{ MAIN PROGRAMM }
begin
ClrScr;
For CurN := 0 to 10000 do
begin
binr := GetBinaryRepresent(CurN);
PosList.Count := 0;
for x:=16 downto 1 do
if binr[x] = '1' then
begin
inc(PosList.Count);
PosList.Items[PosList.Count] := 16-X;
end;
IsProg := True;
if PosList.Count > 2 then
begin
diff := PosList.Items[2] - PosList.Items[1];
For x := 3 to PosList.Count do
IsProg := IsProg and (PosList.Items[x] - PosList.Items[x-1] = diff);
if IsProg then
WriteLn(CurN:5, ' ', BinR, ' Formula : ', PosList.Items[1],'+',diff,'x');
end;
end;
end.
Так пойдет?