Паскаль для начинающих
Основы грамматики в таблицах и примерах

Pascal (Паскаль) - язык программирования общего назначения. Создан в 1970 году специалистами Технического Университета в Цюрихе (ETH, Zurich) под руководством профессора Никлауса Вирта (Niklaus Wirth). После появления языка Pascal были созданы новые промышленные версии языка, а также языки-потомки, которые сохраняют основные синтаксические и семантические свойства языка Вирта: Modula, Turbo Pascal, Object Pascal (Delphi), Component Pascal (Oberon-2), TMT Pascal, Free Pascal, Zonnon, Ada. Идеи языка Pascal оказали большое влияние на современные языки программирования, которые активно используются в современной промышленности: Java, Javascript, C#. При этом Pascal значительно проще и хорошо приспособлен для начального изучения программирования. Описание языка дано в соответствии с диалектом языка фирмы Borland Software (США): Turbo Pascal 7.1. (1992).


ЧАСТЬ I.

1. Основные правила грамматики

1. Текст программы состоит из трех составных частей. Это заголовок, описания, операторы. Заголовок программы содержит имя программы. Для версии ETH необходимо дополнительно указать источник и приемник данных для работы программы - файлы для ввода и вывода информации. По умолчанию файл input связан с клавиатурой компьютера, а файл output - с экраном монитора. В Turbo Pascal заголовок имеет декоративное значение и использовать его не обязательно.

2. Описания - это символьные конструкции для описания свойств объектов программы. Все объекты программы надо обязательно указать в этой части программы. Операторы - это символьные конструкции для описания действий над объектами программы. Операторы должны находиться между словами begin и end. Эти слова считаются скобками.

3. В одной строке текста можно размещать несколько операторов или описаний. Поэтому между операторами надо обязательно ставить символ-разделитель. Для разделения операторов используется символ точка с запятой ( ; ). После последнего оператора разделитель ставить не обязательно.

4. Малые и большие буквы считаются эквивалентными (равнозначными). Имя любого объекта в записи программы может содержать только буквы латинского алфавита, цифры и символ подчеркивания ( _ ). Имя не может начинаться с цифры. Никакие другие типы символов в записи имен не разрешаются.


2. Общее строение программы

ETH PascalПример
program имя(ввод,вывод);program echo(input,output);
описания;var n: integer;
BEGINBEGIN
оператор;write('число?');
оператор;read(n);
операторwrite(n)
END.END.
Turbo Pascal-DelphiПример
program имя;program echo;
модули;uses crt;
описания;var n: integer;
BEGINBEGIN
оператор;clrscr; read(n);
оператор;write(n);
операторreadkey
END.END.

3. Основные типы переменных

ТипОписатель типа (имя)Значение типа (пример)
Действительныйreal16.32
  -1.6320000000E+01
ТипОписатель типа (имя)Значение типа (пример)
Целыйinteger30000
Длинный целыйlongint2000000000
ТипОписатель типа (имя)Значение типа (пример)
Символьный (литерный)char'a'
  #13
Строковыйstring'задача'
Логический (булевский)booleanfalse
  true
ИнтервальныйM1..M2100

4. Конструкции для описания величин

Описание переменных величинПример
varvar
имя-переменной: имя-типа;a: real;
имя1, имя2, имя3: имя-типа;x, y, z: integer;
 i, j, k: char;
 p, q, r: 0..100;
 s, t, u: 'a'..'z';
Описание постоянных величинПример
constconst
имя1 = значение1;X = 40000;
имя2 = значение2;Y = 16.32;
имя3 = значение3;Z = -1.632E+10;
имяN = значениеN;A = 'a';
 R = #13;
 T = 'тема'#13#10'урока:';

5. Оператор присваивания

Форма оператораПример
имя := выражениеa := 0;
 x := x + 1;

6. Ввод и вывод

ПроцедураПример 1Пример 2
read(список ввода)program echo1(input,output);program echo2(input,output);
readln(список ввода)var m, n: integer;var m, n: integer;
write(список вывода)BEGINBEGIN
writeln(список вывода)read(m,n);readln(m,n);
 write('m=',m);writeln('m=',m);
 write('n=',n)writeln('n=',n)
 END.END.
Число (n)ТипФормат выводаРезультат вывода
16integerwrite(n)16
16integerwrite(n:2)16
16integerwrite(n:5)    16
16.32realwrite(n);1.6320000000E+01
16.32realwrite(n:12)1.63200E+01
16.32realwrite(n:5:2)16.32
16.32realwrite(n:10:4)    16.3200

7. Модуль crt (cathode ray tube)

Процедуры и функцииОперацияПример
clrscrОчистить экранclrscr
textcolor(цвет)Установить цвет текстаtextcolor(1)
  textcolor(blue)
textbackground(цвет)Установить цвет фонаtextbackground(1)
  textbackground(blue)
delay(время в миллисекундах)Остановить выполнение на заданное времяdelay(1000)
gotoxy(колонка,строка)Установить курсор на заданную позициюgotoxy(40,20)
keypressedЕсли была нажата клавиша, то true (функция)repeat write('o') until keypressed
readkeyОстановить выполнение до нажатия клавиши, прочитать код нажатой клавиши (функция)readkey
  c:=readkey
Номер и имя цветаНомер и имя цвета
0 black8 darkgray
1 blue9 lightblue
2 green10 lightgreen
3 cyan11 lightcyan
4 red12 lightred
5 magenta13 lightmagenta
6 brown14 yellow
7 lightgray15 white

8. Арифметические средства языка

Арифметическая операцияОписание операцииПример
+Сложение 
-Вычитание 
*Умножение 
/Деление5.0/2.0 = 2.5
divЦелочисленное деление (деление без остатка)5 div 2 = 2
modОстаток от деления5 mod 2 = 1
shlДвоичный сдвиг влево5 shl 1 = 10
shrДвоичный сдвиг вправо5 shr 1 = 2
ФункцияРезультат функцииПример
abs(x)Модуль числа (абсолютное значение)abs(-2) = 2
sqr(x)Квадрат числаsqr(2) = 4
sqrt(x)Квадратный корень числаsqrt(4) = 2.0
piЧисло пи ~ 3.14... 
ФункцияРезультат функцииПример
sin(x)Синус числаsin(pi) = 0
cos(x)Косинус числаcos(0) ~ 1.0
ln(x)Логарифм натуральныйln(1) = 0
exp(x)Экспонента (число e в степени x)exp(1) ~ 2.72
ФункцияРезультат функцииПример
int(x)Целая часть числаint(3.6) = 3.0
trunc(x)Целое число без округленияtrunc(3.6) = 3
round(x)Целое число с округлениемround(3.6) = 4

ЧАСТЬ II.

9. Логические средства языка

Оператор условия - полная формаПример
if условие thenif (x>0) and (y>0) then
оператор 1begin x:=x+y; y:=0 end
elseelse
оператор 2begin x:=x-y; y:=-y end
Оператор условия - неполная формаПример
if условие thenif x>y then
операторx:=x mod y
Логическая операцияОписание операцииПриоритет (порядок выполнения операции)
notОтрицание (НЕ)1
andКонъюнкция (И)2
orДизъюнкция (ИЛИ)3
xorСильная дизъюнкция (ИЛИ-ИЛИ)3
Логическое отношение (предикат)Описание отношенияПриоритет (порядок выполнения операции)
=Равно4
>Больше4
<Меньше4
<>Не равно4
<=Не больше (меньше или равно)4
>=Не меньше (больше или равно)4
Оператор вариантаПример
case выражение ofcase c of
вариант-1: оператор;0: x:=x+1;
вариант-2: оператор;1,2: x:=x-1;
вариант-N: оператор3..100: x:=-x
elseelse
операторx:=0
endend

10. Операторы цикла

Оператор цикла с управляющей переменной - форма "to"Пример
for имя:=значение1 to значение2 dofor i:=1 to n do
операторbegin read(a); s:=s+a end
Оператор цикла с управляющей переменной - форма "downto"Пример
for имя:=значение1 downto значение2 dofor i:=n downto 0 do
операторwrite(i)
Оператор цикла с логическим пред-условиемПример
while условие-повторения dowhile i<=n do
операторbegin read(a); s:=s+a; i:=i+1 end
Оператор цикла с логическим пост-условиемПример
repeatrepeat
операторыwrite(i); i:=i-1
until условие-выходаuntil i=0

11. Массивы

Тип массиваОписание массиваПример
Одномерный массив (вектор)array [ тип-индекса ] of тип-элементаvar a: array [ 1..100 ] of integer;
Тип массиваОписание массиваПример
2-мерный массив (матрица)array [ тип-индекса-1, тип-индекса-2 ] of тип-элемента;var a: array [ 1..M, 1..M ] of real;
3-мерный массивarray [ тип-индекса-1, тип-индекса-2, тип-индекса-3 ] of тип-элемента;var a: array [ 0..1, 0..M, 0..N ] of char;
4-мерный массивarray [ тип-индекса-1, тип-индекса-2, тип-индекса-3, тип-индекса-4 ] of тип-элемента;var a: array [ 0..1, 0..1, 0..1, 'a'..'z' ] of boolean;

12. Процедуры и функции пользователя

ПроцедураПример процедуры для обмена значений между целыми переменными m и n
program имя-программы;program primer; var x,y: integer;
procedure имя(параметры);procedure swap(var m,n:integer);
описания локальных величинvar s: integer;
beginbegin
операторы процедурыs:=m; m:=n; n:=s
end;end;
BEGINBEGIN
операторы программыread(x,y); swap(x,y); writeln(x:10,y:10)
END.END.
ФункцияПример функции для вычисления натуральной степени (n) целого числа (m)
program имя-программы;program primer; var x,y: integer;
function имя(параметры): тип-результата;function power(m,n:integer):integer;
описания локальных величинvar s,i: integer;
beginbegin
операторы функцииs:=1; for i:=1 to n do s:=s*m; power:=s
end;end;
BEGINBEGIN
операторы программыread(x,y); writeln(power(x,y))
END.END.

Часть III.

13. Символьные типы данных

ТипОписатель типа (имя)Значение типа (пример)
Символьный (литерный)char'a'
  #13
Строковыйstring'задача'
  'тема'#13#10'урока:'
ФункцияРезультат функцииПример
length(s)Длина строкиn:=length(s)
pos(s1,s2)Начало первого вхождения строки s1 внутри строки s2 (номер позиции)n:=pos('+',s)
copy(s,p,n)Часть строки s длиной n, начиная с позиции pc:=copy(s,4,2)
concat(s1,s2,s3,...sn)Соединить строки (функция конкатенации)c:=concat(s,';',t,'.')
ФункцияРезультат функцииПример
upcase(c)Преобразовать малую букву латинского алфавита в большую (символ верхнего регистра)c:=upcase(c)
chr(n)Символ с номером nc:=chr(n)
ord(c)Номер символа со значением cn:=ord(c)
succ(c)Следующий символ таблицы ASCIIc:=succ(c)
pred(c)Предыдущий символ таблицы ASCIIc:=pred(c)
ПроцедураОперацияПример
delete(s,p,n)Удалить часть строки s длиной n, начиная с позиции pdelete(s,n,1)
insert(s1,s2,p)Вставить строку s1 в строку s2, начиная с позиции pinsert('+',s,1)
val(s,x,r)Преобразовать строку s в число x с признаком результата rval(s,x,nan)
str(x:f,s)Преобразовать число x в строку s с форматом числа fstr(x:10,s)
  str(x:10:2,s)
s1 + s2Соединить строки (операция конкатенации)s:=s+';'+t+'.'

14. Множества

Тип множестваОписание множестваПример
Постоянное множество (константа)[ тип-элемента ]const a = [ 0..100 ];
Переменное множество (переменная)set of [ тип-элемента ]var a: set of [ '0'..'9', '+', '-' ];
Пример описания постоянного множестваЭлементы множества
const A = [ 'A'..'Z', 'a'..'z' ];Буквы латинского алфавита
const B = [ 'a'..'z' ];Малые буквы латинского алфавита
const C = [ 'А'..'Я', 'а'..'п', 'р'..'я', 'Ё', 'ё' ];Буквы алфавита-кириллицы
const D = [ 'А'..'Я' ];Большие буквы алфавита-кириллицы
const M = [ '0'..'9' ];Цифровые символы от 0 до 9
const N = [ 0..100 ];Целые числа от 0 до 100
Пример описания переменного множестваЭлементы множества
var a set of [ 'A'..'Z', 'a'..'z' ];Буквы латинского алфавита
var b set of [ 'a'..'z' ];Малые буквы латинского алфавита
var c set of [ 'А'..'Я', 'а'..'п', 'р'..'я', 'Ё', 'ё' ];Буквы алфавита-кириллицы
var d set of [ 'А'..'Я' ];Большие буквы алфавита-кириллицы
var m set of [ '0'..'9' ];Цифровые символы от 0 до 9
var n set of [ 0..100 ];Целые числа от 0 до 100
ОперацияРезультат операцииПример
М1 + М2Объединение множеств М1 и М2['0'..'9'] + ['+']
М1 - М2Разность множеств М1 и М2['a'..'z'] - ['x'..'z']
М1 * М2Пересечение множеств М1 и М2['a'..'m'] * ['c', 'i', 'n']
ОперацияКогда результат операции равен trueПример
значение in множествоЗначение является элементом множестваnot (s[i] in ['a'..'z'])
М1 = М2Множества М1 и М2 равны между собой 
М1 <> М2Множества М1 и М2 не равны 
М1 < М2Множество М1 является подмножеством множества М2 
М1 <= М2Множество М1 является подмножеством множества М2 или равно М2 
М1 > М2Множество М1 является надмножеством множества М2 
М1 >= М2Множество М1 является надмножеством множества М2 или равно М2 

Часть IV.

15. Файлы

Тип файлаОписание файлаПример
текстовый файл (текст)textvar t: text;
типизированный файлfile of тип-элементаvar a: file of integer;
Процедуры и функцииОперацияПример
read( файл, список ввода )Ввод данных из файлаread(t,a,b,c);
readln( файл, список ввода )Ввод данных из файлаreadln(t,a,b,c);
write( файл, список вывода )Вывод данных в файлwrite(t,x,y,z);
writeln( файл, список вывода )Вывод данных в файлwriteln(t,x,y,z);
assign( файл, имя файла )Определить имя файлаassign(t,'c:\text\info.txt');
reset( файл )Открыть файл для вводаreset(t);
rewrite( файл )Открыть файл для выводаrewrite(t);
close( файл )Закрыть файлclose(t);
eof( файл )Если конец файла, то true (функция)while not eof(t) do read(t,a);
eoln( файл )Если конец строки, то true (функция)while not eoln(t) do read(t,a);

16. Типы и записи

Описание типа записиПример
имя типа = recordtype data = record
имя-1: тип-1;x:integer;
имя-2: тип-2;y:integer;
имя-N: тип-N;t:string;
end;end;
 var a1, a2, a3: data;

17. Ссылки и указатели

Описание указателяПример
имя-указателя: ^имя-типа;var pdata: ^data;
Ссылка с помощью указателяПример
имя-указателя^pdata^ := 0;
ПроцедураОперацияПример
new(имя-указателя)Выделить память для переменной (создать переменную для указателя)new(pdata);
dispose(имя-указателя)Освободить память переменной (указатель:=nil)dispose(pdata);

18. Объекты и классы

Описание типа объекта (класс)Пример
имя класса = object (класс-родитель)type donkey = object (animals)
свойство-1: тип-1;x:integer;
свойство-2: тип-2;y:integer;
свойство-N: тип-N;t:string;
метод-1(параметры);function run(m:string):boolean;
метод-2(параметры);procedure show;
метод-N(параметры);procedure hide;
end;end;
 var a1, a2, a3: donkey;