Как сделать промежуток времени в паскале

Добавил пользователь Дмитрий К.
Обновлено: 04.10.2024

Помогите доработать часы в паскале. Нужно использовать в программе delay(задержка). У меня в программе при вставке этого оператора почему-то выдаёт ошибку, что delay-неизвестный идентификатор.

Естественно, выдает ошибку. Потому что Delay - это процедура модуля CRT, а у Вас этот модуль не присоединен.

Несколько замечаний:
1. Часы идут и даже показывают правильное время (если, конечно, на компьютере установлено таковое).
2. Выход из программы - нажатие любой клавиши. Правда, придется с минутку подождать, пока кончится время задержки. Установлена задержка в 1 минуту; в принципе, можно поставить и меньше.
3. Название Вашего графического модуля (поправите, если надо) и инициализация графического режима - самостоятельно (зависит от реализации Паскаля и свойств системы).

Спасибо большое. у меня кстати тоже кое-что получилось)
Проверьте пожалуйста правильно ли написана программа для этих часов.

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

Итак, для начала откроем программу. Создадим новый файл и укажем подключаемые модули. В данном случае нам нужен модуль для работы с консолью - CRT.
для этого напишем:

Укажем переменные i, s, m - переменные вещественного типа.

Для начала программы напишем:

И укажем заголовок консольного окна:

Процедура TextColor назначает цвет текста, а оператор Write выводит текст на экран:

TextColor(LightGreen);
WriteLn('Нажмите Enter чтобы запустить секундомер');
WriteLn('Нажмите повторно, чтобы остановить');
Write('Нажмите ещё раз, чтобы запустить заново');
Окончание Ln осуществляет переход на следующую строку.

Оператор ReadLn вводит значения с клавиатуры, но в даном случае он просто ждёт, когда пользователь нажмёт Enter:

Делаем бесконечный цикл:

while (true) do
begin

Конструкция while (true) do begin переводится как: Пока (условие) делай(). Спрашивается зачем здесь begin?
В данном случае нам нужен составной оператор, а это значит что пока условие истинно выполняется несколько операторов. Если бы здесь не стоял begin то после While выполнялся только один оператор, что привело бы неправильной работе программы. Чтобы закончить оператор While в конце мы напишем end.

Теперь обнулим счётчик:

Следующий оператор переводится как: пока не нажата клавиша делай().

while not keypressed do
begin
Оператор ClrScr очищает экран:

Ставим условим: если секунд больше 60 и меньше 3600(это нужно для того, чтобы когда времени было больше часа, программа печатала только то что находится после третьего if) то:

if (i > 60) and (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, то программа ждёт когда когда он опять её нажмёт, чтобы запустить секундомер заново:

Неслучайно мы поставили обнуление счётчика после оператора While (true), потому что когда пользователь второй раз нажмёт Enter, программа пойдёт как раз с него, обнулит счётчик и начнёт отсчет заново.

Далее делаем конец для While и для всей программы:

Вот вся программа полностью:

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 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.

Цикл со счетчиком или, как он еще называется — цикл с параметром в Паскале служит для организации повторений (итераций) с заранее известным их количеством, т.е. когда точно известно, сколько раз должны выполниться операторы тела цикла.

паскаль цикл for блок-схема

Блок-схема, соответствующая циклу For:

Ну или если на простом примере:

цикл for

Паскаль цикл For: синтаксис:

Прямое направление цикла (от меньшего значения к большему):

Обратное направление (от большего к меньшему):

цикл for Паскаль

Решение на Паскале:

Оператор в теле конструкции может быть одиночным или составным оператором.

составной оператор в цикле for

Счетчик цикла или параметр цикла — это обычная переменная, которая может быть только порядкового (целочисленного, символьного, логического) или перечислимого типа.

При прямом направлении цикла счетчик в каждой итерации увеличивается на единицу, при обратном направлении — уменьшается на единицу.

Важно знать: счетчик (параметр цикла) нельзя изменять внутри тела цикла! Кроме того, нельзя менять его начальное и конечное значения.

Рассмотрим на решенном примере, как используется в Паскаль цикл for:

var i,n:integer; begin write ('количество раз'); readln(n); for i:=1 to n do write(0); end.

begin var n:=readInteger('количество раз'); for var i:=1 to n do write(0); end.

Более детально цикл со счетчиком в Паскале рассмотрен в видеоуроке:

Пример: Вывести на экран квадраты и кубы целых чисел от 1 до 8 (от a до b). Реализовать двумя способами: 1. переменная цикла должна увеличиваться и 2. переменная цикла должна уменьшаться.

цикл с счетчиком

Решение в виде блок-схемы:

Решение на Паскале:

Вариант 1 Вариант 2
3
4

Задача 8. Найти среднее арифметическое чисел в Паскале, числа вводятся с клавиатуры, их количество произвольно. Использовать цикл for

[Название файла: L3task8.pas ]

Задача 9. Составить блок-схему по программе нахождения среднего арифметического в pascal.

[Название файла: L3task9.pas ]

Решение:

Pascal: выход из цикла

Break и Continue

Для выхода из цикла предусмотрена процедура break в Паскале. Break досрочно прекращает выполнение циклов while , repeat и for .

Процедура Continue досрочно выходит из текущей итерации цикла, но, не завершая его, а переходя к следующей итерации.

Рассмотрим использование процедур выхода из цикла Continue и Break в Паскале (будем использовать цикл while ):

var a:integer; begin a:=1; while a a=64 происходит выход из текущей итерации ( continue ) и число не выводится на экран, а при a=256 выполнение цикла прерывается окончательно ( break ), так и не распечатав число 256.

Задача 10. Решить рассмотренную задачу с процедурами break и continue для циклов repeat и for

[Название файла: L3task10.pas ]

Табулирование функции на отрезке с заданным шагом

* Следует учесть, что эта тема не обязательна для школьного курса информатики, в основном предполагается ознакомление студентами.

Пример: На отрезке [a,b] с шагом h протабулировать функцию f(x)=x 2 +Ln|x| и вывести на печать значения этой функции.

Алгоритм:
Для решения задачи в области определения функции вводится сетка – совокупность точек:

Тогда задача сводится к вычислению функции f в точках xi, то есть нужно вычислить:

var x, a, b, f, h: real; begin writeln('отрезок от . и до . '); readln(a, b); writeln('шаг'); readln(h); x := a; while x

var x, a, y, h: real; i:integer; begin writeln('ведите x'); readln(x); h:=0.22; a := 0.14*x; for i:=1 to 7 do begin y := (0.15*x + a)/(sqr(a)+sqr(x)); writeln('a =', a, ' y = ', y); a := a + h; end end.

Пример: На интервале xn≤x≤xk с шагом Δх, для каждого у из интервала уn≤y≤yk с шагом Δу вычислить значение функции f=x 2 +ln|y| .
Например:

var xn, xk, yn, yk, f, hx, hy,x,y: real; begin writeln('отрезок для x от . и до . '); readln(xn, xk); writeln('отрезок для y от . и до . '); readln(yn, yk); writeln('шаг для x'); readln(hx); writeln('шаг для y'); readln(hy); x := xn; y := yn; while x [Название файла: L3task11.pas ]

Exit и Halt

Процедура Pascal Exit служит для завершения работы того программного блока, в котором она используется (условный оператор, цикл, процедура…). Если Exit вызывается внутри процедуры или функции, то завершается работа данной процедуры/функции. Если процедура Exit находится в основном блоке программы, то это приводит к ее завершению.

Процедура halt в pascal завершает работу программы.

Потренируйтесь в решении задач по теме, щелкнув по пиктограмме:

Задача: вычислисть количество дней от определенной даты до сегодняшней. Используем механизм вычисления разницы дат. Затем, чтобы отделить количество дней из полученной строки проделаываем преобразование в строку, из строки копируем нужные нам символы-цифры, преобразуеум символы-цифры в число. С этим числом можно производить математические операции.

Задача: вычислисть количество дней от определенной даты до сегодняшней. Используем механизм вычисления разницы дат, для которого используется тип TimeSpan. Затем используем встроенную функцию, которая нам выдает количество дней. С этим числом можно производить математические операции.

Процедуры, необходимые для работы с датой и временем включены в модуль DOS. Подключение модуля осуществляют командой Uses DOS. Модуль обеспечивает связь программы с MS DOS и содержит более 20 процедур и функций. Наиболее часто используются следующие из них:

1) GetTime(H,M,S,S100); – процедура; возвращает установленное в операционной системе текущее время в виде: H – часы (0..23), M – минуты (0..59), S – секунды (0..59), S100 – сотые доли секунды (0..99). Все переменные процедуры имеют тип Word.

2) GetDate (Y,M,D,DW); – процедура; возвращает установленную в операционной системе текущую дату в виде: Y – год (1980..2099), M – месяц (1..12), D – день (1..31), DW - день недели (0..6, где значению "0" соответствует воскресенье). Все данные выходные и имеют тип Word.

Пример. Модуль DOS позволяет запустить из Паскаль-программы другую программу по командной строке DOS, посмотреть атрибуты файла (время создания, имя, тип и т.д.), объем дисковой памяти (общей и свободной) и выполнять другие команды MS DOS.

Читайте также: