Другие языки программирования и технологии
Дана целочисленная прямоугольная матрица переставить строки матрицы по возрастанию сумм положительных элементов
Помогите написать код на Pascal!
program N76886979;
var
a: array of array of smallint;
n, m, i, j, imin: byte;
t: pointer;
begin
randomize;
n := random(9) + 2;
m := random(15) + 1;
setlength(a, n, m + 1);
writeln('Дана матрица ', n, 'x', m, ':');
for i := Low(a) to High(a) do
begin
for j := 1 to m do
begin
a[i, j] := random(199) - 99;
write(a[i, j]:4)
end;
writeln
end;
{Получение сумм положительных элементов в строках}
for i := Low(a) to High(a) do
begin
a[i, 0] := 0;
for j := 1 to m do
if a[i, j] > 0 then
inc(a[i, 0], a[i, j])
end;
{Сортировка строк матрицы методом простого выбора}
for i := Low(a) to High(a) - 1 do
begin
imin := i;
for j := i + 1 to High(a) do
if a[j, 0] < a[imin, 0] then
imin := j;
if i <> imin then
begin
t := a[imin];
a[imin] := a[і];
a[і] := t
end
end;
{Вывод результата}
writeln(#13#10'Преобразованная матрица: ');
for i := Low(a) to High(a) do
begin
for j := 1 to m do
write(a[i, j]:4);
writeln('Summa = ':12, a[i, 0]);
end;
readln;
finalize(a)
end.
Решение задачи "в лоб" приводит к очень нерациональному расходу вычислительных мощностей. Неоднократно придётся считать суммы элементов в одних и тех же строках и менять местами элементы.
Поэтому суммы считаются только один раз и записываются в нулевой столбец, который не используется для элементов матрицы.
Также используется тот факт, что у динамических массивов по первой размерности находится одномерный массив указателей на одномерные массивы строк элементов. И для обмена местами строк не каждый элемент перемещается через "пустое ведро", а указатели на строки.
P.S. Вы не указали требуемый вам диалект Паскаля, а эта программа понравится далеко не каждому компилятору.
var
a: array of array of smallint;
n, m, i, j, imin: byte;
t: pointer;
begin
randomize;
n := random(9) + 2;
m := random(15) + 1;
setlength(a, n, m + 1);
writeln('Дана матрица ', n, 'x', m, ':');
for i := Low(a) to High(a) do
begin
for j := 1 to m do
begin
a[i, j] := random(199) - 99;
write(a[i, j]:4)
end;
writeln
end;
{Получение сумм положительных элементов в строках}
for i := Low(a) to High(a) do
begin
a[i, 0] := 0;
for j := 1 to m do
if a[i, j] > 0 then
inc(a[i, 0], a[i, j])
end;
{Сортировка строк матрицы методом простого выбора}
for i := Low(a) to High(a) - 1 do
begin
imin := i;
for j := i + 1 to High(a) do
if a[j, 0] < a[imin, 0] then
imin := j;
if i <> imin then
begin
t := a[imin];
a[imin] := a[і];
a[і] := t
end
end;
{Вывод результата}
writeln(#13#10'Преобразованная матрица: ');
for i := Low(a) to High(a) do
begin
for j := 1 to m do
write(a[i, j]:4);
writeln('Summa = ':12, a[i, 0]);
end;
readln;
finalize(a)
end.

Решение задачи "в лоб" приводит к очень нерациональному расходу вычислительных мощностей. Неоднократно придётся считать суммы элементов в одних и тех же строках и менять местами элементы.
Поэтому суммы считаются только один раз и записываются в нулевой столбец, который не используется для элементов матрицы.
Также используется тот факт, что у динамических массивов по первой размерности находится одномерный массив указателей на одномерные массивы строк элементов. И для обмена местами строк не каждый элемент перемещается через "пустое ведро", а указатели на строки.
P.S. Вы не указали требуемый вам диалект Паскаля, а эта программа понравится далеко не каждому компилятору.
Похожие вопросы
- В одномерном массиве, состоящем из n вещественных элементов, вычис- лить: 39 1) сумму положительных элементов массив
- задачка PAscal. найти сумму положительных элементов массива, расположенных до минимального элемента этого массива
- Задан массив размером 30 элементов. Подсчитать число и сумму положительных элементов в нем. В Паскале. через рандом чисел !
- C++ -Дана целочисленная матрица
- Нужен код программы для Осуществления циклического сдвига элементов прямоугольной матрицы на n элементов вправо в с#
- как решить? Найти сумму элементов прямоугольной матрицы X(n,m), находящихся по периметру этой матрицы. язык: С++
- дана целочисленная матрица размера mxm. определить числа b1,b2,...bm,каждое из которых равно количеству четных элементов
- С++ Передать в функцию квадратную матрицу и вычислить сумму элементов на ее главной диагонали и вернуть эту сумму.
- Дана символьная квадратная матрица...Ваши идеи
- Дан целочисленный двумерный массив, размерности n х m. Заменить все отрицательные числа нулем