С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
33 / 33 / 5
Регистрация: 16.11.2009
Сообщений: 207
1

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

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

Author24 — интернет-сервис помощи студентам
всем здраствуйте, мне надо составить программу чтобы меняла элементы матрицы в направлении против часовой стрелки, а центр остается неизменным, матрица 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;
 }
только за эту кодировку, препод поставит мне кол... так что помогите плзз.!!
заранее благодарен
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.11.2009, 20:40
Ответы с готовыми решениями:

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

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

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

Поворот матрицы против часовой стрелки
Здравствуйте! Я собрал программу для решения этой задачи, но программа всё равно не работает. //...

7
159 / 156 / 47
Регистрация: 29.04.2009
Сообщений: 636
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];
0
33 / 33 / 5
Регистрация: 16.11.2009
Сообщений: 207
16.11.2009, 21:17  [ТС] 3
можете пжлста уточнить что вы сделали?
дело в том что надо вводить число, и при этом элементы матрицы сдвигается против час стрелки, на столько же единиц сколько и ввели, т.е. например:
a11 a12 a13
a21 a22 a23
a31 a32 a33
например ввели единицу
ответ должен быть
a12 a13 a23
a11 a22 a33
a21 a31 a32
ваша программа так работает ?!
0
Эксперт С++
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
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;
 }
1
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
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;
}
1
33 / 33 / 5
Регистрация: 16.11.2009
Сообщений: 207
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"
спасибо!
0
Эксперт С++
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
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 вывод на экран полученного массива. Думаю затруднений там не возникнет.
1
33 / 33 / 5
Регистрация: 16.11.2009
Сообщений: 207
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 минуту
аа все я разобрался, спасибо вам большое!!!
0
18.11.2009, 15:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.11.2009, 15:13
Помогаю со студенческими работами здесь

Заполнение матрицы спиралью против часовой стрелки
Напишите программу, которая выводит на экран матрицу размера N*N (0&lt;N&lt;100) заполненную змейкой...

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

Повернуть матрицу против часовой стрелки
Повернуть матрицу против часовой стрелки. Я написал программу, но она не запускается. Где-то я...

Заполнить матрицу по спирали против часовой стрелки
помогите поменять циклы в коде и сделать такую спираль: 1 32 31 30 29 28 27 26 25 2 33 56 55 54...


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

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