Помощь - Поиск - Пользователи - Календарь
Полная версия: матрица
Форум «Всё о Паскале» > 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];

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