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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2009, 14:32   #1
Freestyler
 
Регистрация: 01.12.2008
Сообщений: 9
По умолчанию Восемь чисел - восемь блоков. Как распределить?

Уже четвёртый час сижу, не могу додуматься. Есть восемь блоков (к примеру, Panel'и) и каждый раз при запуске программы генерируются 8 случайных чисел. Необходимо с каждым числом сделать некоторое кол-во математических или других операций, чтобы в результате все числа были разными. Т.е. в каждом блоке - своя уникальная для приложения цифра. Причём всё это надо сделать без использования массивов. Либо подскажите, как это сделать массивами, но настолько подробно, чтобы даже я понял. =) Просто во время изучения языка Paskal с массивами я как-то не подружился...В общем, надеюсь, всё понятно объяснил.
И пока насчёт кода приходит в голову только это:
Код:
var
 B1, B2, B3, B4, B5, B6, B7, B8: integer; // Восемь чисел
begin
 Randomize;

 B1:= Random(8) + 1; // Прибавляем 1 только для того, чтобы случайные числа
                     // шли в диапазоне 1..8 а не 0..7
 Panel1.Caption:= IntToStr(B1);

 B2:= Random(8) + 1;
  if B2 = B1 then begin
   repeat
    B2:= B2 + 1; // Если число совпадает с первым, прибавляем 1
    if B2 > 8 then B2:= 1; // Если превысили число 8, "скидываем" до 1
   until B2 <> B1; // Повторяем до тех пор, пока не добьёмся разных чисел
                   // Сделано для того, чтобы числа не совпали как "1" и "1"
  end;
 Panel2.Caption:= IntToStr(B2);
И дальше по аналогии...
Но проблема заключается в том, что если используется три числа или больше код начинает давать сбои - числа повторяются. И чем больше чисел (до 8, естественно), тем больше таких "повторов".
Прошу помощи, если таковая найдётся.
Freestyler вне форума Ответить с цитированием
Старый 03.03.2009, 15:11   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

1. Заполняем массив В числом 0.
2. Генерируем В1. (Random(7) + 1)
3. Генерируем следующее число В(i). (Random(7) + 1)
4. Просматриваем весь массив В на предмет совпадения, пока не достигнем нулевого (еще неиспользованного) элемента.
5. Если не получили совпадения - заносим в В(i).
6. Если i < 8, идем к п.3.
Со счетчиком i, я надеюсь, сами разберетесь?
mihali4 вне форума Ответить с цитированием
Старый 03.03.2009, 15:12   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Я бы заполнил массив по порядку нужными числами, а потом "перемешал" значения.
Код:
var
  a: array[0..7] of integer;
  i, k, tmp: integer;
begin
  Randomize;
  for i := 0 to 7 do
  begin
    a[i] := i + 1; // Заполняем по порядку числами от 1 до 8
  end;
  // Перемешиваем массив
  for i := 0 to 7 do
  begin
    k := Random(8);  // Новая позиция в массиве для элемента i
    // Меняем местами элементы i и k
    tmp := a[k];
    a[k] := a[i];
    a[i] := tmp;
  end;
end;
pu4koff вне форума Ответить с цитированием
Старый 03.03.2009, 17:26   #4
Freestyler
 
Регистрация: 01.12.2008
Сообщений: 9
По умолчанию

Спасибо, всё получилось.
Freestyler вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Высота блоков. Grind HTML и CSS 1 23.10.2008 21:37
Распределить товар по магазинам с помощью VBA ZORRO2005 Microsoft Office Excel 9 21.06.2008 22:04
ВОПРОС на счет блоков памяти и отслеживание за перемещением потока. Big Zee Свободное общение 7 21.04.2008 14:38
вычисление суммы чисел, кратных 3 из последовательности, состоящей из 10 чисел, заранее заданных Белка Помощь студентам 3 27.10.2007 11:53
Обмен блоков в массиве Irik Помощь студентам 6 29.04.2007 14:08