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

Повернуть двумерный массив на 90 градусов. Размер задать с клавиатуры. C++

26.01.2018, 22:31. Показов 11796. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно повернуть массив, без использования дополнительного массива. Массив (матрица) квадратный. Вроде как код написал, но ошибка получается.
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "stdafx.h"
#include <iostream>
#include  <stdlib.h>
#include   <ctime>
//#include <vector>
using namespace std;
 
 
 
 
int main()
{
    srand(time(NULL));
    setlocale(LC_CTYPE, "rus");
 
    int **Arr;    //создание динамического массива
    int N, M, i, j;
    cout << "Enter N:";
    cin >> N;
    M = N;
    Arr = new int*[N];
    for (i = 0;i < N; i++) 
        Arr[i] = new int[M]; 
        for (j = 0; j < M; j++)
            Arr[i][j] = rand() % 10;
 
    for (int i = 0; i < N; ++i) //вывод массива
    {
        for (int j = 0; j < N; ++j)
            cout << Arr[i][j] << "\t";
        cout << endl;
    }
 
 
    int p;
    int Number;
    p = N / 2;
    for (int i = 0; i < p; ++i)   //поворот массива на 90 градусов 
    {
        for (int j = 0; j < N - i; ++j)
        {
            Number = Arr[i][j];
            Arr[i][j] = Arr[N - j + 1, i];
            Arr[N - j + 1, i]  = Arr[N - i + 1, N - j + 1];
            Arr[N - i + 1, N - j + 1]  = Arr[j, N - i + 1];
            Arr[j, N - i + 1]  = Number;
        }
    }
 
    for (int i = 0; i < N; ++i)  //повторный вывод
    {
        for (int j = 0; j < N; ++j)
            cout << Arr[i][j] << "\t";
        cout << endl;
    }
 
    delete[] Arr;
    system("pause");
    return 0;
}
в строках: Arr[i][j] = Arr[N - j + 1, i]; и Arr[j, N - i + 1] = Number; ошибка "значение типа "int *" нельзя присвоить сущности типа "int" "
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2018, 22:31
Ответы с готовыми решениями:

Повернуть двумерный массив на 90 градусов
Повернуть двумерный массив на 90 градусов по часовой стрелке. двумерный массив - размер 10х10,...

Требуется повернуть двумерный массив на 90 градусов
Здравствуйте, у меня проблема. Программа поворачивает массив, но не вывод последнюю строку. (...

Повернуть двумерный массив размера n*n на 90 градусов против часовой стрелки
Повернуть двумерный массив размера n*n на 90 градусов против часовой стрелки и вывести результат...

Массив: Повернуть двумерный массив на 90 градусов...
Дан динамический двумерный массив размера m x n нужно повернуть двумерный массив на 90 градусов...

3
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
26.01.2018, 22:34 2
Цитата Сообщение от Tomark1881 Посмотреть сообщение
C++
1
Arr[N - j + 1, i]
может таки
C++
1
Arr[N - j + 1][i]
?

P.S.: Вас не устроит просто изменить порядок обращения\вывода?
0
0 / 0 / 0
Регистрация: 05.06.2017
Сообщений: 2
26.01.2018, 23:18  [ТС] 3
тогда не совсем поворот на 90 градусов получается
это при условии, что я вас правильно понял

Добавлено через 10 минут
Цитата Сообщение от Herji Посмотреть сообщение
Выделить код
1
Ar
тогда получится не совсем поворот на 90 градусов
это если я вас правильно понял
и стоило изменить Arr[i][j] на Arr[j][i]
0
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
26.01.2018, 23:40 4
Лучший ответ Сообщение было отмечено Tomark1881 как решение

Решение

Цитата Сообщение от Tomark1881 Посмотреть сообщение
и стоило изменить Arr[i][j] на Arr[j][i]
Не совсем. К примеру:
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
    int m = 10;
    int n = 4;
 
    std::cout << "Normal: \n\n";
 
    int **arr = new int*[m];
    for(int i=0; i<m; i++)
    {
        arr[i] = new int[n];
        for(int j=0; j<n; j++)
        {
            arr[i][j] = rand()%10;
            std::cout << arr[i][j] << " ";
        }
        std::cout << "\n";
    }
 
    std::cout << "\nRotated: \n\n";
 
    for(int i=0; i<n; i++)
    {
        for(int j=m-1; j>=0; j--)
        {
            std::cout << arr[j][i] << " ";
        }
        std::cout << "\n";
    }
 
    for(int i=0; i<m; i++)
        delete [] arr[i];
    delete [] arr;
Однако с самим массивом ничего не происходит, просто вывод в другом порядке, поэтому и спрашиваю - устроит ли такое
1
26.01.2018, 23:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2018, 23:40
Помогаю со студенческими работами здесь

Заданный двумерный массив повернуть но 90 градусов вправо без использования вспомогательных массивов
Заданный двумерный массив N*N повернуть но 90 градусов вправо. без использования вспомагательных...

Дан квадратный двумерный массив, повернуть его на 90 градусов по часовой стрелке без использования второго массива
Дан квадратный двумерный массив, повернуть его на 90 градусов по часовой стрелке без использования...

Повернуть массив на 90 градусов
Нужно повернуть массив на 90 градусов,но только нужно повернуть его так чтобы то что внутри массива...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru