Перечислить все натуральные числа не превосходящие заданного N

Valter5631

Перечислить все натуральные числа не превосходящие заданного N, в двоичном представлении которых номера ненулевых разрядов образуют арифметическую прогрессию.Помогите доделать, он не до конца правильные ответы выводит.допустим он должен выводить число 1001001001001, но не число 10010010000000вот моё решение:
uses crt;
const zn:string[255]='01';
 
procedure DecBin(n:integer;var s:string);
begin
s:='';
while n>0 do
 begin
  s:=zn[n mod 2+1]+s;
  n:=n div 2;
 end;
end;
 
function Prog(s:string):boolean;
var f:boolean;
    i,n,d:byte;
    a:array[byte] of byte;
begin
n:=0;
for i:=length(s) downto 1 do
if s[i]='1' then
 begin
  n:=n+1;
  a[n]:=length(s)-i+1;
 end;
if n<2 then f:=false
else
 begin
  d:=abs(a[2]-a[1]);
  f:=true;
  i:=2;
  while(i<n)and f do
  if abs(a[i+1]-a[i])<>d then f:=false
  else i:=i+1;
 end;
Prog:=f;
end;
 
var n,i,k:integer;
    s:string;
begin
clrscr;
write('Ââåäèòå Г*Г*ГІГіГ°Г*ëüГ*îå ÷èñëî n=');
readln(n);
k:=0;
writeln('Г—ГЁГ±Г«Г*, Гў äâîè÷Г*îì ïðåäñòГ*âëåГ*ГЁГЁ êîòîðûõ');
writeln('Г*îìåðГ* Г*ГҐГ*óëåâûõ Г°Г*çðÿäîâ ïðåäñòГ*âëÿþò Г*ðèôìåòè÷åñêóþ ïðîãðåññèþ');
for i:=1 to n do
 begin
  DecBin(i,s);
  if Prog(s) then
   begin
    k:=1;
    writeln(i:3,'=',s);
   end;
 end;
if k=0 then write('Г’Г*ГЄГЁГµ Г·ГЁГ±ГҐГ« Г*ГҐГІ');
end.
1 ответ

Valter5631

Valter5631, какое ограничение N? в двоичном представлении числа могут быть гораздо длинее чем 255 символов. так что нужен массив. сейчас я дорешаю...что-то я запуталась) видимо не получится у меня(