В возрастающем порядке напечатайте все целые числа - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Помогите решить, заранее спасибо) В возрастающем порядке напечатать целые числа из диапазона 1.. 10000, представимые в виде n2 + m2, где n, m>=0

Решение задачи: «В возрастающем порядке напечатайте все целые числа»

textual
Листинг программы
var
  a: array [1..10000] of Boolean;
  m, m2, n, i: Integer;
begin
  for m:=1 to Trunc(SqRt(High(a))) do begin
    m2:=Sqr(m); n:=1;
    repeat
      i:=m2+Sqr(n); Inc(n);
      if i<=High(a) then a[i]:=True else Break;
    until False;
  end;
  for i:=Low(a) to High(a) do if a[i] then Write(' ',i); WriteLn;
end.

Объяснение кода листинга программы

  1. Создается переменная a, которая представляет собой массив булевых значений размером от 1 до 10000.
  2. Затем определяются три переменные m, m2 и n, которые будут использоваться в цикле. Переменная m инициализируется значением 1, а m2 и n устанавливаются равными квадрату m.
  3. Далее идет цикл, который выполняется для каждого значения m в диапазоне от 1 до округленного вверх значения корня из максимального значения массива a. Внутри цикла переменные m2 и n пересчитываются как квадрат m и значение n устанавливается равным 1.
  4. Цикл повторяется, пока значение i, вычисленное как m2 + Sqr(n), не станет меньше или равно максимальному значению массива a. Если значение i попадает в диапазон массива a, то соответствующий элемент массива устанавливается в значение True. Если это не происходит, цикл прерывается с помощью оператора Break.
  5. После завершения внутреннего цикла происходит внешний цикл, который проходит по всем элементам массива a от наименьшего до наибольшего значения. Если значение элемента массива равно True, то перед ним выводится пробел.
  6. В конце программы выводится символ новой строки с помощью функции WriteLn.

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы