5 / 3 / 2
Регистрация: 11.02.2017
Сообщений: 32
1

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

11.03.2020, 20:46. Показов 915. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В Чём косяк?

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
36
#include<iostream>
int main()
{
typedef enum
{UNKNOWN,OTREZOK_1,OTREZOK_2,OTREZOK_3,OTREZOK_4}
TOtrezok;
TOtrezok otrezok;
float x,y;
system("chcp 1251 > nul");
cout<<"Лабораторная работа N2 вариант N11 \n";
cout<<"Выполнил студент гр. ИСТбд-12 Тагашев.И.И \n"; // модератором вставлена закрывающая кавычка
cout<<("x=");
cin>>("%f",&x);
cout<<("\n");
otrezok=UNKNOWN;
if((x>=-1.0) && (x<-0.05))
otrezok=OTREZOK_1;
else
if((x>=-0.05) && (x<1.0))
otrezok=OTREZOK_2;
else
if((x>=1.0) && (x<2.05))
otrezok=OTREZOK_3;
else
if((x>=2.05) && (x<=3.0))
otrezok=OTREZOK_4;
switch (otrezok)
{
case OTREZOK_1: y=3*cos(2*x)+4*sin(10*x); break;
case OTREZOK_2: y=exp(x); break;
case OTREZOK_3: y=log(x)+pow(x,exp(x))+1.7; break;
case OTREZOK_4: 13.8+5*pow((x-3),3); break;
default:printf("net.\n");
}
cout<<(" znachenie= %5.2f argument na otrezke No%d \n",y,otrezok);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2020, 20:46
Ответы с готовыми решениями:

Вычисление значения интервально заданной функции
Вычислить систему уравнений. Код программы есть, но верный результат в итоге показывает только с...

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

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

Вычисление функции с заданной точностью с использованием разложения в ряд
Цель работы: освоение средств языка C++ для описания итерационных циклов и закрепление навыков...

15
управление сложностью
1687 / 1300 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
11.03.2020, 21:09 2
Из разметки видно, что пропустили закрывающую кавычку
0
7428 / 5022 / 2891
Регистрация: 18.12.2017
Сообщений: 15,694
11.03.2020, 21:10 3
Enmaboya, неправильно записан ввод-вывод, вещественные числа так не сравниваются, неправильно вычисляете третью степень и вообще много лишних строк. напишите условие задачи и сбросьте скрин формул.
0
Вездепух
Эксперт CЭксперт С++
11087 / 6054 / 1652
Регистрация: 18.10.2014
Сообщений: 15,197
11.03.2020, 21:12 4
Цитата Сообщение от Enmaboya Посмотреть сообщение
В Чём косяк?
Какой косяк? О чем ваш вопрос?

Цитата Сообщение от Yetty Посмотреть сообщение
вещественные числа так не сравниваются,
С чего бы это вдруг? Все сравнения в коде - относительные, а не на равенство.
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
11.03.2020, 21:15 5
Enmaboya, вроде так, на логические ошибки не проверял
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
36
37
38
39
#include<iostream>
 
int main()
{
    enum class TOtrezok // лучше через enum class
    {
        UNKNOWN, OTREZOK_1, OTREZOK_2, OTREZOK_3, OTREZOK_4
    };
    TOtrezok otrezok = TOtrezok::UNKNOWN;
    float x, y = 0.f; // переменные нужно инициализировать
    system("chcp 1251 > nul");
    std::cout << "Лабораторная работа N2 вариант N11 \n";
    std::cout << "Выполнил студент гр. ИСТбд-12 Тагашев.И.И \n"; // забыта точка с запятой
    std::cout << "x="; // не обязательно в скобки брать
    std::cin >> x; // само поймёт какой тип нужен, оно перегружено
    std::cout << "\n"; // не обязательно в скобки брать
    otrezok = TOtrezok::UNKNOWN;
    if ((x >= -1.0) && (x < -0.05))
        otrezok = TOtrezok::OTREZOK_1;
    else
        if ((x >= -0.05) && (x < 1.0))
            otrezok = TOtrezok::OTREZOK_2;
        else
            if ((x >= 1.0) && (x < 2.05))
                otrezok = TOtrezok::OTREZOK_3;
            else
                if ((x >= 2.05) && (x <= 3.0))
                    otrezok = TOtrezok::OTREZOK_4;
    switch (otrezok)
    {
    case TOtrezok::OTREZOK_1: y = 3 * cos(2 * x) + 4 * sin(10 * x); break;
    case TOtrezok::OTREZOK_2: y = exp(x); break;
    case TOtrezok::OTREZOK_3: y = log(x) + pow(x, exp(x)) + 1.7; break;
    case TOtrezok::OTREZOK_4: 13.8 + (5 * pow((x - 3), 3)); break;
    default: std::cout << "net.\n"; // не print, а std::cout 
    }
    std::cout.precision(2);
    std::cout << " znachenie= " << y << " argument na otrezke No " << int(otrezok) << std::endl;
}
0
7428 / 5022 / 2891
Регистрация: 18.12.2017
Сообщений: 15,694
11.03.2020, 21:24 6
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
С чего бы это вдруг?
при неравенстве, как и при равенстве сравнение вещественных чисел осуществляется с помощью малого числа.
0
Вездепух
Эксперт CЭксперт С++
11087 / 6054 / 1652
Регистрация: 18.10.2014
Сообщений: 15,197
11.03.2020, 21:46 7
Цитата Сообщение от Yetty Посмотреть сообщение
при неравенстве, как и при равенстве сравнение вещественных чисел осуществляется с помощью малого числа.
Нет, конечно. Ни в коем случае. Есть ряд специальных ситуаций, когда относительные сравнения вещественных чисел приходится делать с допуском, но это именно специальные ситуации. В обычных случаях никакой необходимости вводить допуск в относительные сравнения нет. Зачем? Это только создаст ненужные проблемы.
0
7428 / 5022 / 2891
Регистрация: 18.12.2017
Сообщений: 15,694
11.03.2020, 22:29 8
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В обычных случаях никакой необходимости вводить допуск в относительные сравнения нет. Зачем?
это обычная ситуация ?
C++
1
2
3
4
5
6
    float k = 0.1;
    if (k == 0.1) cout << "TRUE\n";
    else cout << "FALSE\n";
 
    if (k > 0.1) cout << "TRUE\n";
    else cout << "FALSE\n";
0
Вездепух
Эксперт CЭксперт С++
11087 / 6054 / 1652
Регистрация: 18.10.2014
Сообщений: 15,197
11.03.2020, 22:39 9
Цитата Сообщение от Yetty Посмотреть сообщение
это обычная ситуация ?
Ваша ситуация - именно сравнение на равенство.

А "обычность" или "не обычность" ситуации зависит от того, что вам нужно получить в результате. Если задача состоит в том, чтобы разбить диапазон на поддиапазоны и определить принадлежность числа поддиапазону, то введение допуска в относительные сравнения - бессмысленая профанация.

Чего вы собрались достичь введением допуска в сравнения в задаче ТС? Просто покажите нам, как "правильно".
0
7428 / 5022 / 2891
Регистрация: 18.12.2017
Сообщений: 15,694
11.03.2020, 22:49 10
TheCalligrapher, Вы не видите, что без малого числа результат TRUE ?
Цитата Сообщение от Yetty Посмотреть сообщение
float k = 0.1;
if (k > 0.1) cout << "TRUE\n";
else cout << "FALSE\n";
если видите, что Вам нужно ещё объяснять ? сравнивать нужно с малым числом
0
Неэпический
17848 / 10616 / 2049
Регистрация: 27.09.2012
Сообщений: 26,686
Записей в блоге: 1
11.03.2020, 22:52 11
Цитата Сообщение от Yetty Посмотреть сообщение
Вы не видите, что без малого числа результат TRUE ?
А вы не видите, что сравнивается float с double?
C++
1
2
if (k > 0.1f) cout << "TRUE\n";
else cout << "FALSE\n";
-> FALSE
0
7428 / 5022 / 2891
Регистрация: 18.12.2017
Сообщений: 15,694
11.03.2020, 23:01 12
Croessmah, а Вы не заметили что в коде ТС именно такая ситуация:
Цитата Сообщение от Enmaboya Посмотреть сообщение
float x,y;
а сравнение с double. если идёт сравнение именно чисел одного типа, здесь уже зависит от того, как x получен. при вводе x с клавиатуры малое число не нужно, если x получен в результате вычислений - малое число нужно.
0
Вездепух
Эксперт CЭксперт С++
11087 / 6054 / 1652
Регистрация: 18.10.2014
Сообщений: 15,197
11.03.2020, 23:19 13
Цитата Сообщение от Yetty Посмотреть сообщение
TheCalligrapher, Вы не видите, что без малого числа результат TRUE ?
если видите, что Вам нужно ещё объяснять ?
Во-первых, не TRUE, a true.

Во-вторых, он и должен быть таким. Таковы реалии плавающей арифметики. А если вы добавите свое "малое число", то у вас для 1.0000001 вдруг станет результат false. Какое бы "малое число" вы ни брали, всегда будут существовать значения, для которых в относительных сравнениях будет получаться "неправильный" результат. Ничего осмысленного своим "малым числом" вы не достигните, кроме получения ярко выраженного, бросающегося в глаза "гамнокода".

Цитата Сообщение от Yetty Посмотреть сообщение
сравнивать нужно с малым числом
Если вы не понимаете таких вещей сходу сейчас, то придется идти по пути "вы просто запомните, а поймете потом". В робкой надежде на то, что все таки поймете потом...

А пока что придется в приказном порядке. Даю под запись, для обязательного вызубривания наизусть, и без лишней болтовни: Допуск при сравнении плавающих чисел допустим только в сравнениях на равенство. Никакого допуска в относительных сравнениях плавающих чисел ни в коем случае быть не должно.
0
Croessmah
11.03.2020, 23:22
  #14

Не по теме:

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Во-первых, не TRUE, a true.
Видимо, имеется ввиду выводимый текст.

0
Модератор
Эксперт С++
13411 / 10521 / 6285
Регистрация: 18.12.2011
Сообщений: 28,095
12.03.2020, 11:15 15
Господа. Попробую вмешаться и объяснить причину разногласий
Рассмотрим пример вычисления интервально заданной функции
C++
1
2
3
4
5
6
if(x<=a)
// интервал от - бесконечности до a включая a
else if(x<=b) // b>a
// интервал от a (не включая a) до b включая b
else
// интервал от b (не включая b) до бесконечности
Естественно, никакого сравнения с заданной точностью тут не надо.
Если где-то будет точное равенство, то вычисления попадут в соответствующий интервал, а нет - значит верно соответствующее неравенство.
0
7428 / 5022 / 2891
Регистрация: 18.12.2017
Сообщений: 15,694
12.03.2020, 11:48 16
Цитата Сообщение от zss Посмотреть сообщение
Естественно, никакого сравнения с заданной точностью тут не надо
надо если x получен в результате вычислений - это что касается Вашего примера
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.03.2020, 11:48
Помогаю со студенческими работами здесь

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

Вычислить значение интервально заданной функции
Вычислить значение функции при некотором значении аргумента x:

Вычислить значение интервально заданной функции
Для данного вещественного x найти значение следующей функции f, принимающей вещественные значения:...

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


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

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

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