Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


I. Вложенные операторы ветвления.



Внутри ветвления могут находиться как линейные фрагменты алгоритма, так и другие ветвления.
В языке Visual Basic.NET вложенные операторы ветвления If имеют вид:

Вариант 1 Вариант 2

If < условие 1> Then < Операторы 1> Elself < условие 2> Then < Операторы 2> End If if< условие 1> then < Операторы 1> elseif< условие 2> then < Операторы 2> ... elseif< условие n-1> then < Операторы n-1> else < Операторы n> endif

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

  • если (If) выполняется < условие 1>, то ( Then) будет выполнена последовательность операторов < Блок 1>,
  • иначеесли ( ElseIf ) выполняется < условие 2>, то ( Then) будет выполнен < Блок 2> ,

и т.д.,

  • иначе ( Else ) - < Блок N>

 

Вложенные операторы ветвления

Интересная проблема возникает, если допускается вложение двухвариантных конст­рукций ветвления. Рассмотрим следующий фрагмент кода, напоминающего программу на языке Pascal:

ifsum= 0then

ifcount= 0thenresult: = 0

elseresult: = 1

Эту конструкцию можно интерпретировать двумя различными способами в зависи­мости от того, соответствует оператор else первому оператору then или второму. За­метим, что структурированное расположение текста указывает на то, что оператор else принадлежит первому оператору then. Однако такое расположение текста не влияет на семантику в большинстве современных языков и, следовательно, игнорируется их ком­пиляторами.

Разработчики языка ALGOL60 решили использовать синтаксис, а не правило, для то­ го чтобы связывать операторы else с операторами then. В частности, не допускалось вложение оператораifнепосредственно в оператор then. Если возникала необходимость вложить операторifв оператор then, он должен был быть заключен в составной оператор. Например, если конструкция ветвления, приведенная выше, должна была связать оператор else со вторым оператором then, в языкеALGOL60 это следовало за­ писать следующим образом:

if sum = 0 then

Begin

if count = 0 then result: = 0

else result: = 1

End

Если оператор else следовало связать с первым оператором then, то это можно было записать так:

if sum = 0 then

Begin

if count = 0 then result: = 0

End

elseresult: = 1

Специальные слова и замыкание оператора ветвления

Рассмотрим синтаксическую структуру оператора ifв языкеPascal. Операторthenначинается с зарезервированного слова then, а оператор else— с зарезервированного слова else. Если оператор then представляет собой отдельный оператор и присутству­ет оператор else, то зарезервированное слово else фактически отмечает конец опера­тора then, несмотря на то, что в этом нет никакой необходимости. Если оператор then является составным, он завершается зарезервированным словом end. Однако, если по­следний оператор в операторе if (либо then, либо else) не является составным, то не существует синтаксического способа для того, чтобы отметить конец всей конструкции ветвления. Использование ключевого слова для этой цели могло бы разрешить вопрос, связанный с семантикой вложенных операторов ветвления, и увеличить надежность кон­струкции.

 

18. Многовариантные операторы ветвления.

Многовариантное ветвление - оператор switch

 

Оператор switch позволяет организовать выбор одного значения из нескольких вариантов:

Scanner in = new Scanner(System.in);

 

System.out.print(" Select an option (1, 2, 3, 4) " );

 

int choice = in.nextInt();

 

switch (choice) {

case 1:

...

break;

case 2:

...

break;

case 3:

...

break;

case 4:

...

break;

default:

// неверный выбор

...

break;

}

Выполнение начинается с метки case = choice, и продолжается до ближайшего оператора break или до конца оператора switch. Если ни одна метка не совпадает со значением переменной, выполняется раздел default (если он предусмотрен).

Метка case должна быть целочисленной, строки и вещественные числа проверять нельзя:

String input =...;

 

switch (input) { // ошибка

case " A": // ошибка

...

break;

...

}

 

Многовариантное ветвление, оператор switch

Конструкция if else может оказаться неудобной, если вы стоите перед необходимостью сделать выбор из нескольких вариантов. Оператор switch обеспечивает ясный способ переключения между различными частями программного кода в зависимости от значения одной переменной или выражения. Общая форма этого оператора такова:

switch ( choice ) {

case значение1:

break;

case значение2:

break;

case значением:

break;

default:

}

Выполнение кода начинается с метки case, соответствующей значению выражения choice, и продолжается до следующего оператора break или конца оператора switch. Если ни одна метка не совпадает со значением переменной, выполняется раздел default, если он предусмотрен.

Заметим, что метка case должна быть целочисленной. Нельзя проверять строки. Все значения case должны быть уникальными литералами. Если в двух операторах case будут одинаковые значения, то транслятор выдаст сообщение об ошибке.

Отметим, что оператор default необязателен. В случае, когда ни один из операторов case не соответствует значению выражения и в switch отсутствует оператор default выполнение программы продолжается с оператора, следующего за оператором switch.

Если case не заканчивается оператором break, то после текущего раздела case будет выполняться следующий. Иногда бывает удобно иметь в операторе switch несколько смежных разделов case, не разделенных оператором break.

 

Вопрос 19. Операторы цикла. Циклы со счетчиком. Оператор DO в Fortran. Оператор цикла в Pascal, ALGOL 60.

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

 

Циклы со счетчиком используются тогда, когда циклическая часть программы должна повторяться фиксированное число раз. В таких циклах имеется переменная целого типа, которая называется счетчиком цикла.

 

Конструкция DO управляет повторяющимся выполнением блока операторов или конструкций.

 

Операторы цикла:

while оператор повтора, с указанием условий повторения до тела цикла. Поэтому операторы в теле цикла не выполнятся ни разу, если условие не истинно.

Так же существует оператор цикла repeat...until; это оператор цикла, с проверкой условия в конце цикла.

Существует ещё один оператор цикла - for.Этот операто цикла со встроенным счётчиком.

 

Вопрос 20. Оператор цикла в Си, Си++, Java, Ada.

В языке Си, Си++, Java, Ada известны три вида операторов цикла: for, while, do-while

 

Оператор с предусловием (while)

Он работает следующим образом. Вычисляется значение выражения. Если оно истинно, то выполняется оператор. В противном случае цикл заканчивается.

Цикл с постусловием (do…while)

Иногда возникает необходимость, чтобы тело цикла выполнилось хотя бы один раз, но условие не позволяет этому случится. Вот именно тут нам поможет цикл с постусловие do…while.

Цикл с параметром (for)

Данный цикл можно представить такой конструкцией;

for (начальные_присваивания; выражение; приращение) оператор;

 

Вопрос 21. Логически управляемые циклы.

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

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-05-29; Просмотров: 1698; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.031 с.)
Главная | Случайная страница | Обратная связь