Листинг программы
program z46;
{ Задана последовательность состоящая из единиц и нулей.
Определить кол-во М-значных чисел, входящих в указаную
последовательность, которые делятся на 21. }
uses crt;
var i,j,m,s,l,kol,y:longint;g,a:string;er:integer;
procedure step(a,n:longint;var p:longint);
var t:integer;
begin
p:=1;
for t:=1 to n do p:=p*a;
end;
procedure sistema(g:string;m:longint;var s:longint);
var b:array[1..1000]of longint;
var k,t,p:longint;label met;
begin
for t:=1 to m do
val(g[t],b[m+1-t],er);
s:=0;
for t:=1 to m do
begin
if t=1 then begin
p:=1;goto met;
end;
step(2,t-1,p);{2}
met:s:=s+b[t]*p;
end;
end;
begin
clrscr;
write('кол-во знаков: ');readln(m);
write('последовательность:');readln(a);
l:=length(a);if m>l then halt;
for i:=1 to l+1-m do
begin
g:='';for j:=i to m+y do g:=g+a[j];inc(y);
sistema(g,m,s);if (s mod 21=0)and(s<>0)then begin writeln(s);inc(kol); end;
end;
write('Ответ:',kol);
readln;
end.