Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Заполнения массива случаными неповторяющимися значениями

Delphi , Синтаксис , Массивы

Заполнения массива случаными неповторяющимися значениями

Автор: Дедок Василий

Огромное Вам спасибо за сбор и систематизацию советов по Delphi. Предлагаю Вам интересное решение заполнения массива случаными неповторяющимися значениями. Думаю этот алгоритм небесполезен.


type
  arr = array[1..255] of integer;

procedure FillArray(var A: arr; n: integer);
var
  i: integer;
  s: string;
  q: byte;
begin
  randomize;
  s := '';
  for i := 1 to n do
  begin
    q := random(i);
    insert(chr(i), s, q);
  end;
  for i := 1 to n do
  begin
    A[i] := ord(s[i]);
  end;
end;

Here's the translation of the text into Russian:

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

Декларация типа

type
  arr = array[1..255] of integer;

Объявляет одномерный массив arr с 255 элементами каждого из типов integer.

Процедура FillArray Принимает два параметра: A, массив целых чисел, который нужно заполнить, и n, количество случайных значений для генерации.

procedure FillArray(var A: arr; n: integer);

Декларация переменных

var
  i: integer;
  s: string;
  q: byte;
begin

Объявляет три переменные:

  • i - целочисленная переменная, используемая как счетчик цикла.
  • s - строковая переменная, используемая для хранения случайных значений.
  • q - байтовая переменная, используемая для хранения случайного индекса.

Инициализация и основной логик Процедура выполняет два основных задачи: 1. Случайное значение: вызывает randomize для посева генератора случайных чисел. 2. Генерация случайных значений: циклится n раз, чтобы генерировать случайные значения. * Для каждой итерации: 1. Генерирует случайный индекс q между 1 и текущим счетчиком цикла i. 2. Добавляет символ (ASCII-код i) в позиции q в строке s.

Заполнение массива Процедура затем циклится снова, чтобы заполнить массив случайными значениями:

  • Для каждой итерации:
  • Присваивает ASCII-код соответствующего символа в s элементу в индексе i в массиве A.

Вот альтернативное решение с более эффективным подходом:

Использование множества Вместо генерации и хранения случайных индексов можно использовать тип set для хранения использованных значений. Это позволяет избежать необходимости в строковой манипуляции и уменьшить использование памяти.

type
  arr = array[1..255] of integer;
procedure FillArray(var A: arr; n: integer);
var
  i: integer;
  s: TBooleanSet;
begin
  randomize;
  s := {};
  for i := 1 to n do
  begin
    while true do
    begin
      A[i] := Random(256);
      if not s.Contains(A[i]) then
        Exit;
    end;
  end;
end;

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

Обе решения эффективны и подходят для небольших массивов, но второе решение может быть более масштабируемым для больших массивов или при ограничении памяти.

В статье предложено оригинальное решение для заполнения массива случайными неповторяющимися значениями в языке Delphi, использующее функцию Random и строковый метод Insert для генерации уникальных символов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Массивы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 08:53:11/0.0034329891204834/0