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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2024, 16:55   #1
clone
Новичок
Джуниор
 
Регистрация: 14.08.2024
Сообщений: 6
По умолчанию Получить все возможные значения двоичной матрицы

Здравствуйте, помогите с алгоритмом на дельфи :

Допустим у меня есть матрица 2х2 из нее я получаю:

Код:
function GetValueStr(const param: integer): string;
begin
     case param of
          0: Result:='0,0';
          1: Result:='1,1';
          2: Result:='0,1';
          3: Result:='1,0'; 
     end;          
end;

function GetValueIdx(const value: string): integer;
begin
     case value of
          '0,0': Result:= 0;
          '1,1': Result:= 1;
          '0,1': Result:= 2;
          '1,0': Result:= 3; 
     end;          
end;
помогите реализовать это в цикле допустим с матрицей 10х10

Последний раз редактировалось clone; 16.08.2024 в 17:18.
clone вне форума Ответить с цитированием
Старый 16.08.2024, 18:06   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,359
По умолчанию

Приведите пример хотя бы для матрицы 3x3 (можно не кодом, а саму матрицу, заполненную номерами), а то по матрице 2x2 непонятен алгоритм нумерации ячеек матрицы.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 16.08.2024, 18:21   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,659
По умолчанию

Не допустим.
Годы (а может, столетия) понадобятся, чтобы сгенерировать и вывести 2^100 вариантов.
Ну а если времени - вагон - могу предложить простой алгоритм: в цикле от 0 до 2^100 - 1 разряды переменной, являющегося параметром цикла, разложить по строкам и столбцам.
Делов-то...
digitalis вне форума Ответить с цитированием
Старый 16.08.2024, 18:28   #4
clone
Новичок
Джуниор
 
Регистрация: 14.08.2024
Сообщений: 6
По умолчанию

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

Код:
function GetValueStr(const param: integer): string;
begin
     case param of
          0: Result:='0,0,0';
          1: Result:='1,1,1';
          2: Result:='1,1,0';
          3: Result:='0,1,1';
          4: Result:='1,0,1';
          5: Result:='0,1,0';
          ...etc
     end;          
end;

Последний раз редактировалось BDA; 16.08.2024 в 19:20.
clone вне форума Ответить с цитированием
Старый 16.08.2024, 18:39   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,659
По умолчанию

Нормально, партизан! Ясности - убавилось в разы.
Но какой бы алгоритм ни был выдумыван - всё равно все варианты матрицы 10*10 ( при условии расчёта одного варианта в течение 1мс ) будут считаться 4.0197 * 10^19 лет. У нашей бедной Вселенной нет такого ресурса времени
-----------
Глубоко вникать в эту бессмысленную задачу не стал, но мне почему-то кажется, что при n=3 будет не 6, а 8 вариантов вектора, а вариантов матрицы - 512 соответственно.

Последний раз редактировалось digitalis; 16.08.2024 в 18:48.
digitalis вне форума Ответить с цитированием
Старый 16.08.2024, 18:42   #6
clone
Новичок
Джуниор
 
Регистрация: 14.08.2024
Сообщений: 6
По умолчанию

ну например если не ошибаюсь у одной линии матрицы 10х10 будет всего 100 вариантов, я же имею ввиду всего два значения 0 и 1, хотя может и побоьше, точно не скажу

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

Последний раз редактировалось BDA; 16.08.2024 в 19:21.
clone вне форума Ответить с цитированием
Старый 16.08.2024, 18:54   #7
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,659
По умолчанию

У матриц нет "линий", есть строки и столбцы. В одной строке (или столбце) матрицы 10*10 будет
1024 вариантов её заполнения 0 и 1.
Не, усё! Я охреневаю! Ухожу с темы, пока не сбрендил.
А наоборот пишется слитно, только чур - об этом никому!

Последний раз редактировалось digitalis; 17.08.2024 в 18:51.
digitalis вне форума Ответить с цитированием
Старый 16.08.2024, 18:58   #8
clone
Новичок
Джуниор
 
Регистрация: 14.08.2024
Сообщений: 6
По умолчанию

...а ну вот! если брать байт то там 8 бит 256 значений значит одна линия матрицы 8х8 будет 256 значений ...эти 256 мне инадо получить в цикле в индексы

Цитата:
Сообщение от digitalis Посмотреть сообщение
У матриц нет "линий", есть строки и столбцы. В одной строке (или столбце) матрицы 10*10 будет
1'048'576 вариантов её заполнения 0 и 1.
Не, усё! Я охреневаю! Ухожу с темы, пока не сбрендил.
А наоборот пишется слитно, только чур - об этом никому!
спасибо учту...

Последний раз редактировалось BDA; 16.08.2024 в 19:22.
clone вне форума Ответить с цитированием
Старый 16.08.2024, 19:19   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,359
По умолчанию

Цитата:
Сообщение от clone Посмотреть сообщение
там 8 бит 256 значений
Можно конвертировать число-индекс в битовую строку желаемой длины:
Код:
function GetValueStr(const param, len: integer): string;
var
  i: integer;
  pStr: PChar;
begin
  SetLength(result, 2 * len - 1);
  pStr := PChar(Pointer(result));
  pStr[0] := Chr(Ord('0') + param and 1);
  for i := 1 to len - 1 do
  begin
    pStr[2 * i - 1] := ',';
    pStr[2 * i] := Chr(Ord('0') + (param shr i) and 1);
  end;
end;

function GetValueIdx(const value: string): integer;
var
  i, len: integer;
begin
  len := length(value);
  result := 0;
  i := len;
  while i >= 0 do
  begin
    result := result shl 1 + Ord(value[i]) - Ord('0');
    Dec(i, 2);
  end;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 16.08.2024, 19:21   #10
clone
Новичок
Джуниор
 
Регистрация: 14.08.2024
Сообщений: 6
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Можно конвертировать число-индекс в битовую строку желаемой длины:
Код:
function GetValueStr(const param, len: integer): string;
var
  i: integer;
  pStr: PChar;
begin
  SetLength(result, 2 * len - 1);
  pStr := PChar(Pointer(result));
  pStr[0] := Chr(Ord('0') + param and 1);
  for i := 1 to len - 1 do
  begin
    pStr[2 * i - 1] := ',';
    pStr[2 * i] := Chr(Ord('0') + (param shr i) and 1);
  end;
end;

function GetValueIdx(const value: string): integer;
var
  i, len: integer;
begin
  len := length(value);
  result := 0;
  i := len;
  while i >= 0 do
  begin
    result := result shl 1 + Ord(value[i]) - Ord('0');
    Dec(i, 2);
  end;
end;
спасибо...пойду разбираться...
clone вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить значения из XML MixanMM Общие вопросы Delphi 0 24.11.2021 13:12
Получить вектор из строки матрицы содержащий наибольший элемент матрицы целых чисел с размерностью 5х6 gavori C++ Builder 3 13.05.2021 03:58
Для квадратного уравнения с целыми коэффициентами определить все различные возможные их значения в диапазоне от -N до N (N задает пользователь) Necker Помощь студентам 8 14.10.2018 19:10
Для заданного n получить все возможные перестановки чисел 1,2..n. lusia7 Помощь студентам 1 02.12.2014 13:35
Найдите все возможные целые значения длин сторон прямоугольного треугольника в диапазоне от 1 до N (Delphi Fon Помощь студентам 5 25.10.2012 11:50