ОСНОВНЫЕ ПОНЯТИЯ, ТРЕБОВАНИЯ И ПРАВИЛА ПРОГРАММИРОВАНИЯ



ОСНОВНЫЕ ПОНЯТИЯ, ТРЕБОВАНИЯ И ПРАВИЛА ПРОГРАММИРОВАНИЯ.

Алгоритм – неформальное изложение способа решения какой-либо задачи.

Программа – алгоритм, записанный на языке, понятном определенному исполнителю.

Можно сказать, что написание программы разбивается на два этапа: первый – придумывание решения задачи, т.е. составление алгоритма, и второй – перевод его на нужный язык программирования. На начальном этапе развития программирования считалось, что, поскольку эти два этапа требуют различных знаний и навыков, необходимы две различные специальности: системные аналитики и кодировщики. Однако постепенно был найден ряд простых правил, пользуясь которыми удается формулировать алгоритмы так, что их перевод сводится к «подстрочнику», т.е. к механической замене одних слов на другие. Поэтому кодировщики стали не нужны.

Далее мы попробуем сформулировать эти правила. Для этого мы будем рассматривать примеры алгоритмов, и выявлять в них ошибки, мешающие их простому переводу на язык программирования. Из каждой ошибки мы будем выводить правило, позволяющее её избежать.

Действующие лица

Алгоритм для решения системы 2х линейных уравнений графически:

1) Написать программу, рисующую линию по коэффициентам уравнения.

2) Сообщить программе коэффициенты 1го уравнения.

3) Сообщить программе коэффициенты 2го уравнения.

4) Найти на экране точку пересечения и выдать ответ.

Обсуждение:Задумайтесь: кому (какому исполнителю) предназначены приказы в этом алгоритме? Кто должен выполнить написанное в п. 1? В пп. 2 и 3? В п. 4? Очевидно, что это – не одно и то же лицо. Следовательно, мы не сможем перевести такой «алгоритм» в программу, которая будет выполняться единственным исполнителем.

Ошибка:пункты «алгоритма» предназначены разным исполнителям.

Требование:все пункты алгоритма должны быть предназначены одному исполнителю.

NB!

В программировании участвуют 3(+1) действующее лицо:

1) Программист (пишет программу).

2) Исполнитель (исполняет ее). Его часто отождествляют с программой.

3) Пользователь (пользуется программой).

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

Еще одним важным действующим лицом является

4) Читатель

Кто это?

Это человек, читающий программу не с целью её исполнить, а с целью понять.

И кто же это?

Прежде всего – это ваш преподаватель.

Если же говорить о работе, а не об учебе – это тот программист, который пытается разобраться в том, что вы оставили, уйдя на больничный, в отпуск или, в конце концов, уволившись. Если вы думаете, что в этом случае вам уже все равно, то учтите, что ваш работодатель может быть существенно иного мнения. А если он увидит ваши программы («это я для себя написал...»), то «все равно» вам может стать даже слишком скоро.

Ну и еще это – самый дорогой вам человек. То есть – вы сами, но после хотя бы недельной паузы в написании программы. Обычно первая мысль после такой паузы: «Господи, кто это писал? Руки бы поотрывал...»

Так что: программа должна быть читабельной, т.е. понятной для читателя.

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

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

Понятие оператора

Алгоритм:

1) Нарисовать две линии в произвольных местах экрана.

2) Линии не должны пересекаться.

3) Длина линий равняется трем сантиметрам.

Ошибка:второй и третий пункт не являются завершенными командами. Это – уточнения к первому пункту.

Требование:каждый пункт алгоритма должен содержать законченную команду, для выполнения которой не требуется «заглядывать вперед» по тексту.

Такие команды называютсяоператорами.

Алгоритм:

1) Нарисовать в центре экрана круг, диаметр равен трем сантиметрам.

2) Перед этим стереть все с экрана.

Ошибка:этот алгоритм нельзя выполнить последовательно, по мере чтения!

Требование:если действия выполняются последовательно, то они должны быть записаны в порядке выполнения.

Эта конструкция называетсяпоследовательность.

Цикл

Алгоритм приготовления яичницы-болтуньи (из 12 яиц):

  1. Поставь сковородку на огонь
  2. Разбей яйцо
  3. Вылей на сковородку
  4. Разбей яйцо
  5. Вылей на сковородку
  6. Разбей яйцо
  7. Вылей на сковородку
  8. Разбей яйцо
  9. Вылей на сковородку
  10. Разбей яйцо
  11. Вылей на сковородку
  12. Разбей яйцо
  13. Вылей на сковородку
  14. Разбей яйцо
  15. Вылей на сковородку
  16. Разбей яйцо
  17. Вылей на сковородку
  18. Разбей яйцо
  19. Вылей на сковородку
  20. Разбей яйцо
  21. Вылей на сковородку
  22. Разбей яйцо
  23. Вылей на сковородку
  24. Разбей яйцо
  25. Вылей на сковородку

Обсуждение:Неужели действительно надо писать так много? А если бы нам пришлось описывать алгоритм для забивания 1000 гвоздей?

Требование:если действие многократно повторяется, то используйте конструкцию «повторяй», которая называетсяциклом.

NB! Использование цикла – одно из проявлений «принципа обобщения»: программа (алгоритм) должна быть написана так, чтобы она использовалась в максимально широком диапазоне ситуаций, т.е. максимально обобщенно. Это же относится к ее частям.

В частности операторы, которые надовыполнить несколько раз, должны быть по возможностинаписаны один раз.

Другими словами, текст в программе не должен повторяться. Это плохо не тем, что приходится его писать много раз – редактор текста позволяет его повторить очень просто. Более важны три обстоятельства: во-первых, если мы захотим внести изменение в программу – мы должны вносить его во всех строках, что уже заметно сложнее. Кроме того есть риск забыть где-то его сделать. Во-вторых, таким способом невозможно описать действия, которые должны повториться неизвестное заранее число раз. И, в-третьих, такую программу неудобно читать и понимать.

Структурная запись программы и структурные отступы

Итак, получился следующий

Алгоритм:

1) Поставь сковородку на огонь

2) Повторяй 12 раз

3) Разбей яйцо

4) Вылей на сковородку

5) Взбалтывай до готовности

6) Подожди 3 минуты

7) Подай на стол

Ошибка:не ясно, что именно надо повторять 12 раз.

Представьте, что будет, если исполнитель 12 раз повторит только 3ю строку… 3,4 и 5ю… с 3й по 6-ю… с3й по 7ю…

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

NB! В алгоритмах мы будем отмечать такую область скобкой (). Верхняя сторона скобки заменяется самим заголовком (в нашем примере «повторяй …»). Для других конструкций будет заменяться нижняя часть скобки, а иногда – обе.

Чтобы вертикальная сторона скобки помещалась, весь текст внутри нее будем смещать вправо.

Чтобы такие «невидимые скобки» в программе было легче увидеть, надо заголовок и завершающее слово (если оно есть) писать точно друг под другом, а все, что «в скобке», – сдвигать вправо – делать дополнительный отступ.

NB! Такие отступы называютсяструктурными отступами. Этот стиль оформления программ и алгоритмов является общепринятым стандартом.

Исправленный алгоритм:

Поставь сковородку на огонь

Повторяй 12 раз

– заголовок

Разбей яйцо

– тело цикла

Вылей на сковородку

– конец действия заголовка

Взбалтывай до готовности

Подожди 3 минуты

Подай на стол

NB! Повторяемые циклом действия называютсятелом цикла.

Условный оператор

Алгоритм работы работа-официанта:

1) Подать меню

2) Подать икру

3) Подать шампанское

4) Взять деньги

Ошибка: подавать икру и шампанское надо не всегда.

Правило:если фрагмент программы должен выполняться не всегда, а только при определенном условии, надо использоватьконструкцию «если»или условный оператор.

Исправленный алгоритм:

Подать меню

Если икра заказана

Подать икру

Если шампанское заказано

Подать шампанское

Взять деньги

NB!Строка «Если…» – тоже заголовок и требует указания области действия.

Обратите внимание на слова, стоящие после слова «Если». Очевидно, они являются вопросом, который исполнитель должен задать клиенту. (Только знак вопроса не поставлен.) Скажите, любой ли вопрос можно использовать после слова «Если»? (Например, «если Который час…», «если Как вас зовут…») Чем отличаются вопросы, которые можно употребить после «если»?

NB!Условиемв программировании называется «вопрос» требующий ответа «да» или «нет».

Например:

Икра заказана?

X>0?

Когда ответ – «да», говорят, что условие истинно.

Когда ответ – «нет» – ложно.

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

NB! Условный оператор тоже нужен для обобщения программы: чтобы одна и та же программа могла использоваться в разных ситуациях: в случае истинности и в случае ложности условия.

Пожалуйста, не путайте «условие» и «условный оператор»! Условие являетсячастью условного оператора.

Алгоритм для рекламного автомата Гербалайф:

Если вес клиента > 60 кг

вручи пакет Гербалайф

Если вес клиента <= 60 кг

вручи приз-шоколадку

Ошибка: Что делает исполнитель в строчках 1 и 3? Фактически клиент взвешивается дважды.

Исправленный алгоритм:

1)

Если вес клиента > 60 кг

2)

вручи пакет Гербалайф

3)

Иначе

4)

вручи приз-шоколадку

Правило:если в случае истинности и ложности условия нужно выполнять разные действия, то надо использовать конструкцию: «если …иначе». Она называется полной формой условного оператора.

NB! Обратите внимание на расположение слова «иначе». Оно, с одной стороны, показывает, где кончились строки, выполняемые при истинности условия, т.е. завершает область действия заголовка «если» (и поэтому находится строго под ним). С другой стороны, «иначе» является заголовком для строк, выполняемых при ложности условия (и, следовательно, требует скобки для ограничения ее области действия). Поэтому «иначе» пишется как бы в разрыве скобки.

Заменяется на «если вес>60»

вручи пакет Гербалайф

Делается при весе>60

Заменяется на «иначе»

вручи приз-шоколадку

Делается при весе<=60

Завершает строки «иначе»

Алгоритм (фрагмент):