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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2013, 11:35   #1
vaseel1ch
Новичок
Джуниор
 
Регистрация: 19.12.2013
Сообщений: 2
По умолчанию помогите пожалуйста разобраться в программе

помогите пожалуйста прокомментировать программу, чтобы я понял, что каждая строчка делает в программе, буду очень благодарен
Код:
uses
  crt;

type
  Tmass = array[1..20] of real;//линейный массив чисел=строка матрицы
  Tmatrix = array[1..20] of Tmass;// матрица=линейный массив строк
{процедура перестановки строк}
procedure Per(k, n: integer; var a: Tmatrix; var p: integer);
var
  z: Real;j, i: integer;
begin
  z := abs(a[k, k]);
  i := k;
  p := 0;
  for j := k + 1 to n do
  begin
    if abs(a[j, k]) > z then
    begin
      z := abs(a[j, k]);
      i := j;
      p := p + 1;{счетчик перестановок}
    end;
  end;
  if i > k then
    for j := k to n do
    begin
      z := a[i, j];
      a[i, j] := a[k, j];
      a[k, j] := z;
    end;
end;
{определение знака определителя по числу перестановок}
function Znak(p: integer): integer;
begin
  if p mod 2 = 0 then
    Znak := 1 else Znak := -1;
end;
{нахождение определителя}
procedure Opr(n: integer; a: tmatrix; var det: real);
var
  k, i, j, p: integer;r: real;
begin
  det := 1.0;
  for k := 1 to n do
  begin
    if a[k, k] = 0 then Per(k, n, a, p);{перестановка строк}
    det := znak(p) * det * a[k, k];{вычисление определителя}
    for j := k + 1 to n do {пересчет коэффициентов}
    begin
      r := a[j, k] / a[k, k];
      for i := k to n do
      begin
        a[j, i] := a[j, i] - r * a[k, i];
      end;
    end;
  end;
end;

var
  a: Tmatrix;
  c: array[1..20] of Tmatrix;
  b, x: Tmass;
  det, det1: real;
  n, k, j, i: integer;

begin
  clrscr;
  write('Порядок системы n=');
  readln(n);
  writeln('Введите коэффициенты уравнений:');
  for i := 1 to n do
  begin
    writeln('Уравнение ', i);
    for j := 1 to n do
      read(a[i, j]);
  end;
  readln;
  writeln('Введите свободные члены:');
  for i := 1 to n do
    read(b[i]);
  readln;
  clrscr;
  writeln('Расширенная матрица системы:');
  for i := 1 to n do
  begin
    for j := 1 to n do
      write(a[i, j]:7:2);
    write(b[i]:9:2);
    writeln;
  end;
  Opr(n, a, det);{определитель системы}
  for i := 1 to n do
  begin
    for k := 1 to n do
    begin
      for j := 1 to n do
        c[i][k, j] := a[k, j];
      c[i][k, i] := b[k];
    end;
    Opr(n, c[i], det1);
    if(det = 0) and (det1 = 0) then
    begin
      writeln('Система не определена!');
      readln;
      exit;
    end;
    if(det = 0) and (det1 <> 0) then
    begin
      writeln('Система не имеет решений!');
      readln;
      exit;
    end;
    x[i] := det1 / det;
  end;
  writeln('Корни сиcтемы:');
  for i := 1 to n do
    writeln('x', i, '=', x[i]:7:3);
  readln
end.

Последний раз редактировалось Stilet; 19.12.2013 в 12:20.
vaseel1ch вне форума Ответить с цитированием
Старый 19.12.2013, 11:44   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Мама родненькая! Тут даже чёрт не разберётся, а мы далеко не черти!
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста разобраться. Ryjik Общие вопросы C/C++ 0 22.10.2009 14:07
Помогите разобраться в программе... Tee Jay Помощь студентам 0 25.06.2009 19:20
помогите разобраться в программе iwaniwan Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 15.04.2009 19:38
Помогите разобраться в программе Gekada Общие вопросы C/C++ 1 09.12.2008 19:23
Пожалуйста помогите разобраться) Atij1 Общие вопросы C/C++ 4 13.04.2008 20:32