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

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

Восстановить пароль Регистрация
 
Vladuslav_11
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 24
26.01.2014, 16:44     Математическая задача на C++ #1
И снова я. Пожалуйста помогите переделать программу на нужную.

Суть задачи такова:
С клавиатуры вводится радиус окружности с центром в начале координат. Найти координаты точек пересечения окружности с синусоидой на промежутке от 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 минуты
Разве никто не знает как это сделать!? отзовитесь пожалуйста форумчани и программисты(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2014, 16:44     Математическая задача на C++
Посмотрите здесь:

Математическая задача C++
C++ Математическая ф-ия в Borland C 3.01
Математическая функция C++
C++ Математическая задача в С++
необычная математическая задача C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
26.01.2014, 17:39     Математическая задача на C++ #2
Поставь там где fY= и ещё где fYs[i]= вместо синуса формулу параболы!
Vladuslav_11
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 24
26.01.2014, 17:50  [ТС]     Математическая задача на C++ #3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Поставь там где fY= и ещё где fYs[i]= вместо синуса формулу параболы!
А можно подробнее, и как сформулировать формулу синусоиды?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
26.01.2014, 18:19     Математическая задача на C++ #4
А ты в каком классе учишься?
Vladuslav_11
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 24
26.01.2014, 19:50  [ТС]     Математическая задача на C++ #5
Универ 1 курс. Но как и куда вставить формулу не понимаю.
Kuzia domovenok
26.01.2014, 20:03
  #6

Не по теме:

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

mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
26.01.2014, 20:14     Математическая задача на C++ #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от 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 класс
Vladuslav_11
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 24
26.01.2014, 22:21  [ТС]     Математическая задача на C++ #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);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2014, 22:25     Математическая задача на C++
Еще ссылки по теме:

C++ Математическая константа Е
C++ Математическая задача
C++ Математическая задача и паллиндром

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

Или воспользуйтесь поиском по форуму:
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
26.01.2014, 22:25     Математическая задача на C++ #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
ну или на sin(cX) и на sin(cXs[i]) это я тут что то задумался))
Yandex
Объявления
26.01.2014, 22:25     Математическая задача на C++
Ответ Создать тему
Опции темы

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