0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 24
1

Математическая задача на C++

26.01.2014, 16:44. Показов 1354. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
И снова я. Пожалуйста помогите переделать программу на нужную.

Суть задачи такова:
С клавиатуры вводится радиус окружности с центром в начале координат. Найти координаты точек пересечения окружности с синусоидой на промежутке от 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
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
# include <iostream>
# include " conio.h "
# include <math.h>
 
/ * Заголовок функции для нахождения заданного корня * /
double findIntersection ( int , int , double , int ) ;
 
using namespace std ;
int main ( )
{
const int N = 360 / * переменная N определяет размер массива , поэтому объявлена ​​с квалификатора const ; 360 означает , что будем рассматривать 360 различных значений угла α , перебегая значения от 0 до 359 с шагом 1 º . Вообще говоря , перебегать возможные значения α можно с большим шагом , тогда определенные диапазоны с изолированными корнями будут шире * /
const double PI = 3.14159265 ;
int cR , step = 1 / * cR - радиус окружности (начало его в центре координат) , step - шаг переменной цикла , установленный в 1 º * /
cout << " Circle's radius ? " << endl ;
cin >> cR ;
/ * В массивы cXs и cYs будем записывать абсциссы и ординаты точек окружности для значений угла α от 0 до 359 º с шагом 1 , а в массив fYs [ N] - ординаты параболы для соответствующих элементов массива cXs * /
double cXs [ N] , cYs [ N] , fYs [ N] ;
for ( int i = 0 ; i <N ; i + = step ) {
/ * Не забываем выражать градуса в радианах ! * /
cXs [ i ] = cR * cos ( i * PI/180 ) ;
cYs [ i ] = cR * sin ( i * PI/180 ) ;
fYs [ i ] = ( cXs [ i ] ) * ( cXs [ i ] ) ;
}
/ * Массив intersections создаем для того , чтобы хранить в нем значение тех углов в градусах , в окрестности которых пересекают круг и парабола , в этом массиве зарезервировано 8 элементов , хотя круг и парабола в действительности могут пересекаются менее , чем в 2 точках * /
int K = 0 int intersections [ 10];
for ( int i = 0 ; i <N -1 ; i + +) {
/ * Сравниваем пары соседних соответствующих элементов массивов cYs и fYs с целью выявления значений угла α , для которых разница сYs - fYs меняет знак , и запоминаем эти значения угла в массив intersections * /
if ( ( cYs [ i ] < = fYs [ i ] ) && ( cYs [ i +1 ] > = fYs [ i +1 ]))
{ Intersections [K ] = i ; K + + ;}
if ( ( cYs [ i ] > = fYs [ i ] ) && ( cYs [ i +1 ] < = fYs [ i +1 ]))
{ intersections [K ] = i ; K + + ;}
}
/ * В переменные startI и endI будем записывать углы в градусах , что является началом и концом соответственно каждого диапазона с изолированными корнями , для избежания возможности непопадания корня в диапазон его пределы устанавливаем " с запасом " : если угол в градусах есть больше 0 , то нижнего предела принимаем предварительное рассмотрен значение угла ; верхний предел устанавливаем аналогично * /
int startI , endI ;
for ( int i = 0 ; i < K ; i + +) {
( intersections [ i ] > 0) ? ( startI = intersections [ i ] -1 ) : ( startI = intersections [ i ] ) ;
( intersections [ i ] < ( N - 1 )) ? ( endI = intersections [ i ] + 1): ( endI = intersections [ i ] ) ;
/ * Для нахождения корня вызываем функцию findIntersection , которой передаем пределы диапазона , значение константы PI и радыус круга * /
cout << " bestAngle : " << " \ t " ;
double bestAngle = findIntersection ( startI , endI , PI , cR ) ;
/ * Выводим на экран значение угла α , при котором есть пересечение окружности с параболой , и координаты х , y соответствующей точки * /
cout << bestAngle << " rad = " << bestAngle * ( 180/PI ) << " grad " << endl ;
cout << " best value of X : " << cR * cos ( bestAngle ) << endl ;
cout << " sin : " << cR * sin ( bestAngle ) << " \ t " << " x ^ 2: " << ( cR * cos ( bestAngle ) ) * ( cR * cos ( bestAngle )) ;
cout << endl ;
}
_getch ();
}
double findIntersection ( int startI , int endI , double PI , int cR ) {
int points = 1000 ; / / количество узлов
/ * В переменную bestResidual будем записывать так называемую " невязку " - модуль разности между значением y = Rsinα и y = x2 ; очевидно , что наименьшему значению bestResidual соответствует значение угла , при котором значение х наиболее приближено к истинному корня уравнения y = Rsinα и y = x2 * /
double cX , cY , fY , bestResidual = 100 , bestAngle = -1 , step = ( PI/180 ) * ( endI - startI ) / points ;
for ( double angle = startI * PI/180 ; angle < endI * PI/180 ; angle + = step ) {
cX = cR * cos ( angle ) ;
cY = cR * sin ( angle ) ;
fY = cX * cX ;
if ( fabs ( cY - fY ) < bestResidual )
{
bestResidual = fabs ( cY - fY ) ;
bestAngle = angle ;
}
}
return bestAngle ;
}
Спасибо всем кто не прошел мимо. Буду очень благодарен всем кто отозвался.

Добавлено через 9 часов 53 минуты
Пожалуйста!

Добавлено через 24 минуты
Разве никто не знает как это сделать!? отзовитесь пожалуйста форумчани и программисты(
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2014, 16:44
Ответы с готовыми решениями:

Математическая задача
Добрый вечер! Снова прошу у вас помощи с программой. Выдает ошибку при запуске. И ещё её нужно...

Математическая задача
Очень нужна ваша помощь, у меня затруднение при написании одной из функций. Не могу правильно...

Математическая задача
Сумма 1+\sum_{n=1}^{\propto}\frac{{3}^{n}\prod_{i=1}^{n}(2i-1)}{\prod_{j=1}^{n}2j} Промежуток...

Математическая задача в С++
мат Задача помогите решить в С++ : s=cos(x) + (cos(x))/2 + ... + (cos(x)*n)/n^2 ; 0.2&lt;=X&lt;=0.8 ;...

8
4047 / 3301 / 923
Регистрация: 25.03.2012
Сообщений: 12,384
Записей в блоге: 1
26.01.2014, 17:39 2
Поставь там где fY= и ещё где fYs[i]= вместо синуса формулу параболы!
1
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 24
26.01.2014, 17:50  [ТС] 3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Поставь там где fY= и ещё где fYs[i]= вместо синуса формулу параболы!
А можно подробнее, и как сформулировать формулу синусоиды?
0
4047 / 3301 / 923
Регистрация: 25.03.2012
Сообщений: 12,384
Записей в блоге: 1
26.01.2014, 18:19 4
А ты в каком классе учишься?
0
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 24
26.01.2014, 19:50  [ТС] 5
Универ 1 курс. Но как и куда вставить формулу не понимаю.
0
Kuzia domovenok
26.01.2014, 20:03
  #6

Не по теме:

На однокурсников посмотри! Им стыдно, что к ним, к будущим программистам, поступил человек, не освоивший полностью школьную алгебру!

0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
26.01.2014, 20:14 7
Лучший ответ Сообщение было отмечено Vladuslav_11 как решение

Решение

Цитата Сообщение от Vladuslav_11 Посмотреть сообщение
А можно подробнее, и как сформулировать формулу синусоиды?
парабола y={x}^{2} или по другому y = x*x:
строчки 22: fYs [ i ] = ( cXs [ i ] ) * ( cXs [ i ] ) ;
строчка 56: fY = cX * cX ;
синусоида y=a*cos(x), где a - амплитуда (по-умолчанию 1). - тригонометрия 8 класс
1
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 24
26.01.2014, 22:21  [ТС] 8
Цитата Сообщение от mustimur Посмотреть сообщение
парабола y={x}^{2} или по другому y = x*x:
строчки 22: fYs [ i ] = ( cXs [ i ] ) * ( cXs [ i ] ) ;
строчка 56: fY = cX * cX ;
синусоида y=a*cos(x), где a - амплитуда (по-умолчанию 1). - тригонометрия 8 класс
т.е

строчка 22: fYs[i] = (cos(cXs[i]));
строчка 56: fY = cos(cX);
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
26.01.2014, 22:25 9
Лучший ответ Сообщение было отмечено Vladuslav_11 как решение

Решение

ну или на sin(cX) и на sin(cXs[i]) это я тут что то задумался))
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2014, 22:25
Помогаю со студенческими работами здесь

Математическая задача и паллиндром
Просьба помочь в решении этих задач (задачи, неверное решение и замечания к нему в файле ниже): ...

необычная математическая задача
Добрый день, есть интересная задача. Прикрепил на скриншоте. Кроме этих данных к сожалению ничего...

Математическая задача
Что не так с этим кодом? #include &lt;stdio.h&gt; #include &lt;math.h&gt; int main(void) { double x; ...

Математическая задача
Помогите пожалуйста сделать программу для расчета задачи №2


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru