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

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

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

Непонятное поведение простой функции - C++

24.10.2013, 23:51. Просмотров 268. Ответов 7
Метки нет (Все метки)

Решал одну задачу на рекурсию, долго не мог добится результата пока не понял что проблема не в рекурсии а в аргументах функции, сделал простую програму отображающую проблему: по идее должна выводить восемь единиц, на деле выводит 2. ( у меня студия 10, попросил запусить этот код друга, у него тоже 2 единицы но его компилятор я не уточнял). вообщем сам не разберусь help!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
void f(int x, int y, int z, int R);
 
int main ()
{
    int R = 1;
    f(-R, -R, -R, R);
    std::cin.get();
    return 0;
}
 
void f(int x, int y, int z, int R)
{
    for (; x < R; x++)
        for (; y < R; y++)
            for (; z < R; z++)
                std::cout<<1;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2013, 23:51     Непонятное поведение простой функции
Посмотрите здесь:

Непонятное мне поведение функции - C++
Эта функция себя странно ведёт. Она работает и если с первого раза ввести цифры с клавиатуры, то работает корректно, но если сначала ввести...

Непонятное поведение потока ввода: в одной функции букву ввёл = во всех функциях наперёд ввёл. Распродажа! - C++
Парни, у меня возникла щекотливая ситуация. Делаю маленькую программу работающую с двоичным деревом поиска. Для удобства сделал что-то...

Непонятное поведение программы - C++
Пишу статическую либу. В ней есть кусок кода, который уходит в рекурсию.. Только причины мне непонятны.. Вот кусок кода std::string...

Непонятное поведение программы - C++
Привет народ, вот кароч: #include&quot;stdafx.h&quot; #include&quot;iostream&quot; using namespace std; class calc{ int *i, *j; public: int...

Непонятное поведение простейшей формулы - C++
Добрый вечер. Дано: double a; double d; unsigned int c; unsigned int b; for loop{ //манипуляции

Непонятное поведение std::valarray - C++
Есть такой код: #include &lt;iostream&gt; #include &lt;valarray&gt; using namespace std; int main() { valarray&lt;int&gt; a(2); a = 2;...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DmitryM5
Love~
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 822
Записей в блоге: 1
25.10.2013, 00:05     Непонятное поведение простой функции #2
Цитата Сообщение от alisteas Посмотреть сообщение
Решал одну задачу на рекурсию, долго не мог добится результата пока не понял что проблема не в рекурсии а в аргументах функции, сделал простую програму отображающую проблему: по идее должна выводить восемь единиц, на деле выводит 2. ( у меня студия 10, попросил запусить этот код друга, у него тоже 2 единицы но его компилятор я не уточнял). вообщем сам не разберусь help!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
void f(int x, int y, int z, int R);
 
int main ()
{
    int R = 1;
    f(-R, -R, -R, R);
    std::cin.get();
    return 0;
}
 
void f(int x, int y, int z, int R)
{
    for (; x < R; x++)
        for (; y < R; y++)
            for (; z < R; z++)
                std::cout<<1;
}
Это действительно рекурсия?
alisteas
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 13
25.10.2013, 00:08  [ТС]     Непонятное поведение простой функции #3
ну я ж написал , что написал програму, которая демонстрирует проблему, а не "написал сюда ту программу которая с рекурсией". та что я делал должна находить все точки, которые входят в сферу заданного радиуса, но проблема не в этом и не в рекурсии, а в том что я передаю в функцию параметры но они ведут себя не так как я от них ожидаю.
Короче то что я написал сюда не рекурсия)
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.10.2013, 00:13     Непонятное поведение простой функции #4
C++
1
2
3
4
5
6
7
void f(int x, int y, int z, int R)
{
    for (int i = x; i < R; i++)
        for (int j = y; j < R; j++)
            for (int k = z; k < R; k++)
                std::cout<<1;
}
Добавлено через 1 минуту
alisteas, в твоем же варианте после окончания 3-го вложенного цикла z уже равна еденице и потому он не выполняется на остальных итерациях первых двух циклов
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
25.10.2013, 00:15     Непонятное поведение простой функции #5
alisteas, посмотрите на вывод вашей функции,
C++
1
2
3
4
5
6
7
8
9
10
11
12
void f(int x, int y, int z, int R) {
    for (; x < R; x++) {
        cout << "x= " << x << endl;
        for (; y < R; y++) {
            cout << "y= " << y << endl;
            for (; z < R; z++) {
                cout << "z= " << z << endl;
                //std::cout << "1" << " ";
            }
        }
    }
}
alisteas
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 13
25.10.2013, 00:17  [ТС]     Непонятное поведение простой функции #6
да, я уже тестил, что если в цикле (именно в цикле, а не что то вроде int _x = x; и тд в начале функции) прописать новые переменные то все работает, но просто хочется знать почему код ведет себя именно так (ведь есть же причина) и к тому же не уверен, что ту задачу с рекурсией выйдет реализовать с использованием новых переменных. Тот код что я написал - просто пример демонстрирующий более обширную проблему

Добавлено через 1 минуту
Цитата Сообщение от Jupiter Посмотреть сообщение
C++
1
2
3
4
5
6
7
void f(int x, int y, int z, int R)
{
    for (int i = x; i < R; i++)
        for (int j = y; j < R; j++)
            for (int k = z; k < R; k++)
                std::cout<<1;
}
Добавлено через 1 минуту
alisteas, в твоем же варианте после окончания 3-го вложенного цикла z уже равна еденице и потому он не выполняется на остальных итерациях первых двух циклов
все, до меня дошло. я же не обнуляю переменную, все правильно, спасибо, сейчас попробую сделать по человечески и посмотрю что выйдет
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.10.2013, 00:18     Непонятное поведение простой функции #7
Цитата Сообщение от alisteas Посмотреть сообщение
просто хочется знать почему код ведет себя именно так
код ведет себя так как ты написал, в твоей студии есть отличный дебаггер, пройдись ним по функции
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2013, 00:24     Непонятное поведение простой функции
Еще ссылки по теме:

Шаблонный класс с шаблонным оператором внутри - непонятное поведение - C++
Написал &quot;кукольный&quot; пример, дабы не смущать читателей ненужными деталями. #include &lt;iostream&gt; template &lt;typename T&gt; struct foo...

Непонятное поведение sscanf(.., "%lf", ..) - C++
Здравствуйте все! Столкнулся с такой проблемой: читаю строку из трех вещественных чисел - 18.4, 5.05, 1.015; смотрю значение value - а...

Непонятное определение функции. - C++
Объясните смысл следующих определений, плз. QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &amp;option, ...

Странное поведение функции - C++
Здравствуйте! Я взялась за реализацию метода Крылова для нахождения коэффициентов характеристического полинома. Написала программу, но...


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

Или воспользуйтесь поиском по форуму:
alisteas
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 13
25.10.2013, 00:24  [ТС]     Непонятное поведение простой функции #8
Цитата Сообщение от Jupiter Посмотреть сообщение
код ведет себя так как ты написал, в твоей студии есть отличный дебаггер, пройдись ним по функции
да, да я вижу. просто после 4 часов немного поплавило, а друг не увидевший ошибки только усилил подозрения. исправил на
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void f(int x, int y, int z, int R) {
    for (; x < R; x++) 
    {
        for (; y < R; y++) 
        { 
            for (; z < R; z++) 
            {
                std::cout << "1" << " ";
            }
            z = -1;
        }
        y = -1;
        z = -1;
    }
}
такое, выводит 8 единиц, как и должно
Yandex
Объявления
25.10.2013, 00:24     Непонятное поведение простой функции
Ответ Создать тему
Опции темы

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