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

Действия, которые выполняет оператор цикла (for), можно выразить без использования оператора (for), используя его эквивалентное представление через другие операторы Паскаля.

Управляющая структура оператора for - это структура типа “fordo”, в которой индексный список соответствует списку значений, лежащих между значениями выражений E1 и E2, индекс цикла - переменной V, а do - часть - оператору S.

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

Структура FORDO

Управляющая структура FORDO может быть представлена в двух формах, приведенных на рисунках 1,2. Отличие между ними состоит в том, что во втором случае все действия по изменению индекса цикла собраны в одном символе “модификация”.

Индекс (цикла) - переменная простого или строкового типа, которая последовательно принимает значения из индексного списка. Индекс цикла можно использовать в Do-части, но нельзя изменять его значение.

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

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

Индексный список можно задать с помощью правила, по которому формируются значения индекса. Например: I = 1, 10, 1; означает, что индекс цикла I изменяется от 1 до 10 с шагом 1. Т.е. I принимает 10 значений, значит, цикл выполняется 10 раз. Или, в общем случае, I = Eн, Ek, h, где Eн - начальное значение цикла, Ek- конечное значение цикла, h - шаг изменения цикла.

На Object Pascal она может быть реализована посредством применения оператора цикла for.

Структура FORDO. Е – схема выполнения

Пример консольного приложения для определения числа нечётных чисел в заданном диапазоне

//-----------------------------------------------------

program Project1;

{$APPTYPE CONSOLE}

uses

  SysUtils;

var b, e, i, counter: integer;

begin

  counter:= 0;

  write('b = '); readln(b);

  write('e = '); readln(e);

  for i:= b to e do

    if odd(i) then inc(counter);

  write('Odd numbers = ',counter);

  readln;

end.

Эквивалентное представление оператора цикла с параметром

Оператор

      for V := Expr1 to Expr2 do Body;

эквивалентен оператору

     begin

       Temp1 := Expr1;

       Temp2 := Expr2;

       if Temp1 <= Temp2 then

       begin

         V := Temp1;

         Body;

         while V <> Temp2 do

         begin

           V := Succ(V);

           Body;

         end;

       end;

      end;

и оператор цикла for

     for V := Expr1 downto Expr2 do Body;

эквивалентен оператору

     begin

       Temp1 := Expr1;

       Temp2 := Expr2;

       if Temp1 >= Temp2 then

       begin

         V := Temp1;

         Body;

         while V <> Temp2 do

         begin

           V := Pred(V);

           Body;

         end;

       end;

     end;

где Temp1 и Temp2 - вспомогательные переменные, тип которых совпадает с основным типом переменной V, и которые не  встречаются в другом месте программы.

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

Вывод

Для организации цикла необходимо проанализировать процесс обработки данных:

*  описать последовательность действий, выполняемых многократно;

*  определить сколько раз может выполняться цикл на множестве исходных данных и на основе этого выбрать подходящий цикл;

*  сформулировать условие продолжения или завершения выполнения цикла.

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

1.  Назначение операторов цикла?

2.  От чего зависит, какой оператора цикла следует применить?

3.  Какие операторы цикла определены в Object Pascal?

4.  Назначение оператора цикла (repeat)?

5.  Какие действия позволяет запланировать оператор цикла (repeat)?

6.  Что такое условие завершение цикла?

7.  Что такое тело цикла?

8.  Сколько раз может выполняться тело цикла в операторе цикла (repeat)?

9.  Когда завершится цикл (repeat)?

10. Какой цикл с постусловием считается неправильно организованным циклом?

11. Назначение оператора цикла (While)?

12. Какие действия позволяет запланировать оператор цикла (While)?

13. Что такое условие продолжение цикла?

14. Что такое тело цикла?

15. Сколько раз может выполняться тело цикло в операторе цикла (While)?

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

17. Назначение оператора цикла (for)?

18. Какие действия позволяет запланировать оператор цикла (for)?

19. Что такое индекс цикла?

20. Что такое тело цикла?

21. Что такое начальное выражение?

22. Что такое конечное выражение?

23. Сколько раз может выполняться тело цикла в операторе цикла (for)?

24. Сколько операторов можно помещать в тело цикла оператора цикла (for)?

25. Когда завершится цикл (for)?

26. Можно ли изменять индекс цикла в теле цикла оператора цикла (for)?

27. Определено ли значение индекса цикла после завершения оператора цикла (for)?

28. Является ли структура FORDO простой программой?

29. Является ли структура FORDO элементарной программой?

30. Какой оператор Object Pascal позволяет реализовать программы с управляющей структурой типа структура Fordo?

31. Что такое Do-часть?

32. Что такое индексный список?

33. Что такое индекс цикла?

34. Сколько раз выполняется Do-часть?

35. Какие действия по обработке данных можно организовать с помощью структуры Fordo?

36. Является ли структура DOUNTIL простой программой?

37. Является ли структура DOUNTIL элементарной программой?

38. Какой оператор Object Pascal позволяет реализовать программы с управляющей структурой типа структура DOUNTIL?

39. Что такое Do -часть?

40. Что такое until -тест?

41. Когда выполняется Do -часть?

42. Сколько раз выполняется Do -часть?

43. Какие действия по обработке данных можно организовать с помощью структуры DOUNTIL?

44. Является ли структура WHILEDO простой программой?

45. Является ли структура WHILEDO элементарной программой?

46. Какой оператор Object Pascal позволяет реализовать программы с управляющей структурой типа структура WHILEDO?

47. Что такое do -часть?

48. Что такое While -тест?

49. Когда выполняется do -часть?

50. Сколько раз выполняется do -часть?

51. Какие действия по обработке данных можно организовать с помощью структуры WHILEDO?

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

1.  А.И. Марченко. Программирование на языке Object Pascal 2.0. - К.: Юниор, 1998. - 304 с., ил.

2.  Кэнту М. Delphi 5 для профессионалов. – СПб.: Питер, 2001. – 944 с.: ил.

3.  П. Дарахвелидзе, Е. Марков. Программирование в Delphi 4. - СПб.: БХВ - Санкт-Петербург,1999.-864 с., ил.

4.  Петр Дарахвелидзе, Евгений Марков. Delphi - среда визуального программирования. СПб.: BHV - Санкт-Петербург, 1996. - 352 с.

5.  Джон  Матчо, Дэвид Р. Фолкнер. Delphi. М.: Бином. 1995. -464 с.

6.  Джеф Дантеман, Джим Мишел, Дон Тейлор. Программирование в среде Delphi. - К.: НИПФ «ДиаСофтЛтд», 1995. - 608 с.