Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МЕТОДИЧЕСКИЕ УКАЗАНИЯ ЛабРаб ОП та АМ_2.doc
Скачиваний:
2
Добавлен:
09.11.2019
Размер:
299.01 Кб
Скачать

ЛАБОРАТОРНАЯ РАБОТА № 2

Освоение технологии структурного программирования

при разработке и создании программы на языке Турбо Паскаль

для ветвящегося вычислительного процесса

Цели работы:

1. Освоение нисходящей разработки (проектирования) программы методом пошаговой детализации с помощью псевдокода.

2. Освоение методов структурного программирования при разработке и создании программы на языке Турбо Паскаль для ветвящегося вычислительного процесса.

3. Овладение выразительными средствами графики языка ТП для повышения читаемости программы.

4. Овладение навыками введения в программу необходимого количества комментариев.

5. Освоение средств исследования программы.

6. Освоение методики тестирования программы.

Теоретические сведения

Вычислительный процесс называется ветвящимся, если для его реализации предусмотрено несколько направлений (ветвей). Каждое отдельное направление процесса обработки данных является отдельной ветвью вычислений. Ветвление в программе – это выбор одной из нескольких последовательностей команд при выполнении программы. Выбор направления зависит от заранее определенного признака, который может относиться к исходным данным, к промежуточным или конечным результатам. Признак характеризует свойство данных и имеет два или более значений.

Следует иметь в виду, что, хотя на схеме алгоритма должны быть показаны все возможные направления вычислений в зависимости от выполнения определенного условия (или набора условий), при однократном прохождении программы процесс реализуется только по одной ветви, а остальные исключаются. Любая ветвь, по которой осуществляются вычисления, должна приводить к завершению вычислительного процесса.

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

Развилка типа if-then (ЕСЛИ-ТО) выполняет указанное в ней действие только при истинности заданного условия. Например, для алгоритма вида:

(1)

структурная схема будет выглядеть как показано на рисунке 9. Соответственно, псевдокод для этой структуры показан на рисунке 10.

И, соответственно, код на языке ТП для (1) будет иметь вид (рис. 11):

Развилка типа if-then-else (ЕСЛИ-ТО-ИНАЧЕ) позволяет Вам уже программировать указанные действия для двух случаев, когда условие истинно или ложно. Например, для алгоритма вида (2):

(2)

структурная схема алгоритма будет выглядеть как показано на рисунке 12. Соответственно, псевдокод для этой структуры показан на рисунке 13, а код на языке ТП – на рисунке 14.

Ветвящийся процесс, включающий в себя две ветви (ЕСЛИ-ТО-ИНАЧЕ), называется простым, более двух ветвей – сложным. Сложный ветвящийся процесс Вы можете представить с помощью комбинации простых ветвящихся процессов.

Рассмотрим последовательно все этапы создания программы ветвящегося вычислительного процесса на конкретном примере.

1. Условие задачи:

