- •Билет 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
Билет 17
Объявление и использование процедур. Локальные и глобальные переменные. Способы передачи параметров. Рекурсия в процедурах.
Цикл for.
1) Использование процедур позволяет: 1) упростить логику программ; 2) уменьшить общий объем программы; 3) подпрограммы могут быть использованы повторно при решении других задач. Процедуры объявляются в разделе процедур и функций. Описание процедуры начинается с заголовка, в котором задается имя процедуры и список формальных параметров с указанием их типов; процедура может быть без параметров, тогда в заголовке указывается только её имя. В общем виде: procedure <имя процедуры> (<список формальных параметров>); Список формальных параметров может включать в себя параметры-значения, параметры-переменные, перед которыми ставится зарезервированное слово Var. Тело процедуры в Паскале в точности повторяет структуру главной программы. В нем могут присутствовать разделы описания меток (label), констант (const), типов данных (type), переменных (var) и других процедур и функций, входящих в состав данной процедуры. Наличие вложенных процедур и функций отличает Паскаль и от Си, и от Бейсика. Собственно вычислительная часть тела процедуры начинается со служебного слова begin и заканчивается соответствующим end, после которого в отличие от главной программы следует не точка, а точка с запятой. Досрочный выход из тела функции или тела процедуры осуществляется по оператору exit.
Переменные, описанные в основной программе, являются глобальными по отношению к внутренним процедурам и функциям. Это означает, что они доступны в подпрограммах, описанных внутри основной программы. Переменные, описанные внутри процедур и функций, называются локальными. Они порождаются при каждом входе в подпрограмму и уничтожаются при выходе из этой подпрограммы, т.е. локальные переменные существуют только при выполнении подпрограммы и недоступны в основной программе.
Если имя локальной переменной совпадает с именем глобальной переменной, то при выполнении подпрограммы такая глобальная переменная становится недоступной, т.е. «закрывается» локальной переменной. В программе на Паскале все переменные главной программы являются глобальными. К таковым же относятся и все переменные, объявленные в модулях, подключаемых к программе с помощью директивы Uses. Переменные любого блока могут выступать в качестве глобальных по отношению ко всем вложенным блокам.
Фрагмент программы от заголовка процедуры до завершающей операторной скобки end принято называть блоком. Для Паскаля характерна возможность использования вложенных блоков и с каждым из них можно связать натуральное число, соответствующее уровню вложения. Так, например, в блок A могут быть вложены два последовательных блока первого уровня - блоки B и C. Если же блок C вложен в блок B, входящий, в свою очередь в блок A, то блок C уже имеет уровень два по отношению к блоку A. В теле любого блока могут содержаться обращения к вложенным блокам своего первого уровня или к последовательным блокам такого же уровня. Блок не имеет права напрямую обратиться к своим процедурам второго или более высокого уровня вложенности. Если процедура A обращается к процедуре B, то описание процедуры B должно предшествовать описанию процедуры A. Рекурсия – это способ организации вычислительного процесса, при котором подпрограмма в ходе выполнения составляющих её операторов обращается сама к себе. Рекурсивный алгоритм может вызвать переполнение стека. Если программа включает рекурсивную цепочку из двух или более процедур, одна из них должна объявляться (но не описываться) первой с добавкой forward. Соответствующее объявление носит название опережающего. procedure <имя процедуры>(<параметры>); forward;
Описание опережающей процедуры располагается после других процедур рекурсивной цепочки, но в ее заголовке список параметров может уже не указываться.
Для обращения к процедуре достаточно задать ее имя с последующим набором фактических параметров: <имя процедуры> (<список фактических параметров>); Между фактическими и формальными параметрами должно быть строгое соответствие, то есть 1)одинаковое количество; 2)одинаковый порядок следования; 3)одинаковый тип для соответствующих параметров. При вызове процедуры сначала передаются параметры, при этом параметры-значения передаются по значению, а параметры-переменные – по ссылке.
Отличие этих двух способов передачи параметров заключается в следующем. Параметры по значению содержат копии передаваемых данных. При завершении работы эти копии уничтожаются. Механизм работы с параметрами по значению: вычисляется значение соответствующего параметра, затем оно копируется в стек, оттуда передается в подпрограмму, в подпрограмме копия фактического параметра присваивается формальному параметру. Изменение значений данного параметра внутри процедуры не приводит к изменению значения соответствующего фактического параметра. Следовательно, такие параметры можно использовать только для передачи в процедуру входных данных. Параметры по ссылке содержат не сами значения, а их адреса в памяти. Процедура, зная адрес фактического параметра, может извлечь его, произвольно изменить и разместить по указанному адресу новое значение. В качестве фактического параметра могут быть использованы только переменные. По адресу стараются передавать массивы, т.к. поместить в стек адрес намного эффективнее, чем пересылать туда каждый элемент массива. Следовательно, такие параметры нужно использовать для того, чтобы вернуть результат работы процедуры в вызывающую программу. При использовании параметра-константы перед ним в заголовке процедуры должно стоять зарезервированное слово const. Параметр-константа передается также по ссылке, но значение параметра-константы нельзя изменить внутри процедуры. При попытке сделать это компилятор выдаст ошибку. Следовательно, параметр-константу можно использовать в том случае, когда мы хотим быть уверенными, что фактический параметр не изменится внутри процедуры. При описании выходного параметра перед ним в заголовке процедуры следует ставить зарезервированное слово out. Этот параметр передается по ссылке, его можно использовать только для возврата результата, так как память, занимаемая соответствующим фактическим параметром, в момент обращения к процедуре очищается.
2)Цикл For – это цикл с параметром. For – счетный оператор цикла. Такой цикл следует использовать в том случае, когда заранее известно число повторений выполнения последовательности операторов. Существуют два варианта оператора. Первый вариант – с увеличением счетчика: for <счетчик> := <начальное значение> to <конечное значение> do <оператор>; Второй вариант - с уменьшением счетчика: for <счетчик> := <начальное значение> downto <конечное значение> do <оператор>. Счетчиком является переменная порядкового типа – параметр цикла. Начальное и конечное значение – выражения того же типа. Оператором, выполняемым в цикле и образующим тело цикла, может являться также составной оператор. Оператор for действует следующим образом. В начале вычисляются начальное и конечное значение счетчика. Далее счетчику присваивается начальное значение. Затем значение счетчика сравнивается с конечным значением. Пока счетчик меньше или равен конечному значению (либо >= для downto), выполняется очередная итерация цикла. В противном случае происходит выход из цикла. Выполнение очередной итерации включает в себя сначала выполнение тела цикла, а затем присвоение счетчику цикла следующего значения. Если в первом варианте начальное значение больше конечного или во втором варианте меньше конечного, то цикл не выполнится ни разу. Цикл выполняется для to <конечное значение> - <начальное значение> + 1 раз. Если внутри одного оператора цикла встречается другие операторы цикла, то такие циклы называются вложенными. Внутренний цикл должен целиком размещаться внутри внешнего и не пересекаться с ним.
Для гибкого управления циклическими операторами for, while и repeat в состав Object Pascal включены две процедуры без параметров:
break - реализует немедленный выход из цикла; действие процедуры заключается в передаче управления оператору, стоящему сразу за концом циклического оператора;
continue - обеспечивает досрочное завершение очередного прохода цикла; эквивалент передачи управления в самый конец циклического оператора.