Помощь - Поиск - Пользователи - Календарь
Полная версия: матрица
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Римус
Люди , помогите пожалуйста решить задачу.
ЗАДАНИЕ 1. Дана матрица D(n*m). Найти сумму элементов по каждому столб¬цу, разделив её на максимальный диагональный элемент.
program pract11_1;
const n=3;m=3;
type mas=array[1..n,1..m] of integer;
mas2=array[1..n] of integer;
var j,i:integer; a:mas2; d:mas; s:integer; max:mas2;
begin
for i:=1 to n do
for j:=1 to m do
begin
writeln('vvedite ',i,',',j,' element matrici');
read(d[i,j]);
end;
for J:=1 to m do
begin
s:=0;
for i:=1 to n do
s:=s+d[i,j];
a[i]:=s;
end;
for i:=1 to n do
max:=d[1,1];
if d[i,i]>max then max:=d[i,i];
a[i]:=s/max;
writeln('stolbec',i,'stoki',a[i]:8);
end.

Bokul

{$mode TP}//удали если компилируешь не в Fpc
uses crt;
const
n=5;
type
mas=array[1..n,1..n] of integer;

function FindMaxDiag(ar:mas):integer;//находим максимальный элемент, находящийся на диагоналях
var i:byte;
max:integer;
begin
max:=ar[1,1];
for i:=1 to n do begin
if (max<ar[i,i]) then
max:=ar[i,i];
if (max<ar[i,n-i+1]) then
max:=ar[i,n-i+1];
end;
FindMaxDiag:=max;
end;

Function FindSumColumn(ar:mas; col:byte):integer;//считаем сумму элементов колонки
var i:byte;
sum:integer;
begin
sum:=0;
for i:=1 to n do
inc(sum,ar[i,col]);
FindSumColumn:=sum;
end;

var ar:mas;
i,j:byte;
sum,diag:integer;
begin
clrscr;
randomize;
for i:=1 to n do begin
for j:=1 to n do begin
ar[i,j]:=random(9);
write(ar[i,j],' ');
end;
writeln;
end;

diag:=FindMaxDiag(ar);
writeln('Maximum: ',diag);
for i:=1 to n do
writeln('Cloumn ',i,' ',FindSumColumn(ar,i)/diag:0:2);
readln;
end.



#Time#
Я подредактировал твою программу немного.
Сделал числа действительными, так как у тебя деление нужно выполнять - с действительными числами удобнее. Исправил несколько ошибок... и в конце там... в общем посмотри...
Теперь должно всё правильно работать...
Код
program pract11_1;
const n=3;m=3;
type mas=array[1..n,1..m] of real;
     mas2=array[1..n] of real;
var j,i:integer; a:mas2; d:mas; s,max:real;
begin
  for i:=1 to n do
  for j:=1 to m do
    begin
    writeln('vvedite ',i,',',j,' element matrici');
    read(d[i,j]);
    end;
for J:=1 to m do
       begin
       s:=0;
       for i:=1 to n do
       s:=s+d[i,j];
       a[j]:=s;
       end;
max:=d[1,1];
for i:=1 to n do
if d[i,i]>max then max:=d[i,i];
for i := 1 to n do
begin
  a[i]:=a[i]/max;
  writeln('stolbec ',i,' stoki ',a[i]:4:2);
end;
readln;
end.
Bokul
#Time#, не знаю ли это то, что надо автору, но в матрицы, походу, есть две диагонали, и максимальный элемент надо искать среди них..?
#Time#
В условие было написано диагональный элемент...
В общем я это воспринял как максимальный элемент в главной диагонале.
С учетом этого и решил. Ну а если брать максимальный в обоих диагоналях, то к примеру можно добавить после нахождения максимума по главной продолжение нахождения по второстипенной диагонале:
Код
for i:=1 to n do
if d[n-i+1,i]>max then max:=d[n-i+1,i];

А лучше это в одном цикле одновременно делать...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.