Определить номер столбца с максимальной суммой и строки с минимальным произведением элементов - Pascal
Формулировка задачи:
Здравствуйте!
Прошу помочь с задачкой...Начало положено, но что-то выводит совсем не то, что хотелось бы...
Исходное условие:Дана двумерная матрица А вещественных чисел.
1. Определить номер столбца, в котором сумма элементов матрицы максимальна и номер строки, в которой произведение элементов минимальна.
2. Упорядочить элементы второго столбца по возрастанию абсолютных значений элементов.
На первом пункте уже застопорилась...Если хотя бы эту часть подправить, дальше доделаю
Спасибо!
Program Use;
const n=10;
var
a:array[1..n,1..n] of integer;
stosum:array[1..n] of integer;//массив для хранения сумм столбцов
i,j,nomer,sum : integer;
begin
Randomize;
for i:=1 to n do
for j:=1 to n do
a[i,j]:= Random(10); //заполняем массив
writeln('*** alphaues is thinking... ***');
for j:=1 to n do
begin
sum:=0;
for i:=1 to n do
sum:=sum+a[i,j]; // находим сумму столбца
stosum[j]:=sum;
end;
nomer:=1;
sum:=stosum[1];
for j:=1 to n do
begin
if sum<stosum[j] then sum:=stosum[j];
nomer:=j;
end;
writeln;
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:5);//выводим массив
writeln;
end;
writeln('*** столбец с максимальной суммой - ',nomer,'-й');
end.Решение задачи: «Определить номер столбца с максимальной суммой и строки с минимальным произведением элементов»
textual
Листинг программы
const
n=10;
var
a:array[1..n,1..n] of real;
i,j,maxcol,minrow:integer;
sum,maxsum,dob,mindob,tmp:double;
begin
Randomize;
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=Random(19)-10+Random(100)/100;//диапазон от -9.99 до 9,99
write(a[i,j]+#9);
end;
writeln;
end;
//1.1
maxsum:=0;
maxcol:=0;
for i:=1 to n do
begin
sum:=0;
for j:=1 to n do
sum:=sum+a[j,i];
if sum>maxsum then
begin
maxcol:=i;
maxsum:=sum;
end;
end;
writeln('Максимальная сумма:'+maxsum+' в '+maxcol+'колонке');
//1.2
mindob:=0;
minrow:=0;
for i:=1 to n do
begin
dob:=1;
for j:=1 to n do
dob:=dob*a[i,j];
if dob<mindob then
begin
minrow:=i;
mindob:=dob;
end;
end;
writeln('Минимальное произведение елементов по строкам:'+mindob+' в '+minrow+'строке');
//сортируем по модулю
for i := 2 to n do
for j:=n downto i do
if abs(a[j-1,2]) > abs(a[j,2]) then
begin
tmp:=a[j-1,2];
a[j-1,2]:=a[j,2];
a[j,2]:=tmp;
end;
//вывод второй после сортировки
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]+#9);
writeln;
end;
readln;
end.
Объяснение кода листинга программы
- Создание переменной
aтипаarray[1..n,1..n] of real;и заполнение её случайными числами от -9.99 до 9.99. - Вычисление максимальной суммы и номера столбца с помощью цикла
for. - Вычисление минимального произведения и номера строки с помощью цикла
for. - Сортировка массива
aпо модулю с помощью двух вложенных цикловfor. - Вывод содержимого массива
aпосле сортировки. - Чтение пользовательского ввода с помощью функции
readln. - Остановка программы с помощью оператора
readln.