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

Методом касательных вычислить с погрешностью e(1>e>0) корень уравнения - C++

Восстановить пароль Регистрация
 
РоманДмитриевич
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 5
11.04.2012, 01:04     Методом касательных вычислить с погрешностью e(1>e>0) корень уравнения #1
Всем доброго времени суток!
Помогите найти ошибки и вдохнуть в программу жизнь

Методом касательных вычислить с погрешностью e(1>e>0) корень уравнения x^3-2x^2+x-3=0
при начальном приближении 2.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
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
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#include <conio.h>      //библиотека подключения функции getch()
#include <iostream.h> //библиотека для cin и cout
#include <malloc.h>    //библиотека для динамического выделения памяти
#include <fstream.h>   //библиотека для ввода/вывода в файл
#include <windows.h> //библиотека используется в функции RUS
#include <math.h>       //библиотека математических функций
#include <ctype.h>      // библиотека проверки принадлежности символов
#include <stdlib.h>      // библиотека некоторых стандартных функций
#include <string.h>      // библиотека функций работы со строками
//
char bufRus[256];
//---------------------------------------------------------------------------
char* RUS(const char*text) //функция поддержки русского языка
{
CharToOem(text,bufRus);
return bufRus;
}
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
cout<<RUS("***Расчетно графическая работа, задание 14*** \n");
 
 
 
double f(double x) {
 
    return    x^3-2x^2+x-3;
}
 
double f1(double x) {
 
    return   3*x^2-4*x+1;
}
 
double f2(double x) {
 
    return   6*x-4;
}
 
int main() {
    int n=0;
    double a,b,c,eps;
    cout<<"a="; cin>>a;
    cout<<"b="; cin>>b;
    cout<<"eps="; cin>>eps;
    if(f(a)*f2(a)>0) c=a;
    else c=b;
    do {
        c=c-f(c)/f1(c);
        n+=1;
    }
    while (fabs(f(c))>=eps);
        cout<<"c="<<c<<"\n";
        cout<<"n="<<n<<"\n";
        getch();
    return 0;
}
 
 
 
 
cout<<RUS("\nНажмите любую клавишу для завершения программы ...\n");
getch();
return 0;
}
//---------------------------------------------------------------------------
при запуске выдает ошибку
[C++ Error] Unit1.cpp(29): E2141 Declaration syntax error

на строчку
double f(double x)

помогите, пожалуйста, разрешить данную проблему, и в общем полностью довести программу до ума и вдохнуть в нее жизнь

Заранее огромнейшее человеческое СПАСИБО!
да хранит Вас Господь Бог!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2012, 01:04     Методом касательных вычислить с погрешностью e(1>e>0) корень уравнения
Посмотрите здесь:

C++ Вычислить методом итераций корень уравнения
[C++]Вычислить методом Ньютона корень уравнения C++
C++ Вычислить методом Ньютона корень уравнения
C++ Вычислить методом Ньютона корень уравнения
C++ Найти корень уравнения методом касательных
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
11.04.2012, 03:22     Методом касательных вычислить с погрешностью e(1>e>0) корень уравнения #2
У Вас 2 функции main. Так делать нельзя.
РоманДмитриевич
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 5
11.04.2012, 22:48  [ТС]     Методом касательных вычислить с погрешностью e(1>e>0) корень уравнения #3
Toshkarik, а какую функцию убирать?? Первая она шаблонная, а вторая вообщем то пустая...я в замешательстве((

помогите довести программу до ума((
Oak
 Аватар для Oak
1 / 1 / 0
Регистрация: 03.11.2011
Сообщений: 10
11.04.2012, 22:57     Методом касательных вычислить с погрешностью e(1>e>0) корень уравнения #4
Кинуть все в первый main, не?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
11.04.2012, 23:20     Методом касательных вычислить с погрешностью e(1>e>0) корень уравнения #5
Что значит шаблонная? Oo main не может быть шаблонной. Просто подправил все под одну main, не проверял.
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
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#include <conio.h>      //библиотека подключения функции getch()
#include <iostream.h> //библиотека для cin и cout
#include <malloc.h>    //библиотека для динамического выделения памяти
#include <fstream.h>   //библиотека для ввода/вывода в файл
#include <windows.h> //библиотека используется в функции RUS
#include <math.h>       //библиотека математических функций
#include <ctype.h>      // библиотека проверки принадлежности символов
#include <stdlib.h>      // библиотека некоторых стандартных функций
#include <string.h>      // библиотека функций работы со строками
//
char bufRus[256];
//---------------------------------------------------------------------------
char* RUS(const char*text) //функция поддержки русского языка
{
CharToOem(text,bufRus);
return bufRus;
}
//---------------------------------------------------------------------------
#pragma argsused
 
 
double f(double x) {
 
    return    x^3-2x^2+x-3;
}
 
double f1(double x) {
 
    return   3*x^2-4*x+1;
}
 
double f2(double x) {
 
    return   6*x-4;
}
 
int main() {
    cout<<RUS("***Расчетно графическая работа, задание 14*** \n");
    int n=0;
    double a,b,c,eps;
    cout<<"a="; cin>>a;
    cout<<"b="; cin>>b;
    cout<<"eps="; cin>>eps;
    if(f(a)*f2(a)>0) c=a;
    else c=b;
    do {
        c=c-f(c)/f1(c);
        n+=1;
    }
    while (fabs(f(c))>=eps);
        cout<<"c="<<c<<"\n";
        cout<<"n="<<n<<"\n";
 
    cout<<RUS("\nНажмите любую клавишу для завершения программы ...\n");
    getch();
    return 0;
}
Добавлено через 2 минуты
Да и у вас куча ошибок.

Цитата Сообщение от Toshkarik Посмотреть сообщение
while (fabs(f(c))>=eps);
Бесконечный цикл во первых, во вторых даже если бы с ним все было бы хорошо то выводился бы только
Цитата Сообщение от Toshkarik Посмотреть сообщение
cout<<"c="<<c<<"\n";
в цикле, второй оператор
Цитата Сообщение от Toshkarik Посмотреть сообщение
cout<<"n="<<n<<"\n";
вывелся бы один раз после цикла, то есть там пропущены фигурные скобки. Дальше даже не смотрел.
Yandex
Объявления
11.04.2012, 23:20     Методом касательных вычислить с погрешностью e(1>e>0) корень уравнения
Ответ Создать тему
Опции темы

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