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

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

26.10.2010, 21:01. Показов 3354. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru