Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
ЛАБОРАТОРНАЯ РАБОТА № 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). Перед распечаткой обязательно продемонстрируйте его преподавателю в электронном виде, чтобы избежать ошибок в оформлении!
9. Для защиты лабораторной работы:
9.1. Представить отчет по лабораторной работе в печатном виде.
9.2. Продемонстрировать умение исследовать свою программу.
9.3. Решить любую другую задачу из списка заданий.
9.4. Ответить на вопросы: «Что такое:
ветвящийся вычислительный процесс;
ветвление в программе;
структура развилка, каковы ее виды;
отладка программы;
тестирование программы?
1. Бронштейн И.Н., Семендяев К.А. Справочник по математике для инженеров и учащихся втузов. 13-е изд., исправленное. М.: Наука, Гл. ред. физ.-мат. лит., 1968. 544 с.
ПРИЛОЖЕНИЕ 2
Институт электроэнергетики
Факультет информационных технологий
Освоение технологии структурного программирования
при разработке и создании программы на языке Турбо Паскаль
для ветвящегося вычислительного процесса
Днепропетровск
2006
1. Условие задачи:
Даны два вектора (x1,y1)и (x2,y2). Вычислить длины этих векторов и определить, во сколько раз вектор длиннее или короче вектора .
2. Решение задачи в её предметной области:
Длины векторов вычисляются по формулам:
(3) |
где и проекции вектора a на оси x и y соответственно.
Имеем следующие соотношения:
(a/b) > 1 a длиннее b;
(a/b) = 1 a равно b; (этот случай не рассматриваем)
(a/b) < 1 a короче b.
3. Псевдокод алгоритма программы
Вывести на экран приглашение для ввода x1
Ввести x1
. . .
Вывести на экран приглашение для ввода y2
Ввести y2
Вычислить длину вектора
Вычислить длину вектора
Вычислить отношение длины a к b ab
ЕСЛИ ab > 1.0 ТО
Напечатать: «a длиннее b в ab раз»
ИНАЧЕ
Вычислить отношение длины b к a ab
Напечатать: «a короче b в ab раз»
4. Текст программы с подробными комментариями и отступами:
Program Vectors;
Uses Crt;
Var
a, { длина вектора a }
x1, { координата x вектора a }
y1, { координата y вектора a }
b, { длина вектора b }
x2, { координата x вектора b }
y2, { координата y вектора b }
ab : Real; { отношение длины вектора a к b }
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
WriteLn('a длиннее b в ', ab:4:2, ' раз')
else
begin
ab := b/a; { Вычисляем отношение длины b к a }
WriteLn('a короче b в ', ab:4:2, ' раз')
end;
ReadLn;
END.
5. Результат работы программы (рис. 1)
6. Исследование и тестирование программы (рис. 2, 3)
Тестовый пример для нашей задачи будет включать два варианта:
1. (0, 9) и (0, 4) вектор длиннее вектора .
2. (0, 4) и (0, 9) вектор короче вектора .
. . .
. . .
Нет
X≤0
. . .
Да
Y = a+b
Рис. 12. Структурная схема развилки типа if-then-else
(ЕСЛИ-ТО-ИНАЧЕ) для (2)
Нет
ЕСЛИ X < 0 ТО
Y = a+b
. .
Да
Рис. 10. Псевдокод для развилки типа if-then (ЕСЛИ-ТО) для (1)
Рис. 11. Код на языке ТП для развилки типа if-then (ЕСЛИ-ТО) для (1)
Y = c/b
Y = a+b
if X < 0 then
Y := a+b;
X < 0
Рис. 15. Тестирование варианта 1: условие истинно.
Рис. 3. Тестирование варианта 2: условие ложно.
Рис. 16. Тестирование варианта 2: условие ложно.
Рис. 1. Результат работы программы
Рис. 2. Тестирование варианта 1: условие истинно.
Рис. 9. Структурная схема развилки типа if-then (ЕСЛИ-ТО) для (1)
Рис. 13. Псевдокод для развилки типа развилки типа if-then-else
(ЕСЛИ-ТО-ИНАЧЕ) для (2)
ЕСЛИ X ≤ 0 ТО
Y = a+b
ИНАЧЕ
Y = c/b
Рис. 14. Код на языке ТП для развилки типа if-then-else
(ЕСЛИ-ТО-ИНАЧЕ) для (2)
if X < 0 then
Y := a+b
else
Y := c/b;