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

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

21.12.2013, 12:44. Показов 793. Ответов 8
Метки нет (Все метки)

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

Как написать программу, не используя глобальных переменных?
Добрый день! Подскажите пожалуйста, как написать программу, не используя глобальных переменных?...

Как разбить программу на функции (использование глобальных переменных не допускается)?
int main() { char c; int str=0, stb=0; int **a = NULL, **b = NULL; bool a1 = false, a2...

Рассмотреть программу, написать имена глобальных переменных, локальных переменных, формальных параметров
Program P1; var s:string; procedure P(var s:string) ; var i, j : integer; ...

Как избавиться от глобальных переменных в многофайловом проекте на С++?
Некоторые глобальные переменные можно заменить на глобальные константы. Долго промучилась с...

8
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
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 секунды
В случае в шаблоном можно не передавать размерность массива.
1
-1 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 7
21.12.2013, 13:18  [ТС] 3
outoftime, а как будет выглядеть весь код ?можешь написать ?

Добавлено через 24 минуты
outoftime, напиши плиз весь код целиком
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
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);
0
-1 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 7
21.12.2013, 13:36  [ТС] 5
outoftime, программа в самом конце ругается на скобку, где мне закрыть её надо ?

Добавлено через 6 минут
outoftime, можешь полностью весь весь весь код написать ?)
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
21.12.2013, 13:50 6
А я откуда знаю? Вы ни ошибку не написали ни код не дали.

Добавлено через 18 секунд
Цитата Сообщение от morphex Посмотреть сообщение
можешь полностью весь весь весь код написать ?)
Пошли в раздел фриланс (:
0
-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 минуту
проблема еще не решена ап
0
Serg22
21.12.2013, 18:39
  #8

Не по теме:

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

0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
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 у меня проблемы, так что точно не скажу...
0
23.12.2013, 13:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2013, 13:41
Помогаю со студенческими работами здесь

Графический интерфейс НЕ GUI! как избавиться от глобальных переменных?
Создаю простенький графический интерфейс function = interface( input_args ) global hAxes...

Написать программу "Угадай число от 0 до 100" без использования глобальных переменных
Задача передо мной стояла следующая: написать программу &quot;Угадай число от 0 до 100&quot; без...

Как переделать программу,чтобы она удаляла четные элементы?
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; #include...

Как переделать программу чтобы выводился другой порядок чисел
Как переделать программу чтобы выводилось (на С++): 4 3 2 1 0 3 2 1 0 2 1 0 1 0 0 { int...


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

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