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

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

Войти
Регистрация
Восстановить пароль
 
so1o
33 / 33 / 2
Регистрация: 16.11.2009
Сообщений: 192
#1

Поменять элементы матрицы в направлении против часовой стрелки - C++

16.11.2009, 20:40. Просмотров 814. Ответов 7
Метки нет (Все метки)

всем здраствуйте, мне надо составить программу чтобы меняла элементы матрицы в направлении против часовой стрелки, а центр остается неизменным, матрица 3 порядка, я сделал программу только в упрощенном ввиде , только по теме надо использовать массивы, помогите чуть чуть, а попытаюсь сам сообразить
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
#include <conio.h>
#include <stdio.h>
int main(void)
{
 int a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8;
 int x;
 clrscr();
 printf("x=");
 scanf("%d",&x);
 clrscr();
 printf("before\na11 a12 a13\na21 a22 a23\na31 a32 a33");
 if(x%h==0)
 {printf("\nnow\na11 a12 a13\na21 a22 a23\na31 a32 a33");}
 else if(x%g==0)
 {printf("\nnow\na21 a11 a12\na31 a22 a13\na32 a33 a23");}
 else if(x%f==0)
 {printf("\nnow\na31 a21 a11\na32 a22 a12\na33 a23 a13");}
 else if(x%e==0)
 {printf("\nnow\na32 a31 a21\na33 a22 a11\na23 a13 a12");}
 else if(x%d==0)
 {printf("\nnow\na33 a32 a31\na23 a22 a21\na13 a12 a11");}
 else if(x%c==0)
 {printf("\nnow\na23 a33 a32\na13 a22 a31\na12 a11 a21");}
 else if(x%b==0)
 {printf("\nnow\na13 a23 a33\na12 a22 a32\na11 a21 a31");}
 else if(x%a==0)
 {printf("\nnow\na12 a13 a23\na11 a22 a33\na21 a31 a32");}
 getch();
 return 0;
 }
только за эту кодировку, препод поставит мне кол... так что помогите плзз.!!
заранее благодарен
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2009, 20:40     Поменять элементы матрицы в направлении против часовой стрелки
Посмотрите здесь:

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

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

Заполнение матрицы против часовой стрелки - C++
Заполнить матрицу 9х9 числами, начиная с единицы: вниз - вправо - вверх - влево. Помогите, пожалуйста. Срочно надо...

Записать текст матрицы от ее центра по спирали против часовой стрелки - C++
Задача записать текст квадратной матрицы размера n(n-нечетное) от центра матрицы по спирали против часовой стрелки. Например матрица n i...

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

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

Заполнить матрицу с середины против часовой стрелки - C++
Нужно заполнить квадратную матрицу(то есть размер nXn) нужно заполнить по спирали, начиная с центра и продолжая идти против часовой...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
16.11.2009, 21:01     Поменять элементы матрицы в направлении против часовой стрелки #2
нет не правильно все .
C++
1
2
3
4
5
6
7
int m[4][4];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
cin>>m[i][j];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
cout<<m[i][j];
so1o
33 / 33 / 2
Регистрация: 16.11.2009
Сообщений: 192
16.11.2009, 21:17  [ТС]     Поменять элементы матрицы в направлении против часовой стрелки #3
можете пжлста уточнить что вы сделали?
дело в том что надо вводить число, и при этом элементы матрицы сдвигается против час стрелки, на столько же единиц сколько и ввели, т.е. например:
a11 a12 a13
a21 a22 a23
a31 a32 a33
например ввели единицу
ответ должен быть
a12 a13 a23
a11 a22 a33
a21 a31 a32
ваша программа так работает ?!
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
17.11.2009, 08:18     Поменять элементы матрицы в направлении против часовой стрелки #4
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 <conio.h>
#include <stdio.h>
int main()
{
    int mas[3][3]={11,12,13,21,22,23,31,32,33};
 int x, temp, i, j;
 printf("Itog: \n");
 for(i=0; i<3; i++)
 {
     for(j=0; j<3; j++)
         printf("%d  ", mas[i][j]);
     printf("\n");
 }
 //clrscr();
 printf("x=");
 scanf("%d",&x);
 //clrscr();
while(x>7)
x-=8;
for(i=0; i<x; i++)
{
    temp=mas[0][0];
    for(j=0; j<2; j++)
        mas[0][j]=mas[0][j+1];
    for(j=0; j<2; j++)
        mas[j][2]=mas[j+1][2];
    for(j=0; j<2; j++)
        mas[2][2-j]=mas[2][1-j];
        mas[2][0]=mas[1][0];
        mas[1][0]=temp;
}
 printf("Itog: \n");
 for(i=0; i<3; i++)
 {
     for(j=0; j<3; j++)
         printf("%d  ", mas[i][j]);
     printf("\n");
 }
 
 getch();
 return 0;
 }
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
17.11.2009, 14:16     Поменять элементы матрицы в направлении против часовой стрелки #5
для любого размера, но ПО часовой стрелки
против часовой догадаешься как сделать?
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
 
int main()
{
 
    printf("Enter size matrix: ");
    int n, cnt=0, temp, next_temp, next_i=0, next_j=0, sign_i=1, sign_j=0;
    int cycle=0;
    scanf("%d", &n);
 
    int**   matrix = (int**) malloc(n*sizeof(int));
    for (int i=0; i<n; i++)
    {
        matrix[i] = (int*)malloc(n*sizeof(int));
        for (int j=0; j<n; j++)
            matrix[i][j] = ++cnt;       
    }
    printf("\nMatrix before overturn:");
    for (int i=0; i<n; i++)
    {
        printf("\n");
        for (int j=0; j<n; j++)
            printf(" %3i",matrix[i][j]);        
    }
 
    // сдвигаем
    for (cycle=0; cycle<n/2; cycle++)
    {
        next_i=cycle; next_j=cycle;
        next_temp=matrix[next_i][next_j];
        for (int i=0; i<4*(n-1-2*cycle); i++)
        {       
            temp=next_temp;
            next_i-=sign_i; next_j-=sign_j;
            if(next_i<cycle)        {   next_i=cycle;   sign_i=0; sign_j=-1;    ++next_j;   /*printf("1 ");*/}
            if(next_j>=n-cycle) {   next_j=n-1-cycle; sign_i=-1; sign_j=0; ++next_i;/*printf("2 ");*/}
            if(next_i>=n-cycle) {   next_i=n-1-cycle; sign_i=0; sign_j=1; --next_j; /*printf("3 ");*/}
            if(next_j<cycle)        {   next_j=cycle;   sign_i=1; sign_j=0; --next_i; /*printf("4 ");*/}
            next_temp=matrix[next_i][next_j];
            matrix[next_i][next_j]=temp;
            //printf("(%i,%i): %i\n",next_i,next_j, matrix[next_i][next_j]);        
        }
    }   
 
    printf("\nMatrix after overturn:");
    for (int i=0; i<n; i++)
    {
        printf("\n");
        for (int j=0; j<n; j++)
            printf(" %3i",matrix[i][j]);        
    }
 
    getch();
    return 0;
}
so1o
33 / 33 / 2
Регистрация: 16.11.2009
Сообщений: 192
18.11.2009, 03:07  [ТС]     Поменять элементы матрицы в направлении против часовой стрелки #6
Цитата Сообщение от valeriikozlov Посмотреть сообщение
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 <conio.h>
#include <stdio.h>
int main()
{
    int mas[3][3]={11,12,13,21,22,23,31,32,33};
 int x, temp, i, j;
 printf("Itog: \n");
 for(i=0; i<3; i++)
 {
     for(j=0; j<3; j++)
         printf("%d  ", mas[i][j]);
     printf("\n");
 }
 //clrscr();
 printf("x=");
 scanf("%d",&x);
 //clrscr();
while(x>7)
x-=8;
for(i=0; i<x; i++)
{
    temp=mas[0][0];
    for(j=0; j<2; j++)
        mas[0][j]=mas[0][j+1];
    for(j=0; j<2; j++)
        mas[j][2]=mas[j+1][2];
    for(j=0; j<2; j++)
        mas[2][2-j]=mas[2][1-j];
        mas[2][0]=mas[1][0];
        mas[1][0]=temp;
}
 printf("Itog: \n");
 for(i=0; i<3; i++)
 {
     for(j=0; j<3; j++)
         printf("%d  ", mas[i][j]);
     printf("\n");
 }
 
 getch();
 return 0;
 }
