So'z boshi

 

            Aziz o'quvchi! Eng avval shuni aytib o'tish joizki, siz ajib bir   zamonda yashamoqdasiz. Bu zamonning eng muhim xususiyati xalqimizning istiqlol sharoitida hayot kechirayotgani va ijtimoiy hayotning barcha jabhalarida chuqur inqilobiy o'zgarishlar sodir bo'layotganidir. Respublikamiz Prezidenti I.Karimov XXI asrni ma'naviyat va ma'rifat asri, ilmfan, madaniyat va axborotlar asri deb ta'riflar ekan, bu bilan hozirgi davrning muhim belgisi va xususiyatini ham belgilab berganini payqab olish qiyin emas.

            O'zbekiston darhaqiqat kelajagi buyuk davlat. Biroq bu kelajakning qay darajada yaqin yoki uzoqligi, mamalakatimizni qachon jahonning rivojlangan davlatlari qatoridan o'rin olishi, qolaversa xalqimizning erkin va farovon hayot kechirishi hal qiluvchi darajada uning aqliy salohiyatiga, yoshlarning zamonaviy bilimlarini, fan, texnika va texnologiyalarning eng so'nggi yutuqlarini o'zlashtirishiga bog'liq.

            Mamalakatimizda qabul qilingan Kadrlar tayyorlashning milliy dasturi zamon talablariga to'lato'kis javob bera oladigan, chinakam ma'rifatli, bozor munosabatlari sharoitida o'z bilim va ko'nikmalari bilan vatan istiqboli manfaatlari yo'lida samarali faoliyat ko'rsata oladigan mutaxassislar tayyorlashni nazarda tutadi.

            Hozirgi zamonda inson faoliyatining biron bir sohasini hisoblash texnikasi (komputerlar) va axborot texnologiyalarisiz tassavur qilib bo'lmaydi. Ulardan oqilona va samarali foydalana olish bugungi kunda har bir o'qimishli va ziyoli inson uchun suv va havodek zarur bo'lib qolmoqda. Shu nuqtai nazardan qaraydigan bo'lsak, qo'lingizdagi o'quv qo'llanmasi naqadar dolzarb masala va muammolarni hal etishga bag'ishlangani o'z-o'zidan ayon bo'ladi.

            Hozirgi kunda mamlakatimiz ta'lim tizimida yangi bosqich bo'lgan kasbhunar ta'limini zarur me'yoriy hujjatlar, zamonaviy texnika va texnologiyalar bilan ta'minlash borasida bir qator ishlaramalga oshirildi va oshirilmoqda. Jumladan, O'zbekiston Respublikasi Vazirlar Mahkamasining qarori bilan «O'rta maxsus, kasb-hunar ta'limining davlat ta'lim standarti» va «O'rta maxsus, kasb-hunar ta'limining yo'nalish fanlar davlat ta'lim standarti» tasdiqlandi. Ularda ko'rsatib o'tilganidek, o'rta maxsus, kasb-hunar ta'lim muassasasi bitiruvchilariga fundamental ianlar va aniq kasb sohasi doirasida nazariy hamda amaliy bilimlarga ega bo'lish, kompyuter va telekommunikatsiya vositalaridan foydalana olish, o'quv fanlari bo'yicha oliy ta'lim muassasalarida tahsil olish uchun zarur bo'lgan bilimlar majmuasiga ega bo'lish vazifasi qo'yilgan. Shu talablardan kelib chiqqan holda, kasbhunar kollejlari uchun «Dasturlash» fanidan namunaviy o'quv dasturi ishlab chiqildi.

            Bugungi kunda kasbhunar kollejlari va ulardagi ta'lim yo'nalishlarining zamonaviyligi ularning kompyuterlashtirilganlik darajasi bilan belgilanmoqda. Informatika va yangi axborotlar texnologiyalari jamiyatimiz ijtimoiy va iqtisodiy hayotiga shiddat bilan kirib kelmoqda. Shu sababli informatika fanining sirsinoatlarini o'zlashtirish davr talabiga aylanib qoldi.

            O'ylaymizki, yuqorida ko'rsatib o'tilgan dastur asosida tayyorlangan ushbu qo'llanma siz aziz o'quvchilarga dasturlash asoslarini o'zlashtirish, kompyuterdan o'z kasbiy faoliyatlaringizda bemalol va samarali foydalana olish uchun zarur bo'lgan malaka va ko'nikmalarni hosil qilishga xizmat qiladi.

            Albatta, mazkur qo'llanma ilk bor yozilganligi bois ayrim kamchiliklardan xoli bo'lmasligi mumkin. Uni yanada takomillashtirishga qaratilgan fikrmulohazalarni mualliflar mamnuniyat bilan qabul qiladilar.

 

 

 

Iqtisod fanlari doktori, prof. Ò. Å. Ergashev

 

 

 

 

I bob

 

 ALGORITMLAR NAZARIYASI ELEMENTLARI

 

1.1. ALGORITM TUSHUNCHASI VA UNING XOSSALARI

 

            Algoritm hozirgi zamon matematikasining eng keng tushunchalaridan biri hisoblanadi.

            Algoritm (algorifm) so'zi o'rta asrlarda paydo bo'lgan bo'llb, buyuk mutafakkir bobokalonimiz Al-Xorazmiyning (783—855) ishlari bilan yevropaliklarning birinchi bor tanishishi bilan bog'liqdir. Bu ishlar ularda juda chuqur taassurot qoldirib algoritm (algorithmi) so'zining kelib chiqishiga sabab bo'ldiki, a Al-Xorazmiy ismining lotincha aytilishidir. U paytlarda bu so'z arablarda qo'llaniladigan o'nlik sanoq tizimi (sistemasi) va bu sanoq tizimida hisob-lash usulini bildirar edi. Shuni ta'kidlash lozimki, yevropaliklar tomonidan arab sanoq tizimining Al-Xorazmiy ishlari orqali o'zlashtirilishiga, keyinchalik hisoblash usullarining rivojlanishiga katta turtki bo'lgan.

            Hozirgi paytda o'nlik sanoq tizimida arifmetik amallarni bajarish usullari hisoblash algoritmlariga soddagina misol bo'la oladi xolos. Hozirgi zamon nuqtai nazaridan algo­ritm tushunchasi nimani ifodalaydi? Ma'lumki, inson kundalik turmushida turlituman ishlarni bajaradi. Har bir ishni bajarishda esa bir qancha elementar (mayda) ishlarni ketma-ket amalga oshirishga to'g'ri keladi. Mana shu ketma-ketlikning o'zi bajariladigan ishning algoritmidir. Ammo bu ketma-ketlikka e'tibor bersak, biz ijro etayotgan elementar ishlar ma'lum qoida bo'yicha bajarilishi kerak bo'lgan ketma-ketlikdan iborat ekanligini ko'ramiz. Agar bu

ketma-ketlikdagi qoidani buzsak, maqsadga erishmasligimiz mumkin.

            Masalan, shaxmat o'yinini boshlashda shohni yura olmaymiz, chunki bu o'yin algoritmida yurishni boshqa bir shaxmat donalaridan boshlash kerak yoki palov pishirish algoritmida birinchi navbatda qozonga suv solib ko'ringchi, osh qanday bo'lar ekan. Berilgan matematik ifodani soddalashtirishda amallarning bajarilish ketma-ketligiga e'tibor bermaslik noto'g'ri natijaga olib kelishi barchaga ma'lum.

            Demak ishni, ya'ni qo'yilgan masalani bajarishga mayda elementar ishlarni muayyan ketma-ketlikda ijro etish orqali erishiladi. Bundan ko'rinib turibdiki, har bir ish qandaydir algoritmning bajarilishidan iboratdir. Algoritmni bajaruvchi algoritm ijrochisidir. Algoritmning ijrochisi masalaning qanday qo'yilishiga e'tibor bermagan holda natijaga erishishi mumkin. Buning uchun u faqat avvaldan ma'lum qoida va ko'rsatmalarni qat'iy bajarishi shart. Bu esa algo­ritmning juda muhim xususiyatlaridan biridir.

Umuman, ajgoritmlarni ikki guruhga ajratish mumkin. Birinchi guruh algoritmning ijrochisi faqat inson bo'lishi mumkin ( masalan palovni faqat inson pishira oladi), ikkinchi guruh algoritmlarning ijrochisi ham inson, ham EHM bo'lishi mumkin (faqat aqliy mehnat bilan bog'liq bo'lgan masalalar). Ikkinchi guruh algorimtlarning ijrochisini EHM zimmasiga yuklash mumkin. Buning uchun algoritmni EHM tushunadigan biror tilda yozib, uni mashina xotirasiga kiritish kifoya.

            Shunday qilib, biz algoritm deganda, berilgan masa­lani yechish uchun ma'lum tartib bilan bajarilishi kerak bo'lgan chekli sondagi buyruqlar ketma-ketligini tushunamiz.

            Biror sohaga tegishli masalani yechish algoritmini tuzish algoritm tuzuvchidan shu sohani mukammal bilgan holda, qo'yilgan masalani chuqur tahlil qilishni talab qiladi. Bunda masalani yechish uchun kerak bo'lgan ishlarning rejasini tuza bilish muhim ahamiyatga ega. Shuningdek, masalani yechishda ishtirok etadigan ob'ektlarning qaysilari boshlang'ich ma'lumot va qaysilari natijaligini aniqlash, ular o'rtasidagi o'zaro bog'lanishni aniq va to'la ko'rsata bilish, yoki dastur (programma) tuzuvchilar tili bilan aytganda, masalaning ma'lumotlar modelini berish lozim.

            Berilgan masala algoritmini yozishning turli usullari mavjud bo'lib, ular qatoriga so'z bilan, bloktarh (bloksxema) shaklida, formulalar, operatorlar yordamida, algoritmik yoki dasturlash tillarida yozish va xokazolarni kiri­tish mumkin.

            Endi biror usulda tuzilgan algoritmning ayrim xossalari va algoritmga qo'yilgan ba'zi bir talablarni ko'rib chiqaylik.

            1.  Algoritm har doim to'liq bir qiymatlidir, ya'ni uni bir xil boshlang'ich qiymatlar bilan ko'p marta qo'llash har doim bir xil natija beradi.

            2. Algoritm birgina masalani yechish qoidasi bo'lib qolmay, balki turlituman boshlang'ich shartlar asosida ma'­lum turdagi masalalar to'plamini yechish yo'lidir.

            3.  Algoritmni qo'llash natijasida chekli qadamdan keyin natijaga erishamiz yoki masalaning yechimga ega emasligi haqidagi ma'lumotga ega bo'lamiz.

            Yuqorida keltirilgan xossalarni har bir ijrochi o'zi tuzgan biror masalaning algoritmidan foydalanib tekshirib ko'rishi mumkin. Masalan:

ax2 + bx + ñ = Î

kvadrat tenglamani yechish algoritmi uchun yuqorida sanab o'tilgan algoritmning xossalarini quyidagicha tek­shirib ko'rish mumkin.

            Agar kvadrat tenglamani yechish algoritmi biror usulda yaratilgan bo'lsa, biz ijrochiga bu algoritm qaysi masalani yechish algoritmi ekanligini aytmasdan a, b, ñ laming aniq qiymatlari uchun bajarishni topshirsak, u natijaga erishadi va bu natija kvadrat tenglamaning yechimi bo'ladi. Demak, algoritmni ijro etish algoritm yaratuvchisiga bog'liq emas.

            Xuddi shuningdek a, b, ñ larga har doim bir xil qiy­matlar bersak, algoritm har doim bir xil natija beradi, ya'ni to'liqdir.

            Yaratilgan bu algoritm faqatgina bitta kvadrat tenglamani yechish algoritmi bo'lib qolmay, balki na,b,c laming mumkin bo'lgan barcha qiymatlari uchun natija hosil qiladi, binobarin u shu turdagi barcha kvadrat tenglamalarning yechish algoritmi bo'ladi.

            Algoritmning oxirgi xossasi o'z-o'zidan bajariladi, ya'ni kvadrat tenglamani yechish albatta chekli qadamda amalga oshiriladi.

            Dastur tuzuvchi uchun EHMning ikkita asosiy parametri o'ta muhimdir: hisoblash mashinasi xotirasining hajmi va mashinaning tezkorligi. Shuningdek, algoritm tuzuvchidan ikki narsa talab qilinadi. Birinchidan, u tuzgan dastur mashina xotirasida eng kam joy talab etsin, ikkinchidan, eng kam amallar bajarib masalaning natijasiga erishsin. Umuman olganda, bu ikki talab birbiriga qarama-qarshidir, ya'ni algoritmning ishlash tezligini oshirish algoritm uchun kerakli xotirani oshirishga olib kelishi mumkin. Bu xol, ayniqsa murakkab masalalarni yechish algoritmini tuzishda yaqqol seziladi. Shuning uchun ham bu ikki parametming eng maqbul holatini topishga harakat qilish kerak.

 

1.2. ALGORITMNI TAVSIFLASH USULLARI

 

            Algoritm so'zlar, matematik formulalar, algoritmik tillar, geometrik tarhlar (sxemalar), dasturlash tillari va boshqalar yordamida tavsiflanadi.

            Algoritmning so'zlar yordamida berilishiga, tavsiflanishiga misol tariqasida liftda kerakli qavatga ko'tarilish algoritmini keltirish mumkin. Bu quyidagicha ketma-ketlikda bajariladi:

            1.  Liftga kiring.

            2.  Kerakli-qavat tartib   soniga mos   tugmachani bosing.

            3.  Liftni harakatga keltiring.

            4.  Lift to'xtashini kuting.

            5.  Lift eshigi ochilgandan keyin undan chiqing.            

Algoritm matematik formulalar yordamida tavsiflanganda har bir qadam aniq formulalar yordamida yoziladi. Misol tariqasida

 

 

 

kvadrat tenglama yechimlari bo'lmish xv x2 ni aniqlash algoritmini ko'rib chiqaylik.

            1.  a, b, ñ koeffitsiyentlar qiymatlari berilsin.

            2.  D = b2—4ac diskriminant hisoblansin.

            3.  D < 0 bo'lsa, tenglamaning haqiqiy yechimlari yo'q. Faqat haqiqiy ildizlar izlanayotgan bo'lsa, masala hal bo'ldi.

            4.  D = 0 bo'lsa, tenglama ikkita bir-biriga teng, ya'ni karrali yechimga ega bo'ladi va ular formulalar bilan hi-soblanadi. Masala hal bo'ldi.

            5. D > 0 bo'lsa, tenglama ikkita haqiqiy yechimga ega, ular

 

 

formulalar bilan hisoblanadi. Ya'ni masala hal bo'ldi.

Shunday qilib, kvadrat tenglamaning haqiqiy yechim-larini aniqlashda:

            1.  «Tenglamaning haqiqiy yechimlari yo'q» matm

            2.  «Tenglama karrali yechimga ega, x= x2» matni va xv x2 ning qiymatlari;

            3.  «Tenglama ikkita yechimga ega» matni,   xx va x2 ning qiymatlari natijalar bo'ladi.

            Algoritmik tillar — algoritmni bir ma'noli tavsiflash imkonini beradigan belgilar va qoidalar majmuidir. Har qanday tillardagidek ular ham o'z alifbosi, sintaksisi va semantikasi bilan aniqlanadi.

            Bizga o'rta maktabdan ma'lum bo'lgan (akademik A. P. Yershov rahbarligida yaratilgan) EHMsiz  algoritmlashga mo'ljallangan algoritmik tizim algoritmik tilning namunasidir. Algoritmik tilga misol sifatida yana algoritmlarni belgili operatorlar tizimi shaklida tavsiflashni ham ko'rsatish mumkin. Bu tillar odatdagi tilga o'xshash bo'lib, EHMda bevosita bajarishga mo'ljallanmagan. Ulardan maqsad algoritmni bir xil shaklda va tushunarli qilib, tahlil qilishga oson qilib yozishdir.

            Algoritmlarni geometrik tarhlar yordamida tavsiflash ko'rgazmali va, shu sababli tushunarliroq bo'lgani uchun ko'p qo'llaniladi. Bunda xar bir o'ziga xos operatsiya

alohida geometrik shakl (blok) bilan tavsiflanadi va ularning bajarilish tartibi, ular orasidagi ma'lumotlar uzatili-shi va yo'nalishi bloklarni bir-biri bilan ko'rsatkichli to'g'ri   chiziqlar yordamida tutashtirib ko'rsatiladi. Algoritmning geometrik tarhiga uning bloktarhi

(blok-sxemasi) deyiladi.

            Bloklarga mos geometrik shakllar, ularning o'lchamlari va ular yordamida bloktarhlarni chizish qoidalari davlat standartlarida berilgan. 1-jadvalda eng ko'p ishlatiladigan bloklar shakli va ularning ma'nosi keltirilgan. Bu davlat standartlariga ko'ra bloklarni tutashtiruvchi to'g'ri chiziq yozuv tekisligiga vertikal yoki gorizontal holatda bo'lishi kerak, ya'ni ularni og'ma chiziqlar bilan tutashtirish taqiqlanadi. Bloklarni bajarish tabiiy yozish tartibida bo'lsa, ya'ni yuqoridan pastga yoki chapdan o'ngga bo'lsa, tutashtiruvchi chiziq ko'rsatkichsiz bo'lishi mumkin.

            Boshqa barcha hollarda ma'lumot oqimi yo'nalishini ko'rsatuvchi ko'rsatkich qo'yilishi shart. Blokning tartib soni tutashtiruvchi chiziqdan chapga, alohida ajratilgan bo'sh joyga qo'yiladi. Chiziqning birlashgan joyi yirikroq nuqta yordamida ko'rsatiladi. Blokda ko'zda tutilgan operatsiya uning ichiga yozib qo'yiladi. Tarhlar davlat ?' standarti formatlarida bajariladi.

            Amalda yechiladigan masalalar va demak, algoritmlar turlari ham juda ko'p bo'lishiga qaramasdan ular asosan besh xil: chiziqli, tarmoqlanuvchi, siklik, iteratsion va cheksiz takrorlanuvchi shakllarda bo'ladi deb aytish mumkin.

            Agar murakkab masalalar algoritmlarining bloktarhini bir bino desak, bu tuzilishdagi algoritmlar uni tashkil qiluvchi rom, g'isht, to'sin, ustun va boshqalarni ifodalaydi deb aytish mumkin. Har qanday murakkab bino ana shu ashyolardan qurilganidek, murakkab algoritmlar ham yuqoridagidek tarhlardan tuziladi. Aslida oxirgi uchta tuzilishdagi algoritmlarni bitta nom bilan takrorlash algoritmlari deb atash mumkin. Ammo ularning har biri o'ziga xos bo'lganligi uchun alohida nomlanadi.

 

 

 

 

 

           

1.3. CHIZIQLI TUZILISHDAGI ALGORITMLAR

 

            Chiziqli tuzilishga ega bo'lgan algoritmlarda ko'rsatmalar yozilish tartibida bajariladi. Ularning blok tarhlari ishga tushirish, to'xtatish, kiritishchiqarish jarayoni bloki hamda avvaldan ma'lum jarayon bloklari yordamida tuzilib, bir chiziq bo'ylab ketma-ket joylashgan bo'ladi.

            Chiziqli tuzilishdagi algoritmni tuzish masalani yechish  uchun kerak bo'ladigan boshlang'ich ma'lumotlarni tashkil qiluvchi o'zgaruvchilar nomi, ularning turi va o'zgarish ko'lamini aniqlashdan boshlanadi. Keyin oraliq va yakuniy natijalar o'zgaruvchilarining nomlari, turlari va mumkin bo'lsa o'zgarish ko'lamini aniqlash kerak. Endi algoritm mana shu boshlang'ich ma'lumotlarni qanday qayta ishlab oraliq va yakuniy natijalarni olish kerakligini aniqlashdan iborat bo'ladi.

 

            Misol. Tomonlari mos ravishda a, b, ñ bo'lgan ABC uchburchak yuzini hisoblash algoritmini tuzaylik.  Tomonlari ma'lum bo'lganda ABC uchburchakning yuzi

 

 

            1. Boshlang'ich ma'lumotlar: a, b, ñ uchburchak to­monlari. Shuning uchun a, b, ñ e R va a>0, b>0, c>0, ya'ni a, b, ñ — o'zgaruvchilar nomi; ular haqiqiy son qiymatlar qabul qiladi. Yana, bu uch son uchburchak tomonlarini ifoda qilishi uchun ularning istalgan biri qolgan ikkitasi yig'indisidan katta bo'lmasligi, ya'ni

 

 

shartlar bajarilishi kerak. Shunday qilib, o'zgarish ko'lami (3) munosabatlar bilan aniqlanar ekan.                   

            2.Natijalar: (I) formula bilan uchburchak yuzini  hi­soblash uchun uning yarim perimetrining qiymati kerak. Demak, p o'zgaruvchining qiymati oraliq ma'lumot bo'la­di. Yuqoridagi shartlarda peR va p>b. Yakuniy natija: S — uchburchak yuzi. U SeR va S>0 qiymatlar qabul qiladi.

Shunday qilib, ixtiyoriy ABC uchburchak yuzini EHM-da hisoblash va bosmaga (yoki Displey ekraniga) chiqarish:

 

 

            1)   à, Ü, ñ qiy-matlarini EHM xotirasiga kiritish:

            2)  p ning qiymatini (2) formula bilan hisoblash;

            3)  S ning qiymatini (1) formula bilan hisoblash;

            4)  p va S   larning qiymatlarini bosmaga chiqarish operatsiyalaridan iborat bo'ladi

(1-rasm).

            Har qanday algoritmning bloktarhi ishga tushirish

blokidan boshlanadi. Uni EHMni ishga tayyorlash, boshlang'ich ma'lumotlarni aniqlash va tayyorlash deb tushu-nish kerak. Hisoblashlarning tugaganligi ana shunday geometrik shakl bilan ko'rsatiladi. Shuning uchun rasmdagi 1- va 6-bloklar ichiga mos kelgan operatsiyalar nomi yozib qo'yilgan.

            Boshlang'ich ma'lumotlarni EHMga harxil qurilmalardan kiritish mumkin. Aniq bittasini tanlab olish ish sharoitiga bogiiq. Shuning uchun umumiy kiritish-chiqarish bloklaridan (2- va

5-bloklar) foydalaniladi.

            Uchinchi blokda bevosita hisoblash jarayoni, to'rtinchi blokda esa kvadrat ildizdan chiqarish uchun tuzilgan kichik algoritm (yordamchi algoritm) dan foydalanish — avvaldan ma'lum jarayon ko'zda tutilgan. Algoritm ko'rsatmalari yozilish tartibida ketma-ket bajariladi. Ma'lu-motlar blokdan blokka yuqoridan pastga uzatiladi. Shu­ning uchun ularni tutashtiruvchi chiziqqa ko'rsatkichlar qo'yilmagan.

            Algoritmdan foydalanuvchi boshlang'ich ma'lumotlar­ni (3) shartlar bajariladigan qilib olishi kerak. Aks holda algoritmni bajarib bo'lmaydi. U natijalilik xossasiga ega bo'lmaydi.

 

1.4.TARM0QLANUVCHI TUZILISHDAGI ALGORITMLAR

 

            Turli masalalarni yechganda ko'rsatmalarni bajarish tartibi biror bir shartning bajarilishiga bog'liq holda bajariladi, ya'ni algoritm tarmoqlanadi. Tarmoqlanish «Yechim» bloki orqali ifodalanadi.

            Shartni tekshirish natijasi faqat ikki hil bo'lganda: bajarilgan hoi uchun «Ha» (yoki «+»), bajarilmagan hoi uchun «Yo'q» (yoki «—») belgilari qo'yiladi (mantiqiy shart, 2, a-rasm).

            Tarmoqlanish matematik ifoda qiymatining ishorasi bo'yicha bo'lganda (arifmetik shart): «>» — musbat, «<» — manfiy va «= » — nolga teng belgilar qo'yiladi (2, b-rasm),

Tekshirish natijasi uchdan ko'p bo'lganda 2, d-rasmdagidek tarmoqlanish bo'lishi mumkin.

 

 

            3-misol. ax2+bx+c = 0 tenglama yechimlarini aniq­lash algoritmini va uning blok-tarhini tuzing.

            Bunda a, b, ñ 6 R va tenglamaning barcha yechimlari izlanayotgan bo'lsin. Agar bu sonlar berilgan bo'lsa, teng­lama ildizlari quyidagi tartibda hisoblanadi:

            1.Tenglamaning kvadrat tenglama ekanligi tekshiriladi. Buning uchun à = Î shart tekshiriladi. Agar bu shart bajarilsa tenglama kvadrat tenglama bo'lmaydi, 4-bandga o'tiladi.

            2.Tenglama diskriminanti D = b2—4ac hisoblanadi.

            3.D ning ishorasi tekshiriladi. Agar D>0 bo'lsa, tenglamaning ikkita haqiqiy ildizlari bor, ular

 

formulalar bilan hisoblanadi.

            Natijalar: 1 - m a ' l u m î t: «Tenglama ikkita haqiqiy yechimga ega». Bu matn va x1 ,x2 laming qiymatlari bosmaga chiqariladi. Masala yechildi.

            2-ma'lumot: Agar D< Π    bo'lsa,     tenglama

 

 

formulalar bilan hisoblanadigan ikkita qo'shma kompleks ildizga ega bo'ladi.

