|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
13.10.2008, 08:48 | #1 |
Регистрация: 13.10.2008
Сообщений: 9
|
Скорость реакции
Пишу программу на Delphi7 для определения скорости реакции. Вначале перед пользователем окно с вопросом "Начать тест?" Если пользователь нажимает "ОК" , через ПРОИЗВОЛЬНЫЙ момент времени появляется геометрическая фигура, как только пользователь увидел фигуру, необходимо нажать "ОК" и так несколько раз, Затем считается средняя скорость реакции и выводится результат.
Проблема в определении времени между появлением фигуры и нажатием пользователем кнопки "ОК". Код:
Последний раз редактировалось li6051; 13.10.2008 в 08:58. |
13.10.2008, 09:26 | #2 |
Участник клуба
Регистрация: 23.07.2007
Сообщений: 1,054
|
Ну чтобы опредилить разницу можно обьявить глобальную переменную.
При появлении фигуры вклучать таймер и там присвоить при такте значение переменной на один больше. а при нажатии на кнопу остановить таймер. И в переменной как раз окажется время Кстати не забудь обнулять переменную при второй попытке. Это можно сделать так: При появлении фигуры переменная =0
Писано по д'Эльфийски
|
13.10.2008, 21:34 | #3 |
Форумчанин
Регистрация: 22.09.2007
Сообщений: 540
|
И ещё. Сначала запишите переменную например в массив, потом обнулите, потом всё тоже самое столько раз, сколько будет появляться фигура.
Среднее время будет равно сумме всех эл-ов массива делённой на кол-во эл-ов массива. Собственно всё... |
13.10.2008, 22:08 | #4 |
Андрей
Форумчанин
Регистрация: 21.11.2006
Сообщений: 457
|
Чуток перемудрил.... У пользователя может быть N попыток, тоесть динамический массив, а это слишком сложно для этой задачи. Тупо в 1 переменной сумма всего времени, а во 2 количество попыток. И обнулять ничего не надо средняя скорость переменная 1 деленная на переменную 2.
ICQ: 5311314
[SIGPIC][/SIGPIC] |
16.10.2008, 16:44 | #5 |
Регистрация: 13.10.2008
Сообщений: 9
|
Спасибо всем за помощь! Намучилась я с таймером, так ничего и не вышло! Препод посоветовал воспользоваться функцией : Time;
Я делаю так: у меня три переменные е, c и d типа TDateTime;. В момент когда появляется фигура : c := Time; В момент когда нажимается кнопка: d := Time; При нажатии кнопки результат: e:= c-d; Вот на это выдается ошибка! НЕ понимаю, может с этим типом данных нельзя выполнять арифметические операции или в чем дело? Код:
|
16.10.2008, 16:55 | #6 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Воспользуйся функцией GetTickCount:
Код:
|
16.10.2008, 17:09 | #7 |
Регистрация: 13.10.2008
Сообщений: 9
|
Спасибо,сейчас попробую!
|
18.10.2008, 10:00 | #8 |
Регистрация: 13.10.2008
Сообщений: 9
|
К сожалению,при использовании GetTickCount выдает ошибки!
Код:
Хочу все таки попробовать с помощью функции Time и MilliSecondsBetween (возвращает кол-во миллисекунд между двумя датами! Может чего подскажете? И еще проблема возникла: Мне необходимо определить время между ПОЯВЛЕНИЕМ ФИГУРЫ и нажатием кнопки ПОСЛЕ появления фигуры, т.е Time мне нужно вставлять сразу же после Код:
Код:
Что-то у меня все застопорилось, никак не могу найти разницу времени, а потом вывести результат! |
18.10.2008, 11:33 | #9 |
Регистрация: 13.10.2008
Сообщений: 9
|
Пытаюсь с помощью Time определить разницу времени:
Код:
Код:
На Код:
Project Project2.exe raised exception class EInvalidOp with message 'Invalid floating point operation'. Process stopped. Use Step or Run to continue. (Предположите, что Project2.exe поднял класс исключения EInvalidOp с сообщением 'Недействительная операция плавающей запятой'. Процесс остановился. Используйте Шаг или Пробег, чтобы продолжить.) И выделяет эти строчки синим цветом! Сил моих больше нет! Не могу понять в чем дело! Может я today := Time; и today1 := Time; не в том месте пишу или как то не так! Что за операция плавающей запятой? Почему today1 =0.00.00.? И почему не выдает время today и g? |
18.10.2008, 12:54 | #10 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
1) тип, возращаемый GetTickCount - не integer, а CARDINAL
2) зачем Вам time, когда Вы можете использовать GetTickCount ? 3) Похоже, я догадываюсь, что Вы делаете неправильно!!! Вы знаете что такое "ЛОКАЛЬНЫЕ" переменные процедуры/функции ? Например, Уберите ВСЕ ОБЪЯВЛЕНИЯ today : TDateTime; today1 : TDateTime; из секций VAR всех процедур ( ... bb2Click/ bb3Click ...) и напишите ОДИН раз в секции описания формы Код:
Тогда можно будет помочь. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Скорость проигрывания | Bigtyoma | Общие вопросы Delphi | 0 | 01.10.2008 08:07 |
Скорость проигрывания | Bigtyoma | Мультимедиа в Delphi | 0 | 30.09.2008 15:57 |
Упала скорость в интернете | Rembo | Свободное общение | 5 | 18.08.2008 08:54 |
Скорость Server/ClentSocket | delphin100 | Работа с сетью в Delphi | 9 | 08.05.2008 13:51 |
Переопределение реакции на события | ByWatt | Общие вопросы Delphi | 1 | 20.12.2007 17:22 |