Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.81
iliapl
11 / 11 / 1
Регистрация: 04.11.2009
Сообщений: 29
#1

Поворот матрицыа на 90градусов - C++

04.11.2009, 22:12. Просмотров 5323. Ответов 6

Вобщем инициализируется матрица с клавиатуры и нужно её повернуть на 90градусов)
Вот код программы:
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
#include <iostream>
#include <conio.h>
#include <locale>
using namespace std;
void ReadData_SizeMatrix(int &n,int &m)
{
        cout<<"Введите количество строк матрицы А: "<<endl;
        cin>>n;
        cout<<"Введите количество столбцов матрицы А: "<<endl;
        cin>>m;
}
void ReadData_Matrix(int **A,int &n,int &m)
{
        for (int i=0;i<n;i++)
                for(int j=0;j<m;j++)
                {
                        cout<<"введите элемент A["<<i<<"]["<<j<<"]";
                        cin>>A[i][j];
                }
}
void OutputData(int **A,int n,int m)
{
        for (int i=0;i<n;i++)
                {
                for(int j=0;j<m;j++)
                {
                        cout<<A[i][j]<< " ";
                                }
                                cout<<" "<<endl;
                }
}
void Povorot(int **A,int **B,int n,int m)
{
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            B[i][j]=A[j][n+1-i];
}
int main ()
{
        setlocale(LC_ALL,"Russian");
        int **A,**B,n,m;
        ReadData_SizeMatrix(n,m);
        A=new int*[n];
        for(int i=0; i<n; i++)
            A[i]=new int[m];
        B=new int*[n];
        for(int i=0; i<n; i++)
            B[i]=new int[m];
        ReadData_Matrix(A,n,m);
        Povorot(A,B,n,m);
        OutputData(B,n,m);
        getch();
        return 0;
}
Вообщем помогите найти ошибочку)На 270градусов(если в 37 строчке поменять [n+1-i] на [n-1-i]) всё хорошо поворачивает,а на 90 нет((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2009, 22:12     Поворот матрицыа на 90градусов
Посмотрите здесь:

Поворот двумерного вектора на 45 градусов - C++
Нашел решение близко похожее на нужное, но поворот происходит на 90 градусов. Сначала решил по глупости сделать отсчет не через...

Поворот массива на 90 градусов по часовой стрелке - C++
Всем привет! Помогите найти ошибку, программа должна поворачивать целочисленный массив на 90 градусов по часовой стрелке Пример 1 2 3 ...

Поворот матрицы на 90 градусов относительно центра - C++
Как реализовать это в с++? И размерность матрицы задается пользователем (если да, то как?) или сразу же прописывается в программе (хотя в...

Поворот матрицы на 180 градусов по часовой стрелке - C++
Нужна программа,которая повернет квадратную матрицу из N строк и N столбцов на 180 по часовой. программа на С++ За ранее благодарю:)

двухмерный вектор(матрица) сложение элементов и поворот на 90 градусов - C++
Нужно что бы по главной диагонали элементы были равны сумме элементов, находящихся с ним в одной строке и одном столбце. И повернуть на...

поворот на 90... - C++
Хочу повернуть матрицу по часовой стрелке на 90 градусов, но че-то не получается... Помогите найти ошибку... Вот мой код: #include...

Поворот матрицы - C++
Составить программу решения задачи на С + + и Паскаль. Вывод матрицы на экран оформить в виде процедуры. Дано квадратную матрицу....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
05.11.2009, 00:05     Поворот матрицыа на 90градусов #2
iliapl,
Попробуй 37 строчку
C++
1
B[i][j]=A[j][n+1-i];
заменить на
C++
1
B[i,j]=A[n-j+1][i];
Добавлено через 8 минут
или так...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int tmp = 0;
...
for (int i=1; i < n/2;++i) 
{
  for (int k=i; k < n-i;++k)
  {
    tmp = a[i][k];
    a[i][k] = a[n-k+1][i];
    a[n-k+1][i] = a[n-i+1][n-k+1];
    a[n-i+1][n-k+1] = a[k][n-i+1];
    a[k][n-i+1] = tmp;
    }
  }
-=ЮрА=-
Заблокирован
Автор FAQ
05.11.2009, 13:41     Поворот матрицыа на 90градусов #3
Вот подправил твой код для поворота матрицы,
ещё с универа использовал для этого простое условие
B[i][j] = A[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
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
#include <locale>
#include <conio.h>
 
using namespace std;
 
void ReadData_SizeMatrix(int &n,int &m)
{
        cout<<"Введите количество строк матрицы А: "<<endl;
        cin>>n;
        cout<<"Введите количество столбцов матрицы А: "<<endl;
        cin>>m;
}
 
void ReadData_Matrix(int **A,int &n,int &m)
{
    if(A)
    {
        for(int i=0,j;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                cout<<"введите элемент A["<<i<<"]["<<j<<"] : ";
                cin>>A[i][j];
            }
        }
    }
}
 
void OutputData(int **A,int n,int m)
{
    if(A)
    {
        for (int i=0,j;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                cout<<A[i][j]<< " ";
            }
            cout<<" "<<endl;
        }
    }
}
 
void Povorot(int **A,int **B,int n,int m)
{
    if(A && B)
    {
        for(int i = 0,j; i < n; i++)
        {
           for( j = 0; j < m; j++)
              B[j][i]=A[i][j];
        }
    }
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int **A,**B,n,m;
    ReadData_SizeMatrix(n,m);
    A = new int*[n];
    B = new int*[n];
 
    //Тут экономим на числе циклов
    for(int i=0; i<n; i++)
    {
        A[i]=new int[m];
        B[i]=new int[m];
    }
    ReadData_Matrix(A,n,m);
    //Покажем исходную матрицу
    cout<<"\tMatrix A\r\n";
    OutputData(A,n,m);
    Povorot(A,B,n,m);
    //Вывод транспонированной матрицы
    cout<<"\tMatrix B\r\n";
    OutputData(B,n,m);
    getch();
    return 0;
}
Миниатюры
Поворот матрицыа на 90градусов  
alibaba314
18 / 18 / 1
Регистрация: 22.03.2009
Сообщений: 58
05.11.2009, 15:20     Поворот матрицыа на 90градусов #4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Вот подправил твой код для поворота матрицы,
ещё с универа использовал для этого простое условие
B[i][j] = A[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
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
#include <locale>
#include <conio.h>
 
using namespace std;
 
void ReadData_SizeMatrix(int &n,int &m)
{
        cout<<"Введите количество строк матрицы А: "<<endl;
        cin>>n;
        cout<<"Введите количество столбцов матрицы А: "<<endl;
        cin>>m;
}
 
void ReadData_Matrix(int **A,int &n,int &m)
{
    if(A)
    {
        for(int i=0,j;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                cout<<"введите элемент A["<<i<<"]["<<j<<"] : ";
                cin>>A[i][j];
            }
        }
    }
}
 
void OutputData(int **A,int n,int m)
{
    if(A)
    {
        for (int i=0,j;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                cout<<A[i][j]<< " ";
            }
            cout<<" "<<endl;
        }
    }
}
 
