Лабораторные работы по ИТ за 2 семестр (ФЭЛ) / 9283_Зикратова_ИТ_ЛР№7
.docxМИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В. И. Ульянова (Ленина)
Кафедра РТЭ
отчёт
по лабораторной работе №7
по дисциплине «Информационные технологии»
Тема: Алгоритм генерирования разбиений
Студентка гр. 9283 |
|
Зикратова А. А. |
Преподаватель |
|
Кочунов К. В. |
Санкт-Петербург
2020
Цель работы:
Освоение алгоритма разбиения и его реализация.
Задание:
Ввести с клавиатуры произвольное число. Применяя рекурсивный
алгоритм генерирования разбиений получить и вывести на экран все
возможные комбинации чисел, дающих в сумме введенное число.
Текст программы:
global F m
m = input('Введите положительное число: ');
F=zeros(1,m); % создание пустого массива
disp('Разложения на слагаемые: ');
i=1;
dec(F,m,m,i); % задаём аргументы для функции
disp(' '); % перенос на новую строчку
function dec(F,n,k,i)
if n>0
if 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
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
Вывод:
в ходе проделанной лабораторной работы был реализован рекурсивный алгоритм разбиения. Программа выводит комбинации чисел, дающих в сумме введённое число.