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

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

Оператор присваивания – это элементарная операция императивной модели вычислений, изменяющая состояние памяти путём установления нового соответствия между идентификатором (переменной, полем структуры, элементом массива) и значением некоторого выражения. Формально, если среда исполнения представлена парой ⟨Γ,σ⟩, где Γ – область видимости (сопоставление имён адресам), а σ – хранилище (сопоставление адресов значениям), то оператор

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

Отсюда следуют два фундаментальных требования корректности:

  1. Адресуемость слева: левая часть должна обозначать место в памяти (переменная, элемент массива, поле записи), а не вычисляемое значение.

  2. Вычислимость справа: правая часть должна быть детерминированно вычислима в текущем состоянии ⟨Γ,σ⟩.

Таксономия присваивания

Простое присваивание

x := E

Устанавливает новое значение переменной x. Если x ранее не инициализирована, операция выполняет инициализирующее присваивание (в некоторых языках и контекстах инициализация – отдельный синтаксический конструкт).

Составное присваивание

x += E   ⇔   x := x + E

x -= E   ⇔   x := x - E

x *= E   ⇔   x := x * E

x /= E   ⇔   x := x / E

x %= E   ⇔   x := x % E

Эквивалентность справедлива при отсутствии побочных эффектов в оценке x и E. В противном случае порядок вычисления может быть существенен.

Множественное (кортежное) присваивание

(x, y, z) := (E1, E2, E3)

Выполняет все вычисления справа до обновления слева, затем одновременно «перекидывает» значения (важная техника для обмена значениями: (x, y) := (y, x) без временной переменной).

Цепочки присваиваний

a := b := c := 0

Как правило, ассоциативность справа налево: сначала c:=0, затем b:=c, затем a:=b. В учебных решениях для ЕГЭ рекомендуется избегать цепочек ради прозрачности.

Присваивание по адресу/индексу/полю

A[i] := E         // элемент массива

R.field := E      // поле структуры/записи

*ptr := E         // по адресу, если язык поддерживает указатели

Все конструкции требуют существования валидного места записи (границы массива, не-нулевой указатель и т.д.).

Информатика–схема оператора присваивания

Приоритет, ассоциативность, порядок вычисления

  • Приоритет: оператор присваивания имеет один из самых низких приоритетов; выражение x = a + b * c интерпретируется как x = (a + (b * c)).

  • Ассоциативность: в большинстве языков – справа налево (a = b = c допустимо, а a = b = c = 0 вычисляется справа).

  • Порядок вычисления операндов – языково-зависим. Для школьного псевдокода и на ЕГЭ по умолчанию предполагается «сначала вычислить правую часть полностью, затем записать слева». Это правило следует соблюдать и в стиле решений.

Типизация и преобразования

  • Согласование типов: тип E обязан быть совместим с типом L. При необходимости допускается явное преобразование:

  • x : цел; y : вещ;  x := округл( y )

  • Неявные преобразования (widening/narrowing) потенциально ведут к потере точности. На ЕГЭ такие преобразования желательно обозначать явно в тексте решения (округление, усечение, перевод в целый тип).

Присваивание, инициализация и неизменяемость

  • Инициализация – первое присваивание в момент объявления; присваивание – любое последующее изменение.

  • Константы не допускают присваивания после инициализации: попытка изменить приводит к ошибке.

  • Неизменяемые структуры (иммутабельные) реализуют не разрушающее обновление (создание модифицированной копии), что логически эквивалентно присваиванию ссылки на новую версию.

Побочные эффекты и недетерминизм

  • Выражения вида A[i] := i + (i := i + 1) недопустимы в учебной практике: они соединяют вычисление с изменением того же операнда в одном выражении и зависимы от порядка вычисления.

  • Безопасное правило: не модифицируйте переменные в той же строке, где используете их несколько раз в правой части. Разнесите вычисления пошагово.

Оператор присваивания в алгоритмах ЕГЭ

В заданиях ЕГЭ присваивание применяется:

  • для пошагового расчёта выражений (перенос формулы в программу);

  • для подсчёта агрегатов в циклах (счётчик, сумма, максимум/минимум);

  • для управления состоянием при разветвлениях (обновление лучшего ответа);

  • в моделировании процессов (эмуляция правил переписывания строк, работы автомата);

  • при обработке массивов (запись по индексу, обмен элементов, сдвиги).

Ключевое методическое правило: каждое присваивание фиксирует инвариант состояния, который должен быть явно понятен из текста решения.

Правила «чистого присваивания» (для школьной практики и ЕГЭ)

  1. Одна логическая операция – одно присваивание. Не смешивайте многоступенчатые вычисления в одной строке, если они ухудшают читаемость.

  2. Явные преобразования типов. Любую операцию округления/усечения фиксируйте явно.

  3. Не используйте присваивание внутри условий. Сначала вычислите значение, затем сравнивайте.

  4. Избегайте повторных обращений к «дорогим» выражениям. Сохраните промежуточный результат в переменной и используйте его повторно.

  5. Множественное присваивание – только там, где оно повышает ясность. Например, обмен (x, y) := (y, x).

  6. Границы массивов и корректность индексов – до присваивания. Проверяйте диапазон.

  7. Стабильность инвариантов в цикле. Любое присваивание внутри цикла должно сохранять корректность инварианта (например, «sum содержит сумму обработанных элементов»).

Практические упражнения (5 заданий с разбором)

Упражнение 1. Пошаговая эмуляция присваиваний

Условие. Дана программа на псевдокоде:

a := 7

b := 3

c := a*b - (a := a + b) + b

Считать, что в учебном алгоритмическом языке ЕГЭ правая часть вычисляется полностью до изменения левой части в каждом присваивании. Найдите итоговые значения a, b, c.

