задача 19 урок 15

задача 19 урок 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 г. (см. исходный текст)

РЕШЕНИЕ

program binar;
type hour = array[1..4] of integer;
     minut = array[1..6] of integer;
procedure hours(h: integer; a: hour);
var
    i: integer;
begin
  if (h = 12) then
  begin
    write(' - - - - ');
    exit;
  end;
  for i := 1 to 4 do
  if (h - a[i]) >= 0 then
    begin
      h := h - a[i];
      write(' + ');
    end
  else
    write(' - ');
end;

procedure minuts(m: integer; b: minut);
var
    i: integer;
begin
  for i := 1 to 6 do
  begin
    if (m - b[i]) >= 0 then
    begin
      write(' + ');
      m := m - b[i];
    end
    else
      write(' - ');
  end;
end;

var a: hour;
    b: minut;
    k, i, h, m: integer;
begin
  k := 8;
  for i := 1 to 4 do
    begin
      a[i] := k;
      k := k div 2;
    end;
  k := 32;
  for i := 1 to 6 do
    begin
      b[i] := k;
      k := k div 2;
    end;
  for i := low(a) to high(a) do
    write(a[i], '|');
  writeln();
  for i := low(b) to high(b) do
    write(b[i], '|');
  writeln();
  writeln('Enter hours and minuts 00:00 ');
  readln(h, m);
  write('  ');
  hours(h, a);
  writeln();
  minuts(m, b);
  readln
end.

КОНСОЛЬ

8|4|2|1|
32|16|8|4|2|1|
Enter hours and minuts 00:00
1
22
   -  -  -  +
 -  +  -  +  +  -
vedro-compota's picture

засчитано

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