Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2009, 20:44   #1
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Вопрос Аналог GetTickCount для Паскаля

Есть рекурсивная функция, которая становится бесконечной, если пользователь ввел неверные данные. Причем заранее проверить их правильность невозможно (только в ходе рекурсии). Подумал, что можно засекать время выполнения (> 2 сек значит прерывать) На Делфи я бы написал GetTickCount и сравнивал в процедуре. Но надо в Паскале или на крайняк во ФриПаскале. Если там что-нибудь такое?
k1r1ch вне форума Ответить с цитированием
Старый 26.11.2009, 21:30   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Попробуйте поставить прерывание не на время (которое будет скакать в зависимости от мощности компьютера), а на количество выполнений функции. Введи глобальную переменную типа байт и внутри рекурсии делай inc(I). Если I = 200 - прерывай. В "нейтральном" положении I:=0;
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 27.11.2009, 13:18   #3
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Спасибо! Самое что интересное, такая переменная уже была, она использовалась для нумерации, а я что-то не подумал ее использовать
k1r1ch вне форума Ответить с цитированием
Старый 27.11.2009, 13:35   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

аналог GetTickCount в TurboPascal делается элементарно:
Код:
var
  Ticks      : LongInt  absolute 0:$46c;
и всё, в любой момент времени Ticks содержит число "тиков"

но вообще-то, привязываться к времени выполнения - не логично и не эффективно, гораздо лучше поступить так, как предложил Alex Cones - считать вложенность вызовов...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.05.2011, 00:01   #5
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Лучше по-другому делать. Если данные в ходе последней итерации не изменились - значит началась бесконечная рекурсия - нужно прервать функцию. Иначе, попросту, можно ложно диагностировать проблему.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 14.05.2011, 07:59   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Сtrl
1) Вы зря поднимаете тему двухгодовой давности! (и как только Вы её нашли?! )

2) Автор вопроса уже, судя по всему решил свою проблему.
В подобных случаях подсчёт глубины вызовов - это самое "милое" дело (счётчик вызовов).

3) Ваш совет не очень корректен. что есть данные в рекурсивной функции? Рекурсивная функция может, например, обходить связный список. А он может быть закольцован...
Да и в вычислениях есть случаи, когда ряд рассходится - т.е. каждый раз данные разные - а окончания цикла не предвидится...
Кстати, скорее всего подобный бесконечный рекурсивный вызов функции/процедуры закончится переполнением стека...

Последний раз редактировалось Serge_Bliznykov; 14.05.2011 в 08:02.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сайт с задачами для Паскаля k1r1ch Свободное общение 2 11.11.2009 19:46
Аналог функции GetObject из VB для Делфи? Stilet Общие вопросы Delphi 1 29.04.2009 17:46
C# проблема с GetTickCount igroman Общие вопросы .NET 1 09.01.2009 09:37
Задача для паскаля. Анжелика Помощь студентам 6 27.10.2008 18:13
Задача для гениев Паскаля Улица Помощь студентам 1 22.05.2008 13:56