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

Обновлено: 03.07.2024

писал недавно програмку с графическим модулем, которая по идеи должна выполняться через определенное время, но она работала на столько быстро на сколько ей позволяла ето делать мощность компьютера. поетому нуждаюсь в таймере

Если требуется только замедление, без привязки к точным промежуткам времени, напишите процедуру например с тремя вложенными циклами и параметром (число прокруток цикла), а потом в нужном месте обращайтесь к ней. И все - успех гарантирован.

Попробуй процедурку Delay(ms);
Эта процедура приостанавливает работу программы на ms единиц времени. Предполагалось, что ms – это будет время в миллисекундах, но на самом деле это не так. Эта процедура с одинаковыми параметрами работает разное время на разных компьютерах.

Насколько я знаю, сама концепция таймера в том, что он выполняеться в параллельном потоке, а паскаль не поддерживает многопоточное программирование.

program timeroK_OneMinute;


uses crt;
var usertime:longint;i:byte;
begin
clrscr;
writeln('ms=?');
readln(usertime);
writeln;
for i:=1 to 60 do
begin
delay(usertime);
write('*');
end;
write(' - one minute?!');
readln;
end.
я все понимаю.

Понимаю что немного опоздал) но все же, я попробовал написать таймер который должен одинаково работать на машинах с разной производительностью =) Время вводиться в сотых секунды. То есть 100 = 1 секунда.
program timer;
uses dos,crt;
var T:word;
Procedure Time (T:integer);
Var h,m,s,ss:word; all1,all2:longint;
Begin
GetTime(h,m,s,ss);
all2:=0;
all1:=ss+(100*s)+(6000*m)+(360000*h)+T;
while(all2 Begin
GetTime(h,m,s,ss);
all2:=ss+(100*s)+(6000*m)+(360000*h);
End;
End;
Begin
clrscr;
writeln('Enter T');
readln(T);
Time(T);
writeln('Thets all =)');
readkey;
End.
Насколько проще была бы жизнь если бы она была в исходниках

нужно определить перед началом программы реальную зедержку в реальных секундах. ну например засеч время по системным часам сделать 20 дилеев по 10мсек и опять засеч время, найти коефыцыэнт ну и тд. Правда чем больше дилеев тем лутше и точнее но и юзвер долго не может ждать, такшо сам решай)
Думаю, не ошибусь, если промолчу ;)

[quote=Archi]нужно определить перед началом программы реальную зедержку в реальных секундах[/quote]
Задержку чего? Времени? О_о
[quote=Archi]ну например засеч время по системным часам сделать 20 дилеев по 10мсек и опять засеч время найти коефыцыэнт ну и тд.[/quote]
Непонял смысла, и что за коэфициент? =\
Насколько проще была бы жизнь если бы она была в исходниках

delay(100) на разных кампах длиться по разному. нужно определить скольео будет длиться в секундах например delay(500) (тоесть от 5 секунд). поделим реальные 5 секунд на время delay(500). узнаем коефыцыэнт. и тогда если нам нужно будет сделать задерчку на 6 или Х секунд мы умножаем аргумент delay на этоткоефициэнт. узнаем на сколько нужно поставить delay чтобы прошло реальных 6 или Х секунд. помоему тут все понятно)) может я не прав?

[quote=Archi]delay(100) на разных кампах длиться по разному[/quote]
а при чём тут вообще delay? эта процедура не используется в данном примере. используется только системное время, которое переводится в сотые секунды. и получается, что программа(таймер) работает до тех пор пока системное время(all2) в данный момент меньше, чем ((системное время при старте)+(заданное пользователем время))(all1). всё время естественно берётся в сотых секунды. и очевидно что время T -- время выполнения цикла. вот и весь таймер. а процедера Delay тут никаким боком..

Streamer, cпасибо что описал работу программы за меня =)
Насколько проще была бы жизнь если бы она была в исходниках

я считаю что если необходимо например чтобы время от времени происходили какието действия (перерисовка например) лутше использовать delay() встроенную процедуру, которая по возможности оптимизирована разработчиками borland, а вашу процедура которая постоянно обращаеться к системному времени. вобщем хоть я изначально отвечал на вопрос Inteam и предложение админа использовать delay() и не коей мерой не коментировал ваш код, по мере дискусии а точнее полемики я решил что ваша процедурка не самый лутший выход)
Думаю, не ошибусь, если промолчу ;)

