Цикл for Очень часто возникает необходимость выполнить одну и ту же последовательность действий несколько раз: например, для вычисления выражения an необходимо выполнить n-1 раз умножение на величину a. Для этого используются циклы. В данном листочке речь пойдет о цикле for, который, как правило, используется для повторения определенной последовательности действий заданное количество раз. Рассмотрим задачу вычисления суммы всех натуральных чисел от 1 до n. Для этого заведем переменную Sum и к ней будем прибавлять значение переменной i, где i будет принимать все значения от 1 до n. На языке C++ это можно сделать при помощи цикла for следующим образом: int n, Sum, i; cin >> n; Sum = 0; for(i = 1; i <= n; ++i) { Sum = Sum + i; } cout << Sum << endl; В этом примере последовательность инструкций в блоке, то есть инструкция s = s + i будет выполнена многократно для всех значений переменной i от 1 до n, то есть в результате переменная s будет равна сумме всех натуральных чисел от 1 до n. При использовании цикла for необходимо задать три выражения-параметра (в круглых скобках через точку с запятой). Первый параметр – начальное значение переменной, задается в виде присваивания переменной значения, в нашем случае – i = 1. Более формально — первый параметр содержит произвольное выражение, которое вычисляется один до выполнения тела цикла, и как правило первый параметр используется для инициализации переменной цикла. Первый параметр может отсутствовать, тогда вместо него ничего не пишется, а просто ставится точка с запятой. Второй параметр – конечное значение переменной, задается в виде условия на значение переменной, в нашем случае условие i <= n означает, что переменная i будет принимать значения до n включительно. Более формально — второй параметр содержит произвольное выражение. Цикл будет исполняться, пока значение второго параметра истинно (или ненулевое, если это — целочисленное выражение). Третий параметр – шаг изменения переменной. Запись ++i равнозначна записи i = i + 1 и означает, что переменная i будет увеличиваться на 1 с каждым новым исполнением цикла, запись --i равнозначна записи i = i - 1 и означает, что переменная i будет уменьшатся на 1. Более формально, третий параметр — это произвольное выражение, которые вычисляется после выполнения тела цикла, но до проверки условия его окончания. Как правило, в третьем параметре изменяется значение переменной, записанной в первых двух параметрах. Если хочется, чтобы значение переменной в цикле менялось не на 1, а на большую величину, то это можно сделать, например, так: i = i + 2 или i = i - 3. В нашем примере мы могли бы сделать цикл, в котором переменная i принимала бы все значения от n до 1, уменьшаясь при этом: for(i = n; i > 0; --i). Упражнения A: Ряд чисел Даны два целых числа A и B (при этом A≤B). Выведите все числа от A до B включительно. B: Обратный ряд чисел Даны два целых числа A и B (при этом A≤B). Выведите все числа от B до A включительно. C: Сумма квадратов По данному натуральном n вычислите сумму 12+22+...+n2. D: Факториал По данному целому неотрицательному n вычислите значение n!. E: Число сочетаний По данным целым неотрицательным n и k вычислите значение числа сочетаний из n элементов по k, то есть n!/(k!(n-k)!). F: Степень двойки По данному целому неотрицательному n вычислите значение 2n. G: Пингвины Напишите программу, которая по данному числу n от 1 до 9 выводит на экран n пингвинов. Изображение одного пингвина имеет размер 5×9 символов, между двумя соседними пингвинами также имеется пустой (из пробелов) столбец. Разрешается вывести пустой столбец после последнего пингвина. Для упрощения рисования скопируйте пингвина из примера в среду разработки. Учтите, что вывод данных на экран производится построчно, а не попингвинно. Символ обратного слэша “\” в текстовых строках имеет специальное значение. Чтобы включить в состав текстовой строки такой символ, его нужно повторить дважды. Например, для вывода на экран одного такого символа можно использовать такой код: cout << "\\";. Пример Вв од Вывод 3 _~_ _~_ _~_ (o o) (o o) (o o) / V \ / V \ / V \ /( _ )\ /( _ )\ /( _ )\ ^^ ^^ ^^ ^^ ^^ ^^ 1 _~_ (o o) / V \ /( _ )\ ^^ ^^ H: Флаги Напишите программу, которая по данному числу n от 1 до 9 выводит на экран n флагов. Изображение одного флага имеет размер 4×4 символов, между двумя соседними флагами также имеется пустой (из пробелов) столбец. Разрешается вывести пустой столбец после последнего флага. Внутри каждого флага должен быть записан его номер — число от 1 до n. Пример Вв од Вывод 3 +___ |1 / |__\ | 1 +___ |1 / |__\ | +___ |2 / |__\ | +___ |3 / |__\ | I: Сумма произведений соседних чисел По данному натуральному n≥2 вычислите сумму 1×2+2×3+...+(n-1)×n. Ответ выведите в виде вычисленного выражение и его значения в точности, как показано в примере. Пример Вв од Вывод 4 1*2+2*3+3*4=20 2 1*2=2 J: Четные числа По данным двум натуральным числам A и B выведите все чётные числа на отрезке от A до B. В этой задаче нельзя использовать инструкцию if, переменная в цикле должна увеличиваться с шагом 2. Пример Вв Вывод од 1 10 2 4 6 8 10 K: Сумма десяти чисел Дано 10 целых чисел. Вычислите их сумму. Какое наименьшее число переменных нужно для решения этой задачи? Пример Ввод Выв од 0 1 2 3 4 5 6 7 8 9 45 L: Сумма N чисел Дано несколько чисел. Вычислите их сумму. Сначала вводите количество чисел N, затем вводится ровно N целых чисел. Какое наименьшее число переменных нужно для решения этой задачи? Пример Ввод Выв од 3 321 1 20 300 M: Количество нулей Дано N чисел: сначала вводится число N, затем вводится ровно N целых чисел. Подсчитайте количество нулей среди введенных чисел и выведите это количество. Пример Ввод Выв од 5 2 0 7 0 2 2 N: Диофантово уравнение - 1 Даны числа a, b, c, d. Выведите в порядке возрастания все целые числа от 0 до 1000, которые являются корнями уравнения ax3+bx2+cx+d=0. Пример Ввод Выв од -1 1 -1 1 1 1 1 1 1 O: Диофантово уравнение - 2 Даны числа a, b, c, d, e. Подсчитайте количество таких целых чисел от 0 до 1000, которые являются корнями уравнения (ax3+bx2+cx+d)/(x-e)=0, и выведите их количество. Пример Ввод Выв од 1 -2 1 0 1 1 1 1 1 1 1 0 P: Замечательные числа - 1 Найдите и выведите все двузначные числа, которые равны удвоенному произведению своих цифр. Программа не требует ввода данных с клавиатуры, просто выводит список искомых чисел. Q: Замечательные числа - 2 Квадрат трехзначного числа оканчивается тремя цифрами, равными этому числу. Найдите и выведите все такие числа. Программа не требует ввода данных с клавиатуры, просто выводит список искомых чисел. R: Замечательные числа - 3 Дано натуральное число n. Выведите в порядке возрастания все трехзначные числа, сумма цифр которых равна n. Пример Вв Выв од од 3 102 111 120 201 210 300 S: Лесенка По данному n выведите изображение лесенки, содержащей n ступенек. Пример Вв Выв од од 3 * ** *** T: Волейбольная сетка По данным числам n и m выведите изображение волейбольной сетки, содержащей n ячеек по вертикали и m ячеек по горизонтали. В узлах сетки стоят знаки “+”, по вертикали они соединены одним знаком “|”, а по горизонтали — двумя знаками “-”. Пример Вв Вывод од 2 3 +--+--+--+ | | | | +--+--+--+ | | | | +--+--+--+ 1 1 +--+ | | +--+ U: Замечательные числа - 4 Даны два четырёхзначных числа A и B. Выведите все четырёхзначные числа в интервале от A до B, запись которых является палиндромом. Пример Вв Выв од од 1600 1661 2100 1771 1881 1991 2002 V: Замечательные числа - 5 Даны два четырёхзначных числа A и B. Выведите в порядке возрастания все четырёхзначные числа в интервале от A до B, запись которых содержит ровно три одинаковые цифры. Пример Вв Выв од од 1900 1911 2100 1999 2000 2022 W: Остатки Даны целые неотрицательные числа a, b, c, d, при этом 0≤c<d. Выведите в порядке возрастания все числа от a до b, которые дают остаток c при делении на d. В этой задаче нельзя использовать инструкцию if. Пример Вво Выв д од 1 4 1 2 1 3 1 5 0 4 4 X: Сумма факториалов По данному натуральном n вычислите сумму 1!+2!+3!+...+n!. В решении этой задачи можно использовать только один цикл. Y: Треугольная последовательность Дана монотонная последовательность, в которой каждое натуральное число k встречается ровно k раз: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, ... По данному натуральному n выведите первые n членов этой последовательности. Попробуйте обойтись только одним циклом for. Пример Вв Вывод од 2 1 2 5 1 2 2 3 3 Z: Потерянная карточка Для настольной игры используются карточки с номерами от 1 до N. Одна карточка потерялась. Найдите ее, зная номера оставшихся карточек. Дано число N, далее N-1 номер оставшихся карточек (различные числа от 1 до N). Программа должна вывести номер потерянной карточки. Для самых умных – массивами и аналогичными структурами данных пользоваться нельзя. Пример Вво Выв д од 5 5 1 2 3 4 4 3 2 4 1