Форум программистов, компьютерный форум CyberForum.ru

Вычислить значение нетривиальной функции F - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
three6mafia
0 / 0 / 0
Регистрация: 30.09.2009
Сообщений: 8
30.09.2009, 21:56     Вычислить значение нетривиальной функции F #1
Задание:
Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

[IMG]http://s47.***********/i117/0909/90/95c979b6a30a.jpg[/IMG]
где а, b, с — действительные числа.
Функция F должна принимать действительное значение, если выражение
Ац И (Вц ИЛИ Сц) не равно нулю, и целое значение в противном случае.
Через Ац, Вц и Сц обозначены целые части значений а, b, с, операции И и ИЛИ — поразрядные. Значения а, b, c, Хнач., Хкон., dX ввести с клавиатуры.

Оч срочно
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
30.09.2009, 22:06     Вычислить значение нетривиальной функции F #2
Помогите с решением задачи в Microsoft Visual C++ 2008
помоги мне помочь тебе решить эту задачу.
three6mafia
0 / 0 / 0
Регистрация: 30.09.2009
Сообщений: 8
30.09.2009, 22:07  [ТС]     Вычислить значение нетривиальной функции F #3
Цитата Сообщение от Rififi Посмотреть сообщение
Помогите с решением задачи в Microsoft Visual C++ 2008
помоги мне помочь тебе решить эту задачу.
в смысле?
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
30.09.2009, 22:10     Вычислить значение нетривиальной функции F #4
в том смысле, что мне вроде и хочется решить, но лень (: нужна помощь, как перебороть свою лень.
three6mafia
0 / 0 / 0
Регистрация: 30.09.2009
Сообщений: 8
30.09.2009, 22:12  [ТС]     Вычислить значение нетривиальной функции F #5
Цитата Сообщение от Rififi Посмотреть сообщение
в том смысле, что мне вроде и хочется решить, но лень (: нужна помощь, как перебороть свою лень.
Хм....например? Что в твоем понимании помощь для преодоления лени?
Search..
30.09.2009, 22:16
  #6

Не по теме:

Возможно Рифифи имеет ввиду твою лень, three6mafia. То есть, ты попросил тебе помочь, а на самом деле тут надо не помогать а все за тебя делать...

three6mafia
0 / 0 / 0
Регистрация: 30.09.2009
Сообщений: 8
30.09.2009, 22:21  [ТС]     Вычислить значение нетривиальной функции F #7
Цитата Сообщение от Search.. Посмотреть сообщение

Не по теме:

Возможно Рифифи имеет ввиду твою лень, three6mafia. То есть, ты попросил тебе помочь, а на самом деле тут надо не помогать а все самому делать...

Если бы я её сделать мог, я бы с такими вопросами на форум не обращался, я не прошу что бы вот вы мне всё напишите, а я скопирую. Хотя бы совет дать какой и на том спасибо.
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
30.09.2009, 23:01     Вычислить значение нетривиальной функции F #8
three6mafia, есть один совет.Открыть книжку по Си и почитать про 1) Циклы 2) функции 3) ввод-вывод. Все это займет не больше часа.
three6mafia
0 / 0 / 0
Регистрация: 30.09.2009
Сообщений: 8
30.09.2009, 23:04  [ТС]     Вычислить значение нетривиальной функции F #9
Цитата Сообщение от XuTPbIu_MuHTAu Посмотреть сообщение
three6mafia, есть один совет.Открыть книжку по Си и почитать про 1) Циклы 2) функции 3) ввод-вывод. Все это займет не больше часа.

