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

не могу разобраться с функциями ( значение функции, заданной с помощью ряда) - C++

Восстановить пароль Регистрация
 
SSSprinter
0 / 0 / 0
Регистрация: 01.09.2011
Сообщений: 34
29.01.2013, 15:46     не могу разобраться с функциями ( значение функции, заданной с помощью ряда) #1
Добрый день! пишу программу, которая вычисляет значение функции, заданной с помощью ряда.
я плохо разбираюсь в написании функций, но вроде все сделал, написал определение функции до функции tmain, потом саму функцию, но компилятор VS2010 выдает ошибки:
error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)-строка 31, 38, 65
требуется объявление-31,38,61,65
вот код
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
150
151
//Вариант 10. Программа для вычисления значений функций, заданной с помощью ряда.
// 1 радиан=57 градусов
 
#include "stdafx.h"
#include "math.h"       /*для выполнения простых математических операций*/
#include <iostream>     /*для организации ввода-вывода*/
#include <windows.h>    /*для русского языка*/ 
using namespace std;    /*чтобы не писать каждый раз std::cin*/
HANDLE hStdout; 
///-----------Функция для отображения русских букв-----------///
char bufRus[256];
char* Rus(const char* text)
{
CharToOemA(text,bufRus);
return bufRus;
}
////////////////////////////////////////////////////////////////
 
float faktorial (long double n);
long double MyFunction (long double x,long double MF=0,long double MF1=0, float n=1);
long double nevyazka (long double x);
long double eps=0;
 
 
    //long double Function (long double x);
    //  {   
    //      return (long double) sin(x)*sin(x);
    //  }
 
float faktorial (long double n);
    {
        if (n==0) 
        {   return 1;   }
        else {  return n*faktorial(n-1);    }
    }   
 
long double MyFunction (long double x, long double MF, long double MF1, float n);
    {
    
MF1=MF;
if ((int)n%2!=0) MF=(powf(2.0,(2*n-1))*powf(x,2*n))/(faktorial(2*n));
        else MF=(-1*powf(2.0,(2*n-1))*powf(x,2*n))/(faktorial(2*n)); 
        
MF=MF+MF1;
    n++;
    if (abs(MF-MF1)<=eps) return MF;
else return MyFunction (x, MF, MF1, n);
//////////      
    //MF1=(powf(-1.0,(n+1))*powf(2.0,(2*n-1))*powf(x,2*n))/(faktorial(2*n));
    //MF1=MF2;
    ///*if (abs(MF1-MF2)<=eps) return MF;
    //else return MyFunction (x, MF1, MF2, MF, n);*/
    //do
    //{
    //MF=MF1+MF2;
    //n++;
    //}
    //while (abs(MF1-MF2)>=eps)
    //if (abs(MF1-MF2)<eps) return MF
 
    }
        
 
long double nevyazka (long double x);
    {   
        return sqrt(abs((MyFunction(x)*MyFunction(x))-(sin(x)*sin(x)*sin(x)*sin(x))));
    }
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{   
    long double x_start, x_end, delta_x, eps, x_ideal, x, MF, MF1, MF2;
    float n=1;
        
//  int add( int a, int b)
//{
//   return a + b; // возвращаем результат сложения a и b в виде int
//}
 
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE);   
    SetConsoleTextAttribute(hStdout, BACKGROUND_INTENSITY); //выбираем цвет фона
    
flag1: SetConsoleTextAttribute(hStdout, 11);    //цвет шрифта
    printf(Rus("Введите x начальное (от -7 до 7):  ")); //так как в функции для подсчёта синуса угол задается в радианах,
    cin>>x_start;                                       //выходить за эти пределы нет смысла, значение будет больше 360 градусов
    if (x_start<-7 || x_start>7)
        {SetConsoleTextAttribute(hStdout,12);
        printf(Rus("Ошибка!\n"));
        goto flag1;}
 
flag2:  SetConsoleTextAttribute(hStdout, 11);
    printf(Rus("\nВведите x конечное (условия: x_end>x_start и x_end<=7):  "));
    cin>>x_end;
    if (x_end<=x_start || x_end>7)
        {SetConsoleTextAttribute(hStdout,12);
        printf(Rus("Ошибка!\n"));
        goto flag2;}
 
flag3:  SetConsoleTextAttribute(hStdout, 11);
    printf(Rus("\nВведите шаг, т.е дельту x (условия: delta_x>0 и x_end-x_start>=delta_x):  "));
    cin>>delta_x;
    if (delta_x<0 || x_end-x_start<delta_x)
        {SetConsoleTextAttribute(hStdout,12);
        printf(Rus("Ошибка!\n"));
        goto flag3;}
 
