Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Листинг программы
domains
file=df
i=integer
list=i*
Z=integer
predicates
summa(list,real)
menu
repeat
process(i)
error
input(symbol)
read
readlist(list)
printlist(list)
dlina(list,integer)
delete(list,integer,list)
newlist(list,list)
clauses
repeat.
repeat:-repeat.
menu():-repeat,clearwindow,
write("1.sozdanie"),nl,
write("2.dobavlenie"),nl,
write("3.modifikaciya"),nl,
write("4.udalenie"),nl,
write("5.prosmotr"),nl,
write("6.obrabotka"),nl,
write("7.vyhod"),nl,nl,
write("vybor (1-7): "),nl,readint(X),
process(X),X=7,!.
process(X):-X<1,error.
process(X):-X>7,error.
process(7):-write("press any key... \n"),readchar(_).
process(1):-makewindow(1,13,15,"sozdanie",10,10,10,30),
write("file name: "), readln(F),
openwrite(df,F),
write("budite vvodit? (y/n): "),
readln(C),input(C),closefile(df),
removewindow.
process(2):-makewindow(2,13,15,"dobavlenie",10,10,10,30),
write("file name: "),readln(F),
openappend(df,F),
input("y"),closefile(df),removewindow.
process(3):-makewindow(3,13,15,"modificirovanie",10,10,10,30),
write("file name: "),readln(F),
openmodify(df,F),
write("nomer zapsisi: "),readint(M),I=(M-1)*7,
readdevice(df),
filepos(df,I,0), readint(C),readdevice(keyboard),
write("znachenie: ",C),nl,
write("novoe znachenie: "),readint(D),
writedevice(df), filepos(df,I,0),writef("%5.0",D),nl,
writedevice(screen),closefile(df),removewindow.
process(4):-makewindow(4,13,15,"udalenie",10,10,10,30),
write("file name:: "),readln(F),
openread(df,F),readdevice(df),
readlist(L),readdevice(keyboard),closefile(df),
write("Nomer zapisi: "),readint(K),delete(L,K,L1),
openwrite(df,F),writedevice(df),printlist(L1),
writedevice(screen),closefile(df),removewindow.
process(5):-makewindow(5,13,15,"prosmotr",10,10,10,30),nl,
write("file name:: "),readln(F),
openread(df,F),readdevice(df),
print,readdevice(keyboard),readchar(_),
closefile(df),removewindow.
process(6):-makewindow(6,13,15,"obrabotka",10,10,10,30),nl,
write("file name:: "),readln(F),
openread(df,F),readdevice(df),
readlist(L),readdevice(keyboard),
closefile(df),newlist(L,L1),summa(L1,S),nl,write("summa: ",S),readchar(_),
openwrite(df,"work.txt"),writedevice(df),
printlist([S]),writedevice(screen),
closefile(df),removewindow.
error:-nl,write("net takogo punkta!"),readchar(_).
input("n"):-!.
input("y"):-write("vvedite element: "), read,write("budete vvodit? (y/n)?"),
readln(C),input(C).
read:-readint(N),!,writedevice(df),writef("%5.0",N),nl,writedevice(screen).
print:-not(eof(df)),!,readln(N),write(N),nl,print.
print:-readdevice(keyboard).
readlist([]):-eof(df),!.
readlist([H|L]):-readint(H),readlist(L).
printlist([H|L]):-!,writef("%5.0",H),nl,printlist(L).
printlist([]).
dlina([],0).
dlina([_|L],N):-dlina(L,N1),N=N1+1.
delete([_|L],1,L).
delete([X|L],K,[X|L1]):-K>1,K1=K-1,delete(L,K1,L1).
newlist([],[]).
newlist([H|L],[H|L1]):-H>0,newlist(L,L1).
newlist([H|L],L1):-H<=0,newlist(L,L1).
summa([],0).
summa([X|L],S):-newlist(L,L1),summa(L1,S1),S=S1+X.
Тестирование:
Вывод: Для выполнения лабораторной работы было предложено создать программу работы с файлами целых чисел. Выполнение данной задачи основано на реализации функций обработки файлов, таких как: а) создание файла; б) добавление элемента в файл; в) модификацию данных в файле; г) удаление элемента в файл; д) просмотр файла (вывод на экран); ж) найти сумму положительных элементов файла. Решение представленной задачи позволяет разработать пролог-программу обработки файлов с созданием среды пользователя с помощью многооконных меню, которую в дальнейшем можно модифицировать под другие задачи.