Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Anvar_Ibragimov
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 9
1

Найти отрезок, лежащий целиком в наибольшем количестве окружностей

06.07.2016, 17:59. Просмотров 360. Ответов 8
Метки нет (Все метки)

Дано множество окружностей. Найти отрезок, концами которого являются точки из множества Т и который лежит целиком в наибольшем количестве окружностей.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2016, 17:59
Ответы с готовыми решениями:

Найти max элемент массива 4 х 4, лежащий выше главной диагонали
Помогите пожалуйста) По лабе надо сделать: Найти max элемент массива 4 х 4,...

Найти минимальный элемент матрицы, лежащий выше побочной диагонали
Программисты, нужна помощь. Код программа выводит ошибку (expected...

Найти минимальный элемент матрицы, лежащий выше побочной диагонали
Доброго времени суток, нужна ваша помощь. Нужно написать программу, которая...

Для матрицы M[5][5] найти минимальный элемент лежащий выше побочной диагонали
Для матрицы M найти минимальный элемент лежащий выше побочной диагонали и...

Даны координаты центров n окружностей и их радиусы. Определить число пересекающихся окружностей
Допуск к экзамену в субботу а не решено еще 5 заданий по С++ 1.Даны...

8
ura_111
14 / 16 / 8
Регистрация: 21.05.2016
Сообщений: 48
06.07.2016, 18:53 2
Ты хочешь что бы за тебя сделали? Или готов подключится к работе?
Твоё знания С++ какое?
0
Anvar_Ibragimov
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 9
06.07.2016, 19:12  [ТС] 3
Да нужен код программы. Если что готов подключится к работе
0
DarkVortex
103 / 69 / 19
Регистрация: 07.07.2014
Сообщений: 240
06.07.2016, 19:19 4
Цитата Сообщение от Anvar_Ibragimov Посмотреть сообщение
Если что готов подключится к работе
Ну так начинай
0
ura_111
14 / 16 / 8
Регистрация: 21.05.2016
Сообщений: 48
06.07.2016, 19:24 5
Хорошо. Для начала нарисуй (можешь в Paint, можешь от руки) как ты понимаешь задание.
Кстате ты не ответил о твоём уровне С++.
0
Anvar_Ibragimov
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 9
06.07.2016, 19:43  [ТС] 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct point
{ float x;
  float y; };
 
struct okr
{ point c;
  float r; };
 
struct otr
{ point a;
  point b; };
 
otr  *o
okr *e
 
float dlin(float x1, float x2, float y1, float y2)
{return (sqrt((x1-x2), 2) + sqrt((y1-y2), 2));}
 
for( i=0;i<n;n++){
for( k=0;k<m;m++){
for( j=k+1;j<n;j++){
 
if ((dlin(e[i].centr,o[j])<e[i].r) && dlin(e[i].centr,o[j])<e[i].r) // условие нахождения отрезка в окружности
это все очень примерно )
0
ura_111
14 / 16 / 8
Регистрация: 21.05.2016
Сообщений: 48
06.07.2016, 19:56 7
Обьясни мне что такое множество Т (массив int)? Окружности пересекаются? Концы отрезка - это просто все комбинации перебрать из Т? Как задаются окружности? Вы учили динамическое распределение памяти?

Посмотри пример, что там что:

0
Anvar_Ibragimov
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 9
06.07.2016, 22:04  [ТС] 8
Т массив данных для отрезков как и для окружностей которые мы вводим
Окружности могут быть любыми и пересекаться тоже могут
Перебегаем все точки подряд
Окружности задаются через
0
ura_111
14 / 16 / 8
Регистрация: 21.05.2016
Сообщений: 48
07.07.2016, 02:26 9
Прежде чем анализировать мою программу познакомится с теорией пересечения прямой и окружности (ведь тебе придется тестировать и в случае необходимости поправлять программу):

Окружность и прямая

Перебор прямых вот так осуществляется:



Результат работа программы:






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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <iostream>
#include <math.h>
#include <ctime>    // Для случайно генерирования чисел
#include <iomanip>  // Для случайно генерирования чисел
using namespace std;
 
bool PERESECHENIE(int x1, int y1, int x2, int y2, int x0, int y0, double r);
 
struct POINT
{
    int x;
    int y;
};
 
struct OKR
{
    int x;
    int y;
    double r;
};
 
int main()
{
    int N_okr, N_T;
    int S, max = 0;
 
    cout << "Vvetite kol-vo okruchnostei: ";
    cin >> N_okr;
    cout << "Vvetite kol-vo elementov T: ";
    cin >> N_T;
 
    OKR *okr = new OKR[N_okr];  // Выделение памяти под массив окружностей
    POINT *T = new POINT[N_T];  // Выделение памяти под массив точек Т
 
    srand(time(0));
 
    cout << "\nOkruchnosti:";
    cout << "\n  X   Y   R\n";
    for (int i = 0; i < N_okr; i++)  // Заполнение случайно массив окружностей (у нас поле 100*100)
    {
        okr[i].x = rand() % 100;
        okr[i].y = rand() % 100;
        okr[i].r = rand() % 100;    
        cout << setw(3) << okr[i].x << setw(4) << okr[i].y << setw(4) << okr[i].r << endl;
    }
 
    cout << "\nMassiv T:";
    cout << "\n  X   Y\n";
    for (int i = 0; i < N_T; i++)  // Заполнение случайно массив Т (у нас поле 100*100)
    {
        T[i].x = rand() % 100;
        T[i].y = rand() % 100;
        cout << setw(3) << T[i].x << setw(4) << T[i].y << endl;
    }
    
    cout << "\nKol-vo peresechenui:";
    cout << "\n Tochka1   Tochka2  Kol peresech\n";
    for (int i = 0; i < N_T; i++)          // Индекс массива T[i] для 1-й точки 
    {
        for (int j = i + 1; j < N_T; j++)  // Индекс массива T[i] для 2-й точки 
        {
            S = 0;
            for (int k = 0; k < N_okr; k++) // Перебор всех окружностей 
            {
                if (PERESECHENIE(T[i].x, T[i].y, T[j].x, T[j].x, okr[k].x, okr[k].y, okr[k].r) == true)
                {
                    S = S + 1;
                }               
            }
            cout << setw(2) << "(" << setw(2) << T[i].x << "," << setw(2) << T[i].y << ")" << setw(4) << "(" << setw(2) << T[j].x << "," << setw(2) << T[j].y << ") " << setw(7) << S << endl;
            if (max < S)
            {
                max = S;
            }
        }
    }
    
    cout << "\nMax peresechenui: " << max << endl;
    
    cout << "\n Tochka1   Tochka2  Kol peresech\n";
    for (int i = 0; i < N_T; i++)          // Индекс массива T[i] для 1-й точки 
    {
        for (int j = i + 1; j < N_T; j++)  // Индекс массива T[i] для 2-й точки 
        {
            S = 0;
            for (int k = 0; k < N_okr; k++) // Перебор всех окружностей 
            {
                if (PERESECHENIE(T[i].x, T[i].y, T[j].x, T[j].x, okr[k].x, okr[k].y, okr[k].r) == true)
                {
                    S = S + 1;
                }
            }
            if (S == max)
            {
                cout << setw(2) << "(" << setw(2) << T[i].x << "," << setw(2) << T[i].y << ")" << setw(4) << "(" << setw(2) << T[j].x << "," << setw(2) << T[j].y << ") " << setw(7) << S << endl;
            }
        }
    }
 
    cout << "\n";
    delete[] okr;
    delete[] T;
    system("pause");
    return 0;
}
 
bool PERESECHENIE(int x1, int y1, int x2, int y2, int x0, int y0, double r)
{
    double k = (y2 - y1) / (x2 - x1);
    double b = (y2*x1 - y1*x2) / (x1 - x2);
    b += (k*x0 - y0);
    double D = pow(2 * b*k, 2) + 4 * (1 + pow(k, 2))*(pow(r, 2) - pow(b, 2));
    if (0 <= D) // Если дискременант положителен, то прямая пересекается с окружностью
    {
        return true;
    }
    return false;
}

Протестируй программу, "сравни с расчетом в ручную".

Добавлено через 25 минут
А и ещё. Посмотри на текст программы и скажи, что Вы учили, что нет. Может нужно упростить или наоборот усложнить программу.
0
07.07.2016, 02:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2016, 02:26

Матрицы.Найти, сколько отрицательных элементов содержит данная матрица в каждом столбце,а также максимальный элемент,лежащий на главной диагонали
Привет всем.Такое вот задание: Найти, сколько отрицательных элементов содержит...

Найти отрезок в массиве.
Дан массив состоящий из N чисел , найти тот отрезок элементов сумма которого...

Найти самый длинный отрезок
длины отрезка заданы координатами концов.найти самый длинный отрезок.решить с...


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

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

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