#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
void task910()
{
setlocale(LC_ALL, "Russian");
cout << "Task 910" << endl;
cout << " В Двумерном массиве целых чисел содержатся несколько пар значений переменных х и у. Найти пару значений, дающих наибольшее значение выражения z = x2 – 3y." << endl;
int N, M;
cout << "Input N, M: " << endl;
cin >> N >> M;
int** A = new int *[N];
for (int i = 0; i < N; i++) {
A[i] = new int[M];
}
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++) {
cout<<(A[i][j]= rand() % 10)<< " ";
}
cout << endl;
}
}
void task945()
{
setlocale(LC_ALL, "Russian");
cout << "Task 945" << endl;
cout << " В массиве записаны целые числа. Верно ли, что сумма элементов побочной диагонали массива оканчивается цифрой 0? "<< endl;
int N, M;
cout << "Input N, M: " << endl;
cin >> N >> M;
int** A = new int *[N];
for (int i = 0; i < N; i++) {
A[i] = new int[M];
}
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++) {
cout<<(A[i][j]= rand() % 10)<< " ";
}
cout << endl;
}
int sum = 0;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
if (i + j ==( M < N ? M : N) - 1) {
sum = sum + A[i][j];
}
}
}
cout << "Sum = " << sum << endl;
if (sum % 10 == 0) {
cout << "сумма элементов побочной диагонали массива оканчивается цифрой 0" << endl;
}
else {
cout << "сумма элементов побочной диагонали массива НЕ оканчивается цифрой 0" << endl;
}
}
void task980()
{
setlocale(LC_ALL, "Russian");
cout << "Task 980" << endl;
cout << " Дан одномерный массив х1, х2, ..., xn–1, xn. Получить вещественную квадратную матрицу порядка n: " << endl;
cout << "Input n: ";
int n;
cin >> n;
int* x = new int[n];
int** A = new int* [n];
for (size_t i = 0; i < n; i++)
{
A[i] = new int[n];
}
for (int i = 0; i < n; i++)
{
cout << "x[" << i + 1 << "]=";
cin >> x[i];
}
for (int j = 0; j < n; j++)
{
A[0][j] = x[j];
for (int i = 0; i < n - 1; i++)
A[i + 1][j] = A[i][j] * x[j];
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << setw(7) << A[i][j] << " ";
cout << "\n";
}
delete[]A;
delete[]x;
int p;
cout << " n = ";
cin >> p;
int* y = new int[p];
int** B = new int* [p];
for (int i = 0; i < n; i++)
B[i] = new int[p];
for (int i = 0; i < p; i++)
{
cout << "y[" << i + 1 << "]=";
cin >> y[i];
}
for (int j = 0; j < p; j++)
{
B[0][j] = 1.;
for (int i = 0; i < p - 1; i++)
B[i + 1][j] = B[i][j] * y[j];
}
for (int i = 0; i < p; i++)
{
for (int j = 0; j < p; j++)
cout << setw(7) << B[i][j] << " ";
cout << "\n";
}
}
void task1015()
{
setlocale(LC_ALL, "Russian");
cout << "Task 1015" << endl;
cout << " Определить, является ли заданная матрица ортонормированной, то есть равно ли скалярное произведение каждой пары разных строк (столбцов) нулю. " << endl;
int N, M;
cout << "Input N, M: " << endl;
cin >> N >> M;
int** A = new int* [N];
for (int i = 0; i < N; i++) {
A[i] = new int[M];
}
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++) {
cout << (A[i][j] = rand() % 10) << " ";
}
cout << endl;
}
int** B = new int* [M];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
B[j * N + i] = A[i * M + j];
}
}
int** C = new int* [N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
C[i][j] = 0;
}
for (int k = 0; k < N; k++) {
C[i][j] += A[i][k] * B[k][j];
}
}
bool check = false;
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j <= M - 1; j++) {
if (C[i][j] == B[i][j]) {
check = true;
}
else {
check = false;
}
}
}
}
void task1050()
{
setlocale(LC_ALL, "Russian");
cout << "Task 1050" << endl;
cout << " Дан Двумерный массив размером n × n. Составить программу, которая меняет местами все элементы, симметричные:" << endl;
cout << " а) относительно главной диагонали" << endl ;
cout << " б) относительно побочной диагонали." << endl;
cout << "Input n, m: ";
int n, m;
cin >> n >> m;
int** A = new int* [n];
for (int i = 0; i < n; i++) {
A[i] = new int[m];
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++) {
cout << (A[i][j] = rand() % 10) << " ";
}
cout << endl;
}
int tmp;
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
tmp = A[i][j];
A[i][j] = A[j][i];
A[j][i] = tmp;
}
}
cout << endl;
int a;
do {
cout << "1) main diagonal" << endl << "2) additional diagonal" << endl << "> ";
cin >> a;
} while (a != 1 && a != 2);
if (a == 1) {
for (int i = n - 1; i >= 0; i--) {
for (int j = n - i; j < n; j++) {
tmp = A[i][j];
A[i][j] = A[n - j - 1][n - i - 1];
A[n - j - 1][n - i - 1] = tmp;
}
}
}
else {
int tmp;
for (int i = n - 1; i >= 0; i--) {
for (int j = n - i; j < n; j++) {
tmp = A[i][j];
A[i][j] = A[n - j - 1][n - i - 1];
A[n - j - 1][n - i - 1] = tmp;
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << A[i][j] << "\t";
}
cout << endl;
}
for (int i = 0; i < n; i++) {
delete[] A[i];
}
delete[] A;
}
int main()
{
task910();
task945();
task980();
task1015();
task1050();
return 0;
}