0 / 0 / 0
Регистрация: 14.12.2015
Сообщений: 15
1

Вычисление значения интервально заданной функции

06.11.2018, 22:08. Показов 1202. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вычислить систему уравнений. Код программы есть, но верный результат в итоге показывает только с x>1.2 и x<1.2, что не пытался ничего не выходит. Нужно чтобы при x=1.2 выводился правильный ответ и находился по другому уравнения, а в итоге выдаёт ответ, если вводишь x = 1.2, как при x > 1.2. Использую RAD Studio 10.2.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <conio.h>
#include <cmath>
#include <math.h>
#include <iostream>
#include <windows.h>
 
using namespace std;
int main()
{
   SetConsoleCP(1251);
   SetConsoleOutputCP(1251);
   setlocale(LC_ALL, "Russian");
   double w,a,b,c,x;
   cout << "Введите x: "; cin >> x;
   cout << "Введите a: "; cin >> a;
   cout << "Введите b: "; cin >> b;
   cout << "Введите c: "; cin >> c;
   if (x < 1.2) {
      w = a*pow(x,2)+b*x+c;
      cout << "x меньше 1,2, поэтому используем формулу w=a*x^2+b*x+c и получаем результат равный " << w << endl;
   }
   else { if (x > 1.2) {
             w = (a+b*x)/sqrt(pow(x,2)+1);
             cout << "x больше 1,2, поэтому используем формулу w=(a+b*x)/(x^2+1)^(1/2) и получаем результат равный " << w << endl;
          }
            else { if (x == 1.2) {
                  w = a/(x+sqrt(pow(x,2)+1));
                  cout << "x равен 1,2, поэтому используем формулу w=a/(x+(x^2+1)^(1/2)) и получаем результат равный " << w << endl;
                  }
            }
   }
   system("Pause");
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2018, 22:08
Ответы с готовыми решениями:

Вычисление значения интервально заданной функции
Всем привет. Не знаю как решить эти две задачи, помогите, пожалуйста: (Тема циклы for,while, do...

Вычисление значения интервально заданной функции
Добрый день) помогите дописать программу.Выводит результат y=1. Не пойму в чем проблема.

Вычисление значения интервально заданной функции с использованием перечисления
В Чём косяк? #include&lt;iostream&gt; int main() { typedef enum...

Вычислить значение интервально заданной функции
Задание на развилку

17
0 / 0 / 0
Регистрация: 14.12.2015
Сообщений: 15
06.11.2018, 22:09  [ТС] 2
Вычислить систему уравнений. Код программы есть, но верный результат в итоге показывает только с x>1.2 и x<1.2, что не пытался ничего не выходит. Нужно чтобы при x=1.2 выводился правильный ответ и находился по другому уравнения, а в итоге выдаёт ответ, если вводишь x = 1.2, как при x > 1.2. Использую RAD Studio 10.2.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <conio.h>
#include <cmath>
#include <math.h>
#include <iostream>
#include <windows.h>
 
using namespace std;
int main()
{
   SetConsoleCP(1251);
   SetConsoleOutputCP(1251);
   setlocale(LC_ALL, "Russian");
   double w,a,b,c,x;
   cout << "Введите x: "; cin >> x;
   cout << "Введите a: "; cin >> a;
   cout << "Введите b: "; cin >> b;
   cout << "Введите c: "; cin >> c;
   if (x < 1.2) {
      w = a*pow(x,2)+b*x+c;
      cout << "x меньше 1,2, поэтому используем формулу w=a*x^2+b*x+c и получаем результат равный " << w << endl;
   }
   else { if (x > 1.2) {
             w = (a+b*x)/sqrt(pow(x,2)+1);
             cout << "x больше 1,2, поэтому используем формулу w=(a+b*x)/(x^2+1)^(1/2) и получаем результат равный " << w << endl;
          }
            else { if (x == 1.2) {
                  w = a/(x+sqrt(pow(x,2)+1));
                  cout << "x равен 1,2, поэтому используем формулу w=a/(x+(x^2+1)^(1/2)) и получаем результат равный " << w << endl;
                  }
            }
   }
   system("Pause");
    return 0;
}
0
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
06.11.2018, 22:13 3
1. Лишние скобки для блока Else.
2. Вещественные числа.
1
0 / 0 / 0
Регистрация: 14.12.2015
Сообщений: 15
06.11.2018, 22:20  [ТС] 4
Цитата Сообщение от SuperKir Посмотреть сообщение
1. Лишние скобки для блока Else.
2. Вещественные числа.
Скобки убрал. У меня стоит тип данных double - это ведь и есть вещественные числа или я что-то путаю. Я просто новичок в данном языке программирования и не понимаю тонкостей до конца.
0
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
07.11.2018, 00:27 5
Возможно необходимо будет сравнивать с определенной точностью
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <cmath>
#include <iostream>
 
using namespace std;
 
int main()
{
   setlocale(0, "");
   double w,a,b,c,x;
 
   cout << "Введите x: "; cin >> x;
   cout << "Введите a: "; cin >> a;
   cout << "Введите b: "; cin >> b;
   cout << "Введите c: "; cin >> c;
 
   if (x < 1.2) 
   {
        w = a * x * x + b * x + c;
        cout << "x меньше 1,2, поэтому используем формулу w=a*x^2+b*x+c и получаем результат равный " << w << endl;
   }
   else if (x > 1.2) 
   {
        w = (a + b * x) / sqrt(x * x + 1.0);
        cout << "x больше 1,2, поэтому используем формулу w=(a+b*x)/(x^2+1)^(1/2) и получаем результат равный " << w << endl;
   }
   else
   {
        w = a / (x + sqrt(x * x + 1.0));
        cout << "x равен 1,2, поэтому используем формулу w=a/(x+(x^2+1)^(1/2)) и получаем результат равный " << w << endl;
   }
    return 0;
}
0
7430 / 5022 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
07.11.2018, 00:29 6
GoldEagle, сравнение вещественных чисел происходит не так, как сравнение целых чисел
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{   
    double a, b, c, x, w, eps=1e-9;
    
    cout <<"a="; cin >> a;
    cout <<"b="; cin >> b;
    cout <<"c="; cin >> c;
    cout <<"x="; cin >> x;
    
    if (fabs(x-1.2)<eps) w = a/(x+sqrt(x*x+1.));    
    else if (x<1.2) w = a*x*x+b*x+c;      
    else w = (a+b*x)/sqrt(x*x+1.);
        
    cout <<"w="<<w<<endl;    
              
system("pause");
return 0;
}
1
SuperKir
07.11.2018, 00:42
  #7

Не по теме:

Цитата Сообщение от Yetty Посмотреть сообщение
GoldEagle, сравнение вещественных чисел происходит не так, как сравнение целых чисел
Да ладно?! Это Вы говорите? Точно??? Кто-то утверждал, что число, введенное с клавиатуры будет априори тем, что ввели :D

Цитата Сообщение от SuperKir Посмотреть сообщение
4. Если Вы уж начали делать массив действительных чисел, то Вам не стоило бы выпускать из виду тот факт, что сравнивать действительные числа без определенной точности - нельзя. То что Вы их там "целыми" скастовали не значит, что можно забивать на это.
Цитата Сообщение от Yetty Посмотреть сообщение
4. прежде чем сообщать то в чём не разбираетесь, проверьте (например с помощью setprecision()) в каком виде хранятся числа типа double полученные не вычислениями, а введённые с клавиатуры или полученные через random и подумайте что Вы говорите.

0
Yetty
07.11.2018, 00:54
  #8

Не по теме:

SuperKir, Вам скучно ? Вы опять решили поговорить ? Вы опять путаете ввод чисел double без точки и с точкой. В теме с задачей откуда Вы взяли цитаты скорее всего ввод без точки. Неужели Вы не в состоянии посмотреть что и как вводится ???

0
SuperKir
07.11.2018, 01:05
  #9

Не по теме:

Цитата Сообщение от Yetty Посмотреть сообщение
В теме с задачей откуда Вы взяли цитаты скорее всего ввод без точки
Цитата Сообщение от Yetty Посмотреть сообщение
проверьте (например с помощью setprecision()) в каком виде хранятся числа типа double полученные не вычислениями, а введённые с клавиатуры
Что, простите? А что, числа double с клавиатуры только без точки вводятся? Ужас.

0
Yetty
07.11.2018, 01:10
  #10

Не по теме:

SuperKir, числа double естественно вводятся как с точкой, так и без. тогда речь была о конкретной задаче, где ввод был без точки, а Вы начали морозить насчёт сравнения с точностью. неужели Вы до сих пор не поняли, о чём тогда говорилось ?

0
SuperKir
07.11.2018, 01:17
  #11

Не по теме:

Yetty, Конкретная задача, ввод без точки... смешно уже.

Цитата Сообщение от IgorMrk Посмотреть сообщение
Найти наибольший элемент из элементов одномерного массива, имеющих четный номер. Определить, является ли он единственным.
Где тут "ввод без точки"? Где здесь "конкретная задача" на "ввод без точки"? О чем же здесь говорится?

P.s. я уже посмеялся над неудачной попыткой слиться и выставить всех дураками, можете не продолжать ;)

