В заголовке этого цикла задаются начальное и конечное значения этой переменной, а шаг её изменения по умолчанию равен 1: n: =2 нц для к от 1 до 10 вывод n, нc n:=n*2 кц n: =2; for к:=1 tо 10 dо begin writeln(n); n:=n*2; еnd; Здесь, в отличие от цикла «пока», переменная цикла может быть только целой. С каждым шагом цикла переменная цикла может не только увеличиваться, но и уменьшаться на 1. Для этого в школьном алгоритмическом языке добавляется параметр шаг, а в Паскале ключевое слово tо заменяется на downtо («движение вниз до»). Следующая программа выводит квадраты натуральных чисел от 10 до 1 в порядке убывания: нц для к от 10 до 1 шаг -1 вывод к*к, нс кц for k:=10 downto 1 dо writeln(k*k); В школьном алгоритмическом языке шаг изменения переменной цикла может быть любым целым числом, а в Паскале — только 1 или (-1). Вложенные циклы В более сложных задачах часто бывает так, что на каждом шаге цикла нужно выполнять обработку данных, которая также представляет собой циклический алгоритм. В этом случае получается конструкция «цикл в цикле» или вложенный цикл. Предположим, что нужно найти все простые числа в диапазоне от 2 до 1000. Простейший (но не самый быстрый) алгоритм решения такой задачи на псевдокоде выглядит так: нц для n от 2 до 1000 если число n простое то вывод n, нc все кц Как же определить, что число простое? Как известно, простое число делится только на 1 и само на себя. Если число п не имеет делителей в диапазоне от 2 до л-1, то оно простое, а если хотя бы один делитель в этом интервале найден, то составное. Чтобы проверить делимость числа на некоторое число к, нужно взять остаток от деления n на k. Если этот остаток равен нулю, то n делится на k. Таким образом, программу можно записать так (здесь n, k и соunt — целочисленные переменные, соunt обозначает счётчик делителей): Попробуем немного ускорить работу программы. Делители числа обязательно идут в парах, причём в любой паре меньший из делителей не превосходит √n (так как произведение двух делителей, каждый из которых больше , √n будет больше, чем n). Поэтому внутренний цикл можно выполнять только до значения √n вместо n-1. Для того чтобы работать только с целыми числами (и таким образом избежать вычислительных ошибок), лучше заменить условие к n на равносильное ему условие к2 n. При этом потребуется перейти к внутреннему циклу с условием: Чтобы ещё ускорить работу цикла, заметим, что когда найден хотя бы один делитель, число уже заведомо составное, и искать другие делители в данной задаче не требуется. Поэтому можно закончить цикл. Для этого в условие работы цикла добавляется условие соunt = 0, связанное с имеющимся условием с помощью операции «И»: В любом вложенном цикле переменная внутреннего цикла изменяется быстрее, чем переменная внешнего цикла. Рассмотрим например, такой вложенный цикл: На первом шаге (при i =1) переменная k принимает единственное значение 1. Далее, при i = 2 переменная к принимает последовательно значения 1 и 2. На следующем шаге при 1 - 3 переменная k проходит значения 1, 2 и 3. |