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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2011, 11:36   #1
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию Случайные буквы

Как сделать так, чтоб на экран выводились случайно три латинских буквы.
StudentMarat вне форума Ответить с цитированием
Старый 17.10.2011, 11:41   #2
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию

Совсем забыл. Язык программирования Delphi
StudentMarat вне форума Ответить с цитированием
Старый 17.10.2011, 11:50   #3
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Код:
function RandomChar():char;
begin
  result:=chr(random(ord('Z')-ord('A'))+ord('A'));
  if random(10)>5 then
  result:= chr(ord(result)-(ord('A')-ord('a')));
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  randomize();
  Label1.Caption := RandomChar+RandomChar+RandomChar;
end;
95% сбоев и ошибок приложений, находится в полу метрах от монитора

Последний раз редактировалось JUDAS; 17.10.2011 в 16:43.
JUDAS вне форума Ответить с цитированием
Старый 17.10.2011, 12:13   #4
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию

Цитата:
Сообщение от JUDAS Посмотреть сообщение
Код:
function RandomChar():char;
begin
  result:=chr(random(ord('Z')-ord('A'))+ord('A'));
  if random(10)>5 then
  result:= chr(ord(result)-(ord('A')-ord('a')));
end;
Если не трудно можешь объяснить, что делает эта функция, и что значит условие if random(10)>5
StudentMarat вне форума Ответить с цитированием
Старый 17.10.2011, 16:45   #5
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

генерирует случайную буковку
ну смотри пошагово?
---
begin
result:=chr(random(ord('Z')-ord('A'))+ord('A')); - строка 1:
результат = символ с номером [ случайное число ( код(Z)-код(A) ) + код(A)]
код (...) - числовой код символа в таблице кодов
агнлийский буквы идут подряд в любой известной мне кодироке, посему если код А = 1 то код Z = номеру в алфавите = 24.
Строчка гененриует случайное число от 0 до числа букв алфавита, к этому числу добавляется код буквы А (например 48) и получается чимсловой, реальный код символа, который преобразовывается в символ через CHR.
if random(10)>5 then // строка 2
генерируем случайное число от 0 до 10. Для чего ? Ответ: дело в том, что ты указал что должны генерироватся буквы алфавита без регистра, то есть и большие и маленький (в симбиозе). Посему, я генерирую после буквы случайное число и проверяю его на попадание после 5. Получается фифти/фифти (50 на 50) что число будет больше 5 и меньше пяти для каждого символа.
Если сгененрировано случаное число более 5, значит уменшим букву:
result:= chr(ord(result)-abs(ord('A')-ord('a')));
уменшаем букву так же ка ки формируем.
допустим что код А (как я писал выше см. красную ццыфру) начинается с 48, то код мелкой бувы А, будет начинатся например с 100 получается
- находим разницу между кодом а малой и А большой 48-100 = -52
- в не зависимости от того что больше и что меньше смещение отнимаю от сгенерированной буквы.
Получается что этим я изменяю код большой буквы на смещение от набора больших букв к набору мелких букв.
код - -52 = код + 52 => код мелкой буквы
- преобразовываю код, обратно в букву.
end;
95% сбоев и ошибок приложений, находится в полу метрах от монитора

Последний раз редактировалось JUDAS; 17.10.2011 в 16:47.
JUDAS вне форума Ответить с цитированием
Старый 17.10.2011, 17:16   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
if random(10)>5 then генерируем случайное число от 0 до 10.
от нуля до 9.
0,1,2,3,4,5 - будет прописная (большая) буква
6 7 8 9 - будет строчная (маленькая).
явно не одинаковая вероятность выпадения больших и маленьких букв... )
тогда уж if random(2)=0 then ....

а по мне, так ещё лучше, одной строчкой обойтись - без ORD и CHR
Код:
function RandomChar:char;
const
  sLetter :   string
      = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
begin
  result:= sLetter[ Random(Length(sLetter))+1 ];
end;
и при необходимости туда легко добавить нужные символы (ну, например, цифры, или знак подчёркивания или вообще всё, что потребуется! Хоть кирилицу...)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.10.2011, 17:24   #7
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Сергей, мелочи про вероятность не важны. По поводу Вашего варианта, решение оригинальное, но думаю в таком виде не стоит его оформлять в виде функции:
Код:
const
  sLetter :   string
      = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';

procedure TForm1.Button1Click(Sender: TObject);
var i,len : integer;
begin
  randomize();
  len := Length(sLetter);
  Label1.Caption:='';
  for i:=1 to 3 do
  Label1.Caption := Label1.Caption+sLetter[Random(len)+1];
end;
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразовать все буквы нижнего регистра в буквы верхнего регистра druger Помощь студентам 5 18.09.2011 17:27
Случайные числа. Си. meta Помощь студентам 1 31.05.2011 01:48
Случайные числа severin Помощь студентам 8 02.02.2010 17:35
Случайные велечины Sam04 Помощь студентам 4 16.06.2008 01:31