Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
matlab_final.doc
Скачиваний:
80
Добавлен:
24.09.2019
Размер:
5.3 Mб
Скачать

3.4. Оператор if / elseif / else

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

if условие 1

последовательность команд 1

elseif условие 2

последовательность команд 2

elseif условие 3

последовательность команд 3

.

.

.

else

последовательность команд N

end

Сначала проверяется на истинность условие 1, если оно окажется истинным, то будет выполняться последовательность команд 1, если условие 1 не выполняется, начинается проверка ветвей elseif. Сначала проверяется условие 2, если оно истинно, то будет выполняться последовательность команд 2, если ложно, то проверяется условие 3, если оно окажется истинным, то будет выполняться последовательность команд 3 и т. д. до последнего оператора elseif, количество которых не ограничено. Если ни одно из условий не оказалось истинным, выполняется последовательность команд после оператора else.

В этом операторе ветви elseif и else являются не обязательными и могут отсутствовать.

В качестве примера рассмотрим задачу, когда дана одномерная матрица foo, необходимо сформировать матрицу result таким образом, что i-ый элемент матрицы result должен быть равен 1, если i-й элемент матрицы foo больше 0, должен быть равен -1, если i-й элемент матрицы foo меньше 0, и должен быть равен 0, если i-й элемент матрицы foo равен 0. Скрипт для решения данной задачи может выглядеть следующим образом:

% Удалить все переменные

clear;

% Исходная матрица, в зависимости от элементов которой

% будем формировать результат

foo = [1 5 -10 0 -2 3];

% Матрица, куда будет сохранен результат (начальная инициализация нулями)

result = zeros (1, length (foo));

% Переменная index будет принимать значения от 1 до 6

% (для данного размера матрицы foo)

for index = 1:length(foo)

% Проверка каждого элемента матрицы foo на знак

if foo(index) > 0

result(index) = 1;

elseif foo (index) < 0

result(index) = -1;

else

result(index) = 0;

end

end

% Вывод исходной матрицы и результата

foo

result

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

foo =

1 5 -10 0 -2 3

result =

1 1 -1 0 -1 1

Строго говоря, в данном примере строка создания результирующей матрицы result = zeros (1, length (foo)); не обязательна, так как на каждой итерации во время выполнения операций присваивания (result(index) = ...) размер матрицы result будет увеличиваться таким образом, чтобы в ней существовал элемент с номером index, однако это ведет к дополнительным расходам времени на перераспределение памяти, поэтому, если известен размер результирующей матрицы, желательно ее создать заранее с нужным размером.

Так как еще до выполнения цикла for мы создали матрицу result и заполнили ее нулями (с помощью функции zeros), то ветвь else в операторе if является не обязательной, так как в случае пропуска строки result(index) = 0;, элемент с индексом index все равно окажется равным 0. Поэтому скрипт можно сократить (что нельзя было бы сделать, если бы мы пропустили начальную инициализацию матрицы result с помощью функции zeros):

% Удалить все переменные

clear;

% Исходная матрица, в зависимости от элементов которой

% будем формировать результат

foo = [1 5 -10 0 -2 3];

% Матрица, куда будет сохранен результат (начальная инициализация нулями)

result = zeros (1, length (foo));

% Переменная index будет принимать значения от 1 до 6

% (для данного размера матрицы foo)

for index = 1:length(foo)

% Проверка каждого элемента матрицы foo на знак

if foo(index) > 0

result(index) = 1;

elseif foo (index) < 0

result(index) = -1;

end

end

% Вывод исходной матрицы и результата

foo

result

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]