Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lab_5_Informatika

.pdf
Скачиваний:
6
Добавлен:
29.03.2015
Размер:
321.53 Кб
Скачать

Министерство образования и науки Российской Федерации Пермский национальный исследовательский политехнический университет

Кафедра ИТАС

Альмухаметов В.Ф., Лясин В.Н., Полевщиков И.С.

Информатика

Методическое пособие к выполнению лабораторной работы №5 по теме «Операторы ветвления»

(для студентов 1 курса электротехнического факультета)

Пермь, 2013 год

2

Цель работы

Научиться использовать операторы ветвления в программах на языке Турбо-Паскаль.

Краткие теоретические сведения Базовые конструкции структурного программирования [1]

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

называемых следованием, ветвлением и циклом.

Следованием называется конструкция, представляющая собой последовательное выполнение двух или более операторов (простых или составных).

Ветвление задает выполнение либо одного, либо другого оператора в зависимости от выполнения какого-либо условия.

Цикл задает многократное выполнение оператора.

Следование, ветвление и цикл называют базовыми конструкциями структурного программирования. Их особенностью является то, что любая из них имеет только один вход и один выход, поэтому они могут вкладываться друг в друга. Например, цикл может содержать следование из нескольких ветвлений, каждое из которых включает вложенные циклы.

Целью использования базовых конструкций является получение программы простой структуры. Такую программу легко читать, отлаживать и при необходимости модифицировать. Язык Паскаль способствует созданию хорошо структурированных программ, поскольку базовые конструкции реализуются в нем непосредственно с помощью соответствующих операторов.

Операторы ветвления [1]

3

Условный оператор if и оператор варианта case применяются для того чтобы в зависимости от конкретных значений исходных данных обеспечить выполнение разных последовательностей операторов.

Оператор if обеспечивает передачу управления на одну из двух ветвей вычислений, а оператор case — на одну из произвольного числа ветвей.

Условный оператор if [1, 2]

Условный оператор if используется для разветвления процесса вычислений на два направления. Формат оператора:

if выражение then оператор_1 else оператор_2;

Словесно алгоритм, соответствующий условному оператору, можно записать следующим образом:

1)Сначала вычисляется выражение логического типа (т.е. некоторое условие), следующее за ключевым словом if.

2)Если это выражение имеет значение true, то выполняется первый оператор, т.е. оператор, следующий за ключевым словом then.

3)Иначе, если это выражение имеет значение false, то выполняется второй оператор, т.е. следующий за ключевым словом else.

4)После этого управление передается на оператор, следующий за условным.

На рис. 1 представлена блок-схема алгоритма, соответствующего

выполнению условного оператора.

4

Рис. 1. Блок-схема алгоритма, реализуемого условным оператором

Oператоры, входящие в состав условного оператора, могут быть простыми или составными. Составной оператор (блок) обрамляется ключевыми словами begin и end. Блок применяют в том случае, когда по какой-либо ветви требуется выполнить несколько операторов: ведь иначе компилятор не сможет понять, где заканчивается ветвь и начинается следующая часть программы.

Ветвь else в условном операторе может отсутствовать.

Следует отметить, что отсутствие ключевых слов begin и end в

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

Рассмотрим примеры условных операторов.

Пример 5.1.

if x>5 then y:=10;

В данном примере отсутствует ветвь else. Такая конструкция называется пропуском оператора.

5

Оператор выполняется следующим образом:

1)Сначала вычисляется значение логического выражения x>5.

2)Если значение выражения x>5 равно true, то выполняется оператор y:=10. А уже затем будет выполняться некоторый оператор,

следующий за условным.

3) Если значение выражения x>5 равно false, то будет выполняться некоторый оператор, следующий за условным.

Например, если x равно 7, то значением выражения x>5 будет true,

и затем переменной y будет присвоено значение 10.

Если же, к примеру, x равно 4, то значением выражения x>5 будет false, и, следовательно, начнет выполнение оператор, следующий за условным.

Пример 5.2.

if (a<b) and (с>=-7)

then a:=(a+c)/b

else begin

b:=b*a; a:=-c

end;

Оператор выполняется следующим образом:

1) Сначала вычисляется значение логического выражения

(a<b) and (с>=-7).

2) Если значение данного выражения x>5 равно true, то выполняется оператор

a:=(a+c)/b

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

6

3) Если значение выражения равно false, то будет выполняться

составной оператор, обрамленный ключевыми словами begin и end:

begin

b:=b*a;

a:=-c

end;

Пример 5.3.

if a<b then

if a<c then min:=a else min:=c

else

if b<c then min:=b else min:=c;

Вэтом примере вычисляется наименьшее из значений трех переменных a, b и с.

Вданном примере мы имеем дело с вложенными условными операторами. Однако, при программировании на языке Турбо-Паскаль большого количества вложенных условных операторов при возможности следует избегать, потому что они делают программу нечитабельной.

Сначала сравниваются между собой переменные a и b. В случае, если a меньше чем b, происходит сравнение переменных a и c. Если переменная a оказалась меньше и переменной c, то она признается наименьшей и ее значение присваивается переменной min для дальнейшей работы. В

противном случае наименьшей признается переменная c.

Если же переменная b в действительности меньше чем a, то значение переменной b сравнивается со значением переменной c, и если переменная b оказалась меньше c, то она признается наименьшей. В противном случае наименьшей признается переменная c.

В программах, написанных на языке Турбо-Паскаль, следует избегать проверки вещественных величин на равенство. Вместо этого лучше сравнивать модуль их разности с некоторым малым числом. Это связано с погрешностью представления вещественных значений в памяти. Значение

7

величины, с которой сравнивается модуль разности, следует выбирать в зависимости от решаемой задачи и точности переменных, участвующих в выражении. Пример (с комментариями):

const eps = 1e-6;{Требуемая точность вычислений} var x, y : real;

...

if (x = y) then

writeln('x и y равны'); {Ненадежно!} if (abs(x - y) < eps) then

writeln('x и y равны'); {Рекомендуется}

Оператор варианта case [1]

Оператор варианта (выбора) предназначен для разветвления процесса вычислений на несколько направлений. Формат оператора:

case выражение of

константы_1 : оператор_1;

константы_2 : оператор_2;

константы_n : оператор_n; else оператор;

end;

Алгоритм, соответствующий оператору case, можно словесно записать следующим образом:

1)Выполнение оператора выбора начинается с вычисления выражения.

2)Затем управление передается на оператор, помеченный константами, значение одной из которых совпало с результатом вычисления выражения.

3)После этого выполняется выход из оператора выбора.

8

4)Если совпадения не произошло, выполняются операторы,

расположенные после слова else, а при его отсутствии управление

передается оператору, следующему за case.

На рис. 2 приведена блок-схема алгоритма, реализуемого оператором

case.

Рис. 2. Блок-схема алгоритма, реализуемого оператором case

Выражение после ключевого слова case должно быть порядкового типа, константы - того же типа, что и выражение. Чаще всего после ключевого слова case используется имя переменной. Перед каждой ветвью оператора можно записать одну или несколько констант через запятую или операцию диапазона, обозначаемую двумя идущими подряд точками.

Если по какой-либо ветви требуется записать не один, а несколько операторов, они заключаются в блок с помощью ключевых слов begin и end.

Рассмотрим примеры:

Пример 5.4.

case i of

1 : x:=y*10;

9

2 : y:=x/3;

3 : x:=x+y;

4 : y:=y-x;

end;

Подразумевается, что в данном примере переменная i типа integer.

Если переменная i принимает значение 1, то выполняется оператор

x:=y*10;

Если переменная i принимает значение 2, то выполняется оператор

y:=x/3;

Если переменная i принимает значение 3, то выполняется оператор

x:=x+y;

Если переменная i принимает значение 4, то выполняется оператор

y:=y-x;

Если i принимает какое-либо другое значение (например, 5), т.е.

совпадения не произошло, то управление передается оператору,

следующему за case, т.к. ключевое слово else отсутствует.

Пример 5.5.

case i+j of

1 :

x:=y+3;

2,3 :

y:=x/2;

4..7:

x:=x-y;

8,9:

begin

 

y:=sqr(2*x);

 

x:=sqrt(y/5);

 

end;

else

x:=y;

end;

 

В данном

примере выражение i+j представляет собой сумму

переменных i и j типа integer.

Если выражение i+j принимает значение 1, то выполняется оператор

10

x:=y+3;

Если выражение принимает значение 2 либо 3, то выполняется оператор

y:=x/2;

Если выражение принимает значение из диапазона 4..7 (например,

значение 6), то выполняется оператор

x:=x-y;

Если выражение принимает значение 8 или 9, то выполняется составной оператор

begin

y:=sqr(2*x);

x:=sqrt(y/5);

end;

Если выражение принимает какое-либо другое значение (например,

11), т.е. совпадения не произошло, то выполняется оператор,

расположенный после слова else:

x:=y;

Стиль программирования [3]

Работая над программой, программист, особенно начинающий,

должен хорошо представлять, что программа, которую он разрабатывает,

предназначена, с одной стороны, для пользователя, с другой — для самого программиста. Текст программы нужен прежде всего самому программисту,

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

Поэтому для того, чтобы работа была эффективной, программа должна быть легко читаемой, ее структура должна соответствовать структуре и алгоритму решаемой задачи. Как этого добиться? Надо следовать правилам хорошего стиля программирования. Стиль программирования — это набор правил, которым следует программист (осознано или потому, что «так

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