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

Описать тип struct Square, задающий на плоскости замкнутый квадрат с центром в точке (x, y)

15.12.2013, 09:26. Показов 4006. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Описать тип struct Square, задающий на плоскости
замкнутый квадрат с центром в точке (x, y), длиной стороны a и
сторонами, параллельными координатным осям. Реализовать в
виде отдельных функций следующие операции над переменными
этого типа: а) вычисление площади квадрата; б) построение
квадратной оболочки для пары квадратов, т.е. наименьшего
квадрата, содержащего пару заданных квадратов; в) построение
для двух заданных квадратов наименьшего квадрата, содержащего
в себе их пересечение и имеющего центр в центральной точке
этого пересечения; г) построение квадрата по паре точек, одна из
которых задает центр, а другая лежит на границе квадрата; д) сдвиг
квадрата на плоскости на dx, dy вдоль осей абсцисс и ординат
соответственно; е) проверка внешнего касания двух квадратов; ж)
проверка принадлежности точки квадрату; з) проверка включения
одного квадрата в другой; и) проверка равенства двух квадратов. С
использованием описанных типа и функций разработать
программу, которая для заданного набора из N квадратов находит
1) площадь наибольшего из квадратов, содержащегося в
пересечении не менее трех других квадратов из заданного набора;
2) все пары квадратов, квадратные оболочки которых не содержат
в себе других квадратов из набора.
Как начать?Написать нужно на СИ.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.12.2013, 09:26
Ответы с готовыми решениями:

Описать тип struct Square
Описать тип struct Square, задающий на плоскости замкнутый квадрат с центром в точке (x, y), длиной стороны a и сторонами,...

Составьте уравнение сферы, с центром в точке О(3; –1; 2), касающейся плоскости х – 2у + 2z – 6 = 0
Составьте уравнение сферы, с центром в точке О(3; –1; 2), касающейся плоскости х – 2у + 2z – 6 = 0.

Bычислить расстояние от точки плоскости с кординатами X, Y до круга радиуса R с центром в точке X0, Y0.
Bычислить расстояние от точки плоскости с кординатами X, Y до круга радиуса R с центром в точке X0, Y0.

4
17 / 17 / 5
Регистрация: 06.12.2012
Сообщений: 46
15.12.2013, 10:49
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
typedef struct
{
    int x;
    int y;
} Point;
 
typedef struct
{
    Point org;
    Point end;
} Edge;
 
 
typedef struct {
    Point center;
    unsigned int length;
    Edge h_edge;
    Edge v_edge;
} Square;
вот так можно реализовать структуру, например
1
0 / 0 / 0
Регистрация: 15.05.2013
Сообщений: 17
15.12.2013, 10:52  [ТС]
Это,если я не ошибаюсь на C++, а как будет на СИ?
0
17 / 17 / 5
Регистрация: 06.12.2012
Сообщений: 46
15.12.2013, 20:11
C++
1
2
3
4
unsigned int area(Square square)
{
    return square.length * square.length;
}
это на Си

Добавлено через 9 часов 14 минут
вот еще развитие этого варианта

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
typedef struct
{
    int x;
    int y;
} Point;
 
typedef struct
{
    Point org;
    Point end;
} Edge;
 
 
typedef struct {
    Point center;
    unsigned int length;
    Edge l_edge;
    Edge r_edge;
    Edge t_edge;
    Edge b_edge;
} Square;
 
void init_point(Point *point, int x, int y)
{
    point->x = x;
    point->y = y;
}
 
void init_square(Square *square, Point center, unsigned int length )
{
    square->center = center;
    square->length = length;
 
    square->l_edge.org.x = center.x - length/2;
    square->l_edge.org.y = center.y - length/2;
    square->l_edge.end.x = center.x - length/2;
    square->l_edge.end.y = center.y + length/2;
 
    square->b_edge.org.x = center.x - length/2;
    square->b_edge.org.y = center.y + length/2;
    square->b_edge.end.x = center.x + length/2;
    square->b_edge.end.y = center.y + length/2;
 
    square->r_edge.org.x = center.x + length/2;
    square->r_edge.org.y = center.y + length/2;
    square->r_edge.end.x = center.x + length/2;
    square->r_edge.end.y = center.y - length/2;
 
    square->t_edge.org.x = center.x + length/2;
    square->t_edge.org.y = center.y - length/2;
    square->t_edge.end.x = center.x - length/2;
    square->t_edge.end.y = center.y - length/2;
}
 
