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

Постройте таблицу значений функции y=f(x) для х принадлежит [a, b] с шагом h - C++

Восстановить пароль Регистрация
 
b0nny
3 / 1 / 0
Регистрация: 11.11.2013
Сообщений: 338
29.03.2014, 15:47     Постройте таблицу значений функции y=f(x) для х принадлежит [a, b] с шагом h #1
Постройте таблицу значений функции y=f(x) для хϵ[a, b] с шагом h.

Помогите с кодом.
Изображения
 
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2014, 15:47     Постройте таблицу значений функции y=f(x) для х принадлежит [a, b] с шагом h
Посмотрите здесь:

C++ Постройте таблицу значений функции y=f(x) для xϵ[a,b] с шагом h.
C++ Постройте таблицу значений функции y=f(x)
C++ Постройте таблицу значений функции y=f(x) для хϵ[a,b] с шагом h
C++ Построить таблицу значений функции y=f(x) для x из [a,b] с шагом h
Постройте таблицу значений функции y=f(x) для xε[a,b] с шагом h. Если в некоторой точке х функция не определена, то выведите на экран сообщение об это C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
b0nny
3 / 1 / 0
Регистрация: 11.11.2013
Сообщений: 338
29.03.2014, 16:13  [ТС]     Постройте таблицу значений функции y=f(x) для х принадлежит [a, b] с шагом h #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
36
37
38
39
40
41
#include<iostream>
#include<math.h>
 
using namespace std;
 
double function(double x) 
{
    if(fabs(x)<=0.1)
    {
        return pow(x,1)-0.1;
  }
    else
    {
        if(0.1<fabs(x)<=0.2)
        {
            return 0.2*x-0.1;
    }
    else
        {
            if(fabs(x)>0.2)
            {
      return pow(x,1)+0.1;
            }
      }
  }  
}
 
int main()
{
    double a, b, h;
    cout << "Введите a:"; cin >> a;
    cout << "Введите b:"; cin >> b;
    cout << "Введите h:"; cin >> h;
 
    for (double x = a; x <= b; x += h)
    {
        cout << "x=" << x << "\n" << "y=" << function(x) << '\n';
    }
    system("pause");
    return 0;
}
Так подойдёт?
BlackSpace
135 / 128 / 50
Регистрация: 15.03.2014
Сообщений: 275
29.03.2014, 20:23     Постройте таблицу значений функции y=f(x) для х принадлежит [a, b] с шагом h #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
b0nny, неверно использована функция pow() для Ваших формул, и желательно в функциях, которые возвращают не void предусматривать return в конце функции, который независим от каких-либо условий

Не рекомендую сравнивать таким образом два вещественных числа, так как может произойти вычисление лишнего шага или наоборот последний шаг не будет вычислен.
C++
1
for (double x = a; x <= b; x += h)
так как Ваша функция написана неверно, то упростив Ваш код, можно показать пример, ка последний шаг не будет вычислен.

Плохой пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using namespace std;
 
int main() {
    double a, b, h;
    cout << "Введите a:";
    cin >> a;
    cout << "Введите b:";
    cin >> b;
    cout << "Введите h:";
    cin >> h;
 
    for ( double x = a; x <= b; x += h ) {
        cout << "x=" << x << endl;
    }
    return 0;
}
Вот что выводится у меня на консоли
1)
Кликните здесь для просмотра всего текста
Введите a:0.001
Введите b:0.002
Введите h:0.0002
x=0.001
x=0.0012
x=0.0014
x=0.0016
x=0.0018


2)
Кликните здесь для просмотра всего текста
Введите a:2
Введите b:3
Введите h:0.5
x=2
x=2.5
x=3


3)
Кликните здесь для просмотра всего текста
Введите a:-5.5
Введите b:-4.5
Введите h:0.1
x=-5.5
x=-5.4
x=-5.3
x=-5.2
x=-5.1
x=-5
x=-4.9
x=-4.8
x=-4.7
x=-4.6
x=-4.5


В пункте 1 видно, что не хватает вывода последнего шага.

Вот мой вариант.
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
#include <iostream>
#include <iomanip>
#include <cmath>
 
using namespace std;
 
