Помощь - Поиск - Пользователи - Календарь
Полная версия: Рандомизатор
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Venik
И снова здрасьте! smile.gif Я вот знаю, что можно "рандомизировать" вывод чисел на экран. А можно сделать тоже самое со словами? Т.е. чтобы слова выводились в разном порядке. Заранее спасибо. give_rose.gif
volvo
Занести слова в массив и выводить по случайно сгенерированному индексу не пойдет? unsure.gif
Гость
Хе-хе, а как именно, можешь код написать?
volvo
Цитата(Правила Раздела)
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ - для этого есть отдельный раздел!
Если хочешь - перенесу в "Задачи"...
Гость
Ну давай. И соседнюю темку, если можно, плз.
Романтик
если умеешь работать с числами, то предлагаю такой вариант:
по табоице аски выбираешь диапазон букв, а точнее их кодов, рандомишь, а потом переводишь коды в буквы.
klem4
James_Bond, автору нужен текст, а не набор беспорядочных символов, в следущий раз читай предыдущие посты.
Романтик
извиняюсь. unsure.gif
Гость
Ну так что, неужели никто не знает?
Романтик
тебе же volvo ответил. mad.gif
Гость
Ну я если честно, с массивами плоховато, не смотря на то, что по книжке пытался с ними разобратся. Поэтому, попросил перенести тему в раздел "Задачи", чтобы кто-нибудь написал мне код. Вот.
Гость
PS: А с индексами я вообще не знаком! Так что проявите пожалуйста состродание, напишите код!
klem4
Гость, если плохо умеешь работать с массивами, то сходи сюда : FAQ : Массивы, матрицы, типичные задачи и воспользуйся поиском, очень много задач решено на массивы.

James_Bond Ты за собой следи. dry.gif
Гость
Ну я написал. Значит, вот.
После Uses CRT и перед Var я вставил
Код
Const
C : Array[1..2] of String=('Слово01','Слово02');

Потом, в текст программы добавил
Код

Randomize;
Random (C);
WriteLN (C);
End;

Таким образом я инициализировал массив, состоящий из двух позиции: Слово01 и Слово02. Потом, в программе, при определённом условии начинается рандомизация. Сначала она инициализируется, а потом начинает рандомизировать C (т.е. массив, состоящий из двух позиции). Потом программа должна вывести C (массив) и рандомизация закончится. Но при попытке скомпилировать Паскаль выдаёт ошибку 38. Что я неправильно сделал?
Гость
Забыл сказать, программа ругается на © (ну, указывает на © и выдаёт ошибку).
volvo
Вот так переделай программу:
Var ix: integer;
begin
  Randomize;
  ix := Random(2) + 1; { 1 <= ix <= 2 }
  WriteLn(C[ix]); { Я же говорил - ИНДЕКСЫ должны быть случайны ... }
end;

Но это будет печатать ТОЛЬКО одно случайное слово, если тебе надо ВСЕ слова массива распечатать в случайном порядке, то это делается немного иначе:

...
can_use := []; { здесь будут храниться значения, которые еще можно использовать }
for i := 1 to n do can_use := can_use + [i];

{
  Заполняешь массив такой же размерности,
  как и массив слов случайными значениями:
}
for i := 1 to n do begin
  repeat
    X := random(n) + 1;
  until X in can_use;
  ix[i] := X; can_use := can_use - [X];
end;

{ И потом распечатываешь ВЕСЬ массив сразу: }
for i := 1 to n do
  writeln(C[ix[i]]);
...
Гость
Спасибо, добрейшей души человек! Мне понадобился первый способ, но второй я тоже на всякий пожарный сохраню! ;) Я переделал свою прогу и всё заработало. Ещё раз спасибо!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.