unsigned int area(Square square)
{
    return (square.length * square.length);
}
1
0 / 0 / 0
Регистрация: 22.12.2018
Сообщений: 1
16.06.2021, 14:57
Понимаю, что данная тема уже не актуальна, но если найдется человек с точно таким же заданием как и у автора вопроса ,как и у меня, то пусть нижеприведённая программа ему поможет

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
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <math.h>
 
typedef struct
{
    float x;
    float y;
}Point;
 
typedef struct
{
    Point centre;//вложенная структура координат центра квадрата
    float leng;//длина стороны увадрата
}Square;
 
typedef struct
{
    Point lu, ld, ru, rd;
}Borders;
//функция, задающая границы квадрата
Borders ins_borders(Square x) 
{
    Borders borders;
    borders.lu.x = x.centre.x - x.leng / 2;
    borders.lu.y = x.centre.y + x.leng / 2;
 
    borders.ld.x = x.centre.x - x.leng / 2;
    borders.ld.y = x.centre.y - x.leng / 2;
 
    borders.ru.x = x.centre.x + x.leng / 2;
    borders.ru.y = x.centre.y + x.leng / 2;
 
    borders.rd.x = x.centre.x + x.leng / 2;
    borders.rd.y = x.centre.y - x.leng / 2;
 
    return borders;
}
 
//площадь - выполнено
float area(Square x)
{
    return x.leng * x.leng;
}
 
//квадратная оболочка 
Square Shell(Square x, Square y)
{
    Square sqre;
    Borders b1, b2;
    b1 = ins_borders(x);
    b2 = ins_borders(y);
 
    if (s_including(x, y))return y;
 
    if (s_including(y, x))return x;
 
    if (b1.ld.x < b2.rd.x)
    {
        sqre.leng = b2.rd.x - b1.ld.x;
        if (b1.ld.y <= b2.rd.y) 
        {
            sqre.centre.x = b1.ld.x + sqre.leng / 2;
            sqre.centre.y = b1.ld.y + sqre.leng / 2;
        }
        else 
        {
            sqre.centre.x = b2.rd.x - sqre.leng / 2;
            sqre.centre.y = b2.rd.y + sqre.leng / 2;
        }
    }
    else 
    {
        sqre.leng = b1.rd.x - b2.ld.x; 
        if (b2.rd.y < b1.ld.y) 
        {
            sqre.centre.x = b2.rd.x + sqre.leng / 2;
            sqre.centre.y = b2.rd.y + sqre.leng / 2;
        }
        else 
        {
            sqre.centre.x = b1.ld.x + sqre.leng / 2;
            sqre.centre.y = b1.ld.y + sqre.leng / 2;
        }
    }
    return sqre;
}
 
//квадрат по 2м точкам
Square kvadrat(Point centre, Point point)
{
    Square sq;
    Point pt;
    pt.x = centre.x;
    pt.y = point.y;
    if (((centre.x - point.x) == 0) && ((centre.y - point.y) != 0)) sq.leng = sqrt((centre.y - point.y) * (centre.y - point.y));
    if (((centre.x - point.x) != 0) && ((centre.y - point.y) == 0)) sq.leng = sqrt((centre.y - point.y) * (centre.y - point.y));
 
}
 
//внешнее касание квадратов
int kasanie(Square x, Square y)
{
    float r, d_1, d_2;
    r = sqrt((x.centre.x - y.centre.x) * (x.centre.x - y.centre.x) + (x.centre.y - y.centre.y) * (x.centre.y - y.centre.y));
    d_1 = x.leng / 2;
    d_2 = y.leng / 2;
 
    if (r == d_1 + d_2)return 1;
    else return 0;
}
 
