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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2015, 22:30   #11
Milanista
Новичок
Джуниор
 
Регистрация: 03.06.2015
Сообщений: 4
По умолчанию

Пример матрицы,

111100000000
000011110000
000000001111
101001000100
010000110001
000110001010
100100100100
010001010010
001010001001

Длина строки - 12
Длина столбца - 9
Вес строки - 4
Вес столбца - 3
В программе я должен задавать эти параметры, и должен получить матрицу в примере этого, с этими параметрами, заранее спасибо,
Модератор без обид, честно не знал как сформулировать вопрос, это всего лишь часть чего то)
Milanista вне форума Ответить с цитированием
Старый 05.06.2015, 10:31   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

теперь всё понятно.

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

но у меня есть подозрение, что далеко не для всех сочетаний весов строки/столбца решение вообще существует!

ну, например, ваш пример
(Длина строки - 12
Длина столбца - 9
Вес строки - 4)
только Вес столбца берём побольше (ну, скажем, 6)
решение есть?


p.s. а если не секрет - откуда подобная задача возникла?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.06.2015, 10:42   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
без повторения циклов
Тоже уточнить не помешает на примере каком-то что имеется ввиду.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.06.2015, 10:45   #14
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
с определенным весом строки, столбца, с длиной строки, столбца, и без повторения циклов,
так с весами разобрались.
Цитата:
- вес строки это количество единиц в строке ( или то же самое - сумма элемнтов строки)
а как насчет циклов?
Цитата:
Строки могут быть одинаковыми ? А столбцы? У вас в примере - три первых столба одинаковые и три последних.
это повторение строк(столбцов)? или что-то другое?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 05.06.2015, 10:47   #15
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Всего 36 единиц надо расставить!
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 05.06.2015, 10:57   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от newerow1989 Посмотреть сообщение
Всего 36 единиц надо расставить!
точно. как же я очевидного не заметил!!!

Задача имеет решение только в том случае,
если
Длина строки * Вес столбца = Длина столбца * Вес строки


что же касается циклов - то, возможно, ожидается рекурсивное решение, ведь рекурсия вполне себе заменяет циклы...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.06.2015, 11:28   #17
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

просто мысль вслух.
берем "простую" матрицу с правильными весами
Код:
1111 0000 0000
1111 0000 0000
1111 0000 0000
0000 1111 0000
0000 1111 0000
0000 1111 0000
0000 0000 1111
0000 0000 1111
0000 0000 1111
для исключения повторов строк/столбцов перемешиваем "одновременно" строки и столбцы
Код:
for i =1 to N
  k:=random(N);
  строка[i]<->строка[k];// обмен местами строк
  repeat m:=random(N); until k<>m;//номер строки должен отличаться от номера столбца 
  столбец[i]<->столбец[m];// обмен местами столбцов
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 05.06.2015 в 11:36.
evg_m вне форума Ответить с цитированием
Старый 05.06.2015, 11:46   #18
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Все-таки без циклов не обойтись!!!
Код:
var p:array of array of byte;
    x,y,i,j,j0,a,b,rand:integer;

procedure pere;
var c,d,z:integer;
begin
   rand:=rand-1;
   If rand<=0 then
      Exit;
   c:=Random(y);
   Repeat
      d:=Random(y);
   Until c<>d;
   For j:=0 to x-1 do
   begin
      z:=p[c,j];
      p[c,j]:=p[d,j];
      p[d,j]:=z;
   end;
   c:=Random(x);
   Repeat
      d:=Random(x);
   Until c<>d;
   For i:=0 to y-1 do
   begin
      z:=p[i,c];
      p[i,c]:=p[i,d];
      p[i,d]:=z;
   end;
   pere;
end;

begin
   Randomize;
   Write('dlina stroki = ');
   Readln(x);
   Write('dlina stolbca = ');
   Readln(y);
   Write('ves stroki = ');
   Readln(a);
   Write('ves stolbca = ');
   Readln(b);
   SetLength(p,x,y);
   j:=0;
   For i:=0 to y-1 do
   begin
      For j0:=j to j+a-1 do
         p[i,j0]:=1;
      If i mod b=b-1 then
         j:=j+a;
   end;
   rand:=Random(x*y);
   pere;
   For i:=0 to y-1 do
   begin
      For j:=0 to x-1 do
         Write(p[i,j],'  ');
      Writeln;
   end;
   Readln;
end.
Сойдет?
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 05.06.2015, 14:40   #19
steps
Заблокирован
 
Регистрация: 04.06.2015
Сообщений: 13
По умолчанию

Цитата:
теперь всё понятно.

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

но у меня есть подозрение, что далеко не для всех сочетаний весов строки/столбца решение вообще существует!

ну, например, ваш пример
(Длина строки - 12
Длина столбца - 9
Вес строки - 4)
только Вес столбца берём побольше (ну, скажем, 6)
решение есть?


p.s. а если не секрет - откуда подобная задача возникла?
Нужно уменьшить один в другой префикс как-то что-то предсказав вес стороки.
алгортм paq, который предсказывает 0 или 1 и уменьшает каждый раз на один вес строки.

Последний раз редактировалось steps; 05.06.2015 в 15:03.
steps вне форума Ответить с цитированием
Старый 05.06.2015, 15:20   #20
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

И еще ограничение.
Допустим, длина строки = n, вес строки = m . Тогда количество различных вариантов строк равно:
= n!/(m!*(n-m)!) ( в комбинаторике это - число сочетаний)
То есть число строк ( а это = длина столбца ) не может быть больше этого числа.
И наоборот.

Например, длина строки = 4, вес строки = 2, тогда максимальное число строк =
= 4!/(2!*(4-2)!) = 6
0011
0101
0110
1001
1010
1100
То есть, столбы здесь не могут быть длиннее 6. Иначе строки будут повторяться.

Кстати, и короче 6 - тоже не всегда можно. Например, если убрать нижнюю строку ( сделать столбы длиной 5), то вес столбов будет разный ( 2 или 3).
0011
0101
0110
1001
1010
type_Oleg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Делфи. перестановка элементов строки и столбца в массиве reijii_nia Помощь студентам 0 20.05.2015 00:13
Включение и исключение строки и столбца из матрицы uHkBu3uTop Паскаль, Turbo Pascal, PascalABC.NET 3 05.03.2012 13:23
Удаление определенных строки и столбца из матрицы X-QuadrO Паскаль, Turbo Pascal, PascalABC.NET 1 19.05.2011 18:17
удаление строки и столбца из матрицы Laplas Помощь студентам 3 08.01.2010 04:41