помогите найти ошибку
задача:
Введите с клавиатуры число. Если оно отрицательное, то выведите на экран его модуль. Если дробное – выведите на экран его целую часть, дробную часть, а также округлите до ближайшего целого. Если число не подходит по условию – оставьте его без изменения.
Answers & Comments
Verified answer
Ответ:
Тот момент, когда попытка ужать всё в одну строку привела не к красивому коду, а к куче мусора, в которой ничего не понятно. Во первых, в чём смысл применения функций int() и frac() к целому числу (n : integer), если у него нет дробной части? Во вторых - оператор and используется для логических выражений. Список аргументов Writeln() передаётся в функцию через запятую. Так же Pascal не переварит условие 'if frac(n)' т.к логическое выражение в условии оператора if должно возвращать boolean, но никак не не число. Это не JS или пайтон, которые молча хавают такие выражения и не давятся. Паскаль - статически типизированный язык, он не может проводить неявные приведения типов в зависимости от ситуации.
Пример примерно рабочего кода:
begin
var n := ReadReal('введите число: ');
if n < 0 then Print(abs(n))
else if frac(n) <> 0 then Println(int(n), frac(n), round(n))
else Println('Вне диапазона', n);
end.
Объяснение:
Кстати, C++ тоже переварит такое =)