Skip to content

Latest commit

 

History

History
172 lines (136 loc) · 15 KB

File metadata and controls

172 lines (136 loc) · 15 KB

Условные операторы и циклы

Памятка к домашнему заданию

Перед тем, как отправить своё решение на проверку преподавателю, сверьтесь с чеклистом

Что делать, если возникли сложности?

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

Что делать, если непонятна теория?

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

Что делать, если непонятно условие задания?

  1. Прежде чем задать вопрос по условию задачи, перечитайте его ещё раз и убедитесь, что в тексте условия нет прямого ответа на этот вопрос. Умение работать с текстом - важный навык работы с информацией.
  2. Если ответа на свой вопрос в тексте условия не увидели, задайте его в общем чате, мы раскроем детали условия подробнее. Не забудьте при этом скинуть и ссылку на условие задания, про которую у вас вопрос.

Что делать,если не получается задача?

Если ваша проблема это ошибка компиляции (подчёркивает красным, не даёт запустить программу), сборки проекта, CI и прочие подобные ошибки, то:

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

Если ваша проблема это ошибка исполнения (программа умирает уже после запуска) или она отрабатывает неправильно, то:

  1. Воспользуйтесь отладчиком для пошагового анализа работы вашей программы. Так вы либо убедитесь в неправильности придуманного вами алгоритма или найдёте конкретное место, где ожидаемое поведение программы разошлось с фактическим.
  2. Если проблему найти не получилось, напишите в общий чат, обязательно указав:
    1. Название задачи и ссылку на условие
    2. Ссылку на вашу работу
    3. Конкретное и подробное описание проблемы или затруднения при решении задачи ("Помогите что не так" - это не описание)
    4. Подробное описание вашего анализа программы с помощью отладчика вместе со скринами
    5. Ваши размышления и описание шагов, которые вы совершили для решения.

В решении выполнены все требования задания

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


Задание сдаём в реплите

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

Задача 1 (обязательная)

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

  • В високосном году 366 дней, в обычном 365.
  • Високосный год — это год, номер которого делится без остатка на 400 (например 2000 или 2400), либо делится на 4 но не делится на 100 (например 2008, 2096, но не 2100).

Схема работы программы

  1. Вывод сообщения в консоли Введите год в формате "yyyy".
  2. Ввод года в формате yyyy (например 2004).
  3. Чтение значения из консоли и расчет количества дней.
  4. Результат работы программы: напечатать в консоли количество дней в году Количество дней 365 или Количество дней 366.

Пример

Пример 1

Введите год в формате yyyy
2000 <нажмите enter>
Количество дней 366

Пример 2

Введите год в формате yyyy
2018 <нажмите enter>
Количество дней 365

Подсказки

Чтобы читать сообщения из консоли воспользуемся специальным объектом Scanner (на следующих лекциях мы подробнее познакомимся с термином объект), описание Scanner (как ниже) делается только один раз на всю программу.

Scanner scanner = new Scanner(System.in);

Для того чтобы была возможность в коде использовать класс Scanner, нужно обязательно добавить import этого класса в самое начало файла Main.java:

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        //Код сюда
    }
}

Чтобы прочитать введенное целое число из консоли, нужно использовать scanner.nextInt(). А чтобы прочитать и сохранить введенное значение в программе для дальнейшего использования, нужно написать:

int year = scanner.nextInt();

Как проверить, високосный ли год? Для этого сначала надо проверить делимость на 400, используя year % 400 == 0. Специальный оператор % - возвращает остаток от деления. Результат вычисления будет равен 0, только если число делится нацело, иначе вернется остаток от деления. Если год делится на 400 без остатка, значит в нем точно 366 дней. Если нет, то — аналогично проверить делимость на 100: если год делится на 100, то в нем точно 365 дней. И наконец, если год не делится ни на 400, ни на 100, то проверяем делимость на 4: если делится, — то — 366 дней, иначе — 365.

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

if (year % 400 == 0) {
    System.out.println("Результат вычисления ...");
} else if ( еще одна проверка year % ) {
    //Вывести результат в консоль с помощью System.out.println
} else {
    //Вывести результат в консоль System.out.println
}

Задача 2 (необязательная)

⚠️ ВНИМАНИЕ эта задача делается на основе предыдущей и в том же реплите, т.е. в итоге вы присылаете только одну ссылку на две задачи. Зачёт по этой будет означать автоматический зачёт по предыдущей.

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

Схема работы программы

  1. Вывод сообщения в консоли Введите год и количество дней в формате yyyy число.
  2. Ввод года в формате yyyy (например, 2004) и количества дней (например, 365).
  3. Проверка соответствия количества дней году
  4. Повтор до тех пор пока пользователь не ошибётся; если пользователь ошибся, надо вывести правильный ответ
  5. Вывод количества правильных вводов

Пример

Введите год:
2000
Введите количество дней:
366
Введите год:
2018
Введите количество дней:
365
Введите год:
2019
Введите количество дней:
300
Неправильно! В этом году 365 дней!
Набрано очков: 2

Реализация

  • Создадим цикл while (true) {}, итерацией которого будет один ход игры.

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

  • Считаем правильное количество дней для введённого года, использую логику из предыдущей задачи про високосный год. Будет здорово, если вы вынесете логику определения количества дней в году в отдельный метод, который по году считает количество в нём дней.

  • Условным оператором проверяем, совпадает ли введённое пользователем число дней в этом году с правильным числом дней в году. Если совпадает, увеличиваем счётчик успешных попыток и переходим к следующей итерации. Если не совпадает, то завершаем игру (break) и выводим количество правильных вводов (это хранится в счётчике).