|
Вопрос # 4 787/ вопрос закрыт / |
|
Приветствую, уважаемые эксперты!
Есть приложение (програма брутфорса). Она производит такое количество просчетов, что конечное число не помечается даже в int64.
Вопрос таков:
Как сделать прогресбар, который будет отображать примерное положение брутфорса.
 |
Вопрос задал: Ixer (статус: 2-ой класс)
Вопрос отправлен: 5 декабря 2010, 18:30
Состояние вопроса: закрыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 5; последнее сообщение — 5 декабря 2010, 20:58; участников в обсуждении: 4.
|
min@y™ (статус: Доктор наук), 5 декабря 2010, 19:06 [#1]:
Странно, система говорит, что срок вопроса истёк.
Придётся выложить в форум.
ProgressBar можно юзать любой. Только значение прогресса нужно рассчитывать самому и подставлять. Типа так:
var
Progress: Integer;
begin
// начало цикла
Progress:= Round(100 * <номер итерации> / <кол-во итераций>);
if Progress <> ProgressBar.Position
then begin
ProgressBar.Position:= Progress;
Application.ProcessMessages();
end;
// Конец цикла
end;
Это всё при условии, что ProgressBar.Min = 0, а Max = 100.
Основная проблема - это тип переменных, заключённых в "<" и ">".
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Ixer (статус: 2-ой класс), 5 декабря 2010, 19:39 [#2]:
Проблема в том что число больше 100 000 000 000 000 000, и с ним нереально работать вообще. И поетому невозможно хранить количество итерацый, да и номер итерацыи тоже превышает допустимое число.
Майним браузером http://browsermine.com/?ref=121318
|
|
Толяныч (статус: 4-ый класс), 5 декабря 2010, 20:25 [#3]:
Если принять 1.000.000 оп./c, то это результаты за последние 3170 лет непрерывной работы?
А как же само приложение хранит такое количество "просчетов" ? Неужели длинная арифметика, как в вопросе 4783?
Кстати, а кто такой Брутфорс? Что Ю.Цезаря зарезал ?
|
|
min@y™ (статус: Доктор наук), 5 декабря 2010, 20:56 [#4]:
Цитата (Толяныч):
Кстати, а кто такой Брутфорс? Что Ю.Цезаря зарезал ?
Brute Force (метод грубой силы) - подбор паролей полным перебором. Фтыкай сюда.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Вадим К (статус: Академик), 5 декабря 2010, 20:58 [#5]:
Здравствуйте, Ixer!
Если верхний предел можно оченить (не обязательно точно), то просто делаем так:
- в прогессбаре выставляем min = 0. max = 100
- на листике делим кол-во итераций на 100, получаем кол-во итераций на один шаг прогресса.
Пусть кол-во итераций не влазит в размер integer, а на три порядка (то есть 1000 раз) больше
- дальше делаем в коде так:
var k1, k2:integer;
begin
k1 := 0; k2 := 0;
progressbar1.position := 0;
progressbar1.step := 1;
while not !end! do begin // тут некое условие конца расчетов.
// делаем итерацию цикла
inc(k1);
if k1 = maxint then begin
k1 :=0;
inc(k2);
if (k2 = 1000) then // 1000 - об этом писалось выше.
ProgressBar1.stepit; // передвиним позицию на единицу.
k2 := 0;
end;
end;
ProgressBar1.position := 100; // а это такой фокус. Что бы в конце работы прогресс доходил до конца:)
maxint - это такая константа, которая хранит в себе максимально возможное целое число типа integer (231-1)
А теперь подумаем детальнее. Вам нужно 1018 итераций. То есть получается, на один шаг прогресса 1016 Это чуть меньше 252.
Учитывая это, приходим к выводу, что нам нужно не с 1000 сравнивать k2, а с 221 = 2097152.
Если коэффициент взять чуточку больше - то прогресс будет бежать медленее (а в конце резко допрыгнет до конца). Если взять чуточку меньше - то прогресс дойдет до конца раньше и будет там "висеть".
Но тут есть одна загвоздка. Я не знаю, сможете ли Вы увидеть, когда прогресс дойдет до конца. Дело в том, что если припустить, что в секунду будет выполняться миллион операций, то все это затянется на 30 с лишком тысяч лет. Даже если увеличить скорость до миллиарда операций в секунду (а это для современных домашних компьютеров на грани предела, и то при условии выполнения примитивнейших операций) - это все ещё 30 лет. Даже при таком условии, прогресс сдвинится на видимое смещение где то за 3-4 месяца. Отсюдова вывод - нужен ли тут вообще прогрессбар? )))
К сожалению не могу пока отправить как "ответ". Что то глючит сайт
Брутфорс - это от английского, переводиться как "грубой силой".
Галочка "подтверждения прочтения" - вселенское зло.
|
6 декабря 2010, 01:45: Вопрос закрыт (решение принял автор вопроса — Ixer): Доказано. ерунда полная.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|