Форум программистов, компьютерный форум 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
30.10.2012, 20:49  [ТС]     Функция, в функции main() или общие переменные для нескольких функций
У меня есть функция, которая изменяет и берет сразу много переменных. (насчет их сбора непроблема int pli(int i))

Как же передать все значения, тем переменным, которые должны были изменится, и незначит, что предется создать вместо 1 функции функций 6, тк каждая будет возвращать 1 параметр, который будет присваиваться, переменной, внутри main()...
Что возможно, будет давать больше лагов чем глобалки...

Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <stdlib.h> //очистка экрана  system("cls");
#include <conio.h>  //_getch
//#include "maps.h"   //где хранятся карты
 
using namespace std;
 
 
int main(){
 
char but;                //Сама кнопка
int ch=0;                //Номер кнопки.
int x=0,y=0; //Координаты x и y.
int xMax=15;             //Мах размер карты по X
int yMax=20;             //Мах размер карты по Y
char map[15][20];        //двумерный массив карты
char hero='O';           //Персонаж
char kyda='>';           //Куда смотрит персонаж. ^-вверх, _-вниз, >-вправо, <-Влево
char voda='~';           //вода
bool mona=true;          //Можно стрелять?
const char pyla='.';           //Пуля
int xPyla[50],yPyla[50];     //Координаты Пули
bool Rpyla[50];              //Пуля Жива?
char Kpyla[50];              //Куда летит пуля?  ^-вверх, _-вниз, >-вправо, <-Влево
char map2[15][20];       //Теневая карта
int free=0;         //свободный слот, для массивов
 
//Иницилизация массивов
for (int i=0; i<=50; i++)
{
    xPyla[i]=0;
    yPyla[i]=0;
    Rpyla[i]=false;
}
 
//Иницилизация матрицы карты
for (int i = 0; i< xMax; i++)      //Строки
{
    for (int j = 0; j< yMax; j++)  //столбцы
    {
        map[i][j] = ' ';         //То, чем карта заполняется
        map2[i][j] =' ';
    }
}
 
map[1][5]=voda;    map2[1][5]=voda;
map[1][6]=voda;    map2[1][6]=voda;
map[1][7]=voda;    map2[1][7]=voda;
map[1][8]=voda;    map2[1][8]=voda;
 
map[0][0]=hero;  //Установка на карте нашего персонажа
 
LetitPyla(){
    
    for (int i=0; i<=50; i++)
            {
              if (Rpyla[i])
              {
                if (xPyla[i]==xMax-1 || xPyla[i]==0 || yPyla[i]==yMax-1 || yPyla[i]==0)
                  {
                    map[xPyla[i]][yPyla[i]]=' ';
                    xPyla[i]=0;
                    yPyla[i]=0;
                    Rpyla[i]=false;
                  }
                if (Rpyla[i])
                {
                  if (Kpyla[i]=='_')
                  {
                    map[xPyla[i]][yPyla[i]] = map2[xPyla[i]][yPyla[i]];
                    xPyla[i]++;
                    map[xPyla[i]][yPyla[i]] = pyla;
                  }
                  else if (Kpyla[i]=='^')
                      {
                        map[xPyla[i]][yPyla[i]] = map2[xPyla[i]][yPyla[i]];
                        xPyla[i]--;
                        map[xPyla[i]][yPyla[i]] = pyla;
                      }
                      else if (Kpyla[i]=='>')
                          {
                            map[xPyla[i]][yPyla[i]] = map2[xPyla[i]][yPyla[i]];
                            yPyla[i]++;
                            map[xPyla[i]][yPyla[i]] = pyla;
                          }
                          else
                          {
                            map[xPyla[i]][yPyla[i]] = map2[xPyla[i]][yPyla[i]];
                            yPyla[i]--;
                            map[xPyla[i]][yPyla[i]] = pyla;
                          }
                }
              }
           }
}
 
while (1)
{
    system("cls"); // вызов функции очистки экрана
 
    for (int i = 0; i < xMax; i++)
    {
        for (int j = 0; j < yMax; j++)
        {
            cout << 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 (map[x][y-1]!=voda)  //проверяем туда можно пройти
              {
                map[x][y] = map2[x][y];   // "Убираем" объект со старой координаты
                y--;               // изменяем координаты
                map[x][y] = hero;  // "рисуем" объект на новом месте
              }
            }
            kyda='<';            //Куда смотрит персонаж
            if (y==0) {mona=false;} else {mona=true;}
            LetitPyla();
        break;
        case 77:    //Кнопка Вправо
            if (y<19)
            {
              if (map[x][y+1]!=voda)
              {
                map[x][y] = map2[x][y];
                y++;
                map[x][y] = hero;
              }
            }
            kyda='>';
            if (y==19) {mona=false;} else {mona=true;}
            LetitPyla();
        break;
        case 80:    //Кнопка Вниз
            if (x<14)
            {
              if (map[x+1][y]!=voda)
              {
                map[x][y] = map2[x][y];
                x++;
                map[x][y] = hero;
              }
            }
            kyda='_';
            if (x==14) {mona=false;} else {mona=true;}
            LetitPyla();
        break;
        case 72:    //Кнопка Вверх
            if (x>0)
            {
              if (map[x-1][y]!=voda)
              {
                map[x][y] = map2[x][y];
                x--;
                map[x][y] = hero;
              }
            }
            kyda='^';
            if (x==0) {mona=false;} else {mona=true;}
            LetitPyla();
        break;
        case 32:   //ПРОбел
            if (mona)
             {
               Rpyla[free]=true;
               if (kyda=='_')
               {
                 map[x+1][y]=pyla;
                 xPyla[free]=x+1;
                 yPyla[free]=y;
                 Kpyla[free]='_';
                 free++;
                 if (free>190) {free=0;}
               }
               else if (kyda=='^')
                   {
                     map[x-1][y]=pyla;
                     xPyla[free]=x-1;
                     yPyla[free]=y;
                     Kpyla[free]='^';
                     free++;
                     if (free>190) {free=0;}
                   }
                   else if (kyda=='>')
                       {
                         map[x][y+1]=pyla;
                         yPyla[free]=y+1;
                         xPyla[free]=x;
                         Kpyla[free]='>';
                         free++;
                         if (free>190) {free=0;}
                       }
                       else 
                       {
                         map[x][y-1]=pyla;
                         yPyla[free]=y-1;
                         xPyla[free]=x;
                         Kpyla[free]='<';
                         free++;
                         if (free>190) {free=0;}
                       }
             }
             LetitPyla();
        break;
    }
}
_getch();
return 0;
}


сама функция LetitPyla()
которую я хочу "выделить" из main()
Какже я буду возвращать каждую переменную, темболее разных типо, при том, что там полно условий...?

Добавлено через 2 минуты
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
C++ умеет замыкания (функции в функциях). Но со специфичным синтаксисом и только с С++11. Гуглите в сторону слов "лямбда" и "С++11".

Вам же, думаю, лучше подойдут объекты. У них есть поля, которые являются общими переменными для кучки функций — методов объекта.
А вот, тут можно по подробнее, про Объекты?
 
Текущее время: 02:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru