Алгоритм решения задания 14. Часть 1
Учимся решать 15 задания первого типа
Читать
Построение диаграммы Ганта
Планирование задач
Представьте ситуацию: до конца учебного года осталось совсем немного, буквально пара месяцев, а впереди целое лето, насыщенное новыми знакомствами, яркими событиями и полноценным отдыхом.
Но расслабляться рано, ведь вам ещё нужно сдать итоговый проект, допустим, по информатике! Это не просто реферат или презентация — это полноценное приложение, веб-сайт или телеграм-бот.
Например, вы решили создать интерактивный планировщик для школьников, который поможет отслеживать домашние задания и подготовку к контрольным.
Настало время заняться подготовкой к разработке этого проекта. Вы садитесь за планирование и быстро понимаете, что задача не такая простая, как казалось. Нужно продумать дизайн интерфейса, написать код для работы с данными, создать базу данных, протестировать всё это, исправить ошибки, написать документацию… Голова идёт кругом!
Вы открываете блокнот и начинаете составлять список задач:

Список готов, вы чувствуете себя организованным. Но уже на следующий день возникают вопросы. С чего начать? Можно ли делать макеты экранов до того, как придуман общий дизайн? Сколько времени займёт каждая задача? Успеете ли вы всё сделать за два месяца? Что делать, если на тестирование уйдёт больше времени, чем планировалось?
Вы пытаетесь решить эти вопросы и добавляете к каждой задаче примерные сроки:
- Придумать дизайн (3 дня)
- Нарисовать макеты экранов (5 дней)
- Написать код главной страницы (7 дней)
- …и так далее
Но даже с датами список выглядит плоско и непонятно. Вы не видите временную картину целиком. Вы смотрите на этот список и не можете понять, сколько задач можно выполнять параллельно, есть ли у вас свободные «окна» между задачами или, наоборот, периоды, где требуется выполнять сразу несколько задач одновременно. Может оказаться, что вы запланировали три сложные задачи на одну неделю, когда у вас ещё и контрольные.
Также в обычном списке трудно увидеть зависимости между задачами. Очевидно, что нельзя писать код главной страницы до того, как нарисованы макеты. Нельзя тестировать то, что ещё не написано. Но в обычном списке эти связи никак не отражены. Приходится держать всё в голове и постоянно сверяться: «А можно ли мне уже начать эту задачу или нужно подождать?».
Некоторые задачи можно делать параллельно – например, пока один человек пишет код, другой может готовить документацию. А есть задачи, которые обязательно должны идти друг за другом, и задержка любой из них сдвинет весь проект. Какие именно задачи нельзя задерживать ни в коем случае? Из списка это не понять.
И так проходит неделя, вы уже выполнили несколько задач, но насколько близко завершение проекта? Укладываетесь ли в сроки? Нужно ли ускориться или можно работать в том же темпе? Простой список не даёт визуального ощущения прогресса.
Вы начинаете рисовать стрелочки между задачами, подписывать даты, зачёркивать выполненное. Список превращается в паутину из строк, стрелок и заметок. Через пару дней вы сами не можете разобраться в собственном плане.

Именно для решения таких задач и была придумана диаграмма Ганта – инструмент визуального планирования проектов, который используют программисты, менеджеры, строители и представители множества других профессий.
Эта диаграмма превращает список задач в наглядную временную шкалу, где видно:
- Когда начинается и заканчивается каждая задача
- Как долго она выполняется
- Какие задачи идут параллельно, а какие последовательно
- Что от чего зависит – какие задачи нельзя начать, пока не завершены другие
- Где вы находитесь сейчас – сколько уже сделано и сколько осталось
Диаграмма Ганта – это не волшебная палочка, которая сама выполнит проект за вас. Но она превращает хаотичное планирование в структурированный процесс. Вместо того чтобы паниковать перед дедлайном, вы видите чёткую картину: какие задачи критичны, где можно немного расслабиться, а где нужно поднапрячься.
Диаграмма Ганта
Давайте для начала познакомимся с автором этой диаграммы. В начале XX века, когда автомобили только начинали вытеснять конные экипажи, а о компьютерах никто и не мечтал, американский инженер-механик Генри Лоуренс Гант столкнулся с проблемой, которая мучает менеджеров и по сей день: как эффективно управлять сложными производственными процессами?
Гант работал консультантом на крупных промышленных предприятиях. В те времена строительство кораблей, возведение заводов или организация производства новой продукции превращались в настоящий кошмар для управленцев. Сотни рабочих, десятки этапов работ, зависимости между задачами – всё это приходилось держать в голове или записывать в виде бесконечных таблиц и текстовых описаний.
В 1910-х годах Гант предложил революционное решение: представить проект не как список задач, а как визуальную временную шкалу. Он начал рисовать горизонтальные полосы, где длина каждой полосы соответствовала продолжительности задачи, а положение на временной оси показывало, когда эта задача должна выполняться.
Идея оказалась настолько удачной, что диаграммы Ганта быстро распространились по всему миру. Их использовали при строительстве дамбы Гувера – одного из крупнейших инженерных проектов своего времени. Позже этот метод планирования применяли при реализации Манхэттенского проекта по созданию атомной бомбы и при строительстве системы межштатных автомагистралей в США.
Сегодня, более ста лет спустя, диаграммы Ганта остаются стандартом управления проектами. Просто теперь их рисуют не на бумаге, а в специальных программах и веб-сервисах.
Компоненты диаграммы
Давайте разберёмся, из каких элементов состоит диаграмма Ганта и как она работает. По сути, это таблица особого формата, которая превращает абстрактные задачи в наглядную картину.
Список задач располагается в левой части диаграммы. Это вертикальный перечень всех работ, которые нужно выполнить в рамках проекта. Задачи обычно разбиты на логические группы или этапы. Например, для нашего итогового проекта это могут быть группы «Проектирование», «Разработка», «Тестирование», «Документация» и «Защита».
Временная шкала (таймлайн) занимает верхнюю часть диаграммы. Это горизонтальная ось, размеченная на отрезки времени: дни, недели или месяцы – в зависимости от масштаба проекта. Для двухмесячного школьного проекта удобно использовать недели, для годового – месяцы.
Задачи-полосы – это сердце диаграммы. Каждая задача из списка превращается в горизонтальную полосу (обычно прямоугольник), которая начинается в момент начала работы и заканчивается в момент её завершения. Длина полосы визуально показывает длительность задачи. Глядя на диаграмму, вы сразу видите: эта задача займёт три дня, а вон та – целых две недели.
Зависимости между задачами отображаются стрелками, которые соединяют связанные работы. Если задачу Б нельзя начать, пока не завершена задача А, от конца полосы А к началу полосы Б рисуется стрелка. Эти связи показывают логику проекта: что за чем должно идти и почему нельзя поменять порядок.
Вехи (milestone) – это особые точки на диаграмме, обозначающие важные события или контрольные точки проекта. Обычно их изображают ромбиками или звёздочками. Например, «Макеты утверждены», «Первая версия готова», «Проект сдан». Вехи помогают разбить большой проект на понятные этапы.
Индикатор текущей даты – вертикальная линия, показывающая сегодняшний день. Всё, что левее этой линии, уже должно быть выполнено. Всё, что правее – предстоит сделать. Некоторые диаграммы также показывают процент выполнения каждой задачи – например, закрашивая часть полосы.
Давайте вернёмся к нашему итоговому проекту и на его примере вручную построим диаграмму Ганта.
Начнём с задач, перепишем составленный ранее список в левую часть диаграммы.

Теперь сверху на временной шкале расставим временные интервалы. Пока что ограничимся только неделями с первой по восьмую.

