Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Vladuslav_11
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 24
#1

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

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

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

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

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

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

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

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

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

Не по теме:

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

0
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
26.01.2014, 20:14 #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 класс
1
Vladuslav_11
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
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
26.01.2014, 22:25 #9
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
ну или на sin(cX) и на sin(cXs[i]) это я тут что то задумался))
1
26.01.2014, 22:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2014, 22:25
Привет! Вот еще темы с ответами:

Математическая функция - C++
Составить программу вычисления значения выражения: 1/3 +2 модуль(cos(x-Pi/6)) #include &lt;iostream.h&gt; #include &lt;conio.h&gt; ...

Математическая задачка - C++
В качестве f(x) использовать по выбору: sin(x), х , ех

Математическая ф-ия в Borland C 3.01 - C++
Помогите пожалуйста и объясните как описать математическую ф-ию в борланде: корень из(е в степени х -1) ?

Математическая константа Е - C++
Привет всем:) У меня трудности с математикой.Нужно вычислить константу Е по формуле &quot; е = 1 + 1/!1 + 1/!2 + 1/!3 и ...... Заранее спасибо:)...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.