TURBO pascal v7.0
 
 

Процедуры         
и функции

 

 

 
Параметры массивы и строки

                    

      Существует одно обстоятельство, которое следует учитывать  при  выборевида формальных параметров. Как уже говорилось,  при  объявлении  параметра-значения осуществляется  копирование  фактического  параметра  во  временную память.  Если  этим  параметром  будет  массив   большой   размерности,   то существенные затраты  времени  и  памяти  на  копирование  при  многократныхобращениях к подпрограмме могут стать решающим доводом в  пользу  объявлениятакого  параметра  параметром-переменной  или  передачи   его   в   качестве глобальной переменной.                       

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

                Procedure S (а : array (1..10] of real);

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

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

      Например:                       

      type    mas = array [1..10] of real;
      .......                       
      PROCEDURE S (a : mas);                       

      Поскольку строка является фактически своеобразным массивом, ее передача вподпрограмму осуществляется аналогичным образом:                       

      type     intype =string[15];
            outype = string[30];                       
      FUNCTION St (i : intype) : outype;                       

      Требование описать любой  тип-массив  или  тип-строку  перед  объявлением подпрограммы на  первый  взгляд  кажется  несущественным.  Действительно,  в рамках простейших вычислительных задач  обычно  заранее  известна  структура всех используемых в программе данных, поэтому статическое описание  массивов не вызывает проблем. Однако разработка  программных  средств  универсального назначения связана со значительными трудностями. По существу,  речь  идет  о том, что в ТУРБО ПАСКАЛЕ невозможно использовать в подпрограммах  массивы  с «плавающими»  границами  изменения  индексов.  Например,  если   разработана программа, обрабатывающая матрицу из 10 х 10  элементов,  то  для  обработки матрицы  из  9  х  11  элементов   необходимо   переопределить   тип,   т.е. перекомпилировать всю программу. Этот недостаток, как и отсутствие  в  языке средств  обработки исключительных  ситуаций  (прерываний),  унаследован  из стандартного  ПАСКАЛЯ  и  представляет  собой  объект  постоянной  и  вполне заслуженной его критики. Разработчики ТУРБО ПАСКАЛЯ не рискнули  кардинально изменить свойства  базового  языка,  но,  тем  не  менее,  включили  в  него некоторые средства, позволяющие  в  известной  степени  смягчить  отмеченные недостатки.                       

      Прежде всего, в среде ТУРБО ПАСКАЛЬ можно  установить  режим  компиляции, при котором  отключается  контроль  над  совпадением  длины  фактического  и формального параметра-строки. Это позволяет легко решить вопрос  о  передаче подпрограмме  строки  произвольной  длины.  При  передаче  строки   меньшего размера формальный  параметр  будет  иметь  ту  же  длину,  что  и  параметр обращения; передача строки  большего  размера  приведет  к  ее  усечению  до максимального размера формального параметра. Следует сказать,  что  контроль включается только при передаче строки, объявленной как формальный  параметр-переменная. Если  соответствующий  параметр  объявлен  параметром-значением, эта опция игнорируется, и длина не контролируется.

Главная страница || Оценивание || Библиография || Автор
Используются технологии uCoz