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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
extremx
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 11
#1

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

14.12.2011, 23:42. Просмотров 2367. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос поворот массива на 90° (C++):

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

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

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

Поворот прямоугольного массива - C++
Помогите пожалуйста с решением Поворот прямоугольного массива Дан прямоугольный массив размером 3×4. Поверните его на 90 градусов по...

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Net_Wanderer
235 / 208 / 19
Регистрация: 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 / 19
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2011, 00:16
Привет! Вот еще темы с ответами:

Поворот массива на 90 градусов (cannot convert form char to char*) - C++
Пытаюсь повернуть массив на 90 градусов. Понимаю что проблема в преобразовании данных, но не знаю как исправить( Может кто подсказать...

Поворот массива - C#
В заданном двумерном массиве размером NxN повернуть вправо на 90 градусов без использования вспомогательных массивов.

Не могу сделать поворот матрицы на каждое нажатие, и её нормальный поворот - Delphi
var Form1: TForm1; m, n: integer; i, j: byte; b, a: array of integer; implementation uses Unit2, Unit3;

Поворот одномерного массива - Turbo Pascal
Допустим ввожу отрицательное число значит поворот в лева, а положительное в права Пример: 1 2 3 4 5 Ввел -2 3 4 5 1 2 так же и с...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.12.2011, 00:16
Ответ Создать тему
Опции темы

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