z_hoursold.PAS

{* Число ударов часов за данный промежуток времени *}

Unit Z_HOURSOLD;
Interface
Implementation
Begin
 writeln('Старинные часы бьют каждые полчаса. Причем в начале каждого часа они бьют столько раз, сколько сейчас часов. И еще 1 раз они бьют в середине каждого часа. Дан промежуток времени. Известно, что прошло строго меньше 24 часов (но при этом могли начаться новые сутки). Определить сколько ударов сделали часы за данный промежуток времени');
End.

Program z_hours;

Uses z_hoursold.pas; {* Эту строку можно удалить *}
Uses crt; {* Подключение модулей *}
Var {* Необходимые переменные *}
  Time0    : byte;
  Time1    : byte;
  Time00   : byte;
  Time01   : byte;
  CounterI : byte;
  Number   : byte;
  CounterC : byte;
Begin
  clrscr; {* Очистка экрана *}
  writeln('Введите начальное время');
  Repeat   writeln('Введите количество часов от 0 до 24');
    writeln('Введите количество минут от 1 до 59 и не равно 30');
  readln(Time0, Time00);
  If (Time0 > 24) Then
    writeln('Не верно введено количество часов');
  If (Time00 > 59) Or (Time00 < 1) Or (Time = 30) Then
    writeln('Не верно введено количество минут');
  Until (Time0 = 1) And (Time00  24) Then
  writeln('Не верно введено количество часов');
  If (Time01 > 59) Or (Time01 < 1) Or (Time = 30) Then
    writeln('Не верно введено количество минут');
  Until (Time1 = 1) And (Time01  Time1) Then
  CounterC := 24 - Time0 + Time1
  Else CounterC := Time1 - Time0;
    Number := CounterC;
  For CounterI := Time0 + 1 To Time0 + CounterC Do
  Begin
    Number := Number + (CounterI Mod 12);
    If ((CounterI Div 12 = 1) Or (CounterI Div 12 = 2)) And (CounterI Mod 12 = 0) Then
      Number := Number + 12;
  End;
  If Time00 > 30 Then
    Number := Number - 1;
  If Time01 > 30 Then
    Number := Number + 1;
  writeln('Количество ударов часов за указанный период времени');
  writeln(Number);
  readln; {* Приостановка программы. Ожидание Enter *}
End.