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

Фигура из квадратов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Массив ( ввод массива пользователем ) http://www.cyberforum.ru/cpp-beginners/thread182085.html
Нужен такой код , чтоб пользователь сам вводил элементы массива ! Добавлено через 2 минуты Можно только тело программы ..
C++ Заменить все элементы с отрицательными значениями средним арифметическим значением всех положительных элементов. Заданный массив из 10 элементов. Массив Вы можем вводить одним из 2 способов: • с клавиатуры с помощью cin); • генерируя случайным образом. Заменить все элементы с отрицательными значениями средним арифметическим значением всех положительных элементов. http://www.cyberforum.ru/cpp-beginners/thread182071.html
длина массива C++
напишите пожалуйста программу которая бы выполняла ввод 10 значений в массив и дальнейший расчот длины этого массива.. очень надо..
C++ timer c++
Здравствуйте. У меня возникла проблема с таймерами в c++, не получается их реализовать. Есть объект А, в нем содержится таймер, и переменная равная 0. Когда счетчик на таймере (допустим) >= 10 секундам, переменная меняет значение на 1. Я пересмотрел несколько вариантов алгоритмов с таймерами, самый простой это функция Sleep(), но она не подходит для решения. А в остальных просто не могу...
C++ Compile http://www.cyberforum.ru/cpp-beginners/thread182037.html
Здравствуйте. Сорри возможно за повторную тему, пользовался поиском но не нашел что нужно. Подскажите пожалуйста с помощью какой программы лучше компилировать в .exe файлы?
C++ Создание заголовочного файла хочу создать создать заголовочный файл как нам объяснили, но с почему-то выдает такую ошибку Ошибка 3 error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "StdAfx.h"" в источник. c:\users\астемир\documents\visual studio 2010\projects\первый опыт\первый опыт\ins_sort.cpp 16 вот сама пробная пр. она... подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2796 / 1572 / 246
Регистрация: 03.05.2010
Сообщений: 3,649
27.10.2010, 22:21     Фигура из квадратов
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
////////////////////////////////////////////////////////////////////////////////////
//Даны действительные числа а1,в1,с1,а2,в2,с2,...аn, вn,cn. Эта последовательность 
//определяет на плоскости n квадратов со сторонами, параллельными осям: 
//аi, вi- координаты центра квадрата, сi-длина его стороны (i=1,...n).
//Определить площадь фигуры, образованной всеми квадратами.
////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <deque>
#include <iostream>
#include <functional>
#include <limits>
#include <numeric>
#include <set>
#include <vector>
////////////////////////////////////////////////////////////////////////////////////
typedef double  T_len;
////////////////////////////////////////////////////////////////////////////////////
template<class T>
bool  equal_to_for_real(T a, T b) 
{
    const T  coef = 10;
    return abs(a - b) < std::numeric_limits<T>::epsilon() * coef;
}
/////////////////////////////////////////////////////////////////////////////////////
template<class T>
bool  greater_for_real(T a, T b) 
{
    return a > b
           && !equal_to_for_real(a, b);
}
/////////////////////////////////////////////////////////////////////////////////////
template<class T>
bool  less_for_real(T a, T b) 
{
    return a < b
           && !equal_to_for_real(a, b);
}
/////////////////////////////////////////////////////////////////////////////////////
template<class T>
bool  greater_equal_for_real(T a, T b) 
{
    return !less_for_real(a, b);
}
/////////////////////////////////////////////////////////////////////////////////////
template<class T>
bool  less_equal_for_real(T a, T b) 
{
    return !greater_for_real(a, b);
}
/////////////////////////////////////////////////////////////////////////////////////
template<class T>
struct T_less_for_real
{
    bool  operator() (T a, T b) 
    {
        return less_for_real(a, b); 
    }
};
/////////////////////////////////////////////////////////////////////////////////////
typedef  std::set<T_len, T_less_for_real<T_len> >  T_vertices_coord_set;
/////////////////////////////////////////////////////////////////////////////////////
class  T_square
{
    //------------------------------------------------------------------------------    
    T_len  c_X_;
    T_len  c_Y_;    
    T_len  a_;
    //------------------------------------------------------------------------------
public:
    T_square
        (
            T_len  c_X,
            T_len  c_Y,    
            T_len  a
        ) 
        : c_X_(c_X), c_Y_(c_Y), a_(a)
    {}
    //------------------------------------------------------------------------------
    T_len  X_min() const
    {
        return c_X_ - a_ / 2.0;  
    }
    //------------------------------------------------------------------------------
    T_len  X_max() const
    {
        return c_X_ + a_ / 2.0;  
    }
    //------------------------------------------------------------------------------
    T_len  Y_min() const
    {
        return c_Y_ - a_ / 2.0;  
    }
    //------------------------------------------------------------------------------
    T_len  Y_max() const
    {
        return c_Y_ + a_ / 2.0;  
    }
    //------------------------------------------------------------------------------   
};
////////////////////////////////////////////////////////////////////////////////////
typedef  std::vector<T_square>  T_squares;
////////////////////////////////////////////////////////////////////////////////////
T_len  get_area_total(const T_squares&  squares)
{    
    //Разграфим всю плоскость горизонтальными и вертикальными линиями, проходящими
    //через вершины заданных квадратов.
    T_vertices_coord_set  X_coord_set;
    T_vertices_coord_set  Y_coord_set;
 
    for(T_squares::const_iterator  square_it = squares.begin();
        square_it != squares.end(); ++square_it)
    {       
        X_coord_set.insert(square_it->X_min());
        X_coord_set.insert(square_it->X_max());
 
        Y_coord_set.insert(square_it->Y_min());
        Y_coord_set.insert(square_it->Y_max());        
    }    
 
    //Заполним векторы разностями соседних значений  множеств координат.
    typedef std::vector<T_len>  T_difference_coordinates;
 
    T_difference_coordinates  X_diff_coord;    
    std::adjacent_difference(X_coord_set.begin(), X_coord_set.end(), 
                             std::back_inserter(X_diff_coord));
 
    T_difference_coordinates  Y_diff_coord;
    std::adjacent_difference(Y_coord_set.begin(), Y_coord_set.end(), 
                             std::back_inserter(Y_diff_coord));
 
    //Удаляем в векторах первые элементы, так как разности начинаются со второго элемента.
    X_diff_coord.erase(X_diff_coord.begin());
    Y_diff_coord.erase(Y_diff_coord.begin());
 
    //Очевидно, что каждая клетка полученной решетки либо целиком принадлежит 
    //искомой фигуре, либо целиком не принадлежит. Для подсчета искомой площади
    //остается только пройтись по всем клеткам решетки и сложить площади клеток,
    //которые принадлежат хотя бы одному квадрату. Будем считать, что клетку 
    //описывает ее левая нижняя вершина. Заполняем решетку значениями false.
    typedef std::deque<bool>    T_row;
    typedef std::vector<T_row>  T_matr;        
    T_matr  matr(X_diff_coord.size(), T_row(Y_diff_coord.size()));
    
    T_len  area_total = 0;
    //Пробегаемся по всем квадратам:
    for(T_squares::const_iterator  square_it = squares.begin();
        square_it != squares.end(); ++square_it)
    {       
        //Обходим все клетки решетки, принадлежащие текущему квадрату, и, если 
        //в клетке false, вписываем туда true и прибавляем площадь клетки к общей сумме.
        int X_ind_begin 
            = std::distance(X_coord_set.begin(), X_coord_set.find(square_it->X_min()));
 
        int X_ind_end 
            = std::distance(X_coord_set.begin(), X_coord_set.find(square_it->X_max()));
 
        int Y_ind_begin 
            = std::distance(Y_coord_set.begin(), Y_coord_set.find(square_it->Y_min()));
 
        int Y_ind_end 
            = std::distance(Y_coord_set.begin(), Y_coord_set.find(square_it->Y_max()));
 
        for(int X_ind = X_ind_begin; X_ind != X_ind_end; ++X_ind)
        {
            for(int Y_ind = Y_ind_begin; Y_ind != Y_ind_end; ++Y_ind)
            {
                if(!matr[X_ind][Y_ind])
                {
                    matr[X_ind][Y_ind] = true;
                    area_total += X_diff_coord[X_ind] * Y_diff_coord[Y_ind];
                }
            }        
        }
    }
    return area_total;
}
////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));    
    int n = 0;
    do
    {
        std::cout << "Введите количество квадратов > 0: ";
        std::cin >> n;
    }while(n <= 0);    
 
    std::cout << "Введите параметры для "
              << n
              << " квадратов:"
              << std::endl;
    T_squares  squares;
    for(int i = 0; i < n; ++i)
    {
        std::cout << std::endl
                  << "Квадрат # "
                  << i + 1
                  << ":"
                  << std::endl
                  << '\t'
                  << "координаты центра: "
                  << std::endl
                  << '\t'
                  << '\t'
                  << " c_X = ";
        T_len c_X = 0;
        std::cin >> c_X;
        std::cout << '\t'
                  << '\t'
                  << " c_Y = ";
        T_len c_Y = 0;
        std::cin >> c_Y;
 
        std::cout << '\t'
            << "длина стороны: ";
        T_len a = 0;
        std::cin >> a; 
        squares.push_back(T_square(c_X, c_Y, a));
    }
    std::cout << "Площадь фигуры, образованной всеми квадратами равна: "
              << get_area_total(squares)
              << std::endl;
}
 
Текущее время: 04:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru