Скачиваний:
10
Добавлен:
27.01.2021
Размер:
16.63 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В. И. Ульянова (Ленина)

Кафедра РТЭ

отчёт

по лабораторной работе №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

Вывод:

в ходе проделанной лабораторной работы был реализован рекурсивный алгоритм разбиения. Программа выводит комбинации чисел, дающих в сумме введённое число.