Для произвольной матрицы столбец с наименьшей суммой разделить на среднее значение недиагональных элементов - Turbo Pascal

Формулировка задачи:

Само задание: Для произвольной матрицы столбец с наименьшей суммой разделить на среднее значение недиагональных элементов. Есть 2 кода. Первый не работает из-за ошибки "Type mismatch" при делении a[i,min]:=a[i,min]/round(sr); . Я решил избавиться от не соответствия данных путем преобразования их из integer в real (См. код #2), но тут возникает другая проблема при подборе рандомом берется число от 0 до 19 и отнимается 9 и получается не отрицательное число, а число которое идет по обратному кругу, т.е. вместо -1 идет 65535, вместо -2 идет 65534 и т.д. Помогите решить проблему, головая уже гудит....(
uses crt;
const n=5;
var a: array[1..n,1..n] of integer;
 i,j,k,min: byte;
 b: array[1..n] of integer;
 sr: real;
begin
 randomize;
 clrscr;
 writeln('ishodnii massiv: ');
 for i:=1 to n do
  begin
   for j:=1 to n do
    begin
     a[i,j]:=random(19)-9;
     write(a[i,j]:4);
    end;
   writeln;
  end;
 writeln;
 for j:=1 to n do
  for i:=1 to n do
   b[j]:=b[j]+a[i,j];
 min:=1;
 for j:=2 to n do
  if b[j]<b[min] then min:=j;
 for i:=1 to n do
  for j:=1 to n do
   if (i<>j) or (j<>n-i+1) then
    begin
     sr:=sr+a[i,j];
     inc(k);
    end;
 sr:=sr/k;
 writeln('massiv summ stolbcov: ');
 for i:=1 to n do
  write(b[i]:4);
 writeln(^j);
 writeln('srednee arifmeti4eskoe = ',sr:5:2,^j);
 for i:=1 to n do
  a[i,min]:=a[i,min]/round(sr);
 writeln('rezul'tat: ');
 for i:=1 to n do
  begin
   for j:=1 to n do
    write(a[i,j]:4);
   writeln;
  end;
end.
uses crt;
const n=5;
var a: array[1..n,1..n] of real;
 i,j,k,min: byte;
 b: array[1..n] of real;
 sr: real;
begin
 randomize;
 clrscr;
 writeln('ishodnii massiv: ');
 for i:=1 to n do
  begin
   for j:=1 to n do
    begin
     a[i,j]:=random(19)-9;
     write(a[i,j]:7:0);
    end;
   writeln;
  end;
 writeln;
 for j:=1 to n do
  for i:=1 to n do
   b[j]:=b[j]+a[i,j];
 min:=1;
 for j:=2 to n do
  if b[j]<b[min] then min:=j;
 for i:=1 to n do
  for j:=1 to n do
   if (i<>j) or (j<>n-i+1) then
    begin
     sr:=sr+a[i,j];
     inc(k);
    end;
 sr:=sr/k;
 writeln('massiv summ stolbcov: ');
 for i:=1 to n do
  write(b[i]:7:0);
 writeln(^j);
 writeln('srednee arifmeti4eskoe = ',sr:5:2,^j);
 for i:=1 to n do
  a[i,min]:=a[i,min]/round(sr);
 writeln('rezultat: ');
 for i:=1 to n do
  begin
   for j:=1 to n do
    write(a[i,j]:7:0);
   writeln;
  end;
  readln;
end.

Код к задаче: «Для произвольной матрицы столбец с наименьшей суммой разделить на среднее значение недиагональных элементов - Turbo Pascal»

textual
uses crt;
const n=5;
var a: array[1..n,1..n] of real;
    i,j,k,min: byte;
    b: array[1..n] of real;
    sr: real;
begin
randomize;
clrscr;
writeln('ishodnii massiv: ');
for i:=1 to n do
 begin
  for j:=1 to n do
   begin
    a[i,j]:=-9+19*random;
    write(a[i,j]:7:2);
   end;
  writeln;
 end;
for j:=1 to n do
for i:=1 to n do
b[j]:=b[j]+a[i,j];
min:=1;
for j:=2 to n do
if b[j]<b[min] then min:=j;
for i:=1 to n do
for j:=1 to n do
 if (i<>j) or (j<>n-i+1) then
  begin
   sr:=sr+a[i,j];
   inc(k);
  end;
sr:=sr/k;
writeln('massiv summ stolbcov: ');
for i:=1 to n do
write(b[i]:7:2);
writeln;
writeln('mimimalnaya summa=',b[min]:0:2,' v stolbce ',min);
writeln('srednee arifmeti4eskoe = ',sr:0:2);
for i:=1 to n do
a[i,min]:=a[i,min]/sr;
writeln('rezultat: ');
for i:=1 to n do
 begin
  for j:=1 to n do
  write(a[i,j]:7:2);
  writeln;
 end;
end.
Эта работа вам не подошла?

Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.

7   голосов, оценка 3.857 из 5


СДЕЛАЙТЕ РЕПОСТ
Похожие ответы