Помощь - Поиск - Пользователи - Календарь
Полная версия: Случайные числа
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Ромаха
Утро Доброе smile.gif

Возникла проблемка, надеюсь Вы поможете мне разобраться с этой бякой.

И так : Есть задачка : Вывести 5 уникальных случайных чисел из диапазона 0..10.

Вот код решающий данную задачу и с ним я полностью согласен :
const N=5;
var
mas : array[1..N] of integer;
i, k, L : integer;
wasBefore : boolean;
begin
Randomize;
mas[1] := Random(35)+1;
for i:=2 to N do begin
repeat
L := Random(35)+1;
wasBefore := false;
for k:=1 to i-1 do
if mas[k]=L then begin
wasBefore := true;
break
end;
until not wasBefore;
mas[i] := L;
end;

{выдача полученных чисел}
for i:=1 to N do Write(mas[i]:3,' ');
WriteLn;
Reaadln;
end.
by Серж

Но так же один человек предложил такой вариант решения задачи :
Цитата
- сначала заполнить массив нужной длины (в данном случае 10) последовательными числами,
- затем перемешать эти числа (random используется именно на этапе перемешивания).


Если бы данный алгоритм употреблялся бы к перемешиванию карт в колоде, то я полностью одобрил бы этот алгоритм.. Но в условиях данной задачи, мне кажется, не допустимо использование данного алгоритма.. Почему? - Когда массив уже заполнен, нужно как-то выбрать 5 элементов массива, а как это сделать? - Рандом уже нам не помошник, а писать Write (a[1], a[3], a[34], etc) мне кажется неправильно..

Надеюсь что Вы опровергните или подтвердите мое "мне кажется" smile.gif

P.S. Задачку мне не сдавать.. Решаю только для себя..
P.P.S. Надеюсь я создал темку в том разделе

Спасибо rolleyes.gif
@nto$ka
FAQ
Ромаха
Вечер Добрый! smile.gif
Цитата(@nto$ka @ 28.01.2013 17:38) *


Мне кажется Вы не поняли суть проблемы. Данная ссылка не несет в себе информацию, которая способна мне помочь.. Я повторю свои вопросы:
1) Употребим ли для данной конкретной задачи алгоритм сначала заполнения, а затем перемешивания?
2) Если да, то как нам выбрать 5 чисел?
3) Если нет, то почему?

Удачи smile.gif

andriano
Цитата(Ромаха @ 28.01.2013 19:22) *

Вечер Добрый! smile.gif
Мне кажется Вы не поняли суть проблемы. Данная ссылка не несет в себе информацию, которая способна мне помочь.. Я повторю свои вопросы:
1) Употребим ли для данной конкретной задачи алгоритм сначала заполнения, а затем перемешивания?
2) Если да, то как нам выбрать 5 чисел?
3) Если нет, то почему?

Удачи smile.gif

А на мой взгляд, @nto$ka вполне понял суть проблемы и дал совершенно верную ссылку. Ну а если эта информация не способна Вам помочь, то причину следует искать в несколько ином месте.
1. Да.
2. Подряд. (разумеется, после перемешивания.
3. -
Ромаха
Спасибо! smile.gif (+1)
Цитата
2. Подряд. (разумеется, после перемешивания.


Тоесть так?

for i := 1 to 5 do
Write (a[i], ' ')



Но всё-таки, мне кажется, эти "волшебные" числа в границах массива не есть хорошо
@nto$ka
Цитата
Но всё-таки, мне кажется, эти "волшебные" числа в границах массива не есть хорошо



И чем же Вас не устроил массив? Что в нем плохого?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.