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.
Поддержать проект