помогите найти ошибку



задача:
Введите с клавиатуры число. Если оно отрицательное, то выведите на экран его модуль. Если дробное – выведите на экран его целую часть, дробную часть, а также округлите до ближайшего целого. Если число не подходит по условию – оставьте его без изменения.​

Приложения:

Ответы

Ответ дал: KnowsUser1
0

Ответ:

Тот момент, когда попытка ужать всё в одну строку привела не к красивому коду, а к куче мусора, в которой ничего не понятно. Во первых, в чём смысл применения функций 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.

Объяснение:

Ответ дал: KnowsUser1
0
Ну, С++ постоянно обновляется, современный стандарт наверняка тоже переварит. Просто когда писал, первое что пришло в голову - эти два небрата-акробата, для которых смысл жизни - неявные приведения типов и куча весёлых неочевидных моментов, особенно у JS, например его знаменитый '9' + 1 = '91', a 9 + '1' = 91, или true + true + true + false = 3 =)
Ответ дал: SpitefulSpamer
0
В JS преобразования жуткие =)
Ответ дал: avgfresco
0
спасибо за помощь
Похожие вопросы