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

Создание Двумерного Массива с Уникальными Числами, Повторяющимися Каждое Дважды, Используя Delphi и Pascal

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

Приветствую, уважаемые читатели! Сегодня мы рассмотрим проблему, с которой сталкиваются разработчики при работе с двумерными массивами: необходимость заполнения массива уникальными числами так, чтобы каждое число встречалось ровно два раза. Это может быть полезно, например, при создании игровых досок или в задачах, связанных с генерацией случайных чисел с определенными условиями.

Описание Проблемы

Исходный код, представленный в вопросе, пытается заполнить двумерный массив случайными числами от 0 до 9, но сталкивается с проблемой повторения чисел. Необходимо, чтобы каждый элемент массива somearray содержал уникальное число, которое встречается ровно два раза, распределенных по случайным позициям.

Решение Проблемы

Для решения этой задачи можно использовать два подхода:

1. Заполнение массива случайными позициями

Первый подход заключается в итерации по числам и размещении каждого из них в случайную позицию массива. Если позиция уже занята, необходимо найти следующую свободную.

procedure RandomPopulate1(var aTheArray: TArray<TArray<Integer>>);
var
  col, row, randomCount, randomNumber, randomPosition: Integer;
begin
  // Инициализация массива нулями
  SetLength(aTheArray, R, C);
  for row := 0 to High(aTheArray) do
    SetLength(aTheArray[row], Length(aTheArray[0]));
  for col := 0 to High(aTheArray[0]) do
    for row := 0 to High(aTheArray) do
      aTheArray[row][col] := 0;
  // Заполнение массива случайными числами
  for randomCount := 1 to 2 do
    for randomNumber := 1 to ((C * R) div 2) do
    begin
      randomPosition := Random(C * R);
      while aTheArray[randomPosition div C][randomPosition mod C] <> 0 do
      begin
        Inc(randomPosition);
        if randomPosition >= (C * R) then
          randomPosition := 0;
      end;
      aTheArray[randomPosition div C][randomPosition mod C] := randomNumber;
    end;
end;

2. Использование изменения позиций случайным образом

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

procedure RandomPopulate2(var aTheArray: TArray<TArray<Integer>>);
var
  col, row, randomLoop, randomNumber, randomPosition: Integer;
begin
  // Инициализация массива последовательными числами
  SetLength(aTheArray, R, C);
  for col := 0 to High(aTheArray[0]) do
    for row := 0 to High(aTheArray) do
      aTheArray[row][col] := ((col * C + row) div 2) + 1;
  // Перестановка позиций
  for randomLoop := 0 to ((C * R) div 2) - 1 do
  begin
    randomPosition := Random(C * R);
    randomNumber := aTheArray[randomLoop div C][randomLoop mod C];
    aTheArray[randomLoop div C][randomLoop mod C] := aTheArray[randomPosition div C][randomPosition mod C];
    aTheArray[randomPosition div C][randomPosition mod C] := randomNumber;
  end;
end;

Подтвержденный Ответ

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

Альтернативный Ответ

Также можно использовать алгоритм Фишера-Йетса для перестановки элементов в массиве, который обеспечит равномерное распределение чисел. Однако, исходя из комментариев, разработчик не настаивает на равномерности распределения.

Заключение

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

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

Создано по материалам из источника по ссылке.

Создание двумерного массива с уникальными числами, повторяющимися каждое дважды, с использованием языков программирования Delphi и Pascal.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-03-14 10:47:57/0.0053930282592773/1