Pascal. Проверить, является ли код оптимальным и правильным решением задачи, решить...

0 голосов
47 просмотров

Pascal. Проверить, является ли код оптимальным и правильным решением задачи, решить проблему вывода при отсутствии "специальных элементов"
Задача: дана вещественная матрица А размера NxM, вывести значение и индексы "особого элемента" (считается особым, если он больше суммы остальных элементов его столбца).
Описание: const nmax=10; mmax=10;
type mas=array[1..nmax,1..mmax] of real;
var n,m,j,i:integer; (где n и m - размерность, не превышающая nmax, mmax соответственно)
a:mas;

function sum(a:mas; j:integer):real;
var i:integer;
s:real;
begin
s:=0;
for i:=1 to n do
s:=s+a[i,j];
sum:=s;
end;

begin
writeln ('Специальные элементы:');
for j:=1 to m do
for i:=1 to n do
if a[i,j]>sum(a,j)-a[i,j] then writeln ('a[',i,',',j,']=',a[i,j]);
end.


Информатика (290 баллов) | 47 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Программа не оптимальна ни по количеству операций, ни по алгоритму.  Решение в прикрепленном файле.


Скачать вложение Текст (TXT)
(9.7k баллов)
0

Предложенный вариант применим, если все элементы массива положительные.  В случае, если есть и положительные, и отрицательные, то функция   function sum(a:mas; j:integer):real;
остается в первоначальном виде, обработка массива меняется.   

0

{ обработка массива }  
  pr:=0;
  for j:=1 to m do
  begin
    k:=sum(a,j); 
    for i:=1 to n do
    begin
      if a[i,j]>k-a[i,j] then
      begin
        if pr=0 then 
        begin
          writeln('особые элементы');
          pr:=1;    
        end;
        writeln ('a[',i,',',j,']=',a[i,j]);
      end;
    end;
  end;  
  if pr=0 then writeln('особых элементов нет');
end.
При этом переменная k, описанная как integer, описывается как real;