Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal] Модули


Автор: Lesenok 5.12.2008, 20:14
Привет. Не подскажите как делаются задачи такого рода? Заранее спасибо!
  Вычислить выражение, содержащее матрицы размером 3х3. Действия по нахождению максимального и минимального элемента матрицы оформляются в виде функций, а осталь-ные действия  - в виде процедур помещенных в модуле (Unit).
Z=(B*maxA+C*minB)*maxB-A*maxC , где A,B,C исходные матрицы.

Автор: volvo877 6.12.2008, 12:56
Цитата(Lesenok @  5.12.2008,  19:14 Найти цитируемый пост)
как делаются задачи такого рода?
Просто:

(модуль - MYUNIT.PAS)
Код
unit myunit;

interface

const
  size= 3;
type
  E = integer;
  matrix = array[1 .. size, 1 .. size] of E;

function min(const m: matrix): E;
function max(const m: matrix): E;

procedure add(const a, b: matrix; var res: matrix);
procedure sub(const a, b: matrix; var res: matrix);
procedure scale(const a: matrix; f: E; var res: matrix);

procedure print(const m: matrix);

implementation

function min(const m: matrix): E;
var
  i, j: integer;
  T: E;
begin
  T := m[1, 1];
  for i := 1 to size do
    for j := 1 to size do
      if m[i, j] < T then T := m[i, j];
  min := T;
end;
function max(const m: matrix): E;
var
  i, j: integer;
  T: E;
begin
  T := m[1, 1];
  for i := 1 to size do
    for j := 1 to size do
      if m[i, j] > T then T := m[i, j];
  max := T;
end;

procedure add(const a, b: matrix; var res: matrix);
var i, j: integer;
begin
  for i := 1 to size do
    for j := 1 to size do
      res[i, j] := a[i, j] + b[i, j];
end;
procedure sub(const a, b: matrix; var res: matrix);
var i, j: integer;
begin
  for i := 1 to size do
    for j := 1 to size do
      res[i, j] := a[i, j] - b[i, j];
end;

procedure scale(const a: matrix; f: E; var res: matrix);
var i, j: integer;
begin
  for i := 1 to size do
    for j := 1 to size do
      res[i, j] := a[i, j] * f;
end;

procedure print(const m: matrix);
var i, j: integer;
begin
  for i := 1 to size do begin
    for j := 1 to size do
      write(m[i, j]:5);
    writeln
  end;
end;

end.


(основная программа)
Код
uses myunit;
const
  a: matrix = (
    (1, 2, 3),
    (4, 5, 6),
    (6, 3, 4)
  );
  b: matrix = (
    (4, 7, 9),
    (2, 6, 5),
    (5, 3, 8)
  );
  c: matrix = (
    (4, 9, 2),
    (5, 7, 1),
    (3, 5, 2)
  );

var
  z, t1, t2: matrix;

begin
  scale(b, max(a), t1);  { t1 = b*max(a) }
  scale(c, min(b), t2);  { t2 = c*min(b) }
  add(t1, t2, t1);       { t1 = t1 + t2 = b*max(a) + c*min(b) }
  scale(t1, max(b), t1); { t1 = t1 * max(b) }
  scale(a, max(c), t2);  { t2 = a * max(c)  }
  sub(t1, t2, t1);       { t1 = t1 - t2 }

  print(t1);

end.

Автор: Lesenok 6.12.2008, 13:28
Большое спасибо вечером посмотрю, разберусь.

Автор: Lesenok 6.12.2008, 19:32
Что то я чуть чуть не поняла чего то. Нажимаю прочитать программу действий никаких. Может там не хватает какого нибудь оператора для вывода на экран?

Автор: Dobermann 6.12.2008, 19:36
Сперва CTRL+F9, затем ALT+F5 (просмотр)

Автор: Lesenok 7.12.2008, 09:46
Спасибо БОЛЬШОЕ. Все отлично работает. Постараюсь во всем разобраться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)