
- •Федеральное агентство по образованию
- •Структурированные типы данных. Классификация
- •Массивы Определение массива
- •Обращение к элементу массива. Хранение элементов массива. Доступ к элементам массива
- •Действия над массивами
- •Поиск элемента (одномерного ) массива Поиск среди неупорядоченных элементов массива
- •Поиск среди упорядоченных элементов массива
- •Сортировка элементов (одномерного) массива
- •Линейная сортировка (сортировка отбором)
- •Сортировка методом пузырька
- •5 4 3 1 2
- •5 4 3 2 1 Метод быстрой сортировки с разделением
- •Множества
- •Объявление множеств
- •Представление в памяти переменной типа множество
- •Операторы для работы с множествами Проверка принадлежности элемента множеству
- •Операции над множествами
- •Сравнение множеств
- •Применение множеств
- •Процедуры и структурное программирование
- •Преимущества структурного программирования
- •Планирование структурированной программы
- •Метод программирования сверху вниз
- •Определение процедуры
- •Передача управления при вызовах процедур и функций
- •Функции: подпрограммы,возвращающие единственный результат
- •Понятие блока
- •Область действия и время жизни переменных
- •Особенности локальных переменных
- •Особенности глобальных переменных
- •Особенности использования процедур и функций в турбо паскале
- •Опережающее определение процедур и функций
- •Рекурсия и итерация
- •Процедуры и функции как параметры
- •Директивы подпрограмм
- •Отладка и тестирование программ, содержащих подпрограммы
- •Нисходящее тестирование и подпрограммы-заглушки
- •Восходящее тестирование и программы-тестеры
- •Рекомендации по отладке программ, содержащих подпрограммы
- •Использование отладчикадля трассировки процедур
- •Запуск внешних программ
- •Стандартные модули
- •Модуль Crt
- •Модуль Graph
- •Функции
- •Текстовые файлы
- •Нетипизированные файлы
- •Типизированные файлы
- •Прямой доступ
- •Дополнительные функции работы с файлами
- •Обработка ошибок ввода-вывода
- •Указатели и динамические переменные Статические и динамические переменные
- •Адресация памяти в Турбо Паскале
- •Карта памяти Турбо Паскаля
- •Указатели
- •Операция для получения адреса
- •Функции для работы с адресами
- •Процедуры для работы с указателями
- •Присваивание значений указателям
- •Организация ссылок
- •Динамические структурированные переменные Динамические записи
- •Динамические массивы
- •Массивы размером более 64 кбайт
- •Строки с завершающим нулем (asciiz)
- •Процедуры и функции модуля strings
- •Указатели на процедуры и функции
- •Динамические структуры данных
- •Линейные списки
- •60 Лекции по курсу «Языки программирования» Часть II
Метод программирования сверху вниз
Используя структурный подход, программисты фактически следуют методу программирования сверху вниз. Это видно из рисунка, на котором структура программы напоминает перевернутое дерево. Как правило, вся фактическая работа программы выполняется функциями на концах "ветвей" этого дерева. Процедуры, находящиеся ближе к "стволу", в основном распределяют выполнение программы между этими процедурами.
В результате, основная программа — т.е. ее тело содержит сравнительно немного операторов. Основной объем кода заключен в процедурах. Часто пользователю предоставляется меню. Выполнение программы разветвляется в зависимости от выбора пользователя. Каждая ветвь выполняется отдельной процедурой.
Меню — хорошее средство создания удобных в использовании программ.
Определение процедуры
Процедура — это независимый элемент программы, структура которого напоминает структуру всей программы. Процедура начинается с заголовка, который включает слово procedure и имя процедуры (или ее идентификатор). Завершается заголовок процедуры точкой с запятой. Раздел описаний процедуры является необязательным и присутствует только тогда, когда в процедуре используются собственные константы и переменные. В каждой процедуре имеется тело процедуры, которое начинается с зарезервированного слова begin и завершается словом end; (с точкой с запятой).
Процедура может быть с параметрами и без. Списки параметров обеспечивают коммуникационные связи между основной программой и ее подпрограммами. Параметры делают процедуру или функцию более универсальными, поскольку позволяют подпрограмме при каждом вызове манипулировать различными данными.
Те параметры, которые указываются в описании процедуры являются формальными, а параметры которые указываются при вызове процедуры – фактические. Параметры процедур бывают двух типов: параметры – значения и параметры – переменные.
Синтаксические правила для процедур
ОПИСАНИЕ СИНТАКСИСА: Объявление процедуры (с параметрами)
Форма: |
procedure pname (формальные параметры); <раздел описаний> begin <тело процедуры> end; |
Интерпретация: После имени pname объявленной процедуры следует список формальных параметров, заключенных в скобки. Идентификаторы, объявленные в разделе описаний, являются для процедуры локальными и определены на время работы процедуры. Тело процедуры описывает манипуляции над данными (которые будут выполнены при вызове процедуры) с использованием формальных параметров в качестве фиктивных имен вместо фактических параметров. Формальные параметры-значения принимают данные, передаваемые в процедуру, а формальные параметры-переменные, которые предваряются зарезервированным словом var, возвращают результаты работы процедуры в вызвавшую ее основную программу. |
Следующая синтаксическая диаграмма демонстрирует, что список формальных параметров всегда заключается в скобки и представляет собой один или несколько перечней идентификаторов. Каждому перечерню идентификаторов может предшествовать зарезервированное слово var (однако это необязательно) и каждый перечень должен завершаться двоеточием, за которым следует идентификатор типа данных (например Real или Char). Идентификаторы в перечнях разделяются запятыми, а перечни идентификаторов отделяются один от другого точками с запятой.
ОПИСАНИЕ СИНТАКСИСА: Оператор вызова процедуры с параметрами
Форма: |
pname(фактические параметры); |
Интерпретация: Фактические параметры заключены в операторе вызова процедуры в скобки. Когда имеет место вызов процедуры pname, ее первый фактический параметр ассоциируется с первым формальным параметром, второй фактический параметр ассоциируется со вторым формальным параметром и так далее. Для параметра-значения, в область данных процедуры заносится значение фактического параметра и она (процедура) обрабатывает локальное значение. Для параметра-переменной в область данных процедуры заносится адрес фактического параметра, после чего процедурой обрабатывается сам фактический параметр. Примечание: Фактические параметры должны удовлетворять правилам соответствия списка параметров. |
Списки параметров: правила соответствия
Соответствие между фактическим и формальным параметрами определяется не по именам, а по их положению в своих списках параметров. Эти списки должны быть одного размера, хотя имена соответствующих фактических и формальных параметров могут отличаться.
Для параметров-переменных типы соответствующих фактического и формального параметров должны быть идентичны. Для параметров-значений фактический параметр должен быть совместим по присваиванию с соответствующим фактическим параметром.
Для параметров-переменных фактический параметр должен представлять собой переменную. Для параметров-значений фактический параметр может быть переменной, константой или выражением.
Пояснения по параметрам-значениям и параметрам-переменных
Передача параметра по значению означает, что в процедуру передается копия значения параметра (аргумента). Этот метод включает 3 этапа:
Если необходимо, вычисляется значение выражения.
Результат копируется в стек — временное хранилище данных в памяти.
Процедура извлекает значение параметра (аргумента) из стека.
Ключевым моментом тут является то, что процедура никак не может изменить значение параметра (аргумента), если параметр передается по значению. Данные снаружи процедуры защищены от неосторожного вмешательства.
Если использовать параметр-переменная, то происходит передача параметров по адресу. Рисунок иллюстрирует передачу параметров в процедуру по адресу.
Когда использовать параметр-переменную и когда параметр-значение
Если информация передается процедуре, но не возвращается процедурой тогда формальный параметр, представляющий эту информацию, должен быть параметром-значением. Такой параметр еще называют входным параметром.
Если информация возвращается процедурой вызвавшей ее программе, в этом случае формальный параметр, представляющий данную информацию, должен быть параметром-переменной. Такой параметр еще называют выходным параметром.
Если информация передается процедуре, здесь, возможно, модифицируется, а затем возвращается новое значение, тогда формальный параметр, представляющий эту информацию, должен быть параметром-переменной. Параметр, используемый таким образом, еще называют параметром входа-выхода.
Для параметра входа-выхода мы предполагаем, что в соответствующем фактическом параметре перед выполнением процедуры содержатся какие-то имеющие смысл данные, а для выходного параметра мы такого предположения сделать не можем.