На Горох
Информатика, 9 класс

§ 23. Как разрабатывают программы?

"Информатика", Поляков К.Ю., Еремин Е.А.

Объяснение темы В оглавлении: § 23. Как разрабатывают программы?

Кратко о теме

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

Объяснение темы

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

Определения и обозначения

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

Формализация — представление условия задачи в виде, удобном для решения: выделяют исходные данные, результат и связи между ними. Слова условия превращаются в чёткие требования, например «ввести три числа» и «вывести наибольшее». Формализация нужна, чтобы разные люди одинаково понимали задачу и не начинали программировать на основе догадок.

Алгоритм — точная последовательность действий, которая приводит от исходных данных к результату. В нём описывают, что и в каком порядке нужно сделать, например сравнить числа или выполнить вычисления. Алгоритм позволяет проверить замысел решения отдельно от кода и помогает позже записать его на языке программирования.

Отладка — поиск и исправление ошибок в программе; тестирование — проверка её работы на специально подобранных данных. Во время тестирования выясняют, верно ли программа обрабатывает разные входные значения, а при отладке ищут причины неверного поведения. Эти действия нужны, потому что даже тщательно написанный код может содержать ошибки.

Как это устроено

Разработка начинается с постановки задачи: сначала нужно выяснить, что именно должна делать программа и какие данные получать. Если начать с кода, не определив ожидаемый результат, можно построить программу, которая выполняет действия, но отвечает не на тот вопрос. Поэтому в условии уточняют входные данные, результат и ограничения. Например, важно различать задачу «найти корни уравнения» и задачу «найти только действительные корни».

Затем условие формализуют: выделяют входные и выходные данные, допустимые значения и нужные вычисления. Это делают потому, что обычный текст может допускать разные толкования, а программа должна действовать по точным правилам. Например, для поиска наибольшего из трёх чисел нужно заранее решить, как сравниваются значения и что делать, если несколько чисел равны. Чёткое описание помогает составить полный способ решения и не забыть особые случаи.

По формализованной задаче разрабатывают алгоритм — последовательность шагов для получения результата. Каждый шаг должен быть понятным и выполнимым, а весь алгоритм — охватывать допустимые исходные данные. Это важно, потому что даже верно записанная программа не сможет исправить неверную логику решения. Алгоритм мысленно проверяют на примерах, чтобы заметить пропущенные действия или ветви.

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

Готовую программу запускают и проверяют на тестах; обнаруженные ошибки находят и исправляют. Проверки нужны, чтобы увидеть, как решение ведёт себя не только на одном удобном примере, но и в других ситуациях. Если после исправления код всё ещё выдаёт неверный ответ, стоит проверить алгоритм и исходную постановку задачи. Так разработчик возвращается к предыдущему этапу, когда проблема возникла не только из-за записи команд.

Этапы разработки программы

ЭтапЧто делаютРезультат
Постановка задачиУточняют, что требуется получить, какие данные вводятся и какие ограничения заданы.Точное описание задачи.
ФормализацияВыделяют входные и выходные данные, связи между ними и необходимые вычисления.Формальное условие задачи.
Разработка алгоритмаОпределяют последовательность шагов решения и проверяют её на примерах.Алгоритм решения.
ПрограммированиеЗаписывают алгоритм на выбранном языке программирования.Текст программы.
Тестирование и отладкаПроверяют программу на тестах, находят причины ошибок и исправляют их.Проверенная и исправленная программа.

Таблица показывает, какой результат получают на каждом этапе и почему разработка не сводится к написанию кода. Её можно использовать как план действий: если неизвестно, что вводить, нужно уточнить постановку или формализацию. Если программа даёт неверный ответ, следует проверить тесты, алгоритм и код.

Разбор задач

Сумма двух чисел

Условие. Нужно составить программу, которая по двум введённым числам выводит их сумму. До записи кода определим, что именно получает программа и какой результат должна показать. Затем составим простой алгоритм и проверим его на нескольких парах значений.

  1. Считаем входными данными два числа, например a и b, а результатом — одно число, их сумму. Ограничений на значения в условии не задано, поэтому алгоритм должен работать и с положительными, и с отрицательными числами, и с нулём. Такое уточнение помогает выбрать проверочные примеры.
  2. Записываем алгоритм: ввести a и b, вычислить s = a + b, вывести s. Здесь переменная s хранит результат вычисления и позволяет отделить расчёт от вывода. На этом шаге ещё неважно, как именно команды будут записаны на конкретном языке.
  3. Проверяем идею на парах 2 и 3, 0 и 5, −4 и 1. Ожидаемые суммы равны соответственно 5, 5 и −3, поэтому такие тесты проверяют обычные, нулевые и отрицательные значения. Если программа даёт все эти результаты, базовая логика подтверждена.

Ответ. Алгоритм состоит из ввода двух чисел, сложения и вывода суммы. Код должен повторять именно эти шаги с соблюдением правил выбранного языка. Несколько тестов помогают убедиться, что программа не ограничивается одним удобным примером.

Наибольшее из трёх чисел

Условие. Нужно найти наибольшее из трёх введённых чисел. При решении важно учесть, что наибольшим может оказаться любое из них, а значения могут совпадать. Поэтому удобнее сначала описать случаи сравнения, а затем переносить их в ветвления программы.

  1. Обозначим числа a, b и c, а результат — наибольшее значение. Сравним a с b и c: если a не меньше обоих, оно и есть ответ. Если это не так, нужно проверить, не превосходит ли b оба оставшихся числа.
  2. Если b не меньше a и c, выбираем b. В остальных случаях наибольшим будет c, потому что ни a, ни b не оказались больше обоих других чисел. Так алгоритм разбивает решение на понятные случаи и всегда выбирает одно из введённых значений.
  3. Проверим числа 8, 3, 5; затем 2, 9, 4; затем 1, 4, 7. Ответы должны быть 8, 9 и 7 — они проверяют каждый из трёх возможных вариантов. Отдельно проверим, например, 6, 6, 2, чтобы убедиться, что равенство не мешает получить правильный максимум.

Ответ. Алгоритм сравнивает числа и по результатам сравнений выбирает наибольшее. Проверка равных значений важна, потому что реальные входные данные не обязаны быть различными. Для проверки программы нужны случаи, в которых максимумом становится каждое из чисел.

Квадратное уравнение

Условие. Для введённых коэффициентов нужно решить квадратное уравнение или сообщить, что действительных корней нет. Запись ax² + bx + c = 0 является квадратным уравнением только при a ≠ 0. Значит, программа должна сначала проверить коэффициент a, а затем выбирать действия по дискриминанту D = b² − 4ac.

  1. Сначала проверяем, равен ли a нулю. Если равен, это уже не квадратное уравнение, поэтому нельзя применять формулы для его корней; для поставленной задачи следует отдельно сообщить, что коэффициент при старшем члене нулевой. Эта проверка предотвращает деление на ноль в дальнейших вычислениях.
  2. При a ≠ 0 вычисляем дискриминант D = b² − 4ac. Если D < 0, действительных корней нет; если D = 0, есть один действительный корень x = −b / (2a). При D > 0 имеются два действительных корня: x₁ = (−b − √D) / (2a) и x₂ = (−b + √D) / (2a).
  3. Подбираем тесты так, чтобы получить все случаи: например, x² + 1 = 0 имеет отрицательный дискриминант, x² − 2x + 1 = 0 — нулевой, а x² − 1 = 0 — положительный. Кроме того, проверяем уравнение с a = 0, например 0x² + x + 1 = 0. Сравнение результатов с ожидаемыми покажет, правильно ли программа выбирает ветвь для каждого случая.

Ответ. Решение состоит из проверки a, вычисления дискриминанта и выбора результата по его знаку. Ветвления необходимы, потому что формулы и ответ отличаются для разных случаев. Тесты должны покрывать все ветви алгоритма, включая нулевой коэффициент при x².

Типичные ошибки

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

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

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

Исправлять отдельные строки кода, не проверяя логику алгоритма, — значит устранять возможное следствие, а не причину. Эту ошибку допускают, когда проблема заметна в тексте программы и кажется, что достаточно заменить одну команду. Чтобы проверить себя, проследите решение по шагам на примере и выясните, верны ли сами действия; если нет, пересмотрите алгоритм.

Связь с другими темами

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

Этапы разработки применяются не только в простых задачах, но и при создании программ с массивами, файлами и функциями. Чем сложнее программа, тем важнее заранее определить данные, разделить решение на части и подобрать проверки для разных ситуаций. Такой порядок остаётся полезным при работе на любом языке программирования.

Что запомнить

  • Разработка программы начинается с понимания задачи, а не с написания кода.
  • При формализации выделяют входные данные, результат и ограничения.
  • Программа реализует алгоритм на выбранном языке программирования.
  • Запуск программы сам по себе не доказывает правильность решения.
  • Тесты должны проверять разные случаи, в том числе граничные.
  • Отладка помогает находить и исправлять ошибки.

Частые вопросы по теме

Почему нельзя сразу переходить от условия задачи к написанию программы?

В условии могут быть неясны входные данные, требуемый результат или ограничения. Если сразу писать код, можно реализовать не то решение; формализация и алгоритм помогают сначала разобраться в задаче.

Чем формализация задачи отличается от разработки алгоритма?

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

Как понять, что алгоритм приводит к нужному результату?

Нужно проверить, что каждый шаг алгоритма понятен и применим к допустимым исходным данным. Затем его проверяют на разных случаях, включая граничные и особые значения, и сравнивают полученные результаты с ожидаемыми.

Чем тестирование отличается от отладки?

Тестирование — это проверка программы на специально подобранных данных, которая помогает обнаружить неверное поведение. Отладка — поиск причины ошибки и её исправление; после исправления программу снова тестируют.

Почему программа может работать без ошибок, но выдавать неверный ответ?

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

Спросить по теме параграфа

§ 23. Как разрабатывают программы?

Учебник

Оглавление →
Предмет
Информатика
Класс
9 класс
Учебник
"Информатика", Поляков К.Ю., Еремин Е.А.