Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int main()
- {
- setlocale(LC_ALL, "Russian");
- int n, m, i, j;
- double** a;
- cout << "Введите количество строк" << endl;
- cin >> n;
- cout << "Введите количество столбцов" << endl;
- cin >> m;
- a = new double* [n];
- for (i = 0; i < n; i++)
- a[i] = new double[m];
- // ввод массива вручную
- for (i = 0; i < n; i++)
- for (j = 0; j < m; j++)
- {
- cout << "Введите элемент " << i << " " << j << endl;
- cin >> a[i][j];
- }
- cout << "Матрица:" << endl;
- // вывод массива на экран
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < m; j++)
- cout << a[i][j] << " ";
- cout << endl; //тут обрываем строку
- }
- int counter = 0, index_h = -1, index_w = -1;
- for (i = 0; i < n; i++) {//поиск первого нуля и счет кол-ва нулей
- for (j = 0; j < m; j++) {
- if (a[i][j] == 0) {
- if (index_h == -1 && index_w == -1) {
- index_h = i;
- index_w = j;
- }
- counter++;
- }
- }
- }
- cout << "Индекс первого нуля:" << index_h << " " << index_w << endl;
- cout << "Количество нулей в матрице: " << counter << endl;
- int size, max_i = index_h, min_j = index_w, k = 0;//проходим по диагонали квадрата для транспонирования
- for (i = index_h, j = index_w; i < n && j >= 0; (i++, j--)) {
- min_j = j; //min_j = индекс столбца элемента массива находящийся в начале диагонали, в конце которой стоит 0
- max_i = i; //max_i = индекс строки того же элемента
- }
- if (index_h == index_w) { size = index_h; }
- else { size = max_i - index_h; }
- double** a_buffer;
- a_buffer = new double* [size+1];
- //создаем буферный массив
- for (i = 0; i < size+1; i++)
- a_buffer[i] = new double[size+1];
- for (i = 0; i <= size; i++) {//заполняем буферную матрицу нулями, чтобы в пустые ячейки не залетал "мусор"
- for (j = 0; j <= size; j++) {
- if (i > n) { break; };
- a_buffer[i][j] = 0;
- }
- }
- cout << "Вырезанный квадрат для транспонирования: " << endl;
- for (i = 0; i <= size; i++) {//Вырезаем квадрат для транспонирования
- for (j = 0; j <= size; j++) {
- if (i > n) { break; };
- a_buffer[i][j] = a[i+index_h][j+min_j];
- cout << a_buffer[i][j] << " ";
- }
- cout << endl;
- }
- cout << "Транспонированный квадрат: " << endl;
- for (i = 0; i <=size; i++) {//Транспонируем его и возвращаем в исходную матрицу
- for (j = 0; j <=size; j++) {
- a[i + index_h][j + min_j] = a_buffer[j][i];
- cout << a_buffer[j][i] << " ";
- }
- cout << endl;
- }
- for (int i = 0; i <size+1; i++)//Удаляем буферную матрицу, освобождаем память
- {
- delete[] a_buffer[i];
- }
- delete[] a_buffer;
- cout << "Матрица после транспонирования: " << endl;
- for (i = 0; i < n; i++)//выводим результат
- {
- for (j = 0; j < m; j++)
- cout << a[i][j] << " ";
- cout << endl; //тут обрываем строку
- }
- if (counter > n) {
- cout << "Матрица после замены нулей на их количество: " << endl;
- for (i = 0; i < n; i++) {
- for (j = 0; j < m; j++) {
- if (a[i][j] == 0) { a[i][j] = counter; }
- cout << a[i][j] << " ";
- }
- cout << endl; //тут обрываем строку
- }
- }
- //Удаляем массив - освобождаем память
- for (int i = 0; i < n; i++)
- {
- delete[] a[i];
- }
- delete[] a;
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement