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

Вот шестиэтапный процесс, который я рекомендую своим ученикам.

  1. Поймите постановку задачи.
  2. Определите ожидаемое поведение.
  3. Определите вспомогательную информацию.
  4. Сопоставьте вспомогательную информацию с поведением.
  5. Соберите кусочки в раствор.
  6. Протестируйте свое решение.

Объяснение процесса

1. Поймите формулировку проблемы
Чтобы решить любую проблему, вы должны сначала понять, что вас просят сделать. Обычно проблема кодирования дает вам набор ожидаемых входных и выходных данных. Также обратите внимание на крайности и «пограничные случаи»; например, чтобы получить представление о полном спектре поведения для математической задачи, мы можем захотеть посмотреть на очень большие и маленькие числа, отрицательные и положительные числа и 0.

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

2. Определите ожидаемое поведение
Как только вы поймете проблему, вам нужно выяснить, какое поведение даст вам ожидаемые результаты. Другими словами, какой набор шагов вам нужно предпринять в вашей программе, чтобы получить правильный вывод из заданного ввода? В терминах информатики эти шаги называются «алгоритмом», но вы также можете думать о них как о рецепте. Подумайте об этом: рецепт начинается с набора ингредиентов (вход), дает вам конкретные шаги (алгоритм), и если все идет хорошо, вы получаете вкусное блюдо (выход).

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

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

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

4. Сопоставьте вспомогательную информацию с поведением
Собирая вспомогательную информацию, вы заметите, что она соответствует определенным шагам ожидаемого вами поведения. Вот один из способов подумать об этом: для каждого шага в поведении вы спрашиваете: «Как мне выполнить этот шаг?» Ваша вспомогательная информация является ответом; он говорит вам: «Вот как вы выполните этот шаг». Связав эту информацию с вашей целью, вы сможете лучше понять и написать свою программу. Вы даже можете собрать свою информацию и поведение в таблицу (если вам нужен пример, посмотрите в конце этого поста).

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

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

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

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

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

Например, если символ «а», а предложение «У Мэри был ягненок», программа напечатает 4. Если символ — «а», а предложение «Бешеный кролик съел морковь», программа также выведет 4. Если предложение «Моя собака милая», а символ — «b», то программа выведет 0.

Шаг 1. Изучите формулировку задачи.
Эта формулировка задачи довольно короткая и содержит несколько примеров ожидаемых входных и выходных данных. Мы можем обобщить ожидания в таблице:

Вы также можете добавить свои собственные входы и выходы в таблицу, если хотите больше примеров, которые вы можете протестировать, когда программа будет готова.

Вы ничего не заметили во втором предложении? Заглавная буква «А» в счет не входила. Пример, который дала нам проблема, говорит нам о том, что регистр символа имеет значение. Следите за дополнительной информацией, которую вам сообщают приведенные примеры. Я бы посоветовал изучить каждый пример, чтобы убедиться, что он имеет смысл для вас, что поможет вам обнаружить подобные детали.

Шаг 2. Определите ожидаемое поведение.
Чтобы решить эту проблему, нам необходимо сделать следующее:

  1. Получить предложение и символ от пользователя.
  2. Создайте переменную для отслеживания количества вхождений, начиная с 0.
  3. Просмотрите предложение и проверьте, соответствует ли каждый символ вводу.
  • Если символ совпадает, добавьте 1 к количеству вхождений и перейдите к следующему символу.
  • Если символ НЕ совпадает, ничего не делайте со счетом и переходите к следующему символу.

4. Выведите количество раз, когда символ встречался.

Шаг 3. Определите вспомогательную информацию.
Формулировка проблемы не дала нам никакой дополнительной информации, но по поведению мы видим, что есть несколько моментов. мы должны знать, как это сделать. Нам нужно знать, как:

  • Получите ввод от пользователя.
  • Проверяйте каждый символ в предложении по одному.
  • Вывод информации на экран.

Допустим, из наших заметок к уроку Java мы знаем, как выводить вывод на экран (функция с именем System.out.println(String myOutput)).
В задаче не говорится как получить пользовательский ввод, и мы не можем найти никаких примеров в наших заметках, поэтому нам нужно провести небольшое исследование. Мы могли бы обратиться к учебнику или выполнить поиск в Google (попробуйте поисковый запрос, такой как «java get char input» или «java get string input»; как искать информацию — это широкая тема, которая заслуживает отдельного подробного обсуждения). ).

После некоторых поисков мы находим страницы официальной онлайн-документации по Java и узнаем о функции System.console.readline(), поэтому добавляем ее в наш список вспомогательной информации.

Мы знаем, что нам придется проходить предложение по одному символу за раз. Из класса мы помним, что мы можем использовать цикл for для перебора строки. Глядя на онлайн-документацию по Java, мы также видим, что строки Java имеют метод с именем String.charAt(int index), который возвращает символ в указанной позиции в строке, а также метод с именем String.length(), который возвращает длину (количество символов) в строке.

Мы также должны быть осторожны, чтобы создать и установить нашу переменную счетчика в 0 вне цикла for. Если мы установим его в 0 внутри цикла, каждый раз, когда мы проверяем новый символ, счетчик будет сбрасываться на 0, а это не то, что нам нужно.

Шаг 4. Сопоставьте вспомогательную информацию с поведением.
Итак, мы определили вспомогательную информацию, которая поможет нам решить проблему, и теперь можем ее сопоставить. к требуемому поведению.

Шаг 5. Соберите из частей решение.
После того, как вы выяснили поведение и то, как его реализовать, пришло время объединить все это в единое целое. полная программа. См. прилагаемый файл CharacterCounter.java для моего решения, основанного на нашем примере (вы можете найти код на https://codepad.co/snippet/wTCxNZom). Вы можете открыть его в текстовом редакторе (мне нравится использовать Notepad++).

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

Шаг 6. Протестируйте свое решение.
Итак, теперь, когда у нас есть программа, нам нужно проверить, работает ли она. Для этого вы можете использовать свой список ожидаемых доходов и результатов из шага 1.

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

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

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

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

Я надеюсь, что этот пост и пример окажутся полезными, и не стесняйтесь оставлять комментарии, предложения, вопросы или другие отзывы!

Связанный

Первоначально опубликовано на cloudyheavengames.com 28 октября 2016 г.