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

Функция, в функции main() или общие переменные для нескольких функций - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сортировка строк матрицы http://www.cyberforum.ru/cpp-beginners/thread684612.html
Задача: отсортировать (переставить) строки матрицы в порядке убывания значений наименьших элементов строк. Вот мой код. Помогите написать функцию Swap которая сортирует строки. #include <iostream> #include <stdlib.h> #include <ctime> using namespace std; const int size = 5;
C++ Вывести некий элемент массива Почему пишет что переменная V неопределена? И вобше как тогда вывести первый отрицательний елем. массива, и первый положетильний, идущий после первого отрицательного?#include<iostream> #include<conio.h> #include<stdlib.h> #include<locale.h> using namespace std; int main() { setlocale(LC_ALL,"ukrainian"); int n; int* arr; http://www.cyberforum.ru/cpp-beginners/thread684604.html
C++ Программа вычисления местонахождения точки относительно фигуры (лежит ли точка внутри, на контуре или вне фигуры)
Нужно написать программу вычисления местонахождения точки относительно фигуры(лежит ли данная точка внутри неё, на контуре или вне фигуры). В данном случае, это прямоугольник. Главная функция должна вызывать 4 дополнительных:введение параметра контура, введение координат,определение местонахождения и выведение определенного сообщения. Координаты вершин прямоугольника (–a,0), (a,0), (a,a), (–a,a)....
C++ Не производиться ввод при помощи функции gets(s)
По непонятной мне причине не производиться ввод при помощи функции gets(s) или getline(cin, s). Если использовать просто cin, то проблем нет: //Рекурсия. Вычисление факториала. Функция, возвращающая // наибольший общий делитель. Функция возращающая строку в обратном // порядке. #include <iostream> #include <cstdlib> #include <cstdio> using namespace std;
C++ Указатель и рекурсия http://www.cyberforum.ru/cpp-beginners/thread684570.html
Подскажите почему не работает? (логика работы программы изложена в комментах к ней) #include <iostream> #include <windows.h> #include <string.h> #include <stdio.h> using namespace std; void reverse(char *s); int main()
C++ Найти сумму первых 5 цифр дробной части действительного числа.например для числа 23,1680989 она равна 24.програма на С++ Найти сумму первых 5 цифр дробной части действительного числа.например для числа 23,1680989 она равна 24.Програма на С++.ПОЖАЛУЙСТА ПОМОГИТЕ,ОЧЕНЬ СРОЧНО! подробнее

Показать сообщение отдельно
Xipxop
 Аватар для Xipxop
481 / 9 / 2
Регистрация: 28.12.2011
Сообщений: 150
31.10.2012, 18:21  [ТС]     Функция, в функции main() или общие переменные для нескольких функций
Разобравшись, как сделать глобальные переменные, то встал еще 1 вопрос.
Могут, ли переменные, двумя функциями, которые (по истечению "случайности") сделались одновременно, заменить, неправильно?

Есть такое:
... //функция 1
map[1][2]='s'
...

... //функция 2
map[1][2]='A'
...

Случается событие, что они выполняются одновременно, и происходят сбои, а переменной map[1][2], которая становится переменной, которая вообще тут НЕ ПРИЧЕМ...

Кликните здесь для просмотра всего текста
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
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
#include <iostream>
#include <stdlib.h> //очистка экрана  system("cls");
#include <conio.h>  //_getch
//#include "maps.h"   //где хранятся карты
 
using namespace std;
 
class Global
{
public:
static  int xPyla[50],yPyla[50];     //Координаты Пули
static  char pyla;         //Пуля
static  bool Rpyla[50];              //Пуля Жива?
static  char Kpyla[50];             //Куда летит пуля?  ^-вверх, _-вниз, >-вправо, <-Влево
static  int xMax;             //Мах размер карты по X
static  int yMax;             //Мах размер карты по Y
static  char map[15][20];        //двумерный массив карты
static  char map2[15][20];       //Теневая карта
};
 
int Global::xPyla[50];
int Global::yPyla[50];
int Global::xMax=15;
int Global::yMax=20;
char Global::pyla;
bool Global::Rpyla[50];
char Global::Kpyla[50];
char Global::map[15][20];
char Global::map2[15][20];
 
void LetitPyla()
{
    Global::pyla='.';
    for (int i=0; i<=50; i++)
            {
              if (Global::Rpyla[i])
              {
                if (Global::xPyla[i]==Global::xMax-1 || Global::xPyla[i]==0 || Global::yPyla[i]==Global::yMax-1 || Global::yPyla[i]==0)
                  {
                    Global::map[Global::xPyla[i]][Global::yPyla[i]]=' ';
                    Global::xPyla[i]=0;
                    Global::yPyla[i]=0;
                    Global::Rpyla[i]=false;
                  }
                if (Global::Rpyla[i])
                {
                  if (Global::Kpyla[i]=='_')
                  {
                    Global::map[Global::xPyla[i]][Global::yPyla[i]] = Global::map2[Global::xPyla[i]][Global::yPyla[i]];
                    Global::xPyla[i]++;
                    Global::map[Global::xPyla[i]][Global::yPyla[i]] = Global::pyla;
                  }
                  else if (Global::Kpyla[i]=='^')
                      {
                        Global::map[Global::xPyla[i]][Global::yPyla[i]] = Global::map2[Global::xPyla[i]][Global::yPyla[i]];
                        Global::xPyla[i]--;
                        Global::map[Global::xPyla[i]][Global::yPyla[i]] = Global::pyla;
                      }
                      else if (Global::Kpyla[i]=='>')
                          {
                            Global::map[Global::xPyla[i]][Global::yPyla[i]] = Global::map2[Global::xPyla[i]][Global::yPyla[i]];
                            Global::yPyla[i]++;
                            Global::map[Global::xPyla[i]][Global::yPyla[i]] = Global::pyla;
                          }
                          else
                          {
                            Global::map[Global::xPyla[i]][Global::yPyla[i]] = Global::map2[Global::xPyla[i]][Global::yPyla[i]];
                            Global::yPyla[i]--;
                            Global::map[Global::xPyla[i]][Global::yPyla[i]] = Global::pyla;
                          }
                }
              }
           }
}
 
