Главная » Статьи » Задачи по программированию

Прямоугольная матрица

Если первая строка прямоугольной матрицы имеет максимальное количество отрицательных элементов, проверить, как изменится среднее арифметическое всей матрицы, если заменить все отрицательные элементы их модулями.

Решение: 
Задача будет разделена на основную программу и модуль
 
Основное тело программы
 
program Project3;
uses
  SysUtils,
  Unit2 in 'Unit2.pas';
Var A:matr;
      L:inmass;
      i,j:integer;
      s1,s2:real;
begin
 for i := 1 to n do
 for j := 1 to m do
 readln(A[i,j]);
 Negative(A,L);
 if Maximum(L) then
  Begin
  s1 := SrArifm(A);
  write('Среднее арифметическое исходной матрицы: ');
  writeln(s1:5:3);
  Replacement(A);
  s2 := SrArifm(A);
  write('Среднее арифметическое положительно определенной матрицы: ');
  writeln(s2:5:3);
  write('Разность: ');
  writeln((s2 - s1):5:3)
  end;
readln;
END.
 
Далее создаем модуль
в нем пишем следующее
 
unit Unit2;
interface
Const n = 3; m = 4;
Type matr = array[1..n,1..m] of real;
 inmass = array[1..n] of integer;
procedure Negative(A:matr; Var L:inmass);  {записывает в целочисленный массив L количество отрицательных элементов по строкам}
function Maximum(L:inmass):boolean;  {возвращает true, если L[1] - максимален}
function SrArifm(A:matr):real;  {возвращает среднее арифметическое матрицы}
procedure Replacement(Var A:matr);  {меняет все отрицательные элементы матрицы их модулями}

 

implementation
 procedure Negative(A:matr; Var L:inmass);
Var i,j,k:integer;
Begin
for i := 1 to n do
  Begin
  k := 0;
  for j :=  1 to m do
  if A[i,j] < 0 then k := k + 1;
  L[i] := k;
  end;
end;  {Negative}
function Maximum(L:inmass):boolean;
Var i:integer;
      b:boolean;
Begin
b := true;
i := 1;
repeat i := i + 1;
       if L[i] > L[1] then b := false
until (i >= n) or (not b);
Maximum := b;
end;  {Maximum}
function SrArifm(A:matr):real;
Var s:real;
      i,j:integer;
Begin
s := 0;
for i := 1 to n do
for j := 1 to m do
s := s + A[i,j];
SrArifm := s / (m * n);
end;  {SrArifm}
procedure Replacement(Var A:matr);
Var i,j:integer;
Begin
for i := 1 to n do
for j := 1 to m do
if A[i,j] < 0 then A[i,j] := abs(A[i,j]);
end;  {Replacement}
end.

Все после этого можем запускать программу 
Для особо ленивых, можно скачать готовые исходники

Скачать

Категория: Задачи по программированию | Добавил: shypuk (14.08.2014)
Просмотров: 2057 | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]