Непейвода Н.Н. Программирование. Раздел 3

Непейвода Н.Н. Программирование. Страница 335

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

Оправдана или нет в процедуре MyOwnlnpMatrпередача значения разме­ра матрицы по измерениям через глобальный контекст, как это сделано вы­ше? С точки зрения минимизации текста программы — да: любой параметр требует, чтобы его, вопервых, описывали при определении подпрограммы как формальный параметр, а вовторых, указывали в списке фактических параметров. Но это близорукая позиция. Более основательный критерий — надежность программы. С этой позиции предпочтительнее включить размер матрицы в число параметров процедуры MyOwnlnpMatr — учитывать тре­бование задания значения переменной Nперед вызовом процедуры проще, когда она упоминается в операторе вызова. Конечно, использование пара­метра несколько снизит эффективность программы, но стоит ли жертвовать надежностью ради сокращения программы на однудве команды?

Другая связь процедуры MyOwnlnpMatrс глобальным контекстом — упо­требление (глобальной) переменной Matr. Как и с переменной N, явное упо­минание среди параметров имени массива, получение значения которого есть основная цель процедуры, могло бы увеличить надежность програм­мы. Однако если обсуждаемая процедура предназначена для ввода только одной матрицы, то имя ее массива становится элементом системы поня­тий, с которыми оперирует использующая программа. Тогда предположение о том, что можно "забыть" имя обрабатываемой матрицы в подпрограмме ввода ее значений, становится умозрительным. Вывод: включение имени массива, представляющего матрицу в программе, в список параметров про­цедуры нецелесообразно. Вместе с тем, если процедура используется для ввода нескольких матриц, то употребление имени представляющего массива как outпараметра разумно для реализации данной возможности. Для языка C/C++ вопрос о том, каким механизмом параметризации воспользоваться, не стоит: массив здесь — это просто область памяти, адрес которой есть значение переменной, описанной как массив (т. е. такой, описание которой содержит квадратные скобки). Иными словами, язык предписывает считать имена массивов указателями на них, а потому передача такого имени функ­ции в качестве аргумента по значению дает доступ к указываемой памяти: получается так, что массив (как область памяти) передается по ссылке (с со­ответствующим моделированием эффекта выходного параметра). Перенося эти рассуждения на паскалеподобный язык, становится понятной причина, по которой Matrнадо передавать как переменную (т. е. по ссылке).

Новости

  • 1
  • 2
Prev Next

Ракета "Ангара-А5В" в ближайшее десятилетие не полетит

24.01.2016

Ракета "Ангара-А5В" в ближайшее десятилетие не полетит

Роскосмос не планирует в течение ближайшего десятилетия осуществлять пуск тяжёлой ракеты-носителя А...

Ученые РФ опровергли выводы исследований о вреде ГМО

24.01.2016

Ученые РФ опровергли выводы исследований о вреде ГМО

Исследователи из Института проблем передачи информации (ИППИ РАН) проанализировали несколько самых п...

Летающие "Крокодилы"

24.01.2016

Летающие "Крокодилы"

20 удивительных фактов о боевом вертолете Ми-24.Этот вертолет стал таким же узнаваемым символом сове...

В Аргентине описали новый вид динозавра-гиганта

24.01.2016

О ранее неизвестном виде динозавра, относящемуся к инфраотряду зауроподов, рассказали аргентинские п...

Реклама