Ildizlarning haqiqiy qismini xl=—b/2a,mavhum qismini x2 = ó D\i /2a bilan belgilansa, xv x2 ni hisoblab, xt ± x2i kompleks sonlari   hosil qilinadi.

            3 - m a ' 1 u m î t: «Tenglama kompleks yechimga ega, haqiqiy qismi =... , mavhum qismi =2», matni va x1 X2  laming qiymatlari bosmaga chiqariladi. Bu holda han masala yechildi.

            4. Tenglamaning chiziqliligi b= 0 shartni tekshirish biiar aniqlanadi. Agar bu shart bajarilsa, tenglama chiziqli emas 6-bandga o'tiladi.

            5.  Tenglamaning yechimi: x=—s/b. Natijalar: 6-ma' lumot: «Tenglama chiziqli x=» matni va x ning qiymati bosmaga chiqariladi. Masala yechildi.

            6.  Agar s = 0 bo'lsa, tenglama 0x2+0x+0=0 ayniyatga aylanadi va ixtiyoriy xˆ R son uning yechimi bo'ladi.

            4 - m a ' 1 u m î t: «Tenglama cheksiz ko'p yechimga ega» matni bosmaga chiqariladi. Agar     bo'lsa, tenglama ma'noga ega bo'lmaydi. Bu holda natija: 5 - m a ' -lumot: «Tenglama yechimga ega emas» matni bo'ladi.

            Shunday qilib, hamma hollarda ham ma'lum bir natijaga kelinadi.  Bu  algoritmning bloktarhi 3-rasmda keltirilgandek bo'ladi. Uchinchi, beshinchi va to'rtinchi «yechim» bloklarida mantiqiy shartlar — mos holda a, b va ñ koeffitsiyentlarning nolga tengliligi tekshirilmoqda. Bu shartlarni tekshirish natijasi ikki xil bo'lishi mumkin: bajarilganaa (javob — ha) yoki bajarilmagan (javob — yo'q). Algoritm ikki tarmoqqa ajraladi. Bulardan farqli o'laroq,

11- yechim blokida D o'zgaruvchining ishorasi tekshiril­moqda. Natija uch xil bo'lishi mumkin. Tarhning 1,2,3,4 nuqtalarida ma'lumotlar oqimining qo'shilishi ro'y ber-moqda. Shuning uchun bu nuqtalar ajratib ko'rsatilgan. Ma'lumot oqimini ko'rsatuvchi chiziq «singan» va oqim o'ngdan chapga yo'nalgan hollarda tutashtiruvchi chiziqlar ko'rsatkich bilan belgilangan.

 

1.5.TAKR0RLASH ALGORITMLARI

 

Takrorlash algoritrnlari sikl tanasi deb nomlanuvchi ko'p marta takrorlanadigan qismni o'z ichiga oladi. Tak­rorlash biror shart bajarilguncha davom etadi. Yuqorida aytilganidek siklik, iteratsion va cheksiz davom   etuvchi takrorlash algoritmlari farqlanadi.Siklik tuzilishdagi algoritmlar takrorlash o'zgaruvchisi (sikl parametri) arifmetik progressiya turida o'zgar

 

 

 

 

 

 

 

ganda hosil bo'ladi. Algoritmning blîê-tarhida ular modifikatsiya bloki bilan beriladi (4-rasm). Rasmda A— sikl o'zgaruvchisining nomi, A1sikl o'zgaruvchisining boshlang'ich, A2 — oxirgi qiymatlari, A3 — sikl o'z­garuvchisining o'zgarish qadami (sikl raqami yoki oddiygina qadam deyiladi).

Bunda A/t Ar A3 ixtiyoriy son yoki ifoda bo'lishi mumkin.

            Agar A3>0 bo'Isa, A<A2 bo'lishi, A3<0 bo'lganda esa At>A3 bo'lishi kerak. A=l bo'lganda uni blok ichidagi yozuvda ko'rsatmaslikka kelishilgan.

Algoritmning bajarilishi:

            1) A-Ax qilib olinadi;

            2) Sikl tanasiga kiruvchi amallar bajariladi, bunda biror shart bajarilganda sikl tashqarisiga chiqib ketish mumkin;

            3)  A=A+A3 qilib olinib: A,>0 bo'lganda A<AV yoki A3<0 bo'lganda A>A2 takrorlash sharti tekshiriladi.

            Agar takrorlash sharti bajarilsa, sikl tanasidagi amallar uning o'zgaruvchisining yangi qiymatida bajariladi. Bunda ular sikl o'zgaruvchisining qiymatiga bog'liq bo'lishi ham, bo'lmasligi ham mumkin.

Siklik tuzilishdagi algoritmda takrorlash soni avvaldan berilgan bo'lishi mumkin yoki u

n= [(A2—A1) /A3]  for­mula bilan hisoblanadi. Bunda [•] belgi sonning butun qismini ifodalaydi.

            Ichma-ich joylashgan sikl la r. Bir sikl tanasida boshqa bir yoki bir necha sikllar joylashgan algoritmlar ham bo'ladi (5-rasm).                                                  

            Rasmda j o'zgaruvchili sikl i o'zgaruvchili sikl ichiga joylashgan bo'lib 5, arasmda j bo'yicha sikl tugashi bilan i ning navbatdagi qiymatiga o'tilishi, 5, 6-rasmda i  o'zgaruvchili sikl tanasiga j  bo'yicha sikldan tashqari amal-

 

 

 

 

 

lar ham kirishi, 5, d-rasmda berilgan shart bajarilmasa, hech qanday amal bajarmasdan j ning keyingi qiymatiga o'tish, 5, e-rasmda berilgan shart bajarilsa, j bo'yicha sikl tugashi, bajarilmasa j ning keyingi qiymatiga o'tish kerakligi tasvirlangan. Ichmaich joylashgan sikl turlari bu tuzilishlar bilan tugamaydi. Bunday siklik tuzilishdagi algoritmlarni ishlab chiqqanda tashqi sikldan ichki sikl boshini tashlab o'tib, uning ichiga kirish mumkin emasligini unutmaslik kerak.

            Iteratsion algoritmlar. Ko'p hollarda amallarni necha marta takrorlashni avvaldan aniqlab bo'lmaydi. Takrorlash ma'lum bir shart bajarilguncha davom etadi. Bunday hollarda algoritmni 5-rasmda ko'rsatilgandek tashkil qilish mumkin.

            Takrorlash o'zgaruvchisi o'zgarmas qadam bilan o'zgarmaydi. 6, a-rasmda takrorlash sharti avvaldan tekshiriladigan, 6, 6-rasmda esa keyin tekshiriladigan tuzilish­dagi iteratsion (italyancha iteratixo — takrorlash so'zidan) algoritmning tarhi ko'rsatilgan.

            Birinchi holda sikl tanasidagi amallar biror marta ham bajarilmasligi mumkin bo'lsa, ikkinchi holda esa kamida bir marta bajariladi. Albatta siklik tuzilishdagi algoritmni ham iteratsion tuzilishda tasvirlash mumkin. Lekin modifikatsiya blokini ishlatganda  îêtarh ixchamroq, bo'ladi. Takrorlash algoritmlarini tuzganda sikl tashqarisidan uning tanasiga kirish mumkin emasligini unutmaslik kerak. Chunki bunda sikl o'zgaruvchisining qiymati aniq-lanmagan bo'lib qoladi. Aksincha, sikl tanasidan chiqish mumkin. Bunda sikl o'zgaruvchisining qiymati undan chiq-qan paytdagidek bo'ladi.

            Cheksiz takrorlanuvchi algoritm. Bunday algoritm EHM bilan muloqot olib borishga imkon beruvchi operatorlari mavjud bo'lgan dasturlash tillarida ishlatiladi (masalan, BEYSIKda). Bunda takrorlash foydalanuvchi tomonidan tugatilguncha davom etadi.

            1-misol. ó = Iog2(ex2+lx+k) funksiyaning Xª [a, b] kesmadagi qiymatlarini h qadam bilan hisoblash algorit-mini tuzamiz.

            Boshlang'ich ma'lumotlar: a, b, e, l, k, h o'zgaruvchilaming qiymatlari bo'ladi. Ular a, b, e, l, k, h ª R bo'lib, ko'lami ex2+lx+k>0 shart bilan aniqlanadi.

 

 

 

 

 

 

 

 

 

7)  1-axborotni bosmaga chiqarish;

8)  x = x+h qilib olib, x<b shartni tekshirish. Agar bu shart bajarilsa, 3-qadamga o'tish, bajarilmasa,  hisoblash-ni tugatish.

            Algoritmning blok-tarhi 7-rasmda keltirilgan.

            Birinchi algoritmning blok-tarhi ikkinchi algoritmniki-dan ixchamroq ekanligini ko'ramiz. Bunga modifikatsiya blokidan foydalanilganligi sababli erishildi.

 

 

 

 

2-bob

 DASTURLASH TILLARIGA NORASMIY KIRISH

 

2.1. MASALALARNI EHM DA YECHISH BOSQICHLARI

 

EHM bilan bevosita ishlashdan oldin qanday bosqichlarni bajarish kerakligini ko'rib chiqamiz. Istalgan hayotiy yoki matematik, fizik va hokazo masala shartlarini ifoda qilish dastlabki ma'lumotlar va fikrlarni tasvirlashdan boshlanadi va ular qat'iy ta'riflangan matematik yoki fizik va hokazo tushunchalar tilida bayon qilinadi. So'ngra yechishning maqsadi, ya'ni masalani yechish natijasida ayni nimani yoki nimalarni aniqlash zarurligi ko'rsatiladi.

Birinchi bosqich — masalani qo'yish. Istalgan masa­lani yechish uning qo'yilishidan boshlanadi. Masala shartining aniq ifodasi masalaning matematik (fizik va hokazo) qo'yilishi deb ham ataladi. Masalaning qo'yilishida boshlang'ich ma'lumotlar yoki argumentlar hamda qiymatlari aniqlanishi kerak bo'lgan kattaliklar, ya'ni natijalar ajratiladi. Masalani qo'yish uni yechishning birinchi bosqichi bo'ladi. Bunga turli-tuman misollar keltirish mumkin:

            1. Tomonlarining uzunligi ma'lum bo'lgan to'g'ri to'rtburchakning yuzi hisoblansin.

            2.  Bosib o'tilgan yo'l va ketgan vaqt ma'lum bo'lsa, yo'lovchining tezligi aniqlansin.

            3.  Mashhur Pifagordan so'rashdi: Sizning maktabingizga nechta o'quvchi qatnashadi va suhbatingizni tinglaydi? Pifagor javob berdi: mening o'quvchilarimning yarmi matematikani o'rganadi, choragi musiqani o'rgaradi, yettidan biri jimgina fikrlaydi, qolgani esa 3 ta. Pifagor maktabida nechta o'quvchi bo'lgan?

            4.  Shaxmat taxtasining kataklaridan bir katakka qayta yurmaslik sharti asosida, ot bilan yurib o'ting.

            5.  O'tloqdagi qo'ylarning sakkizdan birining kvadrati o'tlayotgan, qolgan 12 tasi yotgan bo'lsa, hammasi bo'lib nechta qo'y bor?

            Ikkinchi bosqich — matematik modelni qurish.

            Amaliy masalalarni hal etishda ob'ektlar — tabiat hodisalari (fizik yoki kimyoviy jarayonlar), mahsulot ishlab chiqarish jarayonlari, mahsulot ishlab chiqarish rejalari va shu kabilar bilan ish ko'rishga to'g'ri keladi. Ana shunday masalalarni qo'yish uchun avval tekshirilayotgan ob'ektni matematik atamalarda tavsiilash, ya'ni iloji bo'lsa, uning matematik modelini (ifodasini) qurish kerak. Mazkur model esa haqiqiy ob'ektni tekshirishni matema­tik masalani yechishga keltirish imkonini beradi. Modelning haqiqiy ob'ektga moslik darajasi amaliyotda tajriba orqali tekshiriladi. Tajriba—qurilgan modelni baholash va lozim bo'lgan holda uni aniqlashtirish imkonini beradi. Shuni ta'kidlash lozimki, har doim ham qo'yilgan masalaning matematik modelini yaratib bo'lavermaydi.

            Yuqorida keltirilgan masalalarning matematik modellarini tuzamiz.

            Birinchi masala uchun matematik model S = ab ko'ri-nishdagi iormuladan iborat. Bunda boshlang'ich ma'lumotlar tomonlari uzunligi a va b bo'lsa, natija to'g'ri to'rtburchakning yuzi S dan iboratdir.

            Ikkinchi masala uchun bosib o'tilgan yo'lni s, ketgan vaqtni t deb belgilasak, yo'lovchining tezligi v fizika kursidan ma'lum bo'lgan

 

 

 

matematik model bilan ifodalanadi. Bunda s va t boshlang'ich ma'lumot, v esa natijadir.

Uchinchi masalada x deb o'quvchilar sonini belgilasak, u

 

 

yoki 3x—84=0 ko'rinishdagi chiziqli tenglamaga keladi. Bu yerda 3 va 84 boshlang'ich ma'lumotlarni, x esa natijani ifodalaydi.

            To'rtinchi masala uchun oshkor ko'rinishdagi matematik model mavjud emas, shuning uchun ham bu masalani yechishda birinchi bosqichdan keyin to'g'ridan-to'g'ri uchinchi bosqichga o'tish mumkin.

Beshinchi masalada x ni barcha qo'ylarning soni deb belgilasak, uni topish

 

 

 

ko'rinishdagi kvadrat tenglamani yechishga keladi. Umuman bu masalalar

 

kvadrat tenglama shaklidagi matematik model bilan ifodalanadi. Bunda a, b, ñ lar boshlang'ich ma'lumot bo'lsa, x (x1 . x2 ) natija bo'ladi.

            Shunday qilib, biz xodisalarni ifodalovchi matematik modellar bilan tanishdik. Albatta, hozir qurgan bu modellar juda sodda. Hayotda shunday murakkab masalalar uchraydiki, ular uchun matematik model yaratish juda ko'p kuch va vaqt talab etadi, ba'zi masalalarning esa modelini umuman tuzish mumkin emas.

            Uchinchi bosqich — yechish usulini aniqlash.

            Masalaning matematik modeli yaratilgandan so'ng, uni yechish usuli izlana boshlanadi. Ayrim hollarda masalani qo'yilishidan keyin to'g'ridan-to'g'ri masalani yechish usuliga ham o'tish kerak bo'ladi. Bunday masalalar oshkor ko'rinishdagi matematik model bilan ifodalanmasligi mumkin. Bu bosqich masalalarni EHM da yechishning uchin­chi bosqichini tashkil qiladi. Bunga misol qilib yuqorida keltirilgan matematik modellarni yechish usullarini keltirish mumkin. Ular (1,2,3,5- masalalar) bilan siz matematika kursidan tanishsiz. Xo'sh, to'rtinchi masala uchun yechish usuli nima yoki qanday bo'lishi mumkin? Shaxmatdan xabardor har bir kishiga ma'lumki, shaxmat taxtasining ixtiyoriy katagida turgan otrii yuqoridagi shart asosida har doim ham yurish mumkin emas. Hamma kataklardan o'tishning yagona usuli mavjud va u quyidagilardan iborat: faraz qilaylik, ot shaxmat taxtasining ixtiyoriy

bir katagida turibdi. Umuman olganda bu katakdan boshqa 8 ta katakka yurish mumkin. Yurilishi mumkin bo'lgan bu kataklarning har biridan ham yana nechadir kataklarga yurish mumkin. Mana shu mumkin bo'lgan yurishlarning eng kamini tanlash kerak, agar ular bir qancha bo'lsa, ixtiyoriy bittasini tanlash mumkin. Demak, otni shun­day bir katakka yurish kerak ekanki, bu katakdan yurili­shi mumkin bo'lgan kataklar soni eng kam bo'lsin. Faqat va faqat shu usul bilan qo'yilgan masalani hal qilish mumkin.

            To'rtinchi bosqich — yechish algoritmini tuzish.

            Navbatdagi bosqichda, ya'ni to'rtinchi bosqichda, ma­salani EHM dan foydalanib yechish uchun uning yechish algoritmi tuziladi. Algoritmni turli-tuman ko'rinishda yozish mumkin. Dasturlash fanining vazifalaridan biri ham algoritm tuzish usullarini o'rganishdan iboratdir. Bu jarayonda talabalarda masalani yechishning algoritmi, ya'ni algoritmik fikrlash usuli vujudga keladi.

Beshinchi bosqich — algoritmni dasturlash tiliga ko'chirish.

            Algoritmning EHM da bajarilishi uchun bu algoritm dasturlash tilida yozilgan bo'lishi lozim. Masalani yechish­ning bu bosqichida biror bir usulda tuzilgan algoritm ma'lum bir dasturlash tiliga ko'chiriladi. Masalan, agar algoritm bloktarh ko'rinishida tasvirlangan bo'lsa, uni dasturlash tiliga ko'chirish uchun har bir blokni tilning mos buyruqlari   bilan almashtirish yetarli.

            Oltinchi bosqich — dasturning bajarilishi.

            Bu bosqichda — dastur ko'rinishida yozilgan algoritmni EHM yordamida bajariladi. Bu bosqich dastur tuzuvchilar uchun eng qiyini hisoblanadi. Chunki dasturni mashina xotirasiga kiritishda ayrim xatoliklarga yo'l qo'yish mum­kin. Shuning uchun dasturni EHM xotirasiga kiritishda juda ehtiyot bo'lish kerak. Bu bosqich natija olish bilan tugallanadi.

            Yettinchi bosqich — olingan natijalarni tahlil qilish.

            Nihoyat, masalani yechishning yakunlovchi yettinchi bosqichi olingan natijalarni tahlil qilishdir. Bu bosqich olingan natijalar qanchalik haqiqatga yaqinligini aniqlash maqsadida bajariladi. Natijalarni tahlil qilish, zarur bo'lgan hollarda algoritmni, yechish usuli va modelini aniqlashtirishga yordam beradi.

            Shunday qilib, biz masalalarni EHM yordamida yechish bosqichlari bilan tanishib o'tdik. Shuni ta'kidlash kerakki, har doim ham bu bosqichlar bir-biridan yaqqol ajralgan holda bo'lmasdan, bir-biriga qo'shilib ketgan bo'lishi ham mumkin.

 

2.2. 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'li­shi uchun meta o'zgaruvchilar, yoki ularning qiymatlari burchak qavslar («<» va «>») ichiga olib yoziladi. Masa­lan <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.

            Misol:

<ikkilik kod>::= <ikkilik raqam>{<ikkilik raqam>}

 

3-bob

 

PASKAL TILIGA KIRISH

 

3.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, ma­shina 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 dastur­larning 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 mashi­na 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, al­goritmik 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 til­lar 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 mum­kin;

            — 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 For­tran 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'ljallan­gan, 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 al­goritmik 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 tili­ning 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.

 

 

3.2. TILNING ALIFBOSI

 

            Ma'lumki, har qanday tilni o'rganish uning aiifbosini o'rganishdan boshlanadi. Tilning alifbosi

            — shu tilgagina tegishli bo'lgan asosiy belgilar va tushunchalar to'plamidan iborat bo'ladi. Paskal tilining aiifbosini tashkil etuvchi asosiy belgilar majmuasini uch guruhga ajratish   mumkin: harflar, raqamlar va maxsus belgilar.

            Til alifbosining metalingvistik (Bekus — Naui) formulasi quyidagicha bo'ladi:

<asosiy belgi>::=<harf>|<raqam>|<maxsus belgi>

            Harf sifatida katta va kichik lotin harflari ishlatiladi. Lekin, matnlar va dasturga izohlar yozish uchun kirill alifbosining bosh va kichik harflari ham alifboga kiritilgan.

            Raqamlar sifatida oddiy arab raqamlari olingan:

            <raqam>::=0| 11213141... 19

            Maxsus belgilar ko'p sonli va bir jinslimas bo'lganligi uchun ularni o'z navbatida to'rtta guruhga ajratamiz:

            <maxsus belgi>::=<arifmetik amal belgisi>|<solish-tirish amali belgisi> | <ajratgich> |    <xizmatchi so'z>.

            <arifmetik amal belgisi>::= * |  /  | + | —

            Bu amallar mos ravishda ko'paytirish, bo'lish, qo'shish va ayirish belgilari hisoblanadi.

            Solishtirish amallarining belgilari, ularning matematik ifodasi va amallarning ma'nosi

2-jadvalda o'z ifodasini topgan. Bu yerda shu narsaga ahamiyat berish kerakki, ba'zi bir amallar ikkita belgi orqali  ifodalangan.

 

 

 

 

            Ajratkichlar guruhini quyidagi belgilar tashkil qiladi:

            <ajratkich>:: = . |  , | : | ; |  ( | )  | [ |  ]  { I }  :=

            Ajratkichlarning vazifalarini tilni o'rganish davomida

aniqlab boramiz.

            Xizmatchi so'zlar guruhi juda keng, shuning uchun buso'zlarning hammasini birdaniga yodlab, eslab qolish shart emas, bil aks ulardan foydalanish davomida ketma-ket

eslab qolinaveradi:

<xizmatchi so'zlar>::=and | array  | begin | case const | div | do | downto | else | end    for | function | goto | if | in | label | mod | nil | not | of | or | packed program | procedure | record | repeat | set | then | to type | until | var | while | with

 

 

3.3. TILNING ASOSIY TUSHUNCHALARI

3.3.1. Operatorlar

 

Operator tushunchasi tilning eng asosiy tushunchalaridan biri bo'lib, har bir operator tilning yakunlangan jumlasi hisoblanadi va ma'lumotlar tahlilining tugallangan bosqichini ifodalaydi.

            Operatorlarni ikki guruhga ajratish mumkin. 1-guruh operatorlarining tarkibida boshqa operatorlar qatnashmaydi va bu operatorlar asosiy operatorlar deb ataladi. Asosiy operatorlar jumlasiga quyidagi operatorlar kiradi: o'zlashtirish operatori, protsedura operatori, o'tish operatori, bo'sh operator. 2-guruh operatorlarining tarkibida esa boshqa operatorlar ham qatnashib, ular tarkibiy operatorlar deb ataladi. Ular jumlasiga quyidagi operatorlar kiradi: tashkiliy operator, tanlov operatori, takrorlash operator ulash operatori.

            Masalani yechish algoritmida yuqoridagi ikki guruh operatorlarning ketma-ketligi cheklanmagan miqdorda qatnashishi mumkin. Bu ketma-ketlikdagi operatorlar o'zaro «;» ajratish belgisi orqali ajratiladi, ya'ni dastur matnining yozuvi alohida operatorlarga bo'linadi. Shunday qilib, S orqali ixtiyoriy yozish mumkin bo'lgan operatorni belgilasak, masala yechilishining algoritmi quyidagi ketma-ketlik bo'yicha ifodalanishi mumkin:

 

S; S; ...;S.

 

Operatorlarning bu ketma-ketligi ularning dasturda yozilish tartibi bo'yicha bajariladi. Shunday qilib, operatorning izdoshi undan keyin yozilgan operator hisoblanadi. Operatorlar bajarilishining bu tabiiy ketma-ketligini faqat o'tish operatori yordamida buzish mumkin. Tarkibiy operatorlarda esa operatorlarning bajarilish tartibi o'ziga xos qoidalar bilan aniqlanadi.

 

 

3.3.2. Ismlar va identifikatorlar

 

            Ma'lumki, ma'lumotlarning tahlili jarayonini ifodalovchi algoritm turli xil ob'ektlar (o'zgarmaslar, o'zgaruvchi miqdorlar, funksiyalar va hokazo) ustida ish olib boradi. Bu ob'ektlarga ularning vazifasi va qabul qiladigan qiymatlariga qarab maxsus ismlar beriladi.

Shu ismlarni odatda, identifikatorlar deb ataladi. Identifikator deb harf lyoki «_» belgisidan boshlanuvchi harf,    raqam va «_» jbelgisining ixtiyoriy ketma-ketligiga aytiladi:           <identifikator>::=<harf>|<identifikator>  <harf> |<identifikator> <raqam>

            Agar quyidagi oraliq tushunchani kiritsak:

            <harf yoki raqam>::= <harf>|<raqam>

            Yuqoridagi aniqlashni quyidagicha ham yozish mum­kin:

            <identifikator>::= <harf> {<harf yoki raqam>}.

            Xizmatchi so'zlardan identifikator sifatida foydalanish mumkin emas. Odatda identifikator so'zining o'rniga qulayroq va qisqaroq qilib ism deyish mumkin. Dasturda qatnashuvchi ob'ektlarga ismlarni dasturchi o'z ixtiyoriga ko'ra tanlab olishi mumkin. Bir xil ism bilan bir necha xil ob'ektlarni nomlash mutlaqo mumkin emas. Turbo Pascal muhitida ismda qatnashuvchi belgilar soni (ism uzunligi) 63 ta belgidan oshmasligi kerak.

            Ismlarga misollar:

            _Burchak, _A1, Ahmad_Berdiev, C, Sumraa, Time, A, SI,  ...

 

3.3.3. E'lonlar

 

            Paskal tilining asosiy tushunchalaridan biri e'lon qilish hisoblanadi. Dasturda qatnashuvchi barcha ob'ektlarning ismlari mos ravishda dasturning bosh qismida, ularning qanday tipdagi qiymatlar qabul qilishi mumkinligiga qarab, e'lon qilinib qo'yilishi kerak. Paskal tilida e'lon qilishning 5 xil turi mavjud:

            ■   metkalar e'loni;

            ■   o'zgarmaslar e'loni;

            ■   tip aniqlash uchun e'lon;

            ■   o'zgaruvchilar e'loni;

            ■   protsedura va funksiyalar e'loni.

            Umuman olganda, yuqorida sanab o'tilgan e'lonlarning vazifalari ularning nomlaridan ham sezilib turibdi, e'lonning vazifalari esa keyinroq to'la ochib beriladi.

 

3.3.4. O'zgaruvchilar

 

            O'zgaruvchi dastur ob'ekti bo'lib, turli xil qiymatlarni xotirada ma'lum nom bilan saqlab turish uchun ishlatiladi. O'zgaruvchi o'z qiymatini dasturning bajarilish davomida o'zlashtirish operatori yordamida qabul qiladi. Qabul qilingan qiymat o'zgaruvchiga boshqa yangi qiymat berilmaguncha saqlanib turiladi va yangi qiymat berilishi bilan eski qiymat butunlay o'chib, yo'q bo'lib ketadi. Har bir o'zgaruvchiga ma'lum bir tipga tegishli qiymatlarnigina qabul qilish huquqi beriladi. Boshqa tipdagi qiymatlarni o'zlashtirishga urinish dasturning xatoligini ta'minlaydi.

            O'zgaruvchi — bu identifikatordir. Uning ismi o'zgaruvchining qiymatiga murojaat qilishda ishlatiladi. Boshqacha aytganda, dastur matnidagi ism shu o'zgaruvchining qiymatini ifodalaydi.

 

 