Цитата Сообщение от Yetty Посмотреть сообщение
Вы ввели с клавы число 4.3. И считаете что оно будет отличаться от 4.300000000000000000000000000000000000000000000 ?

0
Yetty
07.11.2018, 01:27
  #12

Не по теме:

SuperKir, я нашёл тему откуда Вы берёте цитаты. читаем ещё раз:

Введите число типа double c клавы или так:
double*a = new double[n];
for (int i = 0; i < n; i++)
{
a[i]=rand()%19 - 9;
cout <<setprecision(100)<<fixed<<a[i]<<endl;
}
OUTPUT:
-3.000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000
4.000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000
-9.000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000
-8.000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000
-1.000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000
про какую точность при сравнении Вы говорите ???

0
SuperKir
07.11.2018, 01:35
  #13

Не по теме:

Yetty, Вы сами процитировали то, что делает Вас не правым. Читайте свой же коммент перед объявлением массива. "Введите число с клавы или так". А про Ваш глупый вариант кастовки int в double я больше даже разговаривать не хочу.

Я привел Вашу же цитату про ввод с клавы...

Цитата Сообщение от Yetty Посмотреть сообщение
Вы ввели с клавы число 4.3. И считаете что оно будет отличаться от 4.300000000000000000000000000000000000000000000 ?
Где мне тут читать по-другому? Что же Вы имели здесь ввиду-то? Аж интересно стало.

