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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Tdutybq
-13 / 3 / 1
Регистрация: 18.01.2012
Сообщений: 85
#1

Нет доступа к переменным из функции - C++

27.12.2012, 13:43. Просмотров 334. Ответов 9
Метки нет (Все метки)

Функция move не знает, что такое переменные i2,j2,i,j,m,n,a. Хот я все объявлены в главной программе.

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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>
 
 
 
 
int move(int i1, int j1, int k)
{
int f;
a[i1][j1]=k;
k=k+1;
            if ((i1==i2)&&(j1==j2))
            {f=1;
            
for(i=0;i<=m;i++)
{
for(j=0;j<=n;j++)
{cout<<a[i][j]<<"   ";}
cout<<endl;}
 
cout<<endl;
cout<<endl;
 
}
 
        else {  if (( i1+1 <=m )&&(a[i1+1][j1] == 0 )) {move(i1+1,j1,k);}
        
               if (( j1-1 > 0 )&&(a[i1][j1-1] == 0 )) {move(i1,j1-1,k);}
               
               if (( j1+1 <=n )&&(a[i1][j1+1] == 0 )) {move(i1,j1+1,k);}
               
               if (( i1-1 > 0 )&&(a[i1-1][j1] == 0 )) {move(i1-1,j1,k);}
               }
     a[i1][j1]=0;
     k=k-1;
     return 0;
}
 
 
 
 
 
 
 
 
 
 
int main () 
{ 
 int a[100][100];
 int k,f;
 int i1,j1,i2,j2;
 int x,y;
 int i,j,k1;
 int m,n;
 
 
 
do
{   
cout<<"Vvedite kol-vo strok:" ;
cin>>m;
   }
while((m > 0)||( m < 100 ));
       
       
 
do
{   
cout<<"Vvedite kol-vo stolbcov:" ;
cin>>n;
}
while((n > 0)||( n < 100 ));
 
 
for(x=1;x>=m;x++)
{for(y=1;x>=n;y++)
{
 
do
{
cout<<"Labirinta ["<<x<<"]["<<y<<"]:";
cin>>a[x][y];
}
while((a[x][y] == 0)||(a[x][y] == 1));
}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
do
{
cout<<"Vhod koordinates:";
cout<<"i1:";
cin>>i1;
cout<<"j1:";
cin>>j1;
if (a[i1][j1] ==1) {cout<<"WALL in this place! ";}
}
while(a[i1][j1] ==0);
cout<<endl;
 
 
 
do
{
cout<<"Vyhod koordinates:";
cout<<"i2:";
cin>>i2;
cout<<"j2:";
cin>>j2;
if (a[i2][j2] ==1) {cout<<"WALL in this place!";}
}
while(a[i2][j2] ==0);
cout<<endl;
 
 
 
f=0;
k=2;
for(i=0;i<=m;i++)
{
for(j=0;j<=n;j++)
{cout<<a[i][j]<<"   ";}
cout<<endl;
}
cout<<endl;
cout<<endl;
 
 
 
 move(i1,j1,k);  
cout<<"TUPIK!";
getch();
return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2012, 13:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нет доступа к переменным из функции (C++):

Нет доступа к функции - C++
Есть 2 заголовочных файла .h и главный .cpp. В Employee.h есть функция, которую нельзя вызвать - error C2247: нет доступа к...

У дружественной функции нет доступа к приватному поля класса - C++
Доброго времени суток. Определены два класса: First и Second. В классе First определена составная функция Out_Field, т.е. метод этого...

Mutex ограничение доступа к переменным класса - C++
Доброго времени суток. Подскажите пожалуйста, что я делаю не так? class Bitmap { private: mutex...

Получение доступа к переменным класса из другого класса - C++
Как передать по ссылке переменную из класса А в метод класса В?

Функции с переменным числом параметров - C++
Функция должна принимать переменное количество аргументов, последним из которых является 0, и скажем просто их печатает. Делаю по примеру...

Функции с переменным числом параметров - C++
функции с переменным числом параметров в качестве параметра форматная строка,как задать это дело в Cи и что можно сказать преподу

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
27.12.2012, 13:47 #2
если по простому, то переменные, объявленные в одной функции видны только в той функции, в которой они объявлены.
0
Vladimir616
112 / 112 / 3
Регистрация: 05.07.2009
Сообщений: 224
27.12.2012, 13:47 #3
Tdutybq, переменные i, j и матрица a являются локальными, их область видимости ограничена функцией, в которой они объявлены (т.е. main), за её пределами эти переменные не существуют.
0
Tdutybq
-13 / 3 / 1
Регистрация: 18.01.2012
Сообщений: 85
27.12.2012, 15:08  [ТС] #4
А как сделать чтобы они передавались в функцию. И матрица тоже. Как их значения получить? Чтобы заработало наконец-то...Можно указать в параметрах, но как указать в параметрах матрицу???
0
Vladimir616
112 / 112 / 3
Регистрация: 05.07.2009
Сообщений: 224
27.12.2012, 15:17 #5
Tdutybq,
C++
1
2
3
4
5
6
7
8
9
10
11
int move(int i1, int j1, int k, int **a)
{
...
}
...
int main()
{
   int a[100][100];
   move(..., ..., ..., a);
   ...
}
0
Tdutybq
-13 / 3 / 1
Регистрация: 18.01.2012
Сообщений: 85
27.12.2012, 16:23  [ТС] #6
не получается
0
Игорь с++
436 / 459 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
27.12.2012, 19:39 #7
Работоспособность кода не проверял , просто сделал , что компилятор не возникал , а вообще код очень кривой , и ещё вы его где писали ? В текстовом документе ?
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream>
 
 int a[100][100];
 int k,f;
 int i1,j1,i2,j2;
 int x,y;
 int i,j,k1;
 int m,n; 
 
 using namespace std;
 
int move(int i1, int j1, int k)
{
int f;
a[i1][j1]=k;
k=k+1;
            if ((i1==i2)&&(j1==j2))
            {f=1;
            
for(i=0;i<=m;i++)
{
for(j=0;j<=n;j++)
{cout<<a[i][j]<<"   ";}
cout<<endl;}
 
cout<<endl;
cout<<endl;
 
}
 
        else {  if (( i1+1 <=m )&&(a[i1+1][j1] == 0 )) {move(i1+1,j1,k);}
        
               if (( j1-1 > 0 )&&(a[i1][j1-1] == 0 )) {move(i1,j1-1,k);}
               
               if (( j1+1 <=n )&&(a[i1][j1+1] == 0 )) {move(i1,j1+1,k);}
               
               if (( i1-1 > 0 )&&(a[i1-1][j1] == 0 )) {move(i1-1,j1,k);}
               }
     a[i1][j1]=0;
     k=k-1;
     return 0;
}
 
int main () 
{ 
 
 
 
 
do
{   
cout<<"Vvedite kol-vo strok:" ;
cin>>m;
   }
while((m > 0)||( m < 100 ));
       
       
 
do
{   
cout<<"Vvedite kol-vo stolbcov:" ;
cin>>n;
}
while((n > 0)||( n < 100 ));
 
 
for(x=1;x>=m;x++)
{for(y=1;x>=n;y++)
{
 
do
{
cout<<"Labirinta ["<<x<<"]["<<y<<"]:";
cin>>a[x][y];
}
while((a[x][y] == 0)||(a[x][y] == 1));
}}
 
 
do
{
cout<<"Vhod koordinates:";
cout<<"i1:";
cin>>i1;
cout<<"j1:";
cin>>j1;
if (a[i1][j1] ==1) {cout<<"WALL in this place! ";}
}
while(a[i1][j1] ==0);
cout<<endl;
 
 
 
do
{
cout<<"Vyhod koordinates:";
cout<<"i2:";
cin>>i2;
cout<<"j2:";
cin>>j2;
if (a[i2][j2] ==1) {cout<<"WALL in this place!";}
}
while(a[i2][j2] ==0);
cout<<endl;
 
 
 
f=0;
k=2;
for(i=0;i<=m;i++)
{
for(j=0;j<=n;j++)
{cout<<a[i][j]<<"   ";}
cout<<endl;
}
cout<<endl;
cout<<endl;
 
 
 
 move(i1,j1,k);  
cout<<"TUPIK!";
getch();
return 0;
}
0
Tdutybq
-13 / 3 / 1
Регистрация: 18.01.2012
Сообщений: 85
28.12.2012, 16:14  [ТС] #8
В Нотпаде и в С++

Добавлено через 45 минут
Не работает поиск оптимального пути в лабиринте. Лабиринт формируется. Путь обозначается 2, 3, 4,..... стены - 1, можно двигаться - 0.

К примеру дана матрица-лабиринт(вход - [2,1] выход [3,3])
_______ 010
_______ 001
_______ 100


оптимальный путь в данном примере должен быть(должно вывести(:
матрица
_______ 010
_______ 231
_______ 145

2,3,4,5 - оптимальный путь от 2 до 5



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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>
 
 int a[100][100];
 int k,f;
 int i1,j1,i2,j2;
 int x,y;
 int i,j,k1;
 int m,n; 
 
 
 
int move(int i1, int j1, int k)
{
int f;
a[i1-1][j1-1]=k;
k=k+1;
 
if ((i1==i2)&&(j1==j2))
            {f=1;
            
            
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{cout<<a[i][j]<<"   ";}
cout<<endl;
}
 
cout<<endl;
cout<<endl;
 
}
 
  if (( i1+1 <m )&&(a[i1+1][j1] == 0 )) {move(i1+1,j1,k);}
 
  if (( j1-1 > 0 )&&(a[i1][j1-1] == 0 )) {move(i1,j1-1,k);}
 
  if (( j1+1 <n )&&(a[i1][j1+1] == 0 )) {move(i1,j1+1,k);}
 
  if (( i1-1 > 0 )&&(a[i1-1][j1] == 0 )) {move(i1-1,j1,k);}
 
     a[i1][j1]=0;
     //k=k-1;
     return 0;
}
 
int main ()
{
 
 
 
 
 
cout<<"Vvedite kol-vo strok:" ;
cin>>m;
 
       
 
 
cout<<"Vvedite kol-vo stolbcov:" ;
cin>>n;
 
 
 
for(x=0;x<m;x++)
{
for(y=0;y<n;y++)
{ 
cout<<"Labirinta ["<<x+1<<"]["<<y+1<<"]:";
cin>>a[x][y];
}
}
 
 
 
cout<<"Vhod koordinates:";
cout<<"i1:";
cin>>i1;
cout<<"j1:";
cin>>j1;
if (a[i1][j1] ==1) {cout<<"WALL in this place! ";}
 
cout<<endl;
 
 
 
 
cout<<"Vyhod koordinates:";
cout<<"i2:";
cin>>i2;
cout<<"j2:";
cin>>j2;
if (a[i2][j2] ==1) {cout<<"WALL in this place!";}
 
cout<<endl;
 
 
 
 
k=2;
 
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{cout<<a[i][j]<<"   ";}
cout<<endl;
}
 
 
 
cout<<endl;
cout<<endl;
 
 
 
 move(i1,j1,k);
cout<<"TUPIK!";
getch();
return 0;
}
Добавлено через 19 часов 16 минут
Я иногда подозреваю, что это феномен Пиписа..только почему в этой проге???
0
Tdutybq
-13 / 3 / 1
Регистрация: 18.01.2012
Сообщений: 85
03.01.2013, 18:52  [ТС] #9
будут идеи - вылаживаем сюда, не стесняемся...Рассмотрю все варианты
0
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
03.01.2013, 19:27 #10
Посмотрите волновой алгоритм или Алгоритм_поиска_A*
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2013, 19:27
Привет! Вот еще темы с ответами:

Функции с переменным числом параметров - C++
Написать функцию max с переменным числом параметров, которая находит минимальное из чисел типа int или из чисел типа double, тип параметров...

Функции с переменным числом параметров - C++
Прошу помочь знатоков С++ в решении задачи, т.к. только начал изучать данный язык. Решить задачу, используя функции с переменным...

Функции с переменным числом параметров - C++
Написать функцию prost с переменным числом параметров, которая находит все простые числа из нескольких интервалов. Интервалы задаются...

Функции с переменным числом параметров - C++
Добрый день, уважаемые знатоки С++! Подскажите пожалуйста, что не правильно в моем коде? Необходимо написать функцию с переменным...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.01.2013, 19:27
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru