- •Введение
- •1. Общие положения
- •1.1. Понятие алгоритма. Данные в задачах и алгоритмах
- •1.2. Понятие о технологии разработки программ. Принципы и этапы разработки программ
- •1.3. Состав документации по отдельным этапам
- •1. Задача
- •9. Структурные тесты
- •1.4. Нисходящая разработка и нисходящая отладка
- •2. Процесс разработки программы на примере решения типовой задачи
- •2.1. Разработка алгоритма и программы уровня 0 с заглушками
- •2. Входные данные
- •3. Выходные данные
- •5. Функциональные тесты
- •6. Метод
- •7. Алгоритм
- •8. Программа на паскале. Диалоговый вариант
- •9. Структурные тесты
- •2.2. Отладка программы с заглушкой
- •2.3. Общая схема перехода от метода к алгоритму решения
- •2.4. Разработка алгоритма и программы для примера
- •2. Входные данные
- •5. Функциональные тесты
- •6. Метод
- •7. Алгоритм
- •8. Программа на паскале
- •9. Структурные тесты
- •2.5. Отладка полной программы
- •2.6. Список заданий
- •3. Организация хранения данных с позиций эффективности отладки и использования программы
- •3.1. Как лучше хранить, вводить и выводить данные
- •3.2. Использование текстовых файлов для хранения входных и выходных данных
- •3.3. Использование параметров в Паскаль-программах
- •3.4. Задание
- •4. Некоторые методы решения типовых задач
- •4.1. Поиск экстремальных значений (максимума, минимума) в одномерном массиве
- •2. Входные данные
- •3. Выходные данные
- •6. Метод
- •4.2. Поиск элемента, удовлетворяющего заданному условию
- •2. Входные данные
- •6. Метод
- •2. Входные данные
- •3. Выходные данные
- •6. Метод
- •4.3. Задача со сложной логикой
- •2. Входные данные
- •3. Выходные данные
- •6. Метод
- •4.4. Упорядочение одномерного массива
- •3. Выходные данные
- •6_А. Метод включения
- •6_Б. Метод пузырька
- •4.5. Список заданий
- •5. Работа с двумерными массивами (матрицами)
- •5.1. Схема обработки матриц
- •5.2. Ввод и вывод матрицы
- •5.3. Пример решения задачи
- •3. Выходные данные
- •6. Метод
- •5.4. Список заданий
- •6. Оформление алгоритмов в виде процедур
- •6.1. Основные положения
- •6.2. Кодирование процедур на языке Паскаль
- •6.3. Специфика оформления процедур ввода – вывода
- •6.4. Рекомендации по оформлению процедур
- •6.5. Примеры разработки процедур
- •3. Выходные данные
- •6. Метод
- •3 Истина, если все элементы строки больше 1, ложь, в противном случае . Выходные данные
- •7. Описание процедуры
- •8. Кодирование на паскале
- •9. Структурные тесты
- •2. Входные данные
- •3. Выходные данные
- •4. Аномалии не рассматриваем
- •6. Метод
- •7. Алгоритм
- •2. Входные данные
- •3. Выходные данные
- •6. Метод
- •8. Кодирование на паскале
- •2. Входные данные
- •3. Выходные данные
- •6. Метод
- •8. Кодирование на паскале
- •2. Входные данные
- •3. Выходные данные
- •6. Метод
- •7. Описание процедуры
- •8. Кодирование на Паскале
- •6.6. Список заданий
- •7. Внешние модули (unit) в турбо-Паскале
- •7.1. Суть и описание модуля
- •7.2. Связь модуля с другими модулями и главной программой. Область действия описаний объектов
- •7.3. Специфика оформления процедур ввода – вывода в модулях
- •7.4. Примеры оформления процедур во внешних модулях
- •7.5. Задания
- •7.6. Обработка многомодульных программ в среде турбо-Паскаль
- •8. Контрольные вопросы к главе 1
- •К главе 2
- •К главе 3
- •К главе 6
- •К главе 7
- •Заключение
- •Литература
- •Приложение 1. Базовые структуры алгоритмов
- •Приложение 2. Простые типы в Паскале
- •Приложение 3. Структура типов данных в языке Паскаль
- •Содержание
6.2. Кодирование процедур на языке Паскаль
● Синтаксис описания процедур
•• Процедура. Может иметь несколько выходных параметров.
Описание
{заголовок}
procedure<имя процедуры>(<список формальных параметров>);
{раздел описаний локальных объектов}
<описания меток, констант, типов, переменных, процедур и функций>
{раздел операторов}
begin
<операторы>
end;
Обращениек процедуре осуществляется с помощью оператора процедуры, размещаемого в разделе операторов вызывающей программы:
<имя процедуры> (<список фактических параметров>);
•• Функция. Вычисляет единственное значение.
Описание
{заголовок}
function<имя функции>(<список формальных параметров>):<тип результата>;
{раздел описаний локальных объектов }
<описания меток, констант, типов, переменных, процедур и функций>
{раздел операторов}
begin
<операторы>
<имя функции>:=<значение>
end;
Здесь <тип результата>::=<имя простого типа> <имя указателя>
Обращениек функции осуществляется с помощью указателя функции, используемого как операнд некоторого выражения. Вид указателя:
<указатель функции>::=<имя функции>(<список фактических параметров>)
● Список формальных параметров
<список формальных параметров> ::= <секция формальных параметров>; <секция формальных параметров>; … <секция формальных параметров>
<секция формальных параметров>::= <спецификация параметров-значений>
<спецификация параметров-переменных>
<спецификация параметров-процедур>
<спецификация параметров-функций>
Секции формальных параметров разделены знаками "точка с запятой"!
<спецификация параметров-значений>::=
<список идентификаторов>:<имя типа>
<спецификация параметров-переменных>::=
var<список идентификаторов>:<имя типа>
Спецификации параметров-процедур и параметров-функций здесь не рассматриваются.
Список параметров может отсутствовать; тогда процедура является процедурой без параметров.
● Список фактических параметров
Формальные и фактические параметры обязательно должны принадлежать к одному типу.
Правила подстановки (соответсвия фактических параметров формальным) следующие.
-
Формальный параметр
Фактический параметр
параметр-переменная (var)
переменная
параметр-значение
выражение
Фактические параметры разделяются запятыми!
● Передача параметров – значений и параметров – переменных
Механизмы передачи в процедуру параметров-переменных и параметров-значений принципиально отличаются.
При передаче параметров – переменныхперед выполнением процедуры устанавливаетсяссылка на переменную – фактический параметр; иначе говоря, в процедуру передается адрес фактического параметра. Все действия процедуры, таким образом, выполняются над фактическим параметром. Если значение фактического параметра меняется, то это измененное значение доступно в программе после завершения работы процедуры.
Поэтому выходные параметры процедуры необходимо специфицировать как параметры – переменные.
Следствие. Какvarможно описывать входные массивы – параметры с целью экономии памяти.
При передаче параметров – значенийдля их обработки используетсялокальная переменная процедуры. Перед выполнением процедуры значение фактического параметра – значения пересылается в эту переменную; она и обрабатывается. Можно сказать, что параметр – значение локализуется в теле процедуры. По завершении выполнения процедуры значение этой переменной недоступно. Соответствующий фактический параметр не меняется.
● Построение интерфейсов для параметров нестандартных типов. Глобальные типы и константы
Отметим следующее важнейшее синтаксическое правило при описании процедур Паскаля: в спецификациях формальных параметров принципиально указываются толькоименатипов:
. . . <список идентификаторов> : <имятипа> . . .
Поэтому необходимо для любого параметра, не принадлежащего к стандартному типу (целому, вещественному, символьному, логическому) доописания процедуры (т.е. вне процедуры) определить тип этого параметра.
По определению, этот тип по отношению к процедуре будет глобальным.
К этому же типу должны принадлежать и фактические параметры в вызове процедуры.
Например, всегда необходимо определять глобальный тип для параметров – массивов (в разделе type). Если в качестве границ массива используются идентификаторы, эти идентификаторы необходимо описать в разделеconstвне процедуры. По определению, это будут глобальные именованные константы.
При описании внутренних процедур описания глобальных объектов размещаются в соответствующих разделах главной программы (program), описания процедур - в разделе процедур, а вызов процедур - в разделе операторов.
Оформлению процедур в отдельных модулях посвящена гл. 7 пособия.