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

Как убрать глобальные переменные в коде? - C++

Восстановить пароль Регистрация
 
JohnDoe321
0 / 0 / 0
Регистрация: 13.12.2015
Сообщений: 6
27.01.2016, 23:45     Как убрать глобальные переменные в коде? #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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
#include <iostream>
using namespace std;
 
void case1();
void case2();
void case3();
void case4();
void case5();
 
const int MAXROW = 5;
const int MAXCOL = 5;
int A[MAXROW][MAXCOL] = { 0 };
int newarr[MAXROW + 1][MAXCOL + 1] = { 0 };
 
int main()
{
 
    char da;
    do                                  //menu
    {
        cout << "\n\nMENU\n";
        cout << "1. : \n";
        cout << "2. : \n";
        cout << "3.: \n";
        cout << "4.  \n";
        cout << "5. \n";
        cout << "6.Exit.\n\n";
        cin >> da;
 
        switch (da)
        {
        case '1': {
            system("cls");
            case1();
        } break;
 
        case '2': {
            //system("cls"); 
            case2();
        } break;
 
        case '3': {
            //system("cls"); 
            case3();
        } break;
 
        case '4': {
            //system("cls"); 
            case4();
        } break;
 
        case '5': {
            //system("cls"); 
            case5();
        } break;
        }
 
    } while (da != '6');
 
    return 0;
 
}
 
void case1()
{
 
 
    for (int r = 0; r < MAXROW; ++r)
        for (int c = 0; c < MAXCOL; ++c) {
            cout << "\n A[" << r << "][" << c << "]= ";
            cin >> A[r][c];
        }
 
}
 
void case2()
{
 
    int max[MAXCOL] = { 0 };
 
    for (int r = 0; r < MAXROW; ++r) {
        int minr = A[r][0];
        for (int c = 0; c < MAXCOL; ++c) {
            newarr[r][c] = A[r][c];
            if (minr > A[r][c])
                minr = A[r][c];
 
            if (max[c] < A[r][c])
                max[c] = A[r][c];
        }
        newarr[r][MAXCOL] = minr;
    }
 
    for (int c = 0; c < MAXCOL; ++c)
        newarr[MAXROW][c] = max[c];
 
    for (int r = 0; r < MAXROW + 1; ++r) {
        for (int c = 0; c < MAXCOL + 1; ++c)
            newarr[r][c] ? cout << newarr[r][c] << "\t" : cout << " \t";
 
        cout << "\n";
    }
}
 
 
void case3()
{
    int negNumber = 0;
    double average = 0;
 
    for (int r = 0; r < 6; ++r) {
        for (int c = 0; c < 6; ++c) {
            if (newarr[r][c] < 0) {
                ++negNumber;
                average += newarr[r][c];
            }
 
        }
    }
    if (negNumber > 0) {
        average /= negNumber;
        cout << "Average of negatives: \n" << average;
    }
    else
        cout << "No negatives.\n";
 
 
}
 
void case4()
{//Find product of number different from 0
    int count = 0;
    int product = 1;
 
 
    for (int r = 0; r < 6; ++r)
        for (int c = 0; c < 6; ++c)
            if (newarr[r][c] != 0)
            {
                ++count;
                product *= newarr[r][c];
 
            }
 
 
    if (count != 0)
        cout << "\n Procut: \n" << product << endl;
    else
        cout << "All elements = 0";
 
}
 
void case5()
 
