Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
1 / 1 / 1
Регистрация: 26.10.2010
Сообщений: 27

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

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

Студворк — интернет-сервис помощи студентам
Даны действительные числа а1,в1,с1,а2,в2,с2,...аn, вn,cn. Эта последовательность определяет на плоскости n квадратов со сторонами, параллельными осям: аi, вi- координаты центра квадрата, сi-длина его стороны (i=1,...n).Определить площадь фигуры, образованной всеми квадратами.
Помогите пожалуйста, буду очень благодарен.....
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.10.2010, 21:01
Ответы с готовыми решениями:

Подсчитать сумму квадратов четных и сумму квадратов нечетных элементов массива
Сформировать в программе массив из целых чисел от 2 до N. Подсчитать сумму квадpатов четных и сумму квадратов нечетных чисел.

Приложение, которое строит ряд квадратов. Центр квадратов совпадает с центром экрана
Напишите приложение, которое строит ряд квадратов. Центр квадратов совпадает с центром экрана. Число квадратов задается при первом ...

Есть ли четыре последовательных числа, сумма квадратов которых равна сумме квадратов трёх следующих чисел.
Определить, существуют ли такие четыре последовательных натуральных числа, сумма квадратов которых равна сумме квадратов трёх следующих...

5
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
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;
}
2
1 / 1 / 1
Регистрация: 26.10.2010
Сообщений: 27
28.10.2010, 20:29  [ТС]
Все хорошо, только у меня версия С++ 3.1 и этот синтаксис не работает, и для меня он сложен для понимания, напишите используя библиотеки <stdio.h> и print и scanf

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



Не по теме:

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

0
30.10.2010, 07:34  [ТС]

Не по теме:

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

0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
30.10.2010, 09:59
Berens, Manuelle, подобные вопросы обсуждайте вне тем.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.10.2010, 09:59
Помогаю со студенческими работами здесь

Найти 4 последовательных натуральных числа, сумма квадратов которых равна сумме квадратов трех следующих чисел
Найти такие четыре последовательных двузначных натуральных числа, сумма квадратов которых равна сумме квадратов трех следующих чисел.

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

На прямоугольнике размещено максимально возможное количество квадратов. Найти количество квадратов и площадь незанятой части прямоугольника
1.Даны целые положительные числа A,B,C. На прямоугольнике размером A х B размещено максимально возможное количество квадратов со стороной C...

Найти количество комбинаций, в которых сумма квадратов разрядов минут равна сумме квадратов разрядов секунд
.Секундомер отмерял 6458 секунд. Найти количество комбинаций, в которых сумма квадратов разрядов минут равна сумме квадратов разрядов секунд

Найти константы аппроксимации, сумму квадратов отклонений и трехмерное отображение суммы квадратов отклонений
Подскажите пожалуйста:help::help::help:, кто знает, все ли правильно правильно:-' y = ' Нужно найти константы аппроксимации, сумму...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru