Студенты уже чуть подустали от каникул, потому некоторым уже хочется немного покопаться в кодах. Умникам сайта предлагаем одну такую задачку. Написана на каком-то древнем языке программирования, так чтобы было понятно всем. Может даже какие-то ошибки есть в самом коде, но это не важно. Важно другое. Задача в том, что надо ответить на вопрос: "Это бесконечный цикл?" Или другими словами - будет ли этот код выполняться вечно (если не учитывать, что в любом языке программирования есть предельные ограничения по типам данных). Проще всего, конечно, запустить программу на выполнение и ждать, ждать... Но можно и по другому - рассуждать логически.
while n > 1
if n mod 2 = 0 then
n:=n/2
else
n:=3*n+3
Если n-нечетное, то мы доводим его до четного и умножаем на три. Очевидно "n+1" всегда будет четное, однако сколько бы раз не сокращалось n на 2, у нас всегда останется множитель 3, который и даст бесконечный цикл. Разумеется, лишь в том случае если условие "n mod 2 = 0" хотя бы раз не было выполнено.
Иными словами, для случаев "n>=3" цикл бесконечен.
2) пускай n = 2, тогда n mod 2 = 0 и n:=n/2 = 1, что позволит выйти из цикла
3) пускай n = 3, скорей всего - цикл бесконечный: 3 -> 12 -> 6 -> 3 -> 12 ...