65841

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

Лабораторная работа

Информатика, кибернетика и программирование

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

Русский

2014-08-09

287.5 KB

1 чел.

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

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

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

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

Цели работы:

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

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

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

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

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

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

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

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

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

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

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

(1)

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

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

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

(2)

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

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

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

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. Проводим нисходящую разработку (проектирование) программы методом пошаговой детализации с помощью псевдокода. Воспользуемся примером (рис. 1.1) для получения первой версии алгоритма:

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

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

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

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

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

Ввести x1

. . .

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

Ввести y2

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

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

Вычислить отношение длины a к b, т.е a/b = ab

ЕСЛИ a/b > 1.0 ТО

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

ИНАЧЕ

 Вычислить отношение длины b к aab

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

4. Проектируем структуры данных (их имена и типы). Понятно, что все имена, входящие в (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 }

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 (рис. 2.7, 2.8).

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

9. Для защиты лабораторной работы:

9.1. Представить отчет по лабораторной работе в печатном виде.

9.2. Продемонстрировать умение исследовать свою программу.

9.3. Решить любую другую задачу из списка заданий.

9.4. Ответить на вопросы: «Что такое:

– ветвящийся вычислительный процесс;

– ветвление в программе;

– структура развилка, каковы ее виды;

– отладка программы;

– тестирование программы?

Литература

1. Бронштейн И.Н., Семендяев К.А. Справочник по математике для инженеров и учащихся втузов. – 13-е изд., исправленное. – М.: Наука, Гл. ред. физ.-мат. лит., 1968. – 544 с.


ЗАДАНИЯ К

ЛАБОРАТОРНОЙ РАБОТЕ № 2

  1.  Даны два числа. Заменить второе число нулем, если оно больше первого, и оставить его прежним, если это не так.
  2.  Найти наименьшее из трех данных чисел.
  3.  Найти наибольшее из трех данных чисел.
  4.  Даны три числа. Возвести в квадрат те из них, значения которых неотрицательны. Отрицательные числа оставить без изменения.
  5.  Даны три числа a, b и c. Выяснить, верно ли, что a<b<c. Ответ вывести на экран в текстовой форме: «Верно» или «Неверно».
  6.  Даны два числа x и y (xy). Меньшее из этих чисел заменить их полусуммой, а большее - их удвоенным произведением.
  7.  Даны три числа a, b и c. Удвоить каждое из данных чисел, если abc и заменить числа их модулями в противном случае.
  8.  Даны два числа x и y. Если x и y - отрицательны, то каждое число заменить его модулем; если отрицательно только одно из них, то оба числа увеличить на 0.5; если оба числа неотрицательны, то оба числа увеличить в 10 раз.
  9.  Даны положительные числа x, y, z. Выяснить, существует ли треугольник с длинами сторон x, y, z. Ответ вывести на экран в текстовой форме.
  10.  Определить имеет ли квадратное уравнение ax2+bx+c=0 хотя бы одно вещественное решение. Ответ вывести на экран в текстовой форме.
  11.  Найти наибольшее и наименьшее из двух данных чисел.
  12.  В продаже книг в книжном магазине принимает участие компьютер. Составить программу, которая запрашивает стоимость книг, сумму денег, внесенную покупателем, а затем определяет причитающуюся сдачу (если денег внесено больше); печатает “Спасибо за покупку!”, если сдачи не требуется или выдает сообщение о недостаточности внесенной суммы.
  13.  Даны два числа x и y. Поменять их местами так, чтобы выполнялось соотношение xy.
  14.  Даны координаты трех точек A(x1,y1), B(x2,y2) и С(x3,y3). Выяснить, лежат ли точки на одной прямой. Ответ вывести на экран в текстовой форме.
  15.  Даны координаты точки A(x,y). Выяснить, принадлежит ли точка А кольцу с центром в начале координат с внешним радиусом R и внутренним радиусом r (R>r).
  16.  Даны координаты точки A(x 1,y 1). Выяснить, принадлежит ли точка А кругу с центром в точке B(x 2,y 2) единичного радиуса.
  17.  На плоскости задана прямая y=kx+b и точка A(x ,y ). Выяснить, принадлежит ли точка А данной прямой.
  18.  На плоскости заданы две прямые: y=k1x+b1 и y=k2x+b2. Определить взаимное расположение этих прямых на плоскости. Указания:
    Условие параллельности двух прямых: k
    1=k2.
    Условие перпендикулярности двух прямых: 1+k
    1k2=0.
  19.  Даны три координаты трех вершин треугольника A(x1,y1), B(x2,y2) и С(x3,y3). Определить, является ли данный треугольник равнобедренным. Для вычислений воспользуйтесь формулой расстояния между двумя точками A(x 1,y 1) и B(x 2,y 2): .
  20.  Даны три координаты трех вершин треугольника A(x 1,y 1), B(x 2,y 2) и С(x 3,y3). Определить, является ли данный треугольник равносторонним. Для вычислений воспользуйтесь формулой расстояния между двумя точками A(x 1,y 1) и B(x 2,y 2): .
  21.  Стороны треугольника заданы уравнениями прямых: y=k1x+b1, y=k2x+b2 и y=k3x+b3. Определить, является ли треугольник прямоугольным. Для вычислений воспользоваться условием перпендикулярности прямых: 1+k1k2=0, где k1 и k2 - коэффициенты прямых, заданных уравнениями y=k1x+b1 и y=k2x+b2
  22.  На плоскости задана окружность с центром в точке А(a,b) радиуса R и точка M(x,y). Выяснить:
    лежит ли точка M на данной окружности
    лежит ли точка M внутри данной окружности
    лежит ли точка M вне данной окружности.
  23.  Даны координаты вершин четырехугольника A(x1,y1), B(x2,y2), С(x3,y3) и D(x4,y4). Определить, является ли данный четырехугольник ромбом. Для вычислений воспользуйтесь формулой расстояния между двумя точками A(x1,y1) и B(x2,y2): .
  24.  Даны координаты вершин четырехугольника A(x1,y1), B(x2,y2), С(x3,y3) и D(x4,y4). Определить, является ли данный четырехугольник: квадратом. Для вычислений воспользуйтесь формулой расстояния между двумя точками A(x1,y1) и B(x2,y2): .
  25.  Написать программу для вычисления значения функции

    Протестировать программу при различных значениях аргументов.
  26.  Написать программу для вычисления значения функции

    Протестировать программу при различных значениях аргументов.
  27.  Написать программу для вычисления значения функции

    Протестировать программу при различных значениях аргументов.
  28.  Написать программу для вычисления значения функции

    Протестировать программу при различных значениях аргументов.
  29.  Написать программу для вычисления значения функции

    Протестировать программу при различных значениях аргументов.
  30.  Написать программу для вычисления значения функции

    Протестировать программу при различных значениях аргументов.
  31.  Написать программу для вычисления значения функции

    Протестировать программу при различных значениях аргументов.
  32.  Написать программу для вычисления значения функции

    Протестировать программу при различных значениях аргументов.


ПРИЛОЖЕНИЕ 2

Министерство образования и науки, молодежи и спорта Украины

Национальный горный университет

Институт электроэнергетики

Факультет информационных технологий

Кафедра ПЗКС

Лабораторная работа № 2

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

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

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

по дисциплине

“Основы программирования и алгоритмические языки”

ВЫПОЛНИЛ:

студент группы КНит-12-1

Иванов И.И.

ПРОВЕРИЛ:

ассистент кафедры ПЗКС

Шевцова О.С.

Днепропетровск

2012


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, т.е. a/b = ab

ЕСЛИ ab > 1.0 ТО

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

ИНАЧЕ

 Вычислить отношение длины b к aab

 Напечатать: «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

Рис. 2.4. Структурная схема развилки типа if-then-else

(ЕСЛИ-ТО-ИНАЧЕ) для (2)

Нет

ЕСЛИ X < 0 ТО

 Y = a+b

. .

Да

Рис. 2.2. Псевдокод для развилки типа if-then (ЕСЛИ-ТО) для (1)

Рис. 2.3. Код на языке ТП для развилки типа if-then (ЕСЛИ-ТО) для (1)

Y = c/b

Y = a+b

if X < 0 then

 Y := a+b;

X < 0

Рис. 2.7. Тестирование варианта 1: условие истинно.

Рис. 3. Тестирование варианта 2: условие ложно.

Рис. 2.8. Тестирование варианта 2: условие ложно.

Рис. 1. Результат работы программы

Рис. 2. Тестирование варианта 1: условие истинно.

Рис. 2.1. Структурная схема развилки типа if-then (ЕСЛИ-ТО) для (1)

Рис. 2.5. Псевдокод для развилки типа развилки типа if-then-else

(ЕСЛИ-ТО-ИНАЧЕ) для (2)

ЕСЛИ X ≤ 0 ТО

 Y = a+b

ИНАЧЕ

 Y = c/b

Рис. 2.6. Код на языке ТП для развилки типа if-then-else

(ЕСЛИ-ТО-ИНАЧЕ) для (2)

if X < 0 then

 Y := a+b

else

   Y := c/b;