Incubus 274 Опубликовано 23 апреля, 2018 В общем, имеется задача, решаю уже 2-ой день, проснулся даже в 6 утра сегодня с решением, но оно не прошло Может кому самому будет интересно, может кто поможет. Решение прошу не писать, только объяснить как это лучше реализовать, как найти связь между цветами. Была мысль связать их через остаток от деления, но он жутко динамический и поэтому я так и не смог. Задача: Цитата Работа светофора для пешеходов запрограммирована следующим образом:в начале каждого часа в течение трех минут горит зелёный сигнал,затем в течение одной минуты - жёлтый,а потом в течение одной минуты - красный,затем опять зелёный горит три минуты и т. д.Ввести с клавиатуры вещественное число t, означающее время в минутах, прошедшее с начала очередного часа.Определить, сигнал какого цвета горит для пешеходов в этот момент.Результат вывести на экран в следующем виде: "зелёный" - если горит зелёный цвет, "жёлтый" - если горит жёлтый цвет, "красный" - если горит красный цвет. Пример для числа 2.5:зелёный Пример для числа 3:жёлтый Пример для числа 4:красный Пример для числа 5:зелёный Требования:1. Программа должна считывать вещественное число c клавиатуры.2. Программа должна выводить текст на экран.3. Если горит зелёный цвет, необходимо вывести текст: "зелёный"4. Если горит жёлтый цвет, необходимо вывести текст: "жёлтый"5. Если горит красный цвет, необходимо вывести текст: "красный" Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 23 апреля, 2018 (изменено) <? $x = 2.5; $x = $x % 5; if ($x >= 0 && $x <= 2) echo "Green\n"; else if ($x == 3) echo "Yellow\n"; else echo "Red\n"; ?> набросаный за минуту простейший код на похапе на нужный язык уж сам переведешь, добавив ввод данных и т.д. Изменено 23 апреля, 2018 пользователем Gaikotsu 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Incubus 274 Опубликовано 23 апреля, 2018 22 минуты назад, Gaikotsu сказал: <? $x = 2.5; $x = $x % 5; if ($x >= 0 && $x <= 2) echo "Green\n"; else if ($x == 3) echo "Yellow\n"; else echo "Red\n"; ?> набросаный за минуту простейший код на похапе на нужный язык уж сам переведешь, добавив ввод данных и т.д. Что-то тут не так Должно выдать зеленый было. Да и я не особо догоняю, зачем нам остаток от деления на 5? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 23 апреля, 2018 (изменено) вобще результат расчетов в моем коде - это целое число от 0 до 4, т.к. в пхп тут производится неявное приведение типов к целому типу Изменено 23 апреля, 2018 пользователем Gaikotsu 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Demoncool 1110 Опубликовано 23 апреля, 2018 public class Main { public static void main(String[] args) { System.out.println("Hello World!"); float numb = 14.01f; System.out.println(Math.floor(numb / 5)); System.out.println(5*Math.floor(numb / 5)); numb=(float) (numb-(5*Math.floor(numb / 5))); System.out.println(numb); if(numb >=0 && numb < 3){ System.out.println("green"); } else if(numb >= 3 && numb < 4) System.out.println("yellow"); else System.out.println("red"); } } 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Incubus 274 Опубликовано 23 апреля, 2018 1 час назад, Gaikotsu сказал: вобще результат расчетов в моем коде - это целое число от 0 до 4, т.к. в пхп тут производится неявное приведение типов к целому типу Ладно, спасибо в любом случае, буду искать, читать Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Incubus 274 Опубликовано 23 апреля, 2018 8 минут назад, Demoncool сказал: public class Main { public static void main(String[] args) { System.out.println("Hello World!"); float numb = 14.01f; System.out.println(Math.floor(numb / 5)); System.out.println(5*Math.floor(numb / 5)); numb=(float) (numb-(5*Math.floor(numb / 5))); System.out.println(numb); if(numb >=0 && numb < 3){ System.out.println("green"); } else if(numb >= 3 && numb < 4) System.out.println("yellow"); else System.out.println("red"); } } Если можно, немного попроще, потому что эта часть кода мне вообще не понятна, где-то должен быть метод Math? . Я знаю, что эту задачу можно решить используя обычные условные операторы. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Edgar 356 Опубликовано 23 апреля, 2018 BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); double t = Double.parseDouble(read.readLine()); if (t % 5 >= 4 & t % 5 < 5) {System.out.println("красный");} else if (t % 5 >= 3 & t % 5 < 4) {System.out.println("жёлтый");} else if (t % 5 >= 0 & t % 5 < 3) {System.out.println("зелёный");} 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Demoncool 1110 Опубликовано 23 апреля, 2018 2 часа назад, Incubus сказал: Если число больше 5, то мы отнимаем количество 5-ок. То есть если у тебя 4, оно остаётся, если у тебя 7, то мы отнимаем 5 (в числе 7,есть одна целая 5ка), если число 12 - отнимаем 10 (в числе 12, две целых 5ки). Numb=numb +заданное число Math.floor - наибольшее целое число кратно 5 (то что ты задаешь) (в числе 12 - 2 штуки 5ок) 5 умножаем на матх флур 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Incubus 274 Опубликовано 23 апреля, 2018 6 минут назад, Solution сказал: BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); double t = Double.parseDouble(read.readLine()); if (t % 5 >= 4 & t % 5 < 5) {System.out.println("красный");} else if (t % 5 >= 3 & t % 5 < 4) {System.out.println("жёлтый");} else if (t % 5 >= 0 & t % 5 < 3) {System.out.println("зелёный");} Вот такой вариант мне больше понятен, всем спасибо, буду разбираться Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты