1

Тема: Допоможіть знайти помилку

Є ось такий код:

#include<stdio.h>
#include<math.h>
#include<conio.h>
main()
{const float a=4.63, b=0.68;
       float x, e;
puts("Write x"), scanf("%f", &x);
if(x>=2*a) {e=atan((3/(2*x+1))+b); goto c;}
if(x>=b && x<a) {e=b*asin((a+b)/log(x)); goto c;}
else puts("function does not exist"); goto z;
c: printf("e=%6.1f", e);
z: getch();
}

аналогічна програма з використанням switch, case працює, а ця чомусь не хоче...
Значення x: 3.83, 5, 11,86

2

Re: Допоможіть знайти помилку

Без умови ми не можемо дізнатись як повинна працювати програма.
Не використовуйте goto ні в якому разі! Це робить код нечитаємим і дуже заплутаним.

Подякували: muroclav1

3

Re: Допоможіть знайти помилку

1) x=5
функція не визначена. Все правильно.

2) x=11.86

>>> import math
>>> math.atan(3/(2*11.68 + 1) + 0.68)
0.6766603717145286

Що в принципі і є 0.7. Теж все правильно.

3)x=3.68

>>> 0.68*math.asin((4.63+0.68)/math.log(3.68))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: math domain error

Аналізуємо умову. Там під arcsin значення більше 1, а sin лежить в [0,1]. Тобто умова не правильна або x належить пустій множині. Програма видає nan, що в принципі і є пустою множиною.

Подякували: muroclav1