I-BOB.
ALGORITM TILI HAQIDA
1.1 Algoritmik tillarning umumiy
tavsifi
Ma'lumki EHM berilgan algoritmlarni formal bajaruvchi avtomat hisoblanadi,
shuning uchun biror masalani EHMda yechishda unga mos algoritmni berish zarur. Algoritmni
EHMga uzatishda esa uni maxsus «mashina tili»ga o'girib mashina kodida yozilgan
dasturga aylantiriladi. Shu bilan bir qatorda EHMning turli xil tiplari
turlicha tillarga ega bo'ladi, ya'ni biror EHM uchun yozilgan dastur boshqa EHM
uchun tushunarsiz bo'lishi mumkin. Shunday qilib, har bir EHM faqat o'zining
«mashina tili»da yozilgan dasturlarnigina tushunishi va bajarishi mumkin.
Mashiaa kodida yozilgan dasturlarning ko'rinish sifati juda kambag'aldir,
chunki bu dasturlar faqat 0 va 1 laming maxsus ketma-ketligidan tashkil topadi.
Bu esa mutaxassis bo'lmagan odamga tushunarsiz bo'lib, dastur tuzishda noqulayliklar
keltirib chiqaradi.
Aytib o'tilganlardan shuni xulosa qilish mumkinki, mashina tilidan foydalanish
odam uchun uni qiziqtirgan, ya'ni yechishi lozim bo'lgan masalaning algoritmini
ishlab chiqishda va yozishda juda katta qiyinchiliklar va muammolar
tug'diradi.
Yuqorida
aytib o'tilgan qiyinchiliklarni bartaraf qilish, dasturchining ishini
osonlashtirish va yaratilgan dasturlarning ishonchlilik darajasini oshirish
maqsadida yuqori darajadagi dasturlash tillari yoki algoritmik tillar
yaratilgan.
Algoritmik tillarning mashina
tillaridan asosiy farqlari sifatida quyidagilarni ko'rsatish mumkin:
— mashina tili alifbosidan algoritmik til alifbosining o'ta kengligi;
— tuzilgan dastur matnining ko'rinish sifatini keskiri oshiradi;
— ishlatilishi mumkin bo'lgan amallar majmui mashina amallari majmuiga
bog'liq emas;
— bajariladigan amallar odam uchun qulay ko'rinishda, ya'ni amalda qabul
qilingan matematik belgilashlarda beriladi;
— amallar operandlari uchun dasturchi tomonidan beriladigan shaxsiy
ismlar qo'yish mumkinligi;
— mashina uchun ko'zda tutilgan ma'lumot tiplaridan tashqari yangi tiplar
kiritish imkoniyati yaratilganligi.
Shunday qilib, ma'lum ma'noda aytish mumkinki, algoritmik tillar mashina
tiliga bog'liq emas.
Yuqorida aytilganlardan kelib chiqqan holda ma'lum bo'ldiki, algoritmik tilda
yozilgan masala yechimining algoritmi to'g'ridan-to'g'ri EHMda bajarilishi
mumkin emas ekan. Buning uchun esa, algoritm oldindan ishlatilayot-gan EHMning
mashina tiliga translyator (kompilyator yoki interpretator) yordamida
o'girilishi lozim. Translyator — mashina tilida yozilgan maxsus dastur bo'lib,
uning asosiy maqsadi algoritmik tillarda yozilgan dastur matnini EHM tiliga
tarjima qilishdan iboratdir.
Amalda dasturlashda foydalanilayotgan algoritmik tillar o'z ma'nosiga ko'ra
algoritmni so'zli-formulali yozish uslubiga o'xshab ketadi, ya'ni ma'lum bir
qism ko'rsatmalar oddiy matematik formulalar, boshqa qismlar esa so'zlar
yordamida ifodalanishi mumkin. Misol sifatida n va m natural
sonlarning eng katta umumiy bo'luvchisi (EKUB)ni topish algoritmini ko'rib
chiqaylik:
1. A=n, B-m deylik
2. Agar A=B bo'lsa 5-bandga, aks holda 3-bandga o't.
3. Agar A>B bo'lsa A ning yangi qiymati deb А—В ni
qabul qil, В ni
qiymatini o'zgartirma; aks holda В ning yangi qiymati deb B—A ni
qabul qil, A ning qiymatini o'zgartirma.
4. 2-bandga o't.
5. ЕКUВ=A va hisobni
to'xtat.
Ushbu
algoritmni qisqaroq ko'rinishda quyidagicha ifodalashimiz ham mumkin:
1. A=n, B=m deylik;
2. Agar A>B bo'lsa A=A—В aks holda B=B—A,
A=B bo'lguncha 2-bandni takrorla.
3. EKUB=A va hisobni to'xtat.
Ushbu misoldan ko'rinib turibdiki algoritmlarni bunday yozish uslubi odam uchun
ham qulay va ham tushunarlidir. Lekin bu uslubda ham ma'lum kamchiliklar ko'zga
tashlanadi:
— algoritmni ortiqcha ko'p so'zli va uzun deyish mumkin;
— bir xil ma'nodagi ko'rsatmani turli xil uslublarda berish mumkinligi;
— bunday erkin ko'rinishda ifodalangan algoritmni EHM tiliga o'tkazish
imkoniyati kamligi.
Yuqoridagi kabi kamchiliklarni bartaraf qilish uchun formallashgan, qat'iy
aniqlangan algoritmik tillar ishlab chiqilgan. Algoritmik tillar uchta o'zakdan
tashkil topadi: til alilbosi, sintaksisi va semantikasi.
Til alifbosi shu tilgagina tegishli bo'lgan chekli sondagi
belgilardan tashkil topadi. Dastur matnini yozishda faqat shu belgilardangina
foydalanish mumkin, boshqa belgilarni esa til tanimaydi, ya'ni ulardan
foydalanish mumkin emas.
Til sintaksisi alfavit harflaridan tashkil topgan bo'lib, V
mumkin bo'lgan konstruksiyalarni aniqlovchi qoidalar tizimidir. Mazkur tilda
ifoda etilgan to'la algoritm va uning alohida hadlari shu konstruksiyalar
orqali ifoda qilinadi. Shunday qilib, belgilarning har qanday ketma-ketligini,
hamda mazkur tilning matni to'g'riligi yoki noto'g'riligini Nil sintaksisi
orqali bilib olamiz.
Til semantikasi algoritmik tilning ayrim konstruksiyalari uchun
qoidalar tizimini tushuntirishga xizmat qiladi.
Endi algoritmik tiliarning qaysilari amalda ko'proq ishlatilishi haqida fikr
yuritsak. Ma'lumki, 70-yillarda bir guruh muammoliyo'naltirilgan algoritmik
tillar yaratilgan bo'lib, bu dasturlash tillaridan foydalanib juda ko'p
sohalardagi muammoli vazifalar hal qilingan. Hisoblash jarayonlarining
algoritmlarini ifodalash uchun Algol-60 va Fortran tillari, iqtisodiy
masalalar algoritmlari uchun Kobol va Algek tillari, matnli axborotlarni tahrir
qilish uchun esa Snobol tillari ishlatilgan. Sanab o'tilgan bu algoritmik
tillar asosan katta hajmli, ko'pchilikning foydalanishiga mo'ljallangan EHMlar
uchun mo'ljallangan edi.
Hozirda insoniyat faoliyatining barcha jabhalariga shaxsiy elektron hisoblash
mashinalari (SHEHM) shaxdam qadamlar bilan kirib bormoqda. Asosan SHEHMlarga
mo'ljallangan, hamda murakkab jarayonlarning hisob ishlarini bajarish va juda
katta ma'lumotlar tizimi bilan ishlashni tashkil etuvchi yangi algoritmik
tillar sinfi borgan sari kengayib bormoqda. Bu tillar jumlasiga quyidagi
tillarni kiritish mumkin:
■ Beysik tili;
■ Paskal tili;
■ Si tili va hokazo.
Dastur
tuzishni o'rganishni boshlovchilarga mo'ljallangan, savol-javob tizimida
ishlaydigan, turli-tuman jarayonlar algoritmini yozishga qulay bo'lgan
tillardan biri BEYSIK(BASIC) tilidir. Beysik tilining nomi ingliz so'zi
(Beginner's All-purpose Symbolic Instruction Code) ning o'qilishiga mos kelib,
boshlovchilar uchun belgili ko'rsatmalar kodi(tili) degan ma'noni anglatadi.
Beysik tilini yaratish ustidagi ishlar 1963 yilning yozidan boshlangan. Tilning
ijodkorlari taniqli olimlar T.Kurs va J.Kemenilar hisoblanadi. Hozirga kelib
Beysik tilining turli xil yangi ko'rinishlari ishlab chiqilmoqda va ulardan
foydalanib millionlab dasturchilar ajoyib dasturlar yaratishmoqda.
Endi nisbatan mukammalroq bo'lgan Paskal va Si algoritmik tillari haqida
qisqacha fikr yuritsak.
Paskal tili 1969 yili N.Virt tomonidan yaratilib, mash-hur olim Blez Paskal
nomi bilan ataldi. Bu til N.Virtning o'ylashi bo'yicha dasturlashning zamonaviy
texnologiyasiga va uslubiga, strukturali dasturlash nazariyasiga asoslangan
hamda boshqa dasturlash tillariga nisbatan mu-ayyan ustunlikka ega bo'lgan til
bo'lishi lozim edi. Mazkur til:
1. Dasturlash konsepsiyasini va strukturasini tizimli (sistemali) va aniq
ifodalaydi;
2. Dastur tuzishni tizimli olib borish imkonini beradi;
3. Dastur tuzish uchun boy termin va struktura tarh-lariga ega;
4. Yo'l qo'yilgan xatoliklarni tahlil qilishning yuqori darajadagi
tizimiga ega.
1981 yili Paskal tilining halqaro standarti taklif etildi va IBM PC tipidagi
shaxsiy komputerlarda Paskal tilining Borland firmasi tomonidan ishlab
chiqilgan Turbo-Paskal oiladosh tili keng qo'llanila boshlandi. Hozirda
Turbo-Paskalning bir qancha versiyalari yaratilib, yuqori darajadagi dasturlar
yaratish imkoniyatlari borgan sari kengaytirilib borilmoqda:
4.0 versiyasidan boshlab dastur yozishni, tahrir qilishni va natijalar olishni
osonlashtirish uchun yangi integrallasngan muhit hosil qilindi;
5.5 versiyasining paydo bo'lishi bilan Turbo-Paskalda ob'ektli dasturlash
imkoniyati paydo bo'ldi;
6.0 versiyasidan boshlab esa Paskal dasturi ichiga quyi dasturlash tili
bo'lmish Assembler tilida yozilgan dastur-larni qo'shish holati hosil qilindi.
Shu bilan bir qatorda tilning integrallashgan muhiti ham bir qator
o'zgarishlarga duchor bo'ldi.
Si tili 1972 yili D.Richi tomonidan turli xil EHMlar uchun universal
til sifatida ishlab chiqilgan va dasturchi dastur tuzish jarayonida hisoblash
mashinasining imkoniyatlaridan keng foydalanishi mumkin. Shuning uchun, bu til
barcha narsani qilishga qodir degan tushuncha hosil bo'lgan.
Hozirda amalda foydalanilayotgan ko'pgina operatsion tizimlar Si tilida
yaratilgan.
Metalingvistik
formulalar tili
Algoritmik tilning sintaksis qoidalarini yozish va tushuntirish uchun ham
qandaydir til lozim bo'ladi. Bu til bilan dasturlashning algoritmik tillarini
almashtirib yubormaslik kerak. Kiritilishi kerak bo'lgan bu til dasturlash
tilini aniqlash uchun kerak bo'ladi. Bu til «meta till» deb ataladi.
Tilni ifodalashda Bekus-Naurning metalingvistik formulalaridan (BNF)
foydalaniladi.-
BNF tilida
dasturlash tillarining sintaksisi ixcham va formulalar ko'rinishida aniqlanadi.
Bu formulalar oddiy arifmetik formulalarga o'xshab ketadi, shuning uchun ham
ularni metalingvistik formulalar (qisqacha metaformula) deb ataladi.
Metaformulaning
o'ng va chap qismlari «::=» belgisi bilan ajratiladi. Belgining ma'nosi
«aniqlanishi bo'yicha shunday» jumlasiga yaqinroq. Bu belgining o'ng tomonida
meta o'zgaruvchi, chap tomonida esa meta o'zgaruvchining qiymatlar to'plami
yotadi. Tushunishga oson bo'lishi uchun meta o'zgaruvchilar, yoki ularning
qiymatlari burchak qavslar («<» va «>») ichiga olib yoziladi. Masalan
<son>, <arifmetik ifoda>, <operator> va hokazo.
Meta o'zgaruvchilarning meta qiymatlari bir
necha mumkin bo'lgan konstruksiyalardan tashkil rtopishi mumkin. Bu holda
konstruksiyalar o'zaro tik chiziq ( | ) bilan ajratiladi. Bu belgining ma'nosi
«yoki» so'ziga yaqinoq tushunchadir.
Metaformulalarga
misollar:
1.<o'zgaruvchi>::=
A | В
<ifoda>::=
<o'zgaruvchi> | <o'zgaruvchi> + <o'zgaruvchi> |
<o'zgaruvchi> — <o'zgaruvchi>
bu formuladan
<o'zgaruvchi> deganda A yoki В harf-lari tushuniladi,
<ifoda> tushunchasi ostida quyidagi 10 ta holning biri bo'lishi mumkin:

2. <ikkilik
raqam>::= 0|l
3. <ikkilik kod>::=<ikkilik raqam> |
<ikkilik kod> <ikkilik raqam>
3-misolda o'ng tomonda aniqlanayotgan tushuncha yotibdi, bu meta formulalarning
rekursiv xossasiga ega ekanligini ko'rsatadi.
Meta
formulalarni yozishda «{», «}» qavslar uchrab turadi. Bu qavs ichiga olib
yozilgan konstruksiya takrorlanuvchi konstruksiya hisoblanadi.