Решение задачи по прикладной информатике средствами 1С.
Задача:
Вычислить периметр прямоугольника, заданного координатами своих вершин на плоскости.
Решение:
Создан документ со следующими реквизитами:
• АХ (синоним «Координата X вершины A», тип Число, длина 10, точность 2);
• АY (синоним «Координата Y вершины A», тип Число, длина 10, точность 2);
• ВХ (синоним «Координата X вершины B», тип Число, длина 10, точность 2);
• ВY (синоним «Координата Y вершины B», тип Число, длина 10, точность 2);
• СХ (синоним «Координата X вершины C», тип Число, длина 10, точность 2);
• СY (синоним «Координата Y вершины C», тип Число, длина 10, точность 2);
• DX (синоним «Координата X вершины D», тип Число, длина 10, точность 2);
• DY (синоним «Координата Y вершины D», тип Число, длина 10, точность 2);
• Периметр (тип Число, длина 10, точность 0).
В модуле формы создана команда формы «РассчитатьПериметр», которой задан следующий алгоритм:
| 1C | 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
| &НаКлиенте
Процедура РассчитатьПериметр(Команда) // Вычислить
// Сбрасываем значения при повторном вызове процедуры
Объект.Периметр = 0;
ОчиститьСообщения();
// Устанавливаем переменные для читабельности кода
АХ = Объект.АХ; // Координата X вершины A
АY = Объект.АY; // Координата Y вершины A
ВХ = Объект.ВХ; // Координата X вершины B
ВY = Объект.ВY; // Координата Y вершины B
СХ = Объект.СХ; // Координата X вершины C
СY = Объект.СY; // Координата Y вершины C
DX = Объект.DX; // Координата X вершины D
DY = Объект.DY; // Координата Y вершины D
Периметр = Объект.Периметр; // Результат расчёта
// Проверка заполнения координат
Если АХ = Неопределено Или АY = Неопределено
Или ВХ = Неопределено Или ВY = Неопределено
Или СХ = Неопределено Или СY = Неопределено
Или DX = Неопределено Или DY = Неопределено Тогда
Сообщить("Необходимо заполнить координаты всех вершин (A, B, C, D)!");
Возврат;
КонецЕсли;
// Вычисляем длины всех сторон по формуле расстояния между точками
СторонаAB = Sqrt((ВХ - АХ) * (ВХ - АХ) + (ВY - АY) * (ВY - АY));
СторонаBC = Sqrt((СХ - ВХ) * (СХ - ВХ) + (СY - ВY) * (СY - ВY));
СторонаCD = Sqrt((DX - СХ) * (DX - СХ) + (DY - СY) * (DY - СY));
СторонаDA = Sqrt((АХ - DX) * (АХ - DX) + (АY - DY) * (АY - DY));
// Проверяем, что это прямоугольник: противоположные стороны равны
Если Окр(СторонаAB, 6) <> Окр(СторонаCD, 6)
Или Окр(СторонаBC, 6) <> Окр(СторонаDA, 6) Тогда
Сообщить("Ошибка: фигура не является прямоугольником (противоположные стороны не равны)");
Возврат;
КонецЕсли;
// Дополнительно проверяем перпендикулярность
ВекторAB_X = ВХ - АХ;
ВекторAB_Y = ВY - АY;
ВекторAD_X = DX - АХ;
ВекторAD_Y = DY - АY;
СкалярноеПроизведение = ВекторAB_X * ВекторAD_X + ВекторAB_Y * ВекторAD_Y;
Если Окр(СкалярноеПроизведение, 6) <> 0 Тогда
Сообщить("Ошибка: фигура не является прямоугольником (углы не прямые)");
Возврат;
КонецЕсли;
// Расчёт периметра
Периметр = СторонаAB + СторонаBC + СторонаCD + СторонаDA;
Объект.Периметр = Периметр;
КонецПроцедуры |
|
Результат:
Вариант 1: Прямоугольник со сторонами, параллельными осям координат (самый простой).
• AX = 0, AY = 0;
• BX = 4, BY = 0;
• CX = 4, CY = 3;
• DX = 0, DY = 3.
Периметр: P = 4+3+4+3 = 14 единиц.

Вариант 2: Квадрат (частный случай прямоугольника).
• AX = 2, AY = 2;
• BX = 5, BY = 2;
• CX = 5, CY = 5;
• DX = 2, DY = 5.
Периметр: P=3+3+3+3 = 12 единиц.

Вариант 3: Некорректные данные (для проверки обработки ошибок).
Пример набора точек, не образующих прямоугольник:
• AX = 0, AY = 0;
• BX = 3, BY = 0;
• CX = 4, CY = 2;
• DX = 1, DY = 2.
В данном случае программа выведет сообщение об ошибке: «Фигура не является прямоугольником».
|