- •Рекурсия. Виды. Особенности.
- •Прямая Рекурсия. Рекурсивное определение значение факториала
- •Косвенная Рекурсия. Опережающее описание.
- •Сортировка массивов. Типы сортировок.
- •Метод прямого обмена ..Пузырька
- •Метод прямого выбора:
- •Метод прямого включения
- •Алгоритмы поиска. Линейный поиск
- •Алгоритмы поиска. Поиск делением пополам
- •Статические и динамические переменные.
- •Указатели. Типы.
- •Доступ к переменной по указателю - разыменование указателя
- •Стандартные процедуры и функции управления динамической памятью
- •Динамические структуры данных: стек, очередь, список и их особенности.
- •Список. Типы списков. Операции над списками.
- •Выбор нового текущего элемента в списке.
- •Вывод всех элементов из списка.
- •Добавление нового элемента справа от текущего в списке.
- •Удаление текущего элемента из списка
- •Список.Удаление элемента справа от текущего.
- •Стек. Операции над стеком.
Алгоритмы поиска. Поиск делением пополам
Задача поиска требуемого элемента в массиве а[i], i=1..n заключается в нахождении индекса i, удовлетворяющего условию а[i]=Х. Х называют ключом поиска. Различают:
Линейный поиск
Бинарный поиск
Бинарный поиск (поиск делением пополам) используется, когда данные упорядочены, например, по возрастанию, т.е. a[i] ≤ a[i+1].
Основная идея — возьмем «средний» (m) элемент. Если a[m] < x, то все элементы i ≤ m можно исключить из дальнейшего поиска, если a[m] ≥ x, то можно исключить все i > m.
i=1; j:=N;
While i<j do
begin
m:=(i+j) div 2;
if a[m]<x then i:=m+1 else j:=m
end;
if a[i]=x then write(‘элемент i найден’) else write(‘нет’);
Статические и динамические переменные.
-Статическими -компилятор определяет сколько место в памяти необходимо для хранения величины, обращение к ним по имени;
-Динамическими – создаются в динамической области памяти во время выполнения программы, обращение к ним через указатель
Все переменные, используемые в программе, размещаются в памяти согласно вполне определенным правилам:
для локальных переменных память отводится при вызове подпрограммы; при выходе из нее эта память освобождается, а сами переменные прекращают существовать;
глобальным переменным память отводится в начале выполнения программы; эти переменные существуют в течение всего периода работы программы.
Таким образом, распределение памяти во всех этих случаях производится полностью автоматически и подчинено стековой дисциплине. Переменные, память, под которые распределяется описанным образом, называютсястатическими.
Кроме этого язык программирования Pascal дает возможность образовать новые переменные в любой момент работы программы без учета ее статической структуры, сообразуясь с потребностями решаемой задачи. Точно так же допускается уничтожение созданных переменных в произвольный момент выполнения программы. Переменные, созданием и уничтожением которых явно может управлять программист, называются динамическими переменными.
Естественным средством доступа к статическим переменным являются идентификаторы этих переменных (статическая переменная всегда описана в некотором блоке). Динамические переменные, количество которых и место расположения в памяти заранее не известно, невозможно обозначить идентификаторами. Поэтому единственным средством доступа к динамическим переменным является указатель на место их текущего расположения в памяти. На принципе обращения к динамическим переменным посредством указателей (ссылок) на них и основаны все соответствующие средства языка Pascal.
Для распределения памяти под локальные переменные отводится специальный сегмент оперативной памяти (сегмент стека). Аналогично, образование динамических переменных реализуется в другой области памяти, которая существует отдельно от стекового сегмента и называется кучей (heap) или динамической областью памяти.