- •Оглавление
- •§1. Первое знакомство с системой программирования Турбо Паскаль
- •§2. Основные элементы языка
- •§3. Команды редактора Команды управления движением курсора
- •§4. Первая программа
- •Пояснения к программе
- •Запуск программы
- •Сохранение программы
- •§5. Управление позициями и цветом вывода
- •§6. Арифметический квадрат.Абсолютная величина
- •§7. Типы данных
- •§8. Целый тип данных
- •Пример 6
- •Пример 7
- •Пример 8
- •§9. Вещественный тип данных
- •Пример 7
- •Пример 8
- •§10. Логический тип данных
- •§11. Условный оператор
- •Пример 1
- •Пример 2
- •Решение
- •§12. Оператор безусловного перехода. Раздел описания меток
- •§13. Вложенные условные операторы
- •Решение
- •Задание
- •Решение задач Задача 1
- •Задача 8
- •Задача 9
- •Задача 10
- •§14. Цикл с параметром
- •Пример 1
- •Пример 2
- •Пример 3
- •§15. Работа с окнами. Метод пошагового выполнения программ
- •§16. Решение задач с использованием цикла с параметром Задача 1
- •Решение
- •Задача 2.
- •§17. Цикл с предусловием
- •Оператор цикла с предусловием
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •§18. Цикл с постусловием
- •Пример 1
- •Решение
- •Пример 2
- •§19. Алгоритм Евклида
- •§20. Вложенные циклы Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •Пример 4
- •Решение
- •Пример 5
- •§21. Решение задач с использованием циклов с условием Задача 1
- •Решение
- •Задача 2
- •§22. Символьный тип данных
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •§23. Ограниченный тип данных
- •Var b:3..8; а не просто Vаг b:Integer;
- •Решение
- •§24. Оператор варианта (выбора)
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •Пример 4
- •§25. Перечисляемый тип данных
- •§26. Описание переменных, констант и типов. Раздел описания констант
- •Раздел описания типов
- •§27. Преобразование типов. Совместимость типов
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение.
- •§28. Процедуры
- •Описание процедуры
- •Решение
- •Begin {основная программа}
- •Пример 2
- •Решение
- •Пример 3
- •§29. Функции
- •Пример 1
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •§30. Примеры рекурсивного программирования
- •Задачи с рекурсивной формулировкой
- •Пример 3
- •Задачи, которые можно решить как частный случай обобщенной
- •Задание
- •Задачи, в которых можно использовать характеристику или свойство функции Пример
- •Решение
- •§31. Файловый тип данных Операции для работы с файлами последовательного доступа
- •§32. Обработка файлов Связь переменной файлового типа с файлом на диске
- •Чтение из файла
- •Закрытие файла
- •Признак конца файла
- •Запись в файл
- •§33. Прямой доступ к элементам файла
- •Удаление файлов. Процедура
- •Переименование файлов. Процедура
- •Пример 2
- •§34. Текстовые файлы
- •Обработка текстовых файлов
- •Пример 1
- •Решение
- •Пример 2
- •Нетипизированные файлы
- •§35. Одномерные массивы. Работа с элементами(разбор на примерах) Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •Begin {Считываем очередную строку}
- •§36. Работа с элементами массива (разбор на примерах)
- •Пример 2
- •§37. Методы работы с элементами одномерного массива
- •Создание массива
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Работа с несколькими массивами Пример
- •Решение
- •§38. Удаление элементов из одномерного массива Пример 1
- •Решение
- •Begin {Сдвиг элементов на один влево}
- •Пример 2
- •Решение
- •§39. Вставка элементов в одномерный массив
- •Вставка нескольких элементов
- •Решение
- •§40. Перестановки элементов массива
- •§41. Двухмерные массивы Описание. Работа с элементами
- •§42. Найти сумму элементов
- •Решение
- •§43.Нахождение количества элементов с данным свойством
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •§44. Работа с несколькими массивами Пример
- •Решение
- •§45. Определить, отвечает ли заданный массив некоторым требованиям Пример 1
- •Решение
- •Пример 2
- •Решение
- •§46. Изменение значений некоторых элементов, обладающих заданным
- •§47. Заполнение двухмерного массива по правилу
- •Пример 2
- •Решение
- •§48. Вставка и удаление элементов Вставка строки
- •Решение
- •Примечания
- •Удаление строки Пример
- •Решение
- •Примечания
- •§49. Перестановка элементов массива Перестановка двух элементов Пример 1
- •Решение
- •Пример 2
- •§50. Строковый тип данных
- •Операции со строками
- •Склеивание
- •Сравнение
- •Примеры
- •Пример 8
- •Пример 9
- •Пример 10
- •§51. Множественный тип данных
- •Операции над множествами
- •Примеры
- •Сравнение множеств
- •Пример 1
- •Пример 2
- •Вопросы для обсуждения
- •Пример 3
- •Вопросы для обсуждения
- •Пример 4
- •Решение
- •Пример 5
- •Решение
- •§52. Комбинированный тип данных (записи)
- •Пример 1
- •Пример 2
- •Пример 3
- •Решение
Пример 3
Перевести натуральное число из десятичной системы счисления в двоичную.
Решение
Переведем число 23 в двоичную систему счисления. Для этого разделим его на 2, получим целую часть и остаток от деления. Целую часть снова делим на 2 и получаем целую часть и остаток. Так делаем до тех пор, пока целая часть не станет меньше делителя (то есть пока она не станет равна 1).
23 2
22 11 2
1 10 5 2
1 4 2 2
1 2 1
0
Теперь начиная с этой единицы выписываем в обратном порядке все остатки от деления. Это и будет запись числа 23 в двоичной системе счисления:
2310=101112
Опишем соответствующую процедуру:
Program Example_79;
Procedure Rec(n: Integer);
Begin
If n>1 Then Rec(n div 2);
Write(n mod 2);
End;
Покажем вызовы процедуры для числа 23. Первый вызов процедуры производится в основной программе.
Результат: 10111.
Первая цифра (1) выводится на экран из последнего вызова процедуры Reс, следующая цифра (0) из предпоследнего и так далее, последняя (1) − из первого. Таким образом, вывод очередной цифры происходит перед выходом из очередного экземпляра процедуры Reс.
Задачи, которые можно решить как частный случай обобщенной
Если нельзя извлечь рекурсию из постановки задачи, то можно расширить задачу, обобщить ее (например, введя дополнительный параметр). Удачное обобщение может помочь увидеть рекурсию. После этого возвращаемся к частному случаю и решаем исходную задачу.
Пример
Определить, является ли заданное натуральное число простым.
Решение
Данную задачу можно обобщить, например, так; определить, верно ли, что заданное натуральное число N не делится ни на одно число, большее или равное M (2≤M≤N), но меньшее N.
Соответствующая функция должна принимать значение "истина" в двух случаях:
Если M=N;
Если N не делится на M и функция принимает значение "истина" для чисел М+1 и N.
Program Example_80;
Function Simple(M,N: Integer): Boolean;
Begin
If M=N Then Simple:=True
Else Simple:=(N Mod M<>0)
And Simple (M+1,N);
End;
Вернемся к исходной задаче. Она является частным случаем обобщенной, если M положить равным 2. Первое обращение к функции будет таким: Simple(2,N), где N − это данное число.
Задание
Изучить работу функции в пошаговом режиме и нарисовать схему вызовов функций.
Задачи, в которых можно использовать характеристику или свойство функции Пример
Для заданного натурального числа N≥1 определить натуральное число a, для которого выполняется неравенство: 2a-1≤N≤2a.
Решение
Заметим, что значение a зависит от N следующим образом:
1, если N=1;
a(N)=
a(N div 2)+1, если N>1.
Рассмотрим пример. Пусть N=34.
2a-1≤34<2a, прибавим 1 и переходим к 34 div 2
2a-1≤17<2a +1
2a-1≤8<2a +1
2a-1≤4<2a +1
2a-1≤2<2a +1
2a-1≤1<2a получим a=1
А теперь возвращаемся назад, к последней единице прибавляем все предыдущие. Таким образом, получается 6. Опишем соответствующую функцию:
Program Example_81;
Function A(n: Integer): Integer;
Begin
If N=1 Then A:=1
Else A:=A(N div 2)+1;
End;