Цикл while
Цикл while (“пока”) позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается до тела цикла и проверяется до выполнения тела цикла. Как правило, цикл while используется, когда невозможно определить точное значение количества проходов исполнения цикла.
i = 0
while i 5 :
print (i)
i += 1
Цикл while и цикл for имеют схожую структуру, НО есть одно важное различие — цикл while может быть бесконечным.
i = 0
while True :
print (i)
i += 1
# Вывод:
>>> 0
>>> 1
>>> 2
>>> 3
>>> 4
# Это может продолжаться долго.
Код выше будет бесконечно печатать возрастаютщую последовательность чисел.
Цикл while можно сравнить с цикличным условным оператором.
text = ‘Hello world’
i = 0
while i len (text):
print (text[i])
i += 1
Код, приведенный выше, печатает строку посимвольно. Приведу пример аналогичного цикла for:
text = ‘Hello world’
for i in text:
print (i)
Более того, я приведу даже два цикла for!
text = ‘Hello world’
for i in range ( len (text)):
print (text[i])
Напомню, что отличие между двумя, приведенными выше примерами, в следующем: первый цикл проходит по элементам последовательности (в нашем случае строки), а второй — по ее индексам. Здесь также используется функция len(), которая позволяет узнать длину последовательности.
Вернемся к циклу while. Цикл while, как и цикл for, можно остановить с помощью специальной управлющей конструкции break.
j = 0
while True :
if j == 3 :
print ( ‘Выход из цикла’ )
break
print (j)
j += 1
Конструкция break прерывает цикл. Она очень похожа на обычное условие после ключевого слова while.
Так же есть еще одна управляющая конструкция — continue. С ее помощью мы можем не выпонять текущую итерацию (повторение) цикла и перейти сразу к следующему.
j = 0
while j 5 :
j += 1
if j == 3 :
print ( ‘Пропускаем j == 3 ‘ )
continue
print (j)
Как и для цикла for, для цикла while мы можем записать конструкцию else.
from random import randint
j = 0
element = randint ( 0 , 15 )
while j 10 :
j += 1
if j == element:
print ( ‘Нашли element, он равен’ , element)
break
else :
print ( ‘Неудачная попытка’ )
Примеры решения задач
Возведение числа в степень с помощью цикла while
n = int ( input ()) # число
k = int ( input ()) # степень
i = 1 # текущая степень
result = 1
while i k:
result *= n
i += 1
print (result)
Сумма последовательности с помощью цикла while
n = int ( input ())
result = 0
i = 0
while i n:
result += i
i += 1
print (result)
Ввод последовательности чисел
i = 0
while True :
n = input ()
if n == ‘end’ :
print ( ‘Ввод закончен’ )
print ( ‘Было введено’ , i, ‘чисел’ )
break
n = int (n)
i += 1
Сумма введенных чисел
i = 0
summa = 0
while True :
n = input ()
if n == ‘end’ :
print ( ‘Ввод закончен’ )
print ( ‘Было введено’ , i, ‘чисел’ )
print ( ‘Их сумма равна’ , summa)
break
n = int (n)
summa += n
i += 1
Решение задач
1. Дано положительное число N. Вывести все числа от 0 до N с помощью цикла while.
2. Дано положительное число N. Вывести все числа от N до 0 с помощью цикла while. Пример:
3. Даны два положительных числа K и N (K 4. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти длину незанятой части отрезка A (взятие остатка A % B)
5. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти количество отрезков B, размещенных на отрезке A (деление нацело A // B)
6. Дано положительное число N. Найти сумму всех четных чисел от 0 до N с помощью цикла while.
7. Даны два положительных числа K и N (K нечетных чисел от K до N с помощью цикла while.
8. Дано положительное число N. Найти факториал числа N. Факториалом числа называется произведение всех чисел от 1 до N. Например, факториал числа 5 равен 5! = 1*2*3*4*5 = 120 , 2! = 1*2 = 2 , 9! = 1*2*3*4*5*6*7*8*9 = 362880
9. Дано целое число N (> 0). Если оно является степенью числа 3, то вывести YES, если не является — вывести NO.
10. Дано целое число N (> 0). Найти двойной факториал N: N!! = N * (N-2) * (N-4)* . . Для решения этой задачи посмотрите на задачу 2
Сложные задачи
1. Дано целое число N (> 1). Найти наименьшее целое число K, при котором выполняется неравенство 3^K > N, где 3^K — это 3 в степени K или число 3, умноженное само на себя K раз. Например, 3^5 = 3*3*3*3*3 . Ответом в задаче будет первая степень числа 3, которая больше, чем заданное число N. Например, если N=41, распишем степени числа три: 3^1 = 3; 3^2 = 3*3 = 9; 3^3 = 3*3*3 = 27; 3^4 = 3*3*3*3 = 27 * 3 = 81; . Таким образом, первая степень, в которую возвести число 3, превышающая число N — это 4.
В этой задаче нужно выполнять цикл while, пока остаток от деления на число три равен 0
2. Дано целое число N (> 0). Используя операции деления нацело и взятия остатка от деления, вывести все его цифры, начиная с самой правой (разряда единиц).
Перед решением этой задачи вспомните, как найти сумму цифр трехначного числа.
3. Даны целые положительные числа A и B. Найти их наибольший общий делитель (НОД), используя алгоритм Евклида: НОД(A, B) = НОД(B, A mod B), если B = 0; НОД(A, 0) = A.
4. Спортсмен-лыжник начал тренировки, пробежав в первый день 10 км. Каждый следующий день он увеличивал длину пробега на P процентов от пробега предыдущего дня (P — вещественное, 0 5. Дано целое число N (> 1). Последовательность чисел Фибоначчи FK определяется следующим образом: F(1) = 1, F(2) = 1, F(K) = F(K-2) + F(K-1), K = 3, 4, . . Проверить, является ли число N числом Фибоначчи. Если является, то вывести TRUE, если нет — вывести FALSE.
6. Даны положительные числа A, B, C. На прямоугольнике размера A x B размещено максимально возможное количество квадратов со стороной C (без наложений). Найти количество квадратов, размещенных на прямоугольнике. Операции умножения и деления не использовать.
7. Дано целое число N (> 1), являющееся числом Фибоначчи: N = F(K). Найти целое число K — порядковый номер числа Фибоначчи N.
Источник
С клавиатуры вводится число n если оно положительное то выведите
if (digit > maxDigit)
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 134.
2. Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
1. В maxDigit изначально запишется 4. При работе программы будет найдена одна цифра, которая делится на 3 — это 3. Но так как она меньше 4, то ответ обновлён не будет и результатом работы программы будет 4.
2. 333. Изначально в maxDigit запишется 3. Чисел, делящихся на 3 и больших, чем 3, нет, поэтому ответ не обновится ни разу за время работы программы и результатом будет 3.
Для языка Pascal:
Неверная инициализация переменной maxDigit:
maxDigit := N mod 10;
Следует проинициализировать её числом, меньшим нуля, например, -1, что будет означать, что пока в числе не найдена цифра, которая делится на 3:
0 может быть ответом, поэтому ошибка в строчках:
if maxDigit = 0 then
И так как мы условились изначально проинициализировать maxDigit как -1, то именно это значение и стоит использовать для обнаружения отсутствия ответа:
if maxDigit = -1 then
Неверная инициализация переменной maxDigit:
maxDigit = N % 10;
Следует проинициализировать её числом, меньшим нуля, например, -1, что будет означать, что пока в числе не найдена цифра, которая делится на 3:
0 может быть ответом, поэтому ошибка в строчках:
cout Источник: ЕГЭ 05.05.2015. Досрочная волна., ЕГЭ по информатике 13.06.2019. Основная волна, Восток. Вариант Имаева-Зубовой — «Котолис».
Источник
Занятие 7. Циклы в Java
Цикл — это многократно повторяющийся фрагмент программы.
В java существует два типа циклов: типа «пока» и типа «n-раз».
Первый тип «пока» предназначен для повторения какого-то действия до тех пор, пока выполняется некоторое условие. Пример: увеличивать число на 5 до тех пор, пока оно не станет трёхзначным.
Второй тип «n-раз» предназначен для повторения каких-то действий заранее известное количество раз. Пример: умножить число само на себя 4 раза.
Цикл типа «пока» (операторы while и do…while)
Оператор while повторяет указанные действия до тех пор, пока его параметр имеет истинное значение.
Например, такой цикл выполнится 4 раза, а на экран будет выведено «1 2 3 4 »:
Такой цикл не выполнится ни разу и на экран ничего не выведется:
Такой цикл будет выполняться бесконечно, а на экран выведется «1 2 3 4 5 6 7 …»:
Условие, определяющее будет ли цикл повторятся снова, проверяется перед каждым шагом цикла, в том числе перед самым первым. Говорят, что происходит предпроверка условия.
Бывает цикл типа «пока» с постпроверкой условия. Для его записи используется конструкция из операторов do…while.
Такой цикл выполнится 4 раза, а на экран будет выведено «2 3 4 5 »:
Такой цикл выполнится 1 раз, а на экран будет выведено «2 »:
Тело цикла do…while выполняется по крайней мере один раз. Этот оператор удобно использовать, когда некоторое действие в программе нужно выполнить по крайней мере единожды, но при некоторых условиях придётся повторять его многократно.
Ознакомьтесь со следующей программой (она загадывает случайное целое число из отрезка [1;10] и просит пользователя его угадать, вводя варианты с клавиатуры, пока пользователь не угадает число, программа будет ему подсказывать, сообщая больше или меньше число загаданное, чем то, что ввёл пользователь):
Внесите в программу следующие доработки:
Программа должна считать количество попыток, которое потребовалось пользователю, чтобы угадать число. И в конце сообщать, сколько было попыток.
Программа должна загадывать число не из отрезка [1;10], а целое число из отрезка от [−10;10], исключая ноль. При этом, постарайтесь, чтобы распределение случайных чисел генерируемых программой было равномерных (т. е. в случае выпадения нуля его нельзя просто заменить на какое-то другое число, например, на 1, ведь тогда 1 будет выпадать с вдвое большей вероятностью, чем остальные числа).
Программа должна подсказывать пользователю, что он ошибся в знаке, если программа загадала положительное число, а пользователь ввёл отрицательное. И наоборот.
Цикл типа «n-раз» (оператор for)
Оператор for содержит три параметра. Первый называется инициализацией, второй — условием повторения, третий — итерацией.
В первом параметре обычно выбирают какую-то переменную, с помощью которой будет подсчитываться количество повторений цикла. Её называют счетчиком. Счётчику задают некоторое начальное значение (указывают, начиная с какого значения он будет изменяться).
Во втором параметре указывают некоторое ограничение на счётчик (указывают, до какого значения он будет изменяться).
В третьем параметре указывают выражение, изменяющее счётчик после каждого шага цикла. Обычно это инкремент или декремент, но можно использовать любое выражение, где счётчику будет присваиваться некоторое новое значение.
Перед первым шагом цикла счётчику присваивается начальное значение (выполняется инициализация). Это происходит лишь однажды.
Перед каждым шагом цикла (но после инициализации) проверяется условие повторения, если оно истинно, то в очередной раз выполняется тело цикла. При этом, тело цикла может не выполниться ни разу, если условие будет ложным в момент первой же проверки.
После завершения каждого шага цикла и перед началом следующего (и, значит, перед проверкой условия повторения) выполняется итерация.
Представленная программа выводит на экран числа от 1 до 100:
Представленная программа выводит на экран числа от 10 до −10:
Представленная программа выводит на экран нечётные числа от 1 до 33:
Представленная программа вычислит сумму элемнтов фрагмента последовательности 2, 4, 6, 8,… 98, 100. Итак:
Представленная программа будет возводить число из переменной a в натуральную степень из переменной n:
Представленная программа выведет на экран 10 первых элементов последовательности 2n+2, где n=1, 2, 3…:
Представленная программа выведет на экран 10 первых элементов последовательности 2an−1+3, где a1=3:
В одном цикле можно задавать сразу несколько счётчиков. При этом несколько выражений в итерации и в инициализации разделяются запятыми. Условие повторения можно задавать только одно, но оно может быть выражением, содержащим сразу несколько счётчиков.
Представленная программа выведет на экран 10 первых элементов последовательности 2an−1–2, где a1=3:
Представленная программа выведет на экран такую последовательность «0 -1 -4 -9 -16 -25»:
Досрочное завершение цикла (оператор break)
Как цикл типа «пока» так и цикл типа «n-раз» можно завершить досрочно, если внутри тела цикла вызвать оператор break. При этом произойдёт моментальный выход из цикла, не будет закончен даже текущий шаг (т. е. если после break присутствовали какие-то ещё операторы, то они не выполнятся).
В результате работы следующего примера на экран будут выведены только числа «1 2 3 4 Конец»:
Когда программа будет выполнять цикл в пятый раз(войдёт в цикл с счётчиком равным 5), сразу же будет проверено и окажется истинным условие при котором выполнится оператор break. Оставшаяся часть тела цикла (вывод на экран) уже производится не будет: программа сразу перейдёт к выполнению операций указанных после цикла и далее.
C помощью оператор break можно прервать заведомо бесконечный цикл. Пример (на экран выведется «100 50 25 12 6 3 1 0 » и после этого цикл остановится):
Оператор break имеет смысл вызывать только при наступлении какого-то условия, иначе цикл будет завершен досрочно на первом же своём шаге.
В представленном выше примере вывода в цикле на экран не произойдёт ни разу, а когда переменная a выведется на экран после цикла, то окажется, что её значение ни разу не менялось, т. е. выведено будет «a=25» (и ничего больше).
Обратите внимание также на то, что переменная была объявлена до начала цикла. Когда переменная объявляется в параметрах цикла, то она оказывается недоступной за его приделами, а в данном случае требовалось иное — узнать какое значение будет у счётчика после завершенияцикла.
Задачи
Создайте программу, выводящую на экран все четырёхзначные числа последовательности 1000 1003 1006 1009 1012 1015 ….
Создайте программу, выводящую на экран первые 55 элементов последовательности 1 3 5 7 9 11 13 15 17 ….
Создайте программу, выводящую на экран все неотрицательные элементы последовательности 90 85 80 75 70 65 60 ….
Создайте программу, выводящую на экран первые 20 элементов последовательности 2 4 8 16 32 64 128 ….
Выведите на экран все члены последовательности 2an-1–1, где a1=2, которые меньше 10000.
Выведите на экран все двузначные члены последовательности 2an-1+200, где a1= –166.
Создайте программу, вычисляющую факториал натурального числа n, которое пользователь введёт с клавиатуры.
Выведите на экран все положительные делители натурального числа, введённого пользователем с клавиатуры.
Проверьте, является ли введённое пользователем с клавиатуры натуральное число — простым. Постарайтесь не выполнять лишних действий (например, после того, как вы нашли хотя бы один нетривиальный делитель уже ясно, что число составное и проверку продолжать не нужно). Также учтите, что наименьший делитель натурального числа n, если он вообще имеется, обязательно располагается в отрезке [2; √n].
Создайте программу, выводящую на экран 12 первых элементов последовательности 2an-2–2, где a1=3 и a2=2.
Выведите на экран первые 11 членов последовательности Фибоначчи. Напоминаем, что первый и второй члены последовательности равны единицам, а каждый следующий — сумме двух предыдущих.
Для введённого пользователем с клавиатуры натурального числа посчитайте сумму всех его цифр (заранее не известно сколько цифр будет в числе).
В городе N проезд в трамвае осуществляется по бумажным отрывным билетам. Каждую неделю трамвайное депо заказывает в местной типографии рулон билетов с номерами от 000001 до 999999. «Счастливым» считается билетик у которого сумма первых трёх цифр номера равна сумме последних трёх цифр, как, например, в билетах с номерами 003102 или 567576. Трамвайное депо решило подарить сувенир обладателю каждого счастливого билета и теперь раздумывает, как много сувениров потребуется. С помощью программы подсчитайте сколько счастливых билетов в одном рулоне?
В городе N есть большой склад на котором существует 50000 различных полок. Для удобства работников руководство склада решило заказать для каждой полки табличку с номером от 00001 до 50000 в местной типографии, но когда таблички напечатали, оказалось что печатный станок из-за неисправности не печатал цифру 2, поэтому все таблички, в номерах которых содержалась одна или более двойка (например, 00002 или 20202) — надо перепечатывать. Напишите программу, которая подсчитает сколько всего таких ошибочных табличек оказалось в бракованной партии.
Электронные часы показывают время в формате от 00:00 до 23:59. Подсчитать сколько раз за сутки случается так, что слева от двоеточия показывается симметричная комбинация для той, что справа от двоеточия (например, 02:20, 11:11 или 15:51).
В американской армии считается несчастливым число 13, а в японской — 4. Перед международными учениями штаб российской армии решил исключить номера боевой техники, содержащие числа 4 или 13 (например, 40123, 13313, 12345 или 13040), чтобы не смущать иностранных коллег. Если в распоряжении армии имеется 100 тыс. единиц боевой техники и каждая боевая машина имеет номер от 00001 до 99999, то сколько всего номеров придётся исключить?
Источник