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

Вложенные циклы - C++

Восстановить пароль Регистрация
 
brr777
0 / 0 / 0
Регистрация: 30.07.2013
Сообщений: 3
30.07.2013, 16:04     Вложенные циклы #1
C++
1
2
3
4
5
6
for (int i = 1; i < 10; ++i)
    {
        for (int j = 1; j <= i; ++j)
            cout << "*";
            cout << "\n";
    }
Имеется такой вложенный цикл, при отладке смотрел за состоянием переменных, не могу понять почему переменная "j" не сохраняет старого значения а начинает крутить опять с единицы вновь, например при пятом заходе ее значение 5, после проверки условия становится 1, возможно я немного непонятно объяснил, но все же попробуйте объяснить
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2013, 16:04     Вложенные циклы
Посмотрите здесь:

C++ Вложенные циклы
C++ Вложенные циклы
Вложенные циклы C++
Вложенные циклы С++ C++
Вложенные циклы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,332
Завершенные тесты: 1
30.07.2013, 16:23     Вложенные циклы #2
Потому что int j объявлена внутри цикла for. Ее область видимости это тело цикла. Как только цикл завершается, условие выхода из него выполняется, переменная j перестает существовать. На следующей внешней итерации i в цикле по j сама переменная j заново объявляется. Если хотите, чтобы j сохраняла свое состояние после выхода из цикла, объявите ее раньше - вне цикла:
C++
1
2
3
4
5
6
7
for (int i = 1; i < 10; ++i)
    {
        int j;
        for (j = 1; j <= i; ++j)
            cout << "*";
        cout << "\n";
    }
es_
 Аватар для es_
198 / 198 / 46
Регистрация: 14.01.2013
Сообщений: 446
30.07.2013, 16:29     Вложенные циклы #3
Вот смотри:
C++
1
for (int i = 1; i < 10; ++i)
У тебя i меняется от 1 до 9 (включительно) в - данном коде у тебя это новые строки.
Вот первая итерация: i=1 - далее заходим во вложенный цикл:
C++
1
2
for (int j = 1; j <= i; ++j)
     cout << "*";
В нём j меняется от 1 до i - при первой итерации от 1 до 1. Т.е. нарисует одну "*", так как итерация одна, то на этом работа во вложенном цикле закончена и далее передаётся выполнению внешнего цикла, а именно выполнится действие
C++
1
cout << "\n";
Т.е. переход на новую строку, далее i увеличивается на единицу, становится 2 - заходим во вложенный цикл и изменяем j от 1 до 2(включительно) Т.е. рисуем два раза "*" и так далее ... до i=9 включительно.
Попытался подробно объяснить, думаю пригодится. А на конкретный вопрос ответил SatanaXIII.
brr777
0 / 0 / 0
Регистрация: 30.07.2013
Сообщений: 3
30.07.2013, 16:39  [ТС]     Вложенные циклы #4
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Потому что int j объявлена внутри цикла for. Ее область видимости это тело цикла. Как только цикл завершается, условие выхода из него выполняется, переменная j перестает существовать. На следующей внешней итерации i в цикле по j сама переменная j заново объявляется. Если хотите, чтобы j сохраняла свое состояние после выхода из цикла, объявите ее раньше - вне цикла:
C++
1
2
3
4
5
6
7
for (int i = 1; i < 10; ++i)
    {
        int j;
        for (j = 1; j <= i; ++j)
            cout << "*";
        cout << "\n";
    }
Благодарю за ответы, но тут наверное я некорректно вопрос задал отчасти

C++
1
2
3
4
5
6
7
8
    int i, j;
 
    for (i = 1; i < 10; ++i)
    {
        for (j = 1; j <= i; ++j)
            cout << "*";
            cout << "\n";
    }
Например объявил их раньше, почему переменная j на пятом шаге не сохраняет значение 5, а начинает крутить с единицы , а не с пятерки?
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
30.07.2013, 16:40     Вложенные циклы #5
Цитата Сообщение от brr777 Посмотреть сообщение
почему переменная j на пятом шаге не сохраняет значение 5
Потому что инициализируется заново: j = 1

Выбросите инициализацию, будет так как вам нужно:
C++
1
for (; j <= i; ++j)
brr777
0 / 0 / 0
Регистрация: 30.07.2013
Сообщений: 3
30.07.2013, 16:44  [ТС]     Вложенные циклы #6
Понятно, спасибо
es_
 Аватар для es_
198 / 198 / 46
Регистрация: 14.01.2013
Сообщений: 446
30.07.2013, 16:44     Вложенные циклы #7
C++
1
j = 1
вот поэтому.
сделай так:
C++
1
2
3
4
5
6
7
int j=1;
for (int i = 1; i < 10; ++i)
{
   for (j; j <= i; ++j)
    cout << "*";
   cout << "\n";
}
и у тебя j будет крутится с предыдущего значения
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,332
Завершенные тесты: 1
30.07.2013, 16:47     Вложенные циклы #8
Цитата Сообщение от Schizorb Посмотреть сообщение
C++
1
for (; j <= i; ++j)
В данном случае весь этот цикл поместится в
C++
1
j=i;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2013, 16:51     Вложенные циклы
Еще ссылки по теме:

C++ Вложенные циклы
Вложенные циклы C++
C++ Вложенные циклы

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

Или воспользуйтесь поиском по форуму:
Schizorb
30.07.2013, 16:51     Вложенные циклы
  #9

Не по теме:

SatanaXIII, точно )

Yandex
Объявления
30.07.2013, 16:51     Вложенные циклы
Ответ Создать тему
Опции темы

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