И самое ответственное – нужно распланировать все задачи. Под каждую задачу будем рисовать горизонтальную полосу на пересечении строки этой задачи и столбца той недели, на которой планируем выполнять эту задачу.
Но, прежде чем расставлять эти полосы на диаграмме, нужно понять, какая задача от какой зависит. Ведь как уже говорили ранее, мы банально не можем начать тестировать код, который даже не написан.
Предположим, у нас такие зависимости:
- Задачи с первой по третью выполняются друг за другом: каждая последующая может начинаться только после окончания предыдущей.
- Создавать базы данных и писать код добавления задач мы можем параллельно
- Тестировать и исправлять ошибки тоже можно одновременно. Исправление ошибок лучше начать чуть позже, но закончить его вместе с тестами. В это же время можно писать документацию.
- После того, как все предыдущие процессы завершены, можно приступать к созданию презентации
Сразу скажем про зависимости – их отражать на диаграмме мы не будем, чтобы не ухудшить читаемость.
Пока предположим такой график:
- На первой неделе продумываем дизайн
- Вторую неделю посвятим отрисовке макетов
- Всю третью неделю пишем код главной страницы
- На четвёртой неделе начинаем сразу две задачи: создаём базу данных (на неё хватит одной недели) и пишем код для добавления задач (тут уже меньше двух недель не закладываем)
- После того, как закончим писать код, в начале шестой недели можем приступить к тестам
- Спустя неделю тестов начнём исправлять баги и писать документацию
- И оставшуюся восьмую неделю посвятим созданию презентации
На диаграмме это будет выглядеть следующим образом.

Ну и последним штрихом добавим индикатор текущей даты. Предположим, что мы находимся в середине второй недели.

И вот магия: вместо плоского списка перед нами наглядная картина. Видно, что первые три недели – самые простые, где сильной загрузки по задачам нет. Зато к седьмой неделе надо серьезно подготовиться, ведь предстоит работать сразу над тремя задачами параллельно.
Самое главное в таком подходе – используя зависимости, можно легко передвигать сроки каждой задачи, не переживая, что все последующие наложатся друг на друга.
В нашем примере мы построили диаграмму в графическом редакторе, нарисовав таблицу и прямоугольники. Можно делать это и на бумаге – взять лист в клетку, расчертить временную шкалу и рисовать задачи цветными карандашами или маркерами. Для небольших проектов на пару недель это вполне рабочий вариант.
Однако у ручного рисования есть серьёзные недостатки. Что делать, если задача затянулась и нужно сдвинуть все последующие работы? Перерисовывать всю диаграмму? А если добавилась новая задача или изменились зависимости? Бумажная диаграмма быстро превращается в месиво из исправлений и стрелок.
Поэтому для серьёзных проектов используют специальные программы и сервисы. Существует множество решений – как платных, так и бесплатных. Среди популярных профессиональных инструментов – Microsoft Project, Asana, Jira, Monday.com. Есть и бесплатные альтернативы: GanttProject, TeamGantt, онлайн-сервис Trello с расширениями. Все они позволяют создавать красивые интерактивные диаграммы, автоматически пересчитывать сроки при изменениях, работать в команде.
Но есть способ проще и доступнее, который не требует регистрации в сервисах, изучения сложных программ или траты денег. Диаграммы Ганта прекрасно строятся в обычных редакторах электронных таблиц – таких как Microsoft Excel, Google Sheets или бесплатный LibreOffice Calc. У вас уже есть всё необходимое: таблица для списка задач и дат, ячейки для визуализации временной шкалы, возможность раскрашивать их в нужные цвета.
Давайте научимся строить диаграммы Ганта в LibreOffice Calc – свободном офисном пакете, который можно бесплатно установить на любой компьютер. Этот навык пригодится вам не только для школьных проектов, но и в дальнейшей учёбе и работе.
Построение диаграммы в LibreOffice Calc
Планирование игрового проекта
Представьте, что вы с друзьями решили создать небольшую 2D-игру в жанре платформер для школьного конкурса или просто для портфолио. Команда у вас уже сформирована: есть программисты, художники и звукорежиссёр. Энтузиазма – хоть отбавляй, идей – море, но совершенно непонятно, как организовать работу, чтобы через два месяца получить готовую игру, а не набор несовместимых друг с другом файлов.
Вы берёте на себя роль проджект-менеджера – человека, который координирует работу команды и следит за сроками. Первым делом нужно понять, какие задачи предстоит выполнить и как они связаны между собой. Вы собираете встречу с «лидами» всех направлений: главным программистом Алексеем, арт-директором Марией и звукорежиссёром Дмитрием.
Сбор информации о задачах
На встрече вы записываете задачи и обсуждаете каждую из них. Алексей, главный программист, говорит:
– Нам нужно создать игровой движок с физикой и управлением персонажем. Это основа всей игры: прыжки, столкновения с платформами, гравитация. Без этого ничего не заработает. На разработку движка уйдёт примерно 2 недели. Эту задачу можно начинать прямо сейчас, она ни от чего не зависит.
Мария, арт-директор, добавляет:
– Мне нужно нарисовать все спрайты персонажа: анимации ходьбы, прыжков, простоя. Это займёт 2 недели. Я могу начинать параллельно с программистами, нам не нужно ждать друг друга на этом этапе.
Дмитрий, звукорежиссёр, уточняет:
– Я создам звуковые эффекты и фоновую музыку – звуки прыжков, сбора предметов, музыкальную тему для игры. На это понадобится 2 недели. И мне тоже не нужно ничего ждать, могу работать параллельно со всеми.
Алексей продолжает:
– Когда движок будет готов, а спрайты нарисованы, нужно будет интегрировать графику в игру – связать анимации персонажа с движениями, настроить всё визуально. Это зависит и от движка, и от готовых спрайтов, поэтому начать можно будет только после завершения обеих задач. Интеграция займёт 1 неделю.
Мария добавляет:
– После интеграции графики я нарисую уровни и окружение – платформы, фоны, препятствия. Для этого мне нужно видеть, как всё выглядит в игре, чтобы подобрать правильный стиль и масштаб. На создание уровней уйдёт 3 недели.
Наконец, Алексей резюмирует:
– Когда уровни будут готовы, а звуки созданы, останется финальная сборка игры: добавить звуковые эффекты, музыку, настроить все уровни, протестировать и исправить баги. Эта задача зависит от готовых уровней и звуков. На финальную сборку заложим 2 недели.
Вы записываете все задачи и получаете такую картину:
- Разработка игрового движка – 2 недели, не зависит ни от чего
- Создание спрайтов персонажа – 2 недели, не зависит ни от чего
- Создание звуков и музыки – 2 недели, не зависит ни от чего
- Интеграция графики – 1 неделя, зависит от движка и спрайтов
- Разработка уровней – 3 недели, зависит от интеграции графики
- Финальная сборка – 2 недели, зависит от уровней и звуков
Информация собрана, зависимости понятны. Теперь нужно превратить эти данные в наглядную диаграмму Ганта, которая покажет, когда какая задача выполняется, где возможна параллельная работа, а где команде придётся ждать завершения предыдущих этапов. Открываем LibreOffice Calc и начинаем строить диаграмму.
Подготовка таблицы
Для начала давайте структурируем все потребности нашей команды разработчиков в виде одной таблицы. В первый столбец вынесем задачи, во второй — их длительность, а в третий — зависимости процессов.

Всё слишком скучное и чёрно-белое. Давайте для большей наглядности раскрасим каждый столбец.

Сразу отметим, что работать со столбцом, в котором перечислено сразу несколько зависимостей, будет трудно. Давайте разделим его на несколько так, чтобы каждая зависимость была в отдельном столбце. Для этого будем использовать инструмент «Текст по столбцам».
Выделим столбец с зависимостями («С»), далее в меню сверху выбираем вкладку «Данные», а в выпадающем меню «Текст по столбцам».

Calc автоматически подберёт нужный разделитель (здесь – «; »), вам останется лишь нажать на кнопку «Ок». В итоге вместо одного столбца получим два, а все пустые ячейки заполним нулями.
Данные мы подготовили, теперь можем перейти к следующему этапу, на котором будем добавлять вспомогательные столбцы для корректной работы нашей диаграммы.
Вспомогательные столбцы
Сразу запомним главное: все формулы ниже выводятся из одной картинки — отрезка на временной шкале. У отрезка есть начало, конец и количество занятых ячеек.
Если задача идёт с 3-го по 5-й момент включительно, она занимает три ячейки: 3, 4 и 5. Поэтому длительность = конец − начало + 1.
Из этого же равенства можно вывести две другие формулы: конец = начало + длительность − 1, а начало = конец − длительность + 1.
Теперь определим, какие ещё столбцы понадобятся. У нас есть длительность каждой задачи, но для «полосы» на диаграмме нужно знать ещё и время её начала и окончания.
Ещё нужно знать время окончания каждой задачи-зависимости. Например, «Графика» не может начаться, пока не закончатся и «Движок», и «Спрайты». Поэтому добавим два столбца — по одному на каждую зависимость.
Ну и последнее, добавим еще один столбец «Сдвиг», чтобы иметь возможность двигать каждую задачу по необходимости. Этим мы воспользуемся в самом конце.
Получим такую таблицу.

Начнём заполнять таблицу. В столбцах E и F будем хранить не длительности, а время окончания задач-зависимостей. Именно оно определяет, когда можно начать текущую задачу.
Давайте подумаем, как «подтянуть» эти значения. Нужно взять имя задачи из столбца C или D, найти её в столбце A и вернуть время окончания из столбца H.
Сделать это можно с помощью функции ВПР(). В ячейку E2 впишем формулу: =ВПР(C2;$A:$I;8;0).
Формула ищет название задачи из C2 в первом столбце диапазона A:I. Когда находит, берёт значение из 8-го столбца этого диапазона. Восьмой столбец от A — это H, где хранится время окончания.
Итак, смысл функции прост: «Найди задачу-зависимость и скажи, когда она закончится». Это время и станет левой границей для текущей задачи.
Разберём аргументы ВПР(), чтобы не заучивать их порядок.
- C2 — что ищем: имя первой задачи-зависимости.
- $A:$I — где ищем. Знаки $ фиксируют диапазон, чтобы при растягивании формулы он не съезжал.
- 8 — из какого столбца вернуть ответ. Считаем от левой границы A: A — 1, B — 2, …, H — 8.
- 0 — ищем точное совпадение имени задачи. Приблизительный поиск нам здесь не подходит.
Если забыли формулу, задайте себе четыре вопроса: «Что ищу? Где ищу? Из какого столбца беру ответ? Нужно ли точное совпадение?». Ответы и дадут все аргументы ВПР(). Даже последний вопрос можно не запоминать — ставьте в конце всегда 0, не ошибётесь.

Но тут вырисовывается одна проблема. Для независимых задач у нас будет красоваться неприятное «#Н/Д».

Это вполне ожидаемо, ведь задачи с именем «0», указанным в C2, у нас нет. Чтобы избавиться от ошибки #Н/Д, можно применить один из двух подходов:
- Добавить «нулевую» задачу с длительностью в 0
- Использовать дополнительную функцию
ЕСЛИОШИБКА()
В начале обучения, если еще неуверенно строите диаграмму Ганта, лучше пользуйтесь первым подходом! Мы же уверенные пользователи Calc и пойдём вторым путем.
Поправим формулу в нашей ячейке:
=ЕСЛИОШИБКА(ВПР(C2;$A:$I;8;0);0)

