РУҚА
Задание № 16 · ОГЭ

Граф вызовов

Схема зависимостей между подпрограммами и их взаимными вызовами
2 мин чтенияСложность: Обновлено 29 сентября 2026

Граф вызовов — это схема, которая показывает, какие подпрограммы вызывают друг друга в программе. По нему можно быстро понять структуру программы и проследить цепочку выполнения от одной подпрограммы к другой.

Граф вызововНазвание связано с тем, что рёбра графа показывают вызовы подпрограмм.
Ориентированный граф, в котором вершины соответствуют подпрограммам, а направленное ребро \(A \to B\) означает, что подпрограмма \(A\) вызывает подпрограмму \(B\). Подпрограммой может быть функция или процедура.

Как читать граф

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

\[G = (V, E), \qquad (A,B) \in E \Longleftrightarrow A\text{ вызывает }B\]

Например, если основная программа вызывает \(A\), а \(A\) вызывает \(B\) и \(C\), то в графе будут рёбра «Основная программа» \(→ A\), \(A → B\) и \(A → C\). Такой граф помогает определить, какие подпрограммы зависят от других. При анализе выполнения полезно отличать граф вызовов от стека вызовов: граф описывает возможные связи в программе, а стек — текущую цепочку активных вызовов.

№
Пример

Пусть процедура start вызывает read_data и sort, а sort вызывает compare. Тогда схема имеет вид: start → read_data, start → sort, sort → compare. Из графа видно, что compare запускается не напрямую из start, а через sort.

!
Не путайте

Граф вызовов не показывает порядок всех отдельных команд и не является стеком вызовов. Кроме того, стрелка означает именно вызов, а не передачу значения аргумента или направление движения данных. При рекурсии подпрограмма может иметь стрелку в саму себя.

Проверьте себя

Процедура P вызывает Q, а Q вызывает R. Какое ребро обязательно есть в графе вызовов?

Главное за минуту

Главное

  • Граф вызовов — ориентированный граф подпрограмм.
  • Ребро \(A \to B\) означает, что \(A\) вызывает \(B\).
  • Граф показывает структуру возможных вызовов, а стек вызовов — текущую цепочку выполнения.