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