Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры по праграм 2 курс.docx
Скачиваний:
14
Добавлен:
23.11.2019
Размер:
56.39 Кб
Скачать
  1. Алгоритмы поиска. Поиск делением пополам

Задача поиска требуемого элемента в массиве а[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(‘нет’);

  1. Статические и динамические переменные.

-Статическими -компилятор определяет сколько место в памяти необходимо для хранения величины, обращение к ним по имени;

-Динамическими – создаются в динамической области памяти во время выполнения программы, обращение к ним через указатель

 Все переменные, используемые в программе, размещаются в памяти согласно вполне определенным правилам:

  • для локальных переменных память отводится при вызове подпрограммы; при выходе из нее эта память освобождается, а сами переменные прекращают существовать;

  • глобальным переменным память отводится в начале выполнения программы; эти переменные существуют в течение всего периода работы программы.

    Таким образом, распределение памяти во всех этих случаях производится полностью автоматически и подчинено стековой дисциплине. Переменные, память, под которые распределяется описанным образом, называютсястатическими.

    Кроме этого язык программирования Pascal дает возможность образовать новые переменные в любой момент работы программы без учета ее статической структуры, сообразуясь с потребностями решаемой задачи. Точно так же допускается уничтожение созданных переменных в произвольный момент выполнения программы. Переменные, созданием и уничтожением которых явно может управлять программист, называются динамическими переменными.

    Естественным средством доступа к статическим переменным являются идентификаторы этих переменных (статическая переменная всегда описана в некотором блоке). Динамические переменные, количество которых и место расположения в памяти заранее не известно, невозможно обозначить идентификаторами. Поэтому единственным средством доступа к динамическим переменным является указатель на место их текущего расположения в памяти. На принципе обращения к динамическим переменным посредством указателей (ссылок) на них и основаны все соответствующие средства языка Pascal.

    Для распределения памяти под локальные переменные отводится специальный сегмент оперативной памяти (сегмент стека). Аналогично, образование динамических переменных реализуется в другой области памяти, которая существует отдельно от стекового сегмента и называется кучей (heap) или динамической областью памяти.