пожалуйста если не сложно, могли бы вы объяснить все что находится после "while"
спасибо!
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
18.11.2009, 06:34     Поменять элементы матрицы в направлении против часовой стрелки #7
C
1
2
while(x>7)
x-=8;
В этих строках мы уменьшаем количество обменов (учитывая что полный оборот равен 8). Например если сделать девять обменов или один, то результат будет один и тот же. Поэтому вычитаем из x количество обменов равных полному кругу.

В строках ниже сам обмен:
C
1
2
3
4
5
6
7
8
9
10
11
12
for(i=0; i<x; i++)// цикл повторяем x раз
{
        temp=mas[0][0];// переменной temp присваиваем значение элемента массива [0][0]
        for(j=0; j<2; j++)                     // В этой строке и строке ниже присваиваем [0][0] значение 
                mas[0][j]=mas[0][j+1];     // [0][1], а [0][1] присваиваем [0][2]
        for(j=0; j<2; j++)                     //В этой строке и строке ниже присваиваем [0][2] значение 
                mas[j][2]=mas[j+1][2];    // [1][2], а [1][2] присваиваем значение [2][2]
        for(j=0; j<2; j++)                    // В этой строке и строке ниже присваиваем [2][2] значение
                mas[2][2-j]=mas[2][1-j]; // [2][1], а [2][1] присваиваем значение [2][0]
                mas[2][0]=mas[1][0];     // В этой строке [2][0] присваиваем значение [1][0]
                mas[1][0]=temp;           // [1][0] присваиваем значение temp
}
Начиная со строки 32 вывод на экран полученного массива. Думаю затруднений там не возникнет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2009, 15:13     Поменять элементы матрицы в направлении против часовой стрелки
Еще ссылки по теме:

Проблема с выводом массива спиралью против часовой стрелки - C++
Здравствуйте, недавно была задача, создать массив 10х10 рандомных чисел и вывести спиралью против часовой стрелки. В паскале задачу я...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
so1o
33 / 33 / 2
Регистрация: 16.11.2009
Сообщений: 192
18.11.2009, 15:13  [ТС]     Поменять элементы матрицы в направлении против часовой стрелки #8
Цитата Сообщение от valeriikozlov Посмотреть сообщение
C
1
2
while(x>7)
x-=8;
В этих строках мы уменьшаем количество обменов (учитывая что полный оборот равен 8). Например если сделать девять обменов или один, то результат будет один и тот же. Поэтому вычитаем из x количество обменов равных полному кругу.

В строках ниже сам обмен:
C
1
2
3
4
5
6
7
8
9
10
11
12
for(i=0; i<x; i++)// цикл повторяем x раз
{
        temp=mas[0][0];// переменной temp присваиваем значение элемента массива [0][0]
        for(j=0; j<2; j++)                     // В этой строке и строке ниже присваиваем [0][0] значение 
                mas[0][j]=mas[0][j+1];     // [0][1], а [0][1] присваиваем [0][2]
        for(j=0; j<2; j++)                     //В этой строке и строке ниже присваиваем [0][2] значение 
                mas[j][2]=mas[j+1][2];    // [1][2], а [1][2] присваиваем значение [2][2]
        for(j=0; j<2; j++)                    // В этой строке и строке ниже присваиваем [2][2] значение
                mas[2][2-j]=mas[2][1-j]; // [2][1], а [2][1] присваиваем значение [2][0]
                mas[2][0]=mas[1][0];     // В этой строке [2][0] присваиваем значение [1][0]
                mas[1][0]=temp;           // [1][0] присваиваем значение temp
}
Начиная со строки 32 вывод на экран полученного массива. Думаю затруднений там не возникнет.
аа все понятно, только вот один вопрос,
разве но этому коду мы матрицу не заставляем ли двигаться по часовой стрелки?? или я совсем туп?...

Добавлено через 1 минуту
аа все я разобрался, спасибо вам большое!!!
Yandex
Объявления
18.11.2009, 15:13     Поменять элементы матрицы в направлении против часовой стрелки
Ответ Создать тему
Опции темы

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