Помощь - Поиск - Пользователи - Календарь
Полная версия: Двумерные массивы
Форум «Всё о Паскале» > 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 и т.д т.е не квадратные
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.