Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/16: Рейтинг темы: голосов - 16, средняя оценка - 4.75
extremx
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 11
1

поворот массива на 90°

14.12.2011, 23:42. Просмотров 3019. Ответов 4
Метки нет (Все метки)

всем привет. помогите разобраться с одной простенькой задачкой.

есть массив. сделал зеркальный поворот массива, но теперь нужно повернуть его на 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
#include <iostream>
#include <cstdlib>
 
const int n = 4;
const int m = 4;
 
int main()
{
    int a[n][m];
    
    for(int i=0; i<n; ++i)
        for(int j=0; j<m; ++j)
                a[i][j] = rand()%90 + 10;
                
    for(int i=0; i<n; ++i)
    {
            for(int j=0; j<m; ++j)
                    std::cout << a[i][j] << " ";
            std::cout << std::endl;
    }
    
    std::cout << std::endl;
    
    for(int i=0; i<n; ++i)
            for(int j=0; j<m/2; ++j)
                    std::swap(a[i][j], a[i][m-j-1]);
    
    for(int i=0; i<n; ++i)
    {
            for(int j=0; j<m; ++j)
                    std::cout << a[i][j] << " ";
            std::cout << std :: endl;
    }
                    
 
system("pause");
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2011, 23:42
Ответы с готовыми решениями:

Поворот массива на 45%
Здравствуйте уважаемые форумчане, у меня появилась задачка одна, нужно ...

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

Поворот прямоугольного массива
Помогите пожалуйста с решением Поворот прямоугольного массива Дан...

Поворот двумерного массива
Здравствуйте! Как правильно осуществить поворот массива? Проблема в чем может...

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

4
Net_Wanderer
235 / 208 / 29
Регистрация: 08.06.2011
Сообщений: 467
14.12.2011, 23:46 2
матрицы: повернуть на 90 градусов;
0
extremx
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 11
14.12.2011, 23:52  [ТС] 3
ну там есть простои массив а здесь с a[i][j] = rand()%90 + 10
0
Net_Wanderer
235 / 208 / 29
Регистрация: 08.06.2011
Сообщений: 467
15.12.2011, 00:05 4
Цитата Сообщение от extremx Посмотреть сообщение
ну там есть простои массив а здесь с a[i][j] = rand()%90 + 10
Ну так переделайте, ибо там не много...
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define N  4
 
#define swap(t, a, b) \
        { t temp = (a); (a) = (b); (b) = temp; }
 
void reverse(int *arr, int i, int j)
{
        if (i < j) {
                swap(int, arr[i], arr[j]);
                reverse(arr, i + 1, j - 1);
        }
}
 
#define index(i, j, ord) \
        ((i) * (ord) + (j))
 
int *transpose(int *m, int ord)
{
        int i, j;
 
        for (i = 0; i < ord; i++)
                for (j = i; j < ord; j++)
                        swap(int, m[ index(i, j, ord) ],
                                m[ index(j, i, ord) ]);
        return m;
}
 
int *turn90deg(int *m, int ord)
{
        int i, n;
 
        transpose(m, ord);
 
        for (n = 0, i = 0; i < ord; i++, n += ord)
                reverse(m + n, 0, ord - 1);
        return m;
}
 
void dump(int *m, int ord)
{
        int i;
 
        for (i = 0; i < ord * ord; i++)
                printf("%d%c", m[i], 
                        (i+1) % ord ? ' ' : '\n');
}
 
int main()
{
    int m[N][N];
    int i, j;
 
    srand(time(NULL));
    printf("the original matrix:\n\n");
    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++) {
            m[i][j] = rand() % 90 + 10;
            printf("%2d ", m[i][j]);
        }
        printf("\n\n");
    }
 
    printf("turned 90 degrees:\n\n");
    turn90deg(*m, N);
        for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++) 
            printf("%2d ", m[i][j]);
        printf("\n\n");
    }
    return 0;
}
0
extremx
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 11
15.12.2011, 00: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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <stdio.h>
#include <stdlib.h>
 
char matrix[3][3];  /* матрица игры */
 
char check(void);
void init_matrix(void);
void get_player_move(void);
void get_computer_move(void);
void disp_matrix(void);
 
int main(void)
{
  char done;
 
  printf("Это игра в крестики-нолики.\n");
  printf("Вы будете играть против компьютера.\n");
 
  done =  ' ';
  init_matrix();
 
  do {
    disp_matrix();
    get_player_move();
    done = check(); /* проверка, есть ли победитель */
    if(done!= ' ') break; /* есть победитель */
    get_computer_move();
    done = check(); /* проверка, есть ли победитель */
  } while(done== ' ');
 
  if(done=='X') printf("Вы победили!\n");
  else printf("Победил компьютер!!!!\n");
  disp_matrix(); /* показ финальной позиции */
 
  return 0;
}
 
/* Инициализация матрицы игры. */
void init_matrix(void)
{
  int i, j;
 
  for(i=0; i<3; i++)
    for(j=0; j<3; j++) matrix[i][j] =  ' ';
}
 
/* Ход игрока. */
void get_player_move(void)
{
  int x, y;
 
  printf("Введите координаты X,Y Вашего хода: ");
  scanf("%d%*c%d", &x, &y);
 
  x--; y--;
 
  if(matrix[x][y]!= ' '){
    printf("Неверный ход, попытайтесь еще.\n");
    get_player_move();
  }
  else matrix[x][y] = 'X';
}
 
/* Ход компьютера. */
void get_computer_move(void)
{
  int i, j;
  for(i=0; i<3; i++){
    for(j=0; j<3; j++)
      if(matrix[i][j]==' ') break;
    if(matrix[i][j]==' ') break;
  /* Второй break нужен для выхода из цикла по i */
  }
 
  if(i*j==9)  {
    printf("Конец игры\n");
    exit(0);
  }
  else
    matrix[i][j] = 'O';
}
 
/* Вывод матрицы на экран. */
void disp_matrix(void)
{
  int t;
 
  for(t=0; t<3; t++) {
    printf(" %c | %c | %c ",matrix[t][0],
            matrix[t][1], matrix [t][2]);
    if(t!=2) printf("\n---|---|---\n");
  }
  printf("\n");
}
 
/* Определение победителя. */
char check(void)
{
  int i;
 
  for(i=0; i<3; i++)  /* проверка строк */
    if(matrix[i][0]==matrix[i][1] &&
       matrix[i][0]==matrix[i][2]) return matrix[i][0];
 
  for(i=0; i<3; i++)  /* проверка столбцов */
    if(matrix[0][i]==matrix[1][i] &&
       matrix[0][i]==matrix[2][i]) return matrix[0][i];
 
  /* проверка диагоналей */
  if(matrix[0][0]==matrix[1][1] &&
     matrix[1][1]==matrix[2][2])
       return matrix[0][0];
 
  if(matrix[0][2]==matrix[1][1] &&
     matrix[1][1]==matrix[2][0])
       return matrix[0][2];
 
  return ' ';
}
0
15.12.2011, 00:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2011, 00:16

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

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

Поворот массива на 90 градусов (cannot convert form char to char*)
Пытаюсь повернуть массив на 90 градусов. Понимаю что проблема в...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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