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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2011, 15:17   #1
dearkato
Пользователь
 
Регистрация: 15.10.2011
Сообщений: 29
По умолчанию строки в дельфи

Перемешать случайным образом буквы слова, введенного с клавиатуры.

готовый и рабочий текст программы:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  pos1: Integer;
  pos2: Integer;
  ch: Char;
  s:string;
begin
  s:=edit1.Text;
  Randomize;
  For i := 1 To Length(S) Do
  Begin
    pos1 := random(Length(S)) + 1;
    pos2 := random(Length(S)) + 1;
    ch := S[pos1];
    S[pos1] := S[pos2];
    S[pos2] := ch;
  End;
  label2.Caption := s;
end;

Последний раз редактировалось dearkato; 30.10.2011 в 14:12.
dearkato вне форума Ответить с цитированием
Старый 29.10.2011, 19:16   #2
Dush
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 116
По умолчанию

как вариант: берем длину строки, начиная с первого символа до конца строки -> random(новое место). дополнительно проверка места вставки символа в новой строке
Dush вне форума Ответить с цитированием
Старый 29.10.2011, 20:07   #3
dearkato
Пользователь
 
Регистрация: 15.10.2011
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Dush Посмотреть сообщение
как вариант: берем длину строки, начиная с первого символа до конца строки -> random(новое место). дополнительно проверка места вставки символа в новой строке
Код:
procedure TForm1.button1Click(Sender: TObject);
var l,i:Integer;  k:Char;
begin
l:=length(edit1.Text);
Randomize;
for i:=1 to l do
begin
k:=Random({как написать, что random должен брать информацию из edit1?});
label2.Caption:=label2.caption+{опять же, как сделать так, чтобы k вывелась в label?};
end;
end;
dearkato вне форума Ответить с цитированием
Старый 29.10.2011, 21:07   #4
Dush
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 116
По умолчанию

Код:
  l:=length(edit1.Text);
  Randomize;
  label1.Caption:='';
  for i:=0 to l-1 do
  begin
    k:=Random(l);
    label1.Caption:=label1.caption+edit1.Text[k];
  end;
Dush вне форума Ответить с цитированием
Старый 29.10.2011, 21:50   #5
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

Несовсем правильный код. Т.к. некоторые буквы из исходного слова могут попасть в результирующую строку несколько раз. Другие же могут непопасть ниразу.
А я так понял что буквы нужно перетасовать.
Для этого нужно использовать чтото вроде этого
Код:
  s:=edit1.Text;
  l:=length(s);
  Randomize;
  for i:=0 to l-1 do
  begin
    k:=Random(l-i);
    temp := s[i+k];
    for j := i+k-1 downto i do
      s[j+1] := s[j];
    s[i] = temp;
  end;
  label1.Caption:=s;
Здесь строка условно разделяеться на 2 части. 1) перетасованная 2) неперетасованная.
Из неперетасованой части случайно выбираеться символ и вставляеться в конец перетасованной части ( при этом элементы неперетасаванной части сдвигаються)
p.s. Код непроверял т.к. нет дельфи под рукой.
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."
val_nnm вне форума Ответить с цитированием
Старый 29.10.2011, 22:07   #6
dearkato
Пользователь
 
Регистрация: 15.10.2011
Сообщений: 29
По умолчанию

Цитата:
Сообщение от val_nnm Посмотреть сообщение
Код:
 
    s[i] = temp;
  end;
вот в этой строчке ошибка. надо прописать, чтобы s[i] присваивался какой-то элемент из temp[??]. завтра посмотрю. сейчас не слишком вникала в текст. спасибо за помощь))
dearkato вне форума Ответить с цитированием
Старый 29.10.2011, 22:10   #7
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

возможно дело в том что temp должно быть типа char

а и ещё маленькая поправка (а работу алгоритма невлияет, но чтобы алгоритм неделал лишних действий если остался только один неперетасованный элемент)
вместо
Код:
 for i:=0 to l-1 do
можно написать
Код:
 for i:=0 to l-2 do
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."

Последний раз редактировалось val_nnm; 29.10.2011 в 22:26.
val_nnm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
строки в дельфи dearkato Помощь студентам 4 28.10.2011 20:58
Сделать в гриде строки выше, чтобы не растягивать строки до бесконечности kris__tina БД в Delphi 1 09.06.2011 15:31
таблицы подстановок в дельфи(базы данных в дельфи) ManiagoZ БД в Delphi 0 15.05.2011 15:07
Создание пустой строки и копирование в неё содержимое предыдущей строки Gvaridos Microsoft Office Excel 2 29.10.2010 13:33
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10