![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Всем привет.
Подскажите плз. как сделать генератор случайных символов. мне надо так что бы в едит генерировались символы от A до Z и что бы генерировалось количество символов. |
|
#2
|
||||
|
||||
|
Функция Random выдает случайное число. А что такое символ? Это число. Символ задается его кодом. Следовательно:
Код:
Randomize;
Edit1.Text:='';
count:=Random(N); // Сюда макс количество
for i:=0 to count do
Edit1.Text:=Edit1.Text+chr(Random(ord('Z')-ord('A')+1)+ord('A')) |
| Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
scroyler (01.03.2012)
| ||
|
#3
|
|||
|
|||
|
спасибо. а как с генерировать в виде slovo1234 , а то есть и цифры и буквы?
|
|
#4
|
|||
|
|||
|
либо брать коды символов с '0' до '9' (это коды 48-57), либо можно сделать специальный Mas: array[43] of char = ['a'..'z', '0'..'9'] и брать значения из него. то есть берем букву вот так - Mas[random(36)] (36 - это 26 латинских букв плюс 10 цифр)
Я, правда, не уверен, что паскаль правильно подхватит такое объявление. Если не получится, то придется объявлять посимвольно 'a', 'b', 'c'... и так далее. В итоге должно получится что-то вроде Код:
var Mas: array[36] of char = ['a'..'z', '0'..'9']; procedure Button1Click(Sender: TObject); begin Randomize; Edit1.Text:=''; count:=Random(N); // Сюда макс количество for i:=0 to count do Edit1.Text:=Edit1.Text + Mas[random(36)]; end; Писал с работы, могут быть описки -_- Но в общем алгоритм, думаю, понятен. Вообще, на будущее. Есть уже готовые ansi-таблицы, из которых можно брать символы - например, вот для win-1251 кодировки. Последний раз редактировалось nixel, 01.03.2012 в 11:04. |
|
#5
|
||||
|
||||
|
Генератор паролей делаем? Так там еще регистр символов надо учитывать.
Вот вам генератор - развлекайтесь: Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
Var
PassLen, i: Integer;
Complexity: record Digit,Alpha,Registr: Boolean end;
CharSet, Pass: String;
begin
Complexity.Digit := CheckBox1.Checked;
Complexity.Alpha := CheckBox2.Checked;
Complexity.Registr := CheckBox3.Checked;
CharSet := '';
if Complexity.Digit then CharSet := CharSet + '012345679';
if Complexity.Alpha then CharSet := CharSet + 'qwertyuiopasdfghjklzxcvbnm';
if Complexity.Registr then CharSet := CharSet + 'QWERTYUIOPASDFGHJKLZXCVBNM';
if CharSet = '' then Exit;
PassLen := 10;
SetLength(Pass, PassLen);
for i := 1 to PassLen
do Pass[i] := CharSet[Random(Length(CharSet))+1];
Memo1.Lines.Add(Pass);
end;
end. |
|
#6
|
|||
|
|||
|
Мда, логичнее использовать строки, чем массив символов. Как-то я сразу об этом не подумал
![]() |
|
#7
|
||||
|
||||
|
Код:
function CreateBoundary(ALength: Integer): String;
begin
Result:='--------';
while Length(Result)<ALength do
begin
Result:=Result+Chr(Random(Ord('z')-Ord('a'))+Ord('a'));
Result:=Result+Chr(Random(Ord('9')-Ord('0'))+Ord('0'));
Result:=Result+Chr(Random(Ord('Z')-Ord('A'))+Ord('A'));
Result:=Result+Chr(Random(Ord('9')-Ord('0'))+Ord('0'));
end;
end;Код:
Edit1.Text:=CreateBoundary(32); |