Ниже в табличной форме представлен фрагмент базы данных о фирменных поездах маршрута "Москва-Петербург" аукциона по закупке изделий медицинского назначения Сколько записей в данном фрагменте удовлетворяют условию (Дни_недели = "ежедневно") и (Цена <=3000)? 
Var ma:array of array of integer; n,m,i,j,res:integer; b:boolean; begin randomize; res:=1; b:=false; read(m,n); setlength(ma,m); for i:=0 to m-1 do setlength(ma[i],n); writeln('First matrix:'); for i:=0 to m-1 do begin writeln; for j:=0 to n-1 do begin ma[i,j]:=random(10); write(ma[i,j]:5); end; end; if n>m then begin for i:=0 to m-1 do for j:=i+1 to n-1 do if ma[i,j]>0 then begin; res:=res*ma[i,j]; b:=true; end; end else begin for i:=0 to n-1 do for j:=i+1 to n-1 do if ma[i,j]>0 then begin; res:=res*ma[i,j]; b:=true; end; end; if b=false then res:=0; writeln; writeln('Final array:'); for i:=0 to m-1 do begin writeln; for j:=0 to n-1 do begin if ma[i,j]=0 then ma[i,j]:=res; write(ma[i,j]:5); end; end; writeln; writeln('res=',res); end.
Переводим 3 байт обоих адресов в двоичную систему счисления 152(10) = 10011000(2) 157(10) = 10011101(2)
Запишем их друг под другом
10011000 10011101
Нам нужен наибольший байт маски. В маске под единицами записывается адрес сети, под нулями - номер хоста. Адрес сети у этих адресов одинаковый, то есть для поиска наибольшего байта маски мы можем байты разделить так 10011 000 10011 101
Первые пять разрядов - это окончание адреса сети, последние три - начало хоста. Хосту в маске подсети соответствуют нули, адресу сети - единицы, получается, что наибольший байт маски равен
Var
ma:array of array of integer;
n,m,i,j,res:integer;
b:boolean;
begin
randomize;
res:=1;
b:=false;
read(m,n);
setlength(ma,m);
for i:=0 to m-1 do
setlength(ma[i],n);
writeln('First matrix:');
for i:=0 to m-1 do
begin
writeln;
for j:=0 to n-1 do
begin
ma[i,j]:=random(10);
write(ma[i,j]:5);
end;
end;
if n>m then
begin
for i:=0 to m-1 do
for j:=i+1 to n-1 do
if ma[i,j]>0 then
begin;
res:=res*ma[i,j];
b:=true;
end;
end
else
begin
for i:=0 to n-1 do
for j:=i+1 to n-1 do
if ma[i,j]>0 then
begin;
res:=res*ma[i,j];
b:=true;
end;
end;
if b=false then res:=0;
writeln;
writeln('Final array:');
for i:=0 to m-1 do
begin
writeln;
for j:=0 to n-1 do
begin
if ma[i,j]=0 then ma[i,j]:=res;
write(ma[i,j]:5);
end;
end;
writeln;
writeln('res=',res);
end.
152(10) = 10011000(2)
157(10) = 10011101(2)
Запишем их друг под другом
10011000
10011101
Нам нужен наибольший байт маски. В маске под единицами записывается адрес сети, под нулями - номер хоста. Адрес сети у этих адресов одинаковый, то есть для поиска наибольшего байта маски мы можем байты разделить так
10011 000
10011 101
Первые пять разрядов - это окончание адреса сети, последние три - начало хоста. Хосту в маске подсети соответствуют нули, адресу сети - единицы, получается, что наибольший байт маски равен
10011 000
10011 101
11111 000 - маска
11111000(2) = 248(10)