Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab5 - М-файлы и основы программирования в MatL....doc
Скачиваний:
19
Добавлен:
03.11.2018
Размер:
252.93 Кб
Скачать

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

Для осуществления множественного выбора или ветвления может применяться оператор switch. Он является альтернативой оператору if-elseif-else. В общем случае применение оператора ветвления switch выглядит следующим образом:

switch switch_выражение

case значение 1

команды MatLab

case значение 2

команды MatLab

. . . . . . . . . . .

case значение N

команды MatLab

case {значение N+1, значение N+2, …}

команды MatLab

. . . . . . . . . . . .

case {значение NM+1, значение NM+2,…}

otherwise

команды MatLab

end

В данном операторе сначала вычисляется значение switch_выражения (это может быть скалярное числовое значение либо строка символов). Затем это значение сравнивается со значениями: значение 1, значение 2, …, значение N, значение N+1, значение N+2, …, значение NM+1, значение NM+2,… (которые также могут быть числовыми либо строковыми). Если найдено совпадение, то выполняются команды MatLab, стоящие после соответствующего ключевого слова case. В противном случае выполняются команды MatLab, расположенные между ключевыми словами otherwise и end.

Строк с ключевым словом case может быть сколько угодно, но строка с ключевым словом otherwise должна быть одна.

После выполнения какой-либо из ветвей происходит выход из switch, при этом значения, заданные в других case не проверяются.

Применение switch поясняет следующий пример:

function demswitch(x)

a = 10/5 + x

switch a

case -1

warning('a = -1')

case 0

warning('a = 0')

case 1

warning('a = 1')

case {2, 3, 4}

warning('a равно 2 или 3 или 4')

otherwise

warning('a не равно -1, 0, 1, 2, 3, 4')

end

>> x = -4

demswitch(x)

a =

1

warning: a = 1

>> x = 1

demswitch(x)

a =

6

warning: a не равно -1, 0, 1, 2, 3, 4

2.5.6. Оператор прерывания цикла break

При организации циклических вычислений следует заботиться о том, чтобы внутри цикла не возникло ошибок. Например, пусть задан массив x, состоящий из целых чисел, и требуется сформировать новый массив y по правилу y(i) = x(i+1)/x(i). Очевидно, что задача может быть решена при помощи цикла for. Но если один из элементов исходного массива равен нулю, то при делении получится inf, и последующие вычисления могут оказаться бесполезными. Предотвратить эту ситуацию можно выходом из цикла, если текущее значение x(i) равно нулю. Следующий фрагмент программы демонстрирует использование оператора break для прерывания цикла:

for x = 1:20

z = x-8;

if z==0

break

end

y = x/z

end

Как только переменная z принимает значение 0, цикл прерывается.

Оператор break позволяет досрочно прервать выполнение циклов for и while. Вне этих циклов оператор break не работает.

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

3. Индивидуальные задания

1. Прочтите подразделы 2.1 и 2.2 методических указаний и создайте М-файл mydemo.m.

2. Создайте в корневом каталоге диска D (или любом другом диске или каталоге, где студентам разрешено создавать свои каталоги) каталог со своей фамилией, например, WORK_IVANOV, и запишите туда М-файл mydemo.m под именем mydemo3.m. Установите пути к файлу и продемонстрируйте доступность файла из командной строки.

3. Постройте графики файл-функции myfun при помощи команд plot и fplot на одних осях (при помощи hold on).

4. Напишите файл-функцию root2, которая находит только вещественные корни квадратного уравнения, а при наличии комплексных корней выдает сообщение об ошибке. В демонстрационных примерах второй коэффициент квадратного уравнения должен быть равен Вашему номеру по списку в журнале группы.

5. Напишите файл-функцию, которая находит наибольший общий делитель (НОД) z двух натуральных чисел x и y с помощью алгоритма Евклида. В одном из демонстрационных примеров наибольший общий делитель должен быть равен 3N+1, где N  Ваш номер по списку в журнале группы.

Справочная информация. Идея алгоритма Евклида основана на том, что если НОД то при равенстве чисел x и y НОД z совпадает с x и y, а в случае неравенства чисел x и y их разность между большим и меньшим вместе с меньшим числом имеет тот же самый наибольший общий делитель. Алгоритм определения НОД Евклида можно записать следующим образом:

Шаг 1. Если x > y, то перейти на шаг 2.

Шаг 2. Если x < y, то перейти на шаг 5, иначе перейти на шаг 3.

Шаг 3. z = x. Конец.

Шаг 4. От x отнять y и считать, что эта разность теперь равна значению x. Перейти на шаг 1.

Шаг 5. От y отнять x и считать, что эта разность теперь равна значению y. Перейти на шаг 1.

6. Напишите файл-функцию, которая находит простые числа, не превосходящие 150+10N, где N  Ваш номер по списку в журнале группы.

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

Шаг 1. Выписать последовательно все целые числа, начиная с двух и кончая n.

Шаг 2. Считать, что значение имени p равно двум.

Шаг 3. Если , то перейти на шаг 4, иначе перейти на шаг 6.

Шаг 4. В последовательности чисел, начиная с числа p + 1, зачеркнуть каждое p-е число (т.е. зачеркнуть все числа, кратные p, не обращая внимания на то, что часть чисел могла быть уже зачеркнута).

Шаг 5. Первое после числа p незачеркнутое число последовательности считать новым значением имени p. Вернуться на шаг 3.

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

7.Вычислите сумму простых чисел, найденных в задании 6.

8. Оформите отчет по лабораторной работе.