Другие языки программирования и технологии

программирование в паскале

Всем привет) Есть такой вопрос: мне нужно записать в один массив данные из другого массива, но таким образом, чтобы ячейка массива, из которого записывается информация, определялась случайным числом. ну тоесть рандомно. и вот в общем у меня вопрос, как сделать так, чтобы если рандом выдаст число ячейки, которое уже было, чтобы он еще раз выбрал? ну тоесть я записала что то вроде for i:=1 to 20 do { m:=random(21); и вот сюда нужно как бы впихнуть условие... как его записать? не могу понять. B:=A[m]; } заранее спасибо)
С*
Сека ***
2 812
B[ i ] : = A[m]

заведем массив k integer заполним его нулями
проверяем элемент массива k с индексом числа сгенерированного функцией random если там 0 меняем на 1 и делаем замену, нет - ничего не делаем
АЛ
Андрей Литвинов
1 540
Лучший ответ
Сека *** спасибо, сделала - получилось)
Ты неправильно думаешь.
Надо заходить с другого конца.
Не надо вставлять подряд на случайные места.
Надо брать из случайного места и вставлять подряд.
Исходный массив при этом сдвигается на 1 назад и следующее место определяется уже в диапазоне 1..Н-1.
Сергей Иванов
Сергей Иванов
83 240
Сергей Комин Проблема узнавания не выдаст ли рандомный генератор одни и те же числа от этого не решится.
Вопрос - как избежать ситуации когда рандом-генератор выдаст одно и то же число, а он их будет выдавать.
А вроде просветленный.
Кстати я решал такие задачи при программировании. Массив меток - нужен.
"Ну блин как собака - все понимаю, а сказать не могу" (с)

Это, конечно, очень трудно - выдавить из себя краткое и внятное предложение - "необходимо реализовать алгоритм получения последовательности случайных НЕповторяющихся чисел"

Нет, гораздо легче ни разу не напрягая извилины извергать тут опус на пол-страницы вида "ну тоесть рандомно. и вот в общем .. если рандом выдаст число ..,которое уже было, чтобы он еще раз выбрал. .
ну тоесть я записала что то вроде ..блин, чет не прописывает"

Мдя.
D4
D>L<Am6Uecob 4Uhru3
32 502
Сека *** блин, второй раз за день мне такое говорят....) ну что делать, уж извини, какая есть)
Игорь Гребенюк по-моему условие достаточно понятно чтобы решить задачу.
Друг!

Напиши пожалуйста четко условие задачи. Здесь тебе помогут. :)
А квадратные скобки отделяй пробелами, чтобы форматирования не было.

Если я правильно понял, проще всего так.
Заведем новый массив - это номера.

var N:array [ 0 .. 19 ] of byte;

Заполним его номерами нашего массива А.
for t := 0 to 19 do N [ t ] := t+1;

Начнем заполнять В с номера p
p := 1;

Теперь 20 раз делаем:
for t := 20 to 1 do
begin
берем номер случайный из всех номеров, что есть
r := random(t);
и присваиваем его очередному В
B [ p ] := A [ r ];
пошли по B дальше
p := p + 1;
end;

Все! :)
Азамат Торы
Азамат Торы
7 165
Сека *** чет не работает(
ваще у меня условие то... ну очень далекое от этой темы)))
просто у меня была идея сделать кусочек вот таким вот макаром... но что то не получается(
получается что тебе нужен еще один массив - например массив меток занятости, обозначающих завершенную операцию копирования, численность - такая же как у массива данных (20) только записывать туда 1, а предварительно очищать нулями. вот условие и проверят занята ли ячейка или нет (0 или 1).

В принципе в роли меток мог бы сойти и сам массив назначения, если быть уверенным что среди данных не будет нулей. Или к примеру данные - все положительные, тогда забиваешь массив назначения минусовыми числами (-1) а потом проверяешь - закинула ты туда число (стало оно не равным -1) или нет, если там уже не -1 то генератор рандомит снова.
Сергей Иванов Ни хрена тут не нужны никакие дополнительные массивы.
Да напиши задание и я тебе помогу!