Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы к курсу программирования.doc
Скачиваний:
4
Добавлен:
09.09.2019
Размер:
878.08 Кб
Скачать

18. Операторы Паскаля: оператор безусловного перехода, метки. Оператор безусловного перехода goto

Оператор безусловного перехода goto имеет следующую форму:

goto метка

Он переносит выполнение программы к оператору, помеченному меткой метка.

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

label1: оператор

Метки должны быть описаны в разделе меток с использованием служебного слова label:

label 1,2,3;

Например, в результате выполнения программы

label 1,2; begin   var i := 5; 2: if i<0 then goto 1;   write(i);   Dec(i);   goto 2; 1: end.

будет выведено 543210.

Метка должна помечать оператор в том же блоке, в котором описана. Метка не может помечать несколько операторов.

Переход на метку может осуществляться либо на оператор в том же блоке, либо на оператор в объемлющей конструкции. Так, запрещается извне цикла переходить на метку внутри цикла.

Использование оператора безусловного перехода в программе считается признаком плохого стиля программирования. Для основных вариантов использования goto в язык Паскаль введены специальные процедуры: break - переход на оператор, следующий за циклом, exit - переход за последний оператор процедуры, continue - переход за последний оператор в теле цикла.

Единственный пример уместного использования оператора goto в программе  - выход из нескольких вложенных циклов одновременно. Например, при поиске элемента k в двумерном массиве:

var a: array [1..10,1..10] of integer; ...   var found := False;   for var i:=1 to 10 do   for var j:=1 to 10 do     if a[i,j]=k then      begin       found := True;       goto c1;     end; c1: writeln(found);

 

19.Подпрограммы в Паскале.

Подпрограмма – Это программа, которая является вспомогательной для основной программы. У неё также есть свой переменные и константы. Она может содержать те же инструкции, что и основная программа.

Для чего нужны подпрограммы?

1)      Когда один и тот же фрагмент повторяется несколько раз, удобно написать подпрограмму и вызывать её в тех местах, где она необходима. 2)      Улучшает понимание программы.

Запомните: Подпрограммы записываются в разделе описания программы (до раздела var основной программы)

У подпрограмм два вида переменных – формальные и фактические. Формальные – Это, те переменные, которые записаны при создании подпрограммы. Фактические – Это, те переменные, которые записываются при вызове функций. То есть формальные => в фактические.

Виды подпрограмм. Существует два вида подпрограмм для паскаля – это функций(function) и процедуры(procedure).

Запомните: Отличие между функцией и процедурой в том: 1)       Что функций есть свой тип, а процедуры нет. 2)      Функция возвращает значение, процедура нет.

Для упрощения понимания отличия между функцией и процедурой. Напишем одинаковые программы, только одну с помощью функций, а другую с помощью процедуры.

Пример задачи: Написать функцию, которая сравнивает два числа и возвращает значение в виде знаков <, >, =.

Function znak(var a,b: integer): char;

znak – имя функций. char – тип функции(она, как переменная имеет свой тип) a,b – формальные переменные типа integer char – Функция должна вывести результат  типа символ.

Далее  var – основной программы. begin – основная программа.

zn:=znak(x,y); – вызов функции с фактическими переменными.

x – фактическая переменная для формальной переменной a y – фактическая переменная для формальной переменной b

Запомните: 1) Фактические переменные могут быть разными. 2) Фактические переменные должны стоять в том же порядке, что и формальные.

a,b – формальные переменные x,y – фактические переменные, они заменяются при вызове функций на формальные переменные a,b

Теперь процедура.

Procedure znak(var a,b:integer;  var zn:char);

Обратите внимание.  В функций function:char, а в процедуре переменная zn: char.Функция сама, какого либо типа, а в процедуре нам пришлось вводить дополнительную переменную для вывода знака. Вот главное отличие function от procedure. У функции ЕСТЬ свой тип, а у процедуры НЕТ.

Сравните, как вызывается функция и процедура в основной программе.

znachok - фактическая переменная для формальной переменной zn

Обязательно просмотрите следующие уроки, на которых подробно по отдельности  описаны подпрограммы.