Да читал уже( вот что получилось за весь день стараний:
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
40
41
42
43
44
45
46
47
48
49
#include <conio.h>
#include <iostream> 
using namespace std;
void main () 
{ 
cout << "BBeDuTe 3Ha4eHu9l nepeMeHHbIx: a b c Xstart Xend dx\n";;   
float a,b,c; 
float Xstart, Xend,dx; 
float F; 
cout<<"a= "; 
cin>>a; 
cout<<"b= "; 
cin>>b; 
cout<<"c= "; 
cin>>c; 
cout<<endl; 
cout<<"Xstart= "; 
cin>>Xstart; 
cout<<"Xend= "; 
cin>>Xend; 
cout<<"dx= "; 
cin>>dx; 
cout<<endl; 
if (Xstart<=Xend&&dx!=0) 
{ 
for(float x=Xstart; x<=Xstart; x+=dx) 
{ 
if (a<0&&c!=0) 
{ 
F=a*(x*x)+b*x+c; 
cout<<"x= "<<x<<"F= "<<F<<endl; 
} 
else 
{ 
if (a>0&&c==0) 
{ 
F=-a/(x-c); 
cout<<"x= "<<x<<"F= "<<F<<endl; 
} 
else 
{ 
F=a*(x+c); 
cout<<"x= "<<x<<"F= "<<F<<endl; 
} 
} 
} 
getch (); 
} 
}
Подскажите что не так?
M128K145
Эксперт C++
 Аватар для M128K145
8276 / 3495 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
30.09.2009, 23:05     Вычислить значение нетривиальной функции F #10
three6mafia, посмотри, здесь есть решение, несколько раз обсуждалось. я не захотел кидать много ссылок, поэтому напишу вот эту ссылку в которой написаны все темы по этому вопросу
Что не так?
Во первых выброси гетч и conio.h и вместо них используй
C++
1
2
3
std::cin.get();
//или
system("pause");
Во вторых скажи, что тебя смущает в твоем коде?
three6mafia
0 / 0 / 0
Регистрация: 30.09.2009
Сообщений: 8
30.09.2009, 23:09  [ТС]     Вычислить значение нетривиальной функции F #11
Цитата Сообщение от M128K145 Посмотреть сообщение
three6mafia, посмотри, здесь есть решение, несколько раз обсуждалось. я не захотел кидать много ссылок, поэтому напишу вот эту ссылку в которой написаны все темы по этому вопросу
Что не так?
Во первых выброси гетч и conio.h и вместо них используй
C++
1
2
3
std::cin.get();
//или
system("pause");
Во вторых скажи, что тебя смущает в твоем коде?
Его правильность меня смущает ))
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
30.09.2009, 23:11     Вычислить значение нетривиальной функции F #12
C++
1
for(float x=Xstart; x<=Xstart; x+=dx)
присмотрись
three6mafia
0 / 0 / 0
Регистрация: 30.09.2009
Сообщений: 8
30.09.2009, 23:18  [ТС]     Вычислить значение нетривиальной функции F #13
Цитата Сообщение от XuTPbIu_MuHTAu Посмотреть сообщение
C++
1
for(float x=Xstart; x<=Xstart; x+=dx)
присмотрись
Эммм..ну присмотрелся, и...ничего не увидел(
M128K145
Эксперт C++
 Аватар для M128K145
8276 / 3495 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
30.09.2009, 23:24     Вычислить значение нетривиальной функции F #14
плохо смотрел
C++
1
for(float x=Xstart; x<= Xend; x+=dx)
найди отличие и объясни в чем была твоя ошибка
three6mafia
0 / 0 / 0
Регистрация: 30.09.2009
Сообщений: 8
30.09.2009, 23:27  [ТС]     Вычислить значение нетривиальной функции F #15
Цитата Сообщение от M128K145 Посмотреть сообщение
плохо смотрел
C++
1
for(float x=Xstart; x<= Xend; x+=dx)
найди отличие и объясни в чем была твоя ошибка
Xstart вместо Xend написал(
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
01.10.2009, 00:42     Вычислить значение нетривиальной функции F #16
Не ручаюсь за точность расчётов, ибо одним глазом смотрел Доктора Хауса (да и щас, собстна, смотрю), так чта...

Вывод программы выглядит следующим образом:

[D:/temp/zzz/Release]$zzz
Введите начальные значения: a, b, c, Xнач, Xкон, dX:
-1 2 1 1 3 0.19
+1.000 +1.000
+1.190 +0.964
+1.380 +0.856
+1.570 +0.675
+1.760 +0.422
+1.950 +0.098
+2.140 -0.300
+2.330 -0.769
+2.520 -1.310
+2.710 -1.924
+2.900 -2.610

[D:/temp/zzz/Release]$zzz
Опробировано в VS 2008
Вложения
Тип файла: zip zzz.zip (76.8 Кб, 18 просмотров)
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
01.10.2009, 01:36     Вычислить значение нетривиальной функции F #17
Текст программы:

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <iostream>
#include <iomanip>
#include <locale>
#include <memory>
#include <math.h>
 
#pragma region Сравнение вещественных чисел
 
// Равенство
bool equals(double left, double right, double epsilon)
{
    return (fabs(left - right) < epsilon);
}
 
// Меньше (или равно)
bool less(double left, double right, double epsilon, bool orEqual = false)
{
    if (fabs(left - right) < epsilon)
        return (orEqual);
    
    return (left < right);
}
 
// Больше (или равно)
bool greater(double left, double right, double epsilon, bool orEqual = false)
{
    if (fabs(left - right) < epsilon)
        return (orEqual);
 
    return (left > right);
}
 
#pragma endregion
 
#pragma region Вычисление значений
 
struct Calc
{
    Calc(double a, double b, double c) :
        a_(a), b_(b), c_(c),
        ia_(static_cast<__int64>(a)), ib_(static_cast<__int64>(b)), ic_(static_cast<__int64>(c))
    {}
 
    virtual ~Calc() {}
 
    double Math(double x) const
    {
        double res = DoMath(x);
        // Дополнительная логическая проверка
        if (!(ia_ & (ib_ | ic_)))
            res = static_cast<double>(static_cast<__int64>(res));
 
        return res;
    }
 
    virtual double DoMath(double x) const = 0;
 
    const double a_, b_, c_;
    const __int64 ia_, ib_, ic_;
};
 
 
// Алгоритм N1
struct Calc_1 : public Calc
{
    Calc_1(double a, double b, double c) : Calc(a, b, c) {}
    virtual ~Calc_1() {}
 
    virtual double DoMath(double x) const { return a_ * x * x + b_ * x * c_; }
};
 
// Алгоритм N2
struct Calc_2 : public Calc
{
    Calc_2(double a, double b, double c) : Calc(a, b, c) {}
    virtual ~Calc_2() {}
 
    virtual double DoMath(double x) const { return -a_ / (x - c_); }
};
 
// Алгоритм N3
struct Calc_3 : public Calc
{
    Calc_3(double a, double b, double c) : Calc(a, b, c) {}
    virtual ~Calc_3() {}
 
    virtual double DoMath(double x) const { return a_ * (x + c_); }
};
 
#pragma endregion
 
int main()
{
    const double eps = 0.0001; // Погрешность вычислений
 
    setlocale(LC_ALL, "");
    std::cout << "Введите начальные значения: a, b, c, Xнач, Xкон, dX:" << std::endl;
        
    // Ввод данных
    double a, b, c, x_start, x_finish, dX;
    if (!(std::cin >> a >> b >> c >> x_start >> x_finish >> dX))
    {
        std::cerr << "Неправильный ввод данных" << std::endl;
        return 1;
    }
 
    // Выбор алгоритма
    std::auto_ptr<Calc> spCalc; 
    if (less(a, 0, eps) && !equals(c, 0, eps))
        spCalc.reset(new Calc_1(a, b, c));
    else if (greater(a, 0, eps) && equals(c, 0, eps))
        spCalc.reset(new Calc_2(a, b, c));
    else
        spCalc.reset(new Calc_3(a, b, c));
 
    // Расчёт
    for ( ; less(x_start, x_finish, eps, true); x_start += dX)
    {
        const double x = spCalc->Math(x_start);
        
        std::cout.precision(3);
        std::cout << std::left << std::showpoint << std::showpos << std::fixed;
 
        std::cout << std::setw(8) << x_start << std::setw(8) << x << std::endl;
    }
 
    return 0;
}
В зависимости от настроек компилятора может потребоваться включение файла stdafx.h
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2009, 09:14     Вычислить значение нетривиальной функции F
Еще ссылки по теме:

C++ Вычислить значение функции
Вычислить значение функции C++
C++ Вычислить значение функции
C++ Вычислить значение функции
Вычислить значение функции C++

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

Или воспользуйтесь поиском по форуму:
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
01.10.2009, 09:14     Вычислить значение нетривиальной функции F #18
Аналогичную задачу уже решали на форуме - где взять ответы из учебника Т.А.Павловская C/C++
Там еще было длинное обсуждение.
Это из учебника Т.А.Павловская С/C++ ?
Yandex
Объявления
01.10.2009, 09:14     Вычислить значение нетривиальной функции F
Ответ Создать тему
Опции темы

Текущее время: 15:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru