С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 16.03.2015
Сообщений: 26

Разобрать и прокомментировать работу цикла

16.03.2015, 23:16. Показов 1399. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Начал изучать C# и столкнулся с такой трудностью:
Задание: "Попрактикуйтесь в проверке условий циклов" и дан код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
int result = 0;
int x = 6;
while (x.3)
{
result = result + x;
x = x - 1;
}
 
for (int z = 1; z <3; z = z+1) 
{
result = result + z;
}
myLabel.Text = "Результат равен" + result;
Так вот, количество циклов я в этом примере смог высчитать, а вот как получается ответ - не понимаю? Объясните мне пожалуйста это! Я даже под ответ попытался подгонять, но все равно не понял

Есть еще 2 примера в этом же упражнении, и там я даже не могу понять количество циклов:

C#
1
2
3
4
5
6
7
8
9
10
11
int j = 2;
for ( int i = 1; i < 100;
     i = i *2)
//////// тут определял так же как и в примере выше, а вот чуть усложнение вызвало кучу вопросов.
{
j = j - i;
while ( j < 25)
{
j = j + 5;
}
}
В этом примере нужно определить сколько раз будет выполнен этот оператор: j = j - i;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.03.2015, 23:16
Ответы с готовыми решениями:

Разобрать работу цикла for
Доброго всем времени, изучаю по Шилдту , вот , что интересует using System; class forDemo { static void Main () { int...

Прокомментировать и разобрать код
Здравствуйте. Объясните, пожалуйста, как работает этот код? Если можно, прокомментируйте, пожалуйста, каждую функцию. Заранее, спасибо...

Разобрать и прокомментировать рекурсивную функцию
Здравствуйте, начал изучать Си сравнительно недавно, помогите разобрать код &quot;по полочкам&quot;. int f(int start, int end){ int...

4
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
16.03.2015, 23:57
Лучший ответ Сообщение было отмечено odour686 как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int result = 0;
int x = 6;
/// Этот цикл отработает 3 раза: 6, 5, 4
/// Соответственно, result будет равен 6+5+4=15
while (x>3)
{
result = result + x;
x = x - 1;
}
/// Этот цикл отработает 2 раза: 1, 2
/// Соответственно, result будет равен 15+1+2=18
for (int z = 1; z <3; z = z+1) 
{
result = result + z;
}
Второй цикл
C#
1
2
3
4
5
6
7
8
9
10
11
/// Цикл идёт по степеням двойки: 1, 2, 4...
/// Значит, прервётся она на 8 цикле, когда i станет 128, а, 
/// следовательно выражение j = j - i выполнится 7 раз при i = 1, 2, 4, 8, 16, 32, 64
for (int i = 1; i < 100; i = i * 2)
//////// тут определял так же как и в примере выше, а вот чуть усложнение вызвало кучу вопросов.
{
    j = j - i;
    while (j < 25) {
        j = j + 5;
    }
}
1
418 / 316 / 241
Регистрация: 29.05.2010
Сообщений: 796
Записей в блоге: 1
16.03.2015, 23:57
Цитата Сообщение от odour686 Посмотреть сообщение
В этом примере нужно определить сколько раз будет выполнен этот оператор: j = j - i;
1 2 4 8 16 32 64=7
1
0 / 0 / 0
Регистрация: 16.03.2015
Сообщений: 26
17.03.2015, 10:52  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int result = 0;
int x = 6;
/// Этот цикл отработает 3 раза: 6, 5, 4
/// Соответственно, result будет равен 6+5+4=15
while (x>3)
{
result = result + x;
x = x - 1;
}
/// Этот цикл отработает 2 раза: 1, 2
/// Соответственно, result будет равен 15+1+2=18
for (int z = 1; z <3; z = z+1) 
{
result = result + z;
}
Начал разбор, опять появились вопросы:
Сейчас распишу сам, чтоб если что сказали, в чем моя ошибка:
1) Количество обработки циклов определяется из условия что Х> 3. Теперь наши данные начиная с Х = 6, подставляем в x = x-1 (x=5; x = 4; и x=6 из условия). Отсюда получаем обработку цикла 3 раза.

2) result = (кстати, в таких формулах то что стоит до знака равно нужно изменять, подставляя наши данные? ( типо 6 = 6 + x? Или должно быть типа result = 15 + 6? )
еще интересует, почему мы суммируем наши данные? (6 + 5 + 4 = 15)

3) Цикл обработается 2 раза, потому что мы подставляем наши данные в формулу: z = z+1, исходя из условия что начальная z =1 и что она меньше 3. z = 1+1 z=2; z=1 (из условия)

Далее мы опять суммируем с предыдущим result. Почему? Зачем?



Второй по тому же принципу + непонятны усложнения:
C#
1
2
3
4
5
6
7
8
9
10
11
int j = 2;
for ( int i = 1; i < 100;
     i = i *2)
//////// тут определял так же как и в примере выше, а вот чуть усложнение вызвало кучу вопросов.
{
j = j - i;
while ( j < 25)
{
j = j + 5;
}
}
1) Сначала определяем количество циклов for ( int i = 1; i < 100;
i = i *2). Здесь получаем i = 1,2,4,8,16,32,64
Всего 7 раз.

2) мы заходим while и делаем подстановку j = 2 в формулу: j = j + 5;
Получаем j = 2; 7; 12 ; 17; 22

3) а что мы делаем дальше?
Правильно ли я понимаю, что мы заходим в j = j - i; и по очереди подставляем значения? Типо:
j = 2 - 1
j = 7 - 2
j = 12 - 4
j = 17 - 16
j = 22 - 32

Хотя последнее действие вообще не нужно же? пока while не станет false ?
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
17.03.2015, 12:32
Лучший ответ Сообщение было отмечено odour686 как решение

Решение

Цитата Сообщение от odour686 Посмотреть сообщение
2) result = (кстати, в таких формулах то что стоит до знака равно нужно изменять, подставляя наши данные? ( типо 6 = 6 + x? Или должно быть типа result = 15 + 6? )
еще интересует, почему мы суммируем наши данные? (6 + 5 + 4 = 15)
Выражение
C#
1
result = result + x;
читается не так как в математике. Оно означает, что в переменную result нужно поместить сумму значений двух переменных: result и x.
Первый проход цикла: x = 6; result = 0. После первого прохода: x = 5; result = 6;
Второй проход цикла: x = 5; result = 6. После второго прохода: x =4; result = 11;
Третий проход цикла: x = 4; result = 11. После третьего прохода: x = 3; result = 15;

Цитата Сообщение от odour686 Посмотреть сообщение
Далее мы опять суммируем с предыдущим result. Почему? Зачем?
Затем, чтобы ты научился абстрагироваться от конкретных данных. Это всего лишь задачка на понимание работы циклов. Сам по себе цикл не имеет значения, он предназначен для выполнения той или иной задачи в рамках алгоритма.

Добавлено через 19 минут
Цитата Сообщение от odour686 Посмотреть сообщение
1) Сначала определяем количество циклов for ( int i = 1; i < 100;
i = i *2). Здесь получаем i = 1,2,4,8,16,32,64
Нет, количество проходов цикла мы не определяем. Оно ограничивается условием i < 100. Если внутри цикла изменить переменную i, то и количество проходов поменяется.
Во втором примере циклы вложенные, т.е. внутри цикла for, на каждом проходе, выполняется ещё один цикл while. Вся работа будет выглядеть примерно так:
Кликните здесь для просмотра всего текста
Code
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
35
36
37
Цикл for. Проход №1. i = 1; j = 1
    Цикл while. Проход №1. j = 6
    Цикл while. Проход №2. j = 11
    Цикл while. Проход №3. j = 16
    Цикл while. Проход №4. j = 21
    Цикл while. Проход №5. j = 26
Цикл for. Проход №2. i = 2; j = 24
    Цикл while. Проход №1. j = 29
Цикл for. Проход №3. i = 4; j = 25
Цикл for. Проход №4. i = 8; j = 17
    Цикл while. Проход №1. j = 22
    Цикл while. Проход №2. j = 27
Цикл for. Проход №5. i = 16; j = 11
    Цикл while. Проход №1. j = 16
    Цикл while. Проход №2. j = 21
    Цикл while. Проход №3. j = 26
Цикл for. Проход №6. i = 32; j = -6
    Цикл while. Проход №1. j = -1
    Цикл while. Проход №2. j = 4
    Цикл while. Проход №3. j = 9
    Цикл while. Проход №4. j = 14
    Цикл while. Проход №5. j = 19
    Цикл while. Проход №6. j = 24
    Цикл while. Проход №7. j = 29
Цикл for. Проход №7. i = 64; j = -35
    Цикл while. Проход №1. j = -30
    Цикл while. Проход №2. j = -25
    Цикл while. Проход №3. j = -20
    Цикл while. Проход №4. j = -15
    Цикл while. Проход №5. j = -10
    Цикл while. Проход №6. j = -5
    Цикл while. Проход №7. j = 0
    Цикл while. Проход №8. j = 5
    Цикл while. Проход №9. j = 10
    Цикл while. Проход №10. j = 15
    Цикл while. Проход №11. j = 20
    Цикл while. Проход №12. j = 25
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.03.2015, 12:32
Помогаю со студенческими работами здесь

Прокомментировать код цикла
Подскажите пожалуйста почему в этом цикле при первом проходе i становится 2, один умножить на два один ведь должно быть? for (int i = 1;...

Разобрать синтаксис цикла
не пойму цикл: for(i=0;s;i++) точнее не пойму,что означает s?это s!='/0'? if(!(*str))- да и что это за условие?str==0 или str!=0? ...

Нужно прокомментировать работу кода
Товарищи, прошу помощи прокомментировать работу кода. У кого на сколько хватит возможности\времени\заинтересованности. Желательно от и...

Разобрать работу кода
p указывает на начало масива не пойму, как в последних двух вычисляется значение 10 20 30 40 50 ...

Описать работу программы, прокомментировать код
Есть рабочая программа. Калькулятор рациональных чисел. Напишите как она работает. Что делает каждый метод, конструктор, класс. Желательно...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru