LEARN X · ЗА 16 МИН
Pascal
Весь Pascal на одной странице: типы, циклы, массивы, строки, процедуры, записи и типовые задачи ЕГЭ — через закомментированный код.
Pascal — учебный язык №1 в школьной информатике России. PascalABC.NET и Free Pascal используют на ЕГЭ и ОГЭ. Здесь весь язык на одной странице: всё объяснение спрятано в комментариях рабочего кода.
1. Структура программы
program Hello; // заголовок программы (необязателен в PascalABC.NET)
begin // начало тела программы
// однострочный комментарий начинается с //
{ многострочный комментарий
заключают в фигурные скобки }
(* или в такие скобки со звёздочкой *)
writeln('Привет, мир!'); // writeln печатает строку и переводит курсор на новую строку
write('без переноса'); // write печатает без перехода на новую строку
end. // КОНЕЦ программы — точка обязательна!
// Вывод:
// Привет, мир!
// без переноса
2. Переменные и типы
Все переменные объявляют в блоке var ДО начала begin.
program Types;
const
Pi = 3.14159; // const — именованная константа, её нельзя менять
N = 100;
var
i: integer; // целое число (примерно -2 млрд .. +2 млрд)
x: real; // вещественное (дробное) число
flag: boolean; // логический тип: true или false
c: char; // один символ: 'A', '?', '5'
s: string; // строка символов
a, b: integer; // несколько переменных одного типа через запятую
begin
i := 42; // := это присваивание (НЕ путать с = в условиях)
x := 3.5;
flag := true;
c := 'Z';
s := 'текст';
a := 10; b := 20;
writeln(i, ' ', x, ' ', flag, ' ', c, ' ', s);
// 42 3.5 TRUE Z текст
end.
3. Ввод-вывод
program InputOutput;
var
n: integer;
x: real;
name: string;
begin
read(n); // читает число, курсор остаётся на той же строке
readln(x); // читает число и переходит на новую строку ввода
readln(name); // читает целую строку до Enter
writeln(n + 1); // обычный вывод
// Форматный вывод вещественных чисел:
x := 3.14159;
writeln(x:8:2); // ширина поля 8, 2 знака после точки -> ' 3.14'
writeln(x:0:3); // без выравнивания, 3 знака -> '3.142'
// Несколько значений в одном writeln — через запятую:
writeln('n=', n, ' x=', x:0:1);
end.
4. Операторы и выражения
program Operators;
var
a, b, r: integer;
f: real;
t: boolean;
begin
a := 17; b := 5;
// Арифметика:
writeln(a + b); // 22 сложение
writeln(a - b); // 12 вычитание
writeln(a * b); // 85 умножение
writeln(a / b); // 3.4 деление ВСЕГДА даёт real!
// Целочисленное деление и остаток (ОЧЕНЬ важны для ЕГЭ):
writeln(a div b); // 3 целая часть от деления 17 на 5
writeln(a mod b); // 2 остаток от деления 17 на 5
// Последняя цифра числа = n mod 10, отбросить цифру = n div 10
writeln(1234 mod 10); // 4 последняя цифра
writeln(1234 div 10); // 123 без последней цифры
// Сравнения дают boolean: = <> < > <= >=
t := (a > b); // TRUE
writeln(a <> b); // TRUE (<> означает «не равно»)
// Логические операции: and, or, not
writeln((a > 0) and (b > 0)); // TRUE — оба условия истинны
writeln((a > 100) or (b = 5)); // TRUE — хотя бы одно истинно
writeln(not t); // FALSE — отрицание
end.
5. Условия
program Conditions;
var
n: integer;
begin
n := 7;
// if / then / else
if n > 0 then
writeln('положительное')
else
writeln('не положительное');
// ВНИМАНИЕ: перед else точки с запятой НЕТ!
// Если в ветке несколько команд — обернуть в begin..end:
if n mod 2 = 0 then
begin
writeln('чётное');
writeln('делится на 2');
end
else
writeln('нечётное');
// Множественный выбор case:
case n of
1: writeln('один');
2, 3: writeln('два или три'); // несколько значений через запятую
4..6: writeln('от 4 до 6'); // диапазон
else
writeln('что-то другое'); // 7 попадёт сюда
end;
end.
6. Циклы
program Loops;
var
i, sum: integer;
begin
// for — когда известно число повторений
for i := 1 to 5 do
write(i, ' '); // 1 2 3 4 5
writeln;
// for с downto — счёт в обратную сторону
for i := 5 downto 1 do
write(i, ' '); // 5 4 3 2 1
writeln;
// while — пока условие истинно (проверка ДО тела)
i := 1; sum := 0;
while i <= 100 do
begin
sum := sum + i;
i := i + 1;
end;
writeln(sum); // 5050 — сумма чисел от 1 до 100
// repeat / until — выполнить, пока НЕ выполнится условие (проверка ПОСЛЕ)
i := 1;
repeat
write(i, ' '); // 1 2 3
i := i + 1;
until i > 3; // тело выполнится минимум один раз
writeln;
end.
7. Массивы
program Arrays;
var
a: array[1..5] of integer; // одномерный массив, индексы 1..5
m: array[1..3, 1..3] of integer; // двумерный массив (таблица 3x3)
i, j: integer;
begin
// Заполнение одномерного массива:
for i := 1 to 5 do
a[i] := i * i; // 1 4 9 16 25
// Чтение элемента — по индексу в квадратных скобках:
writeln(a[3]); // 9
// Проход по массиву:
for i := 1 to 5 do
write(a[i], ' '); // 1 4 9 16 25
writeln;
// Двумерный массив — два вложенных цикла:
for i := 1 to 3 do
for j := 1 to 3 do
m[i, j] := i * j; // таблица умножения
// Вывод таблицы построчно:
for i := 1 to 3 do
begin
for j := 1 to 3 do
write(m[i, j]:3); // ширина поля 3
writeln;
end;
// 1 2 3
// 2 4 6
// 3 6 9
end.
8. Строки
program Strings;
var
s, sub: string;
i, p: integer;
begin
s := 'Информатика';
writeln(length(s)); // 11 — длина строки
writeln(s[1]); // И — символ по индексу (нумерация с 1)
// copy(строка, старт, сколько) — вырезать подстроку
sub := copy(s, 1, 5);
writeln(sub); // Информ
// pos(что, где) — позиция первого вхождения (0 если нет)
p := pos('мат', s);
writeln(p); // 7
// delete(строка, старт, сколько) — удалить часть (меняет строку)
s := 'Информатика';
delete(s, 1, 6);
writeln(s); // атика
// insert(что, куда, позиция) — вставить подстроку
s := 'абв';
insert('XYZ', s, 2);
writeln(s); // аXYZбв
// Склейка строк через +
writeln('код' + 'чик'); // кодчик
// Перебор символов строки:
s := 'abc';
for i := 1 to length(s) do
write(s[i], '-'); // a-b-c-
writeln;
end.
9. Процедуры и функции
Процедура выполняет действия, функция возвращает значение.
program SubProgs;
var
x, y: integer;
// Процедура — ничего не возвращает, просто делает
procedure Greet(name: string);
begin
writeln('Привет, ', name, '!');
end;
// Функция — возвращает значение; результат присваивают имени функции
function Square(n: integer): integer;
begin
Square := n * n; // в PascalABC.NET можно также: Result := n * n;
end;
// var-параметр передаётся ПО ССЫЛКЕ — изменения видны снаружи
procedure Swap(var a, b: integer);
var
tmp: integer;
begin
tmp := a; a := b; b := tmp;
end;
begin
Greet('Аня'); // Привет, Аня!
writeln(Square(6)); // 36
x := 1; y := 2;
Swap(x, y); // меняем местами через var-параметры
writeln(x, ' ', y); // 2 1
end.
10. Записи (record)
program Records;
type
// record — объединяет несколько полей в один тип
TStudent = record
name: string;
grade: integer;
end;
var
s: TStudent;
group: array[1..2] of TStudent;
begin
// Доступ к полям через точку:
s.name := 'Иван';
s.grade := 5;
writeln(s.name, ' - ', s.grade); // Иван - 5
// Массив записей:
group[1].name := 'Оля'; group[1].grade := 4;
group[2].name := 'Пётр'; group[2].grade := 5;
writeln(group[2].name); // Пётр
end.
11. Работа с файлами
program Files;
var
f: text; // text — файл текстовых строк
line: string;
n: integer;
begin
// ЧТЕНИЕ из файла:
assign(f, 'input.txt'); // связываем переменную с именем файла
reset(f); // открываем для чтения
while not eof(f) do // eof — «конец файла»
begin
readln(f, line); // читаем строку из файла f
writeln(line);
end;
close(f); // обязательно закрываем
// ЗАПИСЬ в файл:
assign(f, 'output.txt');
rewrite(f); // создаём/очищаем файл для записи
writeln(f, 'результат: ', 42); // пишем в файл, а не на экран
close(f);
end.
12. Типичные задачи ЕГЭ
Классические шаблоны обработки массива — их проси узнавать на экзамене.
program ExamTasks;
var
a: array[1..6] of integer;
i, n, max, min, sum, cnt: integer;
begin
n := 6;
// допустим массив: 3 8 1 8 5 2
a[1]:=3; a[2]:=8; a[3]:=1; a[4]:=8; a[5]:=5; a[6]:=2;
// ПОИСК МАКСИМУМА: за начало берём первый элемент
max := a[1];
for i := 2 to n do
if a[i] > max then max := a[i];
writeln('max = ', max); // max = 8
// ПОИСК МИНИМУМА — аналогично, но со знаком <
min := a[1];
for i := 2 to n do
if a[i] < min then min := a[i];
writeln('min = ', min); // min = 1
// СУММА всех элементов: накопитель начинаем с 0
sum := 0;
for i := 1 to n do
sum := sum + a[i];
writeln('sum = ', sum); // sum = 27
// ПОДСЧЁТ элементов по условию (сколько чётных):
cnt := 0;
for i := 1 to n do
if a[i] mod 2 = 0 then // чётное
cnt := cnt + 1;
writeln('чётных: ', cnt); // чётных: 3 (8, 8, 2)
// СУММА ЦИФР числа — частая задача:
n := 1234; sum := 0;
while n > 0 do
begin
sum := sum + n mod 10; // прибавляем последнюю цифру
n := n div 10; // отбрасываем последнюю цифру
end;
writeln('сумма цифр 1234 = ', sum); // 10
end.