ВВЕРХ
ВНИЗ
  • Home
  • While
  • While 28 - 30

Вычисление последовательности с заданной точностью

На этой странице находятся решения последних трех задач 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.

Код Pascal
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
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.

While29. Дано вещественное число ε (> 0). Последовательность вещественных чисел AK определяется следующим образом:

A1 = 1,  A2 = 2,  AK = (AK−2 + 2·AK−1)/3,  K = 3, 4, … .

Найти первый из номеров K, для которых выполняется условие |AK − AK−1| < ε, и вывести этот номер, а также числа AK−1 и AK.

Код Pascal
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
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.

Количество квадратов без наложений

While30. Даны положительные числа A, B, C. На прямоугольнике размера A × B размещено максимально возможное количество квадратов со стороной C (без наложений). Найти количество квадратов, размещенных на прямоугольнике. Операции умножения и деления не использовать.

Код Pascal
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
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.


Яндекс.Метрика