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

Билет 11

  1. Массивы и операции над ними. Чем отличаются массивы в языке Паскаль от массивов в других известных вам языках?

  2. Описание и употребление констант.

1) Массив – это набор упорядоченных однотипных компонентов. Компоненты массива снабжены индексами. Использование массивов позволяет заменить большое количество индивидуальных имен каждого объекта одним групповым именем набора данных. Массивы могут быть статическими, то есть иметь фиксированное число компонентов и динамическими, то есть количество элементов в них можно изменять в ходе программы. Статическим массивом называют набор данных, для хранения которого перед началом функционирования программы выделяется фиксированное место в памяти, освобождаемое после завершения работы программы. Статические тип-массивы задаются с помощью зарезервированного слова array, после которого следует указать в квадратных скобках тип индексов элементов массива, затем после зарезервированного слова of, тип самих элементов.

Type

<имя типа> = array[<тип индекса(ов)>] of <тип компонентов>;

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

Размерность массива может быть любой, компоненты могут быть любого типа, индексы могут быть любого порядкового типа, имеющего мощность не более 2 Гб. Обычно в качестве индексного типа используется тип-диапазон, в котором задаются границы изменения индексов. В качестве типа элементов массива могут быть использованы также массивы. Глубина вложенности не ограничена, размерность не ограничена. В памяти элементы массива следуют друг за другом так, что при переходе от младших адресов к старшим меняется самый правый индекс массива. В Паскале можно придать массиву начальные значения, инициализация производится в разделе const:

const

a:string[7]='Привет';

d:array [1..10] of integer=(1,2,3,4);

f:array [1..2,1..3] of integer=((1,2,3),

(4,5,6));

В Object Pascal можно одним оператором присваивания передать все элементы одного массива другому массиву того же типа.

Например var a,b:array[1..10] of integer – массивы одного типа. Но при этом var a:array[1..10] of integer; b:array[1..10] of integer; - массивы разных типов, оператор присваивания выдаст ошибку. Над массивами не определены операции отношения.

Доступ к элементам массива осуществляется указанием имени массива, за которым в квадратной скобке помещается значение индекса (индексов) элемента. В общем случае каждый индекс компонента может быть задан выражением соответствующего типа.

Динамические массивы задаются без указания границ индексов: Var <имя массива>: array of <тип>; Распределение памяти и указание границ индекса осуществляется в ходе выполнения программы путем инициации массива с помощью процедуры SetLength(<имя массива>,<длина массива>); после выполнения этой процедуры массив получает память для размещения значений своих элементов. Нижняя граница индексов всегда равна 0. При желании длину массива можно изменить при повторном использовании процедуры SetLength. При этом в памяти резервируется место для нового массива, элементы старого массива переносятся в новый. После чего память, выделенная прежнему массиву, освобождается. Для сокращения затрат времени лучше сразу создать массив максимальной длины. Если новая длина будет больше исходной, в массив добавятся новые элементы с нулевыми значениями; если меньше, то последние элементы будут отброшены. В отличие от обычных массивов, динамические массивы могут иметь разную длину по второму и следующим измерениям. Фактически идентификатор динамического массива ссылается на указатель, содержащий адрес первого байта памяти, выделенной для размещения массива. Удаление из памяти динамического массива может осуществляться тремя способами:

1)Присвоить переменной значение nil;(a:=nil) 2)Использовать процедуру Finalize;(finalize(a)) 3)Установить нулевую длину(SetLength(a,0)

Если массив передается в подпрограмму, то необходимо первоначально описать его тип. Динамический массив передается в подпрограмму, в которой соответствующий формальный параметр объявлен как открытый массив. Открытый массив аналогичен динамическому. В подпрограмме реальная длина массива может быть определена с помощью функции Length – длина массива, либо при помощи функции High – наибольшее значение индекса. High(<Массив>)=Length(<Массив>)-1. В качестве фактического параметра для открытого массива может выступать и статический массив. Если минимальный индекс в статическом массиве не равен 0, то первый элемент статического массива все равно будет соответствовать нулевому элементу открытого массива. При использовании открытых массивов вы должны включить соответствующее указание компилятору – {$P+}. Во-первых, открытые массивы могут быть только одномерными. Во-вторых, их элементы передаются через стек, что замедляет работу программы и может послужить причиной переполнения стека.

2) Константы в Pascal делятся на два вида: обычные и именованные. Обычная константа – это число, символ, строка или логическое значение. Числовые константы могут быть целыми или дробными, положительными или отрицательными. Дробные константы могут быть записаны в виде числа с плавающей точкой. Строковые и символьные константы заключаются в одинарные кавычки. Символ может быть записан при помощи указания его кода, перед которым ставится #. Логических констант две – true, false. Именованная константа отличается от обычной тем, что у неё есть имя. Поэтому вместо указания в программе значения константы можно использовать её имя. Это удобно в том случае, когда константа многократно используется или имеет большую длину. Объявление именованной константы должно быть помещено в раздел описания констант, который начинается со служебного слова const. В общем виде объявление константы выглядит следующим образом: <имя константы>=<значение>; Именованная константа может быть определена с помощью так называемого константного выражения: <имя константы> =<константное выражение>; В константном выражении могут быть использованы обычные константы, ранее описанные именованные константы, знаки операций, а также некоторые стандартные функции. Вычисляются значения константных выражений на этапе компиляции. Использование именованных констант делает текст программы более осмысленным и облегчает при необходимости изменение константы во всем тексте программы.

Константы – данные программы, которые не могут изменять свое значение во время выполнения программы. Но в этом правиле есть исключение – типизированные константы. Типизированная константа определяется следующим образом: <константа>:<тип>=<константное выражение>; Значения типизированных констант можно изменять во время выполнения программы, но при условии, что была выполнена директива компилятора {$J+}, действующая по умолчанию. Если была выполнена директива {$J-}, то изменять значения типизированных констант нельзя и они превращаются в обычные именованные константы.

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