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

Как лучше переделать программу чтобы отсутствовали глобальных переменных - C++

Восстановить пароль Регистрация
 
morphex
-1 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 7
21.12.2013, 12:44     Как лучше переделать программу чтобы отсутствовали глобальных переменных #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
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
/* Igra v Kpestiki Noliki */
#include <stdio.h>
#include <stdlib.h>
 
char matrix[3][3]; /* Igral'naya Doska */
 
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("Eto - igra v kpestiki noliki.\n");
    printf("Vi bydete igrat' s kompyterom.\n");
    
    done = ' ';
    init_matrix();
    do{
                  disp_matrix();
                  get_player_move();
                  done = check(); /* Est' lu pobeditel' ? */
                  if(done!= ' ') break; /* Pobeditel' opredelen!*/
                  get_computer_move();
                  done = check(); /* Est' li pobeditel' ?*/
                } while(done== ' ');
                if(done=='X') printf("Vi pobedili!\n");
                else printf("Ya viygral!!!\n");
                disp_matrix(); /* Final'noe polojenie */
                
                return 0;
}
 
/* Inicializaciya matrici. */
void init_matrix(void)
{
     int i, j;
     
     for(i=0; i<3; i++)
         for(j=0; j<3; j++) matrix[i][j] = ' ';
}                         
 
/* Xod Igroka */
void get_player_move(void)
{
     int x, y;
     
     printf("Vvedite koopdinati X,Y: ");
     scanf("%d%*c%d", &x, &y);
     
     x--; y--;
     
     if(matrix[x][y]!= ' '){
        printf("Neveriy xod, popitaytes' ewe.\n");
        get_player_move();
        }
        else matrix[x][y] = 'X';
}
/* Xod Kompytera*/
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;
     }
     
     if(i*j==9) {
        printf("Nichya\n");
        exit(0);
     }
      else
         matrix[i][j] = 'O';
}
/*Vivesti matricy na ekpan. */
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");
}
/* Proverit', est' li pobeditel'. */
char check(void)
{
     int i;
     
     for(i=0; i<3; i++) /* Provepka strok */
       if(matrix[i][0]==matrix[i][1] &&
         matrix[i][0]==matrix[i][2]) return matrix[i][0];
        
     for(i=0; i<3; i++) /* Provepka stolbcov */
       if(matrix[0][i]==matrix[1][i] &&
         matrix[0][i]==matrix[2][i]) return matrix[0][i];
        
     /* Provepka Diagonaley */
     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 ' ';
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2013, 12:44     Как лучше переделать программу чтобы отсутствовали глобальных переменных
Посмотрите здесь:

Инициализация глобальных переменных C++
поиск глобальных переменных с++ C++
C++ Исправить без использования глобальных переменных
Использование глобальных переменных - моветон ли? C++
Объявление глобальных переменных C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
21.12.2013, 12:51     Как лучше переделать программу чтобы отсутствовали глобальных переменных #2
C++
1
2
template<size_t N, size_t M>
char check(const int matrix[N][M]);
Добавлено через 41 секунду
или проще
C++
1
char check(const int **matrix);
Добавлено через 53 секунды
В случае в шаблоном можно не передавать размерность массива.
morphex
-1 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 7
21.12.2013, 13:18  [ТС]     Как лучше переделать программу чтобы отсутствовали глобальных переменных #3
outoftime, а как будет выглядеть весь код ?можешь написать ?

Добавлено через 24 минуты
outoftime, напиши плиз весь код целиком
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
21.12.2013, 13:20     Как лучше переделать программу чтобы отсутствовали глобальных переменных #4
Для всех функций изменения аналогичные.

Добавлено через 1 минуту
C++
1
char matrix[3][3];
вынести сюда
C++
1
2
3
int main(void)
{
    char done, matrix[3][3];
Добавлено через 36 секунд
C++
1
    init_matrix();
вызывать с параметром
C++
1
    init_matrix(matrix);
morphex
-1 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 7
21.12.2013, 13:36  [ТС]     Как лучше переделать программу чтобы отсутствовали глобальных переменных #5
outoftime, программа в самом конце ругается на скобку, где мне закрыть её надо ?

Добавлено через 6 минут
outoftime, можешь полностью весь весь весь код написать ?)
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
21.12.2013, 13:50     Как лучше переделать программу чтобы отсутствовали глобальных переменных #6
А я откуда знаю? Вы ни ошибку не написали ни код не дали.

Добавлено через 18 секунд
Цитата Сообщение от morphex Посмотреть сообщение
можешь полностью весь весь весь код написать ?)
Пошли в раздел фриланс (:
morphex
-1 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 7
21.12.2013, 18:34  [ТС]     Как лучше переделать программу чтобы отсутствовали глобальных переменных #7
outoftime, цени
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
/* Igra v Kpestiki Noliki */
#include <stdio.h>
#include <stdlib.h>
 
char matrix[3][3]; /* Igral'naya Doska */
int main(void)
{
 char done, matrix[3][3];
 init_matrix();
 void get_player_move(void);
 void get_computer_move(void);
 void disp_matrix(void);
 
int main(void)
{
    char done;
    
    printf("Eto - igra v kpestiki noliki.\n");
    printf("Vi bydete igrat' s kompyterom.\n");
    
    done = ' ';
    init_matrix(matrix);
    do{
                  disp_matrix();
                  get_player_move();
                  done = check(); /* Est' lu pobeditel' ? */
                  if(done!= ' ') break; /* Pobeditel' opredelen!*/
                  get_computer_move();
                  done = check(); /* Est' li pobeditel' ?*/
                } while(done== ' ');
                if(done=='X') printf("Vi pobedili!\n");
                else printf("Ya viygral!!!\n");
                disp_matrix(); /* Final'noe polojenie */
                
                return 0;
}
 
/* Inicializaciya matrici. */
init_matrix(matrix);
{
     int i, j;
     
     for(i=0; i<3; i++)
         for(j=0; j<3; j++) matrix[i][j] = ' ';
}                         
 
/* Xod Igroka */
void get_player_move(void);
{
     int x, y;
     
     printf("Vvedite koopdinati X,Y: ");
     scanf("%d%*c%d", &x, &y);
     
     x--; y--;
     
     if(matrix[x][y]!= ' '){
        printf("Neveriy xod, popitaytes' ewe.\n");
        get_player_move();
        }
        else matrix[x][y] = 'X';
}
/* Xod Kompytera*/
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;
     }
     
     if(i*j==9) {
        printf("Nichya\n");
        exit(0);
     }
      else
         matrix[i][j] = 'O';
}
/*Vivesti matricy na ekpan. */
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");
}
/* Proverit', est' li pobeditel'. */
char check(void)
{
     int i;
     
     for(i=0; i<3; i++) /* Provepka strok */
       if(matrix[i][0]==matrix[i][1] &&
         matrix[i][0]==matrix[i][2]) return matrix[i][0];
        
     for(i=0; i<3; i++) /* Provepka stolbcov */
       if(matrix[0][i]==matrix[1][i] &&
         matrix[0][i]==matrix[2][i]) return matrix[0][i];
        
     /* Provepka Diagonaley */
     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 ' ';
}
Добавлено через 24 секунды
ошибка в самой последней }

Добавлено через 4 часа 41 минуту
проблема еще не решена ап
Serg22
21.12.2013, 18:39
  #8

Не по теме:

У тебя при вводе буквы(символа) рушится работа программы) лучше исправь если это курсовая)

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2013, 13:41     Как лучше переделать программу чтобы отсутствовали глобальных переменных
Еще ссылки по теме:

C++ Описание глобальных переменных
Как написать программу, не используя глобальных переменных? C++
C++ Ошибка в сравнении глобальных переменных в функциях

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

Или воспользуйтесь поиском по форуму:
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
23.12.2013, 13:41     Как лучше переделать программу чтобы отсутствовали глобальных переменных #9
Кликните здесь для просмотра всего текста
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
#include <stdio.h>
#include <stdlib.h>
 
void init_matrix(char (*matrix)[3]);
void get_player_move(char (*matrix)[3]);
void get_computer_move(char (*matrix)[3]);
void disp_matrix(const char (*matrix)[3]);
char check(const char (*matrix)[3]);
 
int main(int argc, char *argv[])
{
    char done = ' ', matrix[3][3];  
    init_matrix(matrix);
 
    printf("Eto - igra v kpestiki noliki.\n");
    printf("Vi bydete igrat' s kompyterom.\n");
 
 
    do
    {
        disp_matrix(&matrix[0]);
        get_player_move(&matrix[0]);
        done = check(&matrix[0]);
        if (done != ' ') break;
        get_computer_move(&matrix[0]);
        done = check(&matrix[0]);
    } while (done == ' ');
 
    if (done == 'X') printf("Vi pobedili!\n");
    else printf("Ya viygral!!!\n");
 
    disp_matrix(&matrix[0]);
 
    return EXIT_SUCCESS;
}
 
void init_matrix(char (*matrix)[3])
{
     for (int i = 0; i < 3; ++i) // c99 strick allows this trick
         for (int j = 0; j < 3; ++j) 
            matrix[i][j] = ' ';
}                         
 
void get_player_move(char (*matrix)[3])
{
    int x, y;
 
    printf("Vvedite koopdinati X,Y: ");
    scanf("%d%*c%d", &x, &y);
 
    --x; --y;
 
    if (matrix[x][y] != ' ')
    {
        printf("Neveriy xod, popitaytes' ewe.\n");
        get_player_move(matrix);
    }
    else matrix[x][y] = 'X';
}
 
void get_computer_move(char (*matrix)[3])
{
    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;
    }
 
    if (i * j == 9) 
    {
        printf("Nichya\n");
        exit(EXIT_SUCCESS);
    }
    else matrix[i][j] = 'O';
}
 
void disp_matrix(const char (*matrix)[3])
{
    for (int 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(const char (*matrix)[3])
{
    for (int i = 0; i < 3; ++i) /* Provepka strok */
        if(matrix[i][0] == matrix[i][1] && matrix[i][0] == matrix[i][2]) 
            return matrix[i][0];
 
    for (int i = 0; i < 3; ++i) /* Provepka stolbcov */
        if(matrix[0][i] == matrix[1][i] && matrix[0][i] == matrix[2][i]) 
            return matrix[0][i];
 
    /* Provepka Diagonaley */
    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 ' ';
}

morphex, без понятия как const хавает компилятор с98, но g++ с флагом -std=c++98 хавает без проблем.

Добавлено через 4 минуты
С gcc в MinGW у меня проблемы, так что точно не скажу...
Yandex
Объявления
23.12.2013, 13:41     Как лучше переделать программу чтобы отсутствовали глобальных переменных
Ответ Создать тему
Опции темы

Текущее время: 19:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru