
- •Федеральное агентство по образованию
- •Структурированные типы данных. Классификация
- •Массивы Определение массива
- •Обращение к элементу массива. Хранение элементов массива. Доступ к элементам массива
- •Действия над массивами
- •Поиск элемента (одномерного ) массива Поиск среди неупорядоченных элементов массива
- •Поиск среди упорядоченных элементов массива
- •Сортировка элементов (одномерного) массива
- •Линейная сортировка (сортировка отбором)
- •Сортировка методом пузырька
- •5 4 3 1 2
- •5 4 3 2 1 Метод быстрой сортировки с разделением
- •Множества
- •Объявление множеств
- •Представление в памяти переменной типа множество
- •Операторы для работы с множествами Проверка принадлежности элемента множеству
- •Операции над множествами
- •Сравнение множеств
- •Применение множеств
- •Процедуры и структурное программирование
- •Преимущества структурного программирования
- •Планирование структурированной программы
- •Метод программирования сверху вниз
- •Определение процедуры
- •Передача управления при вызовах процедур и функций
- •Функции: подпрограммы,возвращающие единственный результат
- •Понятие блока
- •Область действия и время жизни переменных
- •Особенности локальных переменных
- •Особенности глобальных переменных
- •Особенности использования процедур и функций в турбо паскале
- •Опережающее определение процедур и функций
- •Рекурсия и итерация
- •Процедуры и функции как параметры
- •Директивы подпрограмм
- •Отладка и тестирование программ, содержащих подпрограммы
- •Нисходящее тестирование и подпрограммы-заглушки
- •Восходящее тестирование и программы-тестеры
- •Рекомендации по отладке программ, содержащих подпрограммы
- •Использование отладчикадля трассировки процедур
- •Запуск внешних программ
- •Стандартные модули
- •Модуль Crt
- •Модуль Graph
- •Функции
- •Текстовые файлы
- •Нетипизированные файлы
- •Типизированные файлы
- •Прямой доступ
- •Дополнительные функции работы с файлами
- •Обработка ошибок ввода-вывода
- •Указатели и динамические переменные Статические и динамические переменные
- •Адресация памяти в Турбо Паскале
- •Карта памяти Турбо Паскаля
- •Указатели
- •Операция для получения адреса
- •Функции для работы с адресами
- •Процедуры для работы с указателями
- •Присваивание значений указателям
- •Организация ссылок
- •Динамические структурированные переменные Динамические записи
- •Динамические массивы
- •Массивы размером более 64 кбайт
- •Строки с завершающим нулем (asciiz)
- •Процедуры и функции модуля strings
- •Указатели на процедуры и функции
- •Динамические структуры данных
- •Линейные списки
- •60 Лекции по курсу «Языки программирования» Часть II
Сравнение множеств
Можно сравнивать множества только совместимых типов.
-
Математика
Паскаль
1
A = B
A = B
2
A B
A B
3
A B
A >= B
4
A B
A <= B
5
x A
x in A
Все операции возвращают логический результат. Для каждой операции правила формулируются следующим образом:
Равенство: (true) только тогда, когда 2 множества имеют одинаковый набор символов.
[1,3]=[1,3] равно true, также равно true[1,3]=[3,1]
Неравенство: (true) когда набор символов различный.
A B возвращает true, если все элементы множества В входят в множество А.
A B возвращает true, если все элементы множества А входят в множество В.
x A возвращает true, если х - (элемент базового типа множества А) имеется в множестве А.
Применение множеств
1-й случай: множества используют для того, чтобы исключить большое количество последовательных проверок.
2-й случай: множества также используются для формирования неповторяющегося набора элементов.
Если множество сформировано и необходимо, например, вывести элементы множества на экран (печать), это можно сделать следующим образом.
Идея этого способа состоит в следующем: вводится вспомогательная переменная, которая в цикле принимает все возможные значения базового типа множества. Если значение этой переменой входит в текущее значение множества, то значение вспомогательной переменной выводится на экран.
Процедуры и структурное программирование
Использование процедур в программе позволяет практиковать такой подход, как структурное программирование. При этом отдельные задачи программы выполняются независимыми фрагментами кода.
Преимущества структурного программирования
Структурированную программу легче писать, потому что сложная задача разбивается на много мелких простых задач. Каждая задача выполняется процедурой. Быстрый прогресс в разработке программы достигается благодаря сосредоточению всякий раз на одной сравнительно простой задаче.
Структурированную программу легче отлаживать. Если в программе есть ошибка структурированность помогает локализовать ошибку в той или иной части кода, например, в конкретной процедуре.
Еще одно преимущество структурного программирования состоит в экономии времени. Написав процедуру или функцию, которая выполняет в программе определенную задачу, можно легко и быстро перенести эту процедуру в другую программу для выполнения той же задачи. Даже если в новой программе понадобится сделать что-то новое, то почти всегда легче немного изменить уже существующую процедуру, чем написать новую с нуля.
Планирование структурированной программы
Если вы собрались писать хорошо структурированную программу, придется вначале потрудиться над планом. Планированием нужно заниматься, еще не написав ни единой строчки кода, зато вооружившись карандашом и бумагой. План должен включать список конкретных задач, которые будет выполнять программа. Начать следует с глобальной идеи работы программы. Если, например, программа должна вести список контактов (имен и адресов), то чего от нее следует требовать? Вот несколько очевидных операций:
Ввод новых имен и адресов.
Изменение существующих пунктов списка.
Сортировка списка по фамилиям.
Печать адресов на почтовые конверты.
С помощью этого списка программа уже разделена на четыре основные задачи, каждую из которых можно отдать отдельной процедуре. Теперь можно пойти еще дальше и разделить эти задачи на подзадачи. Например, задачу ввода новых имен и адресов можно разделить на следующие подзадачи.
Чтение существующего списка адресов с диска.
Добавление новых данных в список.
Сохранение измененного списка на диске.
Аналогичным образом задачу изменения существующих пунктов списка можно разбить на такие подзадачи.
Чтение существующего списка адресов с диска.
Изменение одного или нескольких пунктов списка.
Сохранение измененного списка на диске.
Заметьте, что у этих списков имеются две общие подзадачи: чтение с диска и сохранение на диске. Можно написать одну функцию для чтения списка адресов с диска и вызывать ее как из процедуры ввода новых адресов, так и из процедуры изменения существующих пунктов. То же самое справедливо для функции сохранения списка на диске.
Вы уже должны увидеть как минимум одно преимущество структурного программирования. Удачно разделив программу на подзадачи, можно определить, в каких частях программы выполняются одинаковые операции. Далее можно написать процедуры обращения к диску, имеющие многоцелевое назначение, тем самым экономя время и улучшая эффективность программы.
Такой метод программирования делает структуру программы иерархической, или многоуровневой. На рисунке показан иерархический подход к написанию программы, предназначенной для ведения списка адресов.
Иерархическая организация хорошо структурированной программы
Следуя этому планомерному подходу, можно быстро составить список отдельных задач, которые должна выполнять программа. Потом можно браться за каждую отдельную задачу по очереди, уделяя внимание каждый раз лишь сравнительно небольшой и несложной части общей работы. Как только очередная процедура написана и работает, можно переходить к написанию следующей.