Цитата(мисс_граффити @ 5.10.2006 22:54)
кроме того, условие достаточное, но не необходимое. (у нас же не сказано, что числа разные. так что 8 ...
ряд можно продолжить
.. до бесконечности
. Да любая сумма квадратов одинаковой четности сразу выпадает..
Цитата(мисс_граффити @ 5.10.2006 22:54)
что-то типа
Во-первых, в условии нет указания, что одно из чисел не должно быть нулем, так что проверка b на равенство нулю не нужна.
Во-вторых, проверка типа real на равенство нулю не годится...
Я бы был проще и вообще постарался избежать извлечений корня. Типа так:
Код
var
N,i,j:integer;
begin
Write('Number? ');ReadLn(N);
for i:=1 to N do for j:=i to N do if N=i*i+j*j then
WriteLn(N,' = ',i,'^2 + ',j,'^2');
WriteLn('Over');
ReadLn;
end.
Код, конечно, крайне неоптимальный. Первое, что можно сделать - запоминать значение i*i. Затем - лучше ограничить циклы. Можно и квадраты запоминать в массив..
Вот первый шаг по оптимизации:
Код
var
N,i,ii,j,m:integer;
begin
Write('Number? ');ReadLn(N);
m:=N div 2+1;
for i:=1 to m do begin
ii:=i*i;
for j:=i to m do if N=ii+j*j then WriteLn(N,' = ',i,'^2 + ',j,'^2');
end;
WriteLn('Over');
ReadLn;
end.
Думаю, остается еще громадный простор для полета мысли..