2.7 O’rta arifmetikni hisoblovchi dastur.
Quyida o’rta arifmetikni hisoblovchi dastur tuzdik.
% Файл main.pro
implement main
open core, console
class predicates
avg : (real*, real, real, real) procedure (i, i, i, o).
clauses
% classInfo("avg", "1.0").
avg([], S, L, S/L).
avg([X|Xs], S, L, A) :-
avg(Xs,X+S,L+1.0, A).
run():- console::init(),
List= read(),
avg(List, 0, 0, A),
write(A), nl.
end implement main
goal
mainExe::run(main::run).
Quyidagi ifodada o’rta arifmetik qanday ishlashini ko’rib chiqamiz.
avg([], S, L, S/L).
avg([X|Xs], S, L, A) :-
avg(Xs, X+S, L+1.0, A).
Bizga S- qiymat va L- uzunlik berilgan. Bu yerda bir paytni o’zida qiymatni ham uzunlikni ham hisoblaydi.
Masalan bizga shunday misol berilgan bo’lsin. [34,6,9,12] sonlarning o’rta arifmetigini hisoblash kerak. Avval qiymatni ham 0 deb, uzunlikni ham 0 deb oladi. Bu amal dasturda avg(List,0,0,A) orqali ko’rsatilgan. Bu predikat 4 ta parametrga ega. 1- parametr-berilgan ro’yxat, 2-parametr-berilgan ro’yxat elementlar yigi’ndisini hisoblash uchun mo’ljallangan, 3-parametr-berilgan ro’yxat elementlar sonini aniqlash uchun mo’ljallangan. So’ngra, avg([X|Xs], S, L, A) :-
avg(Xs,X+S,L+1.0, A) fakt asosida ro’yxatdan birinchi elementni olib ro’yxat uzunligiga 1 ni qo’shadi va shu birinchi o’rinda turgan elementni elementlar yigindisini hisoblovchi kattalik qiymatiga qo’shadi. Bizda 1- element 34 bo’lgani uchun natija quyidagicha bo’ladi.
Qiymat ham, uzunlik ham 0 bo’lganda natija [34,6,9,12],0,0,A ni oladi. Keyingi qadamda dasturda quyidagi satr avg([X|Xs], S, L, A) (X- ro’yxatni 1- elementi, Xs dumi) avg(Xs, X+S, L+1.0, A)bundan kelib chiqadi [6,9,12],34,1,A
Keyingi qadamda 2- o’rindagi sonni oladi va natijada 34 ga 6ni qo’shadi, uzunlikka 1ni qo’shadi. Natijada qiymat 40, uzunlik esa 2 bo’ladi. Natijani ko’rinishi quyidagicha bo’ladi: [9,12],40,2,A
Keyingi qadamda 3-o’rindagi sonni oladi va natijada 40 ga 9ni qo’shadi, uzunlikka 1ni qo’shadi. Natijada qiymat 49, uzunlik esa 3 bo’ladi. Natijani ko’rinishi quyidagicha: [12],40,3
Keyingi qadamda 4- o’rindagi sonni oladi va natijada 40 ga 12ni qo’shadi, uzunlikka 1ni qo’shadi. Natijada qiymat 52, uzunlik esa 4 bo’ladi. Natijani ko’rinishi quyidagicha: [],64,4 Nihoyat, bo’sh ro’yxatga yetib kelgach avg([], S, L, S/L) fakt asosida ish bajariladi. Bunda 2-parametrda hisoblangan elementlar yig’indisi 3-parametrda hisoblangan elementlar soniga bo’linadi. Shu tariqa natija ya’ni o’rta arifmetik qiymat hisoblanadi.
Bu yerda avg degan predikat yasalgan . Qiymati real deb olingan. Natija A orqali olinadi.
(2.2 -rasm) o’rta arifmetikni hisoblovchi dastur
Olingan natija ekranga yuqoridagi rasmdagidek chiqadi.
Do'stlaringiz bilan baham: |