Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2021, 00:22   #11
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Цитата:
Цикл while у нас выполняется один раз ...
Это ваше глубокое заблуждение.
См. по порядку.
Цикл for начинается с i = 0.
Далее, в теле for, переменная e получает значение i, т.е. e = 0.
В этом случае цикл while не выполняется.
На следующем шаге i = 1, а значит и e = 1.
Теперь управление передаётся в цикл while, где e становится равным 0: e--
Тело цикла while выполняется один раз.
На новом шаге цикла for переменная цикла получает новое значение: i = 2
Теперь и e = 2. Управление передаётся в тело цикла while.
В этом цикле result умножается на 2, а затем переменная e уменьшается на единицу: e--
В этот момент e= 1 и цикл while не завершается, а повторяется.
Теперь result вновь умножается на 2. Т.е. result = 4*result.
На этом шаге e уменьшается на 1 и становится равной 0 - вываливаемся из цикла while, и попадаем в цикл for, где result вновь получает значение 1.
Посмотрим следующий цикл for. На этом шаге i = 3 и e = 3.
Теперь тело цикла while проработает три раза и мы получим result = 8*result.
Пока код работает в теле цикла while переменная result изменяется в два раза столько раз, сколько необходимо для уменьшения e до нуля.

Поскольку в цикле for переменная цикла i получает нарастающее значение, то и в цикле while переменная result будет нарастать пропорционально: 2^i (два в степени i).

PS: Посмотри на код внимательнее. Он прост и его можно расписать по шагам на бумажке.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 04.03.2021, 01:36   #12
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Это ваше глубокое заблуждение.
См. по порядку.
Цикл for начинается с i = 0.
Далее, в теле for, переменная e получает значение i, т.е. e = 0.
В этом случае цикл while не выполняется.
На следующем шаге i = 1, а значит и e = 1.
Теперь управление передаётся в цикл while, где e становится равным 0: e--
Тело цикла while выполняется один раз.
На новом шаге цикла for переменная цикла получает новое значение: i = 2
Теперь и e = 2. Управление передаётся в тело цикла while.
В этом цикле result умножается на 2, а затем переменная e уменьшается на единицу: e--
В этот момент e= 1 и цикл while не завершается, а повторяется.
Теперь result вновь умножается на 2. Т.е. result = 4*result.
На этом шаге e уменьшается на 1 и становится равной 0 - вываливаемся из цикла while, и попадаем в цикл for, где result вновь получает значение 1.
Посмотрим следующий цикл for. На этом шаге i = 3 и e = 3.
Теперь тело цикла while проработает три раза и мы получим result = 8*result.
Пока код работает в теле цикла while переменная result изменяется в два раза столько раз, сколько необходимо для уменьшения e до нуля.

Поскольку в цикле for переменная цикла i получает нарастающее значение, то и в цикле while переменная result будет нарастать пропорционально: 2^i (два в степени i).

PS: Посмотри на код внимательнее. Он прост и его можно расписать по шагам на бумажке.

Цитата: В этот момент e= 1 и цикл while не завершается, а повторяется.
То есть получается что как только условие (e > 0) true; цикл while повторяется до тех пор пока условие не окажется Fasle? Как только условие перестает быть истинным то выполняется условие цикла for?

Последний раз редактировалось bITA666; 04.03.2021 в 01:38.
bITA666 вне форума Ответить с цитированием
Старый 04.03.2021, 12:27   #13
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от bITA666 Посмотреть сообщение
То есть получается что как только условие (e > 0) true; цикл while повторяется до тех пор пока условие не окажется Fasle?
А где-то написано по другому? Или вы изучаете языки метом ввода каких-то команд на авось? Как можно по дургому трактовать цикл ПОКА(условие) ДЕЛАТЬ ЧТО-ТО?

Цитата:
Сообщение от bITA666 Посмотреть сообщение
Как только условие перестает быть истинным то выполняется условие цикла for?
Нет. while к for, кроме того, что находится в его теле, не имеет никакого отношения. И как в случае любого другого цикла после него будет выполнен следующий за ним оператор. В вашем случае
Код:
Console.writeLine("2 в степени " + i + " равно " + result);
Вы же видите этот вывод на экране? Он был бы если бы сразу на for переходил?
FrosyaZZ вне форума Ответить с цитированием
Старый 04.03.2021, 13:48   #14
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
А где-то написано по другому? Или вы изучаете языки метом ввода каких-то команд на авось? Как можно по дургому трактовать цикл ПОКА(условие) ДЕЛАТЬ ЧТО-ТО?


Нет. while к for, кроме того, что находится в его теле, не имеет никакого отношения. И как в случае любого другого цикла после него будет выполнен следующий за ним оператор. В вашем случае
Код:
Console.writeLine("2 в степени " + i + " равно " + result);
Вы же видите этот вывод на экране? Он был бы если бы сразу на for переходил?

