#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <math.h>
#include <iomanip>
#include <algorithm>
using namespace std;
void task909(int massive[10][10])
//909. Найти номер строки и столбца Двумерного массива для максимального элемента этого массива.
{
int max = 0;
int imax = -1;
int jmax = -1;
max = massive[0][0];
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (massive[i][j] >= max)
{
max = massive[i][j];
imax = i;
jmax = j;
}
}
}
cout << "max = " << max << " pos = [" << imax + 1 << ", " << jmax + 1 << "]" << endl;
}
void task951(int massive[10][10])
//Дан Двумерный массив.
//а) Заменить значения всех элементов второй строки массива числом 5.
//б) Заменить значения всех элементов пятого столбца массива числом 10.
{
cout << "Заменил значения всех элементов второй строки массива числом 5: " << endl;
for (int i = 0; i < 10; i++)
{
massive[1][i] = 5;
}
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
cout.width(2);
cout << massive[i][j] << " ";
}
cout << endl;
}
cout << "Заменил значения всех элементов пятого столбца массива числом 10: " << endl;
for (int i = 0; i < 10; i++)
{
massive[i][5] = 10;
}
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
cout.width(2);
cout << massive[i][j] << " ";
}
cout << endl;
}
}
void task979()
//979. Дана вещественная квадратная матрица порядка 2n.
//Получить новую матрицу, переставляя ее блоки размера n × n по часовой стрелке, начиная с блока в левом верхнем углу.
{
int N = 0;
while (N == 0)
{
cout << "введите размер 2n :" << endl;
if (!(cin >> N))
{
cin.clear();
cin.ignore(65535, '\n');
}
}
int** A, ** B1, ** B2, ** B3, ** B4, i, j, k, m;
//A[2 * N][2 * N];
A = new int* [2 * N];
//B1[N][N];
B1 = new int* [N];
//B2[N][N];
B2 = new int* [N];
//B3[N][N];
B3 = new int* [N];
//B4[N][N];
B4 = new int* [N];
cout << "стартовый массив\n";
for (i = 0; i < 2 * N; i++)
{
A[i] = new int[2 * N];
B1[i] = new int[N];
B2[i] = new int[N];
B3[i] = new int[N];
B4[i] = new int[N];
for (j = 0; j < 2 * N; j++)
{
A[i][j] = rand() % 10;
cout << setw(2) << A[i][j] << " ";
}
cout << endl;
}
for (int p = 0; p < 4; p++) {
//создаем блоки В1..В4
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
B1[i][j] = A[i][j];
for (i = 0; i < N; i++)
for (j = N, m = 0; j < 2 * N; j++, m++)
B2[i][m] = A[i][j];
for (i = N, k = 0; i < 2 * N; i++, k++)
for (j = N, m = 0; j < 2 * N; j++, m++)
B3[k][m] = A[i][j];
for (i = N, k = 0; i < 2 * N; i++, k++)
for (j = 0; j < N; j++)
B4[k][j] = A[i][j];
//собираем блоки в А
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
A[i][j] = B4[i][j];
for (i = 0; i < N; i++)
for (j = N, k = 0; j < 2 * N; j++, k++)
A[i][j] = B1[i][k];
for (i = N, k = 0; i < 2 * N; i++, k++)
for (j = N, m = 0; j < 2 * N; j++, m++)
A[i][j] = B2[k][m];
for (i = N, k = 0; i < 2 * N; i++, k++)
for (j = 0; j < N; j++)
A[i][j] = B3[k][j];
cout << "\nизмененный массив\n";
for (i = 0; i < 2 * N; i++)
{
for (j = 0; j < 2 * N; j++)
cout << setw(2) << A[i][j] << " ";
cout << endl;
}
}
}
void task1014(int massive[10][10])
/*1014. Расстояние между k-й и l-й строками квадратной матрицы А(n, n) определяется как
. Указать номер строки, максимально удаленной от первой строки заданной матрицы.*/
{
int n = 0;
cout << " введите номер первой строки :" << endl;
int k = 0;
while (k == 0)
{
if (!(cin >> k))
{
cin.clear();
cin.ignore(65535, '\n');
}
}
cout << " введите номер второй строки :" << endl;
int l = 0;
while (l == 0)
{
if (!(cin >> l))
{
cin.clear();
cin.ignore(65535, '\n');
}
}
//cout << "расстояние между строками : " << abs(l - k) << endl;
//cout << "расстояние между первой и максимально отдалеленой строкой : " << abs(1 - n) << endl;
double r = 0;
r = sqrt(k * k + 1) + sqrt(l * l + 1);
cout << "расстояние между строками : " << r << endl;
cout << "максимальное расстояние между строками : " << sqrt(k * k + 1) + sqrt(2*(n * n) + 1) << endl;
}
void task1049(int massive[10][10])
/*. Дан Двумерный массив. Составить программу, которая:
а) переставляет две любые строки массива;
б) переставляет два любых столбца массива
*/
{
int k = 0, l = 0, y = 0;
while (k == 0)
{
cout << "введите номер 1 строки :" << endl;
if (!(cin >> k))
{
cin.clear();
cin.ignore(65535, '\n');
cout << "неправильный ввод" << endl;
}
if ((k <= 0) || (k > 10))
{
k = 0;
}
}
while (l == 0)
{
cout << "введите номер 2 строки :" << endl;
if (!(cin >> l))
{
cin.clear();
cin.ignore(65535, '\n');
cout << "неправильный ввод" << endl;
}
if ((l <= 0) || (l > 10))
{
l = 0;
}
}
for (int j = 0; j < 10; j++)
{
cout.width(2);
cout << massive[k - 1][j] << " ";
}
cout << endl;
for (int j = 0; j < 10; j++)
{
cout.width(2);
cout << massive[l - 1][j] << " ";
}
cout << endl;
k = l = 0;
while (k == 0)
{
cout << "введите номер 1 столбца :" << endl;
if (!(cin >> k))
{
cin.clear();
cin.ignore(65535, '\n');
cout << "неправильный ввод" << endl;
}
if ((k <= 0) || (k > 10))
{
k = 0;
}
}
while (l == 0)
{
cout << "введите номер 2 столбца :" << endl;
if (!(cin >> l))
{
}
if ((l <= 0) || (l > 10))
{
l = 0;
}
}
cout << endl;
for (int j = 0; j < 10; j++)
{
cout.width(2);
cout << massive[j][k - 1] << "\t" << massive[j][l - 1] << endl;
}
cout << endl;
}
void main()
{
setlocale(LC_ALL, "Russian");
cout << "массив используемый в дальнейших вычислениях :" << endl;
int k = 0, s = 0;
int massive[10][10];
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
massive[i][j] = rand() % 100;
cout.width(2);
cout << massive[i][j] << " ";
}
cout << endl;
}
while (s == 0)
{
cout << "введите номер задания (909,951,979,1014,1049. для выхода из программы введите 1)" << endl;
if (!(cin >> k))
{
cin.clear();
cin.ignore(65535, '\n');
}
if (k == 1)
{
break;
}
switch (k)
{
case 909:
{
cout << "Задание № 909 : " << endl;
task909(massive);
break;
}
case 951:
{
cout << "Задание № 951 : " << endl;
task951(massive);
break;
}
case 979:
{
cout<<"Задание № 979"<<endl;
task979();
break;
}
case 1014:
{
cout << "Задание № 1014 : " << endl;
task1014(massive);
break;
}
case 1049:
{
cout << "Задание № 1049 : " << endl;
task1049(massive);
break;
}
default:
{
cout << "Упс..Это задание я не делал"<<endl;
}
}
}
}