- •Содержание
- •Рекомендации к проведению лабораторных работ
- •Комментарии в тексте программы
- •Компиляция и запуск программы на выполнение
- •Переменные и константы
- •Операторы и выражения
- •Оператор присваивания
- •Арифметические операции
- •Логические операции
- •Составной оператор begin..end
- •Условный оператор if..then
- •Оператор-селектор case..of
- •Операторы обработки циклов
- •Цикл с параметром for .. do
- •Цикл с предусловием while..do
- •Цикл с постусловием repeat..until
- •Процедуры break и continue
- •Оператор with..do
- •Процедуры и функции
- •Процедуры
- •Функции
- •1. Фундаментальные структуры данных
- •Общее понятие типа данных
- •Простой тип
- •Перечислимые типы данных
- •Поддиапазонны
- •Строковый тип
- •Структурные типы
- •Массивы
- •Записи
- •Множества
- •Представление структур в памяти
- •Задание
- •2. Работа с последовательностями, файлы
- •Доступ к файлу
- •Операции над файлами
- •Окончание файла
- •Пример работы с файлом
- •Задание
- •3. Анализ алгоритмов
- •Рост функций
- •Задание
- •4. Простейшие методы сортировки массивов
- •Оценка алгоритмов сортировки
- •Шейкер-сортировка
- •Сортировка простыми вставками
- •Сортировка бинарными вставками
- •Задание
- •5. Улучшенные методы сортировки массивов
- •Сортировка с помощью включений с уменьшающимися расстояниями (сортировка Шелла)
- •Пирамидальная сортировка
- •Сортировка с разделением (быстрая сортировка)
- •Задание
- •6. Сортировка последовательных файлов
- •Сортировка простым слиянием
- •Естественное слияние
- •Задание
- •7. Рекурсивные алгоритмы
- •Сравнение рекурсии и итерации
- •Задание
- •8. Динамические структуры данных, связные списки
- •Списки
- •Пример создания и заполнения списка
- •Задание
- •9. Нелинейные структуры данных
- •Граф
- •Бинарное дерево
- •Задание
- •10. Алгоритмы на графах
- •Алгоритмы обхода в глубину и по уровням
- •Построение минимального остовного дерева
- •Поиск кратчайшего пути
- •Задание
- •11. Поиск данных
- •Двоичный (бинарный) поиск элемента в массиве
- •Интерполяционный поиск элемента в массиве
- •Алгоритм Бойера-Мура
- •Задание
- •12. Хеширование
- •Отечественный стандарт хеширования
- •Создание хеш-функции
- •Хеш-функции для строковых значений, алгоритм Гонера
- •Задание
- •13. Методы сжатия текстовых данных
- •Метод “Running”
- •Словарные методы сжатия
- •Алгоритм Хаффмана
- •Задание
- •14. Алгоритмы вывода графических примитивов
- •Рисование отрезка
- •Прямое вычисление координат
- •Инкрементный алгоритм Брезенхэма
- •Простейший алгоритм закрашивания замкнутой области
- •Задание
- •15. Псевдослучайные последовательности
- •Метод середин квадратов
- •Линейный конгруэнтный метод
- •Генератор псевдослучайных чисел, поставляемый с системой
- •Оценка качества генератора ПСП
- •Задание
- •16. Параллельные алгоритмы
- •Пример многопоточного приложения
- •Задание
- •Задание на СКР
- •Вариант 1. Клеточные автоматы
- •Вариант 2. Раскрашивание карты
- •Вариант 3. Крисс-кросс
- •Вариант 4. Лабиринт
- •Список использованной литературы
- •Приложение A. Справочник по функциям Delphi
- •Операции с порядковыми типами
- •Математические функции и процедуры
- •Генерация псевдослучайного числа
- •Преобразование типов данных
- •Работа с памятью
- •Приложение Б. Компонент-сетка TStringGrid
- •Приложение В. Компонент-диаграмма TChart
- •Приложение Д. Элементарный поток – класс TThread
16
1. Фундаментальные структуры данных
Вид занятия – лабораторная работа Цель – исследование порядка представления в памяти простых типов данных
Продолжительность – 2 часа
Создателю языка Pascal профессору Цюрихской высшей технической школы Николаусу Вирту принадлежит очень меткое определение:
ПРОГРАММА=СТРУКТУРЫ + АЛГОРТИМЫ
Первая лабораторная работа по дисциплине “Методы программирования” посвящена знакомству с порядком определения и эффективного использования в программах структур данных.
При решении какой-либо задачи как с помощью компьютера необходимо:
1.Выбрать некоторую абстракцию действительности, т. e. определить множество данных, описывающих реальную ситуацию.
2.Выбрать способ представления этой информации.
Вкачестве примера можно рассмотреть персональный файл студента. Каждый студент представлен (абстрагирован) в этом файле множеством данных, существенных либо для его характеристики, либо для процедур расчета. Это множество может включать некоторую идентификацию студента, например его имя и номер зачётной книжки. Но вряд ли оно будет содержать такие несущественные данные, как цвет волос, вес и рост.
Для решения первой части задачи любой язык программирования обладает заранее предопределёнными типами данных. Для решения второй части задачи требуются знания и интуиция программиста
Общее понятие типа данных
Отправной точкой процесса построения любой системы хранения и обработки данных по праву считается тип данных. Вне зависимости от того, какой язык программирования вы изучали, при построении новой программы самым первым шагом становится рассмотрение типов данных определяемых системой. Программистов Delphi, Си или поклонников любого другого языка программирования не удивишь типами данных INTEGER, REAL или CHAR. Указанные типы данных специализируются на обслуживании целочисленных, вещественных или символьных значений. На рисунке 1.1 представлена классификация наиболее распространенных типов данных Delphi.
Типы данных определяют порядок хранения данных в памяти компьютера. Типизация храни-
мых значений не просто указывает на размерность в байтах, которую должна выделить система для размещения в памяти того или иного значения. Преследуемая цель ещё более значима. Типизация определяет, какие операции могут быть осуществлены с теми или иными данными. Система программирования не позволит новичку передать результаты деления в целочисленную переменную, ведь в этом случае может быть утеряна дробная часть результата. Система станет отчаянно сопротивляться, если мы попробуем просуммировать символьный и вещественный тип данных. Пусть даже в символьной переменной хранится числовое значение. В последнем случае перед проведением математической операции необходимо повести преобразование данных.
Понятие “тип данных” интегрирует в себе три компоненты:
1.ограничение множества значений принадлежащих типу;
2.дефиниция набора операций применяемых к типу;
3.определение способа отображения (внешнего представления) значений типа.
На сегодняшней лабораторной мы исследуем особенности представления в памяти простых, строковых и некоторых структурных типов данных.