Цитата:
Сообщение от ummasha
Вот еще одна задача из книжки: найти все натуральные числа a,b,c из интервала от 1 до 20, для которых выполняется равенство:а2+ b2 = c2
Program KR_2_Var1_2;
Var a,b,c:integer;
Begin
For a:=1 to 20 do
For b:=1 to 20 do
For c:=1 to 20 do
If sqr(a)+sqr(b)=sqr(c) then writeln(a,' ',b,' ',c);
readln;
end.
Задача решается без всяких проблем, НО: в книжке вместо этого было а*а+b*b=с*с. И это "типа" квадраты чисел?
|
В книжке, Маша, всё правильно. Тут есть одна тонкость. Употребив функцию SQR, Вы преобразовали целочисленный формат (Integer, Word, Byte...) в вещественный (Real, Extended...), что "не есть хорошо" хотя бы потому, что в этом формате операция проверки на равенство может, в зависимости от аппаратной реализации, оказаться не совсем корректной, поскольку в "дальних" разрядах может висеть "мусор", и как на него среагирует транслятор, неведомо (например, 2 может преобразоваться во что-нибудь вроде 2.0000000005298307645). Я в своих программах вообще избегаю таких действий, заменяя их при необходимости чем-нибудь вроде if Round(a*100000)=Round(b*100000) then ...