Помогите пожалуйста решить задачку...!!! Очень-очень надо!!!
Дана прямоугольная матрица размером mxn, содержащая вещественные числа. Определить сумму элементов в каждой строке матрицы. Упорядочить номера строк по возрастанию значений найденных сумм с помощью алгоритма сортировки методом пузырька. Вывести упорядоченный список номеров строк и соответствующих им сумм. (Матрицу заполнить случайными числами)
В чем конкретно проблема ? Задача и подобные ей по сортировкам строк/столбоцов решались десятки раз
Поиск + http://forum.pascal.net.ru/index.php?showtopic=2694
+ http://forum.pascal.net.ru/index.php?showtopic=3065
в том то идело, что не получается... Я нашла сумму в каждой строке, затем я создаю два массива: 1-й номера строк, 2-й соответствующая им сумма, а потом у меня ничего с сортировкой не получается..
покажи код: что у тебя не получается... правда, зачем создавать отдельный массив номеров - не понимаю
мне же надо вывести массив номеров строк... вот я его и создаю..
если честно, то я уже совсем запуталась...
по-моему, проще работать с одним массивом, состоящим из 2 строк: строка с номерами и строка с суммами. хотя, наверное, не сильно принципиально.
и все же - покажи код программы.
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;
М | не забывай использовать теги мисс_граффити |
смотри сразу:
sum:array[1.. ? ] or integer;
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;
здесь (sum:array[1.. ? ] or integer;) я поставила вопросик чтобы спросить, что тут надо писать, потому что я вставляю max_ind и у меня выдает ошибку...
с подсчетом суммы в строках я исправлю ошибку, а вот дальше как сортировать?
Может, все-таки:
у меня в программе of написано, это тут я ошиблась...
ты что, заново набираешь?!
просто щелкни правой кнопкой по сохраненному pas файлу->открыть с помощью->блокнот и копируй )
по-прежнему не сортирует?
покажи, как ты сортировала. сложно искать ошибки, не видя кода
вот программа:
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.
Вот в этом месте вместо n надо m ?
Обнуляет при m<>n
Ты в количестве строк и столбцов запуталась... Причем с самого начала:
точно... большое спасибо!!!!!