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

Программы для решения нелинейного уравнения - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
exovoini
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 44
24.03.2011, 16:00     Программы для решения нелинейного уравнения #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
42
43
44
45
46
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
 
double F(double x)
{
return (1-x+sin(x)-log(1+x));
}
int main()
{
double a,b,x0,x1,h,c,m;
int N;
 
 
cout<<"Vvedite a, b:"<<endl;
cin>>a>>b;
cout<<"Vvedite chislo iteracii:"<<endl;
cin>>N;
cout<<"Vvedite shag po x:"<<endl;
cin>>h;
 
cout.precision(5);
cout.setf(ios::left);
 
cout<<"_____________________"<<endl;
cout<<setw(12)<<"x"<<setw(12)<<"F(x)"<<endl;
cout<<"_____________________"<<endl;
 
x0=a;
cout<<setw(12)<<x0<<setw(12)<<F(x0)<<endl;
 
x1=x0+h;
while(x1<=b)
{
    x1=x0+h;
    cout<<setw(12)<<x1<<setw(12)<<F(x1)<<endl;
 
    if(F(x0)*F(x1)<0)
    cout<<"Koren naiden na intervale ["<<x0<<","<<x1<<"]"<<endl;
    x0=x1;
    cout<<endl; 
}
system ("pause");
return 0;
}
Метод половинного деления:

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
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define e 0.001
double func (double x)
{
return (1 - x + sin (x) - log (1+x) );
}
int main ()
{
int x1,x2;
double x;
int k;
k=0;
x1=0.9;
x2=1.2;
x=0;
double a,b,c;
a=0.9;
b=1.2;
while (fabs (a-b) >e)
{
c=(a+b)/2;
if ( (func (c) *func (a)) <0) b=c;
else a=c;
k++;
}
printf ("Otvet:%f\n",a);
printf ("Koren naiden na iteracii:%d \n",k);
getch ();
return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LaГushan
123 / 123 / 14
Регистрация: 12.03.2011
Сообщений: 227
24.03.2011, 16:31     Программы для решения нелинейного уравнения #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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <iostream>
#include <iomanip>
#include <math.h>
 
using namespace std;
#define e 0.001
 
double F(double x)
{
return (1-x+sin(x)-log(1+x));
}
 
void One()
{
   double a,b,x0,x1,h,c,m;
int N;
 
 
cout<<"Vvedite a, b:"<<endl;
cin>>a>>b;
cout<<"Vvedite chislo iteracii:"<<endl;
cin>>N;
cout<<"Vvedite shag po x:"<<endl;
cin>>h;
 
cout.precision(5);
cout.setf(ios::left);
 
cout<<"_____________________"<<endl;
cout<<setw(12)<<"x"<<setw(12)<<"F(x)"<<endl;
cout<<"_____________________"<<endl;
 
x0=a;
cout<<setw(12)<<x0<<setw(12)<<F(x0)<<endl;
 
x1=x0+h;
while(x1<=b)
{
        x1=x0+h;
        cout<<setw(12)<<x1<<setw(12)<<F(x1)<<endl;
 
        if(F(x0)*F(x1)<0)
        cout<<"Koren naiden na intervale ["<<x0<<","<<x1<<"]"<<endl;
        x0=x1;
        cout<<endl;     
}
system ("pause");
}
double func (double x)
{
return (1 - x + sin (x) - log (1+x) );
}
 
void Two()
{
  int x1,x2;
double x;
int k;
k=0;
x1=0.9;
x2=1.2;
x=0;
double a,b,c;
a=0.9;
b=1.2;
while (fabs (a-b) >e)
{
c=(a+b)/2;
if ( (func (c) *func (a)) <0) b=c;
else a=c;
k++;
}
printf ("Otvet:%f\n",a);
printf ("Koren naiden na iteracii:%d \n",k);
getch ();
}
 
 
int main ()
{
    int c;
    setlocale(LC_ALL,"rus");
    std::cout << "Шаговый метод(1) или половинное деление(2)?" << endl;
    std::cin >> c;
    if(c == 1)
        One();
    else if(c == 2)
        Two();
return 0;
}
Как-то так, если вам конечно нужно это.
exovoini
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 44
24.03.2011, 16:36  [ТС]     Программы для решения нелинейного уравнения #3
Да в том то и дело что требуют чтобы было все на одном экране, то есть применить вот такой метод не получится, нужно чтобы сначала щел шаговый метод а за ним сразу метод половинного деления, на одном экране.
LaГushan
123 / 123 / 14
Регистрация: 12.03.2011
Сообщений: 227
24.03.2011, 16:47     Программы для решения нелинейного уравнения #4
Можно конечно вызвать сначала one(), а потом two() в main(), без запросов какую функцию вводить. А если всё в одной функции, то это довольно странный подход, который обычно не находит одобрения. Если так, то вам надо колдовать с переменными, менять их на какие-нибудь другие, а то они повторяются. Но это очень рутинная работа.
exovoini
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 44
24.03.2011, 16:53  [ТС]     Программы для решения нелинейного уравнения #5
Ну нам препод в универе сказала: Мне нужна одна программа которая сначала будет выводить решение уравнения шаговым методом и тут же рядом методом половинного деления. Иначе как запустить сразу две программы в одном экране я это понять не могу Попробовал запустить one(), а потом two() в 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
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
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <iostream>
#include <iomanip>
#include <math.h>
 
using namespace std;
#define e 0.001
 
double F(double x)
{
return (1-x+sin(x)-log(1+x));
}
 
void One()
{
   double a,b,x0,x1,h,c,m;
int N;
 
 
cout<<"Vvedite a, b:"<<endl;
cin>>a>>b;
cout<<"Vvedite chislo iteracii:"<<endl;
cin>>N;
cout<<"Vvedite shag po x:"<<endl;
cin>>h;
 
cout.precision(5);
cout.setf(ios::left);
 
cout<<"_____________________"<<endl;
cout<<setw(12)<<"x"<<setw(12)<<"F(x)"<<endl;
cout<<"_____________________"<<endl;
 
x0=a;
cout<<setw(12)<<x0<<setw(12)<<F(x0)<<endl;
 
x1=x0+h;
while(x1<=b)
{
        x1=x0+h;
        cout<<setw(12)<<x1<<setw(12)<<F(x1)<<endl;
 
        if(F(x0)*F(x1)<0)
        cout<<"Koren naiden na intervale ["<<x0<<","<<x1<<"]"<<endl;
        x0=x1;
        cout<<endl;     
}
system ("pause");
}
double func (double x)
{
return (1 - x + sin (x) - log (1+x) );
}
 
void Two()
{
  int x1,x2;
double x;
int k;
k=0;
x1=0.9;
x2=1.2;
x=0;
double a,b,c;
a=0.9;
b=1.2;
while (fabs (a-b) >e)
{
c=(a+b)/2;
if ( (func (c) *func (a)) <0) b=c;
else a=c;
k++;
}
printf ("Otvet:%f\n",a);
printf ("Koren naiden na iteracii:%d \n",k);
getch ();
}
 
 
int main ()
{
int c;
setlocale(LC_ALL,"rus");
std::cout << "Шаговый метод" << endl;
One();
std::cout << "Метод половинного деления" << endl;
Two();
return 0;
}
Это правильно будет?
LaГushan
123 / 123 / 14
Регистрация: 12.03.2011
Сообщений: 227
24.03.2011, 16:58     Программы для решения нелинейного уравнения #6
Цитата Сообщение от exovoini Посмотреть сообщение
Это правильно будет?
Не знаю что нужно вашему преподу, но я бы так и сделал.
exovoini
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 44
24.03.2011, 17:00  [ТС]     Программы для решения нелинейного уравнения #7
Хорошо тем более другого варианта я и не нахожу просто уже все что можно ей показал все ей не то. Спасибо большое за помощь!
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
24.03.2011, 17:58     Программы для решения нелинейного уравнения #8
Ты же локализацию настроил, зачем на транслите мучаться.)
Да и cout с printf в одной программе лучше не мешать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2011, 18:03     Программы для решения нелинейного уравнения
Еще ссылки по теме:

Написать программу для решения уравнения C++
Численные методы решения нелинейного уравнения C++

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

Или воспользуйтесь поиском по форуму:
exovoini
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 44
24.03.2011, 18:03  [ТС]     Программы для решения нелинейного уравнения #9
Сейчас поправлю)) Спасибо))
Yandex
Объявления
24.03.2011, 18:03     Программы для решения нелинейного уравнения
Ответ Создать тему
Опции темы

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