БЕСПЛАТНАЯ ПОДГОТОВКА К ЕГЭ ПО ПРОФИЛЬНОЙ МАТЕМАТИКЕ
Подготовься к ЕГЭ-2026 по профильной математике самостоятельно с помощью сервиса "1С:Репетитор"!
Понятная теория и эффективные тренажеры с объяснением! Вы успеете подготовиться к экзамену! Начните занятия прямо сейчас!
design_arrow

Язык PHP

PHP – интерпретируемый скриптовый язык общего назначения, исторически ориентированный на веб. Для учебных задач он удобен тем, что сочетает простую работу со строками и файлами, мощные массивы, встроенные регулярные выражения и удобный CLI-режим. На ЕГЭ по информатике это помогает тренировать ключевые компетенции: алгоритмизацию, обработку текстов и таблиц, работу с файлами, фильтрацию и сортировку данных, проверку условий, подсчёты и преобразования.

Модель исполнения и минимальная среда

  • Интерпретатор: php (CLI) запускает скрипты из командной строки:
    php solve.php < input.txt > output.txt

  • Веб-режим: PHP работает как модуль/фастCGI у веб-сервера (Apache/Nginx). Для учебных задач достаточно CLI.

  • Единица кода: файл *.php, в котором можно включать шапку:

php

<?php

declare(strict_types=1);

error_reporting(E_ALL);

ini_set('display_errors', '1');

strict_types=1 помогает ловить ошибки типов уже на этапе выполнения.

Синтаксис и типы (что действительно важно)

  • Скалярные типы: int, float, string, bool.

  • Ссылочные/составные: array, object, callable, resource, null.

  • Аннотации типов:

    php

    function f(int $a, string $b): bool { /* ... */ }

  • Сравнение: используйте строгое ===/!== (не приводит типы). Избегайте «нестрогого» ==, которое может дать сюрпризы.

  • Строки и Юникод: по умолчанию строки – байтовые. Для кириллицы и точных операций по символам применяйте mb_*-функции (mb_strlen, mb_substr, mb_strtolower) и кодировку UTF-8.

Базовые конструкции и идиомы

  • Ветвления: if/elseif/else, switch, современный match (PHP 8).

  • Циклы: for, while, do...while, foreach (для массивов).

  • Функции: именованные и анонимные (замыкания) с use.

  • Массивы: универсальная структура и как список, и как словарь (ассоциативный массив).
    Полезные семейства: array_map, array_filter, array_reduce, array_unique, array_count_values.

  • Сортировки:

    • По значениям: sort/rsort (перенумеруют ключи), asort/arsort (сохраняют ключи).

    • По пользовательскому компаратору: usort/uasort.

  • Файлы и потоки: file(), fopen/fgets/fputcsv, SplFileObject, fgetcsv – для табличных данных.

  • Регулярные выражения: preg_match, preg_match_all, preg_replace – мощный инструмент для задач на строки.

 Информатика–схема работы языка PHP

Правила «безопасного и предсказуемого» кода

  1. Строгие сравнения: всегда === и !==.

  2. Явные преобразования: при необходимости – (int)$s, (float)$s, strval($x).

  3. Юникод-корректность: для русскоязычных строк – только mb_*.

  4. Обработка файлов построчно: не грузите «гигабайт в память» – читайте и обрабатывайте поток.

  5. Детерминизм и проверяемость: одни и те же входные данные → тот же результат; не полагайтесь на состояние окружения.

  6. Ошибки – в исключения: включайте error_reporting(EALL) и валидируйте вход.

Связь с ЕГЭ: как PHP помогает готовиться

Темы ЕГЭ – это алгоритмы, логика условий, строки, табличные данные, подсчёты. В PHP вы:

  • тренируете разбор текстов и регулярки;

  • обрабатываете таблицы CSV, как аналоги электронных таблиц;

  • оттачиваете сортировки/фильтрацию (аналог запросов);

  • решаете задачи на подсчёты и условия (классика вариантов).

Мини-шпаргалка (то, что пригодится чаще всего)

php

КопироватьРедактировать

$line = trim(fgets(STDIN));        // строка из ввода

$parts = explode(';', $line);      // разбиение по разделителю

$ok = preg_match('/^\d+$/', $s);   // вся строка – число?

$cnts = array_count_values($arr);  // частоты

usort($rows, fn($a,$b) => $b['score'] <=> $a['score'] ?: strcmp($a['name'],$b['name']));

Практика: 5 упражнений в стиле ЕГЭ (с разбором и кодом)

Упражнение 1. Подсчёт по условию в числовом файле
Задача.
В 17.txt записаны целые числа по одному в строке. Найдите количество пар соседних чисел, в которых хотя бы одно делится на 3, и максимальную сумму среди таких пар. Выведите два числа: count maxSum.
Идея. Однопроходный анализ соседей, два инварианта: счётчик и максимум.

php

<?php

declare(strict_types=1);

$fh = fopen('17.txt', 'r');

$prev = null; $count = 0; $maxSum = PHP_INT_MIN;

while (($line = fgets($fh)) !== false) {

    $x = (int)trim($line);

    if ($prev !== null) {

        if ($prev % 3 === 0 || $x % 3 === 0) {

            $count++;

            $sum = $prev + $x;

            if ($sum > $maxSum) $maxSum = $sum;

        }

    }

    $prev = $x;

}

fclose($fh);

echo $count, ' ', ($count ? $maxSum : 0), PHP_EOL;

Почему это «про ЕГЭ»: классический паттерн «соседние элементы + условие делимости + экстремум».

