М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
lyis
lyis
07.09.2021 00:15 •  Информатика

Перевести на 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.

👇
Ответ:
hjhthy
hjhthy
07.09.2021

Внимание! Этот код - не пример того, как нужно писать программы на С++, это лишь попытка адаптировать написанную на 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;

}

4,7(42 оценок)
Ответ:
katizhi
katizhi
07.09.2021

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

Объяснение:


Перевести на c++! const mm = 5; type mat = array [1..5, 1..5] of real; {esli max vishe gl diagonali}
4,5(59 оценок)
Открыть все ответы
Ответ:
АnnaaaaA
АnnaaaaA
07.09.2021

chislo1 = int(input("Введите число а "))

chislo2 = int(input("Введите число b "))

while chislo1 != 0 and chislo2 != 0:

   if chislo1 > chislo2:

       chislo1 = chislo1 % chislo2

   else:

       chislo2 = chislo2  % chislo1

print(chislo1 + chislo2)

Объяснение:

НОД числа:

берутся два числа. большее число = остаток от деления большего на меньшее. Затем опять большее число (может быть уже второе) = остаток от деления большего на меньшее, и так до тех пор, пока одно из них не станет равно 0. И выводится большее число. В случае если числа равны друг другу, находится остаток от деления второго числа на первое: 0, и выводится первое число. Т.е всё работает.

4,6(37 оценок)
Ответ:
kek200570
kek200570
07.09.2021

x1, y1 = int(input()), int(input())  # коорд. первого ферзя

x2, y2 = int(input()), int(input())  # коорд. второго ферзя

if (x1 == x2) or (y1 == y2) or (x1 == y1 and x2 == y2):   # условия при которых

# ферзи встречают друг друга на своих линиях атаки

   print("Ферзи бьют друг друга")

else:

   print("Феризи не бьют друг друга")

Вторая:

str = [int(i) for i in input().split()]  # Генерация списка

'''

split() разбивает строку на части,  

используя специальный разделитель,

и возвращает эти части в виде списка.

'''

for i in range(1, len(str)-1):

   str[i] += 5

print(str)

4,6(47 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