Дана прямоугольная матрица размером mxn, содержащая вещественные числа. Определить сумму элементов в каждой строке матрицы. Упорядочить номера строк по возрастанию значений найденных сумм с помощью алгоритма сортировки методом пузырька. Вывести упорядоченный список номеров строк и соответствующих им сумм. (Матрицу заполнить случайными числами)
klem4
21.12.2006 21:29
В чем конкретно проблема ? Задача и подобные ей по сортировкам строк/столбоцов решались десятки раз
в том то идело, что не получается... Я нашла сумму в каждой строке, затем я создаю два массива: 1-й номера строк, 2-й соответствующая им сумма, а потом у меня ничего с сортировкой не получается..
мисс_граффити
22.12.2006 0:18
покажи код: что у тебя не получается... правда, зачем создавать отдельный массив номеров - не понимаю
соня
22.12.2006 0:27
мне же надо вывести массив номеров строк... вот я его и создаю.. если честно, то я уже совсем запуталась...
мисс_граффити
22.12.2006 1:22
по-моему, проще работать с одним массивом, состоящим из 2 строк: строка с номерами и строка с суммами. хотя, наверное, не сильно принципиально.
и все же - покажи код программы.
соня
23.12.2006 1:01
const max_ind=20 var a:array[1..max_ind,1..max_ind] of integer; s,m,n,i,j:integer; sum:array[1.. ? ] or integer; {здесь постоянно выдает ошибку} ind:array[1..max_ind] of integer; c:integer; {переменная для промежуточного хранения} i1:integer; {индекс последнего обмена} begin write('Введите кол-во строк матрицы (m<=',max_ind,') m='); readln(m); write('Введите кол-во столбцов матрицы (n<=',max_ind,') n='); readln(n); for i:=1 to m do for j:=1 to n do write('a[',i,',',j,']='); readln(a[i,j]); end; s:=0; for i:=1 to m do begin for j:=1 to n do begin s:=a[i,j]+s; sum[i]:=s; {создаю массив из суммы} ind[i]:=i; {массив из соответствующих сумме номеров строк} end;
????????
а дальше я не знаю.... пытаюсь отсортировать, но либо ошибки либо не сортирует...
М
не забывай использовать теги мисс_граффити
мисс_граффити
23.12.2006 1:26
смотри сразу:
sum:array[1.. ? ] or integer;
что это за вопросик? наверное, должно быть max_ind видимо, из-за него ошибка и возникает
теперь ошибка смысловая:
for i:=1 to m do begin s:=0; {ты же считаешь сумму для каждой строки отдельно, правда? значит, и обнулять надо для каждой} for j:=1 to n do s:=a[i,j]+s; {зачем тебе дополнительная переменная s? считала бы сразу sum[i]} sum[i]:=s; {а зачем эти действия делать внутри цикла? достаточно один раз сохранять} ind[i]:=i; end;
соня
23.12.2006 1:37
здесь (sum:array[1.. ? ] or integer;) я поставила вопросик чтобы спросить, что тут надо писать, потому что я вставляю max_ind и у меня выдает ошибку... с подсчетом суммы в строках я исправлю ошибку, а вот дальше как сортировать?
volvo
23.12.2006 1:42
Может, все-таки:
Цитата
sum:array[1.. max_ind] oF integer;
?
соня
23.12.2006 2:05
у меня в программе of написано, это тут я ошиблась...
мисс_граффити
23.12.2006 2:12
ты что, заново набираешь?! просто щелкни правой кнопкой по сохраненному pas файлу->открыть с помощью->блокнот и копируй )
по-прежнему не сортирует? покажи, как ты сортировала. сложно искать ошибки, не видя кода
соня
29.12.2006 1:16
вот программа:
const max_ind=30; var a:array[1..max_ind,1..max_ind] of integer; m,n,i,j,m1,i1,t:integer; s,k:array[1..max_ind] of integer; begin write('введите кол-во строк матрицы m='); readln(n); write('введите кол-во столбцов матрицы n='); readln(m); randomize; for i:=1 to m do for j:=1 to n do begin a[i,j]:=random(100); end; for i:=1 to m do begin for j:=1 to n do write(a[i,j],' '); writeln; end; for i:=1 to m do begin s[i]:=0; for j:=1 to n do begin s[i]:=s[i]+a[i,j]; end; writeln('сумма ',s[i],' строки=',i); end; for i:=1 to n do k[i]:=i; readln; m1:=m; repeat i1:=0; for i:=1 to m1-1 do if s[i]>s[i+1] then begin t:=s[i]; s[i]:=s[i+1]; s[i+1]:=t; i1:=i; t:=k[i]; k[i]:=k[i+1]; k[i+1]:=t; end; m1:=i1; until i1=0; writeln('массив после сортировки'); for i:=1 to m do writeln('сумма ',s[i],' строки=',k[i]); readln; end.