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

найти точку, принадлежащую - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ найти первые N целых чисел http://www.cyberforum.ru/cpp-beginners/thread426561.html
найти первые N целых чисел, у которых младший байт является зеркальным отражением следующего байта
C++ массивы сортировка простая сортировка обменами. напишите плиз.. http://www.cyberforum.ru/cpp-beginners/thread426560.html
Определить, можно ли в заданной матрице найти столбец, удовлетворяющий условию C++
Задача :Определить можно ли в двумерном массиве найти такой столбец, который разбивает массив на два так, что сумма элементов в первом больше, чем сумма элементов во втором. Сам столбец в разбиваемые...
C++ Ошибки в Code Blocks
Есть такая проблемка #include <iostream> using namespace std; int main() { int 1; int 2; int 4;
C++ Помогите исправить программу запись в файл http://www.cyberforum.ru/cpp-beginners/thread426536.html
Нужно записат в файл массив чисел от 100 до 300 заполнить случайным образом. В файл записываются одни символы. помогите исправить программу #include <iostream> #include <time.h> #include...
C++ Добавление и удаление элемента динамического массива Подскажите какие существую способы добавления и удалеия элемента одномерного динамического массива(переопределяя размер массива). Желательно не используя vector. есть вот такое вот:... подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
12.01.2012, 15:29
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/////////////////////////////////////////////////////////////////////////////////////////
//Дано множество отрезков на прямой. Найти точку, которая принадлежит наибольшему 
//количеству отрезков, определить это количество.
/////////////////////////////////////////////////////////////////////////////////////////
#include <complex>
#include <iostream>
#include <map>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
typedef double                          T_coord;
typedef std::complex    <T_coord>       T_segment;
typedef std::vector     <T_segment>     T_segments;
/////////////////////////////////////////////////////////////////////////////////////////
struct  T_counters
{    
    int  left_counter_;
    int  right_counter_;
    //-----------------------------------------------------------------------------------
    T_counters()
        :
        left_counter_   (),
        right_counter_  ()
    {}
};
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::map<T_coord, T_counters>   T_segm_end_points;
/////////////////////////////////////////////////////////////////////////////////////////
void  fill_segm_end_points
    (
        const T_segments&   segments,
        T_segm_end_points&  segm_end_points
    )
 
{
    for(
        T_segments::const_iterator  segm_it = segments.begin();
        segm_it != segments.end();
        ++segm_it
       )
    {
        ++segm_end_points[segm_it->real()].left_counter_;
        ++segm_end_points[segm_it->imag()].right_counter_;
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
void  get_max_segm_counter_and_max_segm_counter_point
    (
        const T_segments&   segments,
        int&                max_segm_counter,
        T_coord&            max_segm_counter_point    
    )
{
    T_segm_end_points  segm_end_points;
 
    fill_segm_end_points
        (
            segments,
            segm_end_points
        );
 
    int  cur_segm_counter = 0;
 
    for(
        T_segm_end_points::iterator  
        segm_end_point_it = segm_end_points.begin();
        segm_end_point_it != segm_end_points.end();
        ++segm_end_point_it
       )
    {
        cur_segm_counter += segm_end_point_it->second   .left_counter_;
        cur_segm_counter -= segm_end_point_it->second   .right_counter_;
 
        if(
                segm_end_point_it   ==  segm_end_points.begin()
            ||  cur_segm_counter    >   max_segm_counter
          )
        {
            max_segm_counter = cur_segm_counter;
            T_segm_end_points::iterator  next_it = segm_end_point_it;
            std::advance(next_it, 1);
            max_segm_counter_point = (segm_end_point_it->first + next_it->first) / 2.0;
        }
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
void  input_segments(T_segments&  segments)
{
    int  segments_total = 0;
    do
    {
        std::cout << "Введите количесто заданных отрезков на прямой: ";
        
        std::cin >> segments_total;    
    }while(segments_total <= 0);
 
    std::cout << "Введите координаты "
              << segments_total
              << " отрезков в виде (1.2,3.4):"
              << std::endl;
 
    segments.resize(segments_total);
    for(int  i = 0; i < segments_total;)
    {        
        std::cout << "\t#"
                  << i + 1
                  << ": ";
        
        std::cin >> segments[i];
        if( segments[i].real() < segments[i].imag() )
        {
            ++i;
        }
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    T_segments  segments;
 
    input_segments(segments);
    
    int         max_segm_counter        = 0;
    T_coord     max_segm_counter_point  = 0;
 
    get_max_segm_counter_and_max_segm_counter_point
        (
            segments,
            max_segm_counter,
            max_segm_counter_point
        );
 
    std::cout << "Наибольшему количеству отрезков ("
              << max_segm_counter
              << ") принадлежит точка "
              << max_segm_counter_point
              << "."
              << std::endl;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru