![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте. Помогите реализовать пожалуйста.
Нужно в переменную процедуры string записывать новые данные каждый раз после ее завершения. В ней должен быть набор из 8 символов цифр 0-9 букв a-z aaaaaaaa aaaaaaab aaaaaaac ............. Как такое можно реализовать? |
|
#2
|
||||
|
||||
|
Переменная - понятно.
Переменная процедуры - более-менее, видимо локальная. Переменная процедуры string - беспорядочный набор слов. Опиши, что вообще нужно, нормальным языком. |
|
#3
|
|||
|
|||
|
нужно использовать процедур несколько раз, начинать когда переменная имеет значение aaaaaaaa последний когда переменная принимает значение 9999999.
|
|
#4
|
||||
|
||||
|
Ну так сделать передаваемую строку параметром процедуры, вызов сделать в цикле и на каждой итерации изменять строку.
|
|
#5
|
||||
|
||||
|
Цитата:
Код:
const
Digits: AnsiString = 'abcdefghijklmnopqrstuvwxyz0123456789'; // В этой строке находятся используемые
// "цифры" в порядке возрастания
procedure Increment(var Number: AnsiString);
var
i, p: Integer;
begin
i := Length(Number);
while i > 0 do
begin
p := Pos(Number[i], Digits);
if p = 0 then raise Exception.Create('Встретилась неизвестная цифра');
Inc(p);
if p > Length(Digits) then
begin
Number[i] := Digits[1];
Dec(i);
end else
begin
Number[i] := Digits[p];
Exit;
end;
end;
end;
// Пример использования:
procedure TForm1.Button1Click(Sender: TObject);
const
NumberLen = 8; // Количество "цифр" в "числе"
var
s, First: AnsiString;
begin
First := StringOfChar(Digits[1], NumberLen); // Первое "число" вроде такого "aaaaaaaa"
s := First;
repeat
Caption:=s;
Increment(s);
until s = First; // Пока не вернёмся к первому "числу"
end;Правда так как эта процедура предназначена для общего случая, то она не сильно шустрая. Если же важна скорость, то для твоего случая (36-ричного) можно соптимизировать её примерно так: Код:
procedure Increment(var Number: AnsiString);
var
i: Integer;
begin
i := Length(Number);
while i > 0 do
begin
case Number[i] of
'a'..'y', '0'..'8': Number[i] := Succ(Number[i]);
'z': Number[i] := '0';
'9':
begin
Number[i] := 'a';
Dec(i);
Continue;
end;
else
raise Exception.Create('Встретилась неизвестная цифра');
end;
Break;
end;
end; |
| Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
ИдиПейЧай (03.06.2013)
| ||
|
#6
|
||||
|
||||
|
poli-smen, напоминает типичный брутфорс
![]() |
|
#7
|
||||
|
||||
|
Цитата:
Особенно оптимизированный вариант. ![]() |
|
#8
|
|||
|
|||
|
Цитата:
спасибо большое |