Помощь - Поиск - Пользователи - Календарь
Полная версия: Двумерные массивы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
gareld
У вас на форуме нашел нужную задачу помогите разобраться. вот задача и ваш ответ Расположить столбцы матрицы 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
Цитата
1)Как правильно ввести матрицу D 2)Как правильно её отпечатать.

Да также как и обычную матрицу, только вместо mas[i,j] пишешь mas[i][j].
volvo
Массивы. Матрицы. Типичные задачи.
(Как задать матрицу, чтобы быстро поменять местами ее столбцы) - там есть пример ввода матрицы, и пример ее распечатки (процедура Print)

Bokul, ответ неверный... В твоем случае матрица распечатается так, что СТОЛБЦЫ будут расположены горизонтально, а нужно нечто иное...
Gareld
Ну вот получилась какая-то чуш взгляните плиз тыкните в ошибки, не могу я додуматься.
  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
Ты где этот 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
Цитата
Вот правильный:
Я еще раз повторяю: массив СТОЛБЦОВ, а следовательно - код неправильный... Индексы не те... Я ссылку на FAQ для кого привожу? Для себя, что-ли?
Bokul
Цитата
Я еще раз повторяю: массив СТОЛБЦОВ, а следовательно - код неправильный... Индексы не те... Я ссылку на FAQ для кого привожу? Для себя, что-ли?

Я ему и дал код с FAQ, только опять забыл что у него перемешанные индексы unsure.gif
Гость, просто скопируй код с FAQ, там есть все, что тебе нужно.
Gareld
Ну вот помучал и получилась , токо работает с размерностью 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 и т.д т.е не квадратные
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.