Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие часть1.doc
Скачиваний:
22
Добавлен:
01.03.2025
Размер:
6.94 Mб
Скачать
  1. Основные понятия и определения

Первая глава является вводной и посвящена определению основных понятий.

Разумеется, способы организации данных и алгоритмы их обработки нельзя рассматривать отдельно друг от друга. Однако в рамках данной главы полезно сначала сосредоточиться на терминологии, которая относится к определению данных, а затем разобрать наиболее фундаментальные понятия, касающиеся алгоритмов. Здесь уместно привести высказывание Фредерика П.Брукса. «Покажите мне ваши блок-схемы и спрячьте таблицы, и я ничего не пойму. Покажите мне таблицы, и блок-схемы мне не понадобятся — все будет очевидно и так.» Таблицы (дословный перевод английского tables) — это структуры данных, а блок-схемы — способ записи алгоритмов. Иными словами, выбор структур данных определяет используемые алгоритмы. Возможно, это чересчур упрощенный подход, но важность грамотного выбора способов организации данных нельзя оспорить[14].

Существует несколько фундаментальных понятий, которые относятся к определению данных. Это типы данных, абстрактные типы данных и структуры данных. Разберем данные понятия по порядку.

    1. 1.1. Типы данных

1.1.1. Понятие типа данных

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

Любая переменная, константа, а также значение выражения или функции относятся к определенному типу данных.

Тип данных определяет множество допустимых значений данных и множество операций над этими значениями.

Все типы данных, используемые в языках высокого уровня, можно разделить на две большие группы:

  • скалярные (простые);

  • структурированные (составные, конструируемые).

Скалярные типы, в свою очередь, делятся на несколько групп:

  • базовые (встроенные в язык), т. е. типы, предопределенные в языке программирования;

  • производные от базовых (например, перечисляемый тип или диапазон в языке Pascal);

  • ссылочные типы (указатели), обеспечивающие возможность работы с множеством абстрактных адресов памяти.

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

Большинство языков программирования представляет стандартный набор структурированных типов:

  • массивы (в том числе строки — массивы символов);

  • записи (в языке С они называются структурами, аналоги записей с вариантами — объединения);

  • в некоторых языках, например в Pascal, есть множества.

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

Внутреннее представление данных, размер выделяемой памяти и реализация операций предоставляются на усмотрение разработчиков компиляторов. Единственное, что предоставляют практически все языки программирования, — операция sizeof(тип) для определения размера области памяти, отводимой под переменную заданного типа.

Все же полное незнание внутренего представления стандартных типов в языках высокого уровня может привести к многочисленным ошибкам при реализации алгоритмов. Поэтому очень кратко остановимся на этом вопросе.