Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2012, 19:08   #1
Azat_MAI
 
Регистрация: 03.04.2012
Сообщений: 3
По умолчанию Обратная матрица

Здравствуйте!!если кто сможет помогите!
задание:Дана матрица размерности N*N, найти обратную матрицу(n=5). программу нужно написать без функций и процедур
Azat_MAI вне форума Ответить с цитированием
Старый 21.04.2012, 20:28   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Процедуры и функции удалите сами
Код:
uses
  crt;

const
  e = 0.000001;
  n = 3;

label exit1;

type
  tarray = array[1..(n + 1), 1..2 * n] of real;

var
  a: tarray;
  i, j, q: integer;

procedure printmatrix(var a: tarray; n: integer);
var
  i, j: integer;
begin
  for i := 1 to n do
  begin
    for j := 1 to n do
      write(a[i, j]:0:3, '  ');
    writeln;
  end;
end;

procedure printinvmatrix(var a: tarray; n: integer);
var
  i, j: integer;
begin
  for i := 1 to n do
  begin
    for j := 1 to n do
      write(a[i, j + n]:0:3, '  ');
    writeln;
  end;
end;

procedure mover(var a: tarray; to1, from1, n: integer);
begin
  a[n + 1] := a[to1];
  a[to1] := a[from1];
  a[from1] := a[n + 1];
end;

procedure adder(var a: tarray; to1, from1, n: integer);
var
  d: real;
  i: integer;
begin
  d := a[to1, from1] / a[from1, from1];
  for i := 1 to 2 * n do
    a[to1, i] := a[to1, i] - a[from1, i] * d;
end;

BEGIN
  for i := 1 to n do
    for j := 1 to n do
    begin
      write('A[', i, ',', j, ']: ');
      readln(a[i, j]);
    end;
  
  for i := 1 to n do
    a[i, n + i] := 1;
  
  writeln('Source matrix:');
  printmatrix(a, n);
  
  for i := 1 to n do
  begin
    j := i;
    while (abs(a[j][i]) < e) and (j < n) do
      inc(j);
    if j > n then
    begin
      writeln('Matrix does not have the inverse matrix');
      readln;
      goto exit1;
    end;
    if j <> i then
      mover(a, i, j, n);
    for q := i + 1 to n do
      adder(a, q, i, n);
  end;
  
  for i := n downto 1 do
  begin
    for q := i - 1 downto 1 do
      adder(a, q, i, n);
    for q := 2 * n downto i do
      a[i, q] := a[i, q] / a[i, i];
  end;
  
  for i := 1 to n do
    for j := 1 to n do
      if abs(a[i, j + n]) < e then
        a[i, j] := 0;
  
  writeln;
  writeln('The inverse matrix:');
  printinvmatrix(a, n);
  
  readln;
  exit1: ;
END.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обратная матрица nat@ Помощь студентам 11 17.04.2012 21:08
Обратная матрица ВасяСВВ Общие вопросы C/C++ 1 30.03.2011 20:52
Обратная матрица helena91 Паскаль, Turbo Pascal, PascalABC.NET 0 22.03.2011 01:27
обратная матрица LastBreath Помощь студентам 1 04.06.2010 20:30
Обратная матрица Шахрия Помощь студентам 1 26.10.2009 17:28