мета-данные страницы
Это старая версия документа!
Основные понятия
Структура программы
Структура программы на языке Паскаль достаточно логична, но свободна, а потому сложно описать одновременно точно и доступно.
- структура программы
Program <правильное имя>; // Заголовок программы. // Данное предложение может отсутствовать, // поскольку в системе Free Pascal роли не играет. // Оно оставлено для совместимости с другими версиями языка Uses <список подключаемых библиотек>; // Раздел импорта // Данное предложение может отсутствовать, если вы не используете // никаких дополнительных библиотек <Раздел описаний> // Раздел глобальных описаний может состоять из нескольких подразделов, // порядок следования которых довольно свободный, // но все они должны быть здесь - перед кодом. // Содержит описание всего, что не задано изначально и не импортируется // из дополнительных библиотек. // В принципе, тоже может отсутствовать. Begin // Обязательные операторные скобки Begin-end <Раздел кода> // Операторы, составляющие "главную процедуру" - их тоже может не быть! End. // Программа кончается точкой
Обратите внимание на жёсткий порядок следования частей программы на этом уровне детализации структуры программы. Все части (если они есть) идут именно в этом порядке и не повторяются.
Раздел описаний
Раздел описаний может состоять из нескольких подразделов, разбитых по категориям описываемых объектов - типов, переменных, меток и констант. Отдельными подразделами считаются каждая функция или процедура.
- раздела описаний
const n = 10; var i, j : integer; r, q : real;
- между объектами
const n = 10; // Константа n определяет длину массива type Arr10 = array[1 .. n] of integer; // Используя n, описываем целый тип массивов var A,B : Arr10; // Используем описание типа Arr10 для описания переменных A, B
- нельзя!
const n = 10; type Arr10 = array[1 .. 10] of integer; var A,B : Arr10;
Примеры программ нелепых, но синтаксически грамотных
Данная программа содержит только раздел кода, но он - пуст, так что программа самым честным образом ничего не делает. Ибо и не должна.
- 1
Begin // Если убрать этот комментарий, то получится // минимальная правильная программа на Паскале End.
Данная программа работает (стирает с экрана следы работы предыдущих программ), но не содержит ни одного описания.
- 2
Uses CRT; // без CRT не будет работать clrscr ("clearscreen") Begin clrscr; // команда очищает экран от результатов предыдущих вводов/выводов End.
В данной программе есть все разделы (кроме описания функций), но она не выполняет никаких полезных действий.
- 3
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.
Одним оператором (командой) ввода/вывода можно вводить/выводить значения нескольких аргументов, в том числе - разнотипных.