0 / 0 / 0
Регистрация: 07.05.2018
Сообщений: 16
|
|||||||||||
1 | |||||||||||
Элементарная задача с Циклом. Почему код выполняется именно 8 раз?02.10.2018, 17:11. Показов 663. Ответов 6
Метки нет (Все метки)
Добрый день, сижу целый день и не могу понять почему именно так, можно расписать по полочкам пожалуйста?
Почему выполняется именно 8 раз
0
|
02.10.2018, 17:11 | |
Ответы с готовыми решениями:
6
Почему метод выполняется дважды хотя один раз вызывается Объясните почему код выполняется именно так (private) Не выполняется код за циклом for Почему этот цикл выполняется один раз? |
02.10.2018, 17:33 | 2 |
ожидается что будут значения 2 4 8 16 32
в первом проходе цикла вы имеете p=2, q=2 тогда не исполняется на первом цикле, но при этом у вас возвращает q=0, на второй итерации p=2, q=0 цикл дает значение p=4 p=8 и до переполнения где у вас p=-2 147 483 648 цикл переводит q как q=2 147 483 648; так как 2 147 483 648< 32 по идее цикл должен прекратиться, значит вы не все сюда написали. Или не правильно написали.
0
|
0 / 0 / 0
Регистрация: 07.05.2018
Сообщений: 16
|
|
02.10.2018, 17:36 [ТС] | 3 |
Вот эти два примеры из книга, по ответам в цикле#3 выполняется 7 раз, а в цикле#5 8 раз
0
|
02.10.2018, 19:55 | 4 |
AkaForty, пардон с усталости не увидел бесконечность исполнения, итак цикл №5 бесконечный - так как решение двух-трех первых итераций показывает:
первая итерация: p=2, q=2 - цикл while (p<q) - не исполняется так как p=q на выходе q=0 (q=p-q получаем q=2-2) вторая итерация p=2, q=0 - цикл while (p<q) - не исполняется так как p>q на выходе q=2 (q=p-q получаем q=2-0) третья итерация p=2, q=2 - цикл while (p<q) - не исполняется так как p=q на выходе q=0 (q=p-q получаем q=2-2) и так далее. то есть оператор будет исполняться бесконечное количество раз. Во втором случае оператор выполнится 9 раз так как будет 9 итераций цикла т.е. i будет поочередно равно 1,2,4,8,16,32,64,128 осталось проверить как себя поведет цикл возьмем i=1; тогда j=2-1==1; в цикле j=26; на следующей итерации i=2 j=26-2==24; в цикле j=29; на следующей итерации i=4 j=29-4==25; цикл не используем на следующей итерации i=8 j=25-8==17; в цикле j=27; и так далее, проверьте все итерации сами!
1
|
51 / 43 / 12
Регистрация: 12.05.2017
Сообщений: 111
|
|
03.10.2018, 09:48 | 5 |
V_Monomax, цикл 5 небесконечный, Вы ошиблись.
Первая итерация: На начало: p=2, q = 2. While не выполняется, т.к. p==q. В конце p = 2, q = p - q = 0. Вторая итерация: На начало: p = 2, q = 0 * 2 = 0. While не выполняется, т.к. p>q. В конце p = 2, q = p - q = 2. Третья итерация: На начало: p = 2, q = 2 * 2 = 4. While выполняется 1 раз, т.к. p<q (после первого умножения p становится равно q). В конце p = 4, q = p - q = 4 - 4 = 0. Четвёртая итерация: На начало: p = 4, q = 0 * 2 = 0. While не выполняется, т.к. p>q. В конце p = 4, q = p - q = 4 - 0 = 4. Пятая итерация: На начало: p = 4, q = 4 * 2 = 8. While выполняется 1 раз, т.к. после первого умножения p равно q. p = 8. В конце p =8, q = p -q = 8 - 8 = 0. Шестая итерация: На начало: p = 8, q = 0 * 2 = 0. While не выполняется, т.к. p>q. В конце p = 8, q = p - q = 8 - 0 = 8. Седьмая итерация: На начало: p = 8, q = 8 * 2 = 16. While выполнится 1 раз, p = 16. В конце p = 16, q = p - q = 16 - 16 = 0. Восьмая итерация: На начало: p = 16, q = 0 * 2 = 0. While не выполнится, т.к. p>q. В конце p = 16, q = p - q = 16 - 0 = 16. Девятый проход не выполнится, т.к. q станет равно 16 * 2 = 32. Добавлено через 9 минут А второй выполнится 7 (а не 9) раз, потому что, как сказал V_Monomax:
1
|
0 / 0 / 0
Регистрация: 07.05.2018
Сообщений: 16
|
|
03.10.2018, 11:33 [ТС] | 7 |
Спасибо всем)
0
|
03.10.2018, 11:33 | |
03.10.2018, 11:33 | |
Помогаю со студенческими работами здесь
7
Код выполняется через раз Почему принято в компьютере использовать именно двоичный код? Код выполняется только один раз, и то криво Почему скомпилированный код выдал именно эти символы, а не другие? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |