Изучаем Java. Управляющие структуры в Visual Basic

Глава 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор присваивания Простой и составной операторы Условный оператор Оператор множественного выбора Оператор цикла с предусловием Оператор цикла с постусловием Оператор цикла с параметром Оператор и процедуры безусловного перехода


2 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор присваивания Оператором называется конструкция языка программирования, служащая для задания какого-либо действия или последовательности действий в программе над данными. Совокупность операторов программы реализует заложенный в ней алгоритм. Любой оператор подразумевает некоторое действие. Процесс «засылки» значения в переменную называется присваиванием (первое присваивание называется инициализацией). Присваивание осуществляется с помощью специальной конструкции – оператора присваивания: идентификатор переменной:=:= выражение Var W,H: Integer; Begin W:= 23; H:= 17; W:= W * H; End.


3 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Простой и составной операторы Два последовательных оператора должны разделяться точкой с запятой (имеет смысл конца оператора): a:= 11; b:= a * a; Write(a,b); Составной оператор – это последовательность операторов, рассматриваемых как единый. Оформляется с помощью зарезервированных слов begin и end (операторные скобки). Оператор в программе это единое неделимое предложение, выполняющее какое-либо действие. Простой оператор не содержит в себе других операторов (оператор присваивания, вызов процедуры,…). begin a:= 11; b:= a * a; Write(a,b) еnd;


5 then begin X:= X + 5; Y:= 1 еnd else Y:= -1; Условный оператор используется для программирования ветвлений, т.е. ситуаций, когда возникает необходимость при определенных условиях выполнять " title="4 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Условный оператор if K > 5 then begin X:= X + 5; Y:= 1 еnd else Y:= -1; Условный оператор используется для программирования ветвлений, т.е. ситуаций, когда возникает необходимость при определенных условиях выполнять " class="link_thumb"> 4 4 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Условный оператор if K > 5 then begin X:= X + 5; Y:= 1 еnd else Y:= -1; Условный оператор используется для программирования ветвлений, т.е. ситуаций, когда возникает необходимость при определенных условиях выполнять различные действия. Условный оператор имеет структуру: if логическое выражение then оператор else оператор В каждой ветви допускается запись только одного оператора. 5 then begin X:= X + 5; Y:= 1 еnd else Y:= -1; Условный оператор используется для программирования ветвлений, т.е. ситуаций, когда возникает необходимость при определенных условиях выполнять "> 5 then begin X:= X + 5; Y:= 1 еnd else Y:= -1; Условный оператор используется для программирования ветвлений, т.е. ситуаций, когда возникает необходимость при определенных условиях выполнять различные действия. Условный оператор имеет структуру: if логическое выражение then оператор else оператор В каждой ветви допускается запись только одного оператора."> 5 then begin X:= X + 5; Y:= 1 еnd else Y:= -1; Условный оператор используется для программирования ветвлений, т.е. ситуаций, когда возникает необходимость при определенных условиях выполнять " title="4 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Условный оператор if K > 5 then begin X:= X + 5; Y:= 1 еnd else Y:= -1; Условный оператор используется для программирования ветвлений, т.е. ситуаций, когда возникает необходимость при определенных условиях выполнять "> title="4 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Условный оператор if K > 5 then begin X:= X + 5; Y:= 1 еnd else Y:= -1; Условный оператор используется для программирования ветвлений, т.е. ситуаций, когда возникает необходимость при определенных условиях выполнять ">




6 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор множественного выбора Оператор выбора используется для реализации нескольких альтернативных вариантов действий, каждый из которых соответствует своим значениям некоторого параметра. case выражение of константа/ диапазон else операторы: оператор end ; Значение, а также должны относиться к одному из порядковых типов (кроме LongInt). В зависимости от значения выбирается тот оператор, которому предшествует константа выбора, равная вычисленному значению (альтернатива - операторы после else). Значения констант должны быть уникальными в каждом наборе, т.е. они могут появиться только в одном варианте.


7 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ case I of {I: Word} 1: X:= X +1; 2,3: X:= X +2; 4..9: begin Write(X); X:= X + 3 {м.б. ";"} end {м.б. ";"} else X:= X * X; Writeln(X) {м.б. ";"} end;


8 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор цикла "Пока" (с предусловием) while условное выражение do оператор (тело цикла), стоящий после служебного слова do, будет выполняться циклически до тех пор, пока выполняется логическое условие, т.е. пока значение равно True. Чтобы цикл имел шанс когда-либо завершиться, содержимое его тела должно влиять на условие цикла. Условие должно состоять из корректных выражений и значений, определенных еще до первого выполнения тела цикла. VarF,N: LongInt;{вычисление 10!} Begin F:= 1; N:= 1; while N


9 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор цикла "До" (с постусловием) Операторы между словами repeat и until образуют тело цикла. Если имеет значение True, то цикл завершается. Цикл "Пока" - "пока условие истинно, выполнять операторы тела". Цикл "До" - "выполнять тело цикла до тех пор, пока не станет истинным условие"; repeat until False; repea t оператор until условное выражение;


10 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор цикла c параметром (цикл по счетчику) – переменная порядкового типа, к этому же типу должны относиться значения и. Значение меняется в возрастающем (при использовании зарезервированного слова to) или убывающем (downto) порядке от значения до значения с постоянным шагом, равным интервалу между двумя ближайшими значениями в типе, к которому относится (для целочисленных типов - это 1, для символьного - от одного символа к другому при увеличении кода на 1, и т.д.). Циклы for допускают вложенность, если никакой из вложенный циклов не использует и не модифицирует переменные - параметры внешних циклов. Используется для организации "строгих" циклов, которые должны быть проделаны заданное число раз. fo r параметр цикла:= выражение 1 to выражение 2 do оператор downto


12 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор безусловного перехода Метка может стоять в программе в любом месте между операторами и отделяется от второго оператора двоеточием ":". Область действия операторов безусловного перехода строго локализована. Запрещены переходы по оператору goto между процедурами, а также между основным блоком и процедурой. Оператор безусловного перехода передает управление выполнением в указанное c помощью метки место программы (является "лишним" с точки зрения теории структурного программирования). goto метка Label целое без знака; идентификатор метки, Синтаксические диаграммы и: LabelL1, L2; Begin... goto L1;... L1: goto L2;... L2: End.


13 Гл. 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Процедуры безусловного перехода Процедуры неструктурной передачи управления при работе с циклическими структурами: Break – реализует выход из цикла любого типа; Continue – осуществляет переход на следующую итерацию цикла, игнорируя оставшиеся до конца тела цикла операторы. Процедуры Exit и Halt специально предназначены для выхода из программных блоков (процедур, функций, основного программного блока). Halt () осуществляет выход из программы, возвращая операционной системе заданный код завершения. Exit осуществляет безусловный выход из подпрограммы. Если процедура использована в основном блоке, то она выполняется аналогично Halt.

Оператор ветвления

Оператор ветвления (условного перехода) позволяет выполнять определенные команды программы в зависимости от логических условий. В языке Visual Basic оператор ветвления может использоваться в двух видах: строчном и блочном.

интернет-биржа студенческих работ">

Пример 1

Например, If a > b Then max = a Else max = b.

При необходимости выполнения нескольких операторов они разделяются двоеточиями.

Пример 2

Например, If a > 0 Then b = a + 1: c = a\2.

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

Блочный синтаксис:

Условие – логическое выражение, которое может принимать значение True (истина), False (ложь) или Null , которое приравнивается к False . При выполнении блочного оператора ветвления проверяется условие, и, если оно истинно, выполняется оператор, следующий за Then . Если условие не истинно, проверяется условие2 , идущее за ElseIf . Когда истинное значение найдено, выполняется оператор_при_истинномусловии2, который следует за Then , после чего программа выходит за EndIf (т.е. последующие ElseIf , если они есть, не проверяются). Если истинные условия для ElseIf не найдены, выполняется операторпри_ложном_условии.

Рисунок 3. Пример блочного синтаксиса. Автор24 - интернет-биржа студенческих работ

Оператор выбора

Оператор выбора Case выполняет определенные операторы в зависимости от множества значений проверяемого выражения или переменной. Синтаксис оператора выбора:

Рисунок 4. Синтаксис оператора выбора. Автор24 - интернет-биржа студенческих работ