//принадлежность точки квадрату 
int d_including(Square x, Point p) //если точка принадлежит 
{
    Borders b;
    b = ins_borders(x);
    if ((p.x>=b.lu.x)&&(p.y<=b.lu.y)
        &&(p.x>=b.ld.x)&&(p.y>=b.ld.y)
        &&(p.x<=b.ru.x)&&(p.y<=b.ru.y)
        &&(p.x<=b.rd.x)&&(p.y>=b.rd.y))return 1;
    else return 0;
}
 
// проверка включения квадрата X в квадрат Y 
int s_including(Square x, Square y)
{
    Borders b1, b2;
    b1 = ins_borders(x);
    b2 = ins_borders(y);
 
    if ((b1.lu.x >= b2.lu.x) && (b1.ld.x >= b2.ld.x) && (b1.ru.x <= b2.ru.x) && (b1.rd.x <= b2.rd.x))
        if ((b1.lu.y <= b2.lu.y) && (b1.ld.y >= b2.ld.y) && (b1.ru.y <= b2.ru.y) && (b1.rd.y >= b2.rd.y))return 1;
        else return 0;
    else return 0;
}
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    int i,j,k;
 
    int N;// количество квадратов
    int count = 0;
    int including = 0;//количество квадратов, входящих в оболочку
 
    Square *square,shell;
    float s,minS=1000000;
 
    printf("Введите количество квадратов :\n");
    scanf_s("%d", &N);
 
    square = (Square*)malloc(sizeof(Square) * N);
 
    printf("Введите данные для %d квадратов (Координаты центра (x,y) , длину стороны квадрата) :\n", N);
    for (i = 0; i < N; i++)
    {
        printf("Данные %d Квадрата\n", i+1);
        scanf_s("%f%f%f", &square[i].centre.x, &square[i].centre.y, &square[i].leng);
    }
    int f = 1,min_n=-1;
    //////Нахождение наименьшего квадрата, содержащего не менее 2х квадратов из набора//////
    for (i = 0; i < N; i++) 
    {
        for (j = 0; j < N; j++)
        {
            if (i == j) continue;
            if (s_including(square[j], square[i])) count += 1;
        }
        if (count >= 2)
        {
            s = area(square[i]);
            if (f) {
                minS = s; min_n = i; f = 0;
            }
            if (s < minS) {
                minS = s; min_n = i;
            }   
        }
        count = 0;
    }
    if (min_n <0)printf("Среди набора нет квадратов, содержащих в себе ещё 2 квадрата из набора\n");
    else printf("Площадь наименьшего из квадратов, содержащего не менее 2х квадратов из набора :%lf\n",minS);
    
    ///Нахождение пар квадратов, квадратная оболочка которых не содержит в себе других квадратов из набора///
    
    printf("Пары квадратов, кв. оболочка которых не содержит другие квадраты из набора: \n");
    for (i = 0; i < N ; i++) 
    {
        for (j = i+1; j < N; j++)
        {
            //if (j == i)continue;
            shell = Shell(square[i], square[j]);
            for (int k = 0; k < N; k++) 
            {
                if (k == i || k == j)continue;
                if (s_including(square[k], shell)) including += 1;
            }
            if (including == 0)printf("(%.2f , %.2f) (%.2f, %.2f) \n", square[i].centre.x,
                square[i].centre.y, square[j].centre.x, square[j].centre.y);
            including = 0;
        }
    }
    getchar(); getchar();
}
P.S.: функция создания квадрата по двум точкам требует полной переделки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.06.2021, 14:57
Помогаю со студенческими работами здесь

Описать тип struct
Описать тип struct Rectangle, задающий на плоскости замкнутый прямоугольник со сторонами, параллельными координатным осям и габаритами (x–,...

Описать тип struct Point
Пожалуйста, помогите решить задачу в Visual Studio Описать тип struct Point, задающий на действительной плоскости точку с именем...

Описать тип struct Date
Описать тип struct Date, задающий дату (день, месяц, год). Реализовать в виде отдельных функций следующие операции над датами: а)...

Описать тип запись: точка на плоскости
Описать тип запись: точка на плоскости.Получить N точек,лежащих в квадрате со стороной А и центром в начале координат .Найти относительное...

Класс SQUARE (квадрат)
Создайте класс SQUARE (квадрат). Класс имеет атрибут length. Он имеет функции, которые вычисляют площадь и периметр квадрата. Он также...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru