Возможна ли разработка приложения на Octave с GUI? |
Программирование
3.1.4 Оператор альтернативного выбора
Ещё одним способом организации разветвлений является оператор альтернативного выбора следующей структуры:
switch параметр case значение1 операторы1 case значение2 операторы2 case значение3 операторы3 . . . otherwise операторы end
Оператор switch работает следующим образом: если значение параметра равно значениие1, то выполняются операторы1, иначе если параметр равен значениие2, то выполняются операторы2. В противном случае, если значение параметра совпадает со значение3, то выполняются операторы3 и т.д. Если значение параметра не совпадает ни с одним из значений в группах case, то выполняются операторы, которые идут после служебного слова otherwise.
Конечно, любой алгоритм можно запрограммировать без использования switch, используя только if, но использование оператора альтернативного выбора switch делает программу более компактной. Рассмотрим использование оператора switch на следующем примере.
Пример 3.4. Вывести на печать название дня недели, соответствующее заданному числу , при условии, что в месяце 31 день и первое число — понедельник.
Для решения задачи воспользуемся функцией , позволяющей вычислить остаток от деления двух чисел. Если в результате остаток от деления заданного числа на семь будет равен единице, то это понедельник (по условию первое число — понедельник), двойке — вторник, тройке — среда, и так далее. Следовательно, при построении алгоритма необходимо использовать семь условных операторов. Решение задачи станет значительно проще, если при написании программы воспользоваться оператором альтернативного выбора (листинг 3.4).
D=input ( ’Введите число от 1 до 31 ’ ); % Вычисление остатка от деления D на 7, сравнение его с числами от 0 до 6. switch mod(D, 7) case 1 disp(’ПОНЕДЕЛЬНИК’) case 2 disp(’ВТОРНИК’) case 3 disp(’СРЕДА’) case 4 disp(’ЧЕТВЕРГ’) case 5 disp(’ПЯТНИЦА’) case 6 disp (’СУББОТА’) otherwise disp (’ВОСКРЕСЕНЬЕ’) endЛистинг 3.4. Решение к примеру 3.4.
3.1.5 Условный циклический оператор
Оператор цикла с предусловием в языке программирования Octave имеет вид:
while выражение операторы end
Работает цикл с предусловием следующим образом. Вычисляется значение условия выражение. Если оно истинно, выполняются операторы. В противном случае цикл заканчивается, и управление передаётся оператору, следующему за телом цикла. Выражение вычисляется перед каждой итерацией цикла. Если при первой проверке выражение ложно, цикл не выполнится ни разу. Выражение должно быть переменной или логическим выражением.
Пример 3.5. Дано натуральное число . Определить количество цифр в числе.
Для того, чтобы подсчитать количество цифр в числе, необходимо определить, сколько раз заданное число можно разделить на десять нацело. Например, пусть , тогда количество цифр . Результаты вычислений сведены в таблицу 3.1.
Текст программы, реализующей данную задачу, можно записать так:
kol | N |
1 | 12345 |
2 | 12345 div10=1234 |
3 | 1234 div 10=123 |
4 | 123 div 10=12 |
5 | 12 div 10=1 |
6 | 1 div 10=0 |
N = input(’N=’); M = N; % Сохранить значение переменной N. kol =1; % Число содержит хотя бы одну цифру. while round(M/10) > 0 % Выполнять тело цикла, пока частное от деления % M на 10, округлённое до целого, больше 0. kol = kol + 1; % Счётчик количества цифр M = round (M/10); % Изменение числа. end disp(’kol=’); disp(kol); % Результат работы программы N= 12345678 kol= 8Листинг 3.5. Решение к примеру 3.5.
3.1.6 Оператор цикла с известным числом повторений
Для записи цикла с известным числом повторений применяют оператор for
for параметр = начальное_значение:шаг:конечное_значение операторы end
Выполнение цикла начинается с присвоения параметру цикла начального_значения. Затем следует проверка, не превосходит ли параметр цикла конечное_значение. Если результат проверки утвердительный, цикл считается завершённым, и управление передаётся следующему за телом цикла оператору. В противном случае выполняются операторы в цикле. Далее параметр увеличивает своё значение на значение шага и снова производится проверка — не превзошло ли значение параметра цикла конечное_значение. В случае положительного ответа алгоритм повторяется, в противном — цикл завершается.
Если шаг цикла равен 1, то оператор записывают так:
for параметр = начальное_значение:конечное_значение операторы end
Пример 3.6. Дано натуральное число . Определить — количество делителей этого числа, не превышающих его. Например, для делители 1, 2, 3, 4, 6. Количество делителей .
Для решения поставленной задачи нужно реализовать следующий алгоритм: в переменную , предназначенную для подсчёта количества делителей заданного числа, поместить значение, которое не влияло бы на результат, т.е. нуль. Далее организовать цикл, в котором изменяющийся параметр выполняет роль возможных делителей числа . Если заданное число делится нацело на параметр цикла, это означает, что является делителем , и значение переменной следует увеличить на единицу. Цикл необходимо повторить только раз1Если делитель числа меньше самого числа, значит он не превосходит его половины (Прим. редактора)..
N = input(’N = ’); K = 0; % Количество делителей числа for i = 1:N/2 if mod(N, i) == 0 % Если N делится нацело на i, то K=K+1; % увеличить счётчик на единицу. end end disp(’K = ’); disp(K); % Результат работы программы N = 12 K = 5Листинг 3.6. Количество делителей числа (к примеру 3.6).
3.1.7 Операторы передачи управления
Операторы передачи управления принудительно изменяют порядок выполнения команд. В языке программирования Octave таких операторов два. Операторы break и continue используют только внутри циклов. Так оператор break осуществляет немедленный выход из циклов while, for и управление передаётся оператору, находящемуся непосредственно за циклом. Оператор continue начинает новую итерацию цикла, даже если предыдущая не была завершена.
Пример 3.7. Дано натуральное число . Определить, является ли оно простым. Натуральное число называется простым, если оно делится нацело без остатка только на единицу и . Число 13 — простое, так как делится только на 1 и 13, 12 не является простым, так как делится на 1, 2, 3, 4, 6 и 12.
Алгоритм решения этой задачи заключается в том, что число делится на параметр цикла , изменяющийся в диапазоне от 2 до . Если среди значений параметра не найдётся ни одного числа, делящего заданное число нацело, то — простое число, иначе оно таковым не является. Разумно предусмотреть в программе два выхода из цикла. Первый — естественный, при исчерпании всех значений параметра, а второй — досрочный, с помощью оператора break. Нет смысла продолжать цикл, если будет найден хотя бы один делитель из указанной области изменения параметра.
Текст программы приведён в листинге 3.7.
N=input (’Введите число ’); pr =1; % Предполагаем, что число N является простым (pr=1). for i =2:N/2 % Перебираем все возможные делители числа N от 2 до N/2. if mod(N, i)==0 % Если N делится на i, pr =0; % то число N не является простым (pr=0) break; % и прерывается выполнение цикла. end end if pr==1 % Если pr равно 1, то N — простое число. disp(’ПРОСТОЕ ЧИСЛО’) else % Если pr равно 0, то N — не является простым. disp(’НЕ ЯВЛЯЕТСЯ ПРОСТЫМ ЧИСЛОМ’) end % Результаты работы программы % Вводим сначала число 12, затем 13 Введите число 12 НЕ ЯВЛЯЕТСЯ ПРОСТЫМ ЧИСЛОМ % ____________________________ Введите число 13 ПРОСТОЕ ЧИСЛОЛистинг 3.7. Является ли число простым (к примеру 3.7)?