flag4: SetConsoleTextAttribute(hStdout, 11);
    printf(Rus("\nВведите значение эпсилон (eps от 0 до 1):  "));
    cin>>eps;
    if (eps>1 || eps<0)
        {SetConsoleTextAttribute(hStdout,12);
        printf(Rus("Ошибка!\n"));
        goto flag4;}
    printf(Rus("\n"));
 
//вывод таблицы с вычислением значения функции в интервале x_start-x_end для заданной точности eps:
printf(Rus("--------------------------------------------------------\n"));
printf(Rus("|    x    |  MyFunction(x)  |  Function(x)  |  Невязка |\n"));
printf(Rus("--------------------------------------------------------\n"));
    
    for (x=x_start;x=x_end;x=x+delta_x)
        {
        printf("| %12f | %12f | %12f | %12f |\n", x, MyFunction(x), sin(x)*sin(x), nevyazka(x));
        printf("--------------------------------------------------------");
        }
 
 
flag5: SetConsoleTextAttribute(hStdout, 11);
    printf(Rus("Введите значение х идеального (x_ideal от -7 до 7):  "));
    cin>>x_ideal;
    if (x_ideal<-7 || x_ideal>7)
        {SetConsoleTextAttribute(hStdout,12);
        printf(Rus("Ошибка!\n"));
        goto flag5;}
    printf(Rus("\n"));
 
//вывод таблицы с вычислением значения функции для заданного x_ideal для различных значений точности eps (в диапазоне от 10^(-1) до 10^(-7))
printf(Rus("----------------------------------------------------------\n"));
printf(Rus("|    eps    |  MyFunction(x)  |  Function(x)  |  Невязка |\n"));
printf(Rus("----------------------------------------------------------\n"));
 
    for (eps=(0.1);eps=(0.0000001);eps=(0.1*0.1))
        {
        x=x_ideal;
        printf("| %12f | %12f | %12f | %12f |\n", eps, MyFunction(x), sin(x)*sin(x), nevyazka(x));
        printf("--------------------------------------------------------");
        }
    
    return 0;
}
помогите пожалуйста, устал уже.

Добавлено через 6 минут
почему выдает ошибки? я ведь вроде сделал объявление функций, разве нет ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2013, 15:46     не могу разобраться с функциями ( значение функции, заданной с помощью ряда)
Посмотрите здесь:

C++ Вычислить значение функции арккосинуса, заданной с помощью ряда Тейлора
C++ Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора
Вычислить и вывести на экран в виде таблицы значение функции, заданной с помощью ряда Тейлора C++
Вычислить и вывести на экран в виде таблицы значения функции заданной с помощью ряда Тейлора C++
C++ Вычислить и вывести в виде таблицы значения функции, заданной с помощью ряда Тейлора
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
29.01.2013, 15:52     не могу разобраться с функциями ( значение функции, заданной с помощью ряда) #2
тут точка с запятой не нужна

C++
1
2
3
float faktorial (long double n);
{
}
SSSprinter
0 / 0 / 0
Регистрация: 01.09.2011
Сообщений: 34
29.01.2013, 16:56  [ТС]     не могу разобраться с функциями ( значение функции, заданной с помощью ряда) #3
defer,
спасибо! сейчас хоть программа работать начала, только почему то бесконечно таблицу строит

Добавлено через 47 минут
программа почему то не может выйти из цикла
C++
1
2
3
4
5
 for (x=x_start;x=x_end;x=x+delta_x)
        {
        printf("| %12f | %12f | %12f | %12f |\n", x, MyFunction(x), sin(x)*sin(x), nevyazka(x));
        printf("--------------------------------------------------------");
        }
и бесконечно выводит строки таблицы
Кликните здесь для просмотра всего текста

там есть условие для остановки счета рядов
Кликните здесь для просмотра всего текста

я его использовал когда задавал функцию MyFunction в строке 38

Добавлено через 7 минут
и еще почему то значение вылазит из таблицы (самый правый столбец). пробовал менять значения c %12f на %10f не помогает.
SSSprinter
0 / 0 / 0
Регистрация: 01.09.2011
Сообщений: 34
30.01.2013, 17:30  [ТС]     не могу разобраться с функциями ( значение функции, заданной с помощью ряда) #4
Так и не могу разобраться, почему программа не может выйти из цикла. Всю голову уже сломал. Я точно знаю, что функция MyFunction задана верно, и условие выхода из счета рядов тоже, потому что скопировал их из другой программы с этим же заданием. Где еще может быть по-мимо этого ошибка?
Yandex
Объявления
30.01.2013, 17:30     не могу разобраться с функциями ( значение функции, заданной с помощью ряда)
Ответ Создать тему
Опции темы

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