Я понимаю вас, что вы имеете ввиду. Но я говорю о циклах. Я понимаю что есть оператор Console.writeLine и что после завершения цикла while выполняется оператор Console.writeLine.
Я понимаю что вы объясняете, как оно должно быть. Но разберите код на мелкие части. Циклы отдельно, операторы отдельно, переменные итд это все код. Я вам говорю об отдельных взятых кусочках цикла а именно об while и for и их действиях, пропуская Console.writeLine но не забывая об Console.writeLine.
Я такой человек, я люблю разбивать все на мелкие части тем самым мне так удобно понять принцип выполнения кода.
Поэтому я и прошу ВАС мне подробно объяснять. Мне важна каждая мелочь.

Последний раз редактировалось bITA666; 04.03.2021 в 13:51.
bITA666 вне форума Ответить с цитированием
Старый 04.03.2021, 13:56   #15
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Это уже какой-то бредогенаротор. Откройте любую книгу или статью по C# и прочитайте описание.
https://docs.microsoft.com/en-us/dot...e/keywords/for
https://docs.microsoft.com/en-us/dot...keywords/while
FrosyaZZ вне форума Ответить с цитированием
Старый 04.03.2021, 14:21   #16
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Это уже какой-то бредогенаротор. Откройте любую книгу или статью по C# и прочитайте описание.
https://docs.microsoft.com/en-us/dot...e/keywords/for
https://docs.microsoft.com/en-us/dot...keywords/while
Хорошо что у каждого из нас есть выбор как понимать информацию. И каждый воспринимает её по своему.
bITA666 вне форума Ответить с цитированием
Старый 04.03.2021, 18:24   #17
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

FrosyaZZ, Подскажи пожалуйста вот код:
Код:
using System;
class DoWhileDemo {
    static void Main() {
    int num;
    int nextdigit;
    num = 198;
    Console.WriteLine("Число: " + num);
    Console.Write("Число в обратном порядке: ");
    do {
        nextdigit = num % 10;
        Console.Write(nextdigit);
        num = num / 10;
    }  while(num > 0);
    Console.WriteLine();
  }
}
Выполнение этой программы дает следующий результат.
Число: 198
Число в обратном порядке: 891


Вопрос: При делении nextdigit = num % 10; результат будет 8
выполняется оператор Console.Write(nextdigit);
потом num = num / 10; - то есть мы делим 198 / 10 = 19,8
на этом у меня все. Я опять вступоре.

Объясни что дальше мы делим и на сколько, что бы получить 9 и потом 1
bITA666 вне форума Ответить с цитированием
Старый 04.03.2021, 18:33   #18
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

ПОВТОРЯТЬ ... ПОКА()
Именно значит то, что написано. Никаких подпольных смыслов не имеет. Т.е.

Код:
        nextdigit = num % 10;
        Console.Write(nextdigit);
        num = num / 10;
будет повторяться,, пока
Код:
num > 0
FrosyaZZ вне форума Ответить с цитированием
Старый 04.03.2021, 21:19   #19
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Цитата:
Сообщение от bITA666 Посмотреть сообщение
потом num = num / 10; - то есть мы делим 198 / 10 = 19,8
При целочисленном делении дробная часть отбрасывается, поэтому 198 / 10 = 19.
digitalis вне форума Ответить с цитированием
Старый 04.03.2021, 22:11   #20
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
ПОВТОРЯТЬ ... ПОКА()
Именно значит то, что написано. Никаких подпольных смыслов не имеет. Т.е.

Код:
        nextdigit = num % 10;
        Console.Write(nextdigit);
        num = num / 10;
будет повторяться,, пока
Код:
num > 0
198 % 10 = 8
198 / 10 = 19,8 восемь отбрасываем
19.8 % 10 = 9 восемь отбрасываем
9 / 10
9 % 10 = 9


Цитата:
Сообщение от digitalis Посмотреть сообщение
При целочисленном делении дробная часть отбрасывается, поэтому 198 / 10 = 19.

да digitalis я уже понял, спасибо!
bITA666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как при помощи цикла заполнить список и выйти из цикла(c#) Podrajatel Помощь студентам 7 13.03.2018 09:18
Паскаль выдает Ошибку "Нельзя изменять значение переменной цикла внутри этого цикла" Тырин Артем Помощь студентам 14 17.01.2016 17:53
алгоритмы нахождения эйлерова цикла и гамильтонова цикла в графе. Necare Помощь студентам 0 15.11.2011 18:26
Переход от цикла к циклу не выходя из цикла (без multithreading) Qousio Общие вопросы C/C++ 2 16.05.2009 09:27
Оператор цикла с предусловием While. Оператор цикла с пост условием Repeat McMilin Помощь студентам 7 11.11.2007 14:10