double calc( double x ) {
    double abs = fabs( x );
    if ( abs <= 0.1 )
        return x * x * x - 0.1;
    else if ( abs > 0.1 && abs <= 0.2 )
        return 0.2 * x - 0.1;
 
    return x * x * x + 0.1;
}
 
int main() {
    double a, b, h;
    cout << "Введите границы интервала a, b ";
    cin >> a >> b;
 
    if ( a >= b ) {
        cerr << "a должно быть меньше b!" << endl;
        return 1;
    }
 
    cout << "Введите шаг вычислений h ";
    cin >> h;
 
    int count = fabs( floor( ( b - a ) / h ) ) + 1;
    cout << "Количество шагов = " << count << endl;
 
    cout << setprecision( 10 );
    cout.setf ( ios::fixed );
    for ( int i = 0; i < count; ++i ) {
        double curr = a + i * h;
        cout  << "x = " << curr << "\tf( x ) = " << calc( curr ) << endl;
    }
 
    return 0;
}
b0nny
3 / 1 / 0
Регистрация: 11.11.2013
Сообщений: 338
30.03.2014, 12:12  [ТС]     Постройте таблицу значений функции y=f(x) для х принадлежит [a, b] с шагом h #4
А как убрать лишние цифры после запятой? В printf знаю, а тут нет...

Есть ещё для этого задания дополнительное. Как с ним быть?
Перегрузите метод f из предыдущего раздела так, чтобы его сигнатура (заголовок) соответствовала виду static void f (double x, out double y). Продемонстрируйте работу перегруженных методов.
IrineK
Заблокирован
30.03.2014, 13:41     Постройте таблицу значений функции y=f(x) для х принадлежит [a, b] с шагом h #5
Цитата Сообщение от b0nny Посмотреть сообщение
А как убрать лишние цифры после запятой?
Аналог printf ("%.3lf", x)

C++
1
2
3
#include <iomanip> 
...
cout << fixed << setprecision (3) << x;
BlackSpace
135 / 128 / 50
Регистрация: 15.03.2014
Сообщений: 275
30.03.2014, 18:02     Постройте таблицу значений функции y=f(x) для х принадлежит [a, b] с шагом h #6
Вот вариант с перегрузкой.
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
#include <iostream>
#include <iomanip>
#include <cmath>
 
using namespace std;
 
// первая функция
static double f( double x );
// вторая функция
static void f( double x, double& y );
 
int main() {
    double a, b, h;
    cout << "Введите границы интервала a, b ";
    cin >> a >> b;
 
    if ( a >= b ) {
        cerr << "a должно быть меньше b!" << endl;
        return 1;
    }
 
    cout << "Введите шаг вычислений h ";
    cin >> h;
 
    int count = fabs( floor( ( b - a ) / h ) ) + 1;
 
    if ( count == 1 ) {
        cerr << "Шаг вычислений должен быть менее или равен " << b - a << endl;
        return 1;
    }
    cout << "Количество шагов = " << count << endl;
 
    cout << setprecision( 10 );
    cout.setf( ios::fixed );
    for ( int i = 0; i < count; ++i ) {
        double curr = a + i * h;
        if ( i % 2 ) {
            double y = 0;
            f( curr, y );
            cout << "x = " << curr << "\tf( x ) = " << y << "\t вторая функция " << endl;
        } else
            cout << "x = " << curr << "\tf( x ) = " << f( curr ) << "\t первая функция " << endl;
    }
 
    return 0;
}
 
double f( double x ) {
    double abs = fabs( x );
    if ( abs <= 0.1 )
        return x * x * x - 0.1;
    else if ( abs > 0.1 && abs <= 0.2 )
        return 0.2 * x - 0.1;
 
    return x * x * x + 0.1;
}
 
void f( double x, double& y ) {
    double abs = fabs( x );
    if ( abs <= 0.1 )
        y = x * x * x - 0.1;
    else if ( abs > 0.1 && abs <= 0.2 )
        y = 0.2 * x - 0.1;
    else
        y = x * x * x + 0.1;
}
Ну а про setprecision Вам уже подсказали.
Yandex
Объявления
30.03.2014, 18:02     Постройте таблицу значений функции y=f(x) для х принадлежит [a, b] с шагом h
Ответ Создать тему
Опции темы

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