Дана прямоугольная матрица размером 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=20var
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:=1to m dofor j:=1to n do
write('a[',i,',',j,']=');
readln(a[i,j]);
end;
s:=0;
for i:=1to m dobeginfor j:=1to n dobegin
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:=1to m dobegin
s:=0; {ты же считаешь сумму для каждой строки отдельно, правда? значит, и обнулять надо для каждой}for j:=1to 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:=1to m dofor j:=1to n dobegin
a[i,j]:=random(100);
end;
for i:=1to m dobeginfor j:=1to n do
write(a[i,j],' ');
writeln;
end;
for i:=1to m dobegin
s[i]:=0;
for j:=1to n dobegin
s[i]:=s[i]+a[i,j];
end;
writeln('сумма ',s[i],' строки=',i);
end;
for i:=1to n do
k[i]:=i;
readln;
m1:=m;
repeat
i1:=0;
for i:=1to m1-1doif s[i]>s[i+1]
thenbegin
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:=1to m do
writeln('сумма ',s[i],' строки=',k[i]);
readln;
end.