Основные понятия

Структура программы

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

Program <правильное имя>; // Заголовок программы. // Данное предложение может отсутствовать, // поскольку в системе Free Pascal роли не играет. // Оно оставлено для совместимости с другими версиями языка Uses <список подключаемых библиотек>; // Раздел импорта // Данное предложение может отсутствовать, если вы не используете // никаких дополнительных библиотек <Раздел описаний> // Раздел глобальных описаний может состоять из нескольких подразделов, // порядок следования которых довольно свободный, // но все они должны быть здесь - перед кодом. // Содержит описание всего, что не задано изначально и не импортируется // из дополнительных библиотек. // В принципе, тоже может отсутствовать. Begin // Обязательные операторные скобки Begin-end <Раздел кода> // Операторы, составляющие "главную процедуру" - их тоже может не быть! End. // Программа кончается точкой

Раздел описаний

Обратите внимание на жёсткий порядок следования частей программы на этом уровне детализации структуры программы. Все части (если они есть) идут именно в этом порядке и не повторяются.

Примеры программ нелепых, но синтаксически грамотных

Данная программа содержит только раздел кода, но он - пуст, так что программа самым честным образом ничего не делает. Ибо и не должна.

Begin // Если убрать этот комментарий, то получится // минимальная правильная программа на Паскале End.

Данная программа работает (стирает с экрана следы работы предыдущих программ), но не содержит ни одного описания.

Uses CRT; // без CRT не будет работать clrscr ("clearscreen") Begin clrscr; // команда очищает экран от результатов предыдущих вводов/выводов End.

В данной программе есть все разделы (кроме описания функций), но она не выполняет никаких полезных действий.

Program Prog; // К бессмысленному предложению Program - бесполезное, но правильное имя // Всё есть и никто ничего не делает. Uses CRT, Graph; // Собираемся работать и с текстом, и с графикой, но так и не собирёмся Const // Раздел констант n = 5; // В данном случае n - не переменная, а другое обозначение 5. m : integer = 6; // Один из ужасов Паскаля. Это - статическая переменная! Без понимания, что к чему, лучше не использовать. Var // Раздел переменных i:integer; // Запасная переменная - нам не потребуется Label // Раздел меток. У меток описывать нечего, но они должны быть перечислены. BeeginProgram, EndProgram; Procedure Proc(x:integer); Begin: writeln('Не мешайте работать!') End; Begin BeginProgram: goto EndProgram; // Хватит работать пошли домой Proc(n); EndProgram: ; End.

В данной программе есть все разделы (кроме описания функций), но она не выполняет никаких полезных действий.

Ввод/вывод

var x, y, z: integer; a, b, c: real;
var x: integer; a: real; begin read(x); {Сохранит введенное с клавиатуры в переменную x} readln(a); {Сохранит введенное с клавиатуры в переменную a и добавит перевод строки} end.

При вводе данных, они должны соответствовать «принимающим» переменным, т.е. нельзя ввести бессмысленные в языке Pascal значения, значения в формате другого типа (например, ввести значения 1.34 и даже 2.0 в целочисленную переменную) или выходящие за пределы диапазона значений, разрешённого для переменных указанного типа.

Заметьте, что в строковую переменную можно занести и «Мама мыла раму», и «2.0».

var x: integer; a: real; begin x := 2; write(x); {Выведет на экран значение переменной x} write('x= ', x); writeln(x); {Выведет на экран значение переменной x и перейдет на следующую строку} writeln('x= ', x); a := 0.15; writeln(a); writeln(a * x); writeln(a * x:4:1); end.

Допустимо сразу выводить на экран значения выражений любой сложности без сохранения их в переменной. Частными случаями выражений являются вызовы функций, переменные и константы.

begin write(0.3); write( 0.15 * 2.0 ); writeln( sin(3.14) ); end.

Распространённые ошибки

Недопустимо следующее :

const x=0.3; var y : integer; A : array[1..9] of integer; F : text; begin read (0.3); // чтение "в никуда" - нет переменной, которая примет значение. read (x); // тоже самое, но константа указана по имени readln (0.15 * y); // тоже самое, readln (A); // составной тип данных можно заполнять только по-элементно readln (F); // "неудачное" чтение из файла - и файл не открыт, и не указана переменная-приёмник end.

Одним оператором (командой) ввода/вывода можно вводить/выводить значения нескольких аргументов, в том числе - разнотипных.