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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Две матрицы размером 5 * 5. Найти детерминант их суммы, а также наименьшие и наибольшие элементы http://www.cyberforum.ru/cpp-beginners/thread1081640.html
Так сложилось что в понедельник нужно сдать эту лабораторную работу иначе меня исключат из университета, а так как я не очень разбираюсь с массивами то у меня большая проблема. Пожалуйста помогите неопытному студенту решить эту задачу. p.s.\если не сложно то напишите комментарии к программе. Спасибо к отозвавшимся. C++ С клавиатуры задаются две матрицы размером 5 * 5. Найти детерминант их...
C++ Размер массива Здрасте. Такой вопрос.Можно ли каким то образом вывести число элементов массива,то есть его размер? Допустим int arr; Программа должна вывести размер "5". http://www.cyberforum.ru/cpp-beginners/thread1081638.html
C++ Число изъять из множества А, если оно является элементом множества А, но не является элементом множества В
Введено с клавиатуры число изъять из множества А, если оно является элементом множества А, но не является элементом множества В. Пожалуйста помогите написать программу! На С++, буду очень признателен и благодарен откликнувшимся программистам. Спасибо за внимание.
C++ Функции работы с потоками
На WInAPI есть функции приостановление и восстановление потоков - SuspendThread() и ResumeThread() Вопрос:есть ли что нибудь подобное в стандартной библиотеки C++?
C++ Табулирование функции и cout.precision(2) http://www.cyberforum.ru/cpp-beginners/thread1081599.html
зачем здесь добавляют 0.75??? нужно протаболюваты функцию 2cosx krok= pi/4; #include<>.... void main() { ofstream tabfile("tabul.txt",ios::out); const float pi=3.1415926; float x=-p , h=pi/4,y,max,xmax;
C++ Контейнер unordered_map, содержащий потоки постановка задачи: есть некий класс Item class Item { private: int id; string text; public: Item() { подробнее

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

Суть задачи такова:
С клавиатуры вводится радиус окружности с центром в начале координат. Найти координаты точек пересечения окружности с синусоидой на промежутке от 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 минуты
Разве никто не знает как это сделать!? отзовитесь пожалуйста форумчани и программисты(
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 19:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru