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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2021, 18:16   #1
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
Вопрос Опeрератор цикла while

Код:
using System;
class Power {
    static void Main(){
        int e;
        int result;
       
        for(int i = 0; i < 10; i++){
           result = 1;
           e = i;

           while(e > 0){
              result *= 2;
              e--;
           }
           Console.writeLine("2 в степени " + i + " равно " + result);
        }
    }
}
Уважаемые программисты, админы итд, нужна ваша помощь.


При каждом цикле For в переменную result присваивается значение 1 но при цикле while результат умножения присваивается в result и сохраняется. При повторном цикле for результатом присваивания переменной result становиться значение 1, при повторном цикле while результат предыдущего умножения в переменной result остается неизменным.

1)Вопрос: Почему так происходит? Разве после присваивания переменной result = 1 значения оно не должно оставаться без изменения?

2) Вопрос: декримент e-- в цикле while какую выполняет роль?
bITA666 вне форума Ответить с цитированием
Старый 03.03.2021, 18:50   #2
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от bITA666 Посмотреть сообщение
1)Вопрос: Почему так происходит? Разве после присваивания переменной result = 1 значения оно не должно оставаться без изменения?
Так оно ж меняется в цикле:
Код:
result *= 2;
Или вы не знаете, что такое *=?

Цитата:
Сообщение от bITA666 Посмотреть сообщение
) Вопрос: декримент e-- в цикле while какую выполняет роль?
У цикла какое условие?
Код:
while(e > 0){
Очевидно счетчик.
FrosyaZZ вне форума Ответить с цитированием
Старый 03.03.2021, 18:58   #3
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Так оно ж меняется в цикле:
Код:
result *= 2;
Или вы не знаете, что такое *=?


У цикла какое условие?
Код:
while(e > 0){
Очевидно счетчик.

меняется, при очередном цикле result опять присваивается значение 1
bITA666 вне форума Ответить с цитированием
Старый 03.03.2021, 19:09   #4
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Именно, вот тут:
Код:
 result = 1;
FrosyaZZ вне форума Ответить с цитированием
Старый 03.03.2021, 19:10   #5
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Код:
using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int e;
            int result;


            for (int i = 0; i < 10; i++)
            {
                result = 1;
                Console.WriteLine("resultA " + result);
                e = i;
                while (e > 0)
                {
                    result *= 2;
                    Console.WriteLine("resultB " + result);
                    e--;
                }

                Console.WriteLine("сумма равна " + i + " sdsds " + result);
            }
        }
    }
}
resultA 1
сумма равна 0 sdsds 1
resultA 1 -- видно что на 2, 3 4.... цикле в переменную result присваивается значение 1
resultB 2
сумма равна 1 sdsds 2
resultA 1
resultB 2
resultB 4
сумма равна 2 sdsds 4
resultA 1
resultB 2
resultB 4
resultB 8
сумма равна 3 sdsds 8
resultA 1
resultB 2
resultB 4
resultB 8
resultB 16
сумма равна 4 sdsds 16
resultA 1
resultB 2
resultB 4
resultB 8
resultB 16
resultB 32
сумма равна 5 sdsds 32
resultA 1
resultB 2
resultB 4
resultB 8
resultB 16
resultB 32
resultB 64
сумма равна 6 sdsds 64
resultA 1
resultB 2
resultB 4
resultB 8
resultB 16
resultB 32
resultB 64
resultB 128
сумма равна 7 sdsds 128
resultA 1
resultB 2
resultB 4
resultB 8
resultB 16
resultB 32
resultB 64
resultB 128
resultB 256
сумма равна 8 sdsds 256
resultA 1
resultB 2
resultB 4
resultB 8
resultB 16
resultB 32
resultB 64
resultB 128
resultB 256
resultB 512
сумма равна 9 sdsds 512
bITA666 вне форума Ответить с цитированием
Старый 03.03.2021, 19:13   #6
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Ну да. Тело цикла for, как и любого другого выполняется на каждом шаге. В теле цикла фор стоит:
Код:
result = 1;
Что не так?
FrosyaZZ вне форума Ответить с цитированием
Старый 03.03.2021, 19:16   #7
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Ну да. Тело цикла for, как и любого другого выполняется на каждом шаге. В теле цикла фор стоит:
Код:
result = 1;
Что не так?
Не пойму вот что почему при каждом цикле в переменную result присваивается 1 но оказывается в нем 2, 4, 8... ведь при каждом цикле значение 1 должно быть в переменной result а не 2,4,8...
bITA666 вне форума Ответить с цитированием
Старый 03.03.2021, 19:21   #8
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

У вас тело фор состоит из:
Код:
            {
                result = 1;  // Присвоили 1 в result
                Console.WriteLine("resultA " + result);
                e = i;
                while (e > 0)
                {
                    result *= 2; // Поумножали result и получили 2, 4, 8, ...
                    Console.WriteLine("resultB " + result);
                    e--;
                }

                Console.WriteLine("сумма равна " + i + " sdsds " + result); // Вывели result, который 1, 2, 4, 8, ...
            }
FrosyaZZ вне форума Ответить с цитированием
Старый 03.03.2021, 19:23   #9
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Ведь присваивание переменной result происходит значением 1
То есть при повторном присваивания значения 1 переменная result должна иметь значение 1
bITA666 вне форума Ответить с цитированием
Старый 03.03.2021, 19:28   #10
bITA666
Форумчанин
 
Аватар для bITA666
 
Регистрация: 22.03.2019
Сообщений: 115
По умолчанию

Код:
            {
                result = 1;  // Присвоили 1 в result
                Console.WriteLine("resultA " + result);
                e = i;
                while (e > 0)
                {
                    result *= 2; // Поумножали result и получили 2, 4, 8, ...
                    Console.WriteLine("resultB " + result);
                    e--;
                }

                Console.WriteLine("сумма равна " + i + " sdsds " + result); // Вывели result, который 1, 2, 4, 8, ...
            }


Цикл while у нас выполняется один раз а значит умножение происходит один раз а именно 1 * 2 = 2;
выводим 2;
опять цикл for
снова присваивается result значение 1
и снова выполняется while с тем же значением 1
1* 2 = 2:
итд.

Как тогда в result сохраняется значение 2 если мы присваиваем при каждом цикле 1
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