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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.78
Berens
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 27
#1

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

26.10.2010, 21:01. Просмотров 2220. Ответов 5
Метки нет (Все метки)

Даны действительные числа а1,в1,с1,а2,в2,с2,...аn, вn,cn. Эта последовательность определяет на плоскости n квадратов со сторонами, параллельными осям: аi, вi- координаты центра квадрата, сi-длина его стороны (i=1,...n).Определить площадь фигуры, образованной всеми квадратами.
Помогите пожалуйста, буду очень благодарен.....
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2010, 21:01     Фигура из квадратов
Посмотрите здесь:

Геометрическая фигура - C++
Как , если дано уравнение двумя переменными, изобразить фигуру? Напишите код плиз, для уравнения y+x<3(|y|+x^2) Добавлено через 45...

Геометрическая фигура - C++
Постановка задачи. Разработать программу, которая выводит на экран геометрическую фигуру, заполняя ее символом ‘*’ или пробелом. Размер...

Фигура из символов - C++
Помогите пожалуйста доделать программу выводящую на экран ромб из указанного символа со стороной A вписанный в квадрат со стороной 2*A+1...

Класс фигура c++ - C++
Класс "фигура": координаты на шахматной доске, цвет. Метод - "ход" на одну позицию в одном из 4 направлений. Производные: "конь", "пешка"...

Класс фигура на плоскости - C++
Не получается сделать вот такую задачку, если кто сталкивался с таким, поделитесь( ток если можно чем проще вариант, тем лучше, т.е....

Шахматная фигура конь - C++
Шахматная фигура конь ходит на 1 клетку по горизонтали и на 2 клетки по вертикали или наоборот на 2 клетки по горизонтали и на 1 по...

Геометрическая фигура круг - C++
Здравствуйте, столкнулся с такой проблемой, задание такое, дан круг и точка, выявить, лежит ли точка в круге, на окружности, или вообще...

Является ли фигура ромбом. - C++
В чём ошибка?!!, предпоследняя строка Пишет вот что :error C2447: missing function header (old-style formal list?) ...

Геометрическая фигура и рейсы самолетов - C++
Всем доброго времени суток! Имеется следующая пара задачек по С++, т.к. я с ним совершенно не дружу, надеюсь на Вашу помощь. Заранее...

Определить, является ли фигура прямоугольником - C++
У меня имеется класс Rectangle, где имеется 4 координаты вершин (декартовы) в области первого квадранта от 0.0 до 20.0 ( по y и по х)....


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
3042 / 1687 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
27.10.2010, 22:21     Фигура из квадратов #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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;
}
Berens
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 27
28.10.2010, 20:29  [ТС]     Фигура из квадратов #3
Все хорошо, только у меня версия С++ 3.1 и этот синтаксис не работает, и для меня он сложен для понимания, напишите используя библиотеки <stdio.h> и print и scanf

Добавлено через 2 часа 22 минуты
То есть нужно написать именно на чистом СИ...
 Комментарий модератора 
Уточняйте язык всегда когда задаете вопрос, а не тогда, когда уже есть готовые ответы. Цените свое время и время пользователей, которые вам помогают
Manuelle
0 / 0 / 0
Регистрация: 30.10.2010
Сообщений: 5
30.10.2010, 01:58     Фигура из квадратов #4
Присоединяюсь к просьбе Berens'a.



Не по теме:

З.Ы. ИГЭУ-ИВТФ?

Berens
30.10.2010, 07:34  [ТС]
  #5

Не по теме:

Ага, а ты с какой группы?

NiTan
Покинул форум
3147 / 1329 / 50
Регистрация: 29.01.2010
Сообщений: 2,887
30.10.2010, 09:59     Фигура из квадратов #6
Berens, Manuelle, подобные вопросы обсуждайте вне тем.
Yandex
Объявления
30.10.2010, 09:59     Фигура из квадратов
Ответ Создать тему
Опции темы

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