Как сделать программу-секундомер на Паскале?

3 ноября 2014 г. Просмотров: 1165

Вам понадобится

  • Среда программирования PascalABC.NET или PascalTurbo.

Инструкция

  • Итак, для начала откроем программу. Создадим новый файл и укажем подключаемые модули. В данном случае нам нужен модуль для работы с консолью - CRT.для этого напишем:uses CRT;
  • Укажем переменные i, s, m - переменные вещественного типа.var i, s, m: Real;
  • Для начала программы напишем:beginИ укажем заголовок консольного окна: SetWindowTitle('Секундомер');
  • Процедура TextColor назначает цвет текста, а оператор Write выводит текст на экран:TextColor(LightGreen); WriteLn('Нажмите Enter чтобы запустить секундомер'); WriteLn('Нажмите повторно, чтобы остановить'); Write('Нажмите ещё раз, чтобы запустить заново');Окончание Ln осуществляет переход на следующую строку.
  • Оператор ReadLn вводит значения с клавиатуры, но в даном случае он просто ждёт, когда пользователь нажмёт Enter:ReadLn ;
  • Делаем бесконечный цикл:while (true) do begin Конструкция while (true) do begin переводится как: Пока (условие) делай(). Спрашивается зачем здесь begin?В данном случае нам нужен составной оператор, а это значит что пока условие истинно выполняется несколько операторов. Если бы здесь не стоял begin то после While выполнялся только один оператор, что привело бы неправильной работе программы. Чтобы закончить оператор While в конце мы напишем end.
  • Теперь обнулим счётчик: i := 0;
  • Следующий оператор переводится как: пока не нажата клавиша делай(). while not keypressed do beginОператор ClrScr очищает экран: ClrScr;
  • Ставим условим: если секунд больше 60 и меньше 3600(это нужно для того, чтобы когда времени было больше часа, программа печатала только то что находится после третьего if) то: if (i > 60) and (i Переменная m(минуты) равна: секунды поделённые на 60 и округлённые до челой части. m := Int(i / 60); А переменная s(секунды без минут) равна: все секунды минус минуты умноженные на 60. s := i - m * 60;
  • Оператор Write пишет сколько прошло минут и секунд, а оператор end заканчивает работу begin стоящего после условия if: Write(m, 'минут(а/ов) и ', s:1:2, 'секунд(а/ы)') end;Функция :1:2 означает что секунды нужно писать с двумя знаками после знаками после запятой.
  • Если секунд меньше 60 то просто пиши сколько секунд прошло с двумя знаками после запятой:if i < 60 then Write(' ', i:1:2, ' секунд(а/ы)');
  • Если секунд больше 3600(то есть больше часа) то:if i > 3600 then begin m := Int(i / 60); s := i - m * 60; ch := Int(m / 60); m := m - ch * 60; Write(ch, ' час(а/ов) ', m, ' минут(а/ы) и ', s:1:2, ' секунд(а/ы)');end;
  • Итак, программа написала что прошло 0 секунд, теперь увеличивает счётчик i на 10 миллисекунд и так как программа выполняет всё мгновенно делаем задержку на это же время: i := i + 0.01; Delay(10); Далее делаем конец для оператора While (not keypressed): end;Если пользователь нажал клавишу Enter, то программа ждёт когда когда он опять её нажмёт, чтобы запустить секундомер заново: Readln ; Readln ;Неслучайно мы поставили обнуление счётчика после оператора While (true), потому что когда пользователь второй раз нажмёт Enter, программа пойдёт как раз с него, обнулит счётчик и начнёт отсчет заново.Далее делаем конец для While и для всей программы: end;

  • Вот вся программа полностью:uses CRT;var i: Real; s: Real; m: Real; ch: Real;begin SetWindowTitle('Секундомер'); TextColor(LightGreen); WriteLn('Нажмите Enter чтобы запустить секундомер'); WriteLn('Нажмите повторно, чтобы остановить'); Write('Нажмите ещё раз, чтобы запустить заново'); ReadLn; while (true) do begin i := 0; while not keypressed do begin ClrScr; if (i > 60) and (i m := Int(i / 60); s := i - m * 60; Write(m, 'минут(а/ов) и ', s:1:2, 'секунд(а/ы)') end; if i < 60 then Write(' ', i:1:2, ' секунд(а/ы)'); if i > 3600 then begin m := Int(i / 60); s := i - m * 60; ch := Int(m / 60); m := m - ch * 60; Write(ch, ' час(а/ов) ', m, ' минут(а/ы) и ', s:1:2, ' секунд(а/ы)'); end; i := i + 0.01; Delay(10); end; Readln; Readln; end;end.

  • Получилось не очень красиво, но программа работает правильно!
  • Оцените статью!