Задача 20 Урок 15

Урок 15

Задача про Бинарные часы:
бинарные часы задача программирование
Пояснение:
На картинке выше фото часов, которые показывают время следующим образом:

в верхнем ряду отображают текущий час 4мя лампочками (битами) если лампа горит,
складываем ее значение в основное т.е. 2 + 1 = 3 часа (в 12ти часовом формате)
В нижней линии 6 лампочек (бит) и они кодируют 16 + 8 + 1 = 25 минут.
Задача:
Напишите программу, которая принимает у пользователя два целых числа (часы и
минуты) и выводит в консоль полученное время в формате бинарных ASCII-часов
0-11 ч. и 0-59 мин.

Также отметим, что:

12 часов "не выводиться" а соответствует пустым значениям/нулям (- - - -)
аналогично в минутах "не выводиться" 60 минут (- - - - - -)
Для случая с фотографии выше (время 3:25) ASCII-вариант будет выглядеть как:
- - + +
- + + - - +
А, если бы время было 10:40, то :
+ - + -
+ - + - - -
Примечания:

Решение данной задачи не требует вычислений в двоичной системе
(достаточно знать как считают в обычной десятичной)
Историческая справка: задача была предложена к добавлению в курс по
Паскалю участником boris68 летом 2021 г. (см. исходный текст)

var h{часов}, m{минут}, kh{разряд часов}, km{разряд минут}, i: integer;

begin
  h := 0;
  m := 0;
  kh := 16;
  km := 64;
  writeln('Введите часы от 0 до 11');
  readln(h);
  writeln('Введите минуты от 0 до 59');
  readln(m);
  writeln();
  i := 0;
  while (i < 5) do
  begin
    kh := kh div 2;
    if (h >= kh) and (h > 0) then
    begin
      h := h mod kh;
       write(' + ', ' ');
     end
      else
        write(' - ');
    inc(i);
  end;
  writeln();
  i := 0;
  while (i < 6) do
  begin
    km := km div 2;
    if m >= km then
    begin
      m := m mod km;
       write(' + ', ' ');
    end
      else
        write(' - ');
    inc(i);
  end;
readln();
end.

КОНСОЛЬ

Введите часы от 0 до 11
5
Введите минуты от 0 до 59
32

 -  +   -  +   -
 +   -  -  -  -  -
vedro-compota's picture

засчитано

_____________
матфак вгу и остальная классика =)