[МУЗЫКА] В качестве примера использования цикла со счётчиком, а также конструкции выбора, рассмотрим задачу вычисления чисел Фибоначчи. Числа Фибоначчи — это числовая последовательность, которая выражается следующей формулой: первые два числа Фибоначчи — это 1, а каждое следующее число Фибоначчи, начиная с третьего, вычисляется как сумма двух предыдущих. Если мы с вами хотим вычислять числа Фибоначчи, то нам совершенно не нужно хранить всю последовательность. Забегая вперёд, массив для хранения этой последовательности нам не понадобится. Дело в том, что для того чтобы вычислить очередное число, нам нужно знать только два предшествующих. Тогда введём следующие обозначения: f1 и f2 у нас будут два предыдущих числа Фибоначчи, а f3 будет числом, которое у нас вычислено на текущем шаге. Изобразим схематически, как происходит вычисление чисел на нескольких первых шагах. Итак, F1 и F2 вначале равны 1, вычисляем F3, это будет сумма двух единиц, то есть 2. Для следующего шага нам нужны 1 и 2 (два последних числа), а предыдущее нам не нужно. Тогда перенесём 1 в F1, а 2 — в F2. Затем вычислим сумму этих чисел и получим следующее число Фибоначчи – это будет 3. На следующем шаге нам нужны 2 и 3. Переносим их в соответствующие ячейки и вычисляем опять сумму двух этих чисел. Очередное число равно 5 и так далее. Процесс можно продолжать до того момента, пока мы не достигнем заданного количества чисел. Рассмотрим, как данный алгоритм будет реализован в виде программы. Программу я называю Fibonachi, по фамилии создателя этого ряда, затем я объявляю переменные. У меня три переменных: f1, f2 и f3 — это два предыдущих числа Фибоначчи и текущее. Затем у меня есть n – количество чисел, которые я буду считать. И это у меня номер текущего числа. Теперь я начинаю спрашивать исходные данные. Первым делом сообщаю пользователю, какую задачу мы будем решать — мы будем вычислять числа Фибоначчи — затем запрашиваю количество чисел. По формуле количество чисел Фибоначчи должно быть натуральным числом, то есть целым и положительным. Значит, после того, как пользователь ввёл данные, мы должны проверить, правильные ли эти данные. Если данные — неправильные, то есть n ≤ 0, мы выводим сообщение о том, что наши данные неверны, и последовательность посчитать нам не удастся. Если же у нас правильные исходные данные, то мы начинаем наши вычисления с того, что даём начальные значения переменным f1 и f2. Это называется инициализация — придание начальных значений. Инициализируем f1 и f2, каждый из них инициализируем единицей. Затем мы должны начинать решать задачу. Здесь есть три случая. Первый случай — это когда у нас количество чисел Фибоначчи равно 1. В этом случае мы должны вывести только первое число. Если наше количество чисел равно 1, то мы выводим только одну 1. Если же у нас количество чисел равно 2, то мы тогда выводим две 1 (первый член ряда и второй) и больше ничего не делаем. Третий случай — это когда у нас есть цикл, который считает оставшиеся числа Фибоначчи, кроме первого и второго. В этом случае мы сначала выводим на экран первые два члена ряда, а затем начинаем цикл, который будет считать все остальные элементы. Цикл наш начинается от 3, потому что первые два значения у нас уже посчитаны и выведены, и на каждом шаге цикла мы производим следующие действия. Сначала мы вычисляем очередной член ряда Фибоначчи, как сумму двух предыдущих. Для следующего шага нам с вами будет нужно хранить два последних значения. В переменную f1 мы переносим значения из f2, а в переменную f2 переносим значения из f3, то есть для следующего шага у нас будут использоваться два последних числа. После этого мы выводим наш полученный очередной член ряда и начинаем закрывать все наши конструкции. Первым делом мы должны завершить наш цикл for. В виде исключения я написала комментарий, где какая конструкция завершается. Обычно мы этого делать не будем, но в этом примере для наглядности давайте это точно откомментируем. Итак, первым закрывается цикл for, первый end. Затем у нас следующий end закрывает собой последний else, который показывал, что у нас есть цикл, который считает наши с вами числа. Затем у нас следует следующий end для конструкции выбора case, потом нам нужно закрыть end тот begin, который проверял, верные ли у нас данные. То есть этот end у нас – для первого else. И, наконец, у нас end., который завершает самый первый begin, то есть это конец программы. Рассмотрим, как работает программа для вычисления чисел Фибоначчи. Напомню, что у нас с вами есть три переменных для хранения чисел Фибоначчи: это f1 и f2 — два предыдущих члена ряда, и f3 — это текущий член ряда. Запустим нашу программу и введём количество чисел, допустим, равное 1. В этом случае у нас одно число Фибоначчи, и оно равно 1. Если мы попробуем ввести 2, то тогда в нашей программе работает случай, когда n = 2, и выводится на экран только первые два числа. Если мы возьмём большее количество чисел, допустим, 8, то первые два числа выводятся отдельно, потому что там использовался оператор writeln, то есть после вывода двух первых чисел произошёл переход 1 на следующую строку, и затем выводятся остальные числа Фибоначчи. Общее количество полученных чисел будет равно 8. Попробуем увеличить количество чисел, допустим, до 20. Вот перед нами 20 чисел Фибоначчи. Мы видим, что, когда чисел становится много, не очень удобно работать с ними, потому что у нас каждое число располагается на отдельной строке. Поэтому я заменю все операторы writeln на операторы write, чтобы наши числа все выводились не каждое на отдельной строке, а в одной строке. Итак, если я теперь заново запущу программу и скажу, что количество чисел Фибоначчи у меня по-прежнему равно 20, то числа будут выведены в строку. Один оператор writeln, который выводил первые два числа, я тоже превращу в оператор write, и теперь я попробую ещё увеличить количество чисел. Допустим, пусть их будет 40. И мы с вами видим, что в данном случае формат 6, который я использую для вывода чисел на экран, уже недостаточен. Начиная с некоторого числа, у нас с вами в числах больше, чем 6 цифр. Попробую изменить формат. Допустим, скажу, что формат у меня будет не 6 позиций под число, а 12. Запущу программу ещё раз и скажу, что у меня 20 чисел Фибоначчи. Теперь мы видим, что все числа в этом формате помещаются и разделяются соответствующим числом пробелов. Ещё увеличу количество. Допустим, их будет 40. Мы с вами видим, что у нас последнее вычисленное число не вышло за границы целого типа. Попробуем сделать ещё больше — тоже результат верный. И ещё попробуем увеличить количество чисел на 1. Возьмём их 46. Мы с вами видим, что пока результат тоже правильный. Но если я возьму 47 чисел, то мы видим, что последнее число получилось отрицательным. Почему же у нас получился такой результат? Дело в том, что, когда мы с вами пытаемся вычислить число Фибоначчи с номером 47, сумма двух последних чисел превышает максимально возможное значение целого типа в данной реализации языка Pascal. Поэтому происходит так называемое переполнение, переход через 0, и наши результаты становятся неправильными. То есть максимально возможное количество чисел Фибоначчи, которое мы здесь можем посчитать, это 46 чисел. [МУЗЫКА] [МУЗЫКА]