
Другие языки программирования и технологии
что не так сделал, что пишет Nan??? как исправить?!
Помогите с паскалем пж,

NaN - типа ошибка, нет решений. А почему пишет - так в программе вычисляется в том числе и квадратный корень. А корень из отрицательного числа (<0) не берется (не извлекается). Вы, мой друг, ввели -11 как h, соответственно √h=√-11, что, понятное дело, невозможно (как и деление на 0). И Вам еще повезло, что программа выдает такой результат - ибо зачастую при таком раскладе программы вылетают с ошибкой. Чтобы этого не было надо это предусмотреть. Да и вообще у Вас программа не оптимизирована - во-первых, как я (и не только я) писАл выше, не предусмотрена защита от ввода отрицательного значения h, а во-вторых, зачем лишняя переменная r, когда без нее можно спокойно обойтись. Но нет же, Вы решили лишних 6 байт (а именно столько занимает лишняя переменная такого типа) занять... Понятное дело, что сейчас 6 байт - ни о чем, но в более сложных программах, где полно переменных надо будет использовать, то там уже и до мегабайтов недалеко...
Вот исправление:
Вот исправление:
Program P1;
uses crt;
var g, h: real;
begin
clrscr;
writeln ('Введите с клавиатуры значения переменных g и h (только числа). После ввода значения каждой из переменных нажимайте клавишу Enter. При вводе дробных значений целую часть от дробной отделяйте точкой, а не запятой.');
write ('Введите значение переменной g: g=');
readln (g);
write ('Введите значение переменной h: h=');
readln (h);
if h
корень из -11 не может быть, вот и NAN
NaN (нечисло) — это числовой тип данных, значение которого является неопределенным или непредставимым. Это может произойти, когда ты пытаешься вычислить корень из отрицательного числа или делить на ноль.
В твоем коде возможно две причины для NaN:
В твоем коде возможно две причины для NaN:
- Если x = 0, то ты будешь делить на ноль в строке 10: y:= a + b / x;
- Если y < 0, то ты будешь извлекать корень из отрицательного числа в строке 11: y:=sqrt( y);
program test;
var g,h,r:real;
begin
write('Введите значение h');
read(h);
write('Введите значение g');
read(g);
r:=23*h-sqr(g)*sqr(g)+sqrt(h)/6-g*h;
if r r then // проверяем, является ли r NaN
writeln('Некорректный ввод! Результат не определен!')
else
write('ответ: ',r);
end.
Похожие вопросы
- ПОМОГИТЕ С ПАСКАЛЕМ ПЖ
- Помогите с паскалем
- Ааааа....помогите с Паскалем (Pascal)!!!!Срочно!!!!
- Помогите с паскалем пожалуйста!!!!
- помогите с паскалем!!! ужас а не задание!!
- Помогите с Паскалем
- Помогите с паскалем. Помогите написать программу переводящую из 10-ой в 16-ую систему счисления на паскале
- Помогите с паскалем!
- Ребят помогите пожалуйста. Паскаль, Paskal
- Помогите на паскале умоляю
var g,h,r:real;
begin
write('Введите значение h');
read(h);
write('Введите значение g');
read(g);
r:=23*h-sqr(g)*sqr(g)+sqrt(h)/6-g*h;
write('ответ: ',r);
end.