1.Абстрагирование
данных. Концепция типа данных.
Обрабатываемая информация на компьютере
представляет собой абстракцию некоторой части реального мира, в них
игнорируются некоторые свойства и характеристики реальных объектов, не
существенные для решаемой задачи. Поэтому абстракция – это одновременно
упрощение. При решении задачи нужно
определить множество данных, описывающих реальную ситуацию, затем способ
представления информации (средствами эвм).
Язык программирования описывает некоторую абстрактную вычислительную
машину, понимающую термины этого языка, что соответствует какому-то уровню
абстракции от объектов, используемых реальной ЭВМ. Следовательно; работая с
таким «языком высокого уровня», программист освобождается от вопросов
представления чисел.
Каждая константа,
переменная, выражение или функция бывают определенного типа. Этот тип существенным
образом характеризует множество значений, к которому принадлежит константа,
которые может принимать переменная или выражение или которые может вырабатывать
функция.
1.Любой тип данных определяет множество
значений, к которому принадлежит константа, которые может принимать переменная
(или выражение), или вырабатыватьфункция).
2. Тип
значения, задаваемого константой, переменной или выражением, можно определить
по их виду или описанию без необходимости выполнять какие-либо вычисления.
3.
Каждая операция или функция требует аргументов фиксированного типа и
выдает результат фиксированного типа.
Кроме типов, задаваемых программистом, нужно
иметь некоторые стандартные типы, которые называются предопределенными.
Они обычно включают числа и логические переменные. Можно
описывать простые типы и строить из них структурированные типы любой степени
сложности.
Переменные и типы данных вводят в программу для
того, чтобы их использовать в каких-либо вычислениях. Следовательно,
нужно еще иметь и некоторое множество
операций.
Основная цель использования абстракций в
программировании— обеспечить разработку, анализ и проверку программы на
основе законов, управляющих этими абстракциями. При этом нет необходимости
знать, какими способами эти абстракции реализуются на конкретной вычислительной
машине. Однако квалифицированному программисту полезно разбираться в наиболее
часто применяемых приемах представления основных абстракций программирования —
таких, как фундаментальные структуры данных. Эти знания могут помочь
программисту строить программу и описывать данные с учетом не только
абстрактных свойств структур, но и их реализации на конкретной ЭВМ, принимая во
внимание.ее свойства и присущие ей ограничения.
Проблема представления данных есть проблема
отображения абстрактной структуры в память вычислительной машины. В первом
приближении эта память представляет собой массив отдельных ячеек памяти,
называемых словами. Индексы этих слов называются адресами.
2.Массив -
фундаментальная структура данных. Отображение массива на оперативную память,
выравнивание, упаковка.
Массив — это регулярная структура; все
его компоненты — одного типа, называемого базовым типом. Массив — также
структура с так называемым случайным доступом, все его компоненты могут
выбираться произвольно и являются
одинаково доступными. Округление
числа занимаемых слов до ближайшего целого называется выравниванием. Выравнивание
понижает коэффициент
использования памяти.
Отказ от выравнивания может привести к
неэффективному обращению к частям слова.
Обращение к частям слова может удлинить
программу (оттранслированную) и этим свести на нет выигрыш, достигнутый
отказом от выравнивания.
Трансляторы всегда автоматически применяют
выравнивание.
коэффициент можно значительно увеличить, помещая
в каждое слово более одной компоненты массива. Этот прием называется упаковкой. Полезно иметь возможность
указывать желательность упаковки хотя бы в тех случаях, когда в одно слово
можно поместить более одной компоненты, поскольку при этом достигается
экономия памяти в 2 и более раз. type alfa =
packed array[l.. n] of char
3.Записи (record)- фундаментальные структуры. Отображение записи на ОП,
упакованная запись.
Самый общий метод получения составных типов —
это объединение компонент, принадлежащих к произвольным, возможно, тоже
составным типам, в один составной тип. Запись и массив имеют обшее свойство:
оба являются структурами со «случайным доступом». Запись — более универсальная
структура, поскольку не требуется, чтобы типы всех ее компонент были одинаковы.
С другой стороны, массив предоставляет большие возможности, так как селекторы
его компонент могут вычисляться (если они представлены выражениями), тогда как
селекторы компонент записи — это фиксированные идентификаторы, задаваемые в
описании типа. Записи отображаются в память (размещаются) так, что их
компоненты располагаются последовательно.
Если несколько компонент записи умещаются в одном слове памяти, то может
идти речь об упаковке. Так же как для массива, желательность упаковки можно
указать в описании с помощью слова packed перед словом record.
Поскольку смешения компонент вычисляются при трансляции, смещение компоненты
внутри слова также может определяться транслятором. Это значит, что для
многих машин упаковка записей приводит к значительно меньшей потере
эффективности, чем упаковка массивов.
4.Представление
множества, как фундаментальной структуры данных, в память машины.
Фундаментальная структура данных — множество. Соответствующий тип описывается
следующим образом:
type Т
= set of Т0
Значениями переменной х типа Т
являются множества элементов типа То.
Множество всех подмножеств множества То называется множеством-степенью Т0.
Таким образом, тип Т — это
множество-степень своего базового типа
То. Примеры: type intset set of 0.. 30; type charset — set of char. На всех множествах определены следующие
элементарные операции: * пересечение множеств, +
объединение множеств, — разность множеств, in принадлежность множеству. Пересечение и
объединение двух множеств
часто называют
соответственно умножением
и сложением множеств. Множество s наилучшим образом
представляется в памяти машины с помощью характеристической функции. Характеристическая функция — это
массив логических значений, i-я компонента которого
означает наличие или отсутствие i-го
значения
базового типа в множестве s. Размер этого массива
равен кардинальному числу базового типа множества. Представление множеств их
характеристической функцией позволяет реализовать операции объединения,
пересечения и разности двух множеств с помощью элементарных логических операций.
5.Последовательный файл, как
фундаментальная структура данных бесконечной мощности. Буферизация.
Общее свойство структур данных, а именно
массива, записи и множества, заключается в том, что их кардинальное число
конечно. Однако существует
структура, которая является усложненной, поскольку ее кардинальное число не
ограничено, но которая широко и часто используется — последовательность.
Из этого прежде всего следует, что объем памяти,
необходимый для размещения структуры усложненного типа, неизвестен во время
трансляции и может
изменяться во время
выполнения программы. Это требует
динамического распределения памяти.
Последовательность, вводимая в качестве
базового типа, допускает применение только ограниченного множества операторов,
основанных на строго последовательном доступе к компонентам, эта структура
называется последовательным файлом или просто файлом. По
аналогии с определениями типа для массивов и множеств файловый тип
определяется так: type Т = file
of T0 Это значит, что любой
файл типа Т состоит из 0 или
более компонент типа Т0. Смысл последовательного доступа заключается
в том, что в каждый момент доступна лишь одна определенная компонента
последовательности. Эта компонента определяется текущей позицией
механизма доступа. Файл находится в одном из двух состояний:
либо формирования (записи), либо просмотра (чтения). Преимущество строго
последовательного доступа особенно ощутимо, если файлы размещаются на
вспомогательных запоминающих устройствах, т. е. если происходит обмен между
устройствами. Последовательный доступ —единственный метод, позволяющий успешно
скрывать от программиста сложность механизмов такого обмена. В частности, он
допускает применение буферизации — простого приема, который обеспечивает
оптимальное использование ресурсов сложной вычислительной системы.
6.Элементарные
операции над файлами. Структура файловой системы.
Существует операция, инициализирующая процесс
формирования файла, операция, инициализирующая просмотр, операция,
добавляющая компоненту в конец последовательности, и операция, позволяющая при
просмотре переходить к следующей компоненте. Две последние здесь определяются
в форме, предполагающей наличие явной вспомогательной переменной, которая
представляет собой буфер. Построение пустой последовательности. Операция rewrite
(x). Увеличение последовательности. Операция write(x). Инициация
просмотра. Операция reset (x).
Переход
к следующей компоненте. Операция read(x).
Операции rewrite и reset не
зависят от позиции буфера файла перед их выполнением. В любом случае они возвращают
его к началу файла.
7. Алгоритм линейного поиска элемента в
массиве и его оптимизация - установка «барьера».
Если нет никакой дополнительной информации о
разыскиваемых данных, то очевидный подход - простой последовательный просмотр
массива с увеличением шаг за шагом той его части, где искомого элемента не
обнаружено. Такой метод называется линейным поиском. Условия
окончания поиска таковы:
1) элемент найден, т.е. a[i]
= x;
2) весь массив просмотрен, и совпадения не
обнаружено.
Конец массива поместить
дополнительный элемент со значением x. Назовем такой вспомогательный элемент
«барьером», ведь он ограждает нас от выхода за границу массива. В этом случае
размер массива увеличится на единицу, а сам массив будет описываться так:
a[N+1].
|