
- •1. Цель работы
- •2. Основы применения м-Файлов и основы программирования в matlab
- •2.1. Работа в редакторе м-файлов
- •2.2. Типы м-файлов
- •2.3. Установка путей
- •2.4. Файл-функции
- •2.4.1. Файл-функции с одним входным аргументом
- •2.4.2. Файл-функции с несколькими входными аргументами
- •2.4.3. Файл-функции с несколькими выходными аргументами
- •2.5. Основы программирования в MatLab
- •2.5.1. Оператор цикла for
- •2.5.2. Оператор цикла while
- •2.5.3. Условный оператор if
- •2.5.4. Оператор ветвления if-elseif-else
- •2.5.5. Оператор ветвления switch
- •2.5.6. Оператор прерывания цикла break
- •3. Индивидуальные задания
- •4. Содержание отчета
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. Оформите отчет по лабораторной работе.