Ваша первая программа на Паскале

Вид материалаПрограмма

Содержание


Процедура GOTO
Процедура Goto
Процедура Writeln
A+B = (результат)
Подобный материал:
1   ...   5   6   7   8   9   10   11   12   ...   23

Процедура GOTO


Меня часто спрашивают, как же сделать программу по настоящему интерактивной, то есть работающей в зависимости от действий пользователя, не всегда заканчивающей работу после того, как она выполнит какие-нибудь действия. Это возможно, причем просто и мы сейчас этим займемся. А поможет нам в этом процедура goto.

Процедура Goto - осуществляет переход в какое-нибудь место в программе из любой ее точки. То есть с ее помощью можно "прыгать" по программе. Обычно эти прыжки происходят из-за каких либо условий, вот пример:
  1. Вводим два числа;
  2. Складываем их и выводим сумму на экран;
  3. Спрашиваем, повторить ли действие?
  4. Если ответ утвердительный, переходим (прыгаем) на пункт 1 данного алгоритма.
  5. Завершаем программу.

В этом примере программа может выполняться бесконечно, пока ответ пользователя будет утвердительным. Как же это сделать?

Команда goto переходит к определенному месту, которое помечатется так называемой "меткой". Эти метки - особенный тип Паскаля, можно даже сказать и не тип, а часть языка. До того, как их использовать, метки нужно описать - сообщить Паскалю о их наличии. Описание меток поисходит также, как и описание переменных.

Для описания меток имеется специальный раздел, наподобие var (помните, я говорил, что var и begin-end не единственные разделы?) только гораздо проще его. Метки не имеют типа, нужно просто задать им имя. Раздел с метками назвается label и оформляется следующим образом:




Program UseGOTO;

label

First;

var

A,B: Integer;

begin

First:

Write('Введите A: ');

Readln(A);

Write('Введите B: ');

Readln(B);

If A > B Then goto First;

Readln;

end.

Этот пример хорошо демонстрирует использование процедуры goto. Посмотрите внимательно на программу. Что она делает? Запрашивает два числа и если 1-е больше чем 2-е, то повторяется сначала. Необходимые комментарии:
  1. label

Это и есть раздел описания меток. Служебное слово label озаглавливает этот раздел, после него идут имена меток. Если меток несколько, то они перечисляются через запятую.
  1. First:

Так устанавливается метка в программе. Обратите внимание на синтаксис - после имени метки ставиться двоеточие - ":".
  1. If A > B Then goto First;

А это и есть переход при выполнении условия. Заметьте, в конструкии if...then...else отсутсвует слово else, оно нам не нужно, так как мы не делаем ничего при невыполнении условия.

Вот, собственно и все. А теперь давайте вспомним ту задачу, которую я представил вначале - ввести два числа, сложить и запросить повтор. (см. выше).

Итак, напишем эту программу с учетом пройденного материала:




Program UseGOTO;

label

Again;

var

A,B: Integer;

S: String;

Begin

Again:

Write('Введите A: ');

Readln(A);

Write('Введите B: ');

Readln(B);

Writeln('A+B = ',A+B);

Write('Еще раз? (Y/N): ');

Readln(S);

If S = 'Y' Then goto First;

Readln;

end.

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

Особых комментариев, думаю, не требуется - все рассказывал ранее. Вот только я использовал одну процедуру, которую мы с вами пока не проходили - думаю, стоит объяснить ее работу.

Процедура Writeln - эта процедура работает точно так же, как и Write, но после того, как выведет строку, она переносит курсор на новую строку. Если вы читали про HTML в прошлых выпусках, то увидите сходство с тэгом <ВR>

Мне часто задавали вопрос, как переносить строки, отделяя таким образом переменные и прочие части вывода. Запомните, для этого и используется эта процедура. Ею можно вообще просто отделять строки - сколько раз вы ее напишите, столько строк будет попущено.

В нашем примере я вывожу с ее помощью строку A+B = (результат), после чего сразу же переноситься курсор и уже обычной процедурой Write выводиться Еще раз? (Y/N). В общем, это очень полезная процедура и невероятно необходимая.

Ну а сейчас мы продолжаем и следующий раздел - типы.