При попытке выполнить программу выходит exitcode = 217

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

При попытке выполнить программу выходит exitcode = 217

Сообщение Redhils123 » 23.09.2019 17:04:08

Здравствуйте! Написал программу, вычисляющую значение функции на определённом интервале, так же имеющую ОДЗ .После запуска программы, программа вылетает и вылазит окошко с надписью "program exited with exitcode=217".

program 123;
uses Math;
const step=0.1;
const e=2.7;
var x,f:real;
begin
x := -8;
while x<=0 do begin
if (((x<0) and ((x>=-2) or ((x>=-6) and (x<-2)))) or ((x=0) and (x>=-6)))
then writeln ('x=', x:0:2, 'Ne podhodit po ODZ')
else begin
if x<-6 then f:=ln(x)*Power(x,3) - 23
else if x<-2 then f:=(Power(x,0.1*x)/Power(x,2))*(-x/18)
else f:=(cos(2*x)/Power(e,x))*(sin(x)/sin(x));

writeln('x=',x:0:2,'f(x)=',f:0:2);
end;
x:=x+Step;
end;
readln();
end.

Надеюсь на понимание и помощь, заранее спасибо.
Redhils123
незнакомец
 
Сообщения: 2
Зарегистрирован: 23.09.2019 16:37:23

Re: При попытке выполнить программу выходит exitcode = 217

Сообщение Дож » 23.09.2019 23:05:52

Пожалуйста, используйте тег code при вставке фрагментов кода в сообщение.

Это Run-time error, список кодов и их описание можно найти тут:
https://www.freepascal.org/docs-html/user/userap4.html
(217 - программа кинула исключение, которое не было обработано).

Обычно в программе есть стандартный обработчик исключений, который перехватывает исключение, печатает что это за исключение, и если программа скомпилирована с ключом -gl, говорит в какой строке программы исключение произошло.

Т.к. вы не приводите никаких подробностей, я воспользовался своими телепатическими способностями и определил, что у вас баги в рассчётах, которые приводят к недопустимым операциям к числам с плавающей точкой. Один из этих багов -- вы берёте логарифм от отрицательных чисел, это Nan и источник проблем, в чём вы можете убедиться самостоятельно, запустив следующую программу:

Код: Выделить всё
uses
  Math;
var
  x: real;
begin
  Writeln('ln(-8) = ', ln(-8));
  x := -8;
  Writeln('ln(x) = ', ln(x));
end.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: При попытке выполнить программу выходит exitcode = 217

Сообщение Vadim » 24.09.2019 07:10:40

Redhils123
Возможно у Вас очень старый FreePascal. У меня версия 3.0.4 и он в Вашем случае выдаёт довольно подробное и понятное сообщение об ошибке (см. прилагаемый рисунок). Дальнейший алгоритм поиска ошибки таков:
1) Смотрим строку 12 исходного кода ( ;-) :D );
2) В этой строке 2 явных кандидата на ошибку: функция LN() и функция POWER(), т.к. арифметические и логические операции тут явно не причём;
2) Рассматриваем эти функции с точки зрения математического применения, т.е. передаваемых им параметров:
- с функцией POWER() явно всё в порядке, т.к. её что ни сунь (имеется в виду числа, конечно ;-) ) она отбарабанит на ура;
- а вот с функцией LN() явно проблемы, которые Вам совершенно справедливо указал Дож.
Вложения
err02.png
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

Рейтинг@Mail.ru