Язык программирования C++
Задача 1.
Задан двухмерный массив B[4][4]. Составить программу, которая организует двумерный массив, элементы главной диагонали которого равны соответствующим элементам исходного массива, а остальные элементы равны нулю.
Задача 2.
Вывести на экран элементы побочной диагонали (вывод организовать по диагонали).
Для формирования сводного отчета по документооборотам выполните действия:
1. Выберите в главном меню «Действия – Сформировать отчет».
Откроется окно «Формирование отчета».
2. Укажите период, за который необходимо сформировать отчет по документооборотам. Для этого воспользуйтесь встроенным календарем или ссылками:
за все время - автоматически проставляется период с начала использования программы по текущую дату.
за месяц - автоматически проставляется период за месяц от текущей даты.
за неделю - автоматически проставляется период за дней от текущей даты.
3. Выберите документообороты, которые необходимо отобразить в сводном отчете при чекбоксов.
4. Укажите при необходимости для каждого направления документооборота дополнительные параметры, нажав на значок .
5. Развернется форма <Название направления документооборота> , например «Налоговая служба».
6. После того как все необходимые параметры отчета заполнены, нужно нажать на кнопку «Сформировать отчет». Начнется процесс формирования отчета, по окончании которого откроется окно просмотра отчета.
Внимание! Этот код - не пример того, как нужно писать программы на С++, это лишь попытка адаптировать написанную на 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;
}