Родились сегодня:
Rosiam


Лидеры рейтинга

ID: 226425

Konstantin Shvetski

Модератор

724

Россия, Северодвинск


ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

326

Россия, пос. Теплоозёрск, ЕАО


ID: 401284

Михаил Александров

Академик

279

Россия, Санкт-Петербург


ID: 325460

CradleA

Мастер-Эксперт

212

Беларусь, Минск


ID: 400815

alexleonsm

6-й класс

130


ID: 400669

epimkin

Профессионал

120


ID: 401888

puporev

Профессор

111

Россия, Пермский край


8.8.15

09.05.2021

JS: 2.8.21
CSS: 4.5.5
jQuery: 3.6.0
DataForLocalStorage: 2021-05-11 18:46:03-standard


Создание программ на языках C и C++.

Администратор раздела: CradleA (Мастер-Эксперт)

Консультация онлайн # 159676

Раздел: С / С++
Автор вопроса: Martynova Katya
Дата: 05.02.2009, 13:11 Консультация закрыта
Поступило ответов: 1

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

Ответ # 242967 от Micren
Здравствуйте, 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, 14:40 Лысков Игорь Витальевич (Мастер-Эксперт)


Micren

Посетитель
05.02.2009, 13:43
Мини-форум консультации # 159676
Micren

1

= общий =    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}
---------------------------

неизвестный

2

= общий =    05.02.2009, 19:23

Оо, я сначала не увидела сообщения... )) А тут, оказывается все решено! Ещё раз спасибо, Micren, ты мне очень-очень помог! smile

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Лучшие эксперты раздела

CradleA

Мастер-Эксперт

Рейтинг: 212

Коцюрбенко Алексей Владимирович

Старший модератор

Рейтинг: 81

Зенченко Константин Николаевич

Старший модератор

Рейтинг: 73

Хватов Сергей

Академик

Рейтинг: 27

Степанов Иван /REDDS

4-й класс

Рейтинг: 1

Лысков Игорь Витальевич

Мастер-Эксперт

Рейтинг: 0