66533

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

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

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

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

Русский

2014-08-22

259.5 KB

0 чел.

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

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

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

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

Цели работы:

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

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

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

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

5. Приобретение навыков алгоритмизации и программирования на алгоритмическом языке Паскаль

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

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

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

Циклом называется многократно повторяемый участок вычислений. Вычислительный процесс, содержащий один или несколько циклов, называется циклическим. Если число повторений известно заранее, то в этом случае всегда используется оператор цикла с параметром for.

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

(4.1)

Для упрощения рассуждений, будем считать, что условием завершения вычисления заданной суммы будет условие, когда n-тый член ряда удовлетворяет условию:

(4.2)

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

 структура while-do (ЦИКЛ-ПОКА);

 структура repeat-until (ЦИКЛ-ДО).

Прежде, чем заняться их изучением, давайте поговорим о вычислении общего члена ряда в (4.2). Первое, что приходит в голову, это:

1. Завести ячейку с -1 и в цикле умножать ее на -1.

2. Числитель определять по формуле ax = exp(x*ln(a)).

3. Знаменатель определять по формуле факториала.

Однако, второе, что приходит в голову, это:

1. Довольно большое количество операций при вычислениях.

2. И экспонента и факториал изменяются экспоненциально, поэтому нас могут поджидать ошибки переполнения.

Поэтому, давайте посмотрим, как может меняться каждый последующий член ряда, в зависимости от предыдущего:

member := x; {теперь в member содержится x}

member := -member*x*x/(2*3); { теперь в member содержится -x3/3!}

member := -member*x*x/(4*5); { теперь в member содержится x5/5!}

Как видите, мы применили унарную операцию «-» для изменения знака члена ряда, избавились от громоздких вычислений с помощью встроенных функций, угрозы переполнения и «закрутили» неплохой алгоритм для того, чтобы его можно было использовать в цикле.***


Рассмотрим подробнее конструирование цикла с предусловием while-do, используемого для вычисления суммы членов бесконечного ряда по формуле (4.1) (рис. 4.2):

Блок-схему работы структуры while-do, приведенной на рис. 4.2 можно изобразить так (рис. 4.3):

Если при входе в структуру while-do значение member равно 1, чтобы условие member>eps было равно True, то выполняется тело цикла. По мере увеличения в цикле величины n , значение member уменьшается, пока не станет меньше заданной точности ε . В этом случае условие member>eps становится ложным, что и вызывает завершение цикла.

Сформулируем основные особенности структуры «цикл с предусловием» while-do (ЦИКЛ-ПОКА), имеющей следующую общую форму записи:

while <условие> do

<оператор>;

где:

 слова while (пока) и do (выполнять) являются служебными;

 <условие> – логическое выражение любой степени сложности, которое управляет процессом выполнения цикла: если <условие> равно True – цикл выполняется, но как только оно принимает значение False – цикл завершается и выполняется следующий за циклом оператор программы;

 <оператор> – любой оператор языка ТП и в том числе составной. Обратите внимание на то, что в этой структуре может использоваться либо только один(!) оператор (присваивания, условный, выбора, и т.д.), либо составной, т.е. совокупность операторов, взятая в операторные скобки begin ... end;

 если <условие> имеет значение False до начала выполнения цикла, то не выполнится ни один из операторов тела цикла;

 как правило, подготовку к выполнению цикла while Вы должны организовывать сами, поскольку он выполняет только проверку заданного Вами условия;

 цикл while используйте тогда и только тогда, когда число повторений заранее неизвестно! Иначе используйте цикл с параметром for.

А теперь давайте ту же самую задачу (4.1) программно реализуем с использованием структуры «цикл с постусловием» repeat-until (ЦИКЛ-ДО). А за основу новой программы возьмём программу рис. 4.1. Полученная программа приведена на рис. 8.64.

Как Вы видите, чтобы вычислить сумму членов бесконечного ряда (4.1) с использованием структуры repeat-until (ЦИКЛ-ДО) с постусловием, нам понадобилось в программе (рис. 4.1) только произвести замену операторов while member > eps do и begin на repeat, а оператора end – на until member < eps, оставив вложенные операторы без изменения. А в операторе until условие завершения цикла поменяеть на противоположное.