{
    for (int r = 0; r < MAXROW + 1; ++r) {
        for (int c = 0; c < MAXCOL + 1; ++c)
            newarr[r][c] ? cout << newarr[r][c] << "\t" : cout << " \t";
 
        cout << "\n";
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2016, 23:45     Как убрать глобальные переменные в коде?
Посмотрите здесь:

C++ Глобальные переменные
C++ Убрать глобальные переменные
C++ Глобальные переменные
Глобальные переменные C++
Глобальные переменные C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Shonrens
13 / 13 / 4
Регистрация: 06.06.2015
Сообщений: 98
27.01.2016, 23:53     Как убрать глобальные переменные в коде? #2
Создай матрицу в меин и передавай ее в функцию как аргумент по ссылке.
JohnDoe321
0 / 0 / 0
Регистрация: 13.12.2015
Сообщений: 6
28.01.2016, 11:13  [ТС]     Как убрать глобальные переменные в коде? #3
Проблема в том, что я не знаю, как это будет происходить.
EVP
314 / 236 / 41
Регистрация: 14.12.2010
Сообщений: 457
28.01.2016, 13:03     Как убрать глобальные переменные в коде? #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от JohnDoe321 Посмотреть сообщение
Проблема в том, что я не знаю, как это будет происходить.
Научись пользоваться классами и прячь всё внутрь класса.
Это даст возможность передавать неявно весь локальный контекст для связанных методов.
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
#include <iostream>
using namespace std;
 
class Application {
protected:
    static const int MAXROW = 5;
    static const int MAXCOL = 5;
    int A[MAXROW][MAXCOL];
    int newarr[MAXROW + 1][MAXCOL + 1];
 
public:
    Application() :A{ 0 }, newarr{0}
    {}
 
    void runCase(char da)
    {
        switch (da)
        {
        case '1': {
            system("cls");
            case1();
        } break;
 
        case '2': {
            //system("cls"); 
            case2();
        } break;
 
        case '3': {
            //system("cls"); 
            case3();
        } break;
 
        case '4': {
            //system("cls"); 
            case4();
        } break;
 
        case '5': {
            //system("cls"); 
            case5();
        } break;
        }
    }
 
protected:
    void case1()
    {
 
 
        for (int r = 0; r < MAXROW; ++r)
            for (int c = 0; c < MAXCOL; ++c) {
                cout << "\n A[" << r << "][" << c << "]= ";
                cin >> A[r][c];
            }
 
    }
 
    void case2()
    {
 
        int max[MAXCOL] = { 0 };
 
        for (int r = 0; r < MAXROW; ++r) {
            int minr = A[r][0];
            for (int c = 0; c < MAXCOL; ++c) {
                newarr[r][c] = A[r][c];
                if (minr > A[r][c])
                    minr = A[r][c];
 
                if (max[c] < A[r][c])
                    max[c] = A[r][c];
            }
            newarr[r][MAXCOL] = minr;
        }
 
        for (int c = 0; c < MAXCOL; ++c)
            newarr[MAXROW][c] = max[c];
 
        for (int r = 0; r < MAXROW + 1; ++r) {
            for (int c = 0; c < MAXCOL + 1; ++c)
                newarr[r][c] ? cout << newarr[r][c] << "\t" : cout << " \t";
 
            cout << "\n";
        }
    }
 
 
    void case3()
    {
        int negNumber = 0;
        double average = 0;
 
        for (int r = 0; r < 6; ++r) {
            for (int c = 0; c < 6; ++c) {
                if (newarr[r][c] < 0) {
                    ++negNumber;
                    average += newarr[r][c];
                }
 
            }
        }
        if (negNumber > 0) {
            average /= negNumber;
            cout << "Average of negatives: \n" << average;
        }
        else
            cout << "No negatives.\n";
 
 
    }
 
    void case4()
    {//Find product of number different from 0
        int count = 0;
        int product = 1;
 
 
        for (int r = 0; r < 6; ++r)
            for (int c = 0; c < 6; ++c)
                if (newarr[r][c] != 0)
                {
                    ++count;
                    product *= newarr[r][c];
 
                }
 
 
        if (count != 0)
            cout << "\n Procut: \n" << product << endl;
        else
            cout << "All elements = 0";
 
    }
 
    void case5()
    {
        for (int r = 0; r < MAXROW + 1; ++r) {
            for (int c = 0; c < MAXCOL + 1; ++c)
                newarr[r][c] ? cout << newarr[r][c] << "\t" : cout << " \t";
 
            cout << "\n";
        }
    }
};
 
int main()
{
    Application app;
    char da;
 
    do//menu
    {
        cout << "\n\nMENU\n";
        cout << "1. : \n";
        cout << "2. : \n";
        cout << "3.: \n";
        cout << "4.  \n";
        cout << "5. \n";
        cout << "6.Exit.\n\n";
 
        cin >> da;
        app.runCase(da);
    } while (da != '6');
 
    return 0;
}
JohnDoe321
0 / 0 / 0
Регистрация: 13.12.2015
Сообщений: 6
28.01.2016, 15:47  [ТС]     Как убрать глобальные переменные в коде? #5
Большое спасибо.... Я еще не работал с классами. Как может быть сделано со ссылками/указатели? Я изучал их. Все говорят, что это легко, но я дурак и не понимал их.
EVP
314 / 236 / 41
Регистрация: 14.12.2010
Сообщений: 457
28.01.2016, 20:02     Как убрать глобальные переменные в коде? #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от JohnDoe321 Посмотреть сообщение
Как может быть сделано со ссылками/указатели? Я изучал их.
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
#include <iostream>
using namespace std;
 
//{{Class emulation
#define MAXROW (int)5
#define MAXCOL (int)5
#define DEF_CLASS_CONTEXT \
    int A[MAXROW][MAXCOL] = { 0 }; \
    int newarr[MAXROW + 1][MAXCOL + 1] = { 0 }
#define DECL_CLASS_CONTEXT \
    int (&A)[MAXROW][MAXCOL], \
    int (&newarr)[MAXROW + 1][MAXCOL + 1]
#define SEND_CLASS_CONTEXT A, newarr
 
void case1(DECL_CLASS_CONTEXT);
void case2(DECL_CLASS_CONTEXT);
void case3(DECL_CLASS_CONTEXT);
void case4(DECL_CLASS_CONTEXT);
void case5(DECL_CLASS_CONTEXT);
//}}Class emulation
 
int main()
{
    DEF_CLASS_CONTEXT;
    char da;
    do                                  //menu
    {
        cout << "\n\nMENU\n";
        cout << "1. : \n";
        cout << "2. : \n";
        cout << "3.: \n";
        cout << "4.  \n";
        cout << "5. \n";
        cout << "6.Exit.\n\n";
        cin >> da;
 
        switch (da)
        {
        case '1': {
            system("cls");
            case1(SEND_CLASS_CONTEXT);
        } break;
 
        case '2': {
            //system("cls"); 
            case2(SEND_CLASS_CONTEXT);
        } break;
 
        case '3': {
            //system("cls"); 
            case3(SEND_CLASS_CONTEXT);
        } break;
 
        case '4': {
            //system("cls"); 
            case4(SEND_CLASS_CONTEXT);
        } break;
 
        case '5': {
            //system("cls"); 
            case5(SEND_CLASS_CONTEXT);
        } break;
        }
 
    } while (da != '6');
 
    return 0;
 
}
 
void case1(DECL_CLASS_CONTEXT)
{
 
 
    for (int r = 0; r < MAXROW; ++r)
        for (int c = 0; c < MAXCOL; ++c) {
            cout << "\n A[" << r << "][" << c << "]= ";
            cin >> A[r][c];
        }
 
}
 
void case2(DECL_CLASS_CONTEXT)
{
 
    int max[MAXCOL] = { 0 };
 
    for (int r = 0; r < MAXROW; ++r) {
        int minr = A[r][0];
        for (int c = 0; c < MAXCOL; ++c) {
            newarr[r][c] = A[r][c];
            if (minr > A[r][c])
                minr = A[r][c];
 
            if (max[c] < A[r][c])
                max[c] = A[r][c];
        }
        newarr[r][MAXCOL] = minr;
    }
 
    for (int c = 0; c < MAXCOL; ++c)
        newarr[MAXROW][c] = max[c];
 
    for (int r = 0; r < MAXROW + 1; ++r) {
        for (int c = 0; c < MAXCOL + 1; ++c)
            newarr[r][c] ? cout << newarr[r][c] << "\t" : cout << " \t";
 
        cout << "\n";
    }
}
 
 
void case3(DECL_CLASS_CONTEXT)
{
    int negNumber = 0;
    double average = 0;
 
    for (int r = 0; r < 6; ++r) {
        for (int c = 0; c < 6; ++c) {
            if (newarr[r][c] < 0) {
                ++negNumber;
                average += newarr[r][c];
            }
 
        }
    }
    if (negNumber > 0) {
        average /= negNumber;
        cout << "Average of negatives: \n" << average;
    }
    else
        cout << "No negatives.\n";
 
 
}
 
void case4(DECL_CLASS_CONTEXT)
{//Find product of number different from 0
    int count = 0;
    int product = 1;
 
 
    for (int r = 0; r < 6; ++r)
        for (int c = 0; c < 6; ++c)
            if (newarr[r][c] != 0)
            {
                ++count;
                product *= newarr[r][c];
 
            }
 
 
    if (count != 0)
        cout << "\n Procut: \n" << product << endl;
    else
        cout << "All elements = 0";
 
}
 
void case5(DECL_CLASS_CONTEXT)
 
{
    for (int r = 0; r < MAXROW + 1; ++r) {
        for (int c = 0; c < MAXCOL + 1; ++c)
            newarr[r][c] ? cout << newarr[r][c] << "\t" : cout << " \t";
 
        cout << "\n";
    }
}
Yandex
Объявления
28.01.2016, 20:02     Как убрать глобальные переменные в коде?
Ответ Создать тему
Опции темы

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