Циклические процессы обработки данных. Управляющие структуры WHILEDO, DOUNTIL, FORDO

Страницы работы

19 страниц (Word-файл)

Содержание работы

Тема 3.

Циклические ПОД

 

Новосибирск 13.05.2013

 
 



Содержание

Изучаемые вопросы.. 3

Циклический процесс обработки данных. 3

Операторы цикла. 8

Оператор цикла с постусловием (repeat) 8

Управляющая структура DOUNTIL. 9

Пример  оператора цикла с постусловием (repeat) 10

Синтаксическая диаграмма оператора цикла с постусловием (repeat) 11

Оператор цикла с предусловием (while) 11

Управляющая структура WHILEDO.. 12

Пример оператора цикла с предусловием (while) 13

Синтаксическая диаграмма оператора цикла с предусловием (While) 13

Оператор цикла с параметром (for) 14

Структура FORDO.. 15

Синтаксическая диаграмма оператора цикла с параметром.. 17

Вывод. 17

Контрольные вопросы.. 18

Источники дополнительных сведений. 19


Изучаемые вопросы

Управляющие структуры WHILEDO, DOUNTIL, FORDO

Операторы while, repeat, for

Е-схема и Е-дерево выполнения программ с циклами

Метод пошаговой детализации

Циклический процесс обработки данных

Изучение циклических процессов обработки данных начнём со следующего примера.

Пусть требуется спроектировать и реализовать программу в соответствие со следующей спецификацией.

Программа предназначена для определения чётности числа. Программа должна работать в режиме диалога с пользователем. Данные вводятся с клавиатуры терминала. Результат выводится на монитор. Для вычисления чётности использовать операцию вычитания.

Проанализируем программную спецификацию и опишем поведение проектируемого процесса обработки данных с помощью HIPO – диаграммы с точки зрения исходных и результирующих данных.

HIPO - диаграмма

Детализируем раздел «Обработка» HIPO - диаграммы с помощью блок-схемы, представленной ниже.

Блок-схема программы для нахождения чётности числа.

Используя метод пошаговой детализации, детализируем содержимое функциональных узлов 2 и 3, заменяя описанные в них последовательности действий подходящими блок-схемами. Детализируем приведение значения к интервалу 0..1, указанное в функциональном узле 2 приведённой выше блок-схемы. Учитывая,  что эта последовательность действий многократно исполняемая, причём она может исполняться ноль и более раз, используем цикл WHILEDO. В теле цикла выполняется единственная операция – вычитаем из числа 2. Это действие выполняется до тех пор, пока исходное число не будет принадлежать диапазону 0..1. В результате получим:

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

Для анализа возможных путей выполнения полученной блок-схемы построим конечное дерево выполнения с возвратом назад. Оно  представлено на рисунке ниже.

Е-схема выполнения.

Ниже приведено дерево выполнения программы, оно содержит бесконечное число путей выполнения, потому что блок-схема, для которой оно построено, содержит цикл.

E-дерево выполнения.

Детализируем узел 3 приведённой выше блок-схемы. Заменяем его блок-схемой с управляющей структурой IFTHENELSE. Получим в результате:

Консольное приложение для  определения чётности числа будет иметь представленный ниже вид:

program PWhile;

{$APPTYPE CONSOLE}

uses

  SysUtils, URussian;

Var

  x,y: integer;//переменные для хранения исходного //значения и промежуточного результата

  s: String;//строка результата

begin

  write(Rus('Ведите целое число: '));

  readln(x);

  y:= abs(x);//определяем модуль введённого числа

  while y > 1 do y:= y - 2;//приводим число к

  //интервалу //0..1

  if y = 0 then s:= ' - Чётно' else s:= ' - Нечётно';

  //формируем строку результата

  write(x,Rus(s));//выводим результат

  readln;

end.

Спроектируем определение чётности с помощью цикла DOUNTIL. Блок-схема отличается от предыдущей только в части детализации узла 2. Здесь для организации многократно выполняемой последовательности действий будем использовать цикл с управляющей структурой DOUNTIL. Поскольку это цикл выполняется не менее одного раза, а исходное значение может быть равно 0 или 1, цикл помещаем внутри структуры IFTHEN. Таким образом, цикл будет выполняться, только для исходных значений больших 1. Результатом детализации функционального узла 2 будет представленная ниже блок-схема:

Пример консольного приложения для реализации определения чётности с помощью цикла repeat представлен ниже:

program PUntil;

{$APPTYPE CONSOLE}

uses

  SysUtils,

  URussian;

var

  x, y: integer;

  s: String;

begin

  write(Rus('Введите целое число: '));

  Readln(y);

  x:= abs(y);

  if x > 1 then repeat x:= x - 2 until x < 2 ;

  if x = 0 then s:= ' - чётное число'

    else s:= ' - нечётное число';

  write(y,Rus(s));Readln;

end.

Операторы цикла

Операторы цикла относятся к структурным операторам. Они задают повторное выполнение определенных операторов. Если число повторений заранее известно, то подходящей конструкцией является оператор for. В противном случае следует использовать операторы while или repeat. Эти циклы называют циклами, управляемыми событиями. В состав языка включены три оператора цикла:

·  Оператор цикла с постусловием (repeat)

·  Оператор цикла с предусловием (while)

·  Оператор цикла с параметром (for)

Оператор цикла с постусловием (repeat)

Оператор цикла с постусловием (repeat) строится в соответствии со следующим правилом (см. также синтаксическую диаграмму:

repeat S1;S2;... Sn until E

здесь E - выражение булевского типа, которое называется условием завершения цикла; S1;S2;...Sn - последовательность из ноль или большего числа операторов, называемая телом цикла; repeat и until – зарезервированные слова.

В операторе цикла (repeat) условие завершения цикла управляет повторным выполнением тела цикла. Тело цикла выполняется до тех пор, пока условие завершения цикла не примет значения True («истина»). Тело цикла выполняется, по крайней мере, один раз, поскольку условие завершения цикла вычисляется после каждого выполнения тела цикла.

Оператор цикла (repeat) называется циклом с постусловием, потому что сначала выполняется тело цикла, а потом вычисляется условие завершения цикла.

Условие завершения цикла названо так, потому что цикл завершится тогда, когда условие завершения цикла примет значение «истина» (True).

Управляющая структура оператора repeat - это структура типа «DOUNTIL», в которой Until-тест соответствует условию завершения цикла, а Do - часть - телу цикла.

Этот цикл следует применять, когда количество вычислений цикла до входа в него не известно. Но известно, что цикл будет выполняться один и более раз.

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

Управляющая структура DOUNTIL

Похожие материалы

Информация о работе