Значение – переменная или выражение, которое проверяется по одному или нескольким условиям. Список значений задается через запятую, диапазон значений задается с помощью служебного слова To (например, 5 To 9).

Пример 3

По номеру месяца в году вывести сообщение о том, к какому времени года относится указанный месяц.

операторы if , if-else и switch , являются важнейшими средствами управления выполнением программы на языке Си . Они должны использоваться для реализации общей структуры программы. Три оператора, рассматриваемые ниже, обычно рассматриваются реже, поскольку слишком частое их использование ухудшает читаемость программы, увеличивает вероятность ошибок и затрудняет ее модификацию. Никлаус Вирт дал определение структурного программирования, как программирования без goto .

Оператор break

Оператор break используется для выхода из оператора while , do , for , switch , непосредственно его содержащего. Управление передается на оператор, следующий за оператором, из которого осуществлен выход. Оператор break имеет форму

while((ch=getchar()) != EOF) /* читается символ ch=getchar(). Если он не совпадает с EOF, выполняется тело оператора while */ { if(ch=="\n") break; putchar(ch); }

Работа цикла полностью прекращается, как только при вводе встречается символ "новая строка".

Оператор continue

Оператор continue служит для пропуска оставшейся части выполняемой итерации цикла, непосредственно его содержащего. Если условиями цикла допускается новая итерация , то она выполняется, в противном случае цикл завершается. Оператор continue имеет следующую форму:

while((ch=getchar()) != EOF) /* читается символ ch=getchar(). Если он не совпадает с EOF, выполняется тело оператора while */ { if(ch=="\n") continue; putchar(ch); }

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

Оператор goto

Оператор goto предназначен для безусловной передачи управления к оператору с указанной меткой. Он имеет следующую форму:

goto метка;

Керниган и Ритчи считают оператор goto "чрезвычайно плохим" средством и предлагают применять его как можно реже или не применять совсем. Приведем пример записи оператора:

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

part1: printf("точка перехода\n");

Если без операторов goto , break , continue , return никак не обойтись, то при использовании goto переходите вперед по коду, а не назад.

Оператор break лучше не использовать для преждевременного выхода из цикла, его полезно использовать внутри оператора switch .

Оператор continue нежелательно использовать для модификации логики циклов.

Почему нежелательно использовать функции со многими операторами return . Один из принципов структурного программирования состоит в том, что программа должна иметь одну точку входа и одну точку выхода. Функции со многими операторами return более сложны для чтения, чем те, которые имеют лишь один оператор return в конце тела функции.

Операции и операторы языка программирования Си. Примеры программ.

Управляющие структуры и основные конструкции языков программирования

Размещенная в памяти компьютера программа в момент выполнения занимает определенную область памяти. В каждый момент времени состояние программы характеризуется двумя типами сведений:

Состоянием некоторых ячеек памяти, понимаемых нами как переменные;

Активной точкой программы, то есть той командой программы, которая выполняется данный момент.

Следовательно, можно выделить и два основных класса действий, которые может выполнять вычислительная система:

Действия, выделяющие область памяти под переменные программы (описания).

Действия, меняющие точку выполнения программы (операторы, инструкции, конструкции).

Различные совокупности действий второго класса также называют управляющими структурами.

Обычно операторы в программе выполняются один за другим в порядке их записи. Это называется последовательным выполнением. Различные операторы языка С, которые мы скоро будем обсуждать, дают программисту возможность указать, что следующий оператор, подлежащий выполнению, может отличаться от очередного в последовательности. Это называется передачей управления.

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

Исследование Бома и Якопини показало, что программирование возможно и при полном отсутствии операторов goto. Смена стиля программирования на «программирование без goto» стала для программистов эпохальным девизом. Но только в 70-е годы широкие круги профессиональных программистов начали принимать структурное программирование всерьез. Результаты оказались впечатляющими, поскольку группы разработки программного обеспечения сообщали об уменьшении времени разработки, более частой поставке систем в срок и завершении проектов в рамках бюджета. Ключом к успеху является попросту то, что программы, созданные на основе методов структурного программирования, более понятны, их проще отлаживать и модифицировать и, самое главное, более вероятно, что они написаны без ошибок.
Работа Бома и Якопини в 1966 году показала, что все программы могут быть написаны с использованием всего трех управляющих структур, а именно: последовательной структуры, структуры выбора и структуры повторения. Этот результат установлен Бомом и Якопини в 1966 г. путем доказательства того, что любую программу можно преобразовать в эквивалентную, состоящую только из этих структур и их комбинаций. При этом последовательная структура, по существу, является встроенной в язык С. Если не указано иначе, компьютер автоматически выполняет операторы С один за другим в порядке их записи.

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

К управляющим структурам относятся:

· структура следования;

· структура ветвления;

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

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

    Операторы ветвления:

    условный оператор – if else – реализует алгоритмические структуры АЛЬТЕРНАТИВА и ВЫБОР (см. Приложение 1);

    оператор выбора – switch – частично реализует алгоритмическую структуру ВЫБОР (см. Приложение 1);

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

      • цикл с предусловием – while – реализует алгоритмическую структуру ЦИКЛ С ПРЕДУСЛОВИЕМ (см. Приложение 1);

        цикл с постусловием – do while – реализует алгоритмическую структуру ЦИКЛ С ПОСТУСЛОВИЕМ (см. Приложение 1);

        цикл с параметром – for – реализует алгоритмическую структуру ПАРАМЕТРИЧЕСКИЙ ЦИКЛ (см. Приложение 1).

Условный оператор (if else )

Условный оператор if используется для разветвления процесса вычислений на два направления, соответственно он реализует алгоритмическую структуру АЛЬТЕРНАТИВА, блок-схема которой выглядит следующим образом:

Если <Условие> истинно, то выполняется <Оператор 1>, иначе выполняется <Оператор 2>.

Пример использования условного оператора для разветвления процесса вычислений на два направления:

// Вычисление модуля y= |x|

if(x < 0) { y= -x; }

Оператор if также используется для реализации алгоритмической структуры ВЫБОР (см. блок-схему ниже), когда невозможно использовать оператор выбора switch (об этом далее).

Использование уловного оператора для реализации алгоритмической структуры ВЫБОР:

Пример использования условного оператора для реализации алгоритмической структуры ВЫБОР:

// Вычисление y= sign(x) – более простой способ реализации

if(x < 0) { y= -1; }

if(x == 0) { y= 0; }

if(x > 0) { y= 1; }

// Вычисление y= sign(x) – более эффективный способ реализации

if (x < 0) { y= -1; }

else if(x == 0) { y= 0; }

else if(x > 0) { y= 1; }

Оператор выбора (switch ) + оператор прерывания (break )

Оператор switch (выбор) предназначен для разветвления процесса вычислений на несколько направлений. Данный оператор реализует алгоритмическую структуру ВЫБОР. Однако он имеет ограниченное применение, т.к. в нем нельзя задавать произвольные условия. Условия в операторе switch имеют следующую структуру <Выражение> == <Константа>.

Формат оператора:

switch(<Выражение>)

case <Константа 1>:

<Оператор 1>

case <Константа 2>:

<Оператор 2>

case <Константа M>:

<Оператор M>

<Оператор M+1>

Если <Выражение> принимает значение равное <Константа 1>, то выполняется <Оператор 1>; если <Выражение> принимает значение равное <Константа 2>, то выполняется <Оператор 2> и т.д. Если <Выражение> принимает значение отличное от указанных констант, то выполняется <Оператор M+1>.

Пример использования оператора выбора:

// Анализ ответа пользователя

scanf(“%с”, &Answer);

printf(“\nВы нажали 1”);

printf(“\nВы нажали 2”);

Оператор break прерывает выполнение оператора switch. Если бы его не было, то все операторы внутри switch выполнялись бы последовательно друг за другом. Например, так:

// Анализ ответа пользователя

scanf(“%с”, &Answer);

printf(“\nВы нажали 1”);

printf(“\nВы нажали 2”);

printf(“\nВы нажали что-то не то”);

При вводе пользователем символа ‘2’ на экране появятся два сообщения:

“Вы нажали 2”

“Вы нажали что-то не то”

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

Оператор используется для организации многократно повторяющихся вычислений, которые могут не выполниться ни разу. Оператор while реализует алгоритмическую структуру ЦИКЛ С ПРЕДУСЛОВИЕМ, блок-схема которой приведена ниже. Данная алгоритмическая структура используется, когда заранее неизвестно количество итераций (повторений), и возможно отсутствие повторений.

Формат оператора:

while(<Условие>)

<Оператор>

Сначала проверяется <Условие>. Если <Условие> истинно, то выполняется <Оператор> до тех пор, пока <Условие> не станет ложным. Если <Условие> стало ложным, то управление передается оператору, следующему за циклом. <Условие> – это условие продолжения цикла, <Оператор> – это тело цикла (повторяющееся действие + действие для выхода из цикла).

Замечание. <Оператор> может не выполниться ни разу, если <Условие> изначально ложно.

Пример использования оператора с предусловием:

char String= “Это пример”;

Count = 0; // подготовка

while(String !=‘\0’) // условие продолжения

{ Count++; } // тело цикла (повторяющееся действие +

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

Рассмотрим еще один пример, в котором используется оператор while, но правильнее использовать оператор do while:

// Ввод русской буквы

char RussianLetter;

scanf(“%c”, &RussianLetter); // подготовка

while((RussianLetter < ‘A’) ||

(RussianLetter > ‘я’)) // условие продолжения

{ scanf(“%c”, &RussianLetter); } // тело цикла (повторяющееся действие + // действие для выхода из цикла)

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

Оператор используется для организации многократно повторяющихся вычислений, которые выполняются хотя бы один раз. Оператор do while реализует алгоритмическую структуру ЦИКЛ С ПОСТУСЛОВИЕМ, блок-схема которой приведена ниже. Данная алгоритмическая структура используется, когда заранее неизвестно количество итераций, но хотя бы одна итерация выполняется всегда (например, если в цикле производится ввод данных).

Формат оператора:

<Оператор>

while(<Условие>);

Сначала выполняется <Оператор>, затем проверяется <Условие>. Если <Условие> истинно, то снова выполняется <Оператор>. Это продолжается до тех пор, пока <Условие> не станет ложным.

Замечание. <Оператор> всегда выполняется хотя бы один раз.

Пример использования цикла с постусловием:

// Запрашиваем у пользователя число от 0 до 10

// подготовка отсутствует

{ scanf(“%d”, &Number); } // тело цикла (повторяющееся действие +

// действие для выхода из цикла)

while((Number < 0)||(Number > 10)); // условие продолжения

В примере используется цикл do while, т.к. число сначала вводится, а затем осуществляется его проверка.

Обратите внимание, что после оператора while ставится точка с запятой;.

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

Оператор используется для организации многократно повторяющихся вычислений и по своей сути аналогичен циклу while, но имеет более компактную запись. Оператор for реализует алгоритмическую структуру ПАРАМЕТРИЧЕСКИЙ ЦИКЛ, блок-схемы которой приведены ниже. Данная алгоритмическая структура используется, когда заранее известно количество итераций.

Формат оператора:

for(<Оператор инициализации>; <Условие>; <Оператор модификации>)

<Оператор>

Сначала выполняется <Оператор инициализации> и проверяется <Условие>. Если <Условие> истинно, то выполняется <Оператор>. Затем выполняется <Оператор модификации> и снова проверяется <Условие>. Если <Условие> истинно, то выполняется <Оператор> и т.д. Цикл завершается, когда <Условие> становится ложным.

Замечание. Цикл for как и цикл while может не выполниться ни разу.

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

y = 1; // подготовка

for(i= 1; i <= n; i++) // оператор инициал.; условие; оператор модификации

{ y= y*i; } // тело цикла (повторяющееся действие)

В данном примере еще до выполнения цикла известно, что переменная i должна изменяться в диапазоне от 1 до n.

А теперь рассмотрим, как та же задача решается с использованием цикла while:

// Вычисление факториала y = n!

y = 1; // подготовка

i= 1; // подготовка (оператор инициализации)

while(i <= n) // условие продолжения

y= y*i; // повторяющееся действие

i++; // действие для выхода из цикла (оператор модификации)

Данный пример показывает, что использование цикла while усложняет код программы, а потому предпочтительнее использовать цикл for, когда заранее известно количество выполняемых итераций.

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то