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

6.3. Специфика оформления процедур ввода – вывода

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

Первым вопросом в связи с этим является вопрос о том, что считать входными и выходными данными подзадач ввода – вывода. При оформлении ввода и вывода в виде процедур этот вопрос является определяющим.

Первый напрашивающийся ответ таков. Если в подзадаче вводится некоторая совокупность данных, то входные данные подзадачи – эта совокупность данных во внешней форме (на внешнем носителе), а выходные – эта совокупность данных во внутреннем представлении (в оперативной памяти).

Входная форма связана с этой подзадачей и является схемой, согласно которой описывается ввод.

Однако все преобразования данных «по существу» (преобразования значений, приводящие к результату, «счет») осуществляются компьютером тольков оперативной памяти. Для подзадач, составляющих собственно решение, входными считаются получаемые подзадачей значения, а выходными – формируемые значения (практически так же, как и при решении задач без компьютера). Они же образуют интерфейс подзадачи, а в случае оформления ее решения в виде процедуры будут представлять параметры последней.

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

Целесообразно остановиться на такой трактовке и расценивать как «нормальные», т.е. подлежащие передаче в процедуру и обработке, только данные во внутреннем представлении. Тогда подзадача ввода не будет иметь входных данных, но будет по-прежнему связана со входной формой.

Ситуация с выводом обратная.

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

Режим диалога. Здесь сложностей не возникает.

Процедура ввода некоторой совокупности данных будет имеет только выходные данные, представленные этой совокупностью, а процедура вывода – только входные.

К специфическим моментам относится вывод приглашений перед заданием входных данных. Эти операции могут расцениваться как служебные операции, а сами приглашения – как служебные элементы входной формы.

Использование файловдля хранения данных.

Для определенности будем говорить о вводеизодногофайла,независимом от физического имени файла, т.е. о ситуации, когда физическое имя задается при очередном запуске программы как параметр или запрашивается программой.

Здесь появляются элементы, связанные не с решением задачи, а только с техническими аспектами использования файлов:

  • файловые переменные;

  • имя файла;

  • операции назначения, открытия и закрытия файлов.

Если ввод или вывод не оформляется в виде процедуры, эти элементы со спокойной совестью можно отнести к служебным.

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

•• Возможный статус файловой переменной:

  • объявить ее вне процедуры как глобальную;

  • локализовать в теле процедуры;

  • передать как параметр.

•• Размещение операции назначения:

  • вне процедуры;

  • внутри процедуры.

•• Размещение операций открытия и закрытия:

  • вне процедуры;

  • внутри процедуры.

Комбинация этих альтернатив формально дает следующие варианты.

Файловая переменная

Операции назначения

Операции открытия

Комментарии

Глобальная

Вне процедуры

Вне процедуры

Глобальная

Вне процедуры

Внутри процедуры

Нецелесообразно

Глобальная

Внутри процедуры

Вне процедуры

Невозможно

Глобальная

Внутри процедуры

Внутри процедуры

Бессмысленно

Параметр

Вне процедуры

Вне процедуры

Параметр

Вне процедуры

Внутри процедуры

Нецелесообразно

Параметр

Внутри процедуры

Вне процедуры

Невозможно

Параметр

Внутри процедуры

Внутри процедуры

Бессмысленно

Локальная

Вне процедуры

Вне процедуры

Невозможно

Локальная

Вне процедуры

Внутри процедуры

Невозможно

Локальная

Внутри процедуры

Вне процедуры

Невозможно

Локальная

Внутри процедуры

Внутри процедуры

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

Обсуждению подлежат оставшиеся варианты, представленные в табл. 6.1.

Таблица 6.1

Файловая переменная

Операции назначения

Операции открытия

1

Глобальная

Вне процедуры

Вне процедуры

2

Параметр

Вне процедуры

Вне процедуры

3

Локальная

Внутри процедуры

Внутри процедуры

Оценка каждого из вариантов зависит не только от особенностей ввода – вывода в задаче, но и от оформления процедуры – внутренней или в отдельном модуле.

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

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

•• Если процедура оформляется как внутренняя,то и с точки зрения корректности, и с точки зрения здравого смысла все варианты сопоставимы.

Процедуры вариантов 1 и 3 должны содержать в списке параметров только выходные величины (введенные входные данные).

Процедуры варианта 2 будут содержать служебный входной параметр– имя файловой переменной. Однако передавать имя файловой переменной всегда необходимо какпараметр-переменную.Если параметром процедуры является файловая переменная, перед ней всегда должен стоять описатель var.

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

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

Пример оформления процедур ввода – вывода как внутренних приведен в § 6.5 (пример 2, с. 93).

•• Размещение процедур ввода – вывода во внешних модулях рассмотрено в § 7.3.

Резюме

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

Если процедура использует файл:

  • определить состав входных – выходных данных, исходя из содержания подзадачи; это будут «содержательные» параметры процедуры, т.е. те, которые задаются в задаче или являются результатами ее решения;

  • принять решение о размещении процедуры – в отдельном модуле или в виде внутренней процедуры в вызывающем модуле;

  • определить способ доступа процедуры к файлу – доступ к уже открытому файлу или открытие (и закрытие) файла внутри процедуры;

  • определить «технические» параметры процедуры (таковыми могут быть файловая переменная или имя файла; см. § 7.3).

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]