Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/103: Рейтинг темы: голосов - 103, средняя оценка - 4.98
1 / 1 / 0
Регистрация: 07.05.2018
Сообщений: 26

Повернуть матрицу на угол 90° против часовой стрелки

07.05.2018, 13:36. Показов 20865. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана квадратная матрица A порядка M. Повернуть ее на угол
90° в положительном направлении, то есть против часовой стрелки (при этом
элемент A11 перейдет в AM1, элемент AM1 - в AMM и т. д.). Вспомогательную
матрицу не использовать. (вводить числа вручную) помогите, не понимаю как сделать этот код.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.05.2018, 13:36
Ответы с готовыми решениями:

Повернуть матрицу против часовой стрелки
Повернуть матрицу против часовой стрелки. Я написал программу, но она не запускается. Где-то я опять ошибся. :-( // Программа_№5.cpp:...

Повернуть матрицу с случайными числами на 90 градусов против часовой стрелки
Задание звучит так: Заполнить матрицу случайными числами. Развернуть матрицу на 90o против часовой стрелки. Поможет кто?

Повернуть матрицу на 180 градусов против часовой стрелки, не создавая дополнительных массивов
Имеется квадратная матрица (не менее, чем 5 на 5). Ввести элементы, распечатать. Повернуть на 180 градусов против часовой стрелки, не...

13
 Аватар для Hitoku
1755 / 1347 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
07.05.2018, 13:42
Внизу страницы "Похожие темы"
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
07.06.2018, 21:20
ARTIDD, здравствуйте. Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <bits/stdc++.h>
 
    using namespace std;
 
int main() {
    int n;
    cout << "Enter a matrix size:\n";
    cout << "n = ";
    cin >> n;
    int** a = new int*[n];
    for (int i = 0; i < n; i++) {
        a[i] = new int[n];
    }
    cout << "Enter a matrix:\n";
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> a[i][j];
        }
    }
    cout << "Target info:\n";
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cout << a[j][n-i-1] << " ";
        }
        cout << "\n";
    }
    for (int i = 0; i < n; i++) {
        delete[] a[i];
    }
    delete[] a;
    system("pause");
    return 0;
}
P.S. Для понимания того как это делается, рекомендую вам произвести небольшой анализ. То есть, расположите сначала матрицу (двумерный массив) в том виде, в котором она задается через индексы (a[0][0], a[0][1] и т.д.). Затем поверните ее против часовой стрелки и посмотрите, что стало с индексами. Составьте циклы для каждой перевернутой строки, а затем объедините все это во вложенный цикл. Если вам интересно, я могу подробно расписать здесь как это делается. Это не так сложно, как кажется на первый взгляд.
1
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
08.06.2018, 02:51
Fixer_84, в задаче требуется не вывести начальную матрицу на экран, а повернуть:
Цитата Сообщение от ARTIDD Посмотреть сообщение
при этом элемент A11 перейдет в AM1, элемент AM1 - в AMM и т. д.
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
08.06.2018, 18:44
Цитата Сообщение от Yetty Посмотреть сообщение
Fixer_84, в задаче требуется не вывести начальную матрицу на экран, а повернуть:
Здравствуйте. Извините, но, по-моему, именно это я и сделал. Вывел перевернутую матрицу
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
08.06.2018, 19:08
Fixer_84,
Цитата Сообщение от Fixer_84 Посмотреть сообщение
Вывел перевернутую матрицу
Вот именно что Вы её вывели. Вывели на экран. В перевёрнутом виде.
А нужно саму матрицу повернуть. На более простом примере: реверсировать одномерную матрицу. Нужно что бы элемент A0 стал элементом A(N-1) и т.д., а не просто вывести элементы матрицы наоборот на экран.
Так и здесь нужно чтобы элемент A11 перешёл в элемент AM1 и т.д.
0
08.06.2018, 20:31

Не по теме:

Цитата Сообщение от ARTIDD Посмотреть сообщение
Вспомогательную
матрицу не использовать.
Ну, блин, ну, что за ерунда.

0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
08.06.2018, 20:33
Цитата Сообщение от Yetty Посмотреть сообщение
Вот именно что Вы её вывели. Вывели на экран. В перевёрнутом виде.
А нужно саму матрицу повернуть. На более простом примере: реверсировать одномерную матрицу. Нужно что бы элемент A0 стал элементом A(N-1) и т.д., а не просто вывести элементы матрицы наоборот на экран.
Хорошо. Я попробую ее реверсировать. Но никогда этого не делал без вспомогательной матрицы.
Цитата Сообщение от Herji Посмотреть сообщение
Yetty, ты палку не перегибаешь со своими наездами?
Не перегибает, а я не обижаюсь, мне все что здесь советуют для меня новый опыт
0
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
08.06.2018, 21:39
Пока ничей код не разбирал, но вставлю свои 5 копеек.
Здесь просто надо сообразить, что последний столбец становится первой строкой, предпоследний столбец становится второй строкой и так далее, до тех пор пока первый столбец не станет последней строкой.
Проще всего написать такую матрицу, а затем физически ее повернуть и посмотреть какие числа займут какие позиции.
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
08.06.2018, 22:31
Лучший ответ Сообщение было отмечено ARTIDD как решение

Решение

Цитата Сообщение от Fixer_84 Посмотреть сообщение
Сообщение от Yetty
Вот именно что Вы её вывели. Вывели на экран. В перевёрнутом виде.
А нужно саму матрицу повернуть. На более простом примере: реверсировать одномерную матрицу. Нужно что бы элемент A0 стал элементом A(N-1) и т.д., а не просто вывести элементы матрицы наоборот на экран.
Сообщение от Fixer_84
Хорошо. Я попробую ее реверсировать. Но никогда этого не делал без вспомогательной матрицы.
Как и обещал. Вот решение:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <bits/stdc++.h>
 
    using namespace std;
 
int main() {
    int n;
    cout << "Enter a matrix size:\n";
    cout << "n = ";
    cin >> n;
    int** a = new int* [n];
    for (int i = 0; i < n; i++) {
        a[i] = new int[n];
    }
    cout << "Enter a matrix:\n";
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> a[i][j]; //Вводим элементы матрицы
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = i; j < n; j++) {
            swap(a[i][j], a[j][i]); //Транспонируем матрицу
        }
    }
    for (int j = 0; j < n; j++) { //Переворачиваем столбцы
        for (int i = 0; i < n / 2; i++) {
            swap(a[i][j], a[n-i-1][j]);
        }
    }
    cout << "Target info:\n";
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cout << a[i][j] << " "; //Выводим получившуюся матрицу
        }
        cout << "\n";
    }
    for (int i = 0; i < n; i++) {
        delete [] a[i];
    }
    delete [] a;
    system("pause");
    return 0;
}
2
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
08.06.2018, 22:33
Fixer_84, спасибо. вот теперь код под под условие
1
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
08.06.2018, 22:59
Yetty, если задуматься, то для того чтобы повернуть матрицу, не затрагивая ненужные элементы, можно еще cделать так: поворачивать ее частями. То есть, сначала повернуть периметр, затем слой ниже и т.д. пока не закончатся все слои. Вот другой код, который решает ту же самую задачу по описанному выше алгоритму:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <bits/stdc++.h>
 
    using namespace std;
 
int main() {
    int n;
    cout << "Enter a matrix size:\n";
    cout << "n = ";
    cin >> n;
    int** a = new int*[n];
    for (int i = 0; i < n; i++) {
        a[i] = new int[n];
    }
    cout << "Enter a matrix:\n";
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> a[i][j]; //Вводим элементы матрицы
        }
    }
    for (int i = 0; i < n / 2; i++) { //Здесь поворачиваем каждый слой
        for (int j = i; j < n - i - 1; j++) {
            int tmp = a[i][j];
            a[i][j] = a[j][n-i-1];
            a[j][n-i-1] = a[n-i-1][n-j-1];
            a[n-i-1][n-j-1] = a[n-j-1][i];
            a[n-j-1][i] = tmp;
        }
    }
    cout << "Target info:\n";
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cout << a[i][j] << " "; //Выводим получившуюся матрицу
        }
        cout << "\n";
    }
    for (int i = 0; i < n; i++) {
        delete [] a[i];
    }
    delete [] a;
    system("pause");
    return 0;
}
1
-1 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 375
09.06.2018, 02:31
И вот так тоже можно:

C++
1
2
3
4
5
6
7
8
9
10
template<size_t matrixSize> auto rotate(int (& matrix)[matrixSize][matrixSize]) -> void
{
    vector<stack<int>> stacks {matrixSize};
    for (size_t i {0}; i < matrixSize; ++i)
        for (size_t j {0}; j < matrixSize; ++j)
            stacks[i].push(matrix[i][j]);
    for (size_t i {0}; i < matrixSize; ++i)
        for (size_t j {0}; j < matrixSize; ++j)
            matrix[i][j] = stacks[j].top(), stacks[j].pop();
}
1
09.06.2018, 12:14
 Комментарий модератора 
3.1 Уважительно относитесь к другим участникам форума.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.06.2018, 12:14
Помогаю со студенческими работами здесь

Повернуть массив на 90˚ против часовой стрелки
Здравствуйте. Помогите пожалуйста решить задание по c++. Нужно повернуть массив на 90˚ против часовой стрелки.

Как повернуть элементы матрицы на 90 градусов против часовой стрелки?
ЗАДАНИЕ: Дана матрица. Повернуть все её элементы вокруг центра на 90 градусов против часовой стрелки. #include &lt;iostream&gt; ...

Необходимо повернуть все элементы матрицы, кроме диагональных, против часовой стрелки на 90 градусов
Здравствуйте! Необходимо повернуть все элементы матрицы, кроме диагональных, против часовой стрелки на 90 градусов. Например: Было: ...

Заполнить матрицу случайными числами. Развернуть матрицу на 90(градусов) против часовой стрелки
Заполнить матрицу случайными числами. Развернуть матрицу на 90o против часовой стрелки

Заполнить матрицу по спирали против часовой стрелки
помогите поменять циклы в коде и сделать такую спираль: 1 32 31 30 29 28 27 26 25 2 33 56 55 54 53 52 51 24 3 34 57 72 71 70 69 50 23...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru