Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 07.05.2018
Сообщений: 16
1

Элементарная задача с Циклом. Почему код выполняется именно 8 раз?

02.10.2018, 17:11. Показов 663. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, сижу целый день и не могу понять почему именно так, можно расписать по полочкам пожалуйста?
Почему выполняется именно 8 раз
C#
1
2
3
4
5
6
7
8
int p = 2;
for(int q = 2; q < 32; q = q * 2)
{
while (p<q)
{
p=p*2;
}
q=p-q
Или этот 7 раз
C#
1
2
3
4
5
6
7
int j =2;
for (int i = 1; i <100; i = i * 2)
{
j = j - i;
while (j<25)
{
j=j+5;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.10.2018, 17:11
Ответы с готовыми решениями:

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

Объясните почему код выполняется именно так (private)
Добрый день коллеги! Всех с наступающим! Есть вот такой кусок кода : public class Solution { ...

Не выполняется код за циклом for
Здравствуйте. Вывожу код кнопок подключенных к PORTA c 4 по 7. Код выводится исправно. Столкнулся...

Почему этот цикл выполняется один раз?
Canvas, прорисовав один раз все изображения, останавливается, а задача в том чтобы изображения...

6
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
02.10.2018, 17:33 2
ожидается что будут значения 2 4 8 16 32
Цитата Сообщение от AkaForty Посмотреть сообщение
for(int q = 2; q < 32; q = q * 2)
в первом проходе цикла вы имеете
p=2, q=2
тогда
Цитата Сообщение от AkaForty Посмотреть сообщение
while (p<q)
не исполняется на первом цикле, но при этом
Цитата Сообщение от AkaForty Посмотреть сообщение
q=p-q
у вас возвращает q=0, на второй итерации
p=2, q=0
цикл
Цитата Сообщение от AkaForty Посмотреть сообщение
while (p<q)
дает значение
p=4
p=8
и до переполнения где у вас p=-2 147 483 648

цикл переводит q
Цитата Сообщение от AkaForty Посмотреть сообщение
q=p-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 раз
Миниатюры
Элементарная задача с Циклом. Почему код выполняется именно 8 раз?  
0
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
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 итераций цикла
Цитата Сообщение от AkaForty Посмотреть сообщение
for (int i = 1; i <100; i = i * 2)
т.е. i будет поочередно равно 1,2,4,8,16,32,64,128
осталось проверить как себя поведет цикл
Цитата Сообщение от AkaForty Посмотреть сообщение
while (j<25)
возьмем i=1;
тогда
Цитата Сообщение от AkaForty Посмотреть сообщение
j = j - i;
j=2-1==1;
в цикле
Цитата Сообщение от AkaForty Посмотреть сообщение
while (j<25)
j=26;
на следующей итерации
i=2
j=26-2==24;
в цикле
Цитата Сообщение от AkaForty Посмотреть сообщение
while (j<25)
j=29;
на следующей итерации
i=4
j=29-4==25;
цикл
Цитата Сообщение от AkaForty Посмотреть сообщение
while (j<25)
не используем

на следующей итерации
i=8
j=25-8==17;

в цикле
Цитата Сообщение от AkaForty Посмотреть сообщение
while (j<25)
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:
Цитата Сообщение от V_Monomax Посмотреть сообщение
т.е. i будет поочередно равно 1,2,4,8,16,32,64,128
1
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
03.10.2018, 09:56 6
Цитата Сообщение от Wolfy314 Посмотреть сообщение
V_Monomax, цикл 5 небесконечный, Вы ошиблись.
возможно, устаю однако.
1
0 / 0 / 0
Регистрация: 07.05.2018
Сообщений: 16
03.10.2018, 11:33  [ТС] 7
Спасибо всем)
0
03.10.2018, 11:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.10.2018, 11:33
Помогаю со студенческими работами здесь

Код выполняется через раз
Учи руби по книги, взял пример, строку. Запустил - выполнилась, запустил - выполнилась, запустил...

Почему принято в компьютере использовать именно двоичный код?
Почему принято в компьютере использовать именно двоичный код?? а не троичный или любой другой

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

Почему скомпилированный код выдал именно эти символы, а не другие?
#include &lt;iostream&gt; using namespace std; class cls { protected: char c; public: cls()...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru