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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2008, 21:44   #1
Roomper
Пользователь
 
Регистрация: 12.05.2008
Сообщений: 13
По умолчанию Заполнение массива случайными числами

Вообщем, столкнулся с одной проблемой. Необходимо заполнить массив различными неповторяющимися значениями. Я написал код, но явно что-то упустил. Вот он:

Код:
for f := 0 to 14 do
begin
      r[f] := random(14);
      for j := 1 to f-1 do
      begin
        if r[f] = r[j] then
        begin
          while r[f] = r[j] do  r[f] := random(14);
        end;
      end;
end;
Подскажите, в чем я ошибся или представьте свое решение (с комментариями)
Roomper вне форума Ответить с цитированием
Старый 12.05.2008, 21:58   #2
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

перед циклом поставь Randomize;

P.S.Не что-то не работает...
Всё гениальное - просто!

Последний раз редактировалось Air; 12.05.2008 в 22:15.
Air вне форума Ответить с цитированием
Старый 12.05.2008, 22:04   #3
Xardas
Сисадмин
Форумчанин
 
Аватар для Xardas
 
Регистрация: 28.12.2007
Сообщений: 320
По умолчанию

Вот здесь обсуждалось это (выбор случайным образом неповторяющихся значений из некоторого диапазона).

Последний раз редактировалось Xardas; 12.05.2008 в 22:07.
Xardas вне форума Ответить с цитированием
Старый 12.05.2008, 22:19   #4
Roomper
Пользователь
 
Регистрация: 12.05.2008
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Air Посмотреть сообщение
перед циклом поставь Randomize;
А вообще можно проще.
Код:
for f := 0 to 14 do  
 begin
  S:=random(14);
  for j:=0 to Length(r) do
   if s <> r[j] then r[j]:=s;
 end;
Написал от руки, но смысл такой же.
Ну, рандомайз это естесственно прописывал, просто в коде не показал.
А этот способ рассмотрю, выглядет проще и понятнее чем у меня
Roomper вне форума Ответить с цитированием
Старый 12.05.2008, 22:34   #5
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

я его тестировал - не катит
Переделал.
Код:
procedure TForm1.Button1Click(Sender: TObject);
Label 1;
var r:array[0..14] of integer; Add,i,j,s:integer; No:boolean;
begin
randomize;
for j:=0 to Length(r) do
r[j]:=-1;
add:=0;
save:=0;
for j := 0 to 14 do
 begin
1:
  S:=random(255);
  for i:=0 to Length(r) do
   if s = r[i] then
    goto 1
   else
    No:=true;
  if no then
   begin
    r[add]:=s;
    add:=add+1;
   end;
 end;

for j:=0 to Length(r) do
label1.Caption:=label1.Caption+inttostr(r[j]);
end;
Оказался длиннее.
Всё гениальное - просто!

Последний раз редактировалось Air; 12.05.2008 в 23:15.
Air вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнение диапазона данными массива Сер_Ежик Microsoft Office Excel 4 24.03.2009 16:52
Заполнение двумерного массива прямоугольников случайными изображениями Mischa Помощь студентам 1 11.03.2008 21:58
переписать из массива в линейный двунаправленный список чётные элементы массива Black_Ak24 Помощь студентам 12 08.01.2008 00:44
Заполнить массив случайными числами forumu Общие вопросы Delphi 13 03.12.2007 22:11
Заполнение массива числами Ermiss Общие вопросы C/C++ 7 25.11.2007 14:54