Решение.

  1. После первых двух строк: a=7, b=3.

  2. В третьей строке присутствует присваивание внутри выражения (a := a + b). Сначала вычислим все подвыражения справа:

    • a*b = 7*3 = 21.

    • (a := a + b) – вычисляет a + b = 10, но само изменение a произойдёт только после вычисления всей правой части c := .... Для подстановки в формулу используем значение 10.

    • + b = +3.
      Итак, правая часть: 21 - 10 + 3 = 14. Теперь выполняются присваивания изнутри наружу:

    • Сначала a := a + b делает a = 10.

    • Затем c := 14.
      Итог: a=10, b=3, c=14.

Ответ: a=10, b=3, c=14.

Методический вывод: фиксируйте соглашение о порядке – «сперва считаем правую часть, затем присваиваем слева».

Упражнение 2. Инварианты в цикле и составное присваивание

Условие. Дан массив X[1..N] целых чисел. Напишите фрагмент псевдокода, подсчитывающий сумму положительных элементов и количество отрицательных. Разрешено использовать составные присваивания.

Решение.

sum_pos := 0

neg_cnt := 0

для i от 1 до N

    если X[i] > 0 то

        sum_pos += X[i]        // sum_pos := sum_pos + X[i]

    иначе если X[i] < 0 то

        neg_cnt += 1           // neg_cnt := neg_cnt + 1

    конецесли

конецдля

Инварианты:

  • Перед началом каждой итерации sum_pos содержит сумму всех положительных элементов на позициях < i.
  • neg_cnt – число отрицательных элементов на позициях < i.

Ответ: код выше; корректность опирается на сохранение инвариантов при каждой итерации.

Упражнение 3. Множественное присваивание и обмен значений

Условие. Переставьте значения переменных p, q, r так, чтобы после операции выполнялось p≤q≤r, используя минимальное число присваиваний. Разрешено множественное присваивание.

Решение (понятная и короткая версия).

если p > q то (p, q) := (q, p)

если q > r то (q, r) := (r, q)

если p > q то (p, q) := (q, p)

Обоснование: это классический трёхшаговый алгоритм сортировки тройки сравнением и обменом; множественное присваивание элиминирует временные переменные и делает обмен атомарным.

Ответ: приведённая последовательность; после неё гарантированно p≤q≤r.

Упражнение 4. Типы и присваивание с явным преобразованием

Условие. Даны s – строка, представляющая вещественное число в десятичной записи, и переменные x: вещ, n: цел. Требуется:

  1. Присвоить x значение, равное числу из строки s.

  2. Присвоить n целую часть x по правилу математического округления вниз.

  3. Обосновать, почему неявное присваивание n := x может быть нежелательным.

Решение.

x := вещественное_из(s)      // парсинг строки в вещ. число

n := пол(floor(x))           // округление вниз (целая часть)

Пояснение: прямое n := x в языках с неявным приведением типов может усечь дробную часть без явного указания на усечение, что снижает прозрачность и может привести к ошибкам. Явная форма фиксирует намерение автора.

Ответ: использовать явные преобразования вещественное_из и floor.

Упражнение 5. Избежание побочных эффектов

Условие. Рассмотрим фрагмент:

i := 1

A[1] := 5

A[i] := A[i] + (i := i + 1)

Предполагается, что массив индексируется с 1. Определите итоговые значения i, A[1], A[2] при двух соглашениях:

  • (А) Правую часть полностью вычисляют до любого присваивания.

  • (Б) Подвыражения вычисляются слева направо, а присваивание i := i + 1 происходит сразу при вычислении подвыражения.

Решение.
Исходно i=1, A[1]=5, A[2] не задан.

Случай (А) (рекомендованная для ЕГЭ модель):

  • Вычисляем правую часть: A[i] читается как A[1]=5; i := i + 1 даёт временное значение 2, но изменение i произойдёт после вычисления всей правой части; значит A[i] + (…)=5+2=7.

  • Теперь выполняем присваивания: сначала i:=2, затем A[i]:=7 → это A[2]:=7.
    Итог: i=2, A[1]=5, A[2]=7.

Случай (Б) (нежелателен в учебной практике):

  • Слева направо: сначала читается A[i] при i=1 → 5; затем вычисляется (i := i + 1) и сразу меняет i на 2; правая часть остаётся 5 + 2 = 7; целевое место слева – A[i] уже с i=2 → A[2]:=7.
    Итог тот же, но зависимость от соглашения делает код опасным. В иных случаях результаты могут отличаться.

Ответ: при обоих допущениях здесь получится i=2, A[1]=5, A[2]=7, но пример демонстрирует, почему нельзя смешивать модификацию и использование одного и того же индекса в одной строке.

Частые ошибки и способы их предотвратить

  • Путаница «присваивание vs сравнение». В псевдокоде различайте := (присваивание) и = (сравнение).

  • Потеря точности при неявных преобразованиях. Всегда фиксируйте floor/ceil/round.

  • Выход за границы массива при записи. Перед A[i] := … проверяйте диапазон i.

  • Использование неинициализированных переменных. Любая переменная получает значение до первого чтения.

  • Цепочки присваиваний, скрывающие порядок. Разворачивайте в пошаговый код.

  • Побочные эффекты в правой части. Разносите на отдельные строки.

Итог

Оператор присваивания – базовый механизм изменения состояния в императивных алгоритмах. Его корректное употребление – это:

  • точная семантика «сначала вычисли справа, затем запиши слева»,

  • явная работа с типами,

  • строгий контроль инвариантов, индексов и порядка вычисления.

Такая дисциплина кода непосредственно повышает результативность на ЕГЭ: решения становятся воспроизводимыми, прозрачными для проверки и устойчивыми к типичным ошибкам.