Информатика 9 класс алгоритмизация и программирование решение задач на компьютере

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

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

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

Зная, что тетя Кей ценит творческие и необычные вещи, я решила нанять поющего посыльного. Чтобы передать свою благодарность.

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

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

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

  • Компьютерная программа — это набор инструкций для компьютера. Эти инструкции описывают шаги, которые компьютер должен выполнить для реализации плана.

  • Алгоритм — это план решения задачи.

  • Человек должен разработать алгоритм.

  • Человек должен перевести алгоритм в компьютерную программу.

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

Решение любой проблемы начинается с плана. Этот план называется алгоритмом.

Алгоритм — это план решения задачи.

Существует множество способов написания алгоритма. Некоторые из них очень неформальны, некоторые являются вполне формальными и математическими по своей природе. А некоторые-вполне графическими. Инструкции по подключению DVD-плеера к телевизору представляют собой алгоритм. Математическая формула, такая как nR2, является частным случаем алгоритма. Форма не особенно важна до тех пор, пока она обеспечивает хороший способ описания и проверки логики плана.

Разработка алгоритма (плана) является ключевым шагом в решении задачи. Как только у нас есть алгоритм, мы можем перевести его в компьютерную программу на каком-то языке программирования. Процесс разработки алгоритма состоит из пяти основных этапов.

Шаг 1: Получить описание проблемы.

Шаг 2: Проанализируйте проблему.

Шаг 3: Разработайте высокоуровневый алгоритм.

Шаг 4: Уточните алгоритм, добавив больше деталей.

Шаг 5: Просмотрите алгоритм.

Шаг 1: Получить описание проблемы.

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

Клиент отвечает за создание описания проблемы, но это часто самая слабая часть процесса. Довольно часто описание проблемы страдает от одного или нескольких из следующих типов дефектов: (1) описание опирается на неустановленные предположения. (2) описание неоднозначно. (3) описание неполно или (4) описание имеет внутренние противоречия.

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

Шаг 2: Проанализируйте проблему.

Цель этого шага — определить как начальную, так и конечную точки решения задачи. Этот процесс аналогичен математическому определению того, что дано и что должно быть доказано.

Хорошее описание проблемы облегчает выполнение этого шага.

Определяя отправную точку, мы должны начать с поиска ответов на следующие вопросы:

  • Какие данные имеются?

  • Где эти данные?

  • Какие формулы относятся к проблеме?

  • Какие существуют правила работы с данными?

  • Какие связи существуют между значениями данных?

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

  • Какие новые факты мы получим?

  • Какие пункты будут изменены?

  • Какие изменения будут внесены в эти пункты?

  • Каких вещей больше не будет?

Шаг 3: Разработайте высокоуровневый алгоритм.

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

Проблема: мне нужно отправить поздравительную открытку моему брату Марку.

Анализ: У меня нет карты. Я предпочитаю покупать открытку, а не делать ее сам.

Высокоуровневый алгоритм:

Зайдите в магазин который продает поздравительные открытки
Выберите открытку
Покупка карты
Отправка карты по почте

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

  • — В какой магазин я пойду?

  • — Как я туда доберусь: пешком, на машине, на велосипеде, на автобусе?

  • — Какие карты нравятся Марку: юмористические, сентиментальные, рискованные?

Такого рода детали рассматриваются на следующем этапе нашего процесса.

Шаг 4: Уточните алгоритм, добавив больше деталей.

Высокоуровневый алгоритм показывает основные шаги, которые необходимо выполнить для решения проблемы. Теперь нам нужно добавить детали к этим шагам, но сколько деталей мы должны добавить? К сожалению, ответ на этот вопрос зависит от ситуации. Мы должны рассмотреть, кто (или что) собирается реализовать алгоритм и сколько этот человек (или вещь) уже знает. Как это сделать. Если кто-то собирается купить поздравительную открытку Марка от моего имени, мои инструкции должны быть адаптированы к тому. Знаком ли этот человек с магазинами в городе. и насколько хорошо покупатель знал вкус моего брата в поздравительных открытках.

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

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

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

Шаг 5: Просмотрите алгоритм.

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

  • Решает ли этот алгоритм очень конкретную задачу или решает более общую? Если она решает очень конкретную проблему, следует ли ее обобщать?

    Например, алгоритм. Вычисляющий площадь окружности радиусом 5,2 метра (формула π*5,22), решает очень специфическую задачу, но алгоритм. Вычисляющий площадь любой окружности (формула π*R2), решает более общую задачу.

  • Можно ли упростить этот алгоритм?

    Одна формула для вычисления периметра прямоугольника:

    длина + ширина + длина + ширина

    Более простая формула была бы:

    2.0 * (длина + ширина)

  • Похоже ли это решение на решение другой проблемы? Как они похожи? Чем они отличаются?

    Например, рассмотрим следующие две формулы:

    Площадь прямоугольника = длина * ширина
    Площадь треугольника = 0,5 * основание * высота

    Сходства: Каждый вычисляет область. Каждый из них умножает два измерения.

    Различия: Используются различные измерения. Формула треугольника содержит 0,5.

    Гипотеза: Возможно, каждая формула области включает в себя умножение двух измерений.

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

Постановка задачи (Шаг 1)

Джеру начинается в точке (0, 0) лицом на Восток, и в его мешочке нет цветов. В локации (3, 0) есть цветок. Напишите программу, которая велит Джеру сорвать цветок и посадить его на месте (3, 2). Посадив цветок, Джеру должен подпрыгнуть на расстояние к востоку и остановиться. На острове нет ни сетей, ни цветов, ни Джеру.

Начать Заканчивать
Исходная ситуация например 4.1 Финишная ситуация например 4.1

Анализ проблемы (Шаг 2)

  1. Цветок находится ровно на три места впереди джеру.

  2. Цветок должен быть посажен ровно в двух местах к югу от его нынешнего местоположения.

  3. Джеру должен закончить работу лицом к Востоку на одно пространство к востоку от посаженного цветка.

  4. Здесь нет сетей, о которых нужно беспокоиться.

Высокоуровневый алгоритм (Шаг 3)

Давайте назовем Джеру Бобби. Бобби должен сделать следующее:

Возьми цветок
Положи цветок
Прыгай на восток

Детальный алгоритм (Шаг 4)

Давайте назовем Джеру Бобби. Бобби должен сделать следующее:

Возьми цветок

Прыгайте 3 раза
Срывайте цветок

Поставь цветок

Поверните направо Прыгайте 2 раза Посадите цветок

Прыгай на Восток

Поверни налево Прыгни один раз

Просмотрите алгоритм (Шаг 5)

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

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

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

Код Java для

Хороший программист не пишет программу сразу. Вместо этого программист будет писать и тестировать программу в серии сборок. Каждая сборка добавляет к предыдущей. Алгоритм высокого уровня будет направлять нас в этом процессе.

Хороший программист работает постепенно, добавляет маленькие кусочки по одному и постоянно перепроверяет работу до сих пор.

ПЕРВАЯ СБОРКА

Чтобы увидеть это решение в действии. Создайте новый сценарий Greenfoot4Sofia и используйте команду меню Edit Palettes Jeroo, чтобы сделать классы Jeroo видимыми. Щелкните правой кнопкой мыши на Islandклассе и создайте новый подкласс с выбранным вами именем. Этот подкласс будет содержать ваш новый код.

Рекомендуемая первая сборка содержит три вещи:

  1. Основной метод (здесь myProgram()в вашем островном подклассе).

  2. Объявление и создание экземпляра каждого Jeroo, который будет использоваться.

  3. Алгоритм высокого уровня в виде комментариев.

Экземпляр в начале myProgram()помещается bobbyв точке (0, 0), обращенной на восток, без цветов.

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

ВТОРАЯ СБОРКА

Эта сборка добавляет логику Новый код обозначен комментариями. Которые не появились бы в оригинале (они просто здесь. Чтобы привлечь внимание к дополнениям). Пустые строки помогают показать организацию логики.

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

ТРЕТЬЯ СБОРКА

Эта сборка добавляет логику Новый код обозначается комментариями. Которые приводятся здесь. Чтобы отметить дополнения.

ЧЕТВЕРТАЯ СБОРКА (финал)

Эта сборка добавляет логику к

Этот раздел содержит второй пример, демонстрирующий процесс разработки алгоритма.

Постановка задачи (Шаг 1)

Есть два Джеру. Один Джеру начинается в точке (0, 0) лицом к Северу с одним цветком в мешочке. Вторая начинается в точке (0, 2) лицом на Восток с одним цветком в мешочке. В локации (3, 2) есть сеть. Напишите программу, которая велит первому Джеру отдать свой цветок второму. Получив цветок, второй Джеру должен отключить сеть и посадить цветок на его место. Посадив цветок, Джеру должен повернуться лицом на юг. На острове нет ни сетей, ни цветов, ни Джеру.

Начать Заканчивать
Исходная ситуация например 4.2 Финишная ситуация например 4.2

Анализ проблемы (Шаг 2)

  1. Jeroo_2 находится ровно на два пробела позади Jeroo_1.

  2. Единственная сеть находится ровно на три пробела впереди Jeroo_2.

  3. Каждый Джеру имеет ровно один цветок.

  4. У Jeroo_2 будет два цветка после получения одного из них от Jeroo_1.
    Один цветок должен быть использован, чтобы отключить сеть.
    Другой цветок должен быть посажен в месте расположения сетки, то есть (3, 2).

  5. Jeroo_1 финиширует в точке (0, 1) лицом к югу.

  6. Jeroo_2 должен финишировать в точке (3, 2) лицом к югу.

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

Высокоуровневый алгоритм (Шаг 3)

Назовем первого Джеру Энн, а второго Энди.

Энн должна сделать следующее:

Найдите Энди (но не столкнитесь с ним)
Дайте цветок Энди (он будет прямо впереди)

Получив цветок, Энди должен сделать следующее:

Найдите сеть (но не прыгайте на нее)
Отключите сеть
Посадите цветок в месте расположения сети
Лицом к югу

Детальный алгоритм (Шаг 4)

Назовем первого Джеру Энн, а второго Энди.

Энн должна сделать следующее:

Найти Энди

Повернитесь (либо влево, либо вправо дважды)
Хоп (к местоположению (0, 1))

Подари цветок Энди

Дайте вперед

Теперь Энди должен сделать следующее:

Найти сеть

Прыгайте дважды (в локацию (2, 2))

Отключить сеть

Бросать жребий

Посадите цветок в месте расположения сетки

Хоп (к месту (3, 2))
Посадите цветок

Лицо на Юг

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

Просмотрите алгоритм (Шаг 5)

  1. Высокоуровневый алгоритм помогает управлять деталями.

  2. Этот алгоритм решает очень специфическую задачу, но конкретные места не важны. Единственное. Что важно. — это начальное расположение Джеру относительно друг друга и расположение сети относительно местоположения и направления второго Джеру.

Java — код для

Как и прежде, код должен быть написан постепенно в виде серии сборок. Для этой задачи подойдут четыре сборки. Как обычно, первая сборка будет содержать основной метод, объявление и создание экземпляров объектов Jeroo. А также высокоуровневый алгоритм в виде комментариев. Во втором билде Энн отдаст свой цветок Энди. В третьей сборке Энди должен будет найти и отключить сеть. В последней постройке Энди поставит цветок и повернет на восток.

ПЕРВАЯ СБОРКА

Эта сборка создает основной метод, создает экземпляр Jeroo и описывает высокоуровневый алгоритм. В этом примере основной метод будет myProgram()содержаться в подклассе Island.

ВТОРАЯ СБОРКА

Эта сборка добавляет Энн логику, чтобы найти Энди и подарить ему цветок.

ТРЕТЬЯ СБОРКА

Эта сборка добавляет логику для Энди, чтобы найти и отключить сеть.

ЧЕТВЕРТАЯ СБОРКА (окончательная)

Эта сборка добавляет логику для Энди, чтобы поместить цветок в точку (3, 2) и повернуть на юг.


© 2012 Стивен Эдвардс, Брайан Дорн и Дин Сандерс