Даны два вектора (x1,y1 (x2,y2). Вычислить длины этих векторов и определить, во сколько раз вектор длиннее или короче вектора .

2. Решение задачи в ее предметной области, в данном случае – это высшая математика Если Вы не помните формулу вычисления длины вектора, то в учебнике по высшей математике [1, с. 389] можно обнаружить, что она имеет вид:

(3)

где и проекции вектора a на оси x и y соответственно.

Формулируя условие задачи для программирования, старайтесь держаться как можно ближе к исходному условию, чтобы Вас при программировании не отвлекали никакие разночтения. Поэтому формулу (3) перепишем в виде:

(4)

Теперь Вы видите, что нахождение длин векторов труда не составляет и можно переходить к следующему этапу.

Вы должны представить в уме или написать на листе бумаги следующие соотношения:

(a/b) > 1  a длиннее b;

(a/b) = 1  a равно b; (этот случай не рассматриваем)

(a/b) < 1  a короче b.

3. Проектируем структуры данных (их имена и типы). Понятно, что все имена, входящие в (4), нужно описать в программе, т.е. a, x1, y1, b, x2, y2. Кроме того, нам понадобится некоторая переменная, в которой будет храниться отношение a к b. Назовем ее ab. Поскольку все эти величины будут иметь дробную часть, то их тип будет Real.

Значит в разделе описаний программы, назовем ее Vectors, с учетом требований о необходимости обеспечения легкочитаемости программы и размещения необходимых комментариев, поместим следующие описания:

Var

a, { длина вектора a }

x1, { координата x вектора a }

y1, { координата y вектора a }

b, { длина вектора b }

x2, { координата x вектора b }

y2, { координата y вектора b }

ab : Real; { отношение длины вектора a к b }

4. Проводим нисходящую разработку (проектирование) программы методом пошаговой детализации с помощью псевдокода. Воспользуемся результатами (рис. 1) для получения первой версии алгоритма:

Ввести данные Vectors

Выполнить вычисления Vectors

Вывести результаты Vectors

С учетом требований к «дружественности» интерфейса, псевдокод Вашей программы примет вид:

Вывести на экран приглашение для ввода x1

Ввести x1

. . .

Вывести на экран приглашение для ввода y2

Ввести y2

Вычислить длину вектора

Вычислить длину вектора

Вычислить отношение длины a к b – ab

ЕСЛИ ab > 1.0 ТО

Напечатать: «a длиннее b в ab раз»

ИНАЧЕ

Вычислить отношение длины b к a – ab

Напечатать: «a короче b в ab раз»

5. Выполняем структурное программирование с использованием структуры развилка:

BEGIN

ClrScr; { Очищаем экран }

Write(‘Введите координату x1 вектора a = ’);

ReadLn(x1);

Write(‘Введите координату y1 вектора a = ’);

ReadLn(y1);

Write(‘Введите координату x2 вектора b = ’);

ReadLn(x2);

Write(‘Введите координату y2 вектора b = ’);

ReadLn(y2);

a := sqrt(sqr(x1)+ sqr(y1)); {Вычисляем длину вектора a }

b := sqrt(sqr(x2)+ sqr(y2)); {Вычисляем длину вектора b }

ab := a/b; { Вычисляем отношение длины a к b }

if ab > 1.0 then

WrietLn(‘a длиннее b в ’, ab:4:2, ‘ раз’)

else

begin

ab := b/a; { Вычисляем отношение длины b к a }

WriteLn(‘a короче b в ’, ab:4:2, ‘ раз’))

end;

ReadLn

END.

6. Отладка программы. Отладка программы – это процесс поиска и устранения синтаксических ошибок в готовой программе. Обычно отладка предшествует стадии тестирования. В этом пункте необходимо привести скриншот результата работы готовой программы (см. п. 5 Лаб. раб № 1).

7. Тестирование программы. Цель тестирования всякой программы состоит в том, чтобы убедиться, что она решает действительно ту задачу, для которой предназначена, и выдаёт правильный ответ при любых значениях из области решений. Тестовые данные должны обеспечивать проверку всех возможных условий возникновения ошибок. Подготовьте тестовый пример для своей задачи и вычислите конечный результат с помощью калькулятора, имеющегося в среде Windows. Должна быть испытана каждая ветвь алгоритма. Это значит, что если в логическом блоке имеются два или три исхода, то каждый из возможных путей работы программы необходимо проверить хотя бы по одному разу.

Тестовый пример для нашей задачи будет включать два варианта:

1.  (0, 9) и (0, 4) – вектор длиннее вектора .

2.  (0, 4) и (0, 9) – вектор короче вектора .

Теперь Вам необходимо провести исследование Вашей программы и убедиться, что вычислительный процесс действительно является ветвящимся с помощью дебаггера, то есть отладчика программ (см. п. 7 Лаб. раб № 1). Но, кроме переменной ab Вы должны также исследовать поведение значения условия оператора if-then-else (рис. 15, 16).

8. Перед защитой лабораторной работы Вам необходимо подготовить отчет (Приложение 2). Перед распечаткой обязательно продемонстрируйте его преподавателю в электронном виде, чтобы избежать ошибок в оформлении!