Работа со списками

  • Вид работы:
    Практическое задание
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    25,96 Кб
  • Опубликовано:
    2015-03-25
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Работа со списками

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РЕСПУБЛИКИ БЕЛАРУСЬ

БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Факультет информационных технологий и робототехники

Кафедра программного обеспечения вычислительной техники и автоматизированных систем






Отчет по лабораторной работе № 6

по дисциплине: ”Функциональное и логическое программирование”

на тему: ”РАБОТА СО СПИСКАМИ. ”

Выполнили: студенты группы 02213 Малич К.В. Шарко А.В.

Приняла: ст.пр. Ковалькова И.А.



Минск 2014

Задание

Цель работы: приобретение навыков работы со списками в программах на Visual Prolog.

Из списка L1 получить список L2, очередной элемент которого равен среднему арифметическому очередной тройки элементов списка L1. Если число элементов списка L1 не кратно 3, то последний элемент списка L2 получается делением на 3 одного или суммы двух последних элементов списка L1. Список L1 вводится по подсказке с экрана. В результате выполнения программы должны выдаваться исходный L1 и результирующий L2 списки.

Удалить все вхождения заданного элемента в списке.

Б Произвести сдвиг элементов списка (не циклический):

на N позиций влево (вправо).

Определить разность между максимальным и минимальным элементами списка.

Удалить первое вхождение заданного элемента в списке.

Вычислить сумму элементов, стоящих в списке на нечетных местах, и сумму элементов, стоящих на четных местах.

Заменить в списке все элементы со значением X на значения Y.

Код программы

/*domains=real*read_list(integer,list)resultchg (list, real, list)_list(0,[])._list(N,[H|T]):-readreal(H),N1=N-1, read_list(N1,T).([], _ , []) if !.([H|T], H, T1) if chg (T, H, T1),!.([H|T], S, [H|T1]) if chg (T, S, T1),!.:-write("Введите число элементов списка"),nl, write("N="),readint(N),nl,("Вводите элементы списка"),nl, read_list(N,L), write("Исходный список L="),(L),nl,nl,write("Введите искомый элемент"),nl, readreal(E),nl, chg(L, E, LL),write ("Результирующий список:"), nl, write(LL), nl..*/

/*domains=real*read_list(integer,list)resultdel (real, list, list)_list(0,[])._list(N,[H|T]):-readreal(H),N1=N-1, read_list(N1,T).(X, [X|T], T).(X, [Y|T], [Y|T1]) if del(X, T, T1).:-write("Введите число элементов списка"),nl, write("N="),readint(N),nl,("Вводите элементы списка"),nl, read_list(N,L), write("Исходный список L="),(L),nl,nl,write("Введите искомый элемент"),nl, readreal(E),nl, del(E, L, LL),write ("Результирующий список L="), write(LL), nl..*/=integer*.summ_nechet(list,integer, integer)summ_chet(list,integer, integer)readlist(list)_nechet([], _, 0):-!._nechet([H|T], I, R):-mod 2 = 0, !, II = I + 1, summ_nechet(T, II, TR), R = TR + H;= I + 1, summ_nechet(T, II, R)._chet([], _, 0):-!._chet([H|T], I, R):-mod 2 = 1, !, II = I + 1, summ_chet(T, II, TR), R = TR + H;= I + 1, summ_chet(T, II, R).([H|T]):-readint(H),!,readlist(T). readlist([]).("Vvodite elementi spiska"),nl,(L),("Summa chetnih:"),nl,_chet(L, 0, S).*/=integer*(integer,ilist,ilist)._last(ilist,ilist)._last(ilist,ilist).(ilist,integer,ilist).(ilist)._last([_],[]):-!._last([H|Tail],[H|NewTail]):-del_last(Tail,NewTail)._last([],[0]):-!._last([H|Tail],[H|NewTail]):-add_last(Tail,NewTail).(0,L,L):-!.(N,T,L):-del_last(T,T1),N1=N-1,pravo(N1,[0|T1],L).(A,N,B):-pravo(0,A,A1),pravo(N,A1,B).([H|T]):-readint(H),!,readlist(T). readlist([]).("Vvod N "),(N),("Введите элементы (конец ввода - двойное нажатие на ENTER): "),nl,(L),(L,N,B).*/=real*readlist(list).max(list,integer).min(list,integer).res(integer,integer,integer).([X], X).([H|Tail], H)if max(Tail, M), H>M,!.([_|Tail], M)if max(Tail, M).([X], X).([H|Tail], H)if min(Tail, M), H<M,!.([_|Tail], M)if min(Tail, M).(X,Y, R) if R=X-Y.([H|T]):-readint(H),!,readlist(T). readlist([]).("Введите элементы (конец ввода - двойное нажатие на ENTER): "),nl,(L),(L, X),(L,Y),(X, Y, Res).

