
IT ФЭЛ, кафедра МНЭ, 2 сем, Matlab / ЛР7 / Lab7
.docxМИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра микро- и наноэлектроники
отчет
по лабораторной работе
по дисциплине «Информационные технологии»
Тема: «Алгоритм генерирования разбиений»
Студент гр. 1282 |
|
БОГДАН |
Преподаватель |
|
Фирсов Д. Д. |
Санкт-Петербург
2022
Задание 1.
Задача:
Ввести с клавиатуры произвольное число. Применяя рекурсивный алгоритм генерирования разбиений получить и вывести на экран все возможные комбинации чисел, дающих в сумме введенное число.
Ход работы:
global A
m = input('Введите положительное число: ');
A=zeros(1,m);
disp('Разложение на слагаемые: ');
i=1;
dec(A,m,m,i);
function dec(F,n,k,i)
if n < 0
elseif n == 0
for j=1:i
if j>numel(F)
break;
end
if F(j)==0
disp(' ');
else
fprintf('%d ',F(j));
end
end
else
if n-k >= 0
F(i) = k;
dec(F, n-k, k, i+1);
end
if k-1>0
dec(F,n,k-1,i);
end
end
end
Листинг программы:
введите положительное число: 6
разложение на слагаемые:
6
5 1
4 2
4 1 1
3 3
3 2 1
3 1 1 1
2 2 2
2 2 1 1
2 1 1 1 1
1 1 1 1 1 1
Вывод: В ходе выполнения лабораторной работы был реализован алгоритм генерирования разбиений. Результатом алгоритма стал вывод на экран всех возможных комбинаций чисел, дающих в сумме введенное число.