Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.02.2012, 20:49
scroyler scroyler вне форума
Активный
 
Регистрация: 01.08.2011
Адрес: ЧЕбоксары
Сообщения: 248
Версия Delphi: XE
Репутация: -615
По умолчанию Генератор символов

Всем привет.
Подскажите плз. как сделать генератор случайных символов.
мне надо так что бы в едит генерировались символы от A до Z
и что бы генерировалось количество символов.
__________________
Ставь спасибо за спасибо!
Помог?Ставь спасибо!Увидел пост? Поставь спасибо!
Ответить с цитированием
  #2  
Старый 29.02.2012, 21:15
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Функция 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'))
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
scroyler (01.03.2012)
  #3  
Старый 01.03.2012, 07:05
scroyler scroyler вне форума
Активный
 
Регистрация: 01.08.2011
Адрес: ЧЕбоксары
Сообщения: 248
Версия Delphi: XE
Репутация: -615
По умолчанию

спасибо. а как с генерировать в виде slovo1234 , а то есть и цифры и буквы?
__________________
Ставь спасибо за спасибо!
Помог?Ставь спасибо!Увидел пост? Поставь спасибо!
Ответить с цитированием
  #4  
Старый 01.03.2012, 10:59
nixel nixel вне форума
Начинающий
 
Регистрация: 12.12.2011
Адрес: Москва
Сообщения: 150
Версия Delphi: XE2-U4
Репутация: 131
По умолчанию

либо брать коды символов с '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  
Старый 01.03.2012, 12:23
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Генератор паролей делаем? Так там еще регистр символов надо учитывать.
Вот вам генератор - развлекайтесь:
Код:
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  
Старый 01.03.2012, 19:55
nixel nixel вне форума
Начинающий
 
Регистрация: 12.12.2011
Адрес: Москва
Сообщения: 150
Версия Delphi: XE2-U4
Репутация: 131
По умолчанию

Мда, логичнее использовать строки, чем массив символов. Как-то я сразу об этом не подумал
Ответить с цитированием
  #7  
Старый 02.03.2012, 09:04
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
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);
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:50.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025