Теперь давайте сравним, чем же отличается структура цикла repeat-until (ЦИКЛ-ДО) (рис. 4.5) от структуры while-do (ЦИКЛ-ПОКА) (рис. 4.2).

Блок-схему работы структуры repeat-until, приведенной на рис. 4.5 можно изобразить так (рис. 4.6).

Если при входе в структуру repeat-until значение member равно 1, чтобы условие member<eps было равно False, то выполняется тело цикла. По мере увеличения в цикле величины n , значение member уменьшается, пока не станет меньше заданной точности ε . В этом случае условие member>eps становится ложным, что и вызывает завершение цикла.

Сформулируем основные особенности структуры «цикл с постусловием» repeat-until (ЦИКЛ-ДО), имеющей следующую общую форму записи:

repeat

      <оператор_1>;

      <оператор_2>;

          ...

      <оператор_N>

until  <условие>;

где:

 слова repeat (повторять) и until (до тех пор, пока...) являются служебными;

 <оператор_i> (і=1,2, ..., N) – любой оператор языка ТП (простой либо сложный);

 <условие> – логическое выражение любой степени сложности, которое управляет процессом выполнения цикла: если <условие> равно False – цикл выполняется, но как только оно принимает значение True – цикл завершается и выполняется следующий за структурой цикла оператор программы;

 если <условие> имеет значение True до начала выполнения цикла, то тело цикла выполняется один раз, после чего выполняется следующий за циклом оператор программы;

 как правило, подготовку к выполнению цикла repeat Вы должны организовывать сами, поскольку он выполняет только проверку заданного Вами условия;

 цикл repeat используйте тогда и только тогда, когда число повторений заранее неизвестно! Иначе используйте цикл с параметром for.

Теперь, когда Вам стала понятна работа обоих структур: while-do (ЦИКЛПОКА) и repeat-until (ЦИКЛ-ДО), Вы должны хорошо представлять себе, что в работе структуры repeat-until имеется несколько важных отличий:

 проверка значения логического выражения <условие> реализуется после однократного выполнения тела цикла. То есть все операторы оператор_1, оператор_2, ... оператор_N> будут выполнены хотя бы один раз при любых условиях;

 операторы repeat ... until подобны операторным скобкам begin ... end, поэтому между ними можно размещать группы операторов, отделяя их между собой точкой с запятой;

 цикл repeat ... until выполняется, в отличие от цикла while ... do, до тех пор, пока логическое выражение <условие> имеет значение False и завершает свою работу когда оно принимает значение True;

 за последним оператором <оператор_N> перед служебным словом until разделительный символ  ; точка с запятой может не ставиться.

При проектировании алгоритма циклического вычислительного процесса в структурном программировании используется структура цикл, которая в контексте синтаксиса языка ТП для рассматриваемого случая может представляться в виде while-do (ЦИКЛПОКА) (рис. 4.7).

Либо для структуры repeat-until (ЦИКЛ-ДО) (рис. 4.8):

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

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

Вычислить значение бесконечной суммы с заданной точностью :

.

(4.2)

2. Решение задачи в ее предметной области, в данном случае – это высшая математика:

.

(4.3)

Здесь Вы должны обратить внимание на то, что n в (4.3) заранее не известно.

3. Проектируем структуры данных (их имена и типы). Понятно, что все имена, входящие в (4.3), нужно описать в программе, т.е. S, x, i, eps. Кроме того, нам понадобится некоторая переменная, в которой будет храниться текущее вспомогательное значение для члена ряда. Назовем ее part. Поскольку S, x, eps, power могут иметь дробную часть, то их тип выбираем Real. Для iзначения не имеет: это может быть Real либо Integer.

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

Var

 S,            { сумма }

 x,            { значение x }

 i,            { число в знаменателе }

 eps,          { точность вычислений }

 part : Real; { текущее значение части члена ряда }

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

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

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

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