Цитата Сообщение от Yetty Посмотреть сообщение
я нашёл тему откуда Вы берёте цитаты. читаем ещё раз:
Ума много не надо на стрелочку нажать

0
7430 / 5022 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
07.11.2018, 01:48 14

Не по теме:

насчёт числа 4.3. никакого отношение это число к коду не имеет. в коде числа БЕЗ ТОЧКИ которые Вы рекомендовали сравнивать с точностью. причём там не утверждение насчёт 4.3, а вопрос к Вам.



Добавлено через 8 минут

Не по теме:

насчёт с ввода клавы. вводим числа -3 4 -9 -8 -1. что Вам опять непонятно ? у меня уже нет желания что либо Вам объяснять - судя по всему это бесполезно.

0
SuperKir
07.11.2018, 01:49
  #15

Не по теме:

Yetty, короче, всё с Вами ясно. Как говорится, "слив засчитан". На этой ноте покину Вашу противоречивую персону. Спокойной ночи.

0
Yetty
07.11.2018, 02:04
  #16

Не по теме:

SuperKir, а Вам неудачное предложение сравнивать с точностью то что сравнивать с точностью не нужно не засчитано. о конкретной задаче - не так выразился - о конкретном коде. Надеюсь частица инфы в Вашем сознании осталась и больше Вы с рацпредложениями о проверках с точностью выходить не будете.

0
Модератор
Эксперт С++
13324 / 10628 / 6350
Регистрация: 18.12.2011
Сообщений: 28,381
07.11.2018, 07:19 17
Лучший ответ Сообщение было отмечено GoldEagle как решение

Решение

Цитата Сообщение от GoldEagle Посмотреть сообщение
else { if (x == 1.2) {
здесь if лишнее, т.к. все альтернативы Вы уже перебрали.
Однако, это не гарантирует нужного результата, т.к. числа с плавающей запятой в двоичном представлении не совсем точно соответствуют десятичному представлению.
Попробуйте так
C++
1
2
3
4
5
6
7
8
9
10
11
const double eps=1e-9;
if(x<1.2-eps)
{
    w = a*x*x+b*x+c;
}else if(x>1.2+eps)
{
    w = (a+b*x)/sqrt(x*x+1.0);
}else
{
   w = a/(x+sqrt(x*x+1.0));
}
1
0 / 0 / 0
Регистрация: 14.12.2015
Сообщений: 15
07.11.2018, 18:06  [ТС] 18
Всем большое спасибо, задача получилась!
0
07.11.2018, 18:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2018, 18:06
Помогаю со студенческими работами здесь

Вычислить значение интервально заданной функции
\prod_{i=1}^{5}(3i+(x+i*i)\sum \frac{n*n*n}{n*n+x}

Вычислить значение интервально заданной функции
Нужно было написать программу для решения системы уравнений, есть тут что-то правильное? Что надо...

Вычислить значение интервально заданной функции
Не понимаю, что с этим примером нужно сделать, помогите пожалуйста. По теме: Ветвление.

Вычислить значение интервально заданной функции
Нужно написать программу.Прошу срочной помощи)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru