Иллюстрированный самоучитель по Basic, вводный курс

Разветвляющийся алгоритм. Безусловный переход.

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

Однако надо двигаться вперед. А дальше у нас – разветвляющийся алгоритм. Что это такое, мы уже говорили. Например, витязь на перепутье: "Если налево пойдешь, коня потеряешь, если прямо пойдешь – смерть найдешь", ну и т. д.

А вот как он реализуется на практике в Бейсике, мы поговорим сейчас.

Ветвление в алгоритме и программе осуществляется двумя способами:

  • на основе безусловного перехода;
  • на основе условного перехода. Начнем с первого.

Безусловный переход

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

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

CLS
?"?*"?"??*"

Символ ? в данном случае означает пробел.

Добавим теперь метку 1 рядом со второй строкой и оператор goto в конце программы. Получаем:

CLS
1:?"*"
?"?*"
9 "77* "
GOTO 1

Казалось бы, изменения незначительные, но запустите программу и посмотрите что происходит! Вы в панике? Вы пытаетесь прекратить действие программы, но ничего не получается? Программа зациклилась! Что делать? Спокойно нажмите клавишу CTRL и, не отпуская ее, клавишу Break. Это называется прервать выполнение программы. Переведите дух и давайте шаг за шагом разберемся, что же произошло.

Программа очищает экран, затем рисует первую звездочку, под ней с отступом в один пробел – вторую, потом ниже третью, а вот затем получает команду goto 1. Это приказ, которого невозможно ослушаться. Программа ищет метку, находит ее у команды рисования первой звездочки и начинает снова последовательно выполнять команды рисования – первую, вторую, третью и – снова приказ перехода, и так – до бесконечности (вернее, до прерывания программы). А поскольку оператор print, не снабженный точкой с запятой, после выполнения всегда переводит курсор на следующую строку, то и получается эффект движения.

А теперь поупражняйтесь.

110. Попробуйте спрогнозировать, что произойдет, если метку 1 в программе рисования звездочек указать в первой строке перед оператором cls? А что, если в четвертой строке? Или (кощунственная мысль!) перед самим оператором goto? Проверьте свои предположения на практике.

111. Напишите программу, которая заставит бежать по экрану узор.

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

113. Посмотрите на текст следующей программы:

х=0
1: Х=Х+1? X
GOTO 1

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

Строго говоря, серьезное программирование не любит оператор goto. Считается, что он засоряет и путает программу. Вызывает зацикливание и зависание компьютера. Рекомендуют обходиться без него. А мне он все равно нравится. Но это мое личное даже не мнение, а просто чувство. При написании серьезных программ я тоже стараюсь обходиться без goto.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.