Программа


Program Matrixer;
{ Кососимметризация и 
  транспонирование матрицы, 
  подсчет суммы отрицательных 
  элементов над главной диагональю }
Const N=5;                                             { Размерность матрицы }
Type MatrixType=array[1..N,1..N] of Shortint;      { Описание типа "матрица" }
Var Matrix:MatrixType;                       { Описание переменной "матрица" }

Procedure MatrixReader(var Matrix:MatrixType);     { Процедура ввода матрицы }
  var Line,Column:1..N;                          { Счетчики строк и столбцов }
  Begin
    for Line:=1 to N do                                   { Цикл ввода строк }
      for Column:=1 to N do                           { Цикл ввода элементов }
        begin
          Write('Введите элемент [',Line,',',Column,'] ');
                                  { Вывод приглашения ввести элемент матрицы }
          ReadLn(Matrix[Line,Column])              { Чтение элемента матрицы }
        end
  End;

Procedure MatrixWriter(Matrix:MatrixType);        { Процедура вывода матрицы }
  var Line,Column:1..N;                          { Счетчики строк и столбцов }
  Begin
    for Line:=1 to N do                                  { Цикл вывода строк }
      begin
        for Column:=1 to N do                        { Цикл вывода элементов }
          Write(Matrix[Line,Column]:5);             { Вывод элемента матрицы }
        WriteLn;                                            { Пропуск строки }
      end
  End;
Procedure Kososimmetrizator(var Matrix:MatrixType);
                     { Процедура преобразования матрицы в кососимметрическую }
  var Line,Column:1..N;                          { Счетчики строк и столбцов }
  Begin
    for Line:=1 to N do Matrix[Line,Line]:=0;  { Обнуление главной диагонали }
    for Line:=1 to N do                               { Цикл обработки строк }
      for Column:=Line to N do                    { Цикл обработки элементов }
        Matrix[Line,Column]:=-Matrix[Column,Line]
                   { Копирование элемента через диагональ с инверсиеей знака }
  End;
Procedure Transponator(var Matrix:MatrixType);
                                { Преобразование матрицы в транспонированную }
  var Line,Column:1..N;                          { Счетчики строк и столбцов }
      Buf:Shortint;                   { Буфер для переноса элементов матрицы }
  Begin
    for Line:=1 to N do                                { Цикл перебора строк }
      for Column:=Line to N do            { Просмотр строки правее диагонали }
        begin
          { Обмен элементов симметрично главной диагонали }
          Buf:=Matrix[Line,Column];          { Запоминание текущего элемента }
          Matrix[Line,Column]:=Matrix[Column,Line];
           { Копирование в текущую ячейку элемента из противоположной ячейки }
          Matrix[Column,Line]:=Buf
                   { Копирование в противоположную ячейку элемента из буфера }
        end
  End;

Function GetSumNegativeElements(Matrix:MatrixType):Integer;
   { Функция вычисления суммы отрицательных элементов над главной диагональю }
  var Line,Column:1..N;                          { Счетчики строк и столбцов }
      Sum:Integer;{ Буфер для подсчета суммы отрицательных элементов матрицы }
  Begin
    Sum:=0;                                               { Обнуление буфера }
    for Line:=1 to N do                               { Цикл просмотра строк }
      for Column:=Line to N do
                            { Цикл просмотра строки правее главной диагонали }
        if Matrix[Line,Column]<0               { Если элемент отрицательный, }
          then Sum:=Sum+Matrix[Line,Column];                { то набор суммы }
    GetSumNegativeElements:=Sum               { Определение значения функции }
  End;


BEGIN
  WriteLn;WriteLn;                                           { Пропуск строк }
  MatrixReader(Matrix);                                       { Ввод матрицы }
  WriteLn;                                                  { Пропуск строки }
  WriteLn('Исходная матрица');                { Вывод заголовка над матрицой }
  MatrixWriter(Matrix);                                      { Вывод матрицы }

  WriteLn;                                                  { Пропуск строки }
  Kososimmetrizator(Matrix);           { Создание кососимметрической матрицы }
  WriteLn('Кососимметрическая матрица');      { Вывод заголовка над матрицой }
  MatrixWriter(Matrix);                                      { Вывод матрицы }

  WriteLn;                                                  { Пропуск строки }
  WriteLn('Транспонированная матрица');       { Вывод заголовка над матрицой }
  Transponator(Matrix);                           { Транспонирование матрицы }
  MatrixWriter(Matrix);                                      { Вывод матрицы }

  WriteLn;                                                  { Пропуск строки }
  WriteLn('Сумма отрицательных элементов над главной диагональю ',
           GetSumNegativeElements(Matrix));
                             { Подсчет и вывод суммы отрицательных элементов }

  WriteLn;                                                  { Пропуск строки }
  WriteLn('Нажмите [Enter]');             { Вывод приглашения нажать [Enter] }
  ReadLn;                           { Остановка программы до нажатия [Enter] }
END.

Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию