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

Урок 15 Задача 23:

Задача про Бинарные часы

var
  chas, min: integer;

{процедура принимает значение часов либо минут, а также позиции начала и конца обхода массива,
раскладывает значение часов либо минут на заданные слагаемые (элементы массива),
выводит соответствующий символ}
procedure chasmin(a, n, k: integer);
var
  m: array[1..10] of integer; // массив для значений часов и минут
  i: integer;                 // счетчик цикла
  q: boolean;
begin
  m[1]:=8;
  m[2]:=4;
  m[3]:=2;
  m[4]:=1;
  m[5]:=32;
  m[6]:=16;
  m[7]:=8;
  m[8]:=4;
  m[9]:=2;
  m[10]:=1;
  q:=true;
  for i:= n to k do
    if (a=m[i]) or (a>m[i]) and (q=true) then
    begin
      write (' + ');
      if a=m[i] then
        q:=false
      else
        a:= a-m[i]
    end else
      write (' - ');
end;

begin                     // начало тела основной программы
  write ('Часы: ');
  readln(chas);           // считываем часы
  write ('Минуты: ');
  readln(min);            // считываем минуты
  if (0<=chas) and (chas<=12) and (0<=min) and (min<=59) then // провка корректности введенных значений
  begin
    if chas = 12 then
      chas:= 0;
    chasmin (chas, 1, 4); // передаем в процедуру часы, начальную и конечную позицию для обхода массива
    writeln;
    chasmin (min, 5, 10); // передаем в процедуру минуты, начальную и конечную позицию для обхода массива
  end;
  readln();
end.

Вывод в консоли:

Часы: 11
Минуты: 35
 +  -  +  + 
 +  -  -  -  +  + 
Часы: 12
Минуты: 57
 -  -  -  - 
 +  +  +  -  -  + 
Часы: 9
Минуты: 21
 +  -  -  + 
 -  +  -  +  -  + 
vedro-compota's picture

засчитано

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