Помощь - Поиск - Пользователи - Календарь
Полная версия: Опять матрица :(
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
ksv
Хелп blink.gif
дана матрица 8х8:real, заполнить случайными числами не сложно, но нужно заполнить в определенном порядке:
... 17
9 10...15 16
8 7... 2 1
т.е. змейкой, как сделать подскажите плз.
volvo
Вот так:
const n = 8;
var
  a: array[1 .. n, 1 .. n] of real;
  add: array[false .. true] of integer = (-1, 1);
  i, j, k, count: integer;

begin
  j := n + 1; count := 1;
  for i := n downto i do begin
    inc(j, add[odd(i)]);
    for k := 1 to n do begin
      a[i, j] := count; inc(count);
      inc(j, add[odd(i)]);
    end;
  end;

  for i := 1 to n do begin
    for j := 1 to n do
      write(a[i, j]:4:0);
    writeln;
  end;
  readln;
end.
ksv
может быть попроще можно сделать, сортировкой там какой нибудь?
(на всякий случай задание такое:
матрица 8х8 нужно заполнить случайными числами от -7 до 7 в следующем порядке- первая строка слева на право по убыванию , вторая строка справа налево по убыванию, третья слева на право по убыванию и т.д.. т.е в ячейке A[1,1] находится максимум в A[8,8] минимум матрицы, затем мтрицу отсортировать по убыванию сумм по строкам.
Не понятен мне сам алгоритм заполнения blink.gif , сначала нужно максимум найти? вроде бы напрашивается сортировка пузырьковая? как отсортировать матрицу пузырьковой сортировкой, везде в примерах сортировка массива и усё wacko.gif
volvo
Задание надо приводить в первом посте, а не "потом как нибудь"!

Я тебе привел САМОЕ простое решение, соответствующее приведенному тобой заданию. Если тебя интересует с сортировкой - ищи по форуму, есть тема о "Сквозной сортировке"... Только не надейся, что там будет проще.
ksv
Как можно отсортировать строки матрицы по убыванию их сумм?

т.е. нужно расположить строки в матрице по убыванию их сумм, подскажите плз.
Сонмор
Можно сделать с двумя дополнительными массивами
Const n=8;
Var A:array[1..n,1..n] of real;Sum,Temp:Array[1..n]of Real;
    i,j:integer;tmp:Real;
Begin
 For i:= 1 to n do
  For j:=1 to n do
    Sum[i]:=Sum[i]+A[i,j];
 for i:=2 to N do
  for j:=N downto i do
     if Sum[j-1]<Sum[j] then
      begin
       tmp:=Sum[j-1];
       Sum[j-1]:=Sum[j];
       Sum[j]:=tmp;
       Temp:=A[j-1];
       A[j-1]:=A[j];
       A[j]:=Temp;
      end;
End.

Но это лишняя память и время выполнения. Поэтому лучше всё-же сквозной сортировкой.
klem4
Ну и зачем это нужно ? Поиск и FAQ не для красоты сделаны между прочим, задача решалась неоднократно.

Пишешь ф-ю которая возвращает сумму строки, потом смотришь как менять строки/столбцы тут : Как задать матрицу чтобы ...

И используешь любою сортировку от сюда : FAQ : Методы сортировок, меняя строки, если не выполняется Sum(i) >= Sum(i+1).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.