Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

30.07.2013, 16:04. Просмотров 587. Ответов 8
Метки нет (Все метки)

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, возможно я немного непонятно объяснил, но все же попробуйте объяснить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2013, 16:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вложенные циклы (C++):

Вложенные циклы - C++
Написать программу которая выводит рисунок * ** * * **** с помощью вложенных циклов

Вложенные циклы - C++
как вывести на зкран следуюшие 41 42 ... 50 51 52 ... 60 61 62 ... 70 71 72 ... 80 с помошью вложенний цикл... Так...

Вложенные циклы - C++
Найти все натуральные числа в диапазоне между m и n (m&lt;n), в записи которых нет двух одинаковых цифр. Подсчитать количество таких чисел. ...

Вложенные циклы - C++
&quot;Рисование&quot;символами.Символы должны отделяться пробелами.Надо вывести на экран. ____*____ ___***___ __*****__ _*******_ ...

Вложенные циклы - C++
Есть два цикла, один вложенный. for(int i=0; i&lt;N;i++) { for(int j=0; j&lt;M;j++) { A=... } }

Вложенные циклы - C++
Не совсем понимаю работу вложенных циклов. Объясните пожалуйста следующее. Инструкция myArr=myArr; myArr=min; относится инструкцией...

8
SatanaXIII
Супер-модератор
Эксперт С++
5650 / 2694 / 252
Регистрация: 01.11.2011
Сообщений: 6,588
Завершенные тесты: 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";
    }
1
es_
203 / 203 / 46
Регистрация: 14.01.2013
Сообщений: 455
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.
1
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, а начинает крутить с единицы , а не с пятерки?
0
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
Завершенные тесты: 1
30.07.2013, 16:40 #5
Цитата Сообщение от brr777 Посмотреть сообщение
почему переменная j на пятом шаге не сохраняет значение 5
Потому что инициализируется заново: j = 1

Выбросите инициализацию, будет так как вам нужно:
C++
1
for (; j <= i; ++j)
1
brr777
0 / 0 / 0
Регистрация: 30.07.2013
Сообщений: 3
30.07.2013, 16:44  [ТС] #6
Понятно, спасибо
0
es_
203 / 203 / 46
Регистрация: 14.01.2013
Сообщений: 455
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 будет крутится с предыдущего значения
0
SatanaXIII
Супер-модератор
Эксперт С++
5650 / 2694 / 252
Регистрация: 01.11.2011
Сообщений: 6,588
Завершенные тесты: 1
30.07.2013, 16:47 #8
Цитата Сообщение от Schizorb Посмотреть сообщение
C++
1
for (; j <= i; ++j)
В данном случае весь этот цикл поместится в
C++
1
j=i;
1
Schizorb
30.07.2013, 16:51     Вложенные циклы
  #9

Не по теме:

SatanaXIII, точно )

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2013, 16:51
Привет! Вот еще темы с ответами:

Вложенные циклы. - C++
Условие: Дано натуральное число n. Получить все натуральные числа, меньшие n и взаимно простых с ним. Взаимно простыми числами называются...

Вложенные циклы С++ - C++
вывести на экран числа в виде таблицы 6 6 6 6 6 7 7 7 7 8 8 8 9 9 10

Вложенные циклы - C++
Всем привет. Найти все натуральные числа в диапазоне между m и n (m&lt;n), в записи которых нет двух одинаковых цифр. Подсчитать количество...

Вложенные циклы - C++
Помогите решить с помощью вложенных циклов. Ввести число строк! вывести похожее на следующее = заданому количеству строк ....* ...** ...


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

Или воспользуйтесь поиском по форуму:
9
30.07.2013, 16:51
Ответ Создать тему
Опции темы

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