Упражнение 2. Частоты символов в UTF-8-строке
Задача.
Считать одну строку из input.txt, привести к нижнему регистру, удалить пробелы и знаки пунктуации. Вывести топ-3 самых частых символа (буквы/цифры) в формате символ:частота, по убыванию частоты, затем по возрастанию символа.
Идея. Нормализация mb_strtolower, фильтрация preg_replace, подсчёт array_count_values.

php

<?php

declare(strict_types=1);

mb_internal_encoding('UTF-8');

$s = trim(file_get_contents('input.txt'));

$s = mb_strtolower($s);

$s = preg_replace('/[^\p{L}\p{N}]+/u', '', $s); // оставить только буквы и цифры

$freq = [];

for ($i = 0, $n = mb_strlen($s); $i < $n; $i++) {

    $ch = mb_substr($s, $i, 1);

    $freq[$ch] = ($freq[$ch] ?? 0) + 1;

}

uasort($freq, function($a, $b) use ($freq){

    // сначала по убыванию частоты, при равенстве – по ключу (символу) по возрастанию

    return $b <=> $a ?: 0;

});

$k = 0;

foreach ($freq as $ch => $c) {

    echo $ch, ':', $c, PHP_EOL;

    if (++$k === 3) break;

}

Почему это «про ЕГЭ»: обработка строк, подсчёты, сортировка – общая логика, регулярно встречается.

Упражнение 3. Фильтрация и сортировка «как таблица/БД»
Задача.
Дан CSV students.csv со столбцами: surname;name;class;avg.
Вывести фамилии и средний балл всех из 11А с avg ≥ 4.6, отсортировать по убыванию avg, при равенстве – по фамилии по возрастанию.

php

<?php

declare(strict_types=1);

$fh = fopen('students.csv', 'r');

$rows = [];

while (($row = fgetcsv($fh, 0, ';')) !== false) {

    [$sn, $nm, $cls, $avg] = [$row[0], $row[1], $row[2], (float)$row[3]];

    if ($cls === '11А' && $avg >= 4.6) $rows[] = ['surname'=>$sn, 'avg'=>$avg];

}

fclose($fh); 

usort($rows, fn($a,$b) => $b['avg'] <=> $a['avg'] ?: strcmp($a['surname'],$b['surname']));

foreach ($rows as $r) {

    echo $r['surname'], ';', number_format($r['avg'], 2, '.', ''), PHP_EOL;

}

Почему это «про ЕГЭ»: аналог работы со сводной таблицей/SQL-запросом: фильтр → сортировка → вывод.

Упражнение 4. Нормализация дат и проверка корректности
Задача.
В dates.txt даны даты формата DD.MM.YYYY, по одной в строке. Вывести только корректные даты в ISO-формате YYYY-MM-DD, отсортировав их по возрастанию.

php

<?php

declare(strict_types=1);

$fh = fopen('dates.txt', 'r');

$valid = [];

while (($line = fgets($fh)) !== false) {

    $s = trim($line);

    $dt = DateTime::createFromFormat('!d.m.Y', $s);

    $errs = DateTime::getLastErrors();

    if ($dt && $errs['warning_count'] === 0 && $errs['error_count'] === 0) {

        // Дополнительно убедимся, что формат не «подправился» автокоррекцией

        if ($dt->format('d.m.Y') === $s) $valid[] = $dt->format('Y-m-d');

    }

}

fclose($fh);

sort($valid);

echo implode(PHP_EOL, $valid), PHP_EOL;

Почему это «про ЕГЭ»: строгое сравнение, проверка формата, сортировка – типовая логика задач на корректность данных. 

Упражнение 5. Правила переписывания строки 
Задача.
Дана строка из букв A и B. Пока встречается подстрока AB – заменяйте её на BA. Затем, пока встречается BB – заменяйте её на B. Вывести итоговую строку и её длину. Вход – одна строка S (до 10⁵ символов).
Идея. Линейный односкан с использованием стека/двух фаз (сначала упорядочим A/B перестановками AB→BA, затем «схлопнем» BB→B). Решение за O(n).

php

<?php

declare(strict_types=1);

mb_internal_encoding('UTF-8');

$s = trim(stream_get_contents(STDIN));

// Фаза 1: переместим все 'A' влево от 'B' (эффект от многократных AB->BA)

$A = 0; $B = 0;

for ($i = 0, $n = strlen($s); $i < $n; $i++) {

    if ($s[$i] === 'A') $A++; else $B++;

}

// После всех перестановок строка примет вид: AAA...A BBB...B

// Фаза 2: схлопывание BB->B означает, что блок B сжимается до одного символа (если он есть).

$result = str_repeat('A', $A) . ($B > 0 ? 'B' : '');

echo $result, PHP_EOL, strlen($result), PHP_EOL;

Почему это «про ЕГЭ»: классические «правила переписывания» сводятся к инвариантам и подсчётам вместо симуляции – важный навык оптимизации.

Практические рекомендации к решению вариантов

  • Начинайте с анализа входа: формат, ограничения, возможные «подводные камни» (пустые строки, BOM, пробелы).

  • Пишите чистые функции: отдельная функция на чтение, на обработку, на форматирование результата.

  • Фиксируйте инварианты: что именно вы считаете и почему это корректно при каждом шаге.

  • Проверяйте крайние случаи: пустой файл, один элемент, все элементы равны/не подходят под условие.

  • Не используйте «магических чисел»: вводите осмысленные константы.

Итог

PHP – удобный «тренажёр» для егэшных компетенций: строки, файлы, таблицы, сортировки, подсчёты, строгая работа с условиями и форматами. Освоив строгие сравнения, mb_* для Юникода, поточную обработку, сортировки и регулярки – вы уверенно решите класс задач ЕГЭ, а заодно получите практические навыки, которые напрямую применяются и в «настоящем» веб-программировании.