С учетом требований к «дружественности» интерфейса, детализация псевдокода Ввести данные Summa дает следующее:

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

Ввести x

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

Ввести eps

Детализация псевдокода Выполнить вычисления Summa дает следующее:

S присвоить 0

part присвоить 1

i присвоить 1

ЦИКЛ ПОКА (part/i)>eps

 part умножить на x-1 и разделить на x

 к S добавить part деленное на i

 i увеличить на единицу

Детализация псевдокода Вывести результаты Summa дает следующее:

Вывести название и содержимое ячейки S

5. Выполняем структурное программирование с использованием структуры ЦИКЛ-ПОКА:

BEGIN

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

 Write(‘Введите значение x = ’);

 ReadLn(x);

 Write(‘Введите значение eps = ’);

 ReadLn(eps);

 { Подготовка к циклу }

 S := 0; { Подготовка к циклу }

 part := 1; { Начальное значение }

 i := 1;    { Начальное значение }

 while (part/i)>eps do

   begin

     part := part*(x-1)/x; { Получаем часть члена ряда }

     S := S+ part/i;       { Суммируем в S }

     i := i+1              { Увеличиваем i на 1 }

   end;

 WriteLn(‘S = ’, S:4:2);

 ReadLn

END.

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

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

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

Исследуйте Вашу программу при необходимых тестовых значениях.

Создайте программу с использованием структуры repeat-until (ЦИКЛ-ДО) и исследуйте ее.

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

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

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

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

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

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

9.4.1. Чем отличаются циклы с условиями от циклов с параметром?

9.4.2. Что собой представляет условие у этих обоих циклах?

9.4.3. Какое значенне должно иметь условие в цикле while, чтобы он выполнялся?

9.4.4. Какое значение должно иметь условие в цикле repeat, чтобы он выполнялся?

9.4.5. Чем вообще отличаетсяся цикл while от цикла repeat?


ЗАДАНИЯ К

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

  1.  Вычислить приближенное значение бесконечной суммы с точностью до =0.001.
  2.  Вычислить приближенное значение бесконечной суммы с точностью до =0.005.
  3.  Вычислить приближенное значение бесконечной суммы с точностью до =0.0001.
  4.  Вычислить приближенное значение бесконечной суммы с точностью до =0.05.
  5.  Вычислить приближенное значение бесконечной суммы с точностью до =0.00005.
  6.  Вычислить приближенное значение бесконечной суммы с точностью до =0.0001.
  7.  Вычислить приближенное значение бесконечной суммы с точностью до =0.001.
  8.  Вычислить приближенное значение бесконечной суммы с точностью до =0.005.
  9.  Вычислить приближенное значение бесконечной суммы с точностью до =0.0005.
  10.  Вычислить приближенное значение бесконечной суммы с точностью до =0.01.
  11.  Вычислить приближенное значение бесконечной суммы с точностью до =0.05.
  12.  Вычислить приближенное значение бесконечной суммы с точностью до =0.005.
  13.  Вычислить приближенное значение бесконечной суммы с точностью до =0.0001.
  14.  Вычислить приближенное значение бесконечной суммы с точностью до =0.00001.
  15.  Вычислить приближенное значение бесконечной суммы с точностью до =0.00001.
  16.  Вычислить приближенное значение бесконечной суммы с точностью до =0.05.
  17.  Вычислить приближенное значение бесконечной суммы с точностью до =0.001.
  18.  Вычислить приближенное значение бесконечной суммы с точностью до =0.01.
  19.  Вычислить приближенное значение бесконечной суммы с точностью до =0.05.
  20.  Вычислить приближенное значение бесконечной суммы с точностью до =0.05.
  21.  Вычислить приближенное значение бесконечной суммы с точностью до =0.00005.
  22.  Вычислить приближенное значение бесконечной суммы с точностью до =0.0005.
  23.  Вычислить приближенное значение бесконечной суммы с точностью до =0.0001.
  24.  Вычислить приближенное значение бесконечной суммы с точностью до =0.001.
  25.  Вычислить приближенное значение бесконечной суммы с точностью до =0.005.