3.3.5. Funksiyalar va protseduralar

 

            O'rta maktab kursidan funksiya tushunchasi bizga yaxshi ma'lum. Algoritmik tillarda faqat qiymatini hisoblash algoritmlari ma'lum bo'lgan funksiyalargina ishlati­ladi. Dastur tuzuvchi dastur uchun lozim bo'lgan keraklicha funksiyalarni o'z dasturiga kiritishi mumkin.

            Xuddi funksiyalar kabi hal qilinayotgan masalaning ma'­lum bir tugallangan bosqichlarini hisoblash vazifasini protseduralar zimmasiga yuklasa ham bo'ladi. Funksiyani hisoblash natijasida faqat, yagona natijaviy qiymatga erishiladi, protseduradan foydalanganda esa, natijaviy qiymatlar soni yetarlicha ko'p bo'lishi mumkin.

            Dasturda aniqlangan funksiya va protseduralar o'zgaruvchilarning e'loni bo'limida e'lon qilinib qo'yilishi kerak. Bunda har bir funksiya va protseduraga ularning bajaradigan vazifasiga mos ismlar berib qo'yiladi. Ularni aniqlashda formal parametrlardan foydalaniladi. Bu parametrlarning tiplari o'z navbatida, funksiya va protseduraning ichida aniqlanilib, e'lon qilinadi.

            Dasturda aniqlangan funksiya va protseduralardan foydalanish uchun dastur matnida ularning ismlari va formal parametrlarga mos bo'lgan faktik parametrlari berilishi kerak.

Ma'lumki, matematika kursidagi elementar funksiyalardan dastur "tuzishda juda ko'p foydalanishga to'g'ri keladi (masalan sin x, cjs x, Inx, ex va hokazo). Bunday funk­siyalarni standart funksiyalar deb ataladi va standart funksiyalarning ismlaridan boshqa maqsadda foydalanish maqsadga muvofiq emas.

 

 

3.4. DASTUR MATNINI YOZISH QOIDALARI

 

            Har bir algoritmik tilning dastur matnini yozish qoidalari turlicha bo'ladi. Dasturlash tillaridan eng soddasi Beysik tilining ma'lum versiyalarida dasturning har bir operatori qat'iy aniqlangan qator raqamlari orqali yoziladi. Paskal tilida esa operatorlar ketma-ket yozilib, o'zaro «;» belgisi bilan ajratib boriladi. Bundan tashqari, yozilgan dasturning o'qishga oson va undan foydalanish qulay bo'lishi uchun dasturda «matnni ajratish» tushunchasi (bo'sh joy, qatorning tugashi va izohlar) dan foydalaniladi.

            Bo'sh joy (probel) grafik tasvirga ega bo'lmagan belgi bo'lib, qatordagi bo'sh joyni anglatadi. Lekin, bo'sh joy belgisi o'zining sonli kodiga ega va dastur matnidagi boshqa belgilar kabi komputerga kiritiladi.

            Qator oxiri (tugashi) boshqaruvchi belgi bo'lib, u ham grafik tasvirga ega emas. Ma'lumki, dastur matnini yozish davomida uni tabiiy ravishda yangi qatorlarga ajratilib yoziladi. Chunki, shu matn yozilmoqchi bo'lgan qog'ozning ham, komputer ekranining ham o'lchamlari cheklangan. Dastur matnini alohlda qatorlarga ajratmay yozish ham mumkin, lekin bir satrga 256 tadan ortiq belgi sig'maydi. Dastur matnini alohida qatorlarga ajratish dastur tuzuvchining xohishiga qarab bajariladi. Ma'lum bir qator tugamay turib, yangi qatorga o'tish uchun «qator oxiri» tugmachasi bosiladi. Bu tugmacha ham o'zining maxsus sonli kodiga ega.

             Izohlar dasturni o'qishga oson bo'lishi, uni qiynalmay tekshirib, yo'l qo'yilgan xatolarni to'g'rilash va dasturda bajarilayotgan ishlarni tushuntirib borish uchun qo'yiladi. Izohsiz yozilgan dasturni hujjat sifatida qabul qilinmaydi. Muvaffaqiyatli qo'yilgan izoh dasturning va dasturchining katta yutug'i hisoblanadi. Izohlar ixtiyoriy vaqtda dastur matniga kiritilishi yoki olib tashlanishi mumkin. Bu bilan dasturning ishi o'zgarib qolmaydi. Izohlarni «{» va «}» qavslari ichiga olinib yoziladi.

            Dastur «matn ajratgich»laridan foydalanishning quyidagi qoidalariga amal qilish lozim:

            ■   tilning ketma-ket yozilgan ikkita konstruksiyasi orasiga albatta bo'sh joy yozilishi kerak;

            ■   ajratgichlarni xizmatchi so'zlar, sonlar va ismlar orasiga qo'yish maqsadga muvofiq emas.

 

            Quyida yuqoridagi qoidalar asosida yozilgan dasturga doir misol keltirilgan.

 

 

 

 

 

 

3.5. TURBO—PASKAL MUHITINI O'RNATISH

 

            Turbo—Paskalning professional dasturlash — 6.0 versiyasi (Turbo Pascal Professional) Borland International Inc firmasining bir nechta disketalarida beriladi. Shu disketalarning biri «INSTALL/COMPILER» deb nomlanadi va bu disketada INSTALL.EXE dasturi mavjud.

            Turbo—Paskalni o'rnatish uchun disketani diskovodga qo'yib, dasturni ishga tushiriladi. Dastur Sizga bir necha savollarga javob berishni taklif qiladi:

            ■   qaysi diskovoddan Turbo—Paskalni ishga tushirmoqchisiz?

            ■   Turbo—Paskalni vinchesterga o'rnatasizmi?

            ■   qaysi kataloglarda Turbo—Paskalning ishchi fayllarini joylashtirish lozim?

            Agar Sizda yetarli asos bo'lmasa, taklif qilingan katalog ismlari bilan chegaralangani ma'qul. Bu holda sizdan faqatgina disk ismini o'zgartirish talab etiladi. Shundan so'ng INSTALL.EXE dasturi o'zining ishini davom ettiradi va uning so'rovi bo'yicha navbat bilan ko'rsatilgan nomli disketalarni diskovodga qo'yiladi. Natijada Turbo—Paskal ishga tayyor holga keladi.

            Faraz qilaylik, Turbo—Paskalni o'rnatishda odatdagi «S» diskning o'rniga «D» diskni tanladingiz va bu holda tizim quyidagi kataloglarga joylashdi:

D:\TP, D:\TP\BGI, D:\TP\DEMOS, D:\TP\DOC,

D:\TP\DOCDEMOS, D:\TP\TURBO3, D:\TP\TV DEMOS,

D:\TP\TVISION, D:\TP\UTILS

            Bu yerda D:\TP\ katalogida Turbo—Paskalning asosiy fayllari joylashgan:

            ■   Turbo.exe dasturni  yaratish  uchun  lozim bo'lgan integrallashgan muhit (Turbo—Pascal Integrated Develop­ment Environment)   fayli;

            ■   Turbo.hip  —tezkor yordam ma'lumotlarini saqlovchi fayl;

            ■   Turbo.tp    — Turbo.exe    dasturi    foydalanadigan sistema konfiguratsiyasining fayli;

            ■   Turbo.tpl — Turbo—Paskalning rezident modullari (Resident units);

            ■   Tptour.exe — integrallashgan muhitda ishlashni tanishtiruvchi dastur.

Bulardan tashqari, D:\TP\BGI katalogida Turbo Pas­kalning grafik rejim ishini ta'minlovchi fayllar mavjud:

            ■   Graph.tpu — Turbo Paskalning barcha grafik dasturlari ishlashi uchun zarur bo'lgan fayl;

            ■   BGI kengaytmali bir nechta fayl—videotizimlarning   . turli tiplari bilan ishlashni ta'minlovchi drayverlar;

            ■   CHR kengaytmali bir nechta fayl — vektorlishriftlarni o'z ichiga oluvchi fayllar.                       

 

3.6. TURBO—PASKAL TILI

 

 3.6.1. Paskal tilining asosiy tiplari

 

            Odatda, dasturda ishlatiluvchi ma'lumotlar quyidagi tiplarning birortasiga tegishli bo'ladi: butun qiymatli tiplar, haqiqiy qiymatli tiplar, belgili va satrli tiplar, mantiqiy qiymatli va ko'rsatkichli tiplar. Umuman olganda, tiplarni ikkita guruhga ajratish mumkin: asosiy (yoki oddiy) tip va hosilaviy tip. Yuqorida sanab o'tilgan tiplar asosiy guruhga tegishli bo'lgan tiplardir. Hosilaviy tiplar esa, asosiy yoki hosilaviy guruhga tegishli tiplardan hosil qilinadi.

            Butun qiymatli tipga tegishli songa misollar: —1501, 0, 9999.

            Butun qiymat qabul qiluvchi o'zgaruvchilarni e'lon qilish uchun Integer, Shortlnt, Byte, Longlnt va Word xizmatchi so'zlaridan foydalanish mumkin.

            Haqiqiy qiymatli tipga tegishli sonlarga misollar: 25.0956, 6.75, —321.936, 1.2E+02,

—3.57E-01

            Haqiqiy (kasr) qiymatli tipga tegishli o'zgaruvchilarni e'lon qilish uchun Real, Single, Double, Extended va Comp xizmatchi so'zlaridan foydalanish mumkin.

            Hamma harflar, belgi va raqamlar, (masalan A, b, «, !, $, S) belgili tipga tegishlidir. Belgili tipni qabul qiluvchi o'zgaruvchilarni e'lon qilish uchun Char xizmatchi so'zidan foydalanish mumkin.

            Belgilarning ixtiyoriy yig'ilmasi (ketma-ketligi) qatorlar deb ataladi.

            Misol: 'Ahmad', '$25', LSTART.

            Qator xatto bo'sh ham bo'lishi mumkin (''). Bu tipdagi o'zgaruvchilarni e'lon qilish uchun String xizmatchi so'zi-dan foydalaniladi.

            Mantiqiy o'zgaruvchilar faqat True (rost) va False (yolg'on) qiymatlarining bittasinigina qabul qilishi mumkin. Bu tip o'zgaruvchilarini e'lon qilish uchun Boolean hizmatchi so'zi ishlatiladi.

            Ko'rsatkichlar ma'lumotlarning komputer xotirasidagi turarjoyi (adresi)rii aniqlab beradi va ularni e'lon qilish uchun Pointer  xizmatchi so'zidan foydalaniladi.

            Hosilaviy tiplarni hosil qilish va ularni e'lon qilish yo'llarini kelgusi bo'limlarda to'liq tushuntirib o'tiladi.

            Yuqorida sanab o'tilgan tiplar haqida to'liqroq ma'lu­motlar keltirib o'tamiz.

 

 

 

3.6.2.Butun sonlar

 

            Butun qiymatli tiplarning barchasi 3- jadvalda keltirilgan.

            Bu sanab o'tilgan tiplar o'zlarining qiymatlar qabul qilish oralig'i va xotiradan egallagan joyining katta yoki kichikligi bilan farqlanadi. Shuning uchun, o'zgaruvchilarning qabul qiladigan qiymatlarini katta yoki kichikligiga qarab, yuqoridagi tiplardan mosini tanlash maqsadga muvofiadir.

 

 

 

            Endi shu tipdan foydalanishga doir quyidagi misolni ko'rib chiqaylik:                                                     

            Berilgan m va n butun sonlari ustida quyidagi arifmetik amaliar bajarish dasturini tuzing: m+n,m—n( m*n. Umuman Paskal tilida dastur tuzish unchalik murakkab emas, hozir shuni amalda ko'rsatamia. Sistemali qavs ({,})lar ichiga turli izoh va tushuntirishlar yozib, ular bilan dasturni jihozlaymiz.

            {Dastur sarlavhasini yozamiz}

            Program Sonlar;

            Var {dasturda foydalanish mumkin bo'lgan barcha o'zgaruvchilar shu var so'zidan so'ng e'lon qilinadi}

            m,n:integer;{/n va n o'zgaruvchilar o'rtacha kattalikdagi butun sonlar}

            R1 ,R2,R3:integer,{Rl=m+n, R2=m—n,R3=m*n — bajarilgan arifmetik amaliar natijasini xotirada saqlash uchun tanlangan butun tipli o'zgaruvchilar}

            begin {Paskal dasturi begin (boshlanmoq) so'zi bilan boshlanib, end.(tamom) so'zi bilan tamomlanadi}

            Readin(m,n); {m va n butun sonlarini kiritish so'ralyapti, agar kiritilayotgan son butun bo'lmasa «Error 106:Invalid numeric format.» xatosi habar qilinadi va da­stur ishini to'xtatadi}

            Rl:=m+n;

            R2:=m—n;

            R3:=m*n;       {so'ralgan amaliar bajarildi}

            writeln (R1,R2,R3); {hisoblangan Rl=m+n,R2=m—n,

R3=m*n natijaviy qiymatlarni chop etish tashkil etildi}

end.                                                    {Dastur tamom bo'ldi}

            Bundan tashqari, Turbo—Paskalda o'n oltilik sanoq tizimida yozilgan butun sonlardan foydalanishga ham ruhsat beriladi. O'n oltilik sanoq tizimidagi butun sonni aniqlashda uning oldiga «$» (dollar) belgisi qo'yiladi.

            Misol: $11 o'nli sanoq tizimidagi 17 ga, $12 soni esa 18 ga teng.

            Endi shu holatga doir quyidagi sodda dasturni keltiramiz:

            Program Sanoq _tizim;

            Var

            N:integer;

            Begin

            N:=12; {N butun qiymatli o'zgaruvchiga o'nlik sanoq tizimidagi 12 soni o'zlashtirilyapti}

            N:=$12; {N butun qiymatli o'zgaruvchiga o'n oltilik sanoq tizimidagi 12 soni     o'zlashtirilyapti. Bu son amaldagi o'nli sanoq tizimida 18 ga teng}

            End.

 

3.6.3.Haqiqiy sonlar

 

            Haqiqiy sonlar matematika kursidan ma'lum bo'lgan oddiy o'nlik kasr sonlardir. Agar komputeringiz matematik soprotsessorli bo'lsa quyidagi 4-jadvalda sanab o'tilgan barcha tiplar o'rinli bo'ladi.                                                   :

            Agar komputerda matematik soprotsessor bo'lmasa,             '

faqat Real tipinigina ishlatish mumkin.

            Haqiqiy sonlarga doir quyidagi misolni ko'raylik:

    Berilgan mvan haqiqiy sonlari ustida to'rt matematik amalni bajarish dasturini tuzing.                                                  

 

 

 

 

            Program arifmetika;                                             

            Var                                                                    

            m,n:rea\; {m va n o'zgaruvchilarni haqiqiy sonlar' tipiga tegishli deb e'lon qildik}

Begin  

Readln (m); {m sonini kiritish so'ralyapti}

            Readln (n); {n sonini kiritish so'ralyapti}

            Writeln ('sonlar yig'indisi=',/n+n);

            Writeln ('sonlar ayirmasi=',/n—n);

            Writeln ('sonlar ko'paytmasi=',m*n);

            If n<>0 then Writeln ('sonlar bo'linmasi=',/n/n); {Agar n soni nolga teng bo'lmasa, m/n amalining natijasi mos izoh bilan chop etiladi}       

            end.

 

 

 

 

 

 

 

3.6.4.Belgilar va qatorlar

 

            Belgili tipli o'zgaruvchilar Char xizmatchi so'zi bilan e'lon qilinib, bu tipning qiymatlari xotiradan 1 bayt joy egallaydi. Paskal tilining barcha belgilari bu tipning qiymatlar sohasiga tegishlidir. Belgili qiymatni' (apostrof)  belgisi ichiga olib, yoki # belgisidan keyin uning ASCII kodini yozib aniqlash mumkin.

            Misol: 'A', yoki # 60.

            Qator — bu ' (apostrof) belgisi ichiga olib yozilgan belgilarning oddiy ketma-ketligidir: 'Ab21#9!cd 'dasturchi Saidkarim G'ulomov'.

            Qator bo'sh yoki bitta belgili bo'lishi ham mumkin. Qatorli o'zgaruvchi uzunligi 255 gacha bo'lgan belgili qiymatlarni qabul qilishi mumkin. Umuman olganda, har bir qatorli o'zgaruvchiga xotiradan 256 bayt joy ajratiladi. Xotirani tejash uchun qatorning tipini quyidagicha ko'rsatish maqsadga muvofiqdir: String[N], N — qatordagi belgilar soni. Bu holda belgili o'zgaruvchi uchun N bayt joy ajratiladi.

            Belgilar va qatorlar ustida bir qancha amallar bajarish mumkin, ya'ni qatordan kerakli bo'lakni kesib olish, qatorlarni bir-biriga qo'shish va natijada yangi qatorlar hosil qilish. Qatorlar haqidagi to'liq ma'lumotni kerakli bo'limdan olish mumkin.

            Belgilar va qatorlarga doir quyidagi sodda dasturni keltiramiz:

            Program String;

            Var

            ch: char; {ch o'zgaruvchi belgili qiymat qabul qiladi}

qatorl,qator2:String; {qatorl va qator2 o'zgaruvchilar uzunligi 255 dan ortmagan qatorlarni o'z'lashtirishi mumkin}

            N:String[5]; {N o'zgaruvchisi 5 ta belgidan tashkil topgan qatorlarni o'zlashtiradi}

            Begin

            ch: = 'A'; {ch o'zgaruvchisi A belgini o'zlashtirdi}

            N: = 'Ascar'; {N o'zgaruvchisi 5 ta harfli Ascar so'zini o'zlashtirdi}

            qatorl: = ch+'li '+N; {qatorl o'zgaruvchisi natijaviy Ali Ascar so'zini o'zlashtirdi}

             qator2: = "; {qator2 o'zgaruvchisi bo'sh qatorni ifodalayapti lekin, bu o'zgaruvchi uchun xotiradan 256 bayt  joy ajratilgan}

            end.

 

3.6.5.Ma'lumotlarning mantiqiy tiplari

 

            Paskal tilida mantiqiy tip boolean standart nomi bilan aniqlanadi. Mantiqiy tipli o'zgaruvchilar faqat ikki xil qiymat: True(rost) va False (yolg'on) larnigina qabul qilishi mumkin. Mantiqiy tipli qiymatlar ham tartiblangan, ya'ni False<True.

            Paskal tilida asosan quyidagi uchta mantiqiy amaldan ko'proq foydalaniladi: not — rad etmoq, and — mantiqiy ko'paytirish, or — mantiqiy qo'shish.

            Bu amallarni faqat mantiqiy o'zgarmaslar ustidagina  . ishlatish mumkin va natijada yana mantiqiy o'zgarmas hosil bo'ladi. Quyida mantiqiy o'zgarmaslar ustida amallar 5-jadvalda ko'rsatilgan:

 

 

 

 

            Ixtiyoriy qiymatlarni solishtirish amali ham mantiqiy qiymatni beradi:

            Misol: 3>2 natijasi true

                        0<—1 natijasi false.

 

3.6.6. Yangi tiplarni loyihalash

 

            Paskal tilida tilning standart tiplaridan yoki oldin hosil qilingan yangi tiplardan foydalanib yana yangi tiplar yaratish mumkin. Dasturda yangi tiplarni kiritish uchun maxsus tip aniqlash bo'limi mavjud. Bu bo'lim type xizmatchi so'zidan keyin boshlanadi.

            Har bir yangi tipni e'lon qilishdan oldin uning nomi (tipning identifikatori), so'ng esa tipning nimadan tashkil topganligi ko'rsatiladi.

            Yangi tip yozuv ham bo'lishi mumkin, uning maydoni esa standart tipdan yoki oldingi kiritilgan tiplardan tash­kil topishi mumkin.

            O'z o'rnida kiritilgan yangi tip dasturni yozishda juda qo'l keladi va dasturning sifatini keskin oshiradi.

 

3.7. PASKAL DASTURINING TUZILISHI

 

            Paskal dasturi dastur sarlavhasi va nuqta bilan tugovchi dastur tanasidan tashkil topgan. Dastur sarlavhasi va dastur tanasini ; (nuqta vergul) belgisi bilan ajratiladi:

            <Paskal dasturi>::=<dastur sarlavhasi>;<dastur tana-si>.

            Dastur sarlavhasi program xizmatchi so'zidan bosh­lanadi va undan so'ng dasturga foydalanuvchi bergan nom yoziladi:

<dastur sarlavhasi>::=program<dastur ismi>;

            Dasturning asosiy qismi uning tanasi hisoblanadi.

 Dasturning tanasini qisqacha qilib blok deb ham atash mumkin. Umuman olganda, blok qat'iy ketma-ketlikda yoziluvchi oltita bo'limdan tashkil topgan:

            <blok>::=<metkalar bo'limi>

            <o'zgarmaslar bo'limi>

            <yangi tiplar bo'limi>

            <o'zgaruvchilar bo'limi>

            <protsedura (qism dastur) va funksiyalar bo'limi>

            <operatorlar bo'limi>

            Dastur tanasining asosiy qismi bu operatorlar bo'limidir. Har qanday dasturda bu bo'lim albatta bo'lishi kerak. Dasturga qo'yilgan masalani yechish shu bo'limda amalga oshiriladi. Boshqa bo'limlar esa yordamchi bo'limlar bo'lib, tiplarni e'lon qilish bo'limlari deb ataladi. Bu yordamchi bo'limlar dasturda qatnashishi yoki qatnashmasligi ham mumkin, lekin ularning yozilish ketma-ketligi saqlanib qolinishi zarur.

            Paskal dasturning umumiy ko'rinishini quyidagi ko'rinishda yozib olaylikda, so'ng har bir bo'limni to'laroq tahlil qilib chiqamiz:

Program <dastur ismi>;

 

label

            <metkalar ro'yxati>;

const

            <o'zgarmaslar va ularning qiymatlari>;

type

            <ma'lumotlarning yangi,   nostandart tiplarini aniqlash>;

var

            <o'zgaruvchilarni, protseduralar va funksiyalarni e'lon qilish>;

begin

            <operatorlar bo'limi>

end.

 

            Metkalar bo'limi. Dasturning ixtiyoriy operatorini boshqa operatorlar orasida ajratib ko'rsatish mumkin. Buning uchun, operatorning oldidan ikki nuqta (:) belgisi orqali metka (tamg'a yoki ism deb ham atash mumkin) qo'yiladi va bunday operatorni metka bilan jihozlangan operator deb ataladi. Metkalar dasturda o'tish operatoridan foydalangandagina ishlatiladi. Metka sifatida oddiy identifikatorlardan yoki sonlardan foydalanilsa bo'laveradi. Dasturda ishlatilgan barcha metkalar label xizmatchi  so'zidan keyin boshlanuvchi metkalar bo'limida e'lon qilinib qo'yilishi kerak:

            <metka bo'limi>::=<bo'sh> | labeKmetkalar ro'yxati>;

            Metkalarning nomlari original, ya'ni o'xshashi yo'q bo'lishi kerak.

 

 

 

 

            O'zgarmaslar bo'limi. O'zgarmas — dasturning ishlashi davomida o'zgarmay qoladigan miqdordir. Agar miqdor dasturda ko'p marta ishlatilsa, uni dastur matnida qayta-qayta yozgandan ko'ra, bu miqdorni o'zgarmas deb aniqlab olib, dasturdagi miqdorning o'rniga o'zgarmasning ismini yozish qulay bo'ladi. Masalan, hammaga ma'lum soni. Bu sonni bir necha marta takroran dasturda yozish noqulay, shuning uchun, uni o'zgarmas sifatida aniqlab olish maqsadga muvofiqdir.

            O'zgarmas const xizmatchi so'zidan keyin e'lon qilinadi (aniqlanadi):

            <o'zgarmasni aniqlash>::=<o'zgarmas ismi>=<o'zgar-mas>;

            bu yerda <o'zgarmas>::=<skalyar miqdor>| <belgili qator> | <o'zgarmas ismi>

|+<o'zgarmas ismi>| — <o'zgarmas ismi>;

            <o'zgarmaslar bo'limi>::=<bo'sh> | const<o'zgarmasni aniqlash>;

 

 

 

            Ma'lumotlarning tiplarini aniqlash bo'limi. Paskal tilida qiymatlarning to'rtta standart tiplari mavjud: integer (butun), real (haqiqiy), Char (belgili) va boolean (mantiqiy) dasturning muallifi bu tiplar bilan bir qatorda, o'zi uchun zarur bo'ladigan tiplarni aniqlab olib, ulardan ham foydalanishi mumkin. Buning uchun, muomalaga kiritilayotgan har bir yangi tipga o'ziga xos ism berish kifoya va o'zgaruvchilarni e'lon qilish bo'limida bu tipdan bemalol foydalanish mumkin bo'ladi.

            Tip e'lon qilish quyidagi metaformula asosida amalga oshiriladi:

            <tip e'loni>::=<tip ismi>=<tip>;

            <tip>::=<tip ismi>|<tip vazifasi>;

            Tiplarni aniqlash bo'limi esa quyidagicha aniqlanadi:

            <tip aniqlash bo'limi>::=<bo'sh>|type<tip e'loni>

            Misol:

            type

            Mantiq=boolean;

            b= integer;

                        Hafta=(dush, sesh, chor, pay, ju, shan, yaksh);

                        Ish_Kuni=dush..ju;

 

            O'zgaruvchilar bo'limi. Har qanday dasturda o'zgaruvchilar deb ataluvchi dastur ob'ektlaridan foydalani-ladi. O'zgaruvchi — qiymat qabul qiluvchi ob'ektdir. Ularga qiymat dasturning bajarilishi davomida beriladi. Har bir o'zgaruvchiga uning qabul qiladigan qiymati va vazifasiga qarab ismlar beriladi. Shunday qilib, o'zgaruvchi o'zining nomi va qabul qiladigan qiymati bilan xarakterlanadi.

            Dasturda ishlatiluvchi har bir o'zgaruvchi o'zi qabul qiladigan qiymatlarining tiplariga mos holda o'zgaruvchi­lar bo'limida e'lon qilinib   qo'yilishi kerak:

            <o'zgaruvchilar bo'limi>::=<bo'sh> | Var<o'zgaruvchi­lar e'loni>;

            <o'zgaruvchilar e'loni>::=<o'zgaruvchi ismi>:<tip>

            Misol: Var

                        n,m,k : integer;

                        d : real;

                        x,y : real;

            S : boolean;

            Dasturda  ishlatilgan o'zgaruvchilar faqat bir martagina e'lon qilinishi kerak.

 

            Protsedura va funksiyalar bo'limi. Boshqa tillardagi kabi, Paskal tilida ham dasturni yozuvchi o'zi uchun qulay va zarur bo'lgan protsedura va funksiyalarni muomalaga kiritishi mumkin: Tabiiyki bu protsedura va funksiyalar ham xuddi o'zgaruvchilar kabi e'lon qilinib qo'yilijshi kerak. Hamma ishlatiluvchi protsedura va funksiyallarga ism berilib, shu ismi bilan ular chaqirilib dasturning  zarur joyida ishlatiladi. Ularga murojaat xuddi oddiy standart funksiyalarga murojaat kabi amalga oshiriladi.

            Protsedura va funksiyalar bo'limi o'zgaruvchilar bo'limining davomi bo'lib protsedure yoki function xizmatchi so'zlari bilan boshlanib, ixtiyoriy ketma-ketlikda e'lon qilinadi.

            Operatorlar bo'limi. Bu bo'lim dasturning eng aso-siy bo'limi bo'lib, dastur bo'yicha hisoblanuvchi barcha ishlar shu bo'limda bajariladi. Bo'limning metaformulasi quyidagicha yoziladi:

            <operatorlar bo'limi>::= begin <operatorlar ro'yxati>

end.

            Dastur o'z ishini shu bo'limda yozilgan operatorlar ro'yxati bo'yicha, qat'iy ketma-ketlikda bajaradi.

 

 

 

3.8. TILNING OPERATORLARI

 

            Dasturning asosiy vazifasi boshlang'ich ma'lumotlarni qayta ishlab, qo'yilgan masalaning natijasini beruvchi amallarni bajarishdan iborat. Algoritmik tillarda biror-bir masalani yechishda ma'lumotlar ustidagi amallarni bajarish operatorlar zimmasiga yuklatiladi. Dasturlash tillaridagi har bir operator ma'lumotlarni qayta ishlash jarayonining mustaqil bosqichi bo'lib, mantiqan yakunlangan hisoblanadi. Dasturda yozilgan operatorlarni to'g'ri talqin qilish uchun ularni yozish qoidalari (operatorning sintaksisi) qat'iy aniqlangan bo'lishi shart.

           Shunday qilib, aytish mumkinki dastur bu — turli xil vazifalarni bajaruvchi va yagona maqsadga eltuvchi operatorlarning to'plamidir. Har bir operator ; (nuqta-vergul) belgisi bilan yakunlanadi. Mavjud dasturlash tili ruxsat bergan operatorlardan unumli va oqilona foydalanib, mukammal dasturlar yaratish dasturchining bilimiga, tajribasiga va san'atiga bog'liqdir.

Quyida Paskal tilining asosiy operatorlari bilan to'liqroq tanishib, ulardan dasturlashda foydalanish yo'llarini o'rganamiz.

 

3.8.1. O'zlashtirish operatori

 

Odatda dasturning natijasini olish uchun juda ham ko'p oraliq hisob ishlarini bajarishga to'g'ri keladi. Oraliq natijalarni esa ma'lum muddatga saqlab turish lozim bo'ladi. Bu ishlarni bajarish uchun tilning eng asosiy operatorlaridan biri bo'lmish — o'zlashtirish operatori ishlatiladi:

            <o'zlashtirish operatori>::=<o'zgaruvchi>:=<ifoda>;

            Bu yerda := o'zlashtirish belgisi hisoblanadi, bu belgi-ni = (tenglik) belgisi bilan almashtirmaslik zarur. O'zlash­tirish operatorida := belgisining o'ng tomonidagi <ifoda> qiymati aniqlanilib, so'ng chap tomondagi o'zgaruvchiga o'zlashtiriladi yoki boshqacha qilib aytganda, ifoda qiymati o'zgaruvchi nomi bilan  xotirada eslab qolinadi.

O'zgaruvchining oldingi qiymati esa (agar u bo'lsa) yo'q bo'lib ketadi.                                                             .            O'zlashtirish operatorini yozishdagi eng muhim narsa  bu ifoda va o'zgaruvchilarning bir xil tipli bo'lishidir.

            O'zlashtirish belgisining o'ng tomonidagi ifodaning natijaviy tipiga qarab o'zlashtirish operatorini uch xil guruhga ajratish mumkin: arifmetik o'zlashtirish operatori, mantiqiy o'zlashtirish operato­ri,  belgili  o'zlashtirish  operatori.

 

 

3.8.2. Arifmetik o'zlashtirish operatori

 

            Butun yoki haqiqiy tipli, sonli natija beruvchi ifodani (odatda bunday ifodani arifmetik ifoda deb ataladi) hisoblash uchun arifmetik o'zlashtirish operatoridan foydalaniladi. Arifmetik ifodada qatnashuvchi barcha o'zgaruvchilar haqiqiy yoki butun tipli bo'lishi kerak. Arifmetik ifoda— sonlar, o'zgarmaslar, o'zgaruvchilar va funksiyalardan tashkil topadi hamda +, —, *, /, div, mod kabi amallar yordamida, yoziladi. Arifmetik amallarning bajarilishi quyidagi tartibda

'     bo'ladi : *, /, div, mod, +,—

            Ifodaning bajarilishidagi bu tartibni o'zgartirish uchun kichik qavslardan foydalaniladi. Ifodaning qavslar ichiga olib yozilgan qismlari mustaqil holda birinchi galda bajariladi.

            Sanab o'tilgan arifmetik amallarning vazifalari bizga matematika kursidan ma'lum. Lekin, bu ro'yxatdagi div va mod amallari bilan tanish emasmiz. Div — butun bo'lishni anglatadi, bo'linmani butun qismi qoldirilib, qoldiq tashlab yuboriladi.

 

 

Mod — butun sonlar bo'linmasining qoldig'ini aniqlaydi. M mod n qiymat faqat n>0 dagina aniqlangan. Agar m>0 bo'lsa m mod n=m—((m div n)*n), m<0 bo'lsa m mod n=m—((m div n)*n)+n, m mod n ning natijasi doim musbat sondir.

 

 

Paskal tilida ham boshqa algoritmik tillardagi kabi arifmetik standart funksiyalar mavjud. Bu funksiyalarning matematik ifodasi va Paskal tilidagi ifodalanishi 6-jadvalda keltirilgan:

 

 

 

 

 

 

 

                                                                                                                                                                                          

                

Endi arifmetik o'zlashtirish operatoriga doir misollar iko'rib chiqamiz:

            O'zlashtirish operatorining o'ng tomonidagi ifodada qatnashuvchi o'zgaruvchilar, albatta, bu operatordan oldin o'zining qiymatlariga ega bo'lishi kerak. Aks holda, o'zlashtirish operatori o'z ishini bajara olmaydi. Dastur tuzishda ko'pchilik yo'l qo'yadigan xatolikni quyidagi misolda tahlil qilib ko'ring:

 

 

 

3.8.3. Mantiqiy o'zlashtirish operatori

 

            Agar o'zlashtirish operatorining chap tomonidagi o'zgaruvchi boolean (mantiqiy) tipiga tegishli bo'lsa, operatorning o'ng tomonida natijasi true yoki false bo'lgan man­tiqiy ifoda bo'lishi shart.

            Mantiqiy ifoda arifmetik ifoda, solishtirish belgilari va mantiqiy amallardan tashkil topadi. Mantiqiy ifodaning natijaviy qiymati true (rost) yoki false (yolg'on) bo'ladi.

            Mantiqiy ifodada amallarning bajarilish tartibi quyidagicha:

 

 

 

 

3.8.4. Belgili o'zlashtirish operatori

 

            Agar o'zlashtirish operatorining chap tomonida char (belgili) yoki  String (qatorli) tipdagi o'zgaruvchi ko'rsatilgan bo'lsa, u holda operatorning o'ng tomonida belgili ifoda bo'lishi zarur. Belgili qiymatlar ustida faqatgina qo'shish (ulash) amalinigina bajarish mumkin . Shuning uchun belgili ifoda belgili o'zgarmas, belgili o'zgaruvchi yoki belgili tipli funksiya bo'lishi mumkin.

 

 

 

 

3.8.5.Tashkiliy operatorlar

 

            Bir nechta operatorlar ketma-ketligini bitta operatorga birlashtirish uchun tashkiliy operator zarur bo'ladi. Tashkiliy operator — begin va end xizmatchi so'zlari orasiga olib yozilgan ixtiyoriy operatorlarning ketma-ketligidir:

            <tashkiliy operator>::= begin <operator>{;<operator>}        

end

             Xususiy holda, operatorlar ketma-ketligi bitta operatordan ham tashkil topishi mumkin.

 

 

 

            Yuqoridagi 3-misolda ko'rsatilganiday, tashkiliy opera­tor rekursiv xarakterga ham ega.

 

 

 

 

 

3.8.6. O'tish operatori

 

            Odatda, dastur o'z ishini yozilgan operatorlar ketma-ketligi bo'yicha amalga oshiradi. Operatorlarning tabiiy bajarilish ketma-ketligini buzish uchun shartsiz o'tish operatoridan foydalanish mumkin. Boshqarishni dasturning biror operatoridan boshqa operatorga uzatish uchun boshqarish uzatiladigan operator oldiga tamg'a (metka) qo'yilishi kerak . Boshqarishni shartsiz uzatish operatori quyidagi shaklda yoziladi:

             <o'tish operatori>::= goto <metka>

bu yerda goto — ... ga o'tmoq demakdir. Bu operator yordamida boshqarish ko'rsatilgan metkali operatorga uzatiladi. Yuqorida aytganimizdek, dasturda qatnashgan barcha metkalar, dasturning metkalar bo'limida e'lon qilinishi kerak.

3) dastur ham x:=0 va d:=x*x  ifodani qayta-qayta hisoblab, y:=x ifodani hisoblashga navbat kelmaydi.

            Umuman olganda, dastur tuzuvchi iloji boricha o'tish operatoridan foydalanmaslikka harakat qilgani ma'quldir. Chunki o'tish operatoridan foydalanish dasturning o'qilishini qiyinlashtirib, uning sifatini keskin pasaytiradi.

           O'tish operatoridan foydalanishga doir quyidagi to'liq dasturni ko'rib chiqaylik:

 

 

3.8.7.Shartli operator

 

            Algoritmlar nazariyasidan ma'lumki, hisoblash jarayonlarini shartli ravishda uch xil guruhga ajratish mumkin:

            1.  Chiziqli jarayonlar;

            2.  Tarmoqlanuvchi jarayonlar;

            3.  Takrorlanuvchi jarayonlar.

            Chiziqli jarayonni hisoblash algoritmi qat'iy ketma-ketlik asosida amalga oshiriladi. Bunday jarayonni hisob­lash uchun o'zlashtirish operatorining o'zi yetarli bo'ladi.

            Tarmoqlanuvchi jarayonni hisoblash yo'li ma'lum bir shartning bajarilish yoki bajarilmasligiga qarab tanlanadi. Tarmoqlanuvchi jarayonlarni hisoblash uchun shartli operatordan foydalaniladi. ShartH operator ikki xil ko'rinishda bo'ladi:

            ■   to'liq shartli operator;

            ■   chala shartli operator.

            To'liq shartli operator quyidagi shaklda yoziladi:

            <to'liq shartli operator>::= if <mantiqiy ifoda>

            then <operator> else <operator>

 bu yerda if (agar), then (u holda), else (aks holda) — xizmatchi so'zlar.

            Shunday qilib, to'liq shartli operatorni soddaroq quyidagicha yozish mumkin:

            if     S     then     SI     else     S2;

            bu yerda        S — mantiqiy   ifoda;

            S1   — S mantiqiy ifoda rost qiymat qabul qilganda ishlovchi operator;

            S2  — S mantiqiy ifoda yolg'on qiymat qabul qilganda ishlovchi operator.

            Shartli operatorning bajarilishi unda yozilgan SI yoki S2 operatorlardan faqat birining bajarilishiga olib keladi, ya'ni agar S mantiqiy ifoda bajarilishidan so'ng true (rost) qiymati hosil

bo'lsa SI operatori, aks holda esa S2 operatori bajariladi.

            Chala (to'liqmas) shartli operatorning yozilishini quyidagicha ifodalasa bo'ladi:

            if     S     then     SI;

 bu yerda S — mantiqiy ifoda, SI — operator.

            Agar S ifodaning qiymati true (rost) bo'lsa SI operator bajariladi, aks holda esa, boshqarish shartli operatordan keyin yozilgan operatorga uzatiladi.

            Yuqorida aniqlangan shartli operatorlardan bir xil maqsadda bemalol foydalanish mumkin.

            Bu ikkala operatordan foydalanib dastur tuzish uchun quyidagi misolni ko'rib chiqaylik:

«ó» tarmoq iunksiyasmi hisoblash dastunni tuzish talab etilsin.

  1. To'liq shartli operatordan foydalanib tuzilgan dastur: program misol 1;

 

           Shartli operatorning sintaksis qoidasiga ko'ra then va else xizmatchi so'zlaridan so'ng faqat bitta operator yozilishi mumkin, agar bir nechta operatorlarni yozish lozim bo'lsa u holda, bu operatorlar ketma-ketligi begin va end xizmatchi so'zlari orasiga olinib tashkiliy operator hosil qilinadi.

 

           Ko'pgina operatorlar kabi shartli operator ham rekursivlik xossasiga ega, ya'ni shartli operator ichida yana shartli operator qatnashishi mumkin. Lekin, chala shartli operatorning ichida yana shartli operator yozishda ehtiyot bo'lmoq zarur, chunki yozilgan operatorni ikki xil ma'noda tushunish mumkin:

 

3.8.8.TAKRORLASH (SIKL) OPERATORLARI

 

            Yuqorida sanab o'tilgan jarayonlardan biri — takror-lanuvchi jarayonlarni hisoblashni shartli operatorlardan foydalanib ham tashkil etsa bo'ladi, lekin bunday jarayon­larni hisoblashni takrorlash operatorlari yordamida amalga oshirish osonroq kechadi.

            Takrorlash operatorlarining 3 xil turi mavjud:

            ■   parametrli takrorlash operatori;

            ■   repeat   takrorlash operatori;

            ■   while takrorlash operatori.

            Yechilayotgan masalaning mohiyatiga qarab, dasturchi o'zi uchun qulay bo'lgan takrorlash operatorini tanlab olishi mumkin.

           Parametrli takrorlash operatori. Operatorning quyidagi ko'rinishi amalda ko'proq ishlatiladi:

bu yerda    for (uchun), to (gacha), do (bajarmoq) — xizmatchi so'zlari;

 

           

 

 

            Operatorning ishlash   tamoyili (prinsipi):

            ■   sikl parametri (sp) boshlang'ich qiymat R1 ni qabul qilib, agar bu qiymat R2 dan kichik bo'lsa, shu qiymat uchun S operatori bajariladi;

            ■   sp ning qiymati yangisiga o'zgartirilib ( agar R son bo'lsa o'zgarish qadami 1 ga teng, belgili o'zgaruvchi bo'lsa navbatdagi belgini qabul qiladi va h.k.) yana S operatori bajariladi va bu jarayon    R > R2   bo'lguncha davom ettiriladi. Shundan so'ng sikl operatori o'z ishini tugatib boshqarishni o'zidan keyingi operatorga uzatadi.

           Agar biz operatorlarning necha marta takroran hisoblanishini aniq bilsak, u holda parametrli takrorlash operatoridan foydalanish maqsadga muvofiqdir.

            Ayrim paytlarda sikl parametrini o'sib borish emas, balki kamayish tartibida o'zgartirish mumkin, bu holda sikl operatori quyidagi formada yoziladi:

            for   k:= k2   downto   kl   do S;

bu yerda down to (gacha kamayib) — tilning xizmatchi so'zi.

            Bu operatorda R parametri R2 dan R1 gacha kama-yish tartibida (agar R — butun qiymatli o'zgaruvchi bo'lsa sikl qadami — 1 ga teng) o'zgaradi. Operatorning ishlash tamoyili esa oldingi operatornikiday qolaveradi.

            Misol: yuqorida ko'rsatilgan misolning dasturini qaytadan tuzaylik.

            Bu holda dasturdagi sikl operatorigina o'zgaradi xolos:

            for   i:- n   downto   1 do

qolgan operatorlar esa o'z o'rnida o'zgarmay qoladi.

            Dasturda parametrli takrorlash operatoridan foydalanish jarayonida sikl parametrining qiymatini sikl tanasi ichida o'zgartirmaslik lozim, aks holda operatorning ish ritmi buzilishi mumkin. Buni quyidagi misollarda ko'rish mukin:

            Ma'lum jarayonlarning takrorlash parametrlari haqiqiy qiymatlar qabul qilishi mumkin, bu holda parametrli takrorlash operatoridan to'g'ridan-to'g'ri foydalanib bo'lmaydi. Quyidagi misolda bunday takrorlashlarni qanday tashkil qilish mumkinligini ko'ramiz:

            Misol: y=ex funksiyaning [—2;2] oraliqdagi «x» lar uchun hisoblash dasturini tuzing («x» ning o'zgarish qadami 0,5 ga teng deb hisoblansin).

Funksiyani      necha marta    hisoblash    kerakligini

 

 

 

3.8.9.Repeat  takrorlash ( sikl) operatori

 

            Yuqorida aytib o'tganimizdek, sikldagi takrorlanishlar soni oldindan ma'lum bo'lsa, parametrli (for) sikl operatori foydalanish uchun juda qulay. Lekin, ko'pgina hollarda takrorlanuvchi jarayonlardagi takrorlanishlar soni oldindan ma'lum bo'lmaydi, sikldan chiqish esa ma'lum bir shartning bajarilish yoki bajarilmasligiga bog'liq bo'ladi. Bu hollarda repeat yoki while sikl operatorlaridan foydalanish zarur. Agar sikldan chiqish sharti takrorlanuvchi jarayonning oxirida joylashgan bo'lsa repeat operatoridan, bosh qismida joylashgan bo'lsa while operatoridan foydalanish maqsadga muvofiqdir.

            Repeat operatori quyidagi shaklda yoziladi:

            repeat SI;   S2;   ...   SN until   B; bu yerda repeat (takrorlamoq),   until ( gacha)   —

xizmatchi so'zlar;

            SI, S2, ..., SN lar esa sikl tanasini tashkil etuvchi operatorlar;

            Â — sikldan chiqish sharti (mantiqiy ifoda).

            Operatorning ishlash tamoyili juda sodda, ya'ni siklning tanasi  mantiqiy ifoda rost qiymatli natija bermaguncha takror-takror hisoblanaveradi. Misol sifatida, yana yuqoridagi yig'indi hisoblash misolini olaylik.

            Program   Sum2;

            var    i, n: Byte;

            Ayrim takrorlanish jarayonlarida sikldan chiqish shartini ifodalovchi mantiqiy ifoda hech qachon True (rost) qiymatga erishmasligi mumkin. Bu holda dasturning takrorlash qismi cheksiz marta qaytadan hisoblanishi mumkin, ya'ni dasturchilar tili bilan aytganda «dastur osilib qoladi» shuning uchun, operatordagi shartni tanlashda e'tiborli bo'lish lozim.

            E'tiboringizga ya'na bir misol tariqasida ismni qidirib topish dasturini havola qilamiz:

 

 

 

 

3.8.10.While  takrorlash ( sikl) operatori

 

            Ahamiyat bergan bo'lsangiz, repeat operatorida siklning tana qismi kamida bir marta hisoblanadi. Lekin, ayrim  paytlarda, shu bir marta hisoblash ham yechilayotgan masalaning mohiyatini buzib yuborishi mumkin. Bunday hollarda, quyidagi shaklda yoziluvchi while sikl operatoridan foydalanish maqsadga muvofiqdir:

 

 

3.8.11.Bo'sh operator

 

            Bo'sh operator o'zidan keyingi operatorni aniqlab beradi. U operatorlar ketma-ketligi orasida boshqa operatorlardan «;» belgisi bilan ajratiladi. Bundan tashqari, bo'sh operator metka bilan jihozlangan bo'lishi ham mumkin.

 

 

 

 

3.9. QIYMATLARNING SKALYAR TIPLARI

 

            Shu paytgacha biz qiymatlarning standartskalyar tiplari ustida so'z olib bordik va ulardan dasturlashda foydalandik. Bu tiplar Paskal tilining o'zida aniqlangan tiplar edi. Lekin, Paskal tili dastur tuzuvchi o'zi uchun qulay bo'lgan yangi tiplar kiritish imkoniyatini ham beradi. Shunday yangi tiplardan biri sifatida cheklangan va sanalma tiplarni ko'rsatish mumkin.

 

3.9.1.Sanalma tiplar

 

            Tilning standart tiplariga biz «butun son»lar, «haqiqiy son»lar, «belgi»lar va «mantiqiy qiymat»larni kiritgan edik. Lekin, amalda turli xil tipdagi qiymatlar bilan ishlashga to'g'ri keladi. Masalan, rang tushunchasi qizil, qora, oq, sariq, kulrang va h. k.larni o'z ichiga oladi, yoki yil oylari tushunchasi yanvar, fevral, ..., dekabr kabi 12 ta oyni o'z ichiga oladi. Bunday qiymatli tiplarni sonlar orqali ifodalab olsa ham bo'ladi, lekin bu belgilab olish ularning mohiyatini yo'qotib, tushunishga qiyin bo'lgan holni yuzaga keltiradi.

            Masalan:

dastur qatorini o'qib, gap nima haqida ketayotganligini dabdurustdan anglash qiyin. Ehtimol, gap bu yerda 7 — oy haqidadir, balki «R» o'zgaruvchini 7 butun soni bilan tekshirilayotgandir. Shunday qilib, «7» soni ostida nima yashiringanini bilish juda qiyin. Lekin, dasturning bu qatori

bo'lsa, gap yilning iyul oyi haqida ketayotganligini osongina anglash mumkin.

            Yuqoridagi kabi tushunmovchiliklarni bartaraf qilish, dasturning o'qishga qulayligini oshirish uchun qiymatlar tiplarining sanalma tipi kiritilgan.

            Standart tiplar ichida bu tipga misol qilib boolean (mantiqiy) tipini ko'rsatish mumkin: boolean = (false, true).

            Sanalma qiymat tipini quyidagicha aniqlanadi:

            <sanalma tipi>::=(<ism>,<ism>,...) yoki <sanalma tipi>::=(<ism> {,<ism>})

bu yerda kichik qavs ichidagi o'zaro vergul bilan ajratil-gan <ism>lar aniqlangan tipning o'zgarmaslari hisobla-nadi, ularning qavs ichiga olib yozilgan birikmasi esa, shu tipning qiymatlar to'plami hisoblanadi. Sanalma tip qiymatlari qat'iy noldan boshlab raqamlangan. Masalan, (dushanba, seshanba, chorshanba, payshanba, juma, shanba, yakshanba) sanalma tipi 7 ta haddan iborat bo'lib, bu yerda quyidagi hoi o'rinlidir:

            dushanba < seshanba < chorshanba < payshanba < juma < shanba < yakshanba, ya'ni dushanba 0 — tartib raqamiga, seshanba 1—tartib raqamiga ega va h.k.

            Bu tip dasturning yangi tiplar bo'limida aniqlanadi.

            Sanalma tipni aniqlashga doir misollar:

            type

            Rang = (qizil, safsar, sariq, ko'k, havorang, kul­rang, qora, oq);

            Hafta = (dush, sesh, chor, pay, jum, shan, yaksh);

            Mevalar = (olma, nok, shaftoli, uzum);

            Gul = Rang;

bu yerda biz to'rtta sanalma tip kiritdik, oxirgi Gul tipi Rang tipi bilan bir xil qilib aniqlandi.

            Shuni esda tutish kerakki, bir ismning har xil tip qiy­matlari bo'lishi mumkin emas. Masalan yuqoridagi tiplarning safiga

            Ziravor = ( zira, qalampir, olma)

tipini qo'shish mumkin emas, chunki olma qiymati Mevalar tipida aniqlangan edi. Bunday tip e'lon qilish, dasturning xatoligini anglatadi.

            O'zgaruvchilarning tiplarini e'lon qilish bo'limida dasturning type bo'limida aniqlab qo'yilgan tiplardan xuddi standart tiplar kabi foydalansa bo'ladi:

var

           Kun: Hafta;

           shar, kub: Rang;

Yangi  sanalma 'tiplarhi o'zpruvchilarfung"tlpfarim å’lon  qilish bo'limida ham kiritish mumkin:

Var

                        A, B: (stul, divan, stol, shkaf, parta);

            Lekin, kiritilgan bu tip ismsiz bo'lganligi uchun bu tipga dasturning boshqa joylaridan murojaat qilish mumkin emas. Shuning uchun sanalma tipni aniqlashning birinchi usuli ma'qulroqdir.

            Sanalma tipli qiymatlar ustida hech qanday amalni bajarib bo'lmaydi.

            Sanalma tipli qiymatlarni chop etish uchun odatda va­riant tanlash operatoridan foydalaniladi.