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

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

Восстановить пароль Регистрация
 
alisteas
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 13
24.10.2013, 23:51     Непонятное поведение простой функции #1
Решал одну задачу на рекурсию, долго не мог добится результата пока не понял что проблема не в рекурсии а в аргументах функции, сделал простую програму отображающую проблему: по идее должна выводить восемь единиц, на деле выводит 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++ Непонятное поведение std::valarray
Непонятное поведение list, vector в другом классе C++
Непонятное поведение C++
C++ Непонятное поведение простейшей формулы
C++ Непонятное поведение программы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 743
Записей в блоге: 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
Каратель
Эксперт C++
6542 / 3962 / 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
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
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
Каратель
Эксперт C++
6542 / 3962 / 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++ Непонятное поведение потока ввода: в одной функции букву ввёл = во всех функциях наперёд ввёл. Распродажа!
C++ Непонятное поведение программы
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     Непонятное поведение простой функции
Ответ Создать тему
Опции темы

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