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

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

Форум «Всё о Паскале» _ Задачи _ Двумерные массивы

Автор: gareld 26.11.2006 0:18

У вас на форуме нашел нужную задачу помогите разобраться. вот задача и ваш ответ Расположить столбцы матрицы D[M, N] в порядке возрастания элементов k-ой строки (1 ≤ k ≤ М). ОТВЕТ:

 Const
size_col = 6; { число столбцов }
size_row = 8; { число строк }
Type
TColumn = Array[1 .. size_row] Of Integer;
TMatrix = Array[1 .. size_col] Of TColumn;
Var
k: Integer;

Procedure Bubble(Var mx: TMatrix; n: integer);
Var
i, j: Integer;
T: TColumn;
Begin

For i := 1 To n Do
For j := n DownTo i+1 Do
If mx[Pred(j)][k] > mx[j][k] Then Begin
T := mx[Pred(j)]; mx[Pred(j)] := mx[j]; mx[j] := T
End
End;

var
D: TMatrix;

begin
{ вводишь матрицу: D }
{ вводишь номер строки: K }

Bubble(D, size_col);

{ распечатываешь матрицу D }
end.


Вопрос: 1)Как правильно ввести матрицу D 2)Как правильно её отпечатать.
За любые ответы спасибо.

Автор: Bokul 26.11.2006 0:29

Цитата
1)Как правильно ввести матрицу D 2)Как правильно её отпечатать.

Да также как и обычную матрицу, только вместо mas[i,j] пишешь mas[i][j].

Автор: volvo 26.11.2006 0:33

http://forum.pascal.net.ru/index.php?s=&showtopic=2694&view=findpost&p=38100
(Как задать матрицу, чтобы быстро поменять местами ее столбцы) - там есть пример ввода матрицы, и пример ее распечатки (процедура Print)

Bokul, ответ неверный... В твоем случае матрица распечатается так, что СТОЛБЦЫ будут расположены горизонтально, а нужно нечто иное...

Автор: Gareld 26.11.2006 1:47

Ну вот получилась какая-то чуш взгляните плиз тыкните в ошибки, не могу я додуматься.

  const
size_row = 10; { число строк }
size_col = 10; { число столбцов }

type
trow = array[1 .. size_row] of integer;
tmatrix = array[1 .. size_col] of trow;

var k:integer;

procedure print(var mx: tmatrix; n:integer);
Var
i, j: Integer;
T: Trow;
Begin

For i := 1 To n Do begin
For j := n DownTo i+1 Do
If mx[Pred(j)][k] > mx[j][k] Then Begin
T := mx[Pred(j)]; mx[Pred(j)] := mx[j]; mx[j] := T ;
write(mx[j][i]:4);
end; { <<< Обратите внимание на индексы !!! }
writeln
End
End;

var
mx: tmatrix;
i, j: integer;

begin
{ Заполнение матрицы }
for i := 1 to size_row do
for j := 1 to size_col do
mx[i][j] := random(100);

{ Матрица до обмена }
writeln('before:'); print(mx,size_col);

{ Обмен столбцов }


{ Матрица после обмена }
writeln('after:'); print(mx,size_col);
readln;
end.

Автор: Bokul 26.11.2006 2:04

Ты где этот print откопал? Вот правильный:


procedure print(var mx: tmatrix);
var i, j: integer;
begin
for i := 1 to size_row do
begin
for j := 1 to size_col do
write(mx[i][j]:4);
writeln
end;
end;


Автор: volvo 26.11.2006 2:09

Цитата
Вот правильный:
Я еще раз повторяю: массив СТОЛБЦОВ, а следовательно - код неправильный... Индексы не те... Я ссылку на FAQ для кого привожу? Для себя, что-ли?

Автор: Bokul 26.11.2006 2:21

Цитата
Я еще раз повторяю: массив СТОЛБЦОВ, а следовательно - код неправильный... Индексы не те... Я ссылку на FAQ для кого привожу? Для себя, что-ли?

Я ему и дал код с FAQ, только опять забыл что у него перемешанные индексы unsure.gif
Гость, просто скопируй код с FAQ, там есть все, что тебе нужно.

Автор: Gareld 26.11.2006 16:02

Ну вот помучал и получилась , токо работает с размерностью 5*5 (с такой которая введена в const) как это исправить и какие ошибки вы найдете

  Const
size_col = 5; { число столбцов }
size_row = 5; { число строк }
Type
TColumn = Array[1 .. size_row] Of Integer;
TMatrix = Array[1 .. size_col] Of TColumn;
Var
k: Integer;
n,m:integer;
Procedure Bubble(Var mx: TMatrix; n: integer);
Var
i, j: Integer;
T: TColumn;
Begin

For i := 1 To n Do
For j := n DownTo i+1 Do
If mx[Pred(j)][k] > mx[j][k] Then Begin
T := mx[Pred(j)]; mx[Pred(j)] := mx[j]; mx[j] := T
End
End;

procedure print(var d: tmatrix);
var i, j: integer;
begin
for i := 1 to n do
begin
for j := 1 to m do
write(d[j][i]:4); { <<< Обратите внимание на индексы !!! }
writeln
end;
end;
var
D: TMatrix;
i,j:integer;
begin
randomize;

readln(m); readln(n);
{ вводишь матрицу: D }

for i:=1 to n do begin
for j:=1 to m do begin
d[i][j]:=random(10);
end;
end;
print(d);
{ вводишь номер строки: K }
readln(k);
Bubble(D, size_col);
print(d);
{ распечатываешь матрицу D }
readln;
end.

Помогите к понедельнику нужно сдать!
И еще не корректно работает с размерностью и (постоянными ) = 9*3 2*4 и т.д т.е не квадратные