• Перевести на c++!
    const mm = 5;
    type mat = array [1..5, 1..5] of real;

    {esli max vishe gl diagonali}
    procedure pp1(var A: mat; var p: boolean; var imax, jmax: integer);
    var i, j: integer;
    begin
    imax := 1;
    jmax := 1;
    for i := 1 to mm do
    for j :=1 to mm do
    begin
    if A[i, j] > a[imax, jmax]
    then begin
    imax := i;
    jmax := j
    end
    end;
    p := jmax > imax
    end;

    {Transponirovat matrix}
    procedure pp2(var A: mat);
    var i, j: integer;
    C: real;
    begin
    for i := 2 to mm do
    for j := 1 to i - 1 do
    begin
    C := A[i, j];
    A[i, j] := A[j, i];
    A[j, i] := C
    end
    end;

    {symma elementov str i stlb s index MAX}
    procedure pp3(var A: mat; imax, jmax: integer; var S: real);
    var i: integer;
    begin
    s := 0;
    for i := 1 to mm do s := s + A[i, jmax] + A[imax, i]
    end;

    {glav modul}
    var S: real;
    i, j, imax, jmax: integer;
    p: boolean;

    const a: mat = ((9, 1, 1, 2, 3),
    (4, 6, 7, 8, 4),
    (5, 1, 1, 1, 1),
    (1, 1, 1, 1, 1),
    (1, 1, 2, 1, 1));
    begin
    writeln('isxodnaya matriza');
    for i := 1 to mm do
    begin
    for j := 1 to mm do write(' ', a[i, j]:8:1);
    writeln
    end;
    pp1(A, p, imax, jmax);
    writeln('MAX element: A[', imax, ', ', jmax, '] = ', a[imax, jmax]:0:1);
    if p
    then begin
    pp2(A);
    writeln('Transponirovannaya matrix');
    for i := 1 to mm do
    begin
    for j := 1 to mm do write(' ', a[i, j]:8:1);
    writeln
    end
    end
    else begin
    pp3(A, imax, jmax, S);
    writeln('Symma elementov s index MAX elementa = ', s:0:1)
    end;
    readln
    end.

Ответы 2

  • Внимание! Этот код - не пример того, как нужно писать программы на С++, это лишь попытка адаптировать написанную на Pascal программу на С++ с минимальными изменениями в логике кода, функциях и т.д.

    В процессе возникла проблема с адаптацией type mat = array [1..5, 1..5] of real; Ближайший аналог -  typedef double mat[mm][mm]; , однако тогда возникают проблемы с передачей параметров в функцию.

    Поэтому пришлось создавать класс с динамическим выделением памяти [обращаю на это внимание, не статический] и перегруженным оператором индексации.

    #include <iostream>

    const int mm = 5;

    class mat

    {

    private:

    double ** array;

    public:

    mat(): array(nullptr) {}

    mat(double tmp[][mm])

    {

     array = new double *[mm];

     for (auto i = 0; i < mm; i++)

     {

      array[i] = new double [mm];

     }

     for (auto i = 0; i < mm; i++)

     {

      for (auto j = 0; j < mm; j++)

      {

       array[i][j] = tmp[i][j];

      }

     }

    }

    ~mat()

    {

     for (auto i = 0; i < mm; i++)

     {

      delete[] array[i];

     }

     delete[] array;

    }

    double * operator[] (const int i)

    {

     if (i < 0 || i >= mm)

     {

      throw std::runtime_error("Error! Invalid index!");

     }

     return array[i];

    }

    };

    void pp1(mat& A, bool& p, int& imax, int& jmax)

    {

    imax = jmax = 0;

    for (auto i = 0; i < mm; i++)

    {

     for (auto j = 0; j < mm; j++)

     {

      if (A[i][j] > A[imax][jmax])

      {

       imax = i;

       jmax = j;

      }

     }

    }

    p = jmax > imax;

    }

    void pp2(mat& A)

    {

    double c;

    for (auto i = 1; i < mm; i++)

    {

     for (auto j = 0; j < i; j++)

     {

      c = A[i][j];

      A[i][j] = A[j][i];

      A[j][i] = c;

     }

    }

    }

    void pp3(mat& A, int& imax, int& jmax, double& S)

    {

    S = 0;

    for (auto i = 0; i < mm; i++)

    {

     S += A[i][jmax] + A[imax][i];

    }

    }

    int main()

    {

    double S;

    int imax, jmax;

    bool p;

    double A1[mm][mm] = { {9, 1, 1, 2, 3}, {4, 6, 7, 8, 4}, {5, 1, 1, 1, 1}, {1, 1, 1, 1, 1}, {1, 1, 2, 1, 1 } };

    mat A(A1);

    std::cout << "isxodnaya matriza" << std::endl;

    for (auto i = 0; i < mm; i++)

    {

     for (auto j = 0; j < mm; j++)

     {

      std::cout << " " << A[i][j];

     }

     std::cout << std::endl;

    }

    pp1(A, p, imax, jmax);

    std::cout << "MAX element: A[" << imax << "][" << jmax << "] = " << A[imax][jmax] << std::endl;

    if (p)

    {

     pp2(A);

     std::cout << "Transponirovannaya matrix" << std::endl;

     for (auto i = 0; i < mm; i++)

     {

      for (auto j = 0; j < mm; j++)

      {

       std::cout << " " << A[i][j];

      }

      std::cout << std::endl;

     }

    }

    else

    {

     pp3(A, imax, jmax, S);

     std::cout << "Symma elementov s " << S << std::endl;

    }

    return 0;

    }

    • Автор:

      love88
    • 5 лет назад
    • 0
  • Ответ:

    Код и пример вывода в прикрепленных файлах ниже.

    Объяснение:

    answer img
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years