Освоение технологии структурного программирования на языке Турбо Паскаль
ЛАБОРАТОРНАЯ РАБОТА № 3
Освоение технологии структурного программирования
при разработке и создании программы на языке Турбо Паскаль
для циклического вычислительного процесса с известным числом повторений
Цели работы:
1. Освоение методики нисходящей разработки (проектирования) программы методом пошаговой детализации с помощью псевдокода при решении задач с помощью ПК.
2. Освоение методов структурного программирования при разработке и создании программы на языке Турбо Паскаль для циклического вычислительного процесса с известным числом повторений.
3. Овладение выразительными средствами графики языка ТП для повышения читаемости программы.
4. Овладение навыками введения в программу необходимого количества комментариев.
5. Приобретение навыков алгоритмизации и программирования на алгоритмическом языке Паскаль
6. Освоение средств исследования программы.
7. Освоение методики тестирования программы.
Теоретические сведения
Вычислительный процесс, содержащий один или несколько циклов, называется циклическим. Циклы (операторы повторения) предусматривают повторяющееся выполнение некоторых операторов. Если число повторений известно заранее (до начала повторений), то в этом случае всегда используется оператор цикла с параметром for. Такой оператор предусматривает изменение управляющей переменной (параметра цикла) по правилу прогрессии с шагом 1 и повторное выполнение некоторого оператора (в том числе составного) до достижения конечного значения. Цикл с параметром имеет следующий вид:
for <параметр цикла> := <начальное значение> to <конечное значение> do
<оператор>;
или
for <параметр цикла> := <начальное значение> downto <конечное значение> do
<оператор>;
Параметр цикла, начальное и конечное значение должны быть одного и того же перечислимого типа и не должны изменяться внутри цикла. Если при спецификации to (downto) начальное значение больше (меньше) конечного значения, то цикл не выполняется. При нормальном выходе из цикла с параметром значение параметра остается неопределенным.
Например, чтобы напечатать в цикле значения параметра цикла, нам понадобится такая конструкция цикла с параметром for (рис. 3.1):
Блок-схему работы цикла for, приведенного на рис. 3.1 можно изобразить как показано на рис. 3.2.
То есть, Вы можете представить себе алгоритм циклической структуры for в виде последовательности таких действий и соответствующих им операторов:
подготовка цикла: задание начального значения параметру цикла i := 1;
проверка, не достигнуто ли конечное значение параметра цикла i <= 10 (если конечное значение параметра цикла будет равно 0, то тело цикла, т. е. оператор WrietLn(i = , i) не выполнится и далее будет выполняться оператор, следующий за оператором цикла);
выполнение тела цикла: действия, которые повторяются в цикле с использованием последовательно изменяющихся значений переменной цикла;
модификация (изменение) значения переменной цикла на единицу перед каждым новым его повторением. Далее переход на пункт 2.
При конструировании структуры цикла Вы должны помнить следующие правила:
оператор в теле цикла может быть простым либо составным (т. е. включать любые операторы языка ТП: простые, условные, циклические и т. д.), или даже пустым, когда точка с запятой «;» ставится сразу за словом do;
начальное и конечное значения параметра цикла не могут быть типа Real, а только целого или перечислимого типов, при этом шаг параметра цикла всегда постоянен и равен «интервалу» между двумя ближайшими значениями выбранного типа;
в теле цикла нельзя принудительно изменять переменную цикла;
при необходимости получения внутри цикла шага отличного от единицы Вы должны ввести дополнительную переменную;
для получения убывающего параметра цикла вместо слова to ставится downto и, соответственно, меняются местами начальное и конечное значения параметра цикла;
циклическая структура for используется только в тех случаях, когда наперёд известно количество повторений цикла!
При проектировании алгоритма циклического вычислительного процесса в структурном программировании используется структура цикл, которая в контексте синтаксиса языка ТП для рассматриваемого случая может представляться в виде for-to-do (ЦИКЛ-ОТ-ДО).
И, соответственно, код на языке ТП для (рис. 3.1) будет иметь вид (рис. 3.4):
Рассмотрим последовательно все этапы создания программы циклического вычислительного процесса с известным числом повторений на конкретном примере.
1. Условие задачи:
Вычислить значение конечной суммы:
. |
(3.1) |
2. Решение задачи в ее предметной области, в данном случае это высшая математика. Например, при n = 3 выражение (3.1) будет иметь вид:
. |
(3.2) |
Здесь Вы должны обратить внимание на то, что каждое последующее слагаемое в (3.2) получается из предыдущего домножением на a предыдущего.
3. Проводим нисходящую разработку (проектирование) программы методом пошаговой детализации с помощью псевдокода. Воспользуемся результатами (рис. 1) для получения первой версии алгоритма:
Ввести данные Summa
Выполнить вычисления Summa
Вывести результаты Summa
С учетом требований к «дружественности» интерфейса, детализация псевдокода Ввести данные Summa дает следующее:
Вывести на экран приглашение для ввода a
Ввести a
Вывести на экран приглашение для ввода n
Ввести n
Детализация псевдокода Выполнить вычисления Summa дает следующее:
power присвоить 1
ЦИКЛ ОТ i=1 ДО n
power умножить на а
к S добавить power
Детализация псевдокода Вывести результаты Summa дает следующее:
Вывести название и содержимое ячейки S
4. Выполняем структурное программирование с использованием структуры цикл:
BEGIN
ClrScr; { Очищаем экран }
Write(Введите значение a = );
ReadLn(a);
Write(Введите значение n = );
ReadLn(n);
{ Подготовка к циклу }
power := 1; { Начальное значение перед умножением на a }
for i:=1 to n do
begin
power := power*a; { Получаем степень а }
S := S+power; { Суммируем в S }
end;
WriteLn(S = , S:4:2);
ReadLn
END.
5. Проектируем структуры данных (их имена и типы). Понятно, что все имена, входящие в (3.1), нужно описать в программе, т.е. S, a, i, n. Кроме того, нам понадобится некоторая переменная, в которой будет храниться текущее значение степени a. Назовем ее power. Поскольку S, a, power могут иметь дробную часть, то их тип выбираем Real. Поскольку i переменная цикла, n конечное значение, то их тип не может быть Real, а только перечислимым, поэтому выбираем Integer.
Значит в разделе описаний программы, назовем ее Summa, с учетом требований о необходимости обеспечения удобочитаемости программы и размещения необходимых комментариев, поместим следующие описания:
Var
S, { сумма }
a, { значение a }
power : Real; { текущее значение степени a }
i, { переменная цикла }
n : Integer; { конечное значение цикла }
Вам остается только объединить раздел описаний и раздел операторов, чтобы получить готовую программу.
6. Отладка программы. Отладка программы это процесс поиска и устранения синтаксических ошибок в готовой программе. Обычно отладка предшествует стадии тестирования. В этом пункте необходимо привести скриншот результата работы готовой программы (см. п. 5 Лаб. раб № 1).
7. Тестирование программы. Цель тестирования всякой программы состоит в том, чтобы убедиться, что она решает действительно ту задачу, для которой предназначена, и выдаёт правильный ответ при любых значениях из области решений. Тестовые данные должны обеспечивать проверку всех возможных условий возникновения ошибок. Подготовьте тестовый пример для своей задачи и вычислите конечный результат с помощью калькулятора, имеющегося в среде Windows.
Тестовый пример для нашей задачи будет включать вычисление S при а=2 и n=3:
S = 2+22+23 = 14.
Теперь Вам необходимо провести исследование Вашей программы и убедиться, что вычислительный процесс действительно является циклическим с помощью дебаггера, то есть отладчика программ (см. п. 7 Лаб. раб № 1). Здесь Вы должны исследовать поведение переменных S, power, i структуры for-to-do (рис. 3.5).
8. Перед защитой лабораторной работы Вам необходимо подготовить отчет (Приложение 2). Перед распечаткой обязательно продемонстрируйте его преподавателю в электронном виде, чтобы избежать ошибок в оформлении!
9. Для защиты лабораторной работы:
9.1. Представить отчет по лабораторной работе в печатном виде.
9.2. Продемонстрировать умение исследовать свою программу.
9.3. Решить любую другую задачу из списка заданий.
9.4. Ответить на вопросы:
9.4.1. Поясните, что такое цикл?
9.4.2. Для чего нужен параметр цикла?
9.4.3. Для чего служит конечное значение параметра цикла?
9.4.4. Поясните логику выполнения циклов:
for ... to ... do и
for ... downto ... do.
9.4.5. Какие переменные могут использоваться в качестве параметра цикла for? Какие переменные могут использоваться в качестве границ диапазона для параметра цикла for?