void Povorot(int **A,int **B,int n,int m)
{
    if(A && B)
    {
        for(int i = 0,j; i < n; i++)
        {
           for( j = 0; j < m; j++)
              B[j][i]=A[i][j];
        }
    }
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int **A,**B,n,m;
    ReadData_SizeMatrix(n,m);
    A = new int*[n];
    B = new int*[n];
 
    //Тут экономим на числе циклов
    for(int i=0; i<n; i++)
    {
        A[i]=new int[m];
        B[i]=new int[m];
    }
    ReadData_Matrix(A,n,m);
    //Покажем исходную матрицу
    cout<<"\tMatrix A\r\n";
    OutputData(A,n,m);
    Povorot(A,B,n,m);
    //Вывод транспонированной матрицы
    cout<<"\tMatrix B\r\n";
    OutputData(B,n,m);
    getch();
    return 0;
}
а это Транспонированная матрица

Добавлено через 2 минуты
OutputData(B,n,m);
и последний надо писать так:
C++
1
OutputData(B,m,n);
plz
-=ЮрА=-
Заблокирован
Автор FAQ
05.11.2009, 15:29     Поворот матрицыа на 90градусов #5
На сколько я помню математику, то повернуть по главной диагонали можно лишь квадратную матрицу, так что думая менять строки и столбци не имеет смысла...Но по сути замечание правильное
iliapl
11 / 11 / 1
Регистрация: 04.11.2009
Сообщений: 29
06.11.2009, 17:40  [ТС]     Поворот матрицыа на 90градусов #6
Ну собственно транспонировать относительно главной диагонали и я могу)))ув.-=ЮрА=- вы видимо просто не так поняли задачу)
Вообщем нужно не транспонировать,а именно повернуть матрица на 90градусов по часовой(забл добавить в самом начале), т.е. если у нас была вначале такая матрица:
1 2 3
4 5 6
7 8 9
то мы должны получить:
7 4 1
8 5 2
9 6 3
а не то,что у вас получается:
1 4 7
2 5 8
3 6 9

Но всё равно спасибо за внимание.Собственно ув.insolent уже показал что нужно сделать для решения моей проблемы))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2010, 13:41     Поворот матрицыа на 90градусов
Еще ссылки по теме:

Поворот матрицы - C++
Нужно повернуть квадратную матрицу на 180 градусов. У меня не поворачиваются все елементы кроме двух... ...

Поворот матрицы - C++
Здравствуйте! Мне нужно повернуть матрицу на 90 градусов вправо, то есть дается: ------- abcd edgh ijkl mnop ------- ...

Поворот фигуры - C++
Всем привет, нужна ваша помощь: Я сделал функцию для поворота фигуры, но после многократного применения фигура трансформируется,...

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

Поворот изображения - C++
Доброго времени суток. Возникла проблема при написании программы для обнаружения лица. Обнаружение проходит отлично, но если изображение...


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

Или воспользуйтесь поиском по форуму:
Dzhos
5 / 5 / 0
Регистрация: 17.12.2010
Сообщений: 34
17.12.2010, 13:41     Поворот матрицыа на 90градусов #7
попробуй этот код
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
#include <iostream>
 
using namespace std;
 
int main (){
 
    int b=0;
  int c[100][100];
  int m , n ;
  cin >>   n>>m;
  for (int i = 0; i <n; i++){
    for (int j = 0; j <  m; j++){
       c[i][j] = ++b;
    }
  }
  int k=0;
  while(k!=m){
    for(int i=n-1;i>=0;i--){
    cout<<c[i][k]<<" ";
    }
    k++;
    cout<<endl;
    
  }
 
  
     
return 0;
}
Yandex
Объявления
17.12.2010, 13:41     Поворот матрицыа на 90градусов
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru