Главная » Basic » ДЕТАЛИЗИРОВАННЫЕ СТРУКТУРЫ

0

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

Ниже  описаны  три  типа  структур,  каждый  из  которых  иллюстрируется  структограммами   и фрагментами программ, написанных на стандартном Бейсике (минимальном подмножестве) и  на расширенной версии Бейсика.

Последовательность, или конкатенация, операторов представляет собой такой блок операторов,  в котором нет передачи управления ни внутрь этого блока, ни из него. Управление всегда передается первому оператору блока и покидает блок лишь после исполнения его последнего оператора. Таким образом, такой блок имеет только один вход и один выход:

Процесс

10   REM БЛОК ПРОЦЕССА

20—————

30—————

40————–50————–

60   REM КОНЕЦ БЛОКА

В некоторых системах с Бейсиком несколько операторов можно записать в одной строке, используя разделители; при условии, что среди этих операторов нет оператора передачи  управления, такую строку можно рассматривать как небольшой блок.

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

"Если условие выполнено, то процесс 1, в противном случае процесс 2" 155

Чтобы  устранить  дублирование  оператора  INPUT  А,  приведенную  выше  структограмму  можно запрограммировать следующим образом:

Однако в этом случае концом цикла будет не оператор в строке 80, а оператор в строке 10. Строка 10 служит также инициирующим оператором перед входом в цикл, и цикл "переворачивается с ног на голову" для того, чтобы включить в себя этот оператор. Хотя этот прием экономит оператор, данная форма цикла трудна для понимания и поэтому не рекомендуется. Таким  образом, общая форма обсуждаемого цикла такова:

Только в нескольких версиях Бейсика имеется оператор, организующий цикл ПОКА (см. гл. 6).

Другой вариант итерации возникает в том случае, когда проверка условия происходит в конце цикла. Он имеет форму "повторять процесс до тех пор, пока не выполнится условие". В данной ситуации стандартный Бейсик вообще ничем не может помочь, поэтому для конструирования  такого цикла надо пользоваться операторами IF и GO TO, например:

10      INPUT В

20      ——-

30      ——-

40      ——-

50   IF В > 4.2 THEN 10

Обратите внимание на то, что условие в структограмме является отрицанием условия в операторе IF. Структограммы  разработаны  с  таким  расчетом,  чтобы  горизонтальная  полоса  символа   цикла указывала место проверки условия окончания цикла.

Лишь  немногие версии  Бейсика предусматривают конструкцию ПОВТОРЯТЬ ДО  (см.  оператор

REPEAT в гл. 6).

5.3.2.  ПСЕВДОКОД

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

Комментарии Формулы

Описания действий и процессов Последовательности

Выбор — "если .. . , то .. ., в противном случае …" Итерации — "пока . .., повторять …" — "повторять

… до …"

В  описания  процессов  могут  входить  такие  операторы  Бейсика,  как  INPUT,  PRINT,  READ  и присваивания1, но не операторы перехода или другие средства передачи управления,  применение которых   должно   ограничиваться   реализацией   трех   указанных   выше   типов    структур   на заключительном этапе процесса проектирования.

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

4,2.51,10.0,-5.0,7.5 то вывод должен выглядеть следующим образом:

0.40,0.251, 1.00,-0.5,0.75 Первый уровень разработки ясен:

Уровень 1: Ввести данные. Найти максимум. Вывести результаты.

1 Так как по замыслу псевдокод должен быть в достаточной мере близок к естественному языку, то далее в контексте псевдокода будут использоваться переводы служебных слов Бейсика, набранные прописными буквами. Прим. перев.

Детализация  1.1.   Ввод данных можно   детализировать на псевдокоде

следующим образом: Получить число элементов данных. Пока не все элементы введены прочитать и запомнить значение элемента. Конец цикла

Это описание можно перевести на Бейсик следующим образом:

100   INPUT "УКАЖИТЕ ЧИСЛО ЭЛЕМЕНТОВ"; N

110

FOR I=1 TO N 120

INPUT A (I);

130

NEXT I

Детализация 1.2. Отыскание максимума можно детализировать следующим образом:

Выбрать в качестве максимума элемент данных.

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

Детализация 1.3. Вывод результатов можно детализировать следующим образом:

Пока не все результаты выведены,

ВЫВОД (значение очередного элемента)/максимум. Конец цикла.

Это описание можно немедленно перевести на Бейсик:

300   FOR I = 1 ТО N

310      PRINT A(I)/M

320   NEXT I

Уровень 2

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

если М < текущий элемент, то М = текущий элемент. Конец цикла.

Это описание можно перевести на Бейсик следующим образом: 200  М=А(1)

210   FOR I=1 TO N

220     IF M < A (I) THEN М = А (I)

230   NEXT I

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

10   REM ПРИМЕР ПРОГРАММЫ, ПОЛУЧЕННОЙ ИЗ ПСЕВДОКОДА

20   DIM A(20)

100   INPUT "ВВЕДИТЕ ЧИСЛО ЭЛЕМЕНТОВ";N

110   FOR I=1 ТО N 120   INPUT А(I),

130   NEXT I

200   М=А(1)

210   FOR I=1 ТО N

220   IF M<A(I) THEN M=A(I)

230   NEXT I

300   FOR I=1 ТО N

310   PRINT A(I)/M;

320   NEXT I

500   END RUN

ВВЕДИТЕ ЧИСЛО ЭЛЕМЕНТОВ ?5

?4.2.51.10.0.-5.0.7.5

0.40  0.251  1.00 -0.5  0.75 END AT LINE 500

При решении реальной задачи может потребоваться написать на псевдокоде много уровней, чтобы довести все модули до такого состояния, при котором они окажутся готовыми для программирования.

5.3.3.  ЗАКЛЮЧЕНИЕ

(а) Разработка по методу "сверху вниз". Решение задачи представляется в виде модулей, каждый из которых выполняет самостоятельную группу действий. Если на начальных этапах Вы обнаруживаете, что не можете продолжать разработку далее, то причиной этому могли быть неверные исходные предпосылки. Может быть, Вы не вполне поняли задачу. Однако попытки получить решение нередко являются составной частью процесса изучения задачи. Напишите решение заново, используя другой подход, например выберите иные управляющие структуры и другой порядок выполнения действий.

Иногда бывает трудно приступить к решению некоторых задач; в таких случаях может оказаться полезным взять большой лист бумаги, например чистую бумагу для распечаток, и заполнить его группами  различных  действий,  описаниями свойств решения, формулами и возможными программными структурами, скажем массивами, — в общем, всем, что хоть в какой-то мере может оказаться полезным. Не сдавайтесь, и постепенно Вам удастся связать некоторые идеи по поводу решения в единое целое и начать формальный процесс разработки.

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

(в)  В заключение переведите разработанное описание  из псевдокода или структограммы в программу на Бейсике. На этом этапе можно пользоваться

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

(г) Сохраните наряду с распечаткой программы бумаги с набросками проекта и, если потребуется, — его заключительный  вариант. Таким образом Вы получите некоторую документацию к завершенной программе.

Избегайте соблазна создавать программу по частям, не отходя от ВТУ: набрать несколько операторов на клавиатуре,  исполнить их, исправить ошибки, перезапустить, добавить еще несколько операторов и  т. д. Этот способ хорош, пока надо проверить, как работают те или  иные приемы  программи-

рования, но  через  какое-то  время  отойдите от  машины и   спокойно разработайте программу на бумаге.

Источник: Уолш Б.    Программирование на Бейсике: Пер. с англ. М.: Радио и связь, 1988. 336 с: ил.

По теме:

  • Комментарии