Вы находитесь на странице: 1из 5

Федеральное государственное бюджетное образовательное учреждение высшего

образования
«Сибирский государственный университет телекоммуникаций и
информатики»
(СибГУТИ)

Кафедра прикладной математики и кибернетики

РАСЧЕТНО-ГРАФИЧЕСКОЕ ЗАДАНИЕ
по дисциплине «Функциональное и логическое программирование»

Вариант 6

Выполнил:
студент группы ИП-916

Зырянов Константин Вячеславович

Работу проверила:
Белевцова Екатерина Андреевна

Новосибирск 2021 г.
Задание
1. Осуществите циклический сдвиг в списке на n элементов вправо.
2. В текстовом файле, состоящем из нескольких строк, упорядочите
слова в каждой строке лексикографически. Сформируйте новый файл.
Алгоритмы программ
Задание 1:

1. Исходный список разделяется на левую и правую части;

2.Записывается длина списка «List» в переменную «C».

3.Вычисляется, на сколько элементов действительно нужно сдвинуть


список (включение в функционал случая, когда N больше длины
списка).

4. Находится вариант разбиения списка такой, что длина правой части


равна N1.

5. Левая и правая части соединяются «задом наперед», т.е. справа


ставится левая, а слева — правая при помощи «append».

Задание 2:

1. Напишем предикат «rgr2», который открывает файл «rgr2in.txt» для


чтения предикатом see. Он же отвечает за открытие и закрытие файла
«rgr2out.txt» с итоговым результатом

2. Формируем список «R» из списков «F», состоящих из


лексикографически упорядоченных (с помощью «bubble_sort») слов
каждой строки (из двух элементов выбирается наибольший и
передается для рекурсивной обработки, меньший элемент будет
дописан в начало, полученного в результате списка. Таким образом,
наибольший элемент продвигается в конец списка, остается вызывать
эту функцию до тех пор, пока вызов изменяет данные, в противном
случае список уже является упорядоченным)
3. Записываем каждый список из R в файл, используя «\n» в качестве
разделителя. В итоге получаем новый файл «rgr2out.txt» с
отсортированными строками.
Результат работы
Задание 1:

Скриншот 1. Работа первой программы

Задание 2:

Скриншот 2. Работа второй программы


Листинг
/*<Задание 1>*/
rgr1(List, N, F):- append(Left, Right, List), length(List, C), N1 is N
mod C, length(Right, N1) , append(Right, Left, F).

%%%%%%%%%%%%%%%%%

/*<Задание 2>*/

move_max_to_end([], []):-!.
move_max_to_end([Head], [Head]):-!.
move_max_to_end([First, Second|Tail],
[Second|ListWithMaxEnd]):-First @> Second,
!,move_max_to_end([First|Tail], ListWithMaxEnd).
move_max_to_end([First, Second|Tail], [First|ListWithMaxEnd]):-
move_max_to_end([Second|Tail], ListWithMaxEnd).
bubble_sort(SortedList, SortedList):-
move_max_to_end(SortedList, DoubleSortedList),SortedList =
DoubleSortedList, !.
bubble_sort(List, SortedList):-move_max_to_end(List,
SortedPart),bubble_sort(SortedPart, SortedList).

%atomic_list_concat(L,R,S).
writeFile1([]):-!.
writeFile1([H|T]):-writeFile(H),write("\n"),writeFile1(T).
writeFile([]):-!.
writeFile([H|T]):-write(H),write(" "),writeFile(T).

strssort([F|Tail]):-
readln(T),T\=[],!,/*print(T),*/bubble_sort(T,F),/*print(F),*/strssort
(Tail).
strssort([]).
rgr2():-
see('rgr2in.txt'),strssort(R),/*print(R),*/open('rgr2out.txt',write,FN)
,set_output(FN),writeFile1(R),close(FN),seen.

Вам также может понравиться