Тело цикла –
cледование простых либо сложных ператоров ТП

Проверка, не достигнуто ли значение

True

Конструирование условия, которое для выполнения цикла

должно быть = False

Ключевое слово repeat

Следование простых либо сложных ператоров ТП, повторяемых в цикле до тех пор, пока условие станет = True

Подготовка исходных данных к выполнению цикла с послеусловием

 S:=1

 n:=1

 member:=1

 repeat

   member:=member/n;

   S:=S+member;

   n:=n+1

 until member < eps; 

Рисунок 4.5 Конструкция цикла с постусловием repeat-until

ЦИКЛ ПОКА member > eps

 Выполнять действия

Ложь

Истина

Рис. 4.7. Псевдокод для цикла while-do (ЦИКЛПОКА) для (4.1)

ис. 4.8. Псевдокод для цикла repeat-until (ЦИКЛ-ДО) для (4.1)

repeat

 member:=member/n;

 S:=S+member;

 n:=n+1

until member <= eps; 

ЦИКЛ

 Выполнять действия

ДО member < eps

member<eps

member>eps

 begin

   member:=member/n;

   S:=S+member;

   n:=n+1

 end;

Составной либо простой оператор, повторяемый в цикле до тех пор, пока условие не станет = False

Рисунок 4.4 Вычисления ряда (4.1) с использованием структуры repeat-until (ЦИКЛ-ДО) (окончание)

 { Подготовка к циклу }

 S:=1;      { В ссумму сразу заносим единицу }

 n:=1;      { Первый элемент факториала }

 member:=1; { Первый член ряда }

 { Начало цикла с предусловием }

 repeat

   member:=member/n;  { В цикле получаем 1/n! }

   S:=S+member;       { В S суммируем члены ряда }

   n:=n+1             { В n получаем очередной элемент факториала }

 until member < eps; { Условие выполнения цикла: (member<eps) = False }

 WriteLn(‘ Сумма = ’, S, ‘  Число членов ряда = ’, n-1);

 ReadLn

End.

Рисунок 4.4 Вычисления ряда (4.1) с использованием структуры repeat-until (ЦИКЛ-ДО)

Program EndingCondition;

Uses Crt;

Var

 eps,         { Точность вычисления суммы членов ряда }

 member,      { Текущий член ряда }

 S : Real;    { Сумма членов ряда }

 n : Integer; { Очередной сомножитель факториала }

Begin

 ClrScr;

 Write(‘Введите eps = ’);

 ReadLn(eps);

Рисунок 4.3 Блок-схема цикла while-do, приведенного на рис. 4.2

Тело цикла. Как правило, составной оператор, реже – простой

Ложь

Истина

Рисунок 4.6 Блок-схема структуры repeat-until, приведенной на рис. 4.5

Ключевое слово while

Конструкция условия выполнения цикла, которое для входа в цикл должно быть = True

Подготовка исходных данных к выполнению цикла с предусловием

 S:=1;

 n:=1;

 member:=1;

 while member > eps do

   begin

     member:=member/n;

     S:=S+member;

     n:=n+1

   end;

Рисунок 4.2 Конструкция цикла с предусловием while-do


 

А также другие работы, которые могут Вас заинтересовать

28201. Вклад В.Вундта в оформление психологии как самостоятельной науки. Создание психофизики (Г.Фехнер) 33 KB
  Кризис психологии выявился в наибольшей своей остроте когда сформировалась поведенческая психология рефлексология в России и бихевиоризм в Америке потому что поведенческая психология выдвинув поведение как предмет психологии с особенной остротой выявила кризис центрального понятия всей современной психологии понятия сознания. Согласно Вундту предметом изучения психологии является сознание а именно состояния сознания связи и отношения между ними законы которым они подчиняются. Используя метроном Вундт выделил ряд основных...
