- •Билет 1
- •Билет 2
- •Билет 3
- •Билет 4
- •2) В отличие от оператора if, оператор case позволяет выбрать и выполнить один оператор не из двух, а из нескольких операторов. В общем случае оператор case может быть записан следующим образом:
- •Билет 5
- •Билет 6
- •Билет 7
- •Билет 8
- •Билет 9
- •Билет 10
- •Билет 11
- •Билет 12
- •Билет 13
- •Билет 14
- •Билет 15
- •Билет 16
- •Билет 17
- •Билет 18
- •Билет 19
- •2) Выражения различают по типу их результата: целые, вещественные, символьные, логические, строковые и т.Д. Выражения, имеющие результат целого и вещественного типа, называются арифметическими.
- •Билет 20
- •Билет 21
- •Билет 22
- •2)Оператор repeat имеет следующий формат:
- •Билет 23
- •2) В Pascal имеются две основных процедуры ввода read и readln, которые используются для чтения данных, вводимых с клавиатуры. Формат этих процедур таков:
- •Билет 24
- •Билет 25
- •Билет 26
Билет 22
Открытые и динамические массивы. Запрос и освобождение памяти во время работы программы.
Цикл repeat.
1) Динамические массивы задаются без указания границ индексов: 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)Оператор repeat имеет следующий формат:
Repeat
< оператор! >;
< оператор2 >; ...;
< onepaтopN >
until < логическое выражение>;
Выполняется оператор repeat следующим образом. В начале выполняется группа операторов – оператор1, оператор2,..., onepaтopN. Затем вычисляется значение логического выражения. Если оно равняется true, то цикл прекращается, в противном случае выполняется следующая итерация цикла. Поскольку условие прекращения цикла проверяется в конце цикла, то операторы, образующие тело цикла, выполняются по крайней мере один раз. В отличие от операторов for и while, синтаксис которых предусматривает выполнение в цикле только одного оператора, в тело цикла оператора repeat может входить произвольное количество операторов. Это означает, что использование операторных скобок begin...end в операторе repeat не обязательно, хотя их присутствие не будет ошибкой.
Для правильного выхода из цикла условие выхода должно меняться внутри операторов, составляющих тело цикла while или repeat... until. Следующий цикл никогда не завершится «естественным» способом:
Repeat
…
until False;
Для гибкого управления циклическими операторами for, while и repeat в состав Object Pascal включены две процедуры без параметров:
break - реализует немедленный выход из цикла; действие процедуры заключается в передаче управления оператору, стоящему сразу за концом циклического оператора;
continue - обеспечивает досрочное завершение очередного прохода цикла; эквивалент передачи управления в самый конец циклического оператора.