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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.96
dyap
2 / 2 / 0
Регистрация: 20.09.2010
Сообщений: 58
#1

Программа для вычисления значения функции. - C++

27.09.2010, 20:37. Просмотров 3614. Ответов 9
Метки нет (Все метки)

Вычислить значения функций (см.рис.) при заданном m, если х изменяется от a до b с шагом h. Результаты получить в виде таблицы.
0
Миниатюры
Программа для вычисления значения функции.  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2010, 20:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа для вычисления значения функции. (C++):

программа для вычисления значения функции y - C++
для заданного значения x у= если x<-3 то y= √1 - x² если 1,5<x-3, то y= в числителе 1

Программа для вычисления значения функции С++ - C++
Написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика. Параметр R задается в...

Составить блок-схему, алгоритм вычисления и программу для вычисления значения кусочно заданной функции - C++
помогите пожалуйста =) заранее благодарен =) П.5.19.Правил Запрещено создавать темы в виде ссылок на задания или коды программ,...

Программа вычисления максимального значения функции на отрезке - C++
//Надо написать Программу для вычисления максимального значения функции y=1/x*x+a*x+a*a на отрезке (для случая а>1) (На турбо си) Все...

Составить программу вычисления значения функции для значения аргумента x, вводимого с клавиатуры - C++
Формула f(x) = ln 3 ( x 2 +1 ) + arctg 2 ( x 2 + 1 ) Помогите, пожалуйста

Программа для вычисления значения - C++
Здравствуйте, помогите решить задачу. Напишите программу, которая вычисляет значение y = 1+x+x^2+x^3+...x^n при любом x. Вычисления...

9
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
28.09.2010, 07:15 #2
dyap, судя по предыдущим сообщениям Вы умеете немного программировать на C/C++. Так в чем проблема то? Ждете хороших людей, которые за Вас все напишут? Неужели на всю жизнь хотите остаться, мягко говоря, "начинающим" в программировании?
0
D@rkD@iver
111 / 111 / 3
Регистрация: 01.10.2008
Сообщений: 876
28.09.2010, 08:29 #3
да леняться люди, даже не пытаются сделать
с такими настроениями вам надо за задачи деньги платить
0
dyap
2 / 2 / 0
Регистрация: 20.09.2010
Сообщений: 58
30.09.2010, 19:40  [ТС] #4
Цитата Сообщение от Евгений М. Посмотреть сообщение
dyap, судя по предыдущим сообщениям Вы умеете немного программировать на C/C++. Так в чем проблема то? Ждете хороших людей, которые за Вас все напишут? Неужели на всю жизнь хотите остаться, мягко говоря, "начинающим" в программировании?
Да дело в том, что я в школе программирование вообще не изучал (так получилось, что пропустил весь курс паскаля, около месяца), но с математикой все гуд. Пошел в универ на математика-программиста и вот учусь уже месяц и понимаю, что мне совсем не нравится программировать Неинтересно во всем этом разбираться, не получаю удовольствия от написания программ...Может нужно въехать, а может это просто не мое?!!...
Собственно поэтому и прошу помочь, потому что сам я только самые простые программы научился писать.
Ну нет, так нет. Может кто-нибудь подскажет хотя бы что именно нужно почитать, чтобы решить эту задачу, тоесть какие темы?
0
dyap
2 / 2 / 0
Регистрация: 20.09.2010
Сообщений: 58
03.10.2010, 22:51  [ТС] #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
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
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
 
double zn ( double x, double n ) 
    {
        double r = 1, q = 1, s;
        while ( r <= n ) 
        {
            q = q*x*x;
            r ++;
        }
        s = q / ( 2*n+2 );
        return s;
    }
void main ()
{
    setlocale ( LC_ALL,".1251" );
    double x,m,t,u,i,k,a,b,h,sum,j;
 
    printf ( "Введите значение a \n             " );
    scanf ( "%lf",&a );
 
    printf ( "Введите значение b \n             " );
    scanf ( "%lf",&b );
 
    printf ( "Введите значение шага (h) \n             " );
    scanf ( "%lf",&h );
 
    printf ( "Введите значение m\n             " );
    scanf (" %lf",&u );
 
    if ( h == 0 )//Сравниваем H с нулём
    {
        printf ( "\n\n\n Ошибка ввода !  шаг (H) не равен нулю      \n\n\n" );
        goto str;//переходим в конец програмы
    }
    if ( h < 0 )//Сравниваем H с нулём
    {
        printf ( "\n\n\n Ошибка ввода !  шаг (H) только положительный   \n\n\n" );
        goto str;//переходим в конец програмы
    }
        //составление шапки таблицы
    printf ( "  ----------------------------------------------------\n" );
    printf ( "  | Значение переменной X |        Сумма             |\n" );  
    printf ( "  ----------------------------------------------------\n" );
    
    k = 1;
    if ( a <= b )
    {
    
        for ( i = a; i <= b; i += h )//цикл прохождения Х от A до B с шагом H
        {   
            j = 0;
            sum = 0;
            for ( x = 1; x <= u; x ++ )//цикл прохождения переменной M от 1 до введеного числа М,т.е. нахождение колличества членов в сумме
            {
                k = i;
                k = k*x;
                m =1/tan (k);//вызываем функцию ctng и присваеваем её значение переменой M
                t = zn (i,x);//вызываем функцию zn и присваеваем её значение переменой t
                sum = sum + m*t;//нахождение суммы
                j = j + t/tan(k);
            }
        //вывод значений Х и суммы в таблице
        
        printf ( "  |%16.4lf       |%25.4lf |\n",i,sum,j );
        printf ( "  -----------------------------------------------------\n" );
        }
    }
        
    else if ( a > b ) 
    {
        for ( i = a; i >= b; i -= h )//цикл прохождения Х от A до B с шагом H
        {   
            j = 0;
            sum = 0;
            for ( x = 1; x <= u; x ++ )//цикл прохождения переменной M от 1 до введеного числа М,т.е. нахождение колличества членов в сумме
            {
                k = i;
                k = k*x;
                m = 1/tan (k);//вызываем функцию ctng и присваеваем её значение переменой M
                t = zn (i,x);//вызываем функцию zn и присваеваем её значение переменой t
                sum = sum + m*t;
                j = j + t/tan(k);
            }
        //вывод значений Х и суммы в таблице
        
        printf ( "  |%16.4lf       |%25.4lf|%25.4lf |\n" );
        printf ( "  --------------------------------------------------\n" );
        }
    }
str:;
}
Собственно написал программу. Подскажите, может какие-нибудь существенные минусы есть, тоесть к чему можно придраться? А то у меня последний шанс ее сдать, если преподу что-то не понравится, не засчитает лабу
0
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
04.10.2010, 05:40 #6
Цитата Сообщение от dyap Посмотреть сообщение
Собственно написал программу.
Уже хорошо. Молодец.

