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

Произвести "поворот" матрицы по часовой стрелке

27.12.2016, 12:58. Показов 2046. Ответов 3
Метки c++ (Все метки)

Author24 — интернет-сервис помощи студентам
Задание:
Задан квадратный массив А из N строк и N столбцов. Произвести «поворот по часовой стрелке» массива таким образом, чтобы элементы 1 строки стали элементами N столбца, второй строки элементами N-1 столбца.
Я написал программу, но массив вместо переворота отражается, как надо правильно написать?
Программа:
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
#include "stdafx.h" 
#include <iostream> 
#include <conio.h> 
#include <ctime> 
#include <windows.h> 
HANDLE hStdout;
int main()
{
    SetConsoleTextAttribute(hStdout, 15);
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
    srand(time(NULL));
    double x;
    double f;
    int array[100][100];
    int c[100];
    for (int i = 0; i < 100; i++)
        c[i] = 0;
    setlocale(LC_CTYPE, "rus"); // вызов функции настройки локали
    printf("Введите N: ");
    scanf_s("%lf", &f);
 
    while (f <= 0 || f > 30 || round(f) != f)
    {
        printf("Вводите N cнова: ");
        scanf_s("%lf", &f);
    }
    int n = (int)f;
 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            array[i][j] = rand() % 2;
            printf("%3d", array[i][j]);
        }
        printf("\n");
    }
    printf("\n");
 
    int flag;
    int s = 0;
 
    for (int i = 0; i < n; i++)
    {
        flag = 1;
        for (int j = 1; j < n; j++)
        {
            if (array[i][j - 1] == array[i][j])
                flag = 0;
        }
        if (flag == 1)
        {
            s++;
            c[i] = 1;
        }
    }
 
    for (int i = 0; i < n; i++)
    {
        if (c[i] == 1)
            SetConsoleTextAttribute(hStdout, 14);
        else
            SetConsoleTextAttribute(hStdout, 15);
        for (int j = 0; j < n; j++)
        {
            printf("%3d", array[j][i]);
        }
        printf("\n");
    }
    printf("\n %d", s);
    _getch();
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.12.2016, 12:58
Ответы с готовыми решениями:

Дана квадратная матрица : произвести поворот матрицы на 90 градусов по часовой стрелке
Пример: 3 1 2 3 4 5 6 7 8 9 Ответ: 7 4 1 8 5 2 9 6 3

Поворот неквадратной матрицы на 90° по часовой стрелке
Написать программу, выполняющую поворот неквадратной матрицы на 90° по часовой стрелке. Матрицы...

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

Поворот фигуры по часовой стрелке
Помогите вывести формулу для поворота фигуры на произвольный угол. У меня выходит одно уравнение с...

3
Заблокирован
27.12.2016, 13:06 2
Den_Nick, чесно лень читать, но суть в том что нужен временный массив
те допустим есть а[x][y] создаём b[-x_1][...] где -x_1 есть горизонтальный ряд ! вертикального сложения первых элементов изначального массива но в обратном порядке те при повороте нужно изменить порядок
1
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
27.12.2016, 16:01 3
Цитата Сообщение от Den_Nick Посмотреть сообщение
как надо правильно написать?
Сначала надо транспонировать, а потом отразить относительно вертикальной оси, т.е. чтобы первый столбец поменять с последним и т.д.
1
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
27.12.2016, 19:21 4
Лучший ответ Сообщение было отмечено Den_Nick как решение

Решение

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
#include <iostream>
#include <time.h>
using namespace std;
 
void print(int n, int **a)
{
    for(int i = 0; i < n; ++i)
    {
        for(int j = 0; j < n; ++j)
           cout << a[i][j] << "\t";
    cout << endl;
    }
}
 
 void RotateMatrix(int **matrix, int **ret, int n)
        {
            for (int i = 0; i < n; ++i)
               for (int j = 0; j < n; ++j)
               //   ret[n - j - 1][i] = matrix[i][j]; против часовой стрелки
                     ret[i][j] = matrix[n - j - 1][i];
 
        }
int main()
{
    srand(time(NULL));
    int n = 4;
    int **array;
    array = new int *[n];
    
    int **ret;
    ret = new int *[n];
    for(int i = 0; i < n; ++i){
       array[i]= new int [n];
       ret[i]= new int [n];
    }
    for(int i = 0; i < n; ++i)
        for(int j = 0; j < n; ++j)
            array[i][j] = rand() % 10;
    cout << " Matr " << endl;
    print(n,array);
    RotateMatrix(array,ret,4);
    cout << " Rotate " << endl;
    print(n,ret);
    system("pause");
    return 0;
}
1
27.12.2016, 19:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2016, 19:21
Помогаю со студенческими работами здесь

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

Заполнение матрицы по спирали (из центра по часовой стрелке)
Пользователь должен ввести размерность матрици!Матрица квадратная!А программа должна заполнить её...

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

Преобразование матрицы в одномерный массив по часовой стрелке
Преобразование матрицы в одномерный массив по часовой стрелке в C++. К примеру: 4 5 7 3 6 8...

Содержимое матрицы размерности n x n повернуть на 90 по часовой стрелке вокруг центра симметрии матрицы. Исходная матрица вводится из файла
Help me plz

Вывести на экран значения матрицы, взятые по спирали по часовой стрелке
Мне очень нужно написать программу а я несовсем понимаю как((( Здача такая: Дана матрица N*M...

Где ошибка в программе переставления блоков матрицы по часовой стрелке?
Такая задача: Дана действительная квадратная матрица порядка 2n. Получить новую матрицу,...


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

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