
- •Лекции по Turbo Pascal 7.0
- •1 Курс, «Информатика»
- •Интегрированная среда Turbo Pascal 7.0
- •Первый шаг
- •Создание нового файла
- •Набор и редактирование текста программы
- •Клавиши перемещения курсора
- •Клавиши для редактирования текста:
- •Сохранение и открытие программ
- •Запуск программы
- •Завершение работы
- •А теперь, когда вы уже знаете, как набирать и запускать программы на компьютере, начнём изучать язык паскаль.
- •Первая программа
- •Краткая история
- •Что такое программа?
- •Зарезервированные слова
- •Переменные
- •Константы
- •Стандартные математические операции
- •В информатике, как и в математике, на ноль делить нельзя!
- •Оператор присваивания
- •Пример программы
- •Операторы ввода и вывода.
- •Оператор ввода Readln
- •Оператор вывода Write
- •Самостоятельные задания
- •Работа с цифрами
- •Выделение цифр числа
- •Конструирование числа по его цифрам
- •Обобщение
- •Самостоятельные задания
- •Условный оператор
- •Что такое условие?
- •Укороченный вариант условного оператора
- •Составной оператор
- •Составные условия
- •“Защита от дурака”
- •Вложенные условные операторы
- •Оператор выбора Case
- •Самостоятельные задания
- •Стандартные типы переменных
- •Общий обзор стандартных типов.
- •Целые типы
- •Вещественные типы
- •Способ записи вещественных чисел
- •Вывод на экран вещественных чисел
- •Точность и диапазон вещественных чисел различных типов
- •Вещественные функции
- •Линейная запись математических выражений
- •Логический тип
- •Символьные типы
- •Стандартные функции для работы со строками
- •Стандартные функции для типа char
- •Подпрограммы
- •Зачем нужны подпрограммы?
- •Процедуры
- •Аргументы процедуры
- •Результаты процедуры
- •Функции
- •Самостоятельные задания
- •Цикл For
- •Руками не трогать!
- •Нахождение суммы
- •Нахождение произведения
- •Нахождение количества
- •Цикл While ... Do
- •Цикл Repeat ... Until
- •2.7. Самостоятельные задания
- •Цикл в цикле
- •Натуральные числа
- •Делители чисел
- •Самостоятельные задания.
- •Простые числа
- •Самостоятельные задания.
- •Наибольший общий делитель двух чисел.
- •Самостоятельные задания.
- •Наименьшее общее кратное двух чисел
- •Самостоятельные задания.
- •Массивы
- •Определение и примеры
- •Операции с элементами массива
- •Анализ информации в массиве
- •Рекуррентные соотношения
- •Самостоятельное задание
- •Последовательность Фибоначчи
- •Другие рекуррентные последовательности
- •Оптимизация программ
- •Задача про интеллигентного студента.
- •Самостоятельные задания
- •Оформление программ
- •Понятие модуля
- •Управление цветом
- •Управление звуком
- •Опрос клавиатуры
- •Управление курсором.
- •Дополнительные задачи и вопросы
- •Теоретические вопросы
- •Практические задачи
- •Условия
- •Ряды и рекуррентные последовательности
- •Просмотр всех команд меню
- •Команды меню File
- •Команды меню Edit
- •Команды меню Search
- •Команды меню Run
- •Команды меню Compile
- •Команды меню Debug
- •Команды меню Options
- •Команды меню Window
- •Команды меню Help
- •Синтаксические ошибки
- •Ошибки выполнения
- •Логические ошибки
- •Средства отладки
- •Пошаговый режим работы программы
- •Просмотр/изменение переменных
- •Окно Watch
- •1. Теоретическая часть
- •1.1. Понятие алгоритма и его свойства.
- •1.2. Культура программирования
- •1.3. Устройство компьютера и его компоненты.
- •1.4. Информация
- •1.5. Логика
- •1.6. Системы счисления
- •1.7. Арифметические действия с двоичными числами
- •1.8. Информационные взаимодействия – коммуникации
- •1.9. Информационная революция
- •1.10. Компьютеры и информационное общество.
- •1.11. Польза и опасности компьютеризации.
- •1.12. Киберфобия.
- •1.13. Компьютеры и будущее
- •1.14. Понятие информационного моделирования.
- •2. Толковый словарик
-
Рекуррентные соотношения
-
Самостоятельное задание
Найдите закономерность и продолжите следующие последовательности:
-
2 4 6 8 ...
-
7 10 13 16 ...
-
2 4 8 16 ...
-
1 3 9 27 ...
-
1 1 2 3 5 8 13 ...
-
Последовательность Фибоначчи
Последняя последовательность из самостоятельного задания называется последовательностью Фибоначчи. Эта последовательность начинается с двух единиц и каждый последующей её элемент равен сумме двух предыдущих. Поэтому следующий её элемент будет 8+13=21.
Найдем ещё несколько элементов этой последовательности:
1 1 2 3 5 8 13 21 34 55 89 144 233
Отличительной особенностью этой последовательности является то, что для вычисления нового члена необходимо использовать значения двух предыдущих. На языке математики это можно записать так:
a1 = 1
a2 = 1
ai = ai-2 + ai-1 , где i > 2.
По этой схеме можно найти любой элемент последовательности Фибоначчи, если известны значения предыдущих элементов, например:
a5 = a4 + a3 = 2 + 3 = 5
Попробуем составить программу, которая найдет первые 10 членов последовательности Фибоначчи. Так как для нахождения любого элемента, начиная с третьего, надо знать значения двух предыдущих элементов, то в этой программе удобно все элементы последовательности хранить в массиве. Так как нам надо найти 10 элементов, то массив будет состоять из 10 целых чисел.
Программа будет такой:
Program Fibonacci;
Var a : array [1..10] of integer;
i : integer;
Begin
a[1] := 1; { Первые два элемента заданы сразу }
a[2] := 1;
For i := 3 to 10 do {Ищем с 3 эл-та, так как первые два уже найдены}
a[i] := a[i-2] + a[i-1];
writeln (’Последовательность Фибоначчи: ’);
For i := 1 to 10 do { Печатаем на экран }
writeln (a[i]);
end.
Итак, уже, думаю, у вас сформировалось вполне конкретное определение рекуррентной последовательности:
Рекуррентной последовательностью называется такая последовательность, в которой новые элементы вычисляются через значения предыдущих. Рекуррентная последовательность задаётся рекуррентным соотношением.
Рекуррентное соотношение – это формула, в которой каждый элемент последовательности (начиная с некоторого) выражен через один или несколько предыдущих.
-
Другие рекуррентные последовательности
Рассмотрим несколько различных задач на закрепление новой темы.
Дана последовательность, которая задана таким рекуррентным соотношением:
a1 = 1
a2 = 1
a3 = 1
an = an–3 + an–2 + an–1 , где n > 3
Найти первые m её членов, m < 100 (вводится с клавиатуры).
Программа, реализующая это задание, будет только немного отличаться от программы поиска чисел Фибоначчи:
Program Rekurrent;
Var a : array [1..99] of integer;
m, i : integer;
Begin
Write (’Введите число m: ’);
Readln (m); { ввод начальных данных }
a[1] := 1; { Первые три элемента заданы сразу }
a[2] := 1;
a[3] := 1;
For i := 4 to m do {Ищем с 4 эл-та, так как первые три знаем }
a[i] := a[i-3] + a[i-2] + a[i-1];
writeln (’Первые m элементов последовательности: ’);
For i := 1 to m do { Печатаем на экран }
write(a[i], ’ ’);{числа будут печататься в строчку через пробел}
writeln; { в конце надо перейти на новую строку }
end.
Теперь рассмотрим другое, немного более сложное задание.
Задана рекуррентная последовательность:
a1 = 3
a2 = 2
a3 = 5
an = an–3 + 2an–1, где n > 3
Вывести на экран все элементы этой последовательности, меньшие числа k, где k вводится с клавиатуры.
Если раньше мы искали вполне конкретное число элементов, то теперь нам нужно будет искать элементы до тех пор, пока один из них не превысит заданное число k (для строгости надо заметить, что это верно лишь для возрастающей последовательности, то есть когда каждый последующий её элемент больше любого предшествующего, а данная последовательность является возрастающей). Для реализации этой задачи в программе придётся отказаться от цикла for и использовать цикл while, в заголовке которого будет проверяться: не превышает ли последний найденный элемент числа k? Вот эта программа:
Program Rekurrent_do_k;
Var a : array [1..99] of integer;
i, j, k : integer;
Begin
Write (’Введите число k: ’);
Readln (k); { ввод начальных данных }
a[1] := 3; { Первые три элемента заданы сразу }
a[2] := 2;
a[3] := 5;
i := 3;
while a[i] < k do
begin
i := i + 1; {цикл while сам не увеличивает i }
a[i] := a[i-3] + 2*a[i-1];
end;
writeln(’Элементы последовательности, меньшие ’,k,’:’);
For j := 1 to i-1 do { (i-1) — номер последнего найденного }
write(a[j], ’ ’); { элемента, который меньше k }
writeln;
end.
Попробуйте запустить эту программу и в качестве начального данного ввести число 29590. Правилен ли будет ответ? Прокомментируйте ситуацию!