- Оператор goto Ваш препод думаю не примет (подробнее здесь). Чтобы завершить программу можно использовать функцию exit(0); Для нее нужно добавить stdlib.h (т.е. #include <stdlib.h>)

- На 62 строке Вы вызываете функцию zn(). Первый параметр это n из первой формулы. Второй параметр - переменная x. У самой функции первый параметр - x, второй - n (т.е. наоборот). Поправьте вызов этой функции.

- Для использования setlocal Вы используете заголовочный файл iostream. Возможно когда Ваш препод увидит, что Ваша программа использует и stdio.h, и iostream, то у него появится реакция "Чозана...?". Используйте заголовочный файл locale.h, чтобы использовать setlocale.

- Не знаю какой у Вас в универе компилятор, но у меня GCC 4.5.0 отказывается компилировать из-за того, что функция возвращает тип void. Исправьте заголовок на int main() при необходимости добавьте return 0; в конце этой функции. Кстати, вместо exit(0) в данном случае можно использовать return 0;

- Как я понял, отличие между "телом" условия if ( a <= b ) и ( a > b ) else if ( a > b ) это то что в первом шаг складывается, во втором - вычитается (если забить на то, что во втром у printf-а не хватает параметров и то что второе вообще не выполнится). Если получилось что a>b тогда просто поменяйте местами a и b, и используйте первое "тело" без самого if ( a <= b ).

- Добавьте проверку, чтобы h был меньше по модулю (b-a).

Вроде ничего не забыл.
1
dyap
2 / 2 / 0
Регистрация: 20.09.2010
Сообщений: 58
11.10.2010, 17:15  [ТС] #7
Народ, нужна помощь. Вообщем нам усложнили задачу и теперь нужно функцию для нахождения синуса и косинуса свою использовать. Косинус нам дали, синус написал сам. Но программа не работает. Посмотрите, пожалуйста, что не так?
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
 
double Cosin ( double x )//Функция нахождения косинуса
{
    double p,s,n;//описываем переменные
    const double e = 0.5E-8;//задаём константу е
    const double pi = 3.1415926535897932384626433832795;//задаём константу pi
 
    while (( x >= 2*pi ) || ( x <= - 2*pi ))
    {
        if ( x < 0 )
            x = x + 2*pi;
            else 
            x = x - 2*pi;
    }
    p = 1;
    s = 1;
    n = 0;
    
    while ( fabs ( p ) >= e )
    {
        p = ( -p*x*x ) / (( n + 1 ) * ( n+2 ));
        s = p + s;
        n += 2;
    }
        
    return s;
}
 
double Sinus (double x)// функция нахождения синуса
{   
    double p,s,n;
    const double e = 0.5E-8;//задаём константу е
    const double pi = 3.1415926535897932384626433832795;//задаём константу pi
    
    while (( x >= 2*pi ) || ( x <= - 2*pi ))
    {
        if ( x < 0 )
            x = x + 2*pi;
            else 
            x = x - 2*pi;
    }
    p=1;
    s=1;
    n=0;
    while (fabs ( p ) >= e)
    {
        p=(-p*x*x)/(2*n*(2*n+1));
        s=s+p;
        n += 2;
    }
    return s;
    
 
}
 
double zn ( double x, double n ) 
        {
                double r = 1, q = 1, s;
                while ( r <= n ) 
                {
                        q = q*x*x;
                        r ++;
                }
                s = q*n / ( 2*n+2 );
                return s;
        }
void main ()
{
        setlocale ( LC_ALL,".1251" );
        double x,m,t,u,i,k,a,b,h,sum,j;
 
        printf ( "Введите значение a \n             " );
        scanf ( "%lf",&a );
 
        printf ( "Введите значение b \n             " );
        scanf ( "%lf",&b );
 
        printf ( "Введите значение шага (h) \n             " );
        scanf ( "%lf",&h );
 
        printf ( "Введите значение m\n             " );
        scanf (" %lf",&u );
 
        if ( h == 0 )//Сравниваем H с нулём
        {
                printf ( "\n\n\n Ошибка ввода !  шаг (H) не равен нулю      \n\n\n" );
                goto str;//переходим в конец програмы
        }
        if ( h < 0 )//Сравниваем H с нулём
        {
                printf ( "\n\n\n Ошибка ввода !  шаг (H) только положительный   \n\n\n" );
                goto str;//переходим в конец програмы
        }
                //составление шапки таблицы
        printf ( "  ----------------------------------------------------\n" );
        printf ( "  | Значение переменной X |        Сумма             |\n" );  
        printf ( "  ----------------------------------------------------\n" );
        
        k = 1;
        if ( a <= b )
        {
        
                for ( i = a; i <= b; i += h )//цикл прохождения Х от A до B с шагом H
                {   
                        j = 0;
                        sum = 0;
                        for ( x = 1; x <= u; x ++ )//цикл прохождения переменной M от 1 до введеного числа М,т.е. нахождение колличества членов в сумме
                        {
                                k = i;
                                k = k*x;
                                m =Cosin (k)/ Sinus (k);//вызываем функцию ctng и присваеваем её значение переменой M
                                t = zn (i,x);//вызываем функцию zn и присваеваем её значение переменой t
                                sum = sum + m*t;//нахождение суммы
                                j = j + Cosin(k)/ Sinus (k);
                        }
                //вывод значений Х и суммы в таблице
                
                printf ( "  |%16.4lf       |%25.4lf |\n",i,sum,j );
                printf ( "  -----------------------------------------------------\n" );
                }
        }
                
        else if ( a > b ) 
        {
                for ( i = a; i >= b; i -= h )//цикл прохождения Х от A до B с шагом H
                {   
                        j = 0;
                        sum = 0;
                        for ( x = 1; x <= u; x ++ )//цикл прохождения переменной M от 1 до введеного числа М,т.е. нахождение колличества членов в сумме
                        {
                                k = i;
                                k = k*x;
                                m = Cosin (k)/Sinus (k);//вызываем функцию ctng и присваеваем её значение переменой M
                                t = zn (i,x);//вызываем функцию zn и присваеваем её значение переменой t
                                sum = sum + m*t;
                                j = j + Cosin(k)/Sinus (k);
                        }
                //вывод значений Х и суммы в таблице
                
                printf ( "  |%16.4lf       |%25.4lf|%25.4lf |\n" );
                printf ( "  --------------------------------------------------\n" );
                }
        }
str:;
}
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.10.2010, 05:06 #8
C++
1
printf ( "  |%16.4lf       |%25.4lf|%25.4lf |\n" );
эта строка, если содержит спецификаторы, должна содержать и то, что они выводят
если там значения типа double, то нужно использовать %f, так как %lf может дать неопределённое поведение (в C99 эта l игнорируется, но C99 не входит в стандарт C++, а в стандарте C89 она даёт непредсказуемое поведение)
1
dyap
2 / 2 / 0
Регистрация: 20.09.2010
Сообщений: 58
16.10.2010, 21:27  [ТС] #9
Вообщем написал рабочий косинус, синус. Сама программа работает, но сделал проверку стандартным косинусом и синусом и значение не всегда совпадают...Точнее где-то после 12 начинаются расхождения...Тоесть с 1 до 10 с шагом 0.5 все значения совпадают, а если с 1 до 30, например, то после 10 не то...
Вот программа:
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
129
130
131
132
133
134
135
136
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
 
 
double cosin ( double x)
{   
    double g=10;
    double p,s,n;
    const double e = 0.5E-8;
    const double PI = 3.1415926535897932384626433832795;//задаём константу pi
 
    while ((x>=2*PI) || (x<=-2*PI))
    {
        if (x<0)
            x = x + 2*PI;
        else 
            x = x - 2*PI;
    }
 
    for(s=1,p=1,n=1;fabs(p)>e;n+=2)
    {
        p=(-p*x*x)/(n*(n+1));
        s+=p;
    }   
    return s;
}
 
double sinus (double x)
{   
    double p,s,n;
    const double e = 0.5E-8;
 
    for(s=0,p=x,n=1;fabs(p)>e;n++)
    {   
        s+=p;
        p=(-p*x*x)/(2*n*(2*n+1));
    }
    return s;
}
 
double zn ( double x, double n ) 
{
    double r = 1, q = 1, s;
    while ( r <= n ) 
    {
        q = q*x*x;
        r++;
    }
    s = q*x / ( 2*n+2 );
    return s;
}
 
void main ()
{
    setlocale ( LC_ALL,".1251" );
    double x,m,t,u,i,k,a,b,h,sum,j,l;
 
    printf ( "Введите значение a \n" );
    scanf ( "%lf",&a );
 
    printf ( "Введите значение b \n" );
    scanf ( "%lf",&b );
 
    printf ( "Введите значение шага (h) \n" );
    scanf ( "%lf",&h );
 
    printf ( "Введите значение m\n" );
    scanf (" %lf",&u );
 
    if ( h == 0 )//Сравниваем H с нулём
    {
        printf ( "\n\n\n Ошибка ввода !  шаг (H) не равен нулю      \n\n\n" );
        goto str;//переходим в конец програмы
    }
    if ( h < 0 )//Сравниваем H с нулём
    {
        printf ( "\n\n\n Ошибка ввода !  шаг (H) только положительный   \n\n\n" );
        goto str;//переходим в конец програмы
    }
    if (a==0)
    {
        printf ("\n\n\n А не равно 0, т.к. ctn для нуля неопределен \n\n\n");
        goto str;
    }
    //составление шапки таблицы
    printf ( "  -----------------------------------------------------------------------------\n" );
    printf ( "  | Значение переменной X |        Сумма            |  Значение с помощью Ctng |\n" );    
    printf ( "  -----------------------------------------------------------------------------\n" );
 
    k = 1;
    if ( a <= b )
    {
 
        for ( i = a; i <= b; i += h )//цикл прохождения Х от A до B с шагом H
        {   
            j = 0;
            sum = 0;
            for ( x = 1; x <= u; x ++ )//цикл прохождения переменной M от 1 до введеного числа М,т.е. нахождение колличества членов в сумме
            {
                k = i;
                k = k*x;
                m =cosin (k)/sinus (k);//вызываем функцию ctng и присваеваем её значение переменой M
                t = zn (i,x);//вызываем функцию zn и присваеваем её значение переменой t
                sum = sum + m*t;//нахождение суммы
                j = j +  t*cos(k)/sin(k);
            }
            //вывод значений Х и суммы в таблице
 
            printf ( "  |%16.4lf       |%25.4lf|%25.4lf|\n",i,sum,j );
            printf ( "  -----------------------------------------------------------------------------\n" );
        }
    }
     else if ( a > b ) 
        {
                for ( i = a; i >= b; i -= h )//цикл прохождения Х от A до B с шагом H
                {   
                        j = 0;
                        sum = 0;
                        for ( x = 1; x <= u; x ++ )//цикл прохождения переменной M от 1 до введеного числа М,т.е. нахождение колличества членов в сумме
                        {
                                k = i;
                                k = k*x;
                                m = cosin (k)/sinus (k);//вызываем функцию ctng и присваеваем её значение переменой M
                                t = zn (i,x);//вызываем функцию zn и присваеваем её значение переменой t
                                sum = sum + m*t;
                                j = j + t*cos(k)/sin(k);
                        }
                //вывод значений Х и суммы в таблице
                }
                printf ( "  |%16.4lf       |%25.4lf|%25.4lf|\n",i,sum,j );
                printf ( "  -----------------------------------------------------------------------------\n" );
        }
str:;
}
Может, кто-нибудь знает в чем проблемка?...
0
Катерина 1991
Сообщений: n/a
14.05.2012, 15:46 #10
Вычислить значение функции с шагом 0,3 на промежутке -2<=x<1: 0,4х2+2,8х2-2,8
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2012, 15:46
Привет! Вот еще темы с ответами:

Программа для вычисления значения e^x - C++
Написать программу, которая вычисляет значение e^x. e^x = 1 + x / 1! + x^2 / 2! + x ^ 3 / 3! + ... Попросите пользователя ввести...

Программа, для вычисления значения! - C++
Помогите написать программу, вычисляющую значение выражения y=ctg(x), х - значение угла в градусах на языке Си. Заранее благодарен.

Программа для вычисления значения выражения - C++
Пытался написать программу для вычисления вот такого выражения An = sin(1–sin(2 + sin(3–sin(4 + ...sin(n))...), но он неправильно считает....

программу для вычисления значения функции - C++
Составить программу для вычисления значения функции z=x1+x2+x3 , где х1,х2,х3(на рисунке) ai, bi, ci – элементы массивов Вычисление xi...


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
14.05.2012, 15:46
Ответ Создать тему
Опции темы

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