Основы программирования с Java - Тимур Машнин 4 стр.




Если червь опять должен начать с середины, следуя тем же правилам, это та же задача, как и раньше, независимо от цвета яблок, и у нас есть те же 8 решений, как и в предыдущем случае 2D.

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

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

Давайте теперь вернемся к задаче квадратных яблок 3D и будем чередовать цвета яблок, как мы сделали это в 2D случае.



Как и в предыдущем 3D случае червь прячется в середине.

Так что это все та же 3D задача, как и раньше, хотя цвета некоторых из яблок были изменены.

Теперь используйте то, что вы наблюдали в случае 2D, и попытайтесь придумать быстрое решение этой задачи.

Вопросы

Задача

Может ли червь съесть все 27 яблок, если он начинает от центра куба?

1.      Да

2.      Нет

Ответ: 2.


Задача

Может ли червь съесть все 27 яблок, если он начинается с одного из углов куба?

1.      Да

2.      Нет

Ответ: 1.

Из задачи 2D квадратных яблок, мы можем наблюдать, что червь сможет съесть все яблоки, если он начинает с ячейки с красным яблоком. Применяя то же правило в задаче квадратных яблок 3D, мы можем быстро сказать, что червь не сможет съесть все яблоки, если он начинает из центра куба, в котором содержится зеленое яблоко. Аналогичным образом можно быстро сказать, что червь может съесть все яблоки, если он начинает с угла куба, который содержит красное яблоко.

Важность представления задачи

В задаче 2D квадратных яблок, используя красное и зеленое представления яблок, вы увидите, что есть 5 красных яблок и 4 зеленых яблока.

Каждое движение будет чередовать яблоки разных цветов.

Если начинать с зеленого яблока, тогда не будет больше зеленого яблока после употребления четвертого красного яблока.

В 3D случае, существует 14 красных яблок и 13 зеленых яблок.

Используя те же рассуждения, что и в случае 2D, если начинать с зеленого яблока, тогда не будет больше зеленого яблока после окончания 13-го красного яблока.

Так что решения этой задачи не будет, если червь начинает со средней ячейки, которая содержит зеленое яблоко.

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

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

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

Первая Java программа

Теперь мы можем начать писать нашу первую Java программу.

По традиции изучения нового языка программирования, ваша первая программа на Java будет печатать приветствие "Hello, World!".



Первая строка здесь содержит комментарии о том, что, как предполагается, программа должна делать.

И мы обсудим документирование программы позже.

Классы являются основными единицами в программах Java. Все программы Java это классы.

Здесь первая строка кода объявляет имя этой программы, как HelloWorld.

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

Вы можете смотреть на это как на какой-то формат или шаблон, которому вы должны следовать.

Аналогия, когда вы пишете письмо, у вас есть определенный формат, которому вы должны следовать, такой как адреса отправителя и получателя, а также письмо, как правило, начинается со слова "Уважаемый", а затем следует имя из адреса.

Вы просто должны обратить внимание на слово " main ", которое указывает на главную точку входа в программу.

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

Перейдем теперь к среде разработке, чтобы посмотреть на программу более детально.



Скачайте и установите среду разработки IntelliJ IDEA версии Community.

И скачайте проект приложения, который доступен в ресурсах к этой книги (https://github.com/novts/java-base).

Распакуйте этот проект и откройте его в среде разработки.



Вот этот файл, соответствующий классу приложения.

Вы можете дважды щелкните по нему, чтобы открыть программу.



И вы можете скомпилировать программу, нажав на кнопку "Build Project".

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

Теперь ваша программа готова к работе. Вы можете запустить программу, выбрав Run.



И в другом экране появится сообщение: «Привет, мир!".



Поздравляем! Вы успешно написали свою первую программу Java.

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

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

Последовательность символов, заключенная в двойные кавычки, называется строкой символов в Java.



Мы поговорим об этом позже. Теперь мы можем скомпилировать программу и запустить ее снова.

Основы программирования. Введение

Теперь давайте перейдем к рассмотрению собственно основ программирования.

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



Java программы, которые мы видели до сих пор, главным образом работали со строками символов, то есть, текстовыми символами, представленными в виде строк символов.

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

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

Однако компьютеры, созданные в самом начале, были предназначены для работы только с числами.

С древних времен, человек признал свою слабость в борьбе с числами и создавал устройства, чтобы помочь себе в выполнении вычислений, например, китайские счеты, которые часто называют первым вычислительным устройством, были изобретены более 4000 лет назад.

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

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

Рассмотрим простую задачу, которая может возникнуть в ходе изучения курса, такого как этот.

Ваше присутствие на курсе может оцениваться с помощью различных видов активности.

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

Как правило, экзамены будут иметь более значимый вес.

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

Первый шаг заключается в анализе, какая информация необходима для решения задачи.

Очевидно, что вам понадобятся оценки для экзаменов, лабораторных и домашних заданий.

Подумайте о том, что еще будет необходимо при расчете итоговой оценки?

Подумайте об этом, и я вернусь к этому позже.

Задача может быть сформулирована с помощью определения набора входных данных и набора выходных данных.

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

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

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

Какая необходима дополнительная информация?

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

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

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



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

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

Так что примем это в качестве первого шага.

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

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

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

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

После вычисления окончательной оценки, она выводится пользователю для проверки четвертый шаг.

Пример

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

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

Давайте посмотрим на начальный проект программы, которая уже была написана для вас (CourseGrade, https://github.com/novts/java-base).



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

В этом случае, название программы (в Java это называется класс) является CourseGrade.

Далее идет выражение, которое определяет главную точку входа для программы.

Это выражение точно такое же, как то, которое мы использовали для HelloWorld.

Это похоже на написание формального письма, которое начинается с фирменного бланка.

Первая часть программы здесь является определением или объявлением переменных.

И я вернусь к этой теме позже.

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

Порядок определения здесь не имеет значения.

Так как мы решили, что веса должны быть предопределены, мы также определяем эти имена в первую очередь.

Имена examScore, labScore и hwScore соответствуют входным данным, в то время как finalgrade представляет желаемый результат.

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

Я должен отметить, что существует также краткое описание цели программы в самом начале.

Это комментарии, которые следуют определенному формату.

Я вернусь к комментариям программ позже.

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

Вы должны также заметить, что различные участки кода идут с отступом. Это поможет улучшить читаемость программы.

И обратите внимание, что блок операторов в шаге «Ask student to input scores for exam, lab and homework» будет предлагать пользователю ввести оценки экзамена, лабораторной и домашних заданий с помощью объявления IO IO.output и IO.inputDouble.

И существует еще одно объявление IO.outputln на шаге «Output the final grade».

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

Следующим шагом после реализации решения, это придумать план тестирования для этой реализации.

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

Вопросы

Задача

Как уже говорилось, важно придумать план тестирования, чтобы проверить, работает ли программа как ожидалось. В примере CourseGrade, вы можете протестировать программу на разных входных значениях для examScore, labScore и hwScore.

Учитывая только examScore, попробуйте придумать план тестирования из 5 осмысленно различных тестов, при условии, что диапазон фактических баллов составляет от 0 до 100.

Ответ:

1. Минимальное значение диапазона 0.

2. Максимальное значение диапазона 100.

3. За минимальной границей -1.

4. За максимальной границей 100.

5. В диапазоне 50.

Такой метод тестирования называется тестированием границ.

Идентификаторы

Как вы видели в предыдущих примерах, такие имена, как HelloWorld и CourseGrade были использованы в качестве имен для классов (или программ), а имена examWeight, examScore, labScroe и т.д. были определены в программе CourseGrade.

Эти имена называются идентификаторами.

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

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

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

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

Именование идентификаторов должно следовать определенным правилам в Java.



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

Идентификаторы чувствительны к регистру. Например, «Привет» с заглавной буквы отличается от «привет» со всеми строчными буквами.

Давайте рассмотрим несколько примеров.



Раньше вы видели, что examWeight и examScore были использованы в предыдущей программе, и они являются допустимыми идентификаторами. Вы также видели слова int и double.

Это типы этого идентификатора.

Давайте проигнорируем их пока.

Вы также можете добавить подчеркивания между словами, например, exam_score и perfect_score_10, но пробел не может быть включен в качестве части идентификатора, так что " perfect score 10" с пространством между словами не является допустимым идентификатором.

Назад Дальше