int main(){
 
char but;                //Сама кнопка
int ch=0;                //Номер кнопки.
int x=0,y=0; //Координаты x и y.
char hero='O';           //Персонаж
char kyda='>';           //Куда смотрит персонаж. ^-вверх, _-вниз, >-вправо, <-Влево
char voda='~';           //вода
bool mona=true;          //Можно стрелять?
int free=0;         //свободный слот, для массивов
 
Global::pyla='.';
 
//Иницилизация массивов
for (int i=0; i<=50; i++)
{
    Global::xPyla[i]=0;
    Global::yPyla[i]=0;
    Global::Rpyla[i]=false;
}
 
//Иницилизация матрицы карты
for (int i = 0; i< Global::xMax; i++)      //Строки
{
    for (int j = 0; j< Global::yMax; j++)  //столбцы
    {
        Global::map[i][j] = ' ';         //То, чем карта заполняется
        Global::map2[i][j] =' ';
    }
}
 
Global::map[1][5]=voda;    Global::map2[1][5]=voda;
Global::map[1][6]=voda;    Global::map2[1][6]=voda;
Global::map[1][7]=voda;    Global::map2[1][7]=voda;
Global::map[1][8]=voda;    Global::map2[1][8]=voda;
 
Global::map[0][0]=hero;  //Установка на карте нашего персонажа
 
while (1)
{
    system("cls"); // вызов функции очистки экрана
 
    for (int i = 0; i < Global::xMax; i++)
    {
        for (int j = 0; j < Global::yMax; j++)
        {
            cout << Global::map[i][j]; // в циклах поэлементно выводится массив
        }
        cout << "\n"; // переход на новую строку после каждого "ряда"
    }
    cout << x << " " << y << "\n";
    cout << "Kod knopki: " << ch << "\n";
    cout << "Kyda smotrit pers: " << kyda << "\n";
    
    but=_getch();
    ch = static_cast<int>(but);     //узнаем какая кнопка нажата
 
    switch (ch)
    {
        case -32:
        break;
        case 27:      //Esc
            exit(0);
        break;
        case 75:     //Кнопка Влево
            if (y!=0)
            {
              if (Global::map[x][y-1]!=voda)  //проверяем туда можно пройти
              {
                Global::map[x][y] = Global::map2[x][y];   // "Убираем" объект со старой координаты
                y--;               // изменяем координаты
                Global::map[x][y] = hero;  // "рисуем" объект на новом месте
              }
            }
            kyda='<';            //Куда смотрит персонаж
            if (y==0) {mona=false;} else {mona=true;}
            LetitPyla();
        break;
        case 77:    //Кнопка Вправо
            if (y<19)
            {
              if (Global::map[x][y+1]!=voda)
              {
                Global::map[x][y] = Global::map2[x][y];
                y++;
                Global::map[x][y] = hero;
              }
            }
            kyda='>';
            if (y==19) {mona=false;} else {mona=true;}
            LetitPyla();
        break;
        case 80:    //Кнопка Вниз
            if (x<14)
            {
              if (Global::map[x+1][y]!=voda)
              {
                Global::map[x][y] = Global::map2[x][y];
                x++;
                Global::map[x][y] = hero;
              }
            }
            kyda='_';
            if (x==14) {mona=false;} else {mona=true;}
            LetitPyla();
        break;
        case 72:    //Кнопка Вверх
            if (x>0)
            {
              if (Global::map[x-1][y]!=voda)
              {
                Global::map[x][y] = Global::map2[x][y];
                x--;
                Global::map[x][y] = hero;
              }
            }
            kyda='^';
            if (x==0) {mona=false;} else {mona=true;}
            LetitPyla();
        break;
        case 32:   //ПРОбел
            if (mona)
             {
               Global::Rpyla[free]=true;
               if (kyda=='_')
               {
                 Global::map[x+1][y]=Global::pyla;
                 Global::xPyla[free]=x+1;
                 Global::yPyla[free]=y;
                 Global::Kpyla[free]='_';
                 free++;
                 if (free>190) {free=0;}
               }
               else if (kyda=='^')
                   {
                     Global::map[x-1][y]=Global::pyla;
                     Global::xPyla[free]=x-1;
                     Global::yPyla[free]=y;
                     Global::Kpyla[free]='^';
                     free++;
                     if (free>190) {free=0;}
                   }
                   else if (kyda=='>')
                       {
                         Global::map[x][y+1]=Global::pyla;
                         Global::yPyla[free]=y+1;
                         Global::xPyla[free]=x;
                         Global::Kpyla[free]='>';
                         free++;
                         if (free>190) {free=0;}
                       }
                       else 
                       {
                         Global::map[x][y-1]=Global::pyla;
                         Global::yPyla[free]=y-1;
                         Global::xPyla[free]=x;
                         Global::Kpyla[free]='<';
                         free++;
                         if (free>190) {free=0;}
                       }
             }
             LetitPyla();
        break;
    }
}
_getch();
return 0;
}


Что, тут не так? Или я неправильно инициирую глобалки, или неправельна функция LetitPyla.
Про прошевствии, многоразового, нажатия пробела,в разные стороны(активирования функции), происходят необычные вещи...
Вложения
Тип файла: rar test04_1.rar (285.6 Кб, 1 просмотров)
 
Текущее время: 17:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru