Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ масив

Автор: Helm 2.12.2009 0:37

Всем привет! )

И так вот такая у меня трабла:
Есть числа (от 1 до 10), нужно заполнить масив таким образом чтобы он виглядал вот так:

----------------------
№ | | | | | | |
----------------------
1 | 1| | | | | |
2 | 1|2| | | | |
3 | 1|3| | | | |
4 | 1|4| | | | |
5 | 1|5| | | | |
6 | 1|2|3| | | |
7 | 1|2|4| | | |
8 | 1|2|5| | | |
9 | 1|3|4| | | |
10 | 1|3|5| | | |
11 | 1|4|5| | | |
12 | 1|2|3|4| | |
13 | 1|2|3|5| | |
14 | 1|2|4|5| | |
15 | 1|3|4|5| | |
16 | 1|2|3|4|5| |
... |..|..|..|..|..|..|
---------------------

то есть идет выборка (хз как её назвать)
сначала по два елемента ([1,2], [1,3], [1,4], [1,5])
потом по три ([1,2,3], [1,2,4], [1,2,5], [1,3,4], [1,3,5], [1,4,5])
потом по 4 ...
потом по 5 ...
и так до 10

p.s. (ето мне нужно для реализации алгоритма для решения задачи о максимальном потоке методом сечения)

Автор: Helm 2.12.2009 5:18

procedure Gen_ver_R;
var x,i,j,k,y,count :integer;
begin
// 1-2
masGeneral[1,1] := 1; // вершина 1 , ( masGeneral[1..20000,1..10] - главная матрица )
count := 2;
x:=2;
for i:=x to 5 do
begin
masGeneral[count,1] := 1;
masGeneral[count,2] := i;
Inc(count); //каунт для рядків
// SetLength(masGeneral, count, 10);
end;

//1-3
x:=3;
for i:=2 to 4 do
begin
for j:=x to 5 do
begin
masGeneral[count,1] := 1;
masGeneral[count,2] := i;
masGeneral[count,3] := j;
Inc(count);
end;
Inc(x);
end;

//1-4
x:=3;
y:=4;
for i:=2 to 3 do
begin
for j:=x to 4 do
begin
if y = 6 then Dec(y); // для відображ. 1.3.4.5 так як у стає = 6 то ми dec(y)
for k:=y to 5 do
begin
masGeneral[count,1] := 1;
masGeneral[count,2] := i;
masGeneral[count,3] := j;
masGeneral[count,4] := k;
Inc(count);
end;
Inc(y);
end;
Inc(x);
end;
end;


Результат:

№ | | | | | | |
----------------------
1 | 1| | | | | |
2 | 1|2| | | | |
3 | 1|3| | | | |
4 | 1|4| | | | |
5 | 1|5| | | | |
6 | 1|2|3| | | |
7 | 1|2|4| | | |
8 | 1|2|5| | | |
9 | 1|3|4| | | |
10 | 1|3|5| | | |
11 | 1|4|5| | | |
12 | 1|2|3|4| | |
13 | 1|2|3|5| | |
14 | 1|2|4|5| | |
15 | 1|3|4|5| | |


Автор: Lapp 2.12.2009 16:06

Цитата(Helm @ 1.12.2009 20:37) *
сначала по два елемента ([1,2], [1,3], [1,4], [1,5])
потом по три ([1,2,3], [1,2,4], [1,2,5], [1,3,4], [1,3,5], [1,4,5])
потом по 4 ...
потом по 5 ...
и так до 10

Не очень ясно, как ты предполагаешь сделать до 10, если у тебя увеличение в столбце идет только до 5.

Автор: -Volvo- 2.12.2009 17:27

Цитата
то есть идет выборка (хз как её назвать)
Вообще-то это называется "Подмножество". Алгоритм генерации подмножеств для заданного множества есть у нас в FAQ-е, в разделе "Комбинаторика". Но там генерация происходит не в том порядке, что тебе надо, так что после заполнения массив еще надо будет отсортировать. В принципе - это не должно занять много времени, для 10 чисел всего 210 = 1024 элемента массива.

Автор: Mavra 2.12.2009 21:47

Тоже вопрос по массиву.
есть матрица квадратная. размерность 2*n
поменять по часовой стрелке ее блоки размерами n*n
подскажите в чем ошибка


procedure Smena(var A,B:matrix; n,m:integer);
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to n do
B[i,j+n]:=A[i,j];
for i:=1 to n do
for j:=n+1 to m do
B[i+n,j]:=A[i,j];
for i:=n+1 to m do
for j:=n+1 to m do
B[i,j-n]:=A[i,j];
for i:=n+1 to m do
for j:=1 to n do
B[i-n,j]:=A[i,j];
end;


Автор: Lapp 2.12.2009 22:00

Mavra, тебе нравится, когда ты разговариваешь с кем-то, тут подходит неизвестно кто, говорит "во, КСТАТИ!" - и начинает совсем про другое? Ты понимаешь, что ты мешаешь разговору в этой теме? нет?
Ознакомься с Правилами Форума (ссылка вверху страницы), пожалуйста.

Автор: Helm 3.12.2009 0:16

Цитата(Lapp @ 2.12.2009 13:06) *

Не очень ясно, как ты предполагаешь сделать до 10, если у тебя увеличение в столбце идет только до 5.



то я завтыкал (по заданию у меня 10 , а в примере 5)

Добавлено через 4 мин.
Цитата(-Volvo- @ 2.12.2009 14:27) *

Вообще-то это называется "Подмножество". Алгоритм генерации подмножеств для заданного множества есть у нас в FAQ-е, в разделе "Комбинаторика". Но там генерация происходит не в том порядке, что тебе надо, так что после заполнения массив еще надо будет отсортировать. В принципе - это не должно занять много времени, для 10 чисел всего 210 = 1024 элемента массива.



я просто я не точно обяснил.... просто 1,2,3 и 1,3,2 - ето одинаковы выражения , тоесть суть в том что бы заполнить масив и учесть вот такой нюанс. unsure.gif

Добавлено через 2 мин.
Всем спс, я уже усё понял)