*/= integer*print(list)replace(list, integer, integer, list)([]) :- !.([H|[]]) :- write(H).([H|T]) :- write(H, ", "), print(T).([], _, _, []) :- !.([H|T], X, Y, [H|R]) :- H <> X, replace(T, X, Y, R).([H|T], X, Y, [Y|R]) :- H = X, replace(T, X, Y, R).("Enter list:"), nl,(list, L), nl,("Enter X:"), nl,(X), nl,("Enter Y:"), nl,(Y), nl,(L, X, Y, R),('['),(R),("]."), nl,(_).

*/

Скриншоты результатов








Ответы на контрольные вопросы

.        Что такое список?

Список - это специальный вид сложного терма, состоящий из последовательности термов, заключенных в квадратные скобки и разделенных запятой. Как обозначается отсечение в программе?

.        Голова и хвост списка. Изображение списка в виде головы и хвоста.

Н - голова, Т - хвост списка. Изображается в виде [H|T]. H- первый элемент, Т - список оставшийся.

.        Как обозначается пустой список?

.        Можно ли изобразить пустой список в виде головы и хвоста ?

Нет.

.        Может ли быть в голове списка более одного элемента?

Да, может.

.        Принадлежит ли элемент 5 списку [[1, 2, 3], [4, 5, 6]]?

Нет, он принадлежит элементу списка.

.        Сопоставимы ли два списка: [5, 6, 7] и [H|T] ?

Да.

.        Можно ли в процедурах ввода списка ввод_списка1 и ввод_списка2 поменять местами первое и второе предложения?

Нет.

.        Как нужно изменить процедуру удал_перв_эл, чтобы можно было удалить из списка: a) два первых элемента; б) второй элемент?

удал_перв_эл([ _ | T], T).

А) удал_перв_эл([ _ ,_| T], T).) удал_перв_эл([ H,_ | T], [H|T]).

.        Как нужно изменить процедуру удал_посл_эл, чтобы из списка были удалены: a) два последние элементы; б) предпоследний элемент ?

А) удал([_,_],[]).

удал([H|T],[H|T1]) if удал(T,T1).

удал([_],[]).) удал [_,X],[X]).

удал([H|T],[H|T1]) if удал(T,T1).

удал([_],[]).

.        Как нужно изменить процедуру выдел_перв_эл, чтобы можно было выделить из списка: a) два первых элемента; б) второй элемент ?

А) выдел_перв_эл([H,H1| _ ], H,H1).) выдел_перв_эл([H,H1| _ ], H1).

.        Как нужно изменить процедуру выдел_посл_эл, чтобы из списка можно было выделить: a) два последние элементы; б) предпоследний элемент?

выдел_посл_эл([ _ |T], X,H):- выдел_посл_эл(T, X,H).) выдел_посл_эл([X,_], X).

выдел_посл_эл([ _ |T], X):- выдел_посл_эл(T, X).

.        Как нужно изменить процедуру доб_эл_в_начало, чтобы можно было вставить заданный элемент между первым и вторым элементами списка ?

доб_эл_в_начало(E, [H,H1|T], [H,E,H1|T]).

.        Как нужно изменить процедуру доб_эл_в_конец, чтобы заданный элемент вставился перед последним элементом списка ?

доб_эл_в_конец(E, [H], [E,H]).

доб_эл_в_конец(E, [H|T], [H|T1]):- доб_эл_в_конец(E, T, T1).

.        Можно ли в программе со списками обойтись без раздела domains ?

Нет

список вхождение хвост нечетный

Вывод

Приобрели навыки работы со списками в программах на Visual Prolog.


Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!