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

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

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

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

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

Вычислить значения функций (см.рис.) при заданном m, если х изменяется от a до b с шагом h. Результаты получить в виде таблицы.
Миниатюры
Программа для вычисления значения функции.  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2010, 20:37     Программа для вычисления значения функции.
Посмотрите здесь:
Программа для вычисления значения функции С++ C++
программа для вычисления значения функции y C++
C++ Программа вычисления максимального значения функции на отрезке
Программа, для вычисления значения! C++
C++ Программа для вычисления значения
Программа для вычисления значения e^x C++
C++ Программа для вычисления значения выражения
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
28.09.2010, 07:15     Программа для вычисления значения функции. #2
dyap, судя по предыдущим сообщениям Вы умеете немного программировать на C/C++. Так в чем проблема то? Ждете хороших людей, которые за Вас все напишут? Неужели на всю жизнь хотите остаться, мягко говоря, "начинающим" в программировании?
D@rkD@iver
111 / 111 / 3
Регистрация: 01.10.2008
Сообщений: 876
28.09.2010, 08:29     Программа для вычисления значения функции. #3
да леняться люди, даже не пытаются сделать
с такими настроениями вам надо за задачи деньги платить
dyap
2 / 2 / 0
Регистрация: 20.09.2010
Сообщений: 58
30.09.2010, 19:40  [ТС]     Программа для вычисления значения функции. #4
Цитата Сообщение от Евгений М. Посмотреть сообщение
dyap, судя по предыдущим сообщениям Вы умеете немного программировать на C/C++. Так в чем проблема то? Ждете хороших людей, которые за Вас все напишут? Неужели на всю жизнь хотите остаться, мягко говоря, "начинающим" в программировании?
Да дело в том, что я в школе программирование вообще не изучал (так получилось, что пропустил весь курс паскаля, около месяца), но с математикой все гуд. Пошел в универ на математика-программиста и вот учусь уже месяц и понимаю, что мне совсем не нравится программировать Неинтересно во всем этом разбираться, не получаю удовольствия от написания программ...Может нужно въехать, а может это просто не мое?!!...
Собственно поэтому и прошу помочь, потому что сам я только самые простые программы научился писать.
Ну нет, так нет. Может кто-нибудь подскажет хотя бы что именно нужно почитать, чтобы решить эту задачу, тоесть какие темы?
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:;
}
Собственно написал программу. Подскажите, может какие-нибудь существенные минусы есть, тоесть к чему можно придраться? А то у меня последний шанс ее сдать, если преподу что-то не понравится, не засчитает лабу
Евгений М.
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).

Вроде ничего не забыл.
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:;
}
accept
4821 / 3241 / 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 она даёт непредсказуемое поведение)
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:;
}
Может, кто-нибудь знает в чем проблемка?...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2012, 15:46     Программа для вычисления значения функции.
Еще ссылки по теме:
программу для вычисления значения функции C++
C++ Программа для вычисления косинуса выдает неправильные значения
Программа для вычисления функции C++
C++ Написать программу для вычисления значения функции
Составить программу для вычисления значения функции F C++

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

Или воспользуйтесь поиском по форуму:
Катерина 1991
Сообщений: n/a
14.05.2012, 15:46     Программа для вычисления значения функции. #10
Вычислить значение функции с шагом 0,3 на промежутке -2<=x<1: 0,4х2+2,8х2-2,8
Yandex
Объявления
14.05.2012, 15:46     Программа для вычисления значения функции.
Ответ Создать тему
Опции темы

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