вторник, 9 июня 2009 г.

переставить местами строки массива по возрастанию сумм строк

Помогите пожалуйста решить задачу по информатике.
Переставить мастами строки массива А так, чтобы суммы элементов строк оказались расположены в порядке возрастания n=6 m=5


решение на Pascal


const
N = 5;
M = 6;

var
a: array [0..N-1, 0..M-1] of integer;
sum: array [0..N-1] of integer; {тут будут храниться суммы строк}
temp: array [0..M-1] of integer; {тут будем хранить }
i: integer;
j: integer;
k: integer;
begin
{инициалицируем массив случайными числами}
for i:=0 to N-1 do
for j:=0 to M-1 do
a[i, j] := random(100);


{подсчитываем суммы строк}
for i:=0 to N-1 do begin
sum[i] := 0; {сначала сумма равна нулю}
for j:=0 to M-1 do sum[i] := sum[i] + a[i, j];
end;

{выводим на экран начальные данные}
for i:=0 to N-1 do begin
for j:=0 to M-1 do write(a[i, j]:3);
writeln(': ', sum[i]:3);
end;
writeln;

{сортируем массив по суммам сетодом пузырька}
for i:=0 to N-1-1 do begin
for j:=i+1 to N-1 do begin
if sum[j] < sum[i] then begin
{меняем местами строки посредством temp - наш пузырёк}
for k:=0 to M-1 do temp[k] := a[i, k];
for k:=0 to M-1 do a[i, k] := a[j, k];
for k:=0 to M-1 do a[j, k] := temp[k];
{меняем местами суммы в массиве sum посредством k - лень заводить новую переменную}
k := sum[i];
sum[i] := sum[j];
sum[j] := k;
end;
end;
end;

{выводим на экран результат}
for i:=0 to N-1 do begin
for j:=0 to M-1 do write(a[i, j]:3);
writeln(': ', sum[i]:3);
end;
writeln;
end.


с форматироваминем и рабочий пример можно скачать здесь

на VBA

в процессе написания...

Комментариев нет:

Отправить комментарий