На этой странице находятся решения последних трех задач While28 - While30 из задачника Абрамяна. Задачи While28 и While29 - вычисление значения последовательности с наперед заданной точностью, а While30 - задача о прямоугольнике и квадрате (сколько квадратов поместится в прямоугольнике).
While28. Дано вещественное число ε (> 0). Последовательность вещественных чисел AK определяется следующим образом:
A1 = 2, AK = 2 + 1/AK−1, K = 2, 3, … .
Найти первый из номеров K, для которых выполняется условие |AK − AK−1| < ε, и вывести этот номер, а также числа AK−1 и AK.
var
K, n: integer;
e, A1, A2: real;
begin
write('e = ');
readln(e);
A1 := 0; { <== первое число }
A2 := 2; { <== второе число }
K := 1; { <== начальный номер }
n := trunc(-ln(e)/ln(10)) + 1; { <== количество цифр для округления }
{ Выполняем цикл до тех пор, пока разница (по мудулю) двух соседних
значений последовательности не меньше заданного числа e: }
while (abs(A2 - A1) >= e) do
begin
A1 := A2; { <== А1 присваиваем предыдущее значение A2 }
A2 := 2 + 1 / A1; { <== вычисляем новое значение A2 }
inc(K) { <-- увеличиваем номер на 1 }
end;
writeln('K = ', K);
writeln('A', K-1, ' = ', A1:0:n, ', A', K, ' = ', A2:0:n);
readln
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**function** Trunc(x: real): integer;
: Возвращает целую часть числа x.**function** Ln(x: real): real;
: Возвращает натуральный логарифм числа x.**function** Ln(x: real): real;
: Возвращает натуральный логарифм числа x.**function** Abs(x: real): real;
: Возвращает модуль числа x.**procedure** Inc(**var** i: integer);
: Увеличивает значение переменной i на 1 While29. Дано вещественное число ε (> 0). Последовательность вещественных чисел AK определяется следующим образом:
A1 = 1, A2 = 2, AK = (AK−2 + 2·AK−1)/3, K = 3, 4, … .
Найти первый из номеров K, для которых выполняется условие |AK − AK−1| < ε, и вывести этот номер, а также числа AK−1 и AK.
var
K, n: integer;
e, A1, A2, AK: real;
begin
write('e = ');
readln(e);
A1 := 1;
A2 := 2;
AK := (A1 + 2 * A2) / 3;
K := 3; { <== начальный номер }
n := trunc(-ln(e)/ln(10))+2; { <== количество цифр для округления }
{ Выполняем цикл до тех пор, пока разница (по мудулю) двух соседних
значений последовательности не меньше заданного числа e: }
while (abs(AK - A2) >= e) do
begin
inc(K); { <-- увеличиваем номер на 1 }
A1 := A2; { <== новое значение A1 }
A2 := AK; { <== новое значение A2 }
AK := (A1 + 2 * A2) / 3 { <== вычисляем значение AK }
end;
writeln('K = ', K);
writeln('A', K-1, ' = ', A2:0:n, ', A', K, ' = ', AK:0:n);
readln
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**function** Trunc(x: real): integer;
: Возвращает целую часть числа x.**function** Ln(x: real): real;
: Возвращает натуральный логарифм числа x.**function** Ln(x: real): real;
: Возвращает натуральный логарифм числа x.**function** Abs(x: real): real;
: Возвращает модуль числа x.**procedure** Inc(**var** i: integer);
: Увеличивает значение переменной i на 1
While30. Даны положительные числа A, B, C. На прямоугольнике размера A × B размещено максимально возможное количество квадратов со стороной C (без наложений). Найти количество квадратов, размещенных на прямоугольнике. Операции умножения и деления не использовать.
var
A, B, C, K, p: integer;
begin
writeln('Введите целые положительные числа A, B, C:');
readln(A, B, C);
K := 0; { <== начальное количество прямоугольников }
{ Внешний цикл выполняем до тех пор, пока сторона A не
меньше стороны C: }
while A >= C do
begin
p := B; { <== фиксируем B }
{ Внутренний цикл выполняем до тех пор,
пока сторона B не меньше стороны C: }
while p >= C do
begin
inc(K); { <== увеличиваем количиство квадратов K на 1 }
p := p - C { <== уменьшаем сторону B на C }
end;
A := A - C { <== уменьшаем сторону A на C }
end;
writeln('Количество квадратов в прямоугольнике: ', K);
readln
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**procedure** Inc(**var** i: integer);
: Увеличивает значение переменной i на 1