Функция | Содержание |
ODD(N) | N — целочисленная переменная; результат TRUE, если N — нечетное число, и FALSE, если N — четное число |
EOF(F) | Возвращает значение TRUE, если достигнут конец файла F, в противном случае FALSE |
EOLN(F) | Принимает значение TRUE, если при чтении текстового файла F достигнут конец текущей строки, FALSE — в противном случае |
Таблица 11. Встроенные функции над перечислимыми типами данных
SUCC(s) | SUCC('O') | 'П' | Возвращает значение следующего за S данного перечисляемого типа | совпадает |
SUCC(-90) | -89 | |||
SUCC('a') | 'b' | |||
PRED(s) | PRED('П') | 'О' | Возвращает значение предшествующего S в порядке возрастания в списке | совпадает |
PRED(-90) | -91 | |||
PRED('b') | 'a' | |||
ORD(s) | ORD('Щ') | 153 | Возвращает порядковый номер идентификатора S в списке | INTEGER |
ORD('4') | 52 | |||
ORD(FALSE) | 0 | |||
CHR(s) | CHR(87) | 'W' | Возвращает литеру с кодом S, если она существует | CHAR |
CHR(20l) | 'r' | |||
CHR(53) | '5' |
1.4. Структура программы
Программист вводит текст программы, произвольно располагая строки на экране. Отступ слева выбирает сам программист, чтобы программа была более читабельной. В одной строке допускается писать несколько операторов. Длинные операторы можно переносить на следующую строку. Перенос допускается в любом месте, где можно сделать пробел. Максимальная длина строки не должна превышать 127 символов. Из соображений наглядности, удобства просмотра и отладки программы рекомендуется длину строки ограничивать 80 символами. Программы имеют жесткую структуру, описанную в таблице 12.
Таблица 12. Структура программы
Фрагмент | Содержание | Примечание |
Заголовок | Program <имя программы> | Необязательный |
Раздел 0 | USES, описание модулей, библиотек | Разделы описаний программного блока |
Раздел I | LABEL, описание меток | |
Раздел 2 | CONST, описание констант | |
Раздел 3 | TYPE, описание типов данных | |
Раздел 4 | VAR, описание переменных | |
Раздел 5 | PROCEDURE, FUNCTION - описание процедур и функций, используемых в программе | |
Раздел 6 | BEGIN... END. - тело программы | Раздел исполняемых операторов |
Синтаксические правила построения предложений языка можно описывать следующими способами:
• схемой (форматом предложения или раздела). В учебном процессе выбран именно этот способ, поскольку он наиболее понятен начинающему программисту;
• синтаксической диаграммой. Этот способ детально формализует синтаксис предложения и используется разработчиками трансляторов с языка Паскаль;
• порождающими правилами РАСШИРЕННЫХ БЭКУСА-НАУРА ФОРМ (РБНФ). Это весьма компактный и в то же самое время наглядный способ записи языковых конструкций. Этот способ используется в статьях и научных разработках. В данном курсе используются только пять элементов РБНФ (таблица 13).
Таблица 13
Соглашение | Толкование |
Угловые | Угловые скобки заключают в себе элемент синтаксиса, который Вы должны задать. Текст внутри угловых скобок характеризует элемент, однако, не описывает синтаксис этого элемента |
Квадратные | Квадратные скобки в синтаксических конструкциях заключают в себе один или несколько необязательных элементов |
Вертикальная | Разделяет два альтернативных элемента синтаксической конструкции, один из которых нужно выбрать |
Фигурные | Фигурные скобки заключают в себе несколько элементов, разделенных '|'. Из них нужно выбрать один |
Многоточие … | Многоточие показывает, что можно повторить некоторый элемент один и более раз |
Раздел описания модулей USES
Раздел имеет структуру:
USES
Модуль 1, Модуль 2, ... Модуль N,
где за ключевым словом USES указывается список, в котором перечисляются все имена библиотек (модулей) стандартных и пользовательских, к процедурам и функциям которых есть обращение в программе. Если таких обращений нет, то раздел USES не нужен.
Пример:
USES CRT, GRAPH, HELP, MYLIB;
В этом примере две стандартные библиотеки — CRT, GRAPH и две пользовательские библиотеки — HELP, MYLIB.
Раздел описания меток LABEL
Раздел имеет структуру:
LABEL Метка 1, Метка 2,Метка N,
где за ключевым словом LABEL указывается список, в котором перечисляются все имена меток, встречающихся в программе.
Пример:
LABEL Ml, 12_BL, 9999;
Метки позволяют менять естественный ход выполнения программы. Ссылка на метку осуществляется оператором GOTO <метка>. Если в программе меток нет, то раздел LABEL отсутствует. В теле программы (в разделе операторов) метка ставится перед требуемым оператором и отделяется от него двоеточием.
Пример:
М27: X := А * В - С/2;
Областью действия метки является блок, где она описана. Ниже приведена схема использования меток в тексте программы.
LABEL метка 1, метка 2;
BEGIN
метка 1: <Оператор 1>;
…
метка 2: <Оператор 2>;
…
END.
Раздел описания констант CONST
Раздел существует, если в алгоритме используется по крайней мере одна константа, то есть величина, не изменяющая своего значения в процессе выполнения программы. Попытка изменить значение константы в теле программы будет обнаружена на этапе трансляции.
В стандарте на Паскаль константы определяются следующим способом:
CONST
<Идентификатор 1> = <3начение 1>;
<Идентификатор 2> = <3начение 2>;
<Идентификатор N> = < Значение N>;
Примеры констант:
CONST
А = 15.7;
BXZ = 'Серия N123/5';
MIN_IND = $15D;
С_10 = -0.57Е-6;
L125 = 695;
FLAG = TRUE;
Константа может иметь только предопределенный (стандартный) тип данных. Тип присваивается константе по внешнему виду значения и в соответствии с этим типом отводится память для хранения значения константы.
В качестве расширения стандартного Паскаля разрешено использовать выражения, составленные из ранее определенных констант и некоторых стандартных функций (Abs, Chr, Hi, Length, Lo, Odd, Ord, Pred, Prt, Round, SizeOf, Succ, Swap, Trunc). Примеры использования константных выражений:
CONST
Min = 0;
Max = 250;
Centr = (Max-Min) div 2;
Beta = Chr(225);
NumChars = Ord('2') - Ord('A')+l;
Message = 'не хватает памяти';
ErrStr = 'Ошибка:' + Message + '.';
Ln;
Ln10R = 1/Ln10;
Константные выражения вычисляются компилятором без выполнения программы на этапе ее создания.
Раздел описания типов TYPE
Стандартные типы данных (REAL, INTEGER, BOOLEAN, CHAR) не требуют описаний в этом разделе. Описания требуют только типы, образованные пользователем.
Концепция типов — одно из основных понятий в языке. С каждым данным связывается один и только один определенный тип.
Тип — это множество значений + множество операций, которые можно выполнять над этими значениями, то есть правила манипулирования данными. Использование типов позволяет выявлять многочисленные ошибки, связанные с некорректным использованием значений или операций еще на этапе трансляции без выполнения программ.
О Паскале говорят, что он строго типизирован, то есть программист должен описать все объекты, указывая их типы, и использовать в соответствии с объявленными типами. Программы становятся более надежными и качественными. При компиляции информация используется для уточнения вида операции. Так знаком + для данных типа REAL и INTEGER обозначается операция сложения, а для множеств (тип SET) — объединение. Структура раздела описания типов имеет вид:
TYPE
<имя типа 1> = <значение типа 1>;
<имя типа 2> = <значение типа 2>;
…
<имя типа L> = <значение типа L>;
Имя типа представляет собой идентификатор, который может употребляться в других типах, описанных вслед за данным типом. Раздел TYPE не является обязательным, так как тип можно описать и в разделе переменных VAR. Примеры описания пользовательских типов:
TYPE
DAY = 1..31; Year = 190; {Интервальный тип}
LatBukv = ('А', 'С, 'D', 'G, 'Н'); {Перечисляемый тип}
Matr = array[-1..12, 'А'.. 'F'] of real; {Регулярный тип}
Раздел описания переменных VAR
Это обязательный раздел. Любая встречающаяся в программе переменная должна быть описана. В языке нет переменных, объявляемых по умолчанию. Основная цель этого раздела определить количество переменных в программе, какие у них имена (идентификаторы) и данные каких типов хранятся в этих переменных. Таким образом, переменная это черный ящик, а тип показывает, что мы в него можем положить.
Структура раздела имеет вид:
VAR
<список 1 идентификаторов переменных>:<тип 1>;
<список 2 идентификаторов переменных>:<тип 2>;
…
<список N идентификаторов переменных>:<тип N>;
Тип переменных представляет собой имя (идентификатор), описанный в разделе TYPE при явном описании типа, или собственно описание типа в случае его неявного задания. Примеры описания переменных:
TYPE
DAY= 1..31; Matr = ARRAY[1..5,1..8] OF INTEGER;
VAR
A, B: DAY; X, Y: Matr; {явное описание типов }
YEAR: 190; LES: (LPT, PRN); {неявное описание типов }
А, В, CD, FER51: REAL; {описание переменных стан-}
EQUAL: BOOLEAN; SH: CHAR; {дартных типов производится }
I, J, К: INTEGER; {только в разделе VAR}
Раздел описания процедур и функций
Стандартные процедуры и функции, имена которых включены в список зарезервированных слов, в этом разделе не описываются. Описанию подлежат только процедуры и функции, определяемые пользователем.
PROCEDURE <имя процедуры> (<параметры>); {заголовок процедуры}
<разделы описаний> {тело процедуры }
BEGIN
<раздел операторов >
END;
FUNCTION <имя функции>(<параметры>): <тип результата>; { заголовок }
<разделы описаний > {тело функции}
BEGIN
<раздел операторов >
END;
Структура процедур и функций та же самая, что и у основной программы. Отличие описаний состоит в том, что идентификаторы констант, переменных, процедур и функций, описанных в соответствующих разделах описаний пользовательских процедур и функций, распространяются только на блоки, где они описаны и на блоки внутренние по отношению к ним. На внешние блоки, в том числе на тело основной программы, они не распространяются.
Раздел операторов
Это основной раздел, именно в нем в соответствии с предварительным описанием переменных, констант, функций и процедур выполняются действия, позволяющие получать результаты, ради которых программа и писалась.
Синтаксис раздела операторов основной программы:
BEGIN
<Оператор 1;> { Операторы выполняются}
<Оператор 2;> { строго последовательно}
… {друг за другом.}
<Оператор N>
END.
Комментарий
Это пояснительный текст, который можно записать в любом месте программы, где разрешен пробел. Текст комментария ограничен: слева - '{', справа - '}', и может содержать любые символы. Комментарий игнорируется транслятором, и на программу влияния не оказывает.
Пример использования комментария:
PROGRAM PR;
<Разделы описаний >
BEGIN
<Оператор 1; >
<Оператор 2; >
{< Оператор 3; >
…
<Оператор N > }
END.
Средства комментария часто используются для отладки. Так в приведенном выше примере, операторы — 3,... N, заключенные в фигурные скобки, временно не выполняются.
Правила пунктуации
Основным средством пунктуации является символ точка с запятой – ';'.
1. Точка с запятой не ставится после слов LABEL, TYPE, CONST, VAR, а ставится
после каждого описания этих разделов.
2. Точка с запятой не ставится после BEGIN и перед END, так как эти слова – операторные скобки.
3. Точка с запятой разделяет операторы, и ее отсутствие вызовет:
А := 333 {ошибка — нет ';'}
В := А/10;;;;; {четыре пустых оператора}
4. Возможна ситуация:
END; следует писать END
END; ------- > END
END; END;
5. Допускается запись метки на пустом операторе — <Метка>: ;
6. Точка с запятой не ставится после операторов WHILE, REPEAT, DO и перед UNTIL.
7. В условных операторах ';' не ставится после THEN и перед ELSE.
2. ПРОГРАММИРОВАНИЕ ВЫЧИСЛИТЕЛЬНЫХ ПРОЦЕССОВ
Решение задачи на ЭВМ — это сложный процесс, в ходе которого пользователю приходится выполнять целый ряд действий, прежде чем он получит интересующий его результат.
Идеальная модель процесса решения задач на компьютере показана в таблице 14.
Детальное рассмотрение этапов решения задачи на ЭВМ выходит за рамки данного курса. Напомним лишь некоторые существенные определения и понятия, которые будем использовать далее.
Алгоритмизация — это процесс проектирования алгоритма, то есть выделение совокупности действий, используемых в математическом методе, и сведения их к совокупности действий, которые будет выполнять ЭВМ.
Таблица 14
Этапы решения задачи | Исходные данные, результаты |
|
Начало решения | Формулировка цели. Концептуальная, содержательная постановка задачи | |
Постановка задачи Построение модели | ||
Формальная математическая постановка задачи для ЭВМ | ||
Алгоритмизация | ||
Алгоритм | ||
Запись алгоритма на языке программирования | ||
Исходный текст программы на алгоритмическом языке. Программа в кодах ЭВМ | ||
Выполнение программы | ||
Результаты выполнения программы — числа, диаграммы, графики | ||
Анализ и использование результатов работы программы | ||
Выводы по результатам решения исходной задачи | ||
Конец решения |
|
Алгоритм — совокупность точно описанных действий, приводящих от исходных данных к желаемому результату и удовлетворяющих следующим свойствам:
• определенности — алгоритм должен однозначно, точно и понятно задавать выполняемые действия (для одних и тех же исходных данных должен получаться один и тот же результат);
• дискретности — алгоритм должен представлять действие в виде последовательности составных частей;
• результативности — алгоритм должен приводить к желаемому точному результату за конечное время;
• массовости — алгоритм должен быть приемлем для решения всех задач определенного класса.
Структурное проектирование — проектирование сверху вниз, это подход к разработке и реализации, который состоит в преобразовании алгоритма в такую последовательность все более конкретных алгоритмов, окончательный вариант которой представляет собой программу для вычислительной машины.
Существуют различные способы записи алгоритмов (словесный, формульно-словесный, графический, аналитический). Каждый из способов имеет свои плюсы и минусы; В данном курсе в основном используется два способа графического представления алгоритма: блок-схема и структурограмма.
Блок-схемы — это графическое представление алгоритма, дополняемое словесными записями. Каждый блок алгоритма отображается геометрической фигурой (блоком). Правила выполнения схем алгоритмов регламентируют ГОСТ 19.701-90. Графические фигуры соединяются линиями, потоками информации. Эти линии задают порядок переходов от блока к блоку. Блок-схемы наглядны для представления простых вычислительных алгоритмов и ориентированы для
программирования задач на языках АССЕМБЛЕР, АЛГОЛ, БЕЙСИК, ФОРТРАН, ПЛ. В этих языках программирования требуется четко отслеживать последовательность команд и широко используется оператор GOTO.
В ПАСКАЛЕ и ему подобных языках структурного программирования использовать блок-схемы в классическом виде стало неудобно. Это связано, во-первых, с громоздкостью алгоритма, реализованного в виде блок-схем, во-вторых, с нарушением основного принципа структурного проектирования программ сверху вниз. В соответствии с этим принципом рисуются укрупненные блоки алгоритма, которые потом уточняются. Этот процесс продолжается до тех пор, пока каждый алгоритмический блок не станет однозначно отражать одну или несколько языковых конструкций выбранного разработчиком языка программирования. Такие операторы
как For... То, While... Do, Repeat... Until, Case... of отразить с помощью блок-схем, не описывая принципов их работы невозможно. Поэтому для пояснения работы этих и некоторых других операторов Паскаля будем использовать блок-схемы как алгоритмы нижнего уровня. А для объяснения вычислительных процессов решения сложных задач, в том числе численных методов, используем изображения алгоритма с помощью структурограммы (схемы Насси-Шнайдермана). Для Паскаля использование структурограмм существенно упрощает запись алгоритма, так как явно описываются такие операторы как IF, FOR, WHILE ... DO, REPEAT... UNTIL, CASE ... OF, что делает алгоритм компактным, наглядным и легко программируемым.
2.1. Линейные процессы вычислений
Простейший алгоритм представляет собой цепочку блоков (операторов) от начального блока до конечного. Каждый блок должен быть выполнен один единственный раз. Это линейный алгоритм. Он отражает линейный вычислительный процесс. Основой линейных процессов является последовательность операторов, обеспечивающих ввод исходных данных, вычисление выражений, вывод результатов расчетов на экран или печать.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 |


