Консультация № 159676
05.02.2009, 13:11
0.00 руб.
0 3 1
Уважаемые программисты, помогите, пожалуйста с решением... Задана функция y=x^2/sin(5x). Нужно написать программу табулирования функции для аргумента x э [a;b] с шагом h. А также найти максимум на этом отрезке и все положительные значения функции сохранить в массиве plus[], а отрицательные - в массиве minus[]. Алгоритм действия здесь понятен, сложность возикла с синтаксисом, потому что C++ владею плохо! Заранее благодарю.

Обсуждение

Неизвестный
05.02.2009, 13:43
общий
05.02.2009, 14:40
это ответ
Здравствуйте, Martynova Katya!
Приложение с краткими комментариями:
Код:

#include <locale>
#include <iostream>
#include <iomanip>
#include <valarray>
#include <vector>

using namespace std;

// Заданная функция
double y(double x)
{
return x*x/sin(5*x);
}

int main()
{
locale::global(locale("rus_rus.866"));
double A,B,h;
vector<double> plus,minus;
// Ввод исходных данных
wcout<<L"Введите нижний предел A:";
wcin>>A;
wcout<<L"Введите верхний предел B:";
wcin>>B;
wcout<<L"Введите шаг h:";
wcin>>h;
wcout<<L"---------------------------"<<endl;
wcout<<L"| x | y |"<<endl;
wcout<<L"---------------------------"<<endl;
// Вывод результата
for(double x=A;x<=B;x+=h)
{
double ry=y(x);
wcout<<L'|'<<fixed<<setprecision(3)<<setw(12)<<x<<L'|'<<setw(12)<<ry<<L'|'<<endl;
// Заносим положительные в plus, отрицательные в minus
if(ry>0)plus.push_back(ry);
else if(ry<0)minus.push_back(ry);
}
wcout<<L"---------------------------"<<endl;
// Выводим массивы plus и minus
wcout<<L"Массив plus:"<<endl;
wcout<<L'{';
for(vector<double>::iterator it=plus.begin();it!=plus.end();it++)
wcout<<*it<<L',';
if(plus.size())wcout<<L'\b';
wcout<<L'}'<<endl;
wcout<<L"---------------------------"<<endl;
wcout<<L"Массив minus:"<<endl;
wcout<<L'{';
for(vector<double>::iterator it=minus.begin();it!=minus.end();it++)
wcout<<*it<<L',';
if(minus.size())wcout<<L'\b';
wcout<<L'}'<<endl;
wcout<<L"---------------------------"<<endl;
system("PAUSE");
return 0;
}


Пример работы программы:
Код:

Введите нижний предел A:5
Введите верхний предел B:10
Введите шаг h:0.4
---------------------------
| x | y |
---------------------------
| 5.000| -188.891|
| 5.400| 30.490|
| 5.800| -50.691|
| 6.200| -95.140|
| 6.600| 43.564|
| 7.000| -114.437|
| 7.400| -85.092|
| 7.800| 63.125|
| 8.200| -423.899|
| 8.600| -88.918|
| 9.000| 95.193|
| 9.400| 715.042|
| 9.800| -100.697|
---------------------------
Массив plus:
{30.490,43.564,63.125,95.193,715.042}
---------------------------
Массив minus:
{-188.891,-50.691,-95.140,-114.437,-85.092,-423.899,-88.918,-100.697}
---------------------------
Неизвестный
05.02.2009, 13:56
общий
Извиняюсь. Пропустил часть условия.
Вот исправленная программа:
Код:

#include <locale>
#include <iostream>
#include <iomanip>
#include <valarray>
#include <vector>

using namespace std;

// Заданная функция
double y(double x)
{
return x*x/sin(5*x);
}

int main()
{
locale::global(locale("rus_rus.866"));
double A,B,h;
vector<double> plus,minus;
// Ввод исходных данных
wcout<<L"Введите нижний предел A:";
wcin>>A;
wcout<<L"Введите верхний предел B:";
wcin>>B;
wcout<<L"Введите шаг h:";
wcin>>h;
wcout<<L"---------------------------"<<endl;
wcout<<L"| x | y |"<<endl;
wcout<<L"---------------------------"<<endl;
// Вывод результата
for(double x=A;x<=B;x+=h)
{
double ry=y(x);
wcout<<L'|'<<fixed<<setprecision(3)<<setw(12)<<x<<L'|'<<setw(12)<<ry<<L'|'<<endl;
// Заносим положительные в plus, отрицательные в minus
if(ry>0)plus.push_back(ry);
else if(ry<0)minus.push_back(ry);
}
wcout<<L"---------------------------"<<endl;
// Выводим массивы plus и minus
wcout<<L"Массив plus:"<<endl;
wcout<<L'{';
for(vector<double>::iterator it=plus.begin();it!=plus.end();it++)
wcout<<*it<<L',';
if(plus.size())wcout<<L'\b';
wcout<<L'}'<<endl;
wcout<<L"---------------------------"<<endl;
wcout<<L"Массив minus:"<<endl;
wcout<<L'{';
for(vector<double>::iterator it=minus.begin();it!=minus.end();it++)
wcout<<*it<<L',';
if(minus.size())wcout<<L'\b';
wcout<<L'}'<<endl;
wcout<<L"---------------------------"<<endl;
system("PAUSE");
return 0;
}


Результат работы:
Код:

Введите нижний предел A:5
Введите верхний предел B:10
Введите шаг h:0.4
---------------------------
| x | y |
---------------------------
| 5.000| -188.891|
| 5.400| 30.490|
| 5.800| -50.691|
| 6.200| -95.140|
| 6.600| 43.564|
| 7.000| -114.437|
| 7.400| -85.092|
| 7.800| 63.125|
| 8.200| -423.899|
| 8.600| -88.918|
| 9.000| 95.193|
| 9.400| 715.042|
| 9.800| -100.697|
---------------------------
Массив plus:
{30.490,43.564,63.125,95.193,715.042}
---------------------------
Массив minus:
{-188.891,-50.691,-95.140,-114.437,-85.092,-423.899,-88.918,-100.697}
---------------------------
Неизвестный
05.02.2009, 19:23
общий
Оо, я сначала не увидела сообщения... )) А тут, оказывается все решено! Ещё раз спасибо, Micren, ты мне очень-очень помог!
Форма ответа