Последовательное выполнение

 

На предыдущей лекции мы рассмотрели такие понятии как Паскаль-машина, Паскаль-программа, рассмотрели программу PrintHello и начали рассматривать последовательное выполнение Паскаль-программ.

 

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

 

Новые идеи: оператор WRITE, таблица выполнения, продолжение печати на той же строке, новые строки, печать псевдографики.

 

На прошлом занятии мы рассмотрели программу PrintHello. Сегодня Вам предлагается ее модифицированная версия PrintHelloTwo

 

PROGRAM PrintHelloTwo(INPUT, OUTPUT);

BEGIN

WRITE(‘HE’);

WRITE(‘L’);

WRITELN(‘LO’)

END.

 

Данная программа демонстрирует последовательное выполнение, он выводит слово ‘HELLO’ по один-два символа. В программе встречается новое стандартное слово WRITE, с помощью которого задаются операторы WRITE. Оператор WRITE выводит данные в OUTPUT, но не закрывает строку текста, тогда как оператор WRITELN, рассмотренный нами на предыдущей лекции, выводит данные с закрытием строки, после предложения WRITELN данные будут выводиться на новой строке.

Шаги выполнения программы разделены точкой с запятой, этого достаточно, но мы разместили каждый оператор на отдельной строке для читаемости. Стандартные слова BEGIN и END не отделяются точкой с запятой от предложений заключенных внутри.

 

Опробуем определить OUTPUT для различных точек в последовательности выполнения программы:

WRITE(‘HE’);

OUTPUT: HE

WRITE(‘L’);

OUTPUT: HEL

WRITELN(‘LO’)

OUTPUT: HELLO

 

Одним иp способов описания последовательного выполнения программы является таблица выполнения, построим ее для программы PrintHelloTwo

В таблице показаны строки программы, поэтому мы не пишем разделители.

 

  OUTPUT
PROGRAM PrintHelloTwo(INPUT, OUTPUT) BEGIN WRITE(‘HE’) WRITE(‘L’) WRITELN(‘LO’) END. _ _ HE_ HEL_ HELLO/_ HELLO

 

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

· В начале выполнения OUTPUT пуст, курсор в начале строки.

· Вторая строка со словом BEGIN не изменяет OUTPUT, как мы уже говорили, оператор BEGIN служит для задания границ выполнения.

· Третья строка с помощью оператора WRITE выводит символы ‘HE’ в OUTPUT в позицию курсора и сдвигает курсор на две позиции.

· Четвертая строка выводит в OUTPUT ‘L’ и сдвигает курсор на одну позицию.

· Аналогично, пятая строка выводит в OUTPUT ‘LO’ и закрывает строку и передвигает курсор. Закрытие строки мы показываем с помощью символа / - так будет изображаться в таблице выполнения маркер конца строки. Маркер конца строки – невидимый символ, результатом вывода которого в OUTPUT является появление новой строки.

· Последняя строка программы, слово END, прекращает выполнение программы и возможность вывода данных в OUTPUT. Курсор и маркер конца строки пропадают, в OUTPUT остается строка HELLO как результат выполнения программы.

Мы можем поместить другие строки внутри предложений WRITE и WRITELN и, соответственно, получим другой OUTPUT

 

PROGRAM PrintGreeting(INPUT, OUTPUT);

BEGIN

WRITE(‘HELLO’);

WRITE(‘ ’);

WRITELN(‘THERE’)

END.

 

OUTPUT: HELLO THERE

 

Кому-то может показаться странным, но пробел является таким же символом как, например ‘L’ и он может быть напечатан в OUTPUT. Построим таблицу выполнения для программы PrintGreeting

 

  OUTPUT
PROGRAM PrintGreeting(INPUT, OUTPUT); BEGIN WRITE(‘HELLO’); WRITE(‘ ’); WRITELN(‘THERE’) END. _ _ HELLO_ HELLLO _ HELLO THERE/_ HELLO THERE

 

Программа VerticalGreeting выводит более одной строчки в OUTPUT

PROGRAM VerticalGreeting(INPUT, OUTPUT);

BEGIN

WRITELN(‘HELLO’);

WRITELN(‘THERE’)

END.

 

Таблица выполнения для программы VerticalGreeting

  OUTPUT
PROGRAM VerticalGreeting(INPUT, OUTPUT) BEGIN WRITELN(‘HELLO’) WRITELN(‘THERE’) END   _ _ HELLO/_ HELLO/THERE/_ HELLO THERE

 

OUTPUT в данном случае имеет два маркера конца строки, поскольку оператор WRITELN переводит курсор в начало новой строки, и он был использован дважды. После первого оператора WRITELN нет никакой возможности произвести вывод данных на первую строку, где напечатано HELLO.

 

Оператор WRITELN может быть использован без данных для того чтобы закрыть строку в OUTPUT. Таким образом с помощью оператора WRITELN мы можем разметить данные в OUTPUT на нескольких строках.