Чтение реального времени в Паскале осуществляется посредством встроенной функции gettime(h, m, s, ss), где параметры означают часы, минуты, секунды и миллисекунды соответственно.

Аналоговые часы в pascal

В среде Turbo Pascal часы со стрелками организуются по следующему алгоритму:

1. Инициализация графического режима с отрисовкой статичных линий (окружности, цифры, деления)

2. Чтение времени посредством функции gettime

3. Расчет координат концов стрелок, посредством перевода чисел в полярные координаты

procedure Dec2Polar(Ang, Len: Real; var P: TPoint);

P.x := Xc + Len * cos(Ang * Pi / 180);

P.y := Yc + Len * sin(Ang * Pi / 180);

4. Отрисовка линий (line(x,y,x2,y2)) и задержка delay(n), где n - точность позиционирования быстрой стрелки (n=1000 - секунда)

5. Заливка стелок цветом фона и возврат к позиции 2.

Электронные часы в pascal

В pascal электронные часы организуются по такому же принципу, что и аналоговые. Различным будет только код, ответственный за отрисовку графики. Графический режим можно заменить текстовым.

Песочные часы в pascal

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



Информатика в школе

Цикл со счетчиком в Паскале

28 мая, 2014 Andrey K

Цикл — это набор команд, которые многократно выполняются до тех пор, пока выполняется (или не выполняется) некоторое условие.

В паскале существуют 3 способа организации цикла (типа):

1) Цикл со счетчиком

2) Цикл с постусловием

3) Цикл с предусловием

Рассмотрим первый тип — цикл со счетчиком.

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

где i — переменная-счетчик; a — начальное значение переменной i; b — конечное значение переменной i.
Набор команд, которые выполняются в цикле называют телом цикла.

Переменная i изменяется от 1 до 4 (с шагом 1). Пока i будет изменятся — будет выполняться команда writeln(‘Привет’).

На экране мы увидим:

Привет
Привет
Привет
Привет

Количество повторений в цикле со счетчиком можно по формуле (b-a)+1 . (В нашем случае: (4-1)+1 = 4. Все верно!)

Если цикл будет выглядеть так:

Мы увидим тот же результат, что и в предыдущем примере. Убедимся, используя формулу: (105-102)+1 = 4. Цикл выполнится 4 раза.

Вопрос! Что мы увидим после выполнения следующего кода программы?

Привет
Пока
Привет
Пока

НЕТ! На экране мы увидим следующее:

Привет
Привет
Привет
Привет
Пока

В цикле будет выполнятся только одно действие writeln(‘Привет’). только оно относится к телу цикла. Команда writeln(‘Пока’) — вне тела цикла.

Как сделать так, чтобы обе команды входили в тело цикла?

Необходимо использовать ОПЕРАТОРНЫЕ СКОБКИ!

Теперь тело цикла состоит из двух команд.

Рассмотрим несколько классических примеров использования цикла со счетчиком.

Задача 1.

Посчитать сумму чисел от 1 до 100. (1+2+3+…+100) (не используя формулу суммы членов арифметической прогрессии)

Задача, как вы уже поняли, решается с помощью цикла со счетчиком. Мы можем изменять переменную-счетчик в цикле от 1 до 100. Это даст нам ряд чисел, которые нужно сложить:

Объявим дополнительно переменную S. В эту переменную будем записывать сумму на каждом шаге цикла. До выполнения цикла S=0.

На каждом шаге цикла переменная S будет изменяться с прибавлением текущего значения переменной i

(Новое значение S:= текущее значение S + текущее значение i)

Программа будет иметь вид:

Задача 2.

Посчитать сумму пяти введенных с клавиатуры чисел

Результат представить в виде:

Начнем наши рассуждения.

Нам необходимо ввести 5 чисел, следовательно можем использовать цикл со счетчиком

Что же должно выполняться в цикле?

Задача 3.

Найти сумму нечетных чисел от 1 до 1000.

Задача аналогична задаче 1. Отличие в том, что на числа накладывается условие: числа должны быть нечетными.

Определить четность можно, используя оператор MOD — остаток от деления.

Таким образом к переменной S будут прибавляться только те i, которые удовлетворяют условию.

если бы условие было сложным, например: найти сумму нечетных чисел и чисел, которые делятся на 10 — мы бы использовали запись:

Т.е. помимо нечетных чисел в сумме будут участвовать числа, которые делятся на 10 (использовали OR для объединения двух множеств).

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