Меню
Главная
Авторизация/Регистрация
 
Главная arrow Информатика arrow Информатика в строительстве
Посмотреть оригинал

Операторы ветвления (условные операторы).

К операторам ветвления {условным операторам) относятся условный оператор if и оператор переключения switch, которые позволяют создать такие алгоритмы, в которых при заданных условиях выполняются одни или другие блоки команд. Иными словами, в программном коде создаются точки ветвления, когда в зависимости от выполнения некоторого условия (или условий) выполняются разные фрагменты кода.

Рассмотрим условный оператор if, использующий ключевые слова if (если), else (иначе), elseif (иначе если), end (конец всей конструкции). Наиболее простой синтаксис применения оператора if имеет вид:

if условие

Инструкции

end

где условие - произвольное выражение (чаще всего включающее в себя операции сравнения и логические операции), истинность или ложность которого понимается как отличие от нуля или равенство нулю, причем если условие истинно, то выполняются Инструкции (команды) после этого условия до ключевого слова end, которое является идентификатором окончания условного оператора. После этого управление передается оператору, следующему после условного. Ести условие истинным не является, то управление сразу передается оператору, следующему после условного. Иными словами, при ложном условии, Инструкции после условия и до ключевого слова end не выполняются.

Пример 1.5.1. Требуется найти максимальное из трех чисел х, у, z: u=max{x, у, z}. Напечатать значения х, у, z и и.

Для выполнения создается М-файл. Ниже приведен текст М-файла.

x=input('Введите значение х: '); y=input('Введите значение у: '); z=input('Введите значение z: '); if(x>=y&x>=z) u=x; end

if(y>=x&y>=z) u=y; end

if(z>=x&z>=y) u=z; end

disp('x='); disp(x); disp('y='); disp(y); disp('z='); disp(z); disp('u=max(x,y,z)='); disp(u);

Результаты расчета в командном окне (задано х=1, у=2 и z=3):

х=

У= z=

3

u=max (x, y, z) =

3

Помимо рассмотренного варианта синтаксиса, в условном операторе могут использоваться ключевые слова else и elseif. В частности, если синтаксис условного оператора имеет вид

if условие

Инструкции_1

else

Инструкции_2

end то при истинном условии выполняются команды, расположенные между условием и ключевым словом else (т.е. блок Инструкции_1), а если условие ложно, то выполняются команды между ключевым словом else и инструкцией окончания условного оператора end.

Пример 1.5.2. Требуется найти максимальное и минимальное из двух чисел х, у: u=max {х, у}; v=min {х, у}. Напечатать значения х, у и u, v.

Для выполнения создается М-файл. Ниже приведен текст М-файла.

x=input('Введите значение х: '); y=input('Введите значение у: '); if (х>у) и=х; v=y;

else

u=y;

v=x;

end

disp('x='); disp(x); disp('y='); disp(y); disp('u=max(x,y) ='); disp(u); disp('v=min(x,y)='); disp(v);

Результаты расчета в командном окне (задано х=1 и у=2):

х=

1

У=

2

u=max (х, у) =

2

v=min (х, у) =

1

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

Инструкции_1 elseif условие_2 Инструкции_2 elseif условие_3 Инструкции_3

else

Инструкции

end

Поясним, что в такой конструкции может быть много ветвей с ключевым словом elseif, при этом если справедливо условие условие_1, то выполняется набор команд Инструкции_1, если справедливо условие условие_2, то выполняется набор команд Инструкции_2 и т.д. Если же все эти условия оказываются ложными, то выполняются команды, расположенные после слова else. Отметим, что с одной стороны число ветвей elseif неограниченно, с другой - ветви elseif могут отсутствовать вовсе. Рассмотренный условный оператор завершается ключевым словом end.

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

Пример 1.5.3. Требуется составить программу анализа значения темпе- ратры t и характеристики типа погоды: Морозная погода (если значение температуры неположительно); Холодная погода (если значение температуры положительно, но не превосходит 10); Прохладная погода (если значение температуры больше 10, но не больше 18); Теплая погода (если значение температуры больше 18, но не больше 25); Жаркая погода (если значение температуры больше 25).

Для выполнения создается М-файл. Ниже приведен текст М-файла.

t=input('Введите значение температуры t='); if(t<=0)

disp('Морозная погода') elseif and(t>0, t<=10)

disp('Холодная погода') elseif and(t>10, t<=18)

disp ('Прохладная погода') elseif and(t>18, t<=25)

disp('Теплая погода')

else

disp('Жаркая погода')

end

Результаты расчета в командном окне (задано t=ll):

Прохладная погода

Рассмотрим теперь альтернативный способ решения задачи из примера 1.5.1. Соответствующий текст М-файла приведен ниже.

| x=input('Введите значение х: ');

y=input('Введите значение у: '); z=input('Введите значение z: '); if (х>у)

if (x>z) u=x;

else

u=z;

end

else

if (y>z)

u=y;

else

u=z;

end

end

disp('x='); disp(x); disp('y='); disp(y); disp('z='); disp(z); disp('u=max(x,y,z)='); disp(u);

Пример 1.5.4. Даны три числа: трех чисел х, у, z. Требуется найти сумму значений, по модулю меньших 5, остальные распечатать.

Для выполнения создается М-файл. Ниже приведен текст М-файла.

x=input('Введите значение х: '); y=input('Введите значение у: '); z=input('Введите значение z: '); s=0;

if(abs(x)<5) s=s+x;

else

disp('x='); disp(x);

end

if(abs(y)<5) s=s+y;

else

disp('y='); disp(y);

end

if(abs(z)<5) s=s+z;

else

disp('z='); disp(z);

end

disp('s='); disp(s);

Результаты расчета в командном окне (задано х=-3, у=5 и z=6):

У=

5

z=

6

s=

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

switch выражение case значение_1 Инструкции case значение_2 Инструкции

case {значение_3, значение_4,...}

Инструкции

otherwise

Инструкции

end

В данной конструкции, прежде всего, вычисляется значение выражения выражение (это может быть скалярное числовое значение, пеменная либо строка символов), указанного после ключевого слова switch. Далее это значение сравнивается со значениями значение_1, значение_2, зна- чение_3, значение_4 и т.д. (которые могут быть числовыми либо строковыми). Если найдено совпадение, то выполняются Инструкции, стоящие после соответствующего ключевого слова case (последнее используется, по существу, для организации программных блоков (так называемых case- блоков), которые выполняются в зависимости значения выражения выражение). В противном случае выполняются Инструкции, расположенные между ключевыми словами otherwise и end (так называемый otherwise- блок, который, следует отметить, не является обязательным). Строк со словом case может быть сколько угодно, но строка с ключевым словом otherwise должна быть одна. Конструкция {значение_3, значение_4, . . .} означает, что в строке с ключевым словом case может находиться массив ячеек (в таком случае оператор case будет истинным, если значение выражения выражение совпадает с любым из значений этого массива ячеек).

Заметим, что в случае, когда выражение представляет собой строку символов, соответствующий оператор case будет истинным, если функция вида strcmp (выражение, значение) возвращает значение 1 (истина).

Следует указать на важную особенность переключателя switch в языке программирования MATLAB: если в переключателе switch выполнена одна из ветвей, то остальные ветви этого переключателя выполняться не будут, поэтому никакие дополнительные операторы, позволяющие избежать выполнения других ветвей в данном случае не требуются (в отличие, например, от языков программирования C/C++).

Пример 1.5.5. Требуется составить программу, определяющее время года (зима, весна, лето, осень) по заданному назывнию месяца.

Для выполнения создается М-файл. Ниже приведен текст М-файла.

month=input('Введите название месяца: '); switch month case 'декабрь'

disp('Время года - зима') case 'январь'

disp('Время года - зима') case 'февраль'

disp('Время года - зима') case 'март'

disp('Время года - весна') case 'апрель'

disp('Время года - весна') case 'май'

disp('Время года - весна') case 'июнь'

disp('Время года - лето') case 'июль'

disp('Время года - лето') case 'август'

disp('Время года - лето') case 'сентябрь'

disp('Время года - осень') case 'октябрь'

disp('Время года - осень') case 'ноябрь'

disp('Время года - осень') otherwise

disp('Неизвестное время года')

end

Результаты расчета в командном окне (задано month=' август '):

Время года - лето

 
Посмотреть оригинал
< Предыдущая   СОДЕРЖАНИЕ   Следующая >
 

Популярные страницы