Для проведения эксперимента создаются изображения содержащие случайные наборы цветных пикселей. В палитре 65 536 цветов размер изображения - 640*480 пк, при сохранении каждый пиксель кодируется одинаковым числом битов, все коды пикселей записываются подряд, методы сжатия не используются. Для каждого изображения дополнительно записывается 60 Кбайт служебной информации. Сколько изображений удастся записать, если для их хранения выделено 10 Мбайт?
100a+10b+c
Тогда:
100a+10b+c
-
100c+10b+a
99(a-c)
Значение, равное 99(a-c), равно трехзначному числу, составленному из тех же самых цифр a, b, c. Три цифры можно расставить шестью но два из них мы уже использовали, поэтому остается проверить четыре остальные расстановки, что и делает приведенная программа.
qBASIC
CLS
FOR a = 1 TO 9
FOR b = 0 TO 9
FOR c = a - 1 TO 1 STEP -1
k = 99 * (a - c)
k2 = 100 * a + 10 * c + b
k3 = 100 * c + 10 * a + b
k4 = 100 * b + 10 * a + c
k5 = 100 * b + 10 * c + a
IF k = k2 OR k = k3 OR k = k4 OR k = k5 THEN
PRINT a; b; c; " - "; c; b; a; " = "; k
END IF
NEXT c
NEXT b
NEXT a
Результат выполнения программы:
9 5 4 - 4 5 9 = 495
Сначала немного математики.
О модуле тут смысла нет говорить, поскольку все an - суть положительные величины на интервале (0;1).
uses Crt;
function ai(n:integer):real;
var
i:integer;
p:real;
begin
p:=1;
for i:=n+1 to 2*n do p:=p*i;
ai:=1/p
end;
var
i:integer;
eps,s,an:real;
begin
ClrScr;
Write('eps='); Read(eps);
s:=0; i:=1; an:=eps+1;
while an>=eps do begin
an:=ai(i);
if an>=eps then begin s:=s+an; Inc(i) end
end;
Writeln('s=',s);
ReadKey
end.
Тестовые решения:
eps=0.07
s= 5.8333333333E-01
eps=0.000001
s= 5.9229647667E-01
eps=1e-8
s= 5.9229653448E-01
Для контроля результата можно отметить, что сумма первых 1000 членов ряда равна приблизительно 5.922965365Е-01
Если раздражает наличие функции, можно и без нее:
uses Crt;
var
i,j:integer;
eps,s,an,p:real;
begin
ClrScr;
Write('eps='); Read(eps);
s:=0; i:=1; an:=eps+1;
while an>=eps do begin
p:=1;
for j:=i+1 to 2*i do p:=p*j;
an:=1/p;
if an>=eps then begin s:=s+an; Inc(i) end
end;
Writeln('s=',s);
ReadKey
end.