Pascal-машина (PM) – любая комбинация аппаратно-программных средств, способная выполнить Pascal-программу.
Мы будем использовать Turbo Pascal – наиболее распространенный компилятор Паскаля, который поддерживает стандарт и имеет несколько интересных расширений, которые мы, возможно, используем.
1.1. Программа PrintHello
PROGRAM PrintHello(INPUT, OUTPUT);
BEGIN
WRITELN(‘HELLO’)
END.
OUTPUT: HELLO
Форма, в которой представлена программа, называется синтаксисом.
Данная программа имеет заголовок и оператор ВEGIN. Эти части есть в синтаксисе любой Паскаль-программы. Слова PROGRAM, INPUT, OUTPUT, BEGIN, WRITELN, END – стандартные слова языка Pascal.
Знаки пунктуации и скобки должны размещаться именно так как размещаются.
Стандартное слово WRITELN указывает Паскаль-машине вывести строку текста.
Стандартное слово INPUT – имя входных данных программы, которые в данном случае не используются
Стандартное слово OUTPUT – имя выходных данных программы, которые будут распечатаны как результат работы программы
Стандартные слова PROGRAM BEGIN END указывают Паскаль-машине границы исполняемой части программы. Точка символизирует конец программы.
Название программы – идентификатор, начинается с буквы, не содержит пробелов. Название программы не влияет на результат выполнения но оно должно быть достаточно информативным для других программистов, которые будут читать эту программу.
‘HELLO’ символьная строка, апострофы, расположенные внутри символьной строки, удваиваются.
Выражение – комбинация стандартных слов языка Паскаль, переменных, литералов, знаков пунктуации, допустимая синтаксисом языка Паскаль.
Оператор – комбинация выражений, допустимая синтаксисом языка Паскаль.
1.2 Последовательное выполнение
На предыдущей лекции мы рассмотрели такие понятии как Паскаль-машина, Паскаль-программа, рассмотрели программу 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 на нескольких строках.
1.3. Символьные данные
Как правило, в программах требуется загружать данные в переменные программы, чтобы использовать эти переменные внутри программы. Данные загруженные в переменную могут быть скопированы в другие переменные или выведены в OUTPUT.
Новые идеи: оператор READ, VAR, символьные переменные, идентификаторы, декларативная часть, INPUT, оператор присваивания, оператор присваивания, символьные литералы, комментарии, аннотированный вывод, эхо ввода.
Переменная с символьным значением может быть описана в декларативной части программы. Декларативная часть программы – начинается заголовком, который содержит стандартное слово VAR (VARiables). Далее следуют описания переменных, которые состоят из идентификаторов и стандартного слова CHAR, которое описывает тип данных переменной. Точка с запятой отделяет декларативную часть от предложения BEGIN.
Например:
VAR
Ch:CHAR;
Описывает декларативную часть где идентификатор Ch. Ch – переменная, CHAR – ее тип данных, в данном случае символьный. Обычно говорят, что в декларативной части мы описали переменную Ch типа CHAR.
Рассмотрим программу CopyChar
Вторая строка программы заключена в фигурные скобки. Это комментарий, он никак не влияет на выполнение программы Паскаль-машиной. Обычно в комментариях располагается информация, необходимая для понимания программы, например, другими программистами.
Наличие грамотных комментариев в программе является элементом хорошего стиля программирования.
PROGRAM CopyChar (INPUT, OUTPUT);
{Выводит первый символ из INPUT в OUTPUT}
VAR
Ch: CHAR;
BEGIN
READ(Ch);
WRITELN(Ch)
END.
INPUT: ABC
OUTPUT: A
В символьную переменную Ch могут быть загружены данные размером в один символ, не более. В программе CopyChar используется оператор READ, который загружает данные из INPUT в переменную Ch. Другими словами, в предложении READ переменной Ch присваивается значение первого доступного символа в INPUT.
Следующее далее оператор WRITELN помещает значение переменной Ch в OUTPUT. Как мы видим, оператор WRITELN способен выводить значение переменных в OUTPUT. В предыдущих примерах оператор WRITELN выводил символьные строки, заметьте, что Ch не заключено в апострофы.
Таблица выполнения для программы CopyChar
INPUT | OUTPUT | Ch | |
PROGRAM CopyChar (INPUT, OUTPUT) VAR Ch: CHAR BEGIN READ(Ch) WRITELN(Ch) END. | ABC ABC ABC ABC ABC | _ _ _ A/_ A | ? A A |
Таблица имеет новые столбцы, показывающие данные в INPUT и значение переменной Ch.
INPUT содержит символьную строку ABC до того как началось выполнение программы. Курсор, изображенный символом подчеркивания, создается первой строкой программы, он отмечает первый символ входной последовательности ABC, который может быть считан программой.
Переменная Ch не существует до выполнения третьей строки программы, содержащей объявление переменной Ch. После выполнения третьей строчки программы переменная Ch создается, но ее значение неопределенно, там может быть любое символьное значение, поэтому мы обозначим его знаком вопроса. Почему так происходит, мы поговорим позднее. Это не означает, что Ch принимает значение '?', мы используем знак вопроса как специальный символ аналогично специальному символу / для маркера конца строки.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |


