Некорректно работает второй цикл

273
15 декабря 2016, 16:06

Будьте любезны, наведите на путь истинный. Второй цикл while некорректно работает, в чем причина?

while (i <= a)  
{  
    i++;  
}
while (j <= b)  
{  
    j+=i;                               // второй цикл...
}

Например, переменной а равняется число 2, а переменной в равняется 3. В первом цикле происходит преобразование числа 2 в : 1+1, во втором цикле выражение 1+1 повторяется 3 раза. Другими словами, замена умножения делением. Проблема в том что, первый цикл отрабатывает на ура, второй цикл не выполняется вовсе.

Answer 1

1) отформатируйте код, для этого есть специальная кнопка

2) " не корректно" - это как?

3) вопрос немного не по теме, но просто бросается в глаза. Зачем вам вот эта конструкция:

while (i <= a)
{
    i++;
}

не проще ли сразу написать i = a + 1;?

Обновление

эта конструкция производит преобразование допустим числа 5 в 1+1+1+1+1

тут не будет никакого "преобразования". в памяти вы получите то же самое число 5, а не 1+1+..., поэтому весь ваш цикл будет иметь тот же эффект, что и обычное присваивание, только выполнится в несколько раз медленнее

Обновление

@АльфаЧ вашу логику очень трудно назвать логичной. Если вы хотите заменить умножение сложением, зачем вам прибавлять единицы?

Эта простая идея замены умножения на сложение реализуется элементарно (в первом приближении):

int multiply(int first, int second) 
{
    int res = 0;
    while(second-- > 0)
        res += first;
    return res;
}

Правда это дрянная реализация Она неверно обрабатывает отрицательные множители и заглохнет на больших значениях в силу переполнения, но от этих недостатков можно исцелиться, добавив чуть больше кода. Но это уже другая история

Answer 2

Арифметика второго класса (не первого, которой Вы руководствуетесь) говорит, что надо сделать

int n = 0;
for (int i = 0; i < b; i++)
    n+=a;

Нет, складывать единички, конечно, можно. Только зачем?
Не, ну можно и так написать...

int n = 0;
while (++n!=a*b);

Дело Ваше...

READ ALSO
Скорость цикла begin() end() STL контейнеров

Скорость цикла begin() end() STL контейнеров

Есть где-нибудь таблица или информация об этом?

212
Как определить текущий язык (не локаль!) Windows 7?

Как определить текущий язык (не локаль!) Windows 7?

Интересует метод определения локализации Windows 7 на с++(не локали, а именно языка интерфейса), например "Пуск" в русской версии, "Start" - в английской

474
Сигнал  для редактирования БД, QTableView\QSqlRelationalTableModel

Сигнал для редактирования БД, QTableView\QSqlRelationalTableModel

Подскажите подходящий сигнал для редактирования БДНеобходимо сразу после редактирования пользователем ячейки таблицы послать запрос в БД об изменении...

266