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

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

Войти
Регистрация
Восстановить пароль
 
Qeeet
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 14
#1

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

06.02.2013, 00:50. Просмотров 280. Ответов 3
Метки нет (Все метки)

Здравствуйте,
Не укладывется в голове, после завершения рекурсий (т.е.контроль передаеться на 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();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2013, 00:50     Локальная переменная масив не создаеться в вызваной функции
Посмотрите здесь:

Локальная переменная внутри статической функции - C++
Всем доброго дня! Из данного примера выяснилось, что при обьявлении функции func_1() статической, переменная x внутри этой ...

Почему локальная переменная не уничтожается после выхода из функции - C++
В функции создается строка char *pn = new char;. Мне непонятно почему при выходе из функции эта строка доступна в main()? Почему эта строка...

Локальная переменная - C++
Если в функции объявляется символ,например так: char f(void){ char ch; ch = getchar(); return ch; }

Локальная неинициализированная переменная - C++
Прочитал в учебнике, что обращение к локальной неинициализированной переменной это ошибка, ради интереса попробовал набросать следующее:...

Неинициализированная локальная переменная - C++
#include &quot;stdafx.h&quot; int main() { struct queue { int data; queue *next; }; queue *begin; queue *end;

Статическая локальная переменная - C++
Помогите пожалуйста привести пример использования статической локальной переменной в функции

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Пёс
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 и т.п.
«Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте» Мартин Голдинг.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2013, 05:00     Локальная переменная масив не создаеться в вызваной функции
Еще ссылки по теме:

Использована неинициализированная локальная переменная - C++
Здравствуйте. Подскажите, пожалуйста, в чем тут ошибка? Вроде бы все правильно. Создаются переменная и указатель на адрес, где хранится...

Использована неинициализированная локальная переменная - C++
Почему не работает программа #include &lt;iostream&gt; #include &lt;cstring&gt; using std::cin; using std::cout; using std::endl; int...

Использована неинициализированная локальная переменная - C++
Друзья, подскажите пожалуйста в чём проблема? Пишу программу, где среди трёх заданных чисел необходимо найти минимальное и...

Использована неинициализированная локальная переменная - C++
#include &lt;math.h&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include...

Использована неинициализированная локальная переменная - C++
error C4700: использована неинициализированная локальная переменная &quot;w&quot;. Даже если w объявлять как глобальную переменную то прога все равно...

Локальная переменная внутри цикла - C++
Добрый день ! При вызове функции void println (int i, int ident) { cout &lt;&lt; i; if (ident) ...


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

Или воспользуйтесь поиском по форуму:
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     Локальная переменная масив не создаеться в вызваной функции
Ответ Создать тему
Опции темы

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