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

Локальная переменная масив не создаеться в вызваной функции - C++

Восстановить пароль Регистрация
 
Qeeet
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 14
06.02.2013, 00:50     Локальная переменная масив не создаеться в вызваной функции #1
Здравствуйте,
Не укладывется в голове, после завершения рекурсий (т.е.контроль передаеться на if(ii==1){return 0;})
наступает цикл for где уже j=1. В итоге мы имеем измененный массив bool а[]={1,0}.
Если кратко, то следующий код выводит на экран:
a[]= 00
a[]= 10
a[]= 10
a[]= 10
a[]= 11
a[]= 11
0.

Я ожидал такой результат:
a[]= 00
a[]= 10
a[]= 10
a[]= 00
a[]= 01
0.

Подскажите как передать массив в функцию, чтобы он в функции скопировался?
или где я сделал ошибку?

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
#include <iostream>
 
using namespace std;
 
int func(bool a[],int ii,int aj)
{
    int w=0;
    static bool aa=0;
    if(aa){a[aj]=1;}else{aa=1;}
        for(int j=0;j<2;j++)
        { 
            cout<<"a[]= "<<a[0]<<a[1]<<endl;
            if(!a[j])
            {
                if(ii==1){return 0;}
                else{w+=func(a,ii+1,j);}
            }
        }
    return w;
}
 
int func()
{   
    bool a[2];
    for(int i=0;i<2;i++)a[i]=0;
    int ii=0,aj=0;
    return func(a,ii,aj);
}
 
void main()
{
    cout<<func();
    getchar();getchar();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Пёс
 Аватар для Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
06.02.2013, 01:00     Локальная переменная масив не создаеться в вызваной функции #2
Цитата Сообщение от Qeeet Посмотреть сообщение
Здравствуйте,
Не укладывется в голове, после завершения рекурсий (т.е.контроль передаеться на if(ii==1){return 0;})
наступает цикл for где уже j=1. В итоге мы имеем измененный массив bool а[]={1,0}.
Если кратко, то следующий код выводит на экран:
a[]= 00
a[]= 10
a[]= 10
a[]= 10
a[]= 11
a[]= 11
0.

Я ожидал такой результат:
a[]= 00
a[]= 10
a[]= 10
a[]= 00
a[]= 01
0.

Подскажите как передать массив в функцию, чтобы он в функции скопировался?
или где я сделал ошибку?

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
#include <iostream>
 
using namespace std;
 
int func(bool a[],int ii,int aj)
{
    int w=0;
    static bool aa=0;
    if(aa){a[aj]=1;}else{aa=1;}
        for(int j=0;j<2;j++)
        { 
            cout<<"a[]= "<<a[0]<<a[1]<<endl;
            if(!a[j])
            {
                if(ii==1){return 0;}
                else{w+=func(a,ii+1,j);}
            }
        }
    return w;
}
 
int func()
{   
    bool a[2];
    for(int i=0;i<2;i++)a[i]=0;
    int ii=0,aj=0;
    return func(a,ii,aj);
}
 
void main()
{
    cout<<func();
    getchar();getchar();
}
Без комментариев очень тяжело понять рекурсию.....

Добавлено через 2 минуты
C++
1
2
    bool a[2];
    for(int i=0;i<2;i++)a[i]=0;
Не кошерно так делать, товарищ ....
А тем более так:
C++
1
int func(bool a[],int ii,int aj);
Bonaqus
2 / 2 / 0
Регистрация: 10.01.2013
Сообщений: 15
06.02.2013, 01:11     Локальная переменная масив не создаеться в вызваной функции #3
Извините, немного сложно читать такой код
C++
1
if(aa){a[aj]=1;}else{aa=1;}
и это
C++
1
for(int i=0;i<2;i++)a[i]=0;
и отучайтесь от привычки именовать переменные i,ii,aj и т.п.
«Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте» Мартин Голдинг.
Qeeet
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 14
06.02.2013, 05:00  [ТС]     Локальная переменная масив не создаеться в вызваной функции #4
попробую показать что за чем идет:

1. обьявление b[2]{0,0}; ii=0; aj=0
2. Вызов функции func(a,ii,aj) |func({0,0},0,0)|
3. func({0,0},0,0) обьявление w=0; static aa=0
4. func({0,0},0,0) if(0) возвращает aa=1
5. func({0,0},0,0) for j=0
6. func({0,0},0,0) for Вывод "00", так как см. строчка 1.
7. func({0,0},0,0) for if(!0) |потому что a[0]=0| возвращает w+=func(a,ii+1,j) |func({0,0},0+1,0)|
8. func({0,0},0,0) for if func({0,0},1,0) обьявление w=0. static bool уже не срабатывает и не будет срабатывать
9. func({0,0},0,0) for if func({1,0},1,0) if(1) возвращает a[0]=1, потому что static aa=1, см 4.
10. func({0,0},0,0) for if func({1,0},1,0) for j=0
11. func({0,0},0,0) for if func({1,0},1,0) for Вывод "10", так как см. строчка 9
12. func({0,0},0,0) for if func({1,0},1,0) for if(!1) |потому что a[0]=1| передает управление след. циклу for
13. func({0,0},0,0) for if func({1,0},1,0) for j=1
14. func({0,0},0,0) for if func({1,0},1,0) for Вывод "10", так как см. строчка 9
15. func({0,0},0,0) for if func({1,0},1,0) for if(!0) |потому что a[1]=0|
16. func({0,0},0,0) for if func({1,0},1,0) for if if(1==1) |потому что func({0,0},ii,0), см. левей|
17. func({0,0},0,0) for if func({1,0},1,0) for if if return 0
18. func({0,0},0,0) for if w=0 |потому что func({1,0},1,0) дает 0|
19. func({0,0},0,0) for j=1

и тут для меня непонятное происходит:
20. func({0,0},0,0) for Вывод "10"

а я ожидал:
20. func({0,0},0,0) for Вывод "00", так как массив а[2] не был подвергнут изменениям внутри функции.

Меня не интерисует w. Помогите решить эту проблему

Добавлено через 43 минуты
Цитата Сообщение от Bonaqus Посмотреть сообщение
Извините, немного сложно читать такой код
я могу скинуть полностью весь код, но думаю там еще более непонятнее.
исходный код вычисляет определитель матрицы, я часами на протяжении 3х дней ламал мозг над этим ангоритном и реализацией. Я даже впервые запустив его, IDE не нашел ниодной ошибки, код успешно скомпилился. Но обязательно я должен всетаки спотыкнуться об какойто камень.
Помогите найти ошибку, или как еще можно отправить функции в аргументы динамический одномерный массив так чтобы он копировался в функции как локальная переменная?

умоляю помогите разобраться почему то что я ожидал не совпадает с тем что получилось

Добавлено через 2 минуты
спрашивайте, по требованию запосчу весь код задания.
Но возникшую проблему спростовал к коду, который в первым сообщении

Добавлено через 1 час 28 минут
решил задачу через вектор.
Но этот вопрос остается открытым.

PS: ООо, СПАСИБО ВЕЛИКОМУ ВЕКТОРУ, ОН СПАС ЭТОТ МИР
Yandex
Объявления
06.02.2013, 05:00     Локальная переменная масив не создаеться в вызваной функции
Ответ Создать тему
Опции темы

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