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

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

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

Неполучается сделать цикл для алгоритма Форель - C++

03.12.2013, 22:53. Просмотров 351. Ответов 0
Метки нет (Все метки)

Пытаюсь реализовать алгоритм ФОРЕЛЬ.
Вот что пока есть. Знаю позор это все(
Нужно сделать чтобы числа вводились либо вручную либо подгружались с файла excel.
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
#include <math.h>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
double x[5]={0.5,1,1.5,10,12.5}, y[5]={1.5,0.5,1,7,9};
 
cout<<"          X    Y"<<endl;
for(int i=0;i<5;i++)
{
cout<<"Объект"<<i<<"  "<<x[i]<<"    "<<y[i]<<endl;
}
 
double maxX,maxY;
double minX=maxX=x[0], minY=maxY=y[0];
for (int i=1;i<5;i++)
{
   if (minX>x[i])//минимум х
      minX=x[i];
   if (maxX<x[i])//максимум х
      maxX=x[i];
   if (minY>y[i])//минимум y
      minY=y[i];
   if (maxY<y[i])//максимум y
      maxY=y[i];
}
 
double R0,R1,k;
cout<<"Введите множитель(от 0 до 1) k=";
cin>>k;
R0=pow((maxX-minX)*(maxX-minX)+(maxY-minY)*(maxY-minY),0.5)/2;//общий радиус
R1=R0*k;//радиус группы вместо 0.3 можно использовать переменную k запрет ввода чисел больше 1 и отрицательных
cout<<"Нахождение общего радиуса R0"<<endl;
cout<<"R0="<<R0<<endl;
cout<<"Радиуса для классов R1=R0*k"<<endl;
cout<<"R1="<<R1<<endl;
cout<<endl;
cout<<"Нахождене длины L от Объект2 ("<<x[1]<<":"<<y[1]<<") обозначим номер точки Ti";
//Рандомный выбор точки из массива
double d[5];
for (int i=0;i<5;i++)
{
d[i]=abs(pow((x[1]-x[i])*(x[1]-x[i])+(y[1]-y[i])*(y[1]-y[i]),0.5));
}
cout<<endl;
 
 
for(int i=0;i<5;i++)
{
cout<<"L(Т"<<i<<")="<<d[i]<<endl;
}
cout<<endl;
 
 
int x1[5];
for(int i=0;i<5;i++)
{
if (R1>=d[i]) x1[i]=1,cout<<"Класс1: "<<x[i]<<" : "<<y[i]<<endl;
else if (R1<=d[i]) x1[i]=0;
}
 
 
 
cout<<"Находим центр тяжести для найденного класса:"<<endl;
//Среднее арифметическое X и Y и получем координаты центра тяжести
int z;
z=0;
for(int i=0;i<5;i++)
{
   z+=x1[i];
}
double Cx=0,Cy=0;
for(int i=0;i<5;i++)
{
Cx+=x[i]*x1[i];
Cy+=y[i]*x1[i];
}
Cx=Cx/z;
Cy=Cy/z;
cout<<"Центр тяжести(координаты)= "<<Cx<<":"<<Cy<<endl;
double d1[4];
d1[0]=abs(pow((Cx-x[0])*(Cx-x[0])+(Cy-y[0])*(Cy-y[0]),0.5));
d1[1]=abs(pow((Cx-x[2])*(Cx-x[2])+(Cy-y[2])*(Cy-y[2]),0.5));
d1[2]=abs(pow((Cx-x[3])*(Cx-x[3])+(Cy-y[3])*(Cy-y[3]),0.5));
d1[3]=abs(pow((Cx-x[4])*(Cx-x[4])+(Cy-y[4])*(Cy-y[4]),0.5));
cout<<endl;
system("pause");
return 0;
}
Алгоритм пока реализован не до конца, но это пока не главное нужно сделать ввод заданного числа элементов в цикле, и обрабатывать их в не зависимости от введенного количества.

Вот список шагов реализуемых алгоритмом.

Шаг 1. Построить гиперсферу радиуса охватывающую все множество точек:

Шаг 2. Установить радиус гиперсферы и перенести центр сферы в любую из внутренних точек (расстояние до которых меньше радиуса):

Шаг 3. Вычислить новый центр тяжести и перенести в него центр сферы:

Шаг 4. Если новый центр тяжести отличается от предыдущего необходимо вернуться к шагу 2 и повторить цикл. Цикл будет повторяться до тех пор пока центр тяжести не перестанет смещаться. Таким образом, центр сферы перемещается в область локального сгущения точек. В предложенном примере центр сферы , поэтому: необходимо установить новый радиус сферы и перенести центр сферы в произвольную внутреннюю точку:

Шаг 5. Вычислить новый центр тяжести и перенести в него центр сферы. Новый центр тяжести , поэтому внутренние точки текущей сферы объединяются в таксон:

Шаг 6. Точки принадлежащие новому таксону исключаются из анализа и работа алгоритма повторяется с шага №1. И так до тех пор пока все точки не будут исключены из анализа:


Заранее спасибо за ответ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2013, 22:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Неполучается сделать цикл для алгоритма Форель (C++):

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

Сортировка.Алгоритм Форель - C++
Помогите никак не могу написать нормальный код для оператора min,max. Поиск по всему массиву минимального и максимального числа...

Неполучается создать процесс - C++
Привет! Такая проблема возникла. В Visual C++ 2010 неполучается создать процесс. CreateProcess(argv,0,0,0,0,0,0,0,&amp;sui,&amp;pi); Пишет,...

уравнение , пробывал но неполучается сделать - Комбинаторика
помогите решить, раньше знал её а теперь мучаюсь.

Неполучается сделать ввод из файла - VBA
Option Explicit Sub ResInTheMessageBox() Dim A A = Array(-6, 667, 122, 4, 0, -1) 'одномерный массив MsgBox...

Решил сделать игровой автомат сделал три лейбла и в них запихнул цикл из чисел. Как сделать что бы цикл остано - Delphi
Решил сделать игровой автомат сделал три лейбла и в них запихнул цикл из чисел. Как сделать что бы цикл остановился.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2013, 22:53
Привет! Вот еще темы с ответами:

Как сделать визуализацию для алгоритма муравья? - C# WPF
Доброго времени суток! Задача: пишу алгоритм муравья. Подскажите, где можно сделать визуализацию? Есть привязка к координатам,...

Как сделать цикл для функций? - Python
Всем привет! Вопрос следующий. Имеется функция, которая читает данные из файла. Вот она: def getfreq(): freq =...

Сделать цикл для перебора элемента массива - VBA
Добрый день. Помогите, пожалуйста, с проблемой. Ни разу не сталкивался с VB, не судите строго если есть косяки. Проблема такова: есть...

Сделать цикл для вывода значений Фибоначчи - Java SE
Помогите сделать цикл выводящий 100 первых значений Фибоначчи!!! Добавлено через 26 минут должно выводить числа в такой ...


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

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

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