Компания ALT Linux
Опубликован: 12.03.2015 | Доступ: свободный | Студентов: 582 / 64 | Длительность: 20:55:00
Лекция 3:

Программирование

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. Вывести на печать название дня недели, соответствующее заданному числу D, при условии, что в месяце 31 день и первое число — понедельник.

Для решения задачи воспользуемся функцией mod, позволяющей вычислить остаток от деления двух чисел. Если в результате остаток от деления заданного числа D на семь будет равен единице, то это понедельник (по условию первое число — понедельник), двойке — вторник, тройке — среда, и так далее. Следовательно, при построении алгоритма необходимо использовать семь условных операторов. Решение задачи станет значительно проще, если при написании программы воспользоваться оператором альтернативного выбора (листинг 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. Дано натуральное число N. Определить количество цифр в числе.

Для того, чтобы подсчитать количество цифр в числе, необходимо определить, сколько раз заданное число можно разделить на десять нацело. Например, пусть N = 12345, тогда количество цифр kol = 5. Результаты вычислений сведены в таблицу 3.1.

Текст программы, реализующей данную задачу, можно записать так:

Таблица 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. Дано натуральное число N. Определить K — количество делителей этого числа, не превышающих его. Например, для N = 12 делители 1, 2, 3, 4, 6. Количество делителей K = 5.

Для решения поставленной задачи нужно реализовать следующий алгоритм: в переменную K, предназначенную для подсчёта количества делителей заданного числа, поместить значение, которое не влияло бы на результат, т.е. нуль. Далее организовать цикл, в котором изменяющийся параметр i выполняет роль возможных делителей числа N. Если заданное число делится нацело на параметр цикла, это означает, что i является делителем N, и значение переменной K следует увеличить на единицу. Цикл необходимо повторить только N/2 раз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. Дано натуральное число N. Определить, является ли оно простым. Натуральное число N называется простым, если оно делится нацело без остатка только на единицу и N. Число 13 — простое, так как делится только на 1 и 13, 12 не является простым, так как делится на 1, 2, 3, 4, 6 и 12.

Алгоритм решения этой задачи заключается в том, что число N делится на параметр цикла i, изменяющийся в диапазоне от 2 до N/2. Если среди значений параметра не найдётся ни одного числа, делящего заданное число нацело, то N — простое число, иначе оно таковым не является. Разумно предусмотреть в программе два выхода из цикла. Первый — естественный, при исчерпании всех значений параметра, а второй — досрочный, с помощью оператора 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)?
Алексей Игнатьев
Алексей Игнатьев

Возможна ли разработка приложения на Octave с GUI?

Евгений Ветчанин
Евгений Ветчанин

Добрый день. Я самостоятельно изучил курс "Введение в Octave" и хочу получить сертификат. Что нужно сднлать для этого? Нужно ли записаться на персональное обучение с тьютором или достаточно перевести деньги?