Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Массивы переменной длины (динамические массивы) и открытые массивы (с неопределёнными границами) в параметрах процедуры.
Обычно размеры массива неизменны и поэтому должны описываться явно с помощью констант, задающих нижнюю и верхнюю границы диапазона, или назва- ний типов. Такие массивы называются статическими. Паскаль позволяет опреде- лять также динамические массивы, размер которых заранее не известен и может меняться во время работы программы. Для описания динамических массивов ука- зывать диапазоны значений его измерений не нужно. type TDynArray: array of integer; Первоначально в переменной, описанной как динамический массив, нет ни одного элемента. Ее размер задается с помощью стандартной процедуры SetLengthQ. В качестве первого параметра указывается имя переменной, в качестве второго — число элементов в массиве. Если новое число элементов больше старого, то новые элементы добавляются в конец массива, а ихзначения исходно будут не определены. Если новое число элементов меньше старого, то последние элементы массива отбра- сываются и теряются. Отсчет элементов динамического массива всегда начинается с нуля. var a: TDynAirray; begin SetLengthl a, 1); а[0]:= 2; Чтобы освободить память, выделенную динамическому массиву, и сделать его длину нулевой, надо соответствующей переменной присвоить значение nil: а:= nil; 'J ЗАМЕЧАНИЕ Ключевое слово языка Паскаль nil обозначает «отсутствие значе- ния». Определение собственных типов данных 43 После этого в массиве а не окажется ни одного значения. В дальнейшем длину массива а можно изменить снова. Как и статические массивы, динамические массивы могут иметь несколько изме- рений. Для каждого из измерений при описании массива надо повторить описание array of. Например, если требуется объявить динамический массив целых чисел с двумя измерениями, надо записать так: type ТЗПАггау = array of array of integer; Далее надо объявить размер этого массива по каждому измерению. Реализация динамических массивов в Паскале позволяет, в отличие от описания статических массивов, задавать разные диапазоны для одного измерения. Например, когда опи- сан двумерный массив (обычно это карта, график, иоле), сначала задается размер по первому измерению (число столбцов): var D: ТЗВАггау; begin SetLength(D,4); Далее нужно указать число элементов для каждого из четырех столбцов (при опи-
сании статических массивов это число считается одинаковым для всех столбцов). Длина соответствующего столбца задается указанием имени массива с номером столбца с помощью процедуры SetLength(): SetLength(D[0], 3); SetLengthl D[l], 5); SetLengthf D[2], 30 ],- SetLengthf D[3], 1); ПОДСКАЗКА Динамические массивы позволяют существенно экономить память и запрашивать ее у операционной системы по мере необходимо- сти, однако работа с ними в программе происходит значительно медленнее, чем со статическими массивами. Передача массивов в качестве параметров Стандартный прием Паскаля состоит в описании массива как типа данных и ука- зании этого типа для параметра подпрограммы. Однако таким способом удается обрабатывать только динамические массивы и статические массивы заранее задан- ной длины. Часто требуется, чтобы подпрограмма не ограничивалась конкретными размерами массива. Например, функция, вычисляющая сумму всех элементов мас- сива, должна уметь получать в качестве параметра массив любой длины. Динами- Подпрограммы 59 ческие массивы использовать не всегда удобно и не всегда правильно, так как они ухудшают эффективность работы программы. В Паскале разрешается указывать в качестве параметров массив с неопределенными границами. procedure Sum(A: array of Byte); ВНИМАНИЕ Данное описание похоже но описание динамического массива, но не является токовым. Это просто форма записи параметра подпро- граммы для передачи статического массива заранее не известной длины. Теперь массив, описанный как var Ar: array [1..25] of Byte; можно без проблем передавать в процедуру Sum: Sum(Ar]; При этом внутри тела подпрограммы действуют следующие правила: О Нумерация элементов массива начинается с нуля (число элементов можно определить с помощью стандартной функции SizeOf); О Функция High возвращает верхнюю границу массива (равную SizeOf()-l); О Копирование массива одним оператором присваивания не разрешается; О Вместо массива в подпрограмму может быть передана обычная переменная соответствующего типа. Внутри подпрограммы она будет представлена в виде массива из одного элемента (с индексом 0).__
|
|||||
Последнее изменение этой страницы: 2017-02-21; просмотров: 233; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.59.231 (0.007 с.) |