ЕСЛИОШИБКА() вернёт 0 вместо #Н/Д. Нуль здесь удобен: он означает, что ждать некого и независимая задача может начаться с первой единицы времени.
Теперь исправленную формулу растягиваем вниз до конца таблицы. Аналогично поступаем и со столбцом «F», в него будем подтягивать время окончания второй зависимости (если она есть). В формуле поменяется только первый аргумент:
=ЕСЛИОШИБКА(ВПР(D2;$A:$I;8;0);0)
В итоге получаем два столбца со временем окончания каждой задачи-зависимости.

Обратите внимание: там, где в столбцах E и F сейчас стоят нули, позже появятся числа. Calc сам пересчитает их, когда мы заполним столбец H со временем окончания.
Теперь вычислим время окончания задачи. Нам нужны три части: её длительность из B, самое позднее время окончания её зависимостей из E:F и ручной сдвиг из I.
В виде формулы это выглядит так:
=B2 + МАКС(E2:F2) + I2
А теперь выведем эту формулу сами. Пусть две задачи-зависимости закончились в моменты 2 и 6. Текущая задача может начаться только после обеих, то есть в момент 7.
Из двух окончаний нас интересует большее, поэтому и появляется МАКС(E2:F2). Если зависимость одна, второе значение будет равно 0 и не помешает.
Пусть сама задача длится 3 момента. Она займёт 7, 8 и 9, поэтому закончится в момент 9. Тот же результат даёт запись 6 + 3 = 9.
Если нужен ручной сдвиг, добавляем ещё I2. Получаем как раз формулу:
H2 = B2 + МАКС(E2:F2) + I2
Запоминать её не обязательно. На экзамене можно снова сказать себе: «Жду самую позднюю зависимость, затем добавляю длительность и сдвиг».

Правило получается таким: «время окончания = самое позднее окончание зависимости + длительность задачи + сдвиг».
Растягиваем формулу вниз и получаем такую таблицу.

Давайте проанализируем полученные значения на задаче «Сборка». Она длится всего 2 недели, но зависит от двух задач, которые заканчиваются на 2-й и 6-й неделях. Значит, начать сборку до 7-й недели нельзя.
Время окончания «Сборки» будет равно: самое позднее окончание зависимости (6) + длительность самой задачи (2) = 8 недель.
Также обратите внимание, что пустые ячейки в столбцах «E» и «F» заполнились данными.
Теперь вычислим время начала каждой задачи. Здесь и появляется та самая единица, которую часто запоминают, но не понимают. Она нужна из-за того, что мы считаем обе границы отрезка.
Например, если задача заканчивается на 4-й неделе и длится 2 недели, она занимает 3-ю и 4-ю недели. Поэтому начало = 4 − 2 + 1 = 3. Без единицы мы ошибочно захватили бы ещё и 2-ю неделю.
Теперь выведем формулу для столбца G. Мы уже знаем: длительность = конец − начало + 1.
Перенесём начало влево, а длительность — вправо: начало = конец − длительность + 1. В нашей таблице это G2 = H2 − B2 + 1.
Если вдруг забыли знак, нарисуйте три ячейки с номерами 3, 4 и 5. У них начало 3, конец 5 и длительность 3. Подставьте числа и проверьте себя.

В итоге получаем такую заполненную таблицу.

Теперь можно перейти к построению временной шкалы (таймлайна) и её заполнению.
Построение временной шкалы
В первой строке справа от таблицы нам необходимо поместить последовательность чисел 1, 2, 3 и так далее.
Естественно, не стоит вписывать все числа вручную: в ячейке «J1» напишите «1», а в «K1» – формулу «=J1+1», то есть «Значение предыдущей ячейки + 1».

Далее можно либо растянуть эту формулу вправо, либо воспользоваться таким алгоритмом, который пропишет нужные значения вплоть до конца листа:
- Копируем значение ячейки «K1» сочетанием клавиш «Ctrl + C»
- Нажимаем сочетание клавиш: «Ctrl + Shift + Стрелка вправо», перемещаемся в крайний правый столбец листа, при этом выделяя все ячейки, начиная со второй.
- В выбранный диапазон вставляем значение со второй ячейки нажатием сочетания клавиш «Ctrl + V»
Получим вот такую временную шкалу.

Осталось заполнить временную шкалу «полосами» задач. Наша цель — ставить в строке единицу в те моменты, когда задача выполняется, и оставлять ячейку пустой во все остальные моменты.
Логика у нас будет следующая: для каждой ячейки в этой «сетке» нам нужно проверить, попадает ли текущий момент времени (число сверху в первой строке) в диапазон между началом и концом задачи. Если да – ставим 1,
если нет – оставляем ячейку пустой.
Для этого воспользуемся формулой:
=ЕСЛИ(И($G2<=J$1;J$1<=$H2);1;"")

Разберём её по частям:
«$G2» – это начало задачи (из столбца «G»). Знак «$» фиксирует столбец «G», чтобы при растягивании вправо он не менялся.
«J$1» – это номер текущего момента времени (из первой строки). Знак «$» здесь фиксирует строку 1, чтобы при растягивании вниз она не менялась.
Выражение «$G2<=J$1» проверяет, наступил ли уже момент начала задачи. Соответственно, выражение «J$1<=$H2», наоборот, проверяет, не закончилась ли задача.
Операция конъюнкции («И») нужна для проверки обоих условий, то есть требует, чтобы текущее время «J$1» было одновременно больше или равно началу задачи и меньше или равно времени окончания задачи.
Сама же функция ЕСЛИ() проверяет истинность всего условия, если оно выполняется, то в текущей ячейке ставится единица, если нет – ячейка остаётся пустой.
Таким образом, формула проверяет «находится ли текущая неделя в промежутке выполнения задачи». Если да – ставит 1, если нет – оставляет пустоту.
Откуда берутся два неравенства? Мы просто проверяем, что текущий момент не левее начала и не правее конца.
На бумаге это выглядит так: начало ≤ текущее время ≤ конец. Calc не записывает такие цепочки одним выражением, поэтому разбиваем его на две части и соединяем их функцией И().
ЕСЛИ() нужна только для рисования: если оба неравенства истинны, ставим 1. Если хотя бы одно ложно, оставляем пустую строку «».
Чтобы восстановить формулу, сначала запишите словами: «Начало ≤ момент и момент ≤ конец». Затем замените слова адресами ячеек.
Допустим, у нас:
- Начало процесса G2 = 4
- Конец процесса H2 = 6
- В строке 1 стоят числа времени: 1, 2, 3, 4, 5, 6, 7…
Посмотрим, как будет работать формула в разных столбцах:
- Время 1: Выражение 4 <= 1 <= 6 ложно, ячейка пустая
- Время 2: Выражение 4 <= 2 <= 6 ложно, ячейка пустая
- Время 3: Выражение 4 <= 3 <= 6 ложно, ячейка пустая
- Время 4: Выражение 4 <= 4 <= 6 истинно, ячейка заполняется единицей
- Время 5: Выражение 4 <= 5 <= 6 истинно, ячейка заполняется единицей
- Время 6: Выражение 4 <= 6 <= 6 истинно, ячейка заполняется единицей
- Время 7: Выражение 4 <= 7 <= 6 ложно, ячейка пустая
В итоге для этой задачи в строке появится три единицы подряд – над числами 4, 5, 6. Это и будет «полоса» на диаграмме Ганта.
После того как формула введена в «J2» – растягиваем её вправо до конца временной шкалы. Затем всю строку растягиваем вниз для всех имеющихся задач.
В итоге имеем такую диаграмму Ганта.

Если формулы вылетели из головы, не паникуйте. Пройдите по цепочке из пяти вопросов.
- Кого ждёт текущая задача? Через ВПР() получаем время окончания каждой зависимости.
- Кого нужно ждать дольше всего? Берём МАКС() из времён окончания зависимостей.
- Когда закончится сама задача? К самому позднему окончанию добавляем длительность и сдвиг.
- Когда она началась? Из конца вычитаем длительность и возвращаем единицу: начало = конец − длительность + 1.
- Работает ли задача в момент t? Проверяем: начало ≤ t ≤ конец.
Вот и вся логика. Если вы помните не сами формулы, а смысл столбцов, все записи можно вывести заново за пару минут.
Работа с диаграммой Ганта
Диаграмма построена, и можно приступать к работе с ней. Для начала давайте «подсветим» ячейки диаграммы с помощью условного форматирования.
Выбираем все ячейки из диаграммы (у нас это диапазон от «J2» до «S7»), переходим в меню «Условное форматирование», далее «Условие…» и выбираем пункт «Равно…»

В открывшемся диалоговом окне вписываем значение 1 в поле для ввода слева, а в выпадающем меню выбираем стиль ячеек. В нашем случае – это стиль «Хорошо», при котором соответствующие условию ячейки выделятся светло-зелёным цветом.

В итоге у нас получается вот такая диаграмма.

Теперь представим такую ситуацию: у нас маленькая команда инди-разработчиков и одновременно могут работать только 2 группы: либо дизайнеры и разработчики, либо команда саунд-эффектов и дизайнеры и так далее.
Наша цель, как проджект-менеджера, грамотно разнести задачи во времени так, чтобы одновременно выполнялось не более двух задач. Давайте приступим к реализации этой цели.
Для начала, чтобы глазами не бегать по диаграмме, выведем снизу статистику – сколько задач выполняется в текущий момент времени. Выбираем ячейку «J8» и пишем формулу: «=СУММ(J2:J7)». Она просто просуммирует все единицы «над собой». Эту формулу растягиваем вправо до конца таблицы.

И вот мы увидели, что в первые две недели одновременно выполняются три задачи – такое нас не устраивает. Именно для этого мы и добавили столбец «Сдвиг»! С помощью него мы можем немного «отодвинуть» начало какой-либо задачи.
Но стоит помнить, что от некоторых задач зависят все последующие. Предположим, мы попросили арт-директора начать работу над спрайтами на две недели позже.

Вот незадача: от спрайтов персонажа зависят все оставшиеся задачи: графика, уровни и сборка. Поэтому перенос спрайтов сдвинул и всю цепочку: вместо 8 недель нам теперь понадобится 10.
Необходимо выбрать другую задачу для переноса. Немного поразмыслив, мы поймём, что, как и от спрайтов, так и от движка зависит следующая за ними задача – графика. А от графики уже зависят и уровни, и сборка.
Но есть еще «звуки», результат работы которых понадобится только на самом последнем этапе – на этапе сборки. Тогда можем смело передвинуть время начала работы этой задачи на две недели.

В итоге мы добились того, чтобы в каждый момент времени выполнялись не более двух задач и при этом общий срок не растянулся далее 8 недель.
Итоги
Теперь вы знаете, что такое диаграмма Ганта, как она помогает визуализировать проект и управлять зависимостями между задачами.
Мы научились строить такую диаграмму в LibreOffice Calc: создавать временную шкалу, использовать формулы для автоматического расчёта сроков, работать с зависимостями и оптимизировать загрузку команды. Этот навык пригодится не только для школьных проектов и разработки программ, но и для любого планирования – от подготовки к экзаменам до организации личных проектов.
В следующей статье применим эту таблицу к первому типу задания 22: научимся находить момент завершения процессов и определять, какие из них работают в заданную миллисекунду.
