В возрастающем порядке напечатайте все целые числа - 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.
Объяснение кода листинга программы
- Создается переменная
a, которая представляет собой массив булевых значений размером от 1 до 10000. - Затем определяются три переменные
m,m2иn, которые будут использоваться в цикле. Переменнаяmинициализируется значением 1, аm2иnустанавливаются равными квадратуm. - Далее идет цикл, который выполняется для каждого значения
mв диапазоне от 1 до округленного вверх значения корня из максимального значения массиваa. Внутри цикла переменныеm2иnпересчитываются как квадратmи значениеnустанавливается равным 1. - Цикл повторяется, пока значение
i, вычисленное какm2 + Sqr(n), не станет меньше или равно максимальному значению массиваa. Если значениеiпопадает в диапазон массиваa, то соответствующий элемент массива устанавливается в значениеTrue. Если это не происходит, цикл прерывается с помощью оператораBreak. - После завершения внутреннего цикла происходит внешний цикл, который проходит по всем элементам массива
aот наименьшего до наибольшего значения. Если значение элемента массива равноTrue, то перед ним выводится пробел. - В конце программы выводится символ новой строки с помощью функции
WriteLn.