Помогите разобраться в задачах

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

#1
1 задача: Напишите программу вывода на экран всех натуральных чисел, не превосходящих заданное число, которые можно представить в виде суммы квадратов двух чисел. Например
13=(2*2)+(3*3).

Решение:

Program n1;
var
n, m : integer;
i, j : integer;

begin
вводим числа с проверкой}
repeat
Write('Vvedite N (1..32000) > ');
ReadLn(n);
WriteLn('Naideno');

until (n >= 1) and (n <= 32000); {проверяем ввод}

for i := 0 to n do
begin
if i * i > n then break; {если квадрат первого числа больше n то смысла просматривать дальше нет}
for j := i to n do
begin
if i*i + j*j > n then break; {если сумма квадратов больше n – то перебирать jсмысла нет}
if i*i + j*j = n then writeln(i, ' * ', i, ' + ', j, ' * ', j, ' = ', n);
end;
end;
readln;

end.

Где подчёркнуто не могу понять что за "найдено" ?? оно нужно разве? и ещё не пойму ограничения N (1..32000)

Задача 2:

Напишите программу расчета конечной суммы и сравнения полученного результата с контрольным значением. Число членов суммы вводится с клавиатуры с защитой от возможного неверного ввода данных.
Вид суммы Контрольное значение
13+23+33+43+…+N3 (N2 * (N +1)2) /4

решение:
Program n2;
var
n, i, s, c : longint;

begin
repeat
write('Vvedite n (1..210) > '); {просим ввести N}
readln(n);
until (n >= 1) and (n <= 210); {проверяем ввод. Ограничения на макс число обусловлены выбранным типом данных Logint, т.к. при выборе большего числа для этого типа данных получим переполнение}

s := 0;

for i := 1 to n do {считаем сумму}
s := s + I*I*I;

writeln(s); {выводим сумму}

c := ((n*n)*((n+1)*(n+1))) div 4;
writeln©; {выводим контрольное значение}

if s = c Then Writeln('Ok') else Writeln('Error!!!'); {выводим результаты проверки}


readln;
end.
 
Статус
Закрыто для дальнейших ответов.