Этапы выполнения лабораторной работы Лабораторная работа должна выполняться по этапам, описанным ниже.
1. Составить спецификацию (см. раздел 7.8), заполнив следующие ее части: задача, состав входных и выходных данных, входная, выходная форма.
Пример.
Спецификация
Задача. Пересекаются ли круг и эллипс?
Ограничения: центр круга и ось эллипса лежат на оси ОХ.
Входные данные.
Состав: вещ r, ro – радиус и центр круга
вещ a, b, аo – полуоси и центр эллипса
<r><ro> <a><b><ao>
Выходные данные.
пересекаются
{[касаются] [вложенные]
[концентрические]
} не
пересекаются
Круг и эллипс
Метод. Фигуры пересекаются, если они имеют по крайней мере одну общую точку.
2. Разработать интерфейс задачи (см. раздел 7.6 и стр. 9-10). Отладить, поставив в качестве заглушки печать заголовка (Сегмент С0).
3. Раскрыть абстракцию Простой ввод данных (Сегмент С1а). Вставить в сегмент С0 и отладить.
4. Раскрыть абстракцию Ввод данных с подсказкой (Сегмент С1б). Вставить в сегмент С0 и отладить.
{Круг
и
эллипс}
C
0 program
Cross (input, output); var
r, ro: real;{радиус и центр круга} a,
b, ao: real;{полуоси и центр эллипса} begin
writeln('Круг
и эллипс');
С1
С2 end.
{Простой
ввод данных}
С1а
readln
(r,ro); readln (a,b,ao);
{Ввод
данных с подсказкой} С1б writeln(‘Ввод
радиуса и центр круга’); readln
(r,ro); writeln(‘Ввод
полуосей и центра эллипса’); readln
(a,b,ao);
{Ввод
данных}

{Анализ
фигур}

5. Составить условие пересечения фигур, записать его в раздел спецификации - Метод и раскрыть абстракцию Анализ фигур, записав ее в виде сегмента С2.
П
Вставить С2 в сегмент
С0. Отладить. Для тестирования подобрать
значения входных данных и нарисовать
рисунок для случаев: фигуры пересекаются; фигуры не
пересекаются.
ример.Метод. Если
расстояние между центрами круга и
эллипса не больше, чем r+a,
то фигуры пересекаются.
{Анализ
фигур} C2 if
abs (ro-ao) <= r+a then
C3 else writeln
('не пересекаются') end.
{Пересекаются}

6. Уточнить условие пересечения с точки зрения взаимного расположения фигур. Направления исследования могут быть разными, но главной целью является выявление условий вложенности и пересечения фигур. Описать в Методе направление исследования и раскрыть абстракцию Пересекаются в виде сегмента С3, где записать следующий шаг уточнения условия пересечения. В примере проверяется касание фигур.
{Пересекаются}
C3 if
abs (ro-ao) < r +a then begin writeln(‘пересекаются’);
C4
end else writeln
('касаются')
Вставить С3 в
сегмент С2. Отладить. Для тестирования
подобрать значения входных данных и
нарисовать рисунок для случаев: фигуры пересекаются
(общий случай);
фигуры пересекаются
(касаются).
{Вложенность?}

Для рассматриваемого примера проверка вложенности круга в эллипс даст нам одно из решений задачи. Это легко выполнить, если фигуры концентрические. При этом условии раскроем абстракцию Вложенность? в виде сегмента С4.
Пример. Метод (окончание). Если фигуры концентрические, то круг вложен в эллипс, если его радиус меньше каждой из полуосей эллипса.
{Вложенность?}
C4 if
(ro=ao)
then begin writeln
('Фигуры
концентрические');
if
(r<=a) and (r<= b) then writeln
(‘Круг вложен в эллипс') else writeln
('круг не вложен в эллипс') end else writeln
('Фигуры не концентрические') Вставить С4 в сегмент
С3 . Для тестирования
подобрать значе -ния входных данных и
нарисовать рисунки для случаев: - фигуры концентрические
и круг вложен в эллипс; - фигуры концентрические
и круг не вложен в эллипс; - фигуры не концентрические.
7. Добавить в программу оболочку для тестирования (см. раздел 7.6 и стр. 17). Все раскрытые абстракции остаются в программе в виде комментариев. Сдать работу (без проверки аномалий) преподавателю. Работа принимается только при наличии полной спецификации с функциональными тестами, демонстрационными рисунками и структурной схемой программы.
8. Добавить в спецификацию диапазон допустимых значений входных данных и раздел аномалий. Изменить выходную форму.
В текст программы внести проверку правильности входных данных и сообщение об аномалиях. Сдать лабораторную работу с анализом аномалий.
Пример. Диапазон:. r>0 и a,b>0
Аномалии: r 0 или a 0 или b 0
{Круг
и
эллипс}
C 0 program
Cross (input, output); var
r,
ro:
real;{
радиус и центр круга } a,
b,
ao:
real;{
полуоси и центр эллипса } begin Оболочка
для тестирования
writeln('Круг
и эллипс');
if
(r>0) and (a>0) and (b>0) then
else
writeln
(‘Входные данные неверные’) end. Подобрать тесты
для проверки аномалий. Каждый тестовый
набор данных должен содержать одну
величину с аномальным значением при
остальных правильных данных.
{Ввод
данных}
С0


{Анализ
фигур}
С1 С2

С3

С4
Рис.5. Структурная схема программы
(при проектировании)
