урок 15 задание 23

Задание 23 урок 15

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

Для случая время 3:25 ASCII-вариант будет выглядеть как:

- - + +
- + + - - +

А, если бы время было 10:40, то :

+ - + -
+ - + - - -
program lessson_15;

var h, min: integer;

procedure how_much_hours(var h: integer);
var
   arr8: array [1..4] of char;
   i: integer;
begin
   for i := low(arr8) to high(arr8) do
       arr8[i] := '-';
   while (h >= 1) and (h <> 12) do
   begin
      if h >= 8 then
      begin
         h -= 8;
         arr8[1] := '+';
      end;
      if h >= 4 then
      begin
         h -= 4;
         arr8[2] := '+';
      end;
      if h >= 2 then
      begin
         h -= 2;
         arr8[3] := '+';
      end;
      if h >= 1 then
      begin
         h -= 1;
         arr8[4] := '+';
      end;
   end;
   for i:= low(arr8) to high (arr8) do
      write(arr8[i], ' ');
   writeln();
end;

procedure how_much_minutes(var min: integer);
var
   arr32: array [1..6] of char;
   i: integer;
begin
   for i := low(arr32) to high(arr32) do
       arr32[i] := '-';
   while (min >= 1) and (min <> 60) do
   begin
    if min >= 32 then
      begin
        min -= 32;
        arr32[1] := '+';
      end;
     if min >= 16 then
     begin
        min -= 16;
        arr32[2] := '+';
     end;
     if min >= 8 then
     begin
        min -= 8;
        arr32[3] := '+';
     end;
     if min >= 4 then
     begin
       min -= 4;
       arr32[4] := '+';
     end;
     if min >= 2 then
     begin
       min -= 2;
       arr32[5] := '+';
     end;
     if min >= 1 then
     begin
       min -= 1;
       arr32[6] := '+';
     end;
   end;
   for i:= low(arr32) to high (arr32) do
      write(arr32[i], ' ');
   writeln();
end;

begin
   writeln('Please, enter hours and minutes:');
   readln(h, min);
   if (h < 13) and (min < 61) then
     begin
     writeln('Time is ', h, ':', min);
     how_much_hours(h);
     how_much_minutes(min);
     end
   else
      writeln('Wrong time.');
end.