Помогите с циклами!

Помогите разобраться в исходном коде. Почему здесь в цикле «for» находиться другой цикл «for»? Что значит символ «j» и переменная pow? И почему в конце кода надо опять писать pow = 1?? Спасибо.

const int N = 64;
    unsigned long long result = 1, pow = 1;

    for(int i(1); i <= 64; i++)
    {
       for(int j(0); j < i; j++)
          pow *= 2;
       cout << "В сумме на " << i << " клетке приходиться " << result << " зерна!\n";
       result += pow;
       pow = 1;
    }

Почему здесь в цикле «for» находиться другой цикл «for»?

Вложенный цикл. Зачем он тут?
Ваш же код, Вам виднее какой алгоритм он реализует.

Что значит символ «j»

Имя переменной.

и переменная pow?

Переменную с именем pow,
как бы странно это не выглядело.

И почему в конце кода надо опять писать pow = 1?

Этого требует алгоритм.

Я так понял, это решение задачи о зернах на шахматной доске?

Я так понял, это решение задачи о зернах на шахматной доске?

Да это оно.

Вложенный цикл. Зачем он тут? Ваш же код, Вам виднее какой алгоритм он
реализует.

Код не мой. Я не устраиваю здесь тесты на ваши знания по C++, а всего лишь прошу обьяснить мне некоторые детали в этом коде, знал бы что это значит не писал бы сюда. Если не можете дать коректные ответы на мои вопросы, то не надо писать сюда...

Код не мой.

Взять листочек, карандаш, и расписать алгоритм никак?

а всего лишь прошу обьяснить мне некоторые детали в этом коде

Ну ок.

   for(int j(0); j < i; j++)
      pow *= 2;

цикл «накапливает» степень двойки, добираясь до нужной степени на данной итерации.

   pow = 1;

«сбрасывает» нашу степень, чтобы начать заново на новой итерации.

Зачем это нужно? А хрен его знает.
Код писал либо полный новичок, либо идиот.

вполне можно вот так сделать:

for(unsigned long long i(1); i <= 64; i++)
{
   cout << "В сумме на " << i << " клетке приходится " << result << " зерна!\n";
   result <<= 1u;
   result |= 1u;
}

т.е. вообще без pow и цикла.

или даже без всяких result:

for(unsigned long long i(0); i < 64; i++)
{
   cout << "В сумме на " << (i+1) << " клетке приходится " << ((1ull << i) | ((1ull << i) - 1ull)) << " зерна!\n";
}

Помогите составить программу:
Определить каким по счёту идёт в исходной последовательности член, равный В, если такого члена нет, выдать соответствующее решение.

Александр, в цикле считай члены в последовательности. Если обнаружится член, равный В, надо установить флаг и выйти из цикла, иначе продолжать цикл до конца последовательности. После выхода из цикла проверить флаг. Если он установлен, т.е. нужный член найден — напечатать счётчик членов, иначе напечатать сообщение, что такого члена нет.

Что за исходная последовательность и как определять её конец в условии задачи не указано. Так что решай сам или спроси у препа.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.