50
list=real*
predicates
read_list(integer,list)
wr_list(list)
write_list(list)
new_list(list,list)
result
clauses
/* N элементтен тұратын тізімді енгізу */
read_list(0,[]).
read_list(N,[H|T]):-readreal(H),N1=N-1,
read_list(N1,T).
/* Тізім элементтерін шығару. Əрбір элементтен кейін үтір қойылады */
wr_list([]).
wr_list([H|T]):-write(H,’,’),wr_list(T).
/* Стандартты түрде тізімнің шығуы */
write_list(L):-write(‘[’),wr_list(L),cursor(A,B),
B1=B-1, cursor(A,B1),write(‘]’).
/* Шықпа тізімнің сипатталуы */
new_list([],[]).
new_list([H1|T1],[H2|T2]):-H2=H1*2,new_list(T1,T2).
/* */
result:-write(“Тізім элементерінің санын енгізіңіз”),nl,
write(“N=”),readint(N),nl,
write(“Тізім элементтерін енгізіңіз”)nl,
read_list(N,L),
new_list(L,L1),
write(“Шықпа тізім”),
write_list(L),nl,nl,
write(“Жаңа тізім L1=”),
write_list(L1).
goal
result.
Зертханалық жұмыстың мазмұны.
Берілген L1 тізімінен жаңа L тізімін алу. ,кезекті элемент, кезекті L1
тізімінің арифметикалық ортасына тең. Егер тізім элементттерінің саны 3 ке
бөлінбесе , онда L2 тізімінің соңғы элементі 3 ке бөлінген немесе L1
тізімінің соңғы екі элементінің қосындысының бөліндісіне тең. L1 тізімі
экранда жасырын түрде шығады. Программаның орындалу нəтижесінде L1
шығыс тізімі жəне L2 тізімі стандартты түрде экранға шығуы тиіс.
Тізімдерге
тапсырмалар
.
1.
Тізімнің бірінші элементін анықтау.
2.
Тізімнің соңғы элементін анықтау.
3.
Тізімнің соңғы элементін өшіру.
4.
Тізімде пайда болған бірінші элементті жою.
51
5.
Берілген тізімдегі барлық кіріс элементтерін өшіру
.
6.
Тізім элементтерін кері ретпен шығару.
7.
Тізімнің берілген қатар бойынша жазылуын кері бағытта өзгерту.
8.
Тізім элементтерінің арифметикалық ортасын табу.
9. Берілген тізімнен полиндром жасау. Полиндром – бұл берілген тізім
оңнан солға, солдан оңға қарай оқығанда да бірдей дыбысталатын тізім
болып табылады. Полиндромға мысал - [1,2,3,2,1].
10.Тізім элементтерін циклдық қозғау арқылы шығару:
•
- бір орын солға (оңға)
•
- N орынға солға (оңға)
11. Тізім элементтерін қозғау арқылы шығару( циклдық емес)
•
- бір орын солға (оңға)
•
- N орын солға (оңға)
12. Берілген тізімді ұзындығы бірдей екі тізімге бөлу.
13. Берілген тізімді екіге бөлу. Оның бірінде берілген санға тең немесе одан
кіші элементтер, ал екінші тізімде берілген саннан үлкен элементтер
жинақталуы тиіс.
14. Тізімде берілген тақ орнындағы элементтердің жəне жұп орнындағы
элементтердің қосындысын есепте.
15. Тізімдегі алғашқы оң N элементті шығару.
16. Тізімдегі оң жəне теріс элементтердің санын есептеу.
17. Берілген тізімнің ең үлкен элементінің жəне ең кіші элементінің
айырмасын табу.
18. Тізімнің барлық элементтерін берілген элементтердің арифметикалық
ортасына кеміту.
19. Х элементіне дейінгі тізімнің басын өшіру. Х элементінен бастап тізімнің
соңына дейін өшіру.
20.Тізімде берілген Х элементтерін Ү элементтерімен алмастыру.
Есептің мазмұны:
Бұл есепте келесі пункттер болуы тиіс:
жұмыстың мақсаты;
программаның мəтіні;
тест нəтижелері.
2.6. Зертханалық жұмыс .№ 6 .Жолдар.
1.Мақсаты: Пролог тiлiндегi программалардағы жолдары бар жұмыстың
жаттығу дағдыларын алу.
2.Қысқаша
анықтама
мəліметтер
i: Прологта жолдармен жұмыс жасау үшін
үйреншікті предикаттардың жиыны болуы керек.
а) жолдың ұзындығының анықталуы.
str_len(жол, ұзындық)(string,integer):(i,o),(i,i)
б) жолдардың бiрiктiрлуi.
concat(1-ші жəне 2-ші беттегі жол 3-ші беттегі жолдарға бiрiгедi)(string,
string, string): (i,i,o)(o,i,i)(i,o,i)(i,i,i)
в) төменгi жолдарды құру:
52
frontstr(символдар саны, кіру жəне шығу беттері, қалдық) (integer, string,
string, string):(i,i,o,o)
Шеткі жол басқа жолдардан бастапқы символдар арқылы ерекшеленеді. Жол
саны белгілі параметрлермен саналады жəне қалған жолдар біріктіріледі.
г) жолдың бөлінуінің екі түрі бар: біріншісі символ, екіншісі қалған жол
бөліктері.
frontchar(жол,
бірінші
символ,
қалдық)(string,char,string):(i,o,o)(i,i,o)(i,o,i)(i,i,i)(o,i,i)
convert(“”,[]).
convert(Str, [H|T]):-frontchar(Str,H,Str1),convert(Str1,T).
Предикат Frontchar символдарды тiзiмге өрнектеуi үшiн қолданылады. Бұл
процедураның орындалу ережесі төмендегідей:
д) тексеру, кiрiспенiң атымен жол болып табылады.
isname(жол)(string):(i)
Жол келесi талаптарға сай болуы тиіс:
- жол əрiп, цифр жəне астын сызу символынан тұрады;
- жол əрiптен басталады;
- символдардың арасында бос орын болмау керек.
е)жолдардың атомдардан құрастырылуы:
ronttoken(жол, атом, қалдық)(string,string,string):(i,o,o)(i,i,o)(i,o,i)(i,i,i)(o,i,i)
Атоммен бола алады:
кiрiспенiң аты;
кiшi сандарды көрсету;
жеке символ.
Fronttoken
предикат
(frontcharдың
предикаты
бар
ұқсастық
бойынша)жолдарды атом тiзiміне өрнектеу үшiн қолданылады.
Жолдармен жұмыс жасау кезінде кіріспенің басқа да жолдары қолданылады:
•
бас əрiптерді кiшi немесе керiсiнше жолдық өрнектеу
•
upper_lower(1-ші жəне 2-ші беттер)(string,string):(i,i)(i,o)(o,i)
•
жолдың
символға
немесе
керiсiнше
өрнектелуi
str_char(жол,символ)(string,char):(i,o)(o,i)(i,i)
•
жолдардың санға немесе керiсiнше өрнектелуi
•
str_int(жол, бүтін сан)(string,integer):(i,o)(o.i)(i,i)
•
жолдың нақ санға немесе керiсiнше өрнектелуі
•
str_real(жол, нақты сан)(string,real):(i,o)(o,i)(i,i)
•
символдардың санға (ASCIIкоды) немесе керiсiнше өрнектелуi
•
char_int(символ, бүтін сан)(char, integer):(i,o)(o,i)(i,i)
•
•
Тапсырмалар:
Зетрханалық жұмыс бойынша тапсырма.
Енгізілген жолдарды экран бетіне шығару:
Жолдар
бойынша
есептер
.
1.
Енгiзiлген жолда «а» əріпінің қанша рет кездесетінін санау.