28202. Влияние идей И.М.Сеченова и И.П.Павлова на становление отечественной психологии 40.5 KB
  Иван Петрович Павлов 18491936 создатель материалистического учения о высшей нервной деятельности животных и человека. Учение Павлова о высшей нервной деятельности сложилось под влиянием материалистических традиций русской философии и развивало идеи И. В начале своей научной деятельности Павлов занимался преимущественно изучением сердца и кровеносных сосудов. Так было заложено начало павловского учения о трофической нервной системе особых нервных волокнах регулирующих процессы питания в тканях обмен веществ в них и тем самым...
28203. Вклад В.М. Бехтерева в развитие российской психологии 35.5 KB
  Бехтерева в развитие российской психологии. Бехтерев Владимир Михайлович 18571927 русский невропатолог психиатр физиолог психолог. Психологическое творчество Бехтерева можно условно разделить на два этапа. Бехтерев говорил о равноправном существовании двух психологий: субъективной основным методом которой должна быть интроспекция и объективной.
28204. Психофизическая проблема (законы Вебера-Фехнера и Стивенса). Виды порогов и чувствительность 40 KB
  Виды порогов и чувствительность. Для того чтобы измерить уровень абсолютной и дифференциальной чувствительности вводится понятие порогов ощущений или сенсорных порогов. Основной вопрос психофизики это вопрос о порогах. Виды порогов: абсолютный порог верхний и нижний дифференциальный порог оперативный порог.
28205. Особая роль осязания в структуре сенсорной организации человека и его значение в процессах познания и труда (Ананьев, Веккер, Ломов, Ярмоленко) 37.5 KB
  Особая роль осязания в структуре сенсорной организации человека и его значение в процессах познания и труда Ананьев Веккер Ломов Ярмоленко. Базовая роль осязания в процессе чувственной репрезентации Веккер. Восприятие предметов внешней среды с помощью осязания позволяет оценивать их форму размеры свойства поверхности консистенцию температуру сухость или влажность положение и перемещение в пространстве. Связь осязания с основными жизненными функциями и трудом придает ему важное жизненное значение.
28206. Сфера вторичных образов: эмпирические характеристики образа представления 58 KB
  Сфера вторичных образов: эмпирические характеристики образа представления. оно отражает то что когдато отражалось и следы этого образа остались в сознании человека. В отличие от перцептивного образа существенной особенностью которого является выделение фигуры из фона не допускающее однако их взаимного отделения в представлении фигура может не соотноситься с определенной координатой пространственного фона а фон может быть отделен от фигуры пустое пространство . Оно выражается в схематизации образа.
28207. Константность восприятия и ее приспособительное значение 32.5 KB
  Константность восприятия и ее приспособительное значение. Константность это свойство перцептивного образа оставаться относительно неизменным при изменении условий восприятия. Константность относительное постоянство адекватного отражения свойств и качеств объектов в изменяющихся условиях среды; константность всегда предметна. Впервые константность восприятия была поставлена в центр экспериментального исследования в 1889 г.
28208. Целостность восприятия и законы Гештальта: влияние целого на элементы и факторы объединения отдельного в целое 42.5 KB
  Целостность восприятия и законы Гештальта: влияние целого на элементы и факторы объединения отдельного в целое. ЦЕЛОСТНОСТЬ ВОСПРИЯТИЯ свойство восприятия состоящее в том что всякий объект воспринимается как целое даже если некоторые части этого целого в данный момент не могут быть наблюдаемы например тыльная часть вещи. Каждая часть входящая в образ восприятия приобретает значение лишь при соотнесении ее с целым и определяется им. Сам образ восприятия также зависит от особенностей составляющих его частей.
28209. Культурно-историческая психология (Л.С.Выготский, А.Н.Леонтьев) 50 KB
  Важнейшее отличие деятельности человека от поведения животных заключается в использовании человеком орудий труда для преобразования мира и сохранении этих орудий. Центральный момент возникновение символической деятельности овладение словесным знаком. Процесс формирования высшей психической функции отнюдь не мгновенен он растянут на десятилетие зарождаясь в речевом общении и завершаясь в полноценной символической деятельности. Общение со взрослым овладение способами интеллектуальной деятельности под его руководством как бы задают...