O’ZBEKISTON RESPUBLIKASI AXBOROT TEXNOLOGIYALARI VA KOMMUNIKATSIYALARINI RIVOJLANTIRISH VAZIRLIGI TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI

 

 

 

 

 

 

 

 

 

 

 

“Algoritmga kirish”

fanidan laboratorиya ishlarini bajarish bo’yicha 

metodik ko’rsatmalar

 

 

 

5330500- Компьютер инжиниринги (“Компьютер инжиниринги”,
“АТ-Сервис”, “Ахборот хавфсизлиги”, “Мультимедиа технологиялари”)

5330600- Дастурий инжиниринг таълим йўналишлари учун

 

 

Tuzuvchi:

Mustapakulov Ya. U. – TATU “A va MM” kafedrasi katta o’qituvchisi

 

 

2016 yil.

Сўз боши

 

Методик кўрсатмалар «Алгоритмга кириш» фанидан лаборатория ишларини бажариш пайтида турли туман масалаларни ечиш алгоритмларини қуришнинг принциплари ва усулларини ўрганиш, псевдокодда ёки юқори даражадаги дастурлаш тилларидан бирида дастур кодини ёзиб компютерда бажариб кўриш ва таҳлил қилишга мўлжалланган.

Har bir talaba barcha topshiriqlarning bitta variantini bajaradi. Topshiriqlar qo’yilgan talablarga asosan bajariladi va o’qituvchi tomonidan tekshiriladi.          

 

Ушбу методик кўрсатмалар қуйидаги мутахассислик талабалари учун тайёрланган:

5330500- Компьютер инжиниринги (“Компьютер инжиниринги”, “АТ-Сервис”, “Ахборот хавфсизлиги”, “Мультимедиа технологиялари”)

5330600- Дастурий инжиниринги.

 


 

МУНДАРИЖА:

ЛАБОРАТОРИЯ ИШИ  №1 “Алгоритмнинг асосий структуралари”

1.1     Чизиқли алгоритмлар.

1.2   Тармоқланувчи алгоритмлар

1.3   Такрорланувчи алгоритмлар

ЛАБОРАТОРИЯ ИШИ  № 2  “Algoritm sifatini baholashning mezonlari

2.1. Algoritmni to’g’riligini tekshirish

2.2. Algoritmni va uning murakkabligini tahlil qilish

ЛАБОРАТОРИЯ ИШИ  №3 «Iteratsion жараёнлар ва Rekurrent algoritmlar »

3.1  Iteratsion жараёнлар

3.2  Rekurrent  algoritmlar

3.3. Fibonachchi sonlari 

ЛАБОРАТОРИЯ ИШИ  № 4  “Bir o`lchamli massivlar ustida ishlash. Танлаш алгоритмлари”

ЛАБОРАТОРИЯ ИШИ  № 5  “Саралаш алгоритмлари”

5.1. Жойлаштириш орқали саралаш

5.2. Танлаш   орқали саралаш

5.3. Алмаштириш   орқали саралаш

5.4. Бирлаштириш  орқали саралаш

ЛАБОРАТОРИЯ ИШИ  № 6  “Қисқа маршрут топиш алгоритмлари(очкўз алгоритмлар)

6.1.Робот маршрутини оптималлаштириш алгоритми.

6.2. Pul maydalash масаласи algоritmи

6.3.Strukturalar, massivlar, ko’rsatkichlar. Strukturalarning dinamik massivi» 

ЛАБОРАТОРИЯ ИШИ  № 7.«Tashqi saralash. Binar fayllar. Matrisadan tuzilgan fayllar»

ЛАБОРАТОРИЯ ИШИ  № 8. «Тьюринг машинаси учун дастур ёзиш»

ЛАБОРАТОРИЯ ИШИ  № 9. «Марков алгорифми учун дастур ёзиш»


 

Ишни бажариш ва ҳисобот тайёрлаш тартиби:

1.     Берилган айрим масалаларни аналитик кўринишда ечиш.

2.     Берилган масаланинг ечиш алгоритмини блок-схема кўринишда тасвирлаш.

3.     С++ муҳитида дастурни киритиш.

4.     Дастурни компьютер хотирасида сақлаш ва дастурдаги мавжуд хатоларни топиш ва уларни тўѓрилаш.

5.     Дастурни ишга тушириш  ва масаланинг бошланѓич маълумотларини киритиб натижалар олиш.

6.     Олинган натижалар таҳлили асосида хулосалар ќилиш.

7.      Лаборатория ишини расмийлаштириш.

Ҳисобот шакли:

1.     Титул

2.     Масаланинг қўйилиши.

3.     Назарий қисм.

4.     Алгоритм блок-схемаси

5.     Алгортм коди

6.     Олинган натижалар

7.     Хулоса

8.     Илова тариқасида экрандан олинган кадрлар (скрин) қўйилади.


ЛАБОРАТОРИЯ ИШИ  № 1  “Алгоритмнинг асосий структуралари”

Мақсад: Талабаларда аналитик ва мантиқий фикрлашни ривожлантириш,  математик интуицияни кучайтириш.

Вазифалар: Алгоритм турларини ўрганиш, дастурлаш тилларининг бирида алгоритмни бажариш,

Описание: Безымянный6Назарий маълумотлар. 

Чизиқли алгоритмлар. Faqat ketma-ket bajariladigan amallardan tashkil topgan algoritmlarga-chiziqli algoritmlar deyiladi. Bunday algoritmni ifodalash uchun ketma-ketlik strukturasi ishlatiladi. Strukturada bajariladigan amal mos keluvchi shakl bilan ko‘rsatiladi. Chiziqli algoritmlar blok-sxemasining umumiy strukturasini quyidagi ko‘rinishda ifodalash mumkin.

 

Quyidagi  masalalarning yechish algoritmi va dasturi tuzilsin.

1.   Berilgan ikkita haqiqiy sonning o'rta arifmetik qiymati va ular modulining o'rta geometrik qiymati  hisoblansin.

2.   To'g’ri burchakli uchburchakning katetlari berilgan. Uchburchak gipotenuzasi va maydoni hisoblansin.

3.   R-radiusli aylana ichida joylashgan tomonlari bir xil n-burchakli  ko’pburchakning perimetri topilsin.

4.   Uchta R1, R2, R3 qarshiliklar parallel ulangan. Ularning ulanish qarshiligi hisoblansin.

5.   Toshning h balandlikdan yer ustiga qulash vaqti aniqlansin.

6.   Bir-biridan r masofada turgan,  m1 va m2 og’irlikdagi jismlarning o'zaro tortishish kuchi F aniqlansin.

7.   Aylana uzunligi ma'lum bo'lgan holda, shu aylana bilan chegaralangan soha maydoni hisoblansin.

8.   Bir-biriga qarama-qarshi tomondan bir xil tezlikda harakat qilayotgan ikkita jismning uchrashish vaqti aniqlansin. Ularning boshlang’ich tezligi, tezlanish va ular orasidagi boshlang’ich masofa ma'lum.       

9.   Haqiqiy son x berilgan. Ko'paytirish, qo'shish va ayirish arifmetik amallarini ishlatgan holda quyidagi ifoda hisoblansin.  2х4-3х3+4х2-5х+6 Ifodada ko'paytirish, qo'shish va ayirish amallarining har biri to'rttadan oshmasin.

10.   Haqiqiy  x va y sonlari berilgan. Ko'paytirish, qo'shish va ayirish arifmetik amallarini ishlatgan holda quyidagi ifoda hisoblansin   3х2у2-2ху2-7х2у-4у2+15ху+2х2-3х+10у+6 Ifodada ko'paytirish, qo'shish va ayirish amallarining har biri sakkiztadan oshmasin.

11.   Haqiqiy son x berilgan. Ko'paytirish, qo'shish va ayirish arifmetik amallarini ishlatgan holda quyidagi  ifoda hisoblansin   1-2х+3х2-4х3     Ifodani hisoblashda ko'pi  bilan sakkizta amal ishlatilsin.

12.   Haqiqiy  a soni berilgan. Faqat ko'paytirish amalini ishlatgan holda:   a) а4 -ikkita amalda ;    b) а6 -uchta amalda hisoblansin.

13.   Haqiqiy  a soni berilgan. Faqat ko'paytirish amalini ishlatgan holda:   a)  а7  -to'rtta amalda ;    b) а8  -uchta amalda hisoblansin.

14.   Haqiqiy  a soni berilgan. Faqat ko'paytirish amalini ishlatgan holda  а3   va  а10   lar to'rtta amalda  hisoblansin.

15.   Haqiqiy  a soni berilgan. Faqat ko'paytirish amalini ishlatgan holda   а2  , а5  , а17  lar oltita amalda hisoblansin.

16.   Kubning qirra uzunligi berilgan. Kubning hajmi   va yon sohasining yuzi topilsin.

17.   L  uzunlikdagi mayatnikning tebranish davri topilsin.

18.   Ichki radiusi 20 ga, tashqi radiusi esa  r (r>20) ga teng bo’lgan doira sohasi topilsin.

19.   Uchburchak o’zining burchaklari qiymatlari va o’zi yotgan aylananing radiusi bilan berilgan. Uchburchakning tomonlari topilsin.

20.   Uchburchak tomonlarining uzunliklari berilgan. Uchburchak balandligi va mediana uzunligi hisoblansin.

21.   Uchburchak tomonlarining uzunliklari berilgan. Uchburchak bissektrisalarining uzunliklari topilsin.

22.   (x1, u1 ) va ( x2, u2) koordinatadagi nuqtalar orasidagi masofa topilsin.

23.   t1 haroratli v1 litr suv ,  t2 haroratli  v2 litr suv bilan aralashtirildi. Hosil bo’lgan massaning hajmi va harorati aniqlansin.

24.   To'g’ri burchakli uchburchakning gipotenuza va kateti  berilgan.  Aylana ichiga joylashgan shu uchburchakning ikkinchi kateti va aylana radiusi topilsin.

25.   Radiusi      13.7 ga teng bo’lgan, yoyi  esa   H radian qiymatni qabul qiluvchi sektorning sohasi topilsin.

 

Описание: Безымянный6Тармоқланувчи алгоритмлар. Agar hisoblash jarayoni biror bir berilgan shartning bajarilishiga qarab turli tarmoqlar bo‘yicha davom ettirilsa va hisoblash jarayonida har bir tarmoq faqat bir marta bajarilsa, bunday hisoblash jarayonlariga tarmoqlanuvchi algoritmlar deyiladi. Tarmoqlanuvchi strukturasi berilgan shartning bajarilishiga qarab ko‘rsatilgan tarmoqdan faqat bittasining bajarilishini ta’minlaydi.

Maсала:  Aylananing  markazi koordinatalari va radiusi berilgan bo`lsa, berilgan nuqtaning aylanada yotishi yoki yotmasligini aniqlovchi dastur tuzing.

Dastur kodi:

#include <iostream>

#include <stdio.h>

#include <conio.h>

#include <math.h>

 #define TRUE 1

 int main(void)

{ float XCircle, YCircle, Radius, XPoint, YPoint; // o`zgaruvchilarni e'lon qilish

 printf("\nAylana markazining koordinatalarini kiriting: ");

 scanf("%f%f",&XCircle,&YCircle);

 printf("\nAylananing radiusini kiriting: ");

 scanf("%f",&Radius);

 printf("\nKoordinatalar uchini kiriting: "); 

    scanf("%f%f",&XPoint,&YPoint);

  int clrscr();

 if ( pow(XPoint-XCircle,2)+pow(YPoint-YCircle,2) <= pow(Radius,2) )

 {  printf("\nKoordinatalar uchi bilan " "(%.2f,%.2f) aylananing bir qismi\n bilan " "markazning koordinatalari (%.2f,%.2f) " "va radiusi %.2f",XPoint, YPoint, XCircle, YCircle, Radius);

 }

 else

 {  printf("\nKoordinatalar uchi bilan "

    "(%.2f,%.2f) aylananing qismisiz\n"

    "markazning koordinatalari bilan"

    " (%.2f,%.2f) va radiusi %.2f ",XPoint, YPoint,XCircle,YCircle,Radius);

 } 

 printf("\nChiqish uchun biror tugmani bosing...");

 getch();

 return 0; }

 

Quyidagi  masalalarning yechish algoritmi va dasturi tuzilsin.

1.   X   va  u haqiqiy sonlar berilgan. Hisoblansin :

   a) max(x,u);      b) min(x,u).

2.   X, y, z   haqiqiy sonlar berilgan. Hisoblansin :

   a) max(x.,y, z);        b) min(x,y,z).

3.   A, b,c   haqiqiy sonlar berilgan. Agar a>=b>=s bo'lsa, u holda berilgan sonlar ikki barobar oshirilsin, aks holda ularni absolyut qiymatlari bilan almashtirilsin.

4.   Ikkita haqiqiy son berilgan. Birinchi sonni bosmaga chiqaring, agar u ikkinchi sondan katta bo'lsa, aks holda ikkala sonni ham bosmaga chiqaring.

5.   Ikkita haqiqiy son berilgan. Agar berilgan birinchi son ikkinchisidan kichik yoki teng bo'lsa, u holda birinchi sonni nolga aylantiring, aks holda sonlar o'zgarishsiz bosmaga chiqarilsin.

6.   Uchta haqiqiy son berilgan. Ular ichidan qaysi biri (1,3) oraliqqa tegishli ekanligi aniqlansin.

7.   Haqiqiy x, u   (x>u) sonlari berilgan. Bu ikki sondan kichigini ularning yig’indisi bilan, kattasini esa ularning ko'paytmasi   bilan almashtiring.

8.   Haqiqiy uchta son berilgan. Bu sonlar manfiy yoki musbat ekanligi tekshirilsin. Agar musbat bo'lsa, kvadrat ildiz ostidan chiqarilsin, aks holda kvadratga oshirilsin.

9.   Agar x, u, s haqiqiy sonlar yig’indisi birdan kichik bo’lsa, u holda bu uchta sondan kichigini qolgan ikkita sonning yig’indisi bilan almashtiring, aks holda sonlar o’zgarishsiz qolsin.

10.   Haqiqiy a, b, s, d   sonlari berilgan. Agar a> b>s>d   bo'lsa, u holda har bir sonni eng katta qiymat bilan almashtiring; agar a>b>s>d  bo'lsa, u holda sonlar o'zgartirilmasin, aks holda barcha sonlar kvadratlari bilan almashtirilsin.

11.   Haqiqiy   x,u   sonlari berilgan. Agar  x va u  manfiy bo'lsa, u holda har bir sonni ularning moduli bilan almashtiring. Agar ulardan faqat bittasi manfiy bo'lsa, ikkala qiymatni 0,5 ga oshiring. Agar ikkala qiymat manfiy bo'lmasa, ularni 10 marotaba kamaytiring, boshqa hollarda esa sonlar o'zgarishsiz qolsin.

12.   Haqiqiy musbat x, u, s sonlar berilgan. Tomonlari x, u, s uzunlikdagi uchburchak mavjudmi yoki yo'qmi aniqlansin.

13.   Haqiqiy musbat x, u, s sonlar berilgan. Tomonlari x, u, s uzunlikdagi uchburchak mavjudmi yoki yo’qmi aniqlansin. Agar mavjud bo'lsa, u o'tkir burchakli uchburchak bo'lib hisoblanadimi, aniqlansin.

14.   Haqiqiy musbat   a, b, s (a>0) sonlari berilgan bo'lsa, ах2+бх+с=0  kvadrat tenglamaning haqiqiy ildizlari hisoblansin. Agar haqiqiy   ildiz yo'q bo'lsa, bu haqda ma'lumot berilsin.

15.   Haqiqiy  musbat   a, b, s (a>0) sonlari berilgan bo'lsa, ах4 +бх2+с=0     kvadrat tenglamaning haqiqiy ildizlari hisoblansin. Agar haqiqiy   ildizlar bo'lmasa, bu haqda ma'lumot berilsin, aks holda ikkita yoki to'rtta ildiz bosmaga chiqarilsin.

16.   Uchta haqiqiy son berilgan. Birinchi sonni bosmaga chiqaring, agar u ikkinchi sondan katta uchinchi sondan kichik bo'lsa, aks holda uchchala  sonni ham bosmaga chiqaring.

17.   Haqiqiy     musbat  a, b, c, d sonlar berilgan. Tomonlari a, b bo'lgan to'g’rito'rtburchakni c, d  tomonli to'g’rito'rtburchak ichiga  tomonlarini bir-biriga parallel yoki perpendikulyar qilib joylashtirish mumkinmi, aniqlansin.

18.   Haqiqiy musbat a, b, c, x, u sonlar berilgan. a,b,c qirralarga ega bo’lgan g’isht x,y tomonli to’g’riburchakli teshikdan o’ta olishini aniqlang.  G’ishtni  teshikka shunday kiritish kerakki, bunda g’ishtning har bir qirrasi teshikning har bir tomoniga parallel yoki perpendikulyar bo’lsin.

19.   Ikkita k,m sonlari berilgan. Agar k<m bo'lsa,  n o'zgaruvchiga 1 qiymat berilsin, agar  k<m bo'lsa, 0 qiymat, agar   k>m bo'lsa -1 qiymat berilsin. Berilgan kattaliklar:  1) k=3, m=3;   2)k=8,m=4;   3)r=3,m=6.

20.   R soni berilgan. Agar r<0 bo'lsa, у=р2   formula , agar r>0 bo'lsa,  у=р3    formula orqali  u hisoblansin.  Berilgan kattaliklar:   1) r=2;    2) r=-3.

21.   Haqiqiy  x, y, z sonlari berilgan. Hisoblansin: max(x+y+z,xyz).

22.   Haqiqiy x, y, z sonlari berilgan. Hisoblansin: Min2(x+y+z/2,xyz)+1.

23.   Berilgan haqiqiy x, y, z sonlarida quyidagi tengsizlik bajarilishi tekshirilsin:  x<y<z.

24.       Haqiqiy  x soni berilgan. Agar u manfiy bo'lsa, u kvadratga oshirilsin, aks holda kvadrat ildiz ostidan chiqarilsin.

25.   Dekart koordinatalar sistemasida ixtiyoriy nuqta va soha koordinatalari berilgan. Nuqtaning sohaga tegishliligini aniqlang.

 

Описание: Безымянный6Такрорланувчи алгоритмлар.  Agar biror masalani yechish uchun tuzilgan zarur bo‘lgan amallar ketma-ketligining ma’lum bir qismi biror parametrga bog‘liq ko‘p marta qayta bajarilsa, bunday algoritm takrorlanuvchi algoritm yoki siklik algoritmlar deyiladi. Takrorlanuvchi algoritmlarga tipik misol sifatida odatda qatorlarning yig‘indisi yoki ko‘patmasini hisoblash jarayonlarini qarash mumkin.

 

Quyidagi  masalalarning yechish algoritmi va dasturi tuzilsin.

f1(x) va f2(x) funktsiyalarining  qiymatlarini X ning   XÎ [0,1] berilgan oralig’ida hisoblash algoritmi va dasturini tuzing ( h=0,1). Natija jadval ko’rinishida olinsin.

Т/р

Funktsiya f1(x)

Funktsiya f2(x)

1

Sin (x+4.5)

20 / (1+x2)

2

1+cos(x-2)

3

ex+Sin(x)

1+2x

4

çSin(x)+1÷

(1+2x)ex

5

2-cos(x +1)

1-x2

6

+x2+1

ex(1+cos)

7

1+2x+1

4*e1-x-1

8

1+1,8х+1

Cos2(х-1)

9

х2+x+1

10

Cos(2x+1)

x*ex+1

11

2-cos3(x0+1)

12

ln(x2+x+1)

13

x(x2+1)

e -ïx+1ï*(1+x)

14

1+ln(2x-1)

sin2(x+1)*ex

15

ex/(1+x)

(x-1)2

16

(1+x)*e-x

x2+sin(x)

17

1+3x+1

(1-x)*tg2(x)

18

lg(1+x)

1+cos2(x)

19

*e-x

1+2sinx

20

Ln(cos(x)+1)

21

1+0,03x2

Cosx+sinx

22

x-sin(2x-1)

Ln(1+2x)

23

0,02*e2x+1

Cos(2x-1)

24

+0,09x

tg(3x-1)

25

10-6*ln(x+1)

x2+2x-3

 


 

ЛАБОРАТОРИЯ ИШИ  № 2  “Algoritm sifatini baholashning mezonlari

Мақсад: Талабаларда аналитик ва мантиқий фикрлашни ривожлантириш,  Algoritm sifatini baholashning mezonlariни тушуниш.

Вазифалар: Algoritm sifatini baholashning mezonlariни аниқлаш.

2.1.Algoritmni to’g’riligini tekshirish

Dastur to’g’riligini isbotlashning eng keng tarqalgan turi – bu uni testlardan o’tkazishdir.

    Algoritmni tekshirishda nazoratchi boshlang’ich ma’lumotlarni majmui algoritmik test deb nomlanadi.

To’g’ri deb shunday algoritmga aytiladiki, u masalaning qo’yilishida talab qilinadigan natijani har qanday ruxsat etilgan boshlang’ich ma’lumotlar bilan ham shakllantirib biladi. Odatda, dastur bergan natijalar ma’lum bo’lgan yoki qo’lda hisoblangan ma’lumotlar bilan taqqoslanadi, va ular to’g’riligi aniqlansa dastur to’g’ri ishlaydi degan hulosaga kelish mumkin. Ammo bu usul bilan foydalanuvchini hamma shubhalardan xalos qilib bo’lmaydi, ya’ni dastur ishlamaydigan hamma holatlarni hisobga olib bo’lmaydi.

    Gudman va Xidetniyemilar tomonidan algoritm to’g’riligini isbotlash uchun quyidagi uslubiyat taklif qilingan.

Algoritm 0 dan m gacha bo’lgan qadamlar ketma-ketligi ko’rinishida tavsiflangan deb tahmin qilaylik.Har bir qadam uchun qandaydir asoslanishni taklif etamiz. Xususan, qadamdan oldin va keyin ishlaydigan shartlar haqida lemma kerak bo’lishi mumkin. Shu bilan birgalikda, algoritm chekliligining isbotini ham taklif etamiz, va hamma ruxsat etilgan kiritish ma’lumotlarini tekshirib, hamma mumkin bo’lgan chiqarish ma’lumotlarni olamiz. Algoritmni to’g’riligi bilan samaradorligi o’rtasida hech qanday aloqa yo’qligini ta’kidlab o’tamiz.Aslida hamma talablarga bir xil yahshi javob beradigan algoritm kamdan-kam ishlab chiqiladi.

 

Algoritmni amalga oshirish. Algoritmni amalga oshirish deganda, EHM uchun dasturni yozish deb tushuniladi. Buning uchun quyidagi savollarga javob berish kerak:

·        Asosiy o’zgaruvchilarni aniqlash.

·        O’zgaruvchilarning turlarini aniqlash.

·        Nechta massiv yoki fayllar va qanday kattalikda ular kerak bo’ladi?

·        Bog’lanilgan ro’yhatlardan foydalanish ma’nolimi?

·        Qanday dasturiy qismlar kerak bo’lishi mumkin (tayyor bo’lsa ham)?

·        Qaysi dasturlash tilini tanlash?

    Dastur yozish yoki tuzishning hilma-hil usillari va uslublari mavjud.

2.2. Algoritmni va uning murakkabligini tahlil qilish

 Algoritmni tahlil qilishdan maqsad – algoritmga ma’lumotlarni aniq muvaffaqiyatli qayta ishlash uchun kerak bo’ladigan xotira hajmi va ishlash vaqtining baholari va chegaralarini olish. Bir masalani yechadigan ikki algoritmni taqqoslash uchun qandaydir sonli mezon topish kerak.

Faraz qilaylik, A – qandaydir bir turkumdagi masalalarni yechadigan algoritm, n – esa shu turkumdagi alohida bir masalaning kattaligi.Umumiy holda, n – oddiy skalyar yoki massiv yoki kiritiladigan ketma – ketlikning uzunligi bo’lishi mumkin. - n kattalikdagi ixtiyoriy masalani yechadigan algoritm A bajarish kerak bo’lgan asosiy amallarni (qo’shish, ayirish, taqqoslash,…) yuqori chegarasini beradigan ishchi funksiya. Algoritmningsifatini baholash uchun quyidagi mezonni ishlatamiz.

Agar  o’sish tartibi n dan bog’liq bo’lgan polinomdan katta bo’lmasa, A algoritm polinomial deb aytiladi, aks holda algoritm A eksponensial hisoblanadi.

Shular bilan birgalikda tahlil jarayonida ko’p matematik fanlarda standart bo’lgan iboralar ishlatiladi.

funksiya O[g(n)] deb belgilanadi, va        bo’lganda, uni tartibi katta n lar uchun g(n) deb qabul qilinadi. Demak  f(n)=O[g(n)].

funksiyasi  o[z(n)] deb katta n lar uchun belgilanadi, va unda   sharti bajariladi.

    Bu begilar “katta O” va “kichik o” deb nomlanadi. Agar f(n)=O[g(n)] bo’lsa, ikkala funksiya ham  bo’lganda bir xil tezlikda o’sadi.

    Agar f(n)=O[g(n)]  bo’lsa,unda g(n), f(n) nisbatan ancha tez o’sadi.

    Demak, - qandaydir n o’zgaruvchidan bog’liq va k darajadagi polinom uchun  yoki  bo’lganda algoritm polynomial hisoblanadi, aks holda algoritm eksponensial.

Eksponensial algoritm yahshi ishlamaydigan deb hisoblanadi.Agar algoritmlar eksponensial bo’lsa, ular orasida eng samaralisini topish kerak, n kattalikdagi masalani  qadamda yechadigan algoritm  yoki  qadamda masalani yechadigan algoritmdan afzalroq.

Описание: Безымянный.png

Dasturni tekshirish. Biz dasturni har bir qismini tekshiradigan kirituvchi ma’lumotlar to’plamini tanlashimiz kerak.Ko’p murakkab algoritmlarni matematik tomondan tadqiq qilish yoki juda qiyin yoki mumkin emas. Bunday holatlarda algoritmni faoliyat jarayonida va qiyinligi bo’yicha tekshiradi. Bundan tashqari dasturlarni hisoblash imkoniyatlarini aniqlash uchun ham testlash maqsadga muvofiq.Ko’p dasturlar qandaydir kiritiladigan ma’lumotlar bilan yahshi ishlasa, boshqalari bilan yomon ishlaydi.“Yahshi” lardan “yomon” larga o’tish “mayin” bo’lish kerak.Testlash uchun ma’lumotlar dasturning qiyinligiga, mavjud vaqt resurslariga, kiritish-chiqarishsoniga bog’liq holda tanlanadi. Bu yerda analitik va eksperimental tahlil bir-birini to’ldiradi.

Hujjatlashtirish. O’zingiz yozmagan dastur kodini o’qish juda qiyin.Bu muammoni hujjatlashtirish yordamida yechsa bo’ladi. Hujjatlashtirish o’z ichiga hamma yordamchi ma’lumotlarni oladi va dasturda nima bajarilishini tushuntirib beradi, xususan, blok-sxemalardagi boshqarishni uzatish, berilganlarni kiritish-chiqarish shaklini batafsil tavsif qilish, siklning parametrlari, yordamchi local va global proseduralarni bajarilishi va boshqalar.

Hujjatlashtirishning eng asosiy qoidasi bu “boshqalar yozgan dasturlarni qanday ko’rishni istasangiz, o’zingiz ham dasturni shunday ko’rinishda rasmiylashtiring”.

Masalalar yechish.

1 - misol. Bеrilgan to’rt xonali butun sonning raqamlari    ko’paytmasini toping.

Tеst

Tеst  tartibi

Tеkshirish

Son

Natija

1

Musbat son

2314

P = 24

2

Manfiy son

-1245

P = 40

 

 

Algoritmi (псевдокод)

alg Butun_son (but Num, P)
arg Num
natija P
boshlbutun i, j, k, l
 Num := abs(Num)                                      
 i := Num div 1000                                       
j := ((Num div 100) mod 10)                       
k := ((Num div 10) mod 10) 
 l := Num mod 10                                       
 P := i * j * k * l;
Tamom
 

 

2 - misol. Butun qiymatli A(N, M)  matritsa bеrilgan. Agar matritsa satrining hеch bo’lmaganda biror elеmеnti manfiy  bo’lsa, u holda bu satrning barcha elеmеntlarini nollar bilan almashtiring

Tеst

Bеrilgan

Natija

N

A matritsa

A matritsa

3

Algoritmi (псевдокод)

alg Modifikasiya(but N, haq jad A[1:N, 1:N])

 boshl but i, j, lit Flag
 kiritish N
 sb  iuchun 1 dan N gacha
   sbj uchun 1 dan N gacha
      kiritishA[i,j]
   so
 so
 sbi uchun 1 dan N gacha 
   j := 1; Flag := "Yuk"
   sb toki (j<=N) va (Flag = "Yo’q")
      agar A[i, j]<0   u holda Flag := "Ha" 
        aks holda j:=j+1
      hal bo’ldi
   so
   agar Flag = "Ha"u holda 
sbj uchun 1 dan N gacha A[i, j]:=0
        so
   hal bo’ldi
 so
 sbi uchun 1 dan N gacha
   sbj uchun 1 dan N gacha
      chiqarishA[i,j]
   so   so
tamom.

Algoritmning bajarilishi

Tеkshirilayotgan shartning bеlgilanishi:
(j<=N) va (Flag = "Yo’q")=> (1)

i

Flag

j

(1)

A[i,j]<0

Flag="Ha"

A[i,j]

1

"Yo’q"
"Ha"

1
2
1
2
3

+
+
-(
so)

-
+

+


A[1,1]=0
A[1,2]=0
A[1,3]=0

2

"Yo’q"

1
2
3
4

+
+
+
-(
so)

-
-
-

-

 

3

"Yo’q"
"Ha"

1
1
2
3

+
-(
so)

+

+

A[3,1]=0
A[3,2]=0
A[3,3]=0

 

Blok-sxеmasi fragmеnti:

 

ЛАБОРАТОРИЯ ИШИ  № 3  “Iteratsion жараёнлар  ва Rekurrent algoritmlar”

Мақсад: Талабаларда аналитик ва мантиқий фикрлашни ривожлантириш,  математик интуицияни кучайтириш.

Вазифалар: Iteratsion жараёнлар ўрганиш, дастурлаш тилларининг бирида алгоритмни бажариш,

3.1. Iteratsion жараёнлар 

Назарий маълумотлар: Iteratsiya deb nomlanuvchi siklli hisoblashlar protsessi mavjud. Ittertsion protsesslar hisobi qo’shni qiymatlar orasidagi farq berilgan aniqlikdan kichik yoki teng bo’lmaguncha davom etadi. Itteratsion protsessning asosiy qiyinchiligi, unga sikllar soni berilmasligida. Ya’ni sikl hisob-kitob tugagandan so’ng aniqlanadi. Sikldan chiqish uchun berilgan aniqlik hisob kitobdan chiqqan aniqlikdan katta bo’lganda sodir bo’ladi. Bu siklda chiqqan qiymat keyingi qiymatni chiqarish uchun ishlatiladigan kiruvchi ma’lumot ro’lini o’ynaydi.

Ketma-ket yaqinlashuvchi yoki iteratsion algoritmlar.Yuqori tartibli algebrayik va transsendent tenglamalarni yechish ususllari yoki algoritmlari ketma-ket yaqinlashuvchi – interatsion algoritmlarga misollar  bo‘la oladi. Ma’lumki, transsendent tenglamalarni yechishning quyidagi asosiy usullari mavjud:

- Urinmalar usuli (Nyuton usuli),

- Ketma-ket yaqinlashishi usuli,

- Vatarlar usuli,

- Teng  ikkiga bo‘lish usuli.

Bizga

f(x)=0                                                     (1)

transsendent tenglama berilgan bo‘lsin. Faraz qilaylik bu tenglama [a,b] oraliqda uzluksiz va f(a)*f(b)<0 shartni qanoatlantirsin. Ma’lumki, bu holda berilgan tenglama [a,b] orilaqda kamida bitta ildizga ega bo‘ladi va u quyidagi formula orqali topiladi.

Boshlang‘ich X0 qiymat  shart asosida tanlab olinsa, (2) iteratsion albatta yaqinlashadi. Ketma-ketlik

shart bajarilgunga davom ettiriladi.

Berilgan musbat a xaqiqiy sondan kvadrat ildiz chiqarish algoritmi tuzilsin.

Bu masalani yechish uchun kvadrat ildizni x deb belgilab olib,

ifodalash yozib olamiz. U holda (1) tenglamaga asosan

ekanligini topish mumkin (4) ifodani (2) ga qo‘yib, quyidagi rekurrent formulani topish mumkin:

Bu formulaga mos blok-sxema 2.18-rasmda keltirilgan. e - kvadrat ildizni topishning berilgan aniqligi. Eslatib o‘tamiz, algoritmda indeksli o‘zgaruvchilarga zarurat yo‘q.

Описание: Безымянный6

13-rasm. Berilgan musbat a haqiqiy sondan kvadrat ildiz chiqarish algoritmi (iteratsion algoritmga doir blok-sxema).

         Misol 1.  funksianing darajali qatorga ɛ>0 aniqlikda hisoblovchi dastur blok-sxemasini tuzing.

Agar oxirgi element qiymati berilgan ɛ aniqlikdan katta bo’lsa hisob to’xtatiladi.

C++ tilida dastur kodi.

 

#include<iostream>

#include<math.h>

using namespace std;

long double fac(int x)

{       

if(x<0)

         return 0;

         if(x==0)

         return 1;

         else

         return x*fac(x-1);}

int main()

{

double x, e, term, sum;

int k=0;

cin>>x>>e;

term = x;

sum = term;

while(abs(term)>e)

{

         term=pow(-1, k)*pow(x, 2*k+1)/(fac(k)*(2*k+1));

         sum = sum+term;

         k=k+1;}

cout<<x<<endl;

cout<<e<<endl<<sum<<endl<<k;

return 0;

}

Vazifalar varianti.

1-vazifa.O’zgarmas x, ɛ (x 0,  ɛ > 0) berilgan. Cheksiz summani yaqinlashish qiymatini toping. Ifodani berilgan aniq qiymat ɛ bilan ifodalang(ya’ni dastlabki qiymat berilgan ɛ dan oshgunigachon).

A)                                          F)

B)                           G)

C)                               H)

D)                       I)

E)                   J)

K)                                    L)

M)                         N)

 

2-Vazifa. O’zgarmas qiymat x, ɛ berilgan (ɛ>0). Cheksiz yig’indini ɛ ga yaqinlashiganini toping va uni aniq qiymat bilan taqqoslang.

S

Aniq qiymat

1

xR

2

cos x , xR

3

shx , xR

4

chx , xR

5

ln(1+ x) , x]−1;1]

6

arctgx , x[−1;1]

7

ln(1− x) ,x[−1;1]

8

1/(1+x)x[−1;1]

9

x[−1;1]

10

x[−1;1]

11

lnx[−1;1]

12

x[−1;1]

 

3.2 Rekurrent algoritmlar

Описание: Безымянный2Назарий қисм. Hisoblash jarayonida ba’zi bir algoritmlarning o‘ziga qayta murojaat qilishga to‘g‘ri keladi. O‘ziga–o‘zi murojaat qiladigan algoritmlarga rekkurent  algoritmlar yoki rekursiya deb ataladi.

Bunday algoritmga misol sifatida Fibonachchi sonlarini keltirish mumkin. Ma’lumki, Fibonachchi sonlari quyidagicha aniqlangan.

a0qa1q1, aiqai-1+ai-2    iq2,3,4,…. Bu rekkurent ifoda algoritmiga mos keluvchi blok-sxema 2.15-rasmda keltirilgan. Eslatib o‘tamiz formuladagi i-indeksga hojat yo‘q, agar Fibonachchi sonining nomerini ham aniqlash zarur bo‘lsa, birorta parametr-kalit kiritish kerak bo‘ladi.

         Amalda shunday bir masalalar uchraydiki, ularda takrorlanishlar soni oldindan berilmagan-noma’lum bo‘ladi. Ammo, bu jarayonni tugatish uchun biror bir shart berilgan bo‘ladi.

Masalan, quyidagi   qatorda nechta had bilan chegaralanish berilmagan. Lekin qatorni e aniqlikda hisoblash zarur bo‘ladi. Buning uchun  shartni olish mumkin.

3.3. Fibonachchi sonlari (ketma-ketligi) tabiatda eng ko`p uchraydigan ketma-ketliklardan bo`lib, quyidagicha ta`riflanadi:

Fibonachchi sonlari - 1, 1, 2, 3, 5, 8, 13, ... sonli ketmaketlikning elementlari. Bu ketmaketlikning 1- va 2- xadlari 1 ga tent, qolgan hadlari esa Fi+Fi+1 rekurrent munosabat bilan aniklanadi. Fibonachchi sonlarining birinchi 14 tasi Leonardo Pizanskiy (Fibonachchi) ning 1228 yil dagi kulyozmasida keltirilgan. Fibonachchi sonlari uzluksiz kasrlar nazariyasida, hisoblash mat.sida keng tatbiq etiladi.

Avvalgi ikki elementi 1 ga teng bo`lib, 3-elementidan boshlab "har bir element o`zidan oldingi 2 element yig`indisiga teng" qonuniyati asosida tuzilgan ketma-ketlikka Fibonachchi ketma-ketligi, bu sonlarga esa, Fibonachchi sonlari deyiladi.

 

F0

F1

F2

F3

F4

F5

F6

F7

F8

F9

F10

F11

F12

F13

F14

F15

F16

F17

F18

F19

F20

0

1

1

2

3

5

8

13

21

34

55

89

144

233

377

610

987

1597

2584

4181

6765

Описание: Chig'anoq.Описание: Fibonachchi „oltin“ spirali.Описание: Kungaboqar gulidagi qatorlarning tartibi]].

 

 

 

 

Kungaboqar gulidagi qatorlarning tartibi.

Fibonachchi

„oltin“  spirali.

Chig'anoq.

Previous Next

 

(Fibonachchi ketma-ketligi) Quyidagicha

F0 = 0,    F1 = 1,     Fn = Fn-1+Fn-2,     n > 2

munosabatda   berilgan sonlar ketma-ketlik Fibonachchi ketma-ketligidir. Ta'rifdan foydalanib ketma-ketlikning n- hadini rekursiv algoritm orqali yozishimiz mumkin.

FIB(n)

1     return Fn

2     if n < 1

3     then return (n)

4     else return (FIB(n-1) + FIB(n-2))

 

 

Rekursiya

         Funksiya o’z-o’zini chaqirishi rekursiya deyiladi. U ikki xil –– to’g’ri rekursiya va bilvosita rekursiya bo’lishi mumkin. Agarda funksiya o’zini chaqirsa, bu to’g’ri rekursiya deyiladi. Agarda funksiya boshqa bir funksiyani chaqirsa va u funksiya o’z navbatida birinchisini chaqirsa bu holatda bilvosita funksiya o’rinli bo’ladi.

Ayrim muammolar rekursiya yordamida osonroq yechiladi. Agarda ma’lumotlar ustida biror protsedura ishlatilsa va uning natijasi ustida ham hamhuddi shu protsedura bajarilsa, bunday hollarda rekursiyanij ishlatish lozim. Rekursiya ikki xil natija bilan yakunlanadi : biri oxir-oqibat albatta tugaydi va biror natija qaytaradi, ikkinchisi hech qachon tugamaydi va xatolik qaytaradi.

  Agarda funksiya o’zini chaqirsa, bu funksiyani nusxasi chaqirilishini aytib o’tish lozim. Rekursiya yordamida yechiladigan muammo sifatida Fibonachchi qatorini ko’rsatish mumkin.

1, 1, 2, 3, 5, 8, 13, 21, 34, …

Rekursiv funksiyalar uchun rekursiyani to’xtatish shartini berish zarur. Fibonachchi qatori uchun to’xtatish sharti n<3 shartidir.

Bunda quyidagi algoritm qo’llaniladi:

1.     Foydalanuvchidan Fibonnachchi qatorinig qaysi a’zosini hisoblashini ko’rsatishini so’raymiz.

2.     fib() funksiyasini chaqiramiz va unga foydalanuvchi tomonidan berilgan Fibonachchi qatori a’zosi tartib nomerini argument sifatida uzatamiz.

3.     fib() funksiyasi (n) argumenti taxlil qiladi. Agarda n < 3 bo’lsa, funksiya 1 qiymat qaytaradi, aks holda fib() funlsiyasi o’zini – o’zi chaqiradi va argument sifatida n-2 qiymatni beradi, keyin yana o’z-o’zini chaqiradi va  bu funksiyaga n-1 ni qiymat sifatida beradi. Bundan keyin esa ularning yig’indisini qiymat sifatida uzatadi.

Agarda fib(1)  funksiyasi chaqirilsa u  1 qiymatni qaytaradi.

Agarda fib(2) funksiyasi chaqirilsa u ham 1 qiymat qaytaradi.

Agarda fib(3) funksiyasi chaqirilsa u fib(2) va fib(1) funksiyalari yig’indisini qaytaradi.  fib(2) va fib(1) funksiyalari 1 qiymatni qaytarganligi sababli fib(3) funksiyasi 2 ga teng bo’ladi.

Agarda  fib(4)  funksiyasi chaqirilsa,  bunda u fib(3) va fib(2) funksiyalari yig’indisiin qiymat sifatida qaytaradi. fib(3) funksiyasi 2 va fib(2) funlsiyasi 1 qiymat qaytarishidan fib(4) funksiyasi 3 qiymat sifatida qaytarishi kelib chiqadi.

      Demak, Fibonachchi qatorining to’rtinchi a’zosi 3 ga teng ekan.

 

Fibonachchi qatorini topish algoritmi blok-sxemasi quyidagicha:

Fibonachchi sonlarini olish uchun turli usullar mavjud bo’lib, quyida ularni ko’rib chiqamiz.

1-usul: Yuqorida berilgan recursiv funksiyani quyidagicha oddiy usulini yaratamiz:

      

        #include<stdio.h>

 

int fib(int n)

{

   if (n <= 1)

      return n;

   return fib(n-1) + fib(n-2);

}

 

   int main ()

{

   int n = 9;

   printf("%d", fib(n));

   getchar();

   return 0;

}

 

 

 

 

2-usul:  Ushbu         F0 = 0,    F1 = 1,    Fn = Fn-1 + Fn-2,     n > 2  ifodadan   daraxt shaklini hosil qilamiz:

 

 

 

 

 

 

 

Daraxt ning quyidagicha kodini hosil qilamiz:

 

#include<stdio.h>

 

int fib(int n)

{

  /* Fibonachchi sonlarini massivda ifodalaymiz. Shuning uchun massiv 

e’lon qilamiz */

  int f[n+1];

  int i;

  

  f[0] = 0; // 0 – hadi 0 ga teng

  f[1] = 1; // 1 – hadi 1 ga teng

 

  for (i = 2; i <= n; i++)

  {

      /* Massivning 2-dan elementidan boshlab qolgan har bir elementi

o’zidan oldingi 2 raqamning yig’indisini o’zlashtiradi */

      f[i] = f[i-1] + f[i-2];

  }

   return f[n];

}

int main ()

{

  int n = 9;

  printf("%d", fib(n));

  getchar();

  return 0;

}

 

 

 Buni quyidagicha optimallashtirishimiz ham mumkin. Ya’ni massivdan foydalanmaymiz. Shunday 3 ta o’zgaruvchi yaratamizki, bular orqali

F0 = 0,    F1 = 1,     Fn = Fn-1 + Fn-2, larni ifodalaymiz.

 

#include<stdio.h>

int fib(int n)

{

  int first = 0, second = 1, next, i;

  if( n == 0)

    return a;

  for (i = 2; i <= n; i++)

  {

     next = first + second;

     first = second;

     second = next;

  }

  return second;

}

 

int main ()

{

  int n = 9;

  printf("%d", fib(n));

  getchar();

  return 0;

}

 

 

Bizga ma`lumki dasturlash tillarida tiplar ma’lum  bir chegarada belgilanadi. Lekin bizdan Fibonachchining n-hadini topish talab qilinganida n uchun 1000 dan kata bo’lgan sonlarni ham kiritishimiz  mumkin bo’ladi. Bunday holda yuqoridagi yozgan dasturimiz orqali kutilgan natijaga erisha olmaymiz. Bu holatda dasturimizni o’zgartirishga to’g’ti keladi.

 

 #include <iostream>

 #include <string.h>

 #include <fstream>

  using namespace std;

   char a[10000], b[10000];

int main()

{

         int n;

    cout << “N ni kiriting : ”;

         cin >> n;

   freopen("out.txt", "w", stdout);

/* Fibonachchi qatorining dastlabki ikki raqami 1 va 1 */

         cout << 1 << "\n" << 1 << endl;

         a[0] = b[0] = 101;

         for (int i = 2; i < n; i ++)

         {

                  

       char c[10000];

       int l1 = strlen(a), l2 = strlen(b);

                   for (int j = 0; j < max(l1, l2); j ++)

                            if (a[j] > 99 && b[j] > 99)

                                      c[j] = a[j] + b[j] - 100;

                            else

                                      c[j] = a[j] + b[j];

           int l = strlen(c);

                   for (int j = 0; j < l; j ++)

                            if (c[j] > 109)

                            {

                                      if (c[j + 1] == 0)

                                               c[j + 1] = 101;

                                      else

                                               c[j + 1] ++;

                                      c[j] = (c[j] - 100) % 10  + 100;

                            }

                   for (int j = strlen(c) - 1; j >= 0; j --)

                            if (c[j] < 100)

                                      c[j] = 0;

                   strcpy(a, b);

                   strcpy(b, c);

                   for (int j = strlen(b) - 1; j >= 0; j --)

                            printf("%d", int (b[j]) - 100);

                   printf(" ->  %d\n", strlen(b));

                  

         }

 }

 

         Bu berilgan dastur kodini taxlil qilishga urinib ko’ring.

 

. Fibonachchi sonlaridan kichik 3 xonali sonni toping. Sonlar ketma-ketligi  bunda  fibonachchi ketma ketligi.

Описание: Безымянный1

Funksiyaniнг  jadvalini tuzish”.

Masalani umumlashgan formulasi. [a, b] kesmada berilgan f(x) funksiyani m qiymatini toping. Natijalarni 14.1 jadvalga yozing. a,b, qiymatlarni klaviaturalarda kiriting.

14.1 jadval

f()

f’()

aniqlik

Iteratsiya soni

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

         Jadval ustunlari: 1- ifoda ; 2- ifoda funksiyaning  f(), kompilyatorning funksiya kutubxonalaridan foydalanib hisoblangan; 3-ifoda f’(   4- hisoblash aniqligi | f()- f’()|; 5-berilgan iteratsiyaga erishish uchun kerak bo’lgan talablar soni.

Jadvalni tuzish uchun ‘*’, ‘-’, ‘I’ va boshqa belgilardan foydalaning.

Chegaralar:

·        Massivdan foydalanmaslik.

·        Faktariallar va darajalar, qator a’zolarini ko’rsatishda 2 dan katta qilib ko’rsatmaslik.

·        [a, b] kesmadagi nuqtalar soni 10 tadan oshmasin.

·        Trigonametrik funksiyalar uchun argument uchun 0 ≤ x π/2 oraliq korsatilsin.

·        Exponentsial qiymatlar uchun argumentning butun qismini ajratish, qoldiq qismini kasr sonlar uchun qo’llash.

 

Izohlar:

1.     y=   funksiya uchun Nyutonning rekurent fo’rmulasi ishlatilsin:

 [ (k-1)* ], k=0, 1, 2…;

y>0 uchun. Kerakli aniqlik ||<e bilan munosabati orali baholanadi.

2.     Elementar funksiyalarni teylor qatoriga yoyish uchun 7.1 jadvaldan foydalaning.

Vazifani bajarish namunasi.        

          ifodasini jadvalini tuzing. Psevdografik simvollaridan jadval tuzishda foydalaning.

 

ЛАБОРАТОРИЯ ИШИ  №4 “Bir o`lchamli massivlar ustida ishlash. Танлаш алгоритмлари”

Мақсад: “Танлаш алгоритмлари билан танишиш. Массивлар билан ишлаш.”

Вазифалар: Танлаш алгоритмларини ўрганиш ва уларни дастурлаш.

 

Nazariy qism:     Bir muncha tanish bo`lgan ma’lumotlar tuzilmasi – bu massiv. Massiv baza deb ataluvchi bir tipdagi elemntlardan tashkil topgan bo`ladi. Shuning uchun ham massiv biravlodlidir . Bundan tashqari massiv elementlariga to`g`ridan to`g`ri murojaat qilish mumkin. Aynan bir elementni belgilash uning indeksi orqali amalga oshiriladi. Indeks – bu   asosiy tip ifodasi bo’lib maassivning indeksi tipi ifodasini bildiradi . Indekslar miqdori massiv o`lchami deyiladi. Aytish kerakki,har bir massiv elementi uchun xotiradan bir xil o`lchamdagi qismlar ajratiladi, demak, massiv elementlari tartib bilan joylashadi.

Agar x n o’lchamli massivning o’zgaruvchisi bo’lsa, unda har bir komponenta massivning nomi bilan ifodalanadi va undan keyin talab etilgan komponentaning indeksi ifodalanadi - . Bir xillarda massivning elementlarini indekslari bilan o’zgaruvchan deb atashadi.

Ayniqsa, katta massivlar bilan ishlagnada, odatda – massivni butunlay yangi qiymat bilan loyihalashtirmay, uning komponentasi alohida tanlanib o`zgartiriladi. Shuning uchun o`zgaruvchan massiv o`zgaruvchilardan tashkil topgan massiv sifatida qaraladi, shunda component alohida qiymat o`zlashtiradi, masalan, .

Massiv indeksi aniq bir tipga tegishliligi fakt, ya’ni u ketma-ket tartiblangan: massiv indeksini hisoblash mumkin. Indekslangan konstantalar joyiga boshqa bir indekslangan ifodani qo`yishimiz mumkin; u hisoblanadi va talab qilingan komponentaning qiymati identifikatsiyalanadi.  Agar bir qancha massivlar ustida bir qancha operatsiyalar bajarish kerak bo`lsa, unda sikl operatoridan foydalaning(4.1-misol­). C tilida massiv indekslari 0 dan boshlangani uchun blok-sxema tuzayotganimizda bu faktni hisobga olamiz.

Misol 4.1. n elementli bir o`lchamli massivning eng kata va eng kichik elementni tartib raqami bo`yicha chiqaruvchi blok-sxema tuzing. Elementlarning qiymati va tartib raqamini ekranga chiqaring.

 

 


                                      

Блок-схема: подготовка:  

                                    

 

 


                                       

 

 

 
                           

                                         

 


Блок-схема: подготовка:  

                                           

 


Блок-схема: решение:                                               

Блок-схема: документ:

 

 
Блок-схема: узел: TamomБлок-схема: решение:                                                                                       Ha

                                                                                          

                                                                      Yo`q

                                                                                        Ha

                                                                                

                                                                                   9

                                                                        Yo`q

 

 

 

 

4.1-misolning blok-sxemasi.                                         


4.2-misol. Berilgan x nuqtada ko`phadning qiymatlarini hisoblovchi blok-sxema tuzing:   . Koeffisientlarni, ko`phad darajasini va x ning qiymatini ekranga chiqaring.


 


Variantlar:

1.     N ta elementli bir o`lchamli massivning birinchi manfiy va oxirgi musbat elementlarining tartib raqamini toping. Elementlar qiymati va ularning tarti  raqamini ekranga chiqaring.

2.     N ta elementli bir o`lchamli massiv berilgan. Uning barcha manfiy elementlari yig`indisi, ularning sonini va musbat elementlari yig`indisini hisoblang.

3.     N ta butun sondan tashkil topgan massivning qat’iy o`suvchi va qat’iy kamayuvchi oraliqlar sonini toping.

4.     N ta elementli bir o`lchamli massiv berilgan. Uning teskarisidan tashkil topgan yangi massiv hosil qiling, ya’ni: birinchi element – oxirgi, ikkinchi element – oxiridan bitta oldingi element.

5.     Massivdagi local minimum va maksimumlar sonini toping. Lokal minimum (maksimum) o`zining qo`shni elementlaridan kichik (katta) elementlardir.

6.     O`sish tartibida berilgan n ta elementdan berilgan qiymatdan kichik bo`lgan elementlarni va ularning sonini aniqlang.

7.     N ta elementli bir o`lchamli massiv elemetlarini k ta chapga (o`ngga) suring.

8.     Massiv elementlarini juftlab yig`indini hisoblang: birinchi element bilan uning yonidagi element yig`indisini toping va oxirida bitta element qolguncha davom eting.

9.     Bir o`lchamli massiv berilgan:  Quyidagi yig`indini hisoblang:  oraliqdagi eng kata yig`indini hisoblang.

10.                        O`lchami n bo`lgan 2 ta vector berilgan. Ularning skalyar ko`paytmasini toping.

11.                       O`lchami n bo`lgan vector berilgan. Uning eng kata elementi

12.                        Ikkita ko`phadni bo`ling. (koeffitsientlari massivda saqlanadi)

13.                        Ikkita ko`phadni ko`paytiring. (koeffitsientlari massivvda saqlanadi)

14.                        N ta elementli massivning birdan ortiq takrorlangan elementlarini chiqaring.

15.                        N ta elementli massiv berilgan. Uning har xil qiymatli elementlarini sonini aniqlang.

16.                        Ko`phad hosilasining 1-dan m-gacha bo`lgan koeffitsientlarini hisoblang: .

17.                        Berilgan n elementli bir o`lchovli massivni qo`shish usulidan foydalanib o`sish(kamayish) tartibida saralang.

18.                        Berilgan n elementli bir o`lchovli massivni tanlash usulidan foydalanib o`sish(kamayish) tartibida saralang.

19.                       A[n] va b[m] o`sish tartibidagi saralangan massivlar bor. Shu massivlarni qo`shib,  C[n+m] tartiblangan massivni hosil qiling.

 

ЛАБОРАТОРИЯ ИШИ  №5 “Саралаш алгоритмлари.

Мақсад: “Турли Саралаш алгоритмлари билан танишиш”

Вазифалар: Саралаш алгоритмларини ўрганиш ва уларни дастурлаш.

 

Қисқа назарий маълумот. Кетма-кетликни саралаш масаласи тайёр ечим алгоритмлари мавжудлиги билан бойдир. Ушбу ишда баъзи-бир саралаш алгоритмларини кўриб чиқиш ва уларнинг дастурини тузиб, самарадорлигини таққослаш талаб етилади.

Massivlarni saralash. Massivlarni oddiy qo`shish, oddiy tanlash va oddiy almashtirish (pufakchali) usullaridan foydalanib saralash mumkin.

         Massivni oddiy tanlash usulidan foydalanib saralash. Unda har bir elelment o`zidan eyin turgan elementlarning kichigi bilan almashtiriladi.

Massivni oddiy tanlash usulidan foydalanib saralash.a[0] va a[1] elementlar o`sish tartibida joylashtiriladi, ya’ni zarurat bo`lsa qiymatlari almashtiriladi. Keyin a[2] element saralangan elelmentlar (a[0], a[1]) orasiga shunday joylashtiriladiki, natijada a[0], a[1], a[2] tartiblangan holatda bo`ladi. Shu tariqa har bir element tartiblangan elementlar orasiga qo`shib boriladi.

Massivni oddiy almashtirish(pufakchali) usulidan foydalanib saralash. Har bir element o`zidan keyin turgan elementlar bilan solishtiriladi. Agar o`zidan keyin turgan element undan kichik bo`lsa, ularning qiymatlari almashtiriladi.

 

Аввал масаласининг қўйилишиги кўриб чиқайлик.

 

Топшириқ 5.1. (саралаш масаласи)  Саралаш масаласи қуйидаги кириш-чиқиш қийматлари алгоритмини тузишдан иборат:

Кириш : Кетма-кетлик  берилган.

Чиқиш : Сараланган  ва бу ерда 

 

Барча саралаш алгоритмлари 4 та турга ажратилади :

·        Жойлаштириш

·        Танлаш

·        Алмаштириш

·        Бирлаштириш

 

энди ушбу турларни хар бирини кўриб чиқсак

Жойлаштириш  орқали саралаш:

Insertion-Sort(A)

1 for j ← 2 to length[A]

2       do key ← A[j]

3                 A[j] ни A[1 . . j − 1] нинг сараланган қисмига жойлаштирилади

4                 i ← j − 1

5                 while i > 0 and A[i] > key

6                          do A[i + 1] ← A[i]

7                                    i ← i − 1

8                 A[i + 1] ← key

 

Ушбу алгоритмнинг С++ дастурлаш тилидаги кўриниши:

#include <iostream>

using namespace std;

int main(){

int a[10] = {88,6,1,2,3,4,7,9,11,5};

int key;

         for(int j=1;j<10;j++){

                   key = a[j];

                   int i = j-1;

         while(i>=0 && a[i]>key){

                            a[i+1] = a[i];

                            i=i-1;

                            a[i+1] = key;}

}

for(int i=0;i<10;i++) cout << a[i] << " ";

}

 

Тўғридан-туғри танлаш орқали саралаш(Selection Sort):

Тўғридан-тўғри танлаш орқали саралаш ғояси шундан иборатки, бунда кетма-кетликнинг максимал элементи топилади ва ушбу элемент кетма-кетликнинг охирига ёзилади.

Псевдокод:

selection-sort(A)

1       for i ← length[A] to 2

2                 do

3                      m ← MAX(A[1..i])

4                      A[m] ↔ A[i] Ј обменять местами

Ушбу алгоритмнинг С++ дастурлаш тилидаги кўриниши:

#include <iostream>

using namespace std;

int main(){

         int a[10] = {6,7,8,9,10,5,4,3,2,1};

         for(int i=9;i>=0;i--){

                   int schetchik = 0;

                   int max = a[0];

                   for(int j=0;j<=i;j++){

                            if(max < a[j]){

                                      max = a[j];

                                      schetchik++;}0

                   }

                   int tmp = a[i];

                   a[i] = max;

                   a[schetchik] = tmp;

         }

         for(int i=0;i<10;i++) cout << a[i] << " ";}

 

Пуфакчали саралаш :

 

Пуфакчали саралашда кетма-кетликдаги елемент узидан кейингиси билан солиштирилади ва алмаштириш орқалт тартиблантирилади.

 

Пуфакчали саралашнинг псевдокоди :

1 for i ← 1 to length[A] − 1

2 do for j ← length[A] downto i + 1

3 do if A[j] < A[j − 1]

4 then A[j] ↔ A[j − 1]

 

Пуфакчали саралашнинг С++ дастурлаш тилидаг кўриниши:

#include <iostream>

using namespace std;

int main(){

         int a[10] = {6,2,3,4,9,1,8,5,4,66};

        

         for(int i=9;i>0;i--){

                   for(int j=0;j<i;j++)

                   {

                            if(a[j]>a[j+1])

                            {

                                      int tmp = a[j];

                                      a[j] = a[j+1];

                                      a[j+1] = tmp;      

                            }

                   }       

         }

}

 

Бирлаштириш орқали саралаш(Merge Sort):

Ушбу альгоритм “Ажратиб ол ва бошқар” класидаги альгоритмлар сарасига киради. Хар бир қадамда кетмағкетлик 2 га бўлинади ва хар бир қисм ажратилган холда сараланади. Ундан кейин тартибланган кетма-кетликлар битта кетма-кетликка айлантирилади(Merge амали орқали).

 

Merge(A, p, q, r)

1   n1 ← q − p + 1, n2 ← r − q

2   L[1..n1 + 1] ва R[1..n2 + 1] массивларини яратамиз

3   for i ← 1 to n1

4         do L[i] ← A[p + i − 1]

5   for j ← 1 to n2

6         do R[j] ← A[q + j]

7   L[n1 + 1] ← ∞,R[n2 + 1] ← ∞

8   i ← 1,j ← 1

9   for k ← p to r

10       do if L[i] ≤ R[j]

11                 then A[k] ← L[i]

12                          i ← i + 1

13                 else A[k] ← R[j]

14                          j ← j + 1

MERGE-SORT(A, p, r)

 

1 if p < r

2         then q ← [(p + r)/2]

3                   merge-sort(A, p, q)

4                   merge-sort(A, q + 1, r)

5                   merge(A, p, q, r)

 

Бирлаштириш орқали саралаш алгоритмининг С++ дастурлаш тилидаги кўриниши:

// mA массивининг ўлчами

// nB массивининг щлчами

// С массивининг ўлчови А ва Б массивлари йиғиндисига тенг ёки ундан катта бўлиши керак

// m + n

void merge(int m, int n, int A[], int B[], int C[]) {

      int i, j, k;

      i = 0;

      j = 0;

      k = 0;

      while (i < m && j < n) {

            if (A[i] <= B[j]) {

                  C[k] = A[i];

                  i++;

            } else {

                  C[k] = B[j];

                  j++;

            }

            k++;

      }

      if (i < m) {

            for (int p = i; p < m; p++) {

                  C[k] = A[p];

                  k++;

            }

      } else {

            for (int p = j; p < n; p++) {

                  C[k] = B[p];

                  k++;

            }

      }

}

 

Лабаратория иши топшириқлари :

1.     Юқорида келтириб ўтилган хар бир алгоритмларни қадамлар сони ва ажратиладиган хотира бўйича бахоланг

2.     Топшириқ варианти бўйича саралаш алгоритмини амалга оширинг

3.     Топшириқ варианти бўйича берилган алгоритмнинг самарадорлисини танланг.

4.     Алгоритмларни самарадорликка текширинг

 

ЛАБОРАТОРИЯ ИШИ  №6 “Қисқа маршрут топиш алгоритмлари.

Мақсад: “Турли оптимал ечим топиш масалалари  алгоритмлари билан танишиш”

Вазифалар: Алгоритмларини ўрганиш ва уларни дастурлаш.

 

Робот маршрутини оптималлаштириш. Labirintdan chiquvchi robot bu kompyuter o’zi mustaqil ravishda labirint hosil qilish hamda robot shu labirintdan iloji boricha eng qisqa va samarali yo’l bilan chiqib ketishini ifodadalaydi. Ushbu masalani yechilishi ko’plab masalalarni yechilishiga olib keladi. Ya’ni bunda inson aralashuvisiz kompyuterni qaysidir ma’noda fikrlasiga olib keladi hamda labirintda chiqish yo’li kompyuterga qo’yib beriladi. Albatta quyida keltirilgan kodda ma’lum kamchiliklar mavjud va siz bularni hal qilishga harakat qiling.

Quyida labirintdan chiquvchi robot algoritmini bir turi keltiriladi:

Algoritmi:

1.Dastlab ikki o’lchovli char tipli massiv e’lon qilamiz va unga hotiradan joy ajratamiz;

 2.Ikkinchi bosqichda char massivni bo’sh oraliq bilan to’ldiriladi;

3.Keyingi bosqichda massivning ustunlari va qatorlari maxsus belgilar bilan to’ldiriladi;

 4.Hosil qilingan xarita ko’riladi agar unda chiqish yo’li bo’lsa davom etiladi aks holda ortga qaytib xarita qaytadan quriladi; 

5.To’siq chiqquncha pastga harakat qiladi to’siq chiqsa ikki yonni tekshirib ochiq tomonga harakat qiladi, labirintdan chiqsa harakat to’xtatiladi agar yo’l topolmay qolsa ham harakat to’xtatiladi.

Dastur kodi:

#include<iostream.h>

#include<conio.h>

#include<windows.h>

#include<time.h>

#include<math.h>

using namespace std;

int main(){

    int size;

    int index, x = 2, y = 0, gl, gr, tanlash, left = 0, right = 0, road;

    bool stop = false, may = true;

    char Robot = char(2), yul = char(176);

    srand(time(0));

    cin >> size;

    char map [4*size + 1] [4*size + 1];

    // Xaritani to'ldirish

     start:

     for(int i = 0; i <= 4*size;i ++){

            for(int j = 0; j <= 4*size;j ++){

                    map[i][j] = ' ';

                                        }

           }

    // ustunni to'ldirish

    for(int i = 0; i <= 4*size;i += 4){

            for(int j = 0; j <= 4*size;j ++){

                    if(j % 4 == 0){index = rand() % 2;}

                    if(index != 1) map[j][i] = '|';

                 }// 2 - for yakuni

                                    }// 1 - for yakuni

    // qatorni to'ldirish

    for(int i = 0; i <= 4*size;i += 4){

            for(int j = 0; j <= 4*size;j ++){

                    if(j % 4 == 0) index = rand() % 2;

                    if(index != 1) map[i][j] = '-';

                 }// 2 - for yakuni

                                    }// 1 - for yakuni

  // Xaritani ko'rish

     for(int i = 0; i <= 4*size;i ++){

            for(int j = 0; j <= 4*size;j ++){

                    cout << map[i][j];

                                                 }// 2 - for yakuni

                    cout << endl;

                                        }// 1 - for yakuni

  back:

  cout << "1.Boshlash\n2.Kartani almashtirish\nTanlash:";

  cin >> tanlash;

  if(tanlash == 1) { system("cls"); goto begin; }

  else

      if(tanlash == 2){ system("cls"); goto start; }

      else { system("cls"); goto back; }

    // chop qilish

    begin:

        system("cls");  

        map[y][x] = Robot;

     while(stop != true){

     for(int i = 0; i <= 4*size;i ++){

            for(int j = 0; j <= 4*size;j ++){

                    cout << map[i][j];

                                                 }// 2 - for yakuni

                    cout << endl;

                                        }// 1 - for yakuni

     // Labirintdan chiqish sharti

     if(y == 4*size) break;

    // harakatlanish

    right = 0; left = 0;

    if(map[++ y][x] == ' ' && may == true) { map[-- y][x] = yul; map[++ y][x] = Robot;}

    else { -- y; gl = x; gr = x;

         /*while((map[y + 1][gl] != ' ') || (map[y + 1][gr] != ' ')){

             if(map[y + 1][gl] != ' ') { left ++; }

             if(map[y + 1][gr] != ' ') { right ++;}

              gl --; gr ++;

                                                                  }

             road = min(left, right); */

          

         if(map[y][++ x] == ' ' /*&& road == right*/){map[y][-- x] = yul; map[y][++ x] = Robot;}

         else{ -- x;

             if(map[-- y][x] == ' '){ map[++ y][x] = yul; map[-- y][x] = Robot; may = true;}

             else { ++ y;

                  if(map[y][-- x] == ' '){map[y][++ x] = yul; map[y][-- x] = Robot; may = false;

                                          //if(road == left){ may = true;}

                                          //else { may = false; }

                                         }

                  else {++ x; break;}

                  }

             }

         }

    Sleep(400);

                    system("cls");

                        }      

                    getch();

                    return 0;

          }//main yakuni

 

Pul maydalash (Ochko’z) algоritmи

Масаланинг қўйилиши; берилган суммани энг кам миқдордаги купьюра сони билан тўлаш керак бўлади.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


ЛАБОРАТОРИЯ ИШИ  № 8 «Strukturalar, massivlar, ko’rsatkichlar. Strukturalarning dinamik massivi» 

Masalaning berilishi. Malumotlar bazasi uchun soha tanlash va bazadagi ma’lumotlarni saqlash uchun struktura yaratish. Tanlangan struktura 5 ta maydondan kam bo’lmasligi kerak va bu maydonlarda 2 va undan ortiq turlar ishlatilishi kerak. Tanlangan ma’lumotlar bazasi uchun quyidagi funksiyalarni tuzing:

1.        Dinamik bir o’lchamli strukturalar massivini tuzuvchi va ularning qiymatlarini ekrandan o'qib oluvchi funksiya. Strukturaning bir maydonini boshqa strukturaning shu maydoni qiymati bilan to’ldirish imkoniyatini qo’shish. Struktura qiymatlarini kiritish uchun quyidagi mehanizmlarning biridan foydalanish mumkin:

 •         oldindan ma’lum sondagi sturukturalarni kiritish;

 •         ma’lum bir sifatga ega bo’lgan struktura kiritilmaguncha kiritishni davom ettirish;

 •         foydalanuvchi bilan kiritishni davom ettirish uchun aloqa.

2.        Dinamik strukturalar massivini ko’rish funksiyasi.

3.        Mavjud dinamik strukturalar massivini yangi strukturalar bilan to’ldirish funksiyasi.

4.        Qo’yilgan shartga javob beruvchi strukturani toppish va ekranga chiqarish funksiyasi.

5.        Strukturani ma’lum bir maydoni bo’yicha saralash funksiyasi.

Vazifa bajarish uchun na’muna. “Odam” (familiyasi, ismi, otasining ismi, jinsi, yoshi) yo’nalishi asosida dinamik strukturalar massivini yarating. Massivning ekranga chiqaring. Shu massivda berilgan jins va yosh oralig’i bo’yicha elementlarni tanlang. Massivni alifbo bo’yicha saralang.

 

Dastur kodi. 

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <stdlib.h>

 

typedef struct

{

 char FirstName[15], SecondName[15], LastName[15];

 int Age;

 char Sex [7];

} Person;

 

Person InitPerson ();

Person* InitArray ( int);

void DisplayArray (Person* , int );

void DisplayChoise (Person* , int , char* , int , int );

void DisplayPerson (Person );

void SortFirstName(Person* , int );

 

int main(void)

int Dimension;

  char SexTag [7]; 

int LowAge, UpperAge; 

Person* MassiveStruct;

 

printf("\nEnter the number of persons:");  scanf("%d",&Dimension); 

 

  MassiveStruct = InitArray (Dimension); 

if ( MassiveStruct == NULL )

printf("\nDynamic array don't exist!\n");  

printf("\nPress any key to exit...");  

getch();  

return 0; 

 

printf("\nThe list of persons: \n"); 

DisplayArray (MassiveStruct,Dimension);

  printf("\nEnter the sex-tag: "); 

scanf("%s",SexTag);

  printf("\nEnter the boundary of age: ");  scanf("%d%d",&LowAge,&UpperAge); 

printf("\n\nThe list of choise-persons: \n");  DisplayChoise(MassiveStruct,Dimension,SexTag, LowAge,UpperAge); 

 

printf("\n\nThe sorting list of persons: \n");  SortFirstName(MassiveStruct,Dimension); 

DisplayArray (MassiveStruct,Dimension);

 

free(MassiveStruct); 

printf("\nPress any key to exit...\n"); 

getch(); 

return 0;

 

 

Person InitPerson()

{

Person Man;

 

  printf("\nEnter first name:"); 

scanf("%s", Man.FirstName);

 

printf("Enter second name:"); 

scanf("%s", Man.SecondName); 

printf("Enter last name:"); 

scanf("%s", Man.LastName); 

printf("Enter age:"); 

scanf("%d",&Man.Age); 

printf("Enter sex:"); 

scanf("%s", Man.Sex);

 

  return Man;

 

Person* InitArray (int Dimension)

int i; 

Person* Massive =  (Person*)malloc(Dimension*sizeof(Person));

 

  if ( Massive == NULL ) return NULL; 

for( i = 0; i < Dimension; i++) 

{

printf("\nEnter the information about %d” “person \n",i+1);   Massive[i] = InitPerson(); 

  return Massive;

 

void DisplayArray (Person* Massive, int Dimension)

int i; 

 

for( i = 0; i < Dimension; i++ ) 

{  

DisplayPerson(Massive[i]); 

}

 

void DisplayChoise(Person* Massive, int Dimension, char* SexTag,

  int LowAge, int UpperAge)

int i; 

 

for( i = 0; i < Dimension; i++ )

{  

if ( strcmp(Massive[i].Sex,SexTag)==0 && 

Massive[i].Age <= UpperAge && 

Massive[i].Age >= LowAge) 

DisplayPerson(Massive[i]);

}

}

 

void DisplayPerson (Person Man)

printf("\n%s  %s  %s, %d year, %s ",Man.FirstName,                        Man.SecondName, Man.LastName, Man.Age, Man.Sex);

}

 

void SortFirstName(Person* Massive, int Dimension)

int i, j; 

Person Help;

 

  for( i = 0; i <= Dimension; i ++)  

for( j = Dimension-1; j > i; j --)  

if (strcmp(Massive[j].FirstName,

Massive[j-1].FirstName)<0 )   

{    

Help = Massive[j];    

Massive[j] = Massive[j-1];    

Massive[j-1] = Help;   

}

}

 

Variantlar.

1. "Inson": Familiyasi; ismi; otasining ismi; jinsi; millati; bo'yi; og'irligi; tug'ilgan sanasi (yili, oyi, kuni); telefon raqami; uy manzili (pochta indeksi, mamlakat, viloyat, tuman, shahar, ko'cha, uy, xonadon).

2. "Maktab o'quvchisi": Familiyasi; ismi; otasining ismi; jinsi ; millati; bo’yi; og'irligi; tug'ilgan sanasi (yili, oyi, kuni); telefon raqami; uy manzili (pochta indeksi, mamlakat, viloyat, tuman, shahar, ko'cha, uy, xonadon); maktab; sinf.

3. "Talaba": Familiyasi; ismi; otasining ismi; jinsi; millati; bo’yi; og'irligi; tug'ilgan sanasi (yili, oyi, kuni); telefon raqami; uy manzili (pochta indeksi, mamlakat, viloyat, tuman, shahar, ko'cha, uy, xonadon); Kollej yoki universitet; bosqich (kurs); guruhi; o'rtacha bahosi; mutaxassisligi.

4. "Xaridor": Familiyasi; ismi; otasining ismi; jinsi; millati; bo’yi; og'irligi; tug'ilgan sanasi (yili, oyi, kuni); telefon raqami; uy manzili (pochta indeksi, mamlakat, viloyat, tuman, shahar, ko'cha, uy, xonadon); kredit karta raqami; bank hisob.

5. «Kasal»: Familiyasi; ismi; otasining ismi; jinsi; millati; bo’yi; og'irligi; tug'ilgan sanasi (yili, oyi, kuni); telefon raqami; uy manzili (pochta indeksi, mamlakat, viloyat, tuman, shahar, ko'cha, uy, xonadon); shifoxona raqami; bo'limi; sog'liqni saqlash karta raqami; tashxisi (diagnostikasi); qon guruhi.

6. "Avtomobil egasi": Familiyasi; ismi; otasining ismi; telefon raqami; uy manzili (pochta indeksi, mamlakat, viloyat, tuman, shahar, ko'cha, uy, xonadon) avtomobil turi; Avtomobil raqami; ro'yxatga olish sertifikati soni.

7. " Xarbiy xizmatchi": Familiyasi; ismi; otasining ismi; uy manzili (pochta indeksi, mamlakat, viloyat, tuman, shahar, ko'cha, uy, xonadon); millati; tug'ilgan sanasi (yili, oyi, kuni); lavozimi; unvoni.

8. "Ishchi": Familiyasi; ismi; otasining ismi; uy manzili (pochta indeksi, mamlakat, viloyat, tuman, shahar, ko'cha, uy, xonadon); millati; tug'ilgan sanasi (yili, oyi, kuni); sex raqami; Kadrlar soni; ta'lim; qo'shilish yili.

9. "Telefon egasi": Familiyasi; ismi; otasining ismi; uy manzili (pochta indeksi, mamlakat, viloyat, tuman, shahar, ko'cha, uy, xonadon); telefon raqami.

10. "Abiturient": Familiyasi; ismi; otasining ismi; jinsi; millati; tug'ilgan sanasi (yili, oyi, kuni); uy manzili (pochta indeksi, mamlakat, viloyat, tuman, shahar, ko'cha, uy, xonadon); imtihon bahosi; o’tish bali.

11. "Davlat": mamlakat nomi; poytaxti; davlat tili; aholi; yer maydoni; valyuta (pul birligi); siyosiy tizimi; Davlat rahbari.

12. "Avtomobil": belgisi; rangi; seriya raqami; ro'yxatga olish raqami; chiqarilgan yili; avtomobil inspektsiyasi yili; narx.

13. "Mahsulot": nomi; qiymati; saqlash muddati; turi; ishlab chiqarilgan sanasi; saqlash muddati.

14. "Kinotasma": nomi; rejissior (familiyasi, ismi); ommaga taqdim etilgan sanasi; mamlakat; qiymati; daromad; foyda.

15. "Yo’nalish": avtomobil belgisi; avtomobil raqami; borish joyi; yuk ko’tarish hajmi (tonna); bir yukning qiymati; tovarlar umumiy qiymati.

16. "Kitob":nomi; muallif (familiyasi, ismi); ommaga taqdim etilgan sanasi; nashriyot; tannarxi; narxi; foyda.

17. "Bino": manzili; binoning turi; uydagi hamma qavatlar soni; xonadonlar soni; binoning ish davri; tubdan ta'mirlashgacha muddat  (25 yil - ish davri).

 

 

 


 

 

laborotriya ishi №8.  “ Tashqi saralash. Binar fayllar. Matrisadan tuzilgan fayllar.

Umumiy nazariy ma’lumot. Ikkilik faylini yaratish, tarkibi real matrisalari (matrisa tuzilishi ) bor.

Matrisalar ( tuzilishi tarkibiy ) soni joriy va hajmi bo'lgan Klaviaturadan dasturi ijrosi davomida . Muvofiq Individual Funktsiya olgan fayl mazmunini qayta ishlash  uchun. Har bir ish imkoniyatlari ekranda manba fayl mazmunini aks oldin va keyin o’zgartirishlar. Matrisalar bilan ishlayotgan, qaerda iloji bo’lsa, dinamik massivdan foydalaning.

 

Namuna topshiriq misoli. Faylda k matrisa n × m kattalikda saqlanadi. Har bir matrisa uchun fayldan elementlar yig'indisi hisoblanadi. Hamma matrisa aniq yeg’indisi, nol matrisa bilan almashtiriladi ( matritsalar nol iborat).
 
Ishlatiladigan Funktsiyalari  ta'rifi . 
Funktsiya FreeMemory prototipi bilan.
     int* FreeMemory(unsigned n, unsigned m);
to'p bo'lim hajmi bir namoyishchi bilan qaytadi n*m*sizeof(int) matritsasi dinamik  saqlash uchun n x m o'lchov
Funktsiya InitMatrix prototipi bilan
     int* InitMatrix(unsigned l, unsigned n, unsigned m);
to'p bo'lim hajmi bir namoyishchi bilan qaytadi n*m*sizeof(int), matrisa tarkibi qator 1-raqami bilan to’ldiriladi.
Funktsiya SimpleMatrix prototipi bilan
     int* SimpleMatrix( unsigned n, unsigned m);
to'p bo'lim hajmi bir namoyishchi bilan qaytadi n*m*sizeof(int), tarkibi yani nol matrisadir .
Funktsiya SumElemMatrix prototipi bilan
     int SumElemMatrix ( int* Pointer, unsigned n, unsigned m);
matritsaning elementlari yig'indisida joylashgani qaytadi ya’ni Pointer manzilga.
Funktsiya DisplayMatrix prototipi bilan
     void DisplayMatrix(int* Pointer, unsigned n, unsigned m);
Bu to'p hajmi n*m*sizeof(int) mazmunini Pointer manzili ko'rsatadi.
Funktsiya BlockWriteFile prototipi bilan
     void BlockWriteFile(char* String, char* Mode, unsigned k, unsigned n, unsigned m);
pomatrichno String ismli fayl , Mode rejimi ochish , k matrisa uchun nxm kattalikda  yozadi.
Funktsiya DisplayFile prototipi bilan
     void DisplayFile(char* String, char* Mode, unsigned n, unsigned m);
 matrisa bo’ycha String nomli faylni, ochiq mazmunini ko'rsatadi Mode rejimida.
Funktsiya WorkFile prototipi bilan
     void WorkFile(char* String, char* Mode, unsigned n, unsigned m);
matrisa bo’ycha masalani shartiga muvofiq qayta ishlanishi String nomidan, Mode rejimi bilan ochiladi.
         
Namunaviy dastur kodi.
#define TRUE 1 
#include <stdio.h> 
#include <conio.h> 
#include <process.h> 
#include <stdlib.h> 
void BlockWriteFile(char* ,char* , unsigned , 
unsigned , unsigned ); 
int* InitMatrix(unsigned ,unsigned , unsigned ); 
int* FreeMemory(unsigned , unsigned ); 
void DisplayFile( char* , char* , unsigned , unsigned ); 
void DisplayMatrix (int* , unsigned , unsigned ); 
int* SimpleMatrix(unsigned , unsigned ); 
void WorkFile( char* , char* , unsigned , unsigned ); 
int SumElemMatrix ( int* , unsigned , unsigned ); 
int main(void) 
 
{ 
      unsigned k, n, m ; 
     char FileName [20]; 
     while(TRUE) 
{ 
printf("\nEnter k number of matrixs:\n"); 
scanf("%u",&k); 
printf("\nEnter n, m dimentions of matrixs:\n"); 
scanf("%u%u",&n,&m); 
  if ( (k > 0) && (n > 0) && (m > 0) ) break; 
  printf("\nNumber is incorrect!!! Try ” “again!!!\n"); 
} 
 printf("\nEnter the name of file: \n"); 
scanf("%s",FileName); 
clrscr(); 
 BlockWriteFile(FileName, "wb", k, n, m); 
 printf("\nThe contents of file <<%s>>:\n",FileName); 
 DisplayFile(FileName, "rb", n, m); 
 WorkFile(FileName, "r+b", n, m); 
 printf("\nThe new contents of file <<%s>>:\n", 
FileName); 
 DisplayFile(FileName, "rb", n, m); 
 printf("\n Press any key to exit..."); 
getch(); 
return 0; 
} 
int* InitMatrix(unsigned l, unsigned n, unsigned m) 
{ 
unsigned i; 
 int* Pointer = (int*)malloc(n*m*sizeof(int)); 
 for( i = 0; i < n * m; i++) 
{ 
  Pointer[i] = l + 1; 
} 
return Pointer; 
} 
int* FreeMemory(unsigned n, unsigned m) 
{ 
 int* Pointer = (int*)malloc(n*m*sizeof(int)); 
return Pointer; 
} 
void BlockWriteFile(char* String, char* Mode, 
unsigned k, unsigned n, unsigned m) 
{ 
 int BufSize = sizeof(int) * n * m; 
 int* Pointer = (int*)malloc(BufSize); 
unsigned i; 
 FILE* FilePointer= fopen(String, Mode); 
 if (FilePointer== NULL) 
{ 
  printf("Can't open file to write."); 
getch(); 
abort(); 
} 
 for ( i = 0; i < k; i++ ) 
{ 
  Pointer = InitMatrix(i, n, m); 
fwrite(Pointer, BufSize,1, FilePointer); 
} 
fclose(FilePointer); 
free(Pointer); 
} 
void DisplayFile(char* String, char* Mode, unsigned n, 
unsigned m) 
{ 
 int BufSize = sizeof(int)*n*m, Sector = 0; 
 int* Pointer = FreeMemory(n, m); 
 FILE* FilePointer= fopen(String, Mode); 
 if ( FilePointer== NULL) 
{ 
  printf("\nCan't open file to read."); 
getch(); 
abort(); 
} 
 while(fread(Pointer,BufSize,1, FilePointer) != 0) 
{ 
  printf("\n %d's matrix \n",(Sector + 1)); 
DisplayMatrix(Pointer, n, m); 
Sector++; 
} 
fclose(FilePointer); 
free(Pointer); 
} 
void DisplayMatrix(int* Pointer, unsigned n, unsigned m) 
{ 
 unsigned i, j; 
 for( i = 0; i < n; i++) 
{ 
  for( j = 0; j < m; j++) 
{ 
   printf("%4d",*(Pointer + i * m + j)); 
} 
printf("\n"); 
} 
} 
int* SimpleMatrix(unsigned n, unsigned m) 
{ 
unsigned i; 
 int* Pointer = (int*)malloc(sizeof(int)*n*m); 
 for( i = 0; i < n * m; i++) 
{ 
  *(Pointer + i) = 0; 
} 
return Pointer; 
} 
int SumElemMatrix ( int* Pointer, unsigned n, unsigned m) 
{ 
 int s = 0; 
unsigned i; 
 for ( i = 0; i < n * m; i++ ) 
{ 
  s = s + *(Pointer + i); 
} 
112
return s; 
} 
void WorkFile(char* String, char* Mode, unsigned n, 
unsigned m) 
{ 
 int* Pointer = FreeMemory(n, m); 
 int BufSize = sizeof(int)*n*m; 
 int* Simple, Sum = 0; 
 FILE* FilePointer= fopen(String, Mode); 
 if ( FilePointer== NULL) 
{ 
  printf("Can't open file to read."); 
getch(); 
abort(); 
} 
 while(fread(Pointer, BufSize,1,FilePointer) != 0) 
{ 
  Sum = SumElemMatrix(Pointer, n, m); 
  if ( Sum % 2 == 0 ) 
{ 
fseek(FilePointer, -1L * BufSize, SEEK_CUR); 
Simple = SimpleMatrix(n, m); 
fwrite(Simple, BufSize,1, FilePointer); 
fseek(FilePointer, 0L, SEEK_CUR); 
} 
} 
fclose(FilePointer); 
free(Pointer); 
free(Simple); 
}
Topshiriq variyantlari.
1. Birinchi faylda k matrisa bor, ikkinchi faylda l ta n x m o’lchamli matrisa bor. Bu matrisaladan birinchi elementi  , ikkinch fayl oxiriga ko'chirish.  1 chi, 2 chi fayllarni ekranga chiqaring.
2. Birinchi faylda k matrisa bor, ikkinchi faylda l ta n x m o’lchamli matrisa bor. Matrisasi ko’p fayldan ortiqchasi uchinchi faylga olinsin. 1 chi, 2 chi, 3 chi fayllarni ekranga chiqaring.
3. Faylda 2 ta: 1chi n x m, 2 chi m x l matrisa bor bo’lib u k komponentli strukturadan iborat. Mos matrisa ko’paytmasini toping va 2 chi faylga yozing. 1 chi, 2 chi fayllarni ekranga chiqaring.
4. Birinchi faylda k matrisa bor, ikkinchi faylda l ta n x m o’lchamli matrisa bor. Ikkichi faylga 2chi fayida yo’q lekin 1 chi fayida bor matrisalani qo’shish. 1 chi, 2 chi fayllarni ekranga chiqaring.
5. 1 chi faylda k ta matrisa bor bo’lib, n ta qator va n+1 ta ustundan iborat. 2 chi faylda 1 chi fayldagi matrisalani LAN sistemasiga mos yechimlarini vektor qiymatlarini saqlang. Ekranga komponenta bilan birga tenglamaning chiquvchi qiymatlarini, yangi ma’lumotlarni va natijani chiqaring. 1 chi, 2 chi fayllarni ekranga chiqaring.
6. Faylda n x m o’lchamli k ta matrisa bor. Har bir matrisada uchun uning tarkibidagi elementlar yeg’indisini toping. Hamma juft qiymatlarni boshqa fayllarga yozing va boshlang’ich fayidagi qiymatlarni 1 bilan almashtiring. 1 chi, 2 chi fayllarni ekranga chiqaring.
7. 1 chi faylda k ta matirsa 2 chi faylda l ta  n x m o’lchamli. 1 chi va 2 chi fayldagi toq elementlarni o’zaro almashtiring. 1 chi, 2 chi fayllarni ekranga chiqaring (tartib raqami o’zgarmasin).
8. n tartibli k ta kvadrat matrisa 1 chi faylda bor. 2 chi faylda l ta kvadrat matrisa bor. Agar kl bo’lsa qiymati kam bo’lgan matrisa oxiriga 1 lik matrisani qo’shib qo’ying. 1 chi, 2 chi fayllarni ekranga chiqaring.
9. n x m matrisa faylda bor. Har bir matrisa uchun uning dioganallari yeg’indisini hisoblang. Boshqa bir faylga hamma matrisalarni toq qiymatlari bilan yozing va uni transponirlangan matrisa bilan almashtiring va ekranga chiqazing.
10. 1 chi faylda k ta matrisa bor. Boshqa bir faylga simetrik matrisalarni yozing (A= ), 3 chi faylga qolgani. 1 chi, 2 chi fayllarni ekranga chiqaring.
11. 1 chi faylda n x m o’lchamli k ta matrisa bor. 2 chisida m x l o’lchamli k ta matrisa bor. 1 chi va 2 chi fayldagi mos kelvchi matrisalarni k ta ko’paytmasini toping va 3 chi faylga struktura kompanent ko’rinishida yozing. Har bir kompanenta 3 ta matrisa 1 chi n x m 1 chi fayldan, 2 chi m x l 2 chi fayldan, 3 chisi n x l matrisa ko’paytmasi natijasi va 1 chi, 2 chi fayllarni ekranga chiqaring.
12. n x m tartibli k ta matrisa 1 chi faylda bor. 2 chisida l ta matrisa bor. 1 chi fayldagi toq elementlar (1, 3, 5 ... tartibi bo’yicha) elementlarni 2 chi fayldagi juft elementlar (0, 2, 4 ... tartibida) elementlar bilan almashtiring. Ko’p matrisasi bor fayldagi qolgan matrisalarni 3 chi faylga yozing. 1 chi, 2 chi fayllarni ekranga chiqaring.
  

 


 

ЛАБОРАТОРИЯ ИШИ  №8 “Tyuring mashinalari”

            Agar qandaydir ommaviy muammoni echish algoritmi ma’lum bo’lsa, u holda uni realizatsiya etish uchun shu algoritmda aniq yoritilgan ko’rsatmalarni ijro etish zarur. Algoritmni realizatsiya etish jarayonini avtomatlashtirish g’oyasi, tabiiyki, inson bajaradigan ishni mashinaga uzatishni taqozo qiladi. Bunday mashinani HH asrning 30-yillarida amerika matematigi Э.Post va angliya matematigi A.Tyuringlar tavsiya etdilar.

            Tyuring mashinasining tushunchasi bizga intuitiv ma’lum bo’lgan hisoblash procedurasini elementar operaciyalarga ajratish natijasida hosil bo’ladi.Tyuring ta’kidlaydiki, istalgan mumkin bo’lgan hisoblashni o’tkazish uchun uning elementar operaciyalarini shaytarish etarli.

            Tyuring ayrim turdagi nazariy hisoblash mashinasini izohlab berdi.Bu mashina muayyan mehanik qurilma emas, balki «hayoliy» matematik mashinadir. Berilgan ko’rsatmani bajaruvchi hisoblovchi odamdan yoki mavjud raqamli hisoblash mashinasidan Tyuring mashinasi ikki jihati bilan farq qiladi.

            Birinchidan, «Tyuring mashinasi» hato qila olmaydi, ya’ni u og’ishmay (chetga chiqmasdan) ko’rsatilgan qoidani bajaradi.

            Ikkinchidan, «Tyuring mashinasi» potencial cheksiz hotira bilan ta’minlangan.

            Эndi Tyuring mashinasi tushunchasi bilan batafsil tanishamiz.

            Tyuring mashinasini quyidagilar to’liq aniqlaydi:

            1.Tashqi alfavit, ya’ni  chekli simvollar to’plami. toplam elementlarining chekli ketma-ketligi  toplamdagi soz deyiladi. Sozni tashkil etuvchi simvollar soni shu sozning uzunligi deyiladi.

            Masalan,  alfavitning har bir elementi uzunligi 1 ga teng bolgan sozdir.Bu alfavitda soz korinishida mashinaga beriladigan ahborot (informaciya) kodlashtiriladi.Mashina soz korinishida berilgan informaciyani qayta ishlab, yangi soz hosil qiladi.

            2.Ichki alfavit, ya’ni  simvollar.  - mashinaning chekli son holatlarini ifodalaydi. Istalgan mashinaning holatlari soni tayinlangan bo’ladi. Ikki holatda mahsus vazifa bajariladi: - mashinaning boshlang’ich (dastlabki) holati, - natijaviy (ohirgi) holati (to’htash holati). - surilish simvollaridir (o’ngga, chapga va joyida).

            3.Ikki tomonga cheksiz davom ettirish mumkin bo’lgan lenta (mashinaning tashqi hotirasi). U katakchalarga (yacheykalarga) bo’lingan bo’ladi.Har bir katakchaga faqat bitta harf yozilishi mumkin.Bo’sh katakchani  simvoli bilan belgilaymiz (1-shaklga qarang).

 

 

 

 

 

                                                 1-shakl.

 

            4.Boshqaruvchi kallak (golovka). Ulentaboylabharakatqiladivaqandaydirkatakcha (yacheyka) qarshisidatohtashimumkin (2-shakl).

 

 

 

 

 

 

 

 

 

2-shakl.

            Buholatda «kallakkatakchani, yanisimvolni «koribturibdi»» debaytamiz.Mashinaning bir takt davomidagi ishida kallak faqat bitta katakchaga surilishi (ongga, chapga) yoki joyida turishi mumkin.

            Lentada saqlanayotgan har bir informaciya tashqi alfavitning  dan farqli chekli simvollar majmuasi bilan tasvirlanadi.Mashina ish boshlashidan oldin lentaga boshlangich ahborot (boshlangich malumot) beriladi.Bu holda boshqaruvchi kallak, qoidaga asosan,  boshlangich holatni korsatuvchi ohirgi chap belgi qarshisida turadi (3-shakl).

 

 

 

3-shakl.

 

            Mashinaning ishi taktlar yig’indisidan iborat bo’lib, ish davomida boshlang’ich informaciya oraliq informaciyaga aylanadi.

            Boshlang’ich informaciya sifatida lentaga tashqi alfavitning katakchalarga ihtiyoriy ravishda qo’yilgan chekli simvollar sistemasini (alfavitdagi ihtiyoriy so’zni) berish mumkin.

            Berilgan boshlang’ich informaciyaga bog’liq bo’lgan ikki hil hol bo’lishi mumkin:

            1.Mashina chekli son taktdan keyin to’htaydi ( to’htash holatiga o’tadi). Bu vaqtda lentada  informaciya tasvirlangan bo’ladi. Bu holda mashina  boshlang’ich informaciyaga nisbatan tatbish etiladigan (qo’llanib bo’ladigan) va uni qayta ishlab  natijaviy informaciyaga keltirgan deb aytiladi.

            2.Mashina hech vaqt to’htamaydi, ya’ni  to’htash holatiga o’tmaydi. Bu holda mashina  boshlang’ich informaciyaga nisbatan tatbiq etilmaydi deb aytiladi.

            Mashina ishining har bir taktida quyidagi funkcional shema bo’yicha harakat qiladi:

.

            Bu erda ,  - tashqi alfavitning harflari; ,  - mashinaning holatlari;  - surilish simvollari.

            Boshqaruvchi kallak lentada shanday harfni ko’rib turganligi (bizning yozuvda ) va mashina qaysi holatda (bizning yozuvda ) turganligiga qarab, bu taktda uch elementdan iborat komanda ishlab chiqiladi:

            1)ko’rib turilgan harf almashtirilgan tashqi alfavit harfi ;

            2)kelgusi takt uchun tashqi hotira adresi ;

            3)mashinaning kelgusi holati .

            Hamma komandalar majmuasi Tyuring mashinasining dasturini tashkil qiladi.Dastur ikki o’lchovli jadval shaklida bo’lib, uni Tyuring funkcional shemasi deb ataydilar.

            Bunday shema 1-jadvalda misol sifatida berilgan.

 

1-jadval

 

 

            Aniqki, Tyuring mashinasining ishi butunlayiga uning dasturi bilan aniqlanadi.Agar ikkita Tyuring mashinalarining funkcional shemalari bir hil bolsa, u holda ular bir-biridan farq qilmaydi.Har hil Tyuring mashinalari har hil dasturga ega boladi.

            Bundan keyin Tyuring mashinasining har hil konfiguraciyalarini (tarhiy korinishlarini) soddaroq ifodalash uchun lenta va uning katakchalarini ifodalamasdan ahborotni faqat  soz shaklida yozamiz.

            Boshqaruvchi kallak va mashina holatini ifodalash sifatida mashina holatini yozamiz.

            1-jadvalda berilgan funkcional shemaga mos keluvchi Tyuring mashinasining ishini ko’rib o’taylik.

            1-misol. Dastlabki konfiguraciya quyidagicha berilgan bo’lsin:

.

            Boshqaruvchi kallak  harfini ko’rib turganligi va mashina  holatda bo’lganligi uchun mashina  komandani ishlab chiqadi va natijada ikkinchi konfiguraciyani hosil qilamiz

 

.

            Ravshanki, navbatdagi konfiguraciyalar quyidagi ko’rinishlarda bo’ladi:

 - uchinchi konfiguraciya,

 

 - to’rtinchi konfiguraciya,

 

 - beshinchi konfiguraciya.

            Beshinchi konfiguraciyada mashina  holatda (to’htash holatida) turganligi uchun  so’z hisoblashning natijasi bo’ladi.

            2-misol.Boshlang’ich konfiguraciya quyidagicha bo’lsin:

           

1-jadvaldagi funkcional shemadan foydalanib, quyidagi konfiguraciyalarga kelamiz:

 - ikkinchi konfiguraciya,

 

 - uchinchi konfiguraciya,

 

 - to’rtinchi konfiguraciya,

 

 - beshinchi konfiguraciya,

 

 - oltinchi konfiguraciya,

 

            Ikkinchi va oltinchi konfiguraciyalardan ko’rinib turibdiki, mashinaning ish jarayoni takrorlandi va, demak, natija bo’lmaydi.

 

2.Tyuring mashinasida algoritmni realizaciya qilish

            Bir qator misollarda ayrim oddiy arifmetik algoritmlarni realizaciya etadigan Tyuring mashinasini qanday yasashni ko’rsatamiz.

            1-misol.Tyuring mashinasida o’nlik sistemada  dan  ga o’tish algoritmini realizaciya etish.

            Echim.O’nlik sistemada  sonining yozuvi berilgan bo’lsin va sonini o’nlik sistemasidagi yozuvini ko’rsatish talab etilsin, ya’ni  funkciyani hisoblash talab etilsin.

            Ravshanki, mashinaning tashqi alfaviti 0,1,2,3,4,5,6,7,8,9 raqamlardan va bo’sh katakcha  dan iborat bo’lishi kerak. Lentaga o’nlik sistemada  sonini yozamiz.Bu erda qatorasiga bo’sh joysiz har bir katakchaga bitta raqam yoziladi.

            Qo’yilgan masalani echish uchun ishning birinchi taktida mashina  sonining ohirgi raqamini o’chirib, uni bir birlik katta songa almashtirib va agar ohirgi raqam 9 sonidan kichik bo’lsa, u holda to’htash holatiga o’tishi kerak.

            Agar  sonining ohirgi raqami 9 bo’lsa, u vaqtda mashina 9 raqamini o’chirib, bo’sh qolgan katakchaga 0 raqamini yozib, o’sha holatda qolgan holda chapga yuqoriroq razryadli qo’shnisiga surilishi kerak. Bu erda ishning ikkinchi taktida mashina yuqoriroq razryadli raqamga 1 sonini qo’shishi kerak.

            Tabiiyki, chapga surilish paytida yuqoriroq razryadli raqam bo’lmasa, u holda mashinaning boshqaruvchi kallagi bo’sh katakchaga chiqishi mumkin.Bu holatda bo’sh katakchaga mashina 1 raqamini yozadi.

            Aytilganlardan shu narsa kelib chiqadiki,  funkciyani hisoblash algoritmini realizaciya etish paytida mashina bor yo’g’i va holatlarda bo’ladi.

            SHunday qilib, o’nlik sistemada  dan  ga o’tish algoritmini realizaciya etadigan Tyuring mashinasi quyidagi ko’rinishda bo’ladi:

1-jadval

 

 

            1 va 2 – shakllarda  va  sonlar uchun mos ravishda konfiguraciyalari keltirilgan.

 

 

 

            1-shakl                    2-shakl

 

2-misol.Natural sonlarni qo’shish algoritmi.

Mashina lentasiga tayoqchalar majmuasi shaklida ikkita son berilgan bo’lsin. Masalan, 2 va 3 sonlar. Bu sonlarni qo’shish talab etilsin.

Qo’shish simvolini (belgisini) yulduzcha bilan belgilaymiz.SHunday qilib, mashina lentasiga quyidagi so’z yoziladi.

                  (1)

(1) so’zga tatbiq etish natijasida 2 va 3 sonlarining yig’indisini, ya’ni

                       (2)

so’zini beradigan funkcional shemani topish talab etiladi.

Qo’yilgan masalani yechish jarayonini izohlab beraylik.Dastlabki momentda mashinaning kallagi eng chapdagi tayoqchani ko’rib tursin. Uni to birinchi bo’sh katakchaga erishguncha hamma tayoqcha va yulduzchalarni cheklab o’ngga so’rish kerak. Bu bo’sh katakchaga birinchi tayoqcha yoziladi. Undan so’ng ikkinchi tayoqchaga qaytib kelish kerak va uni uchirib to’htash kerak. Mashina ishining hamma taktini quyidagi mos konfiguraciyalarda ifodalab beramiz:

 

1)      2)     3)

 

4)      5)       6)

 

7)     8)      9)

 

10)  11)    12)

 

13)  14)    15)

 

16)   17)     18)

 

19)    20)     21)

 

22)  23)    24)

 

 

25)   26)   27)

 

28)  29)   30)

 

Bu jarayon masalaning echish algoritmini quyidagi ikki o’lchovli jadval shaklida yozishga imkoniyat yaratadi:

 

 

*

 

 

SHunday qilib, bu erda - tashqi alfavit va - mashina holatlaridan foydalanildi.

3-misol.Evklid algoritmi.Evklid algoritmi berilgan ikkita natural son uchun ularning eng katta umumiy bo’luvchisini topish ko’rinishidagi masalalarni echadi.

Ma’lumki, Evklid algoritmi quyidagi kamayuvchi sonlar ketma-ketligini tuzishga keltiriladi: birinchisi berilgan ikki sonning eng kattasi bo’ladi, ikkinchisi – kichigi, uchinchisi – birinchi sonni ikinchisiga bo’lishdan hosil bo’lgan qoldiq, to’rtinchisi – ikkinchi sonni uchinchisiga bo’lishdan hosil bo’lgan qoldiq va hokazo, to qoldiqsiz bo’linguncha davom ettiriladi. Ohirgi bo’lishdagi bo’luvchi masala echimining natijasi bo’ladi.

  Bizdan Evklid algoritmini Tyuring mashinasining dasturi sifatida ifodalash talab etiladi. Bu dastur sonlarni taqqoslash va ayirish cikllarining navbatma-navbat (navbatlashib) kelishini ta’minlashi kerak.

To’rtta  harflardan iborat tashqi alfavitdan foydalanamiz. Bu erda  - bo’sh katakcha simvoli, - tayoqcha, va - tayoqcha rolini vaqtinchalik o’ynaydigan harflar.

Masalaning echilishini boshlang’ich konfiguraciya-si

bo’lgan hol uchun 4 va 6 sonlarning eng katta umumiy bo’luvchisini topish misolida ko’rib o’taylik.

            Birinchi navbatda mashina lentada yozilgan sonlarni taqqoslashi kerak. SHu maqsad uchun mashina birinchi sonni ifodalovchi tayoqchalarni  harfi bilan va ikkinchi sonni ifodalovchi sonlarni  harfi bilan almashtirishi kerak. Mashina ishining birinchi to’rt taktiga mos keluvchi uning konfiguraciyasi quyidagicha bo’ladi:

   1)       2)

   3)       4)

 

SHu bilan dastlabki sonlarni taqqoslash cikli tamom bo’lib, ayirish cikli boshlanadi. Bu cikl davomida kichik son lentadan butunlayiga o’chiriladi,  harfi bilan belgilangan ikkinchi son tayoqchalar bilan almashinadi va, demak, katta 6 soni ikkita 4 va 2 sonlariga bo’linadi.

  Bu operaciyalarga bir qator konfiguraciyalar to’g’ri keladi. SHulardan ayrimlarini yozamiz:

                    ..........................................

 

 

                     ..........................................

 

 

            SHu bilan birinchi ayirish cikli tamom bo’ladi.

            Эndi mashina 4 va 2 sonlarini taqqoslashi kerak.

         Bu sonlarni taqqoslash cikli quyidagi konfiguraciyaga

va ayirish cikli

konfiguraciyaga olib keladi.

            Uchinchi taqqoslash cikli 2 va 2 sonlarini

konfigurathiyaga va ayirish cikli

ohirgi konfigurathiyaga olib keladi.

            SHunday qilib, Tyuring funkthional sxemasi ushbu

2-jadval

 

2-jadval ko’rinishida bo’ladi.

 

ЛАБОРАТОРИЯ ИШИ  № 9. «Марков алгорифми учун дастур ёзиш. Markov algoritmi uchun dasturni ishlash.

»

Ishdan maqsad: Markov mashinasi uchun talabalarning mantiqiy fikrlash doirasini kengaytirish hamda matematik bilmlarini  oshirish.

Masalaning qo’yilishi: Markov algoritmining imitator dasturini o’rganish. Markov algoritmida malakalarini oshirish.

Nazariy qism. Ўрнига қўйиш sistema alagoritmi usuli yordamida o’rtacha bilim beradi. Xar bir podstanovka so’z-na’munasi va so’z almashinuvidan iborat, “->” shu belgilar zanjiri yordamida ajralib turadi. Har qadamda podstanovka almashinuvi  tartib bilan tepadan-pastga qadar ko’rib chiqiladi va ulardan birinchi to’g’ri kelgani amalga oshiriladi (выполняется):  ishlash qatorining birinchi topilgan  na’muna- so’zi, so’z – almashinuviga almashtirilidi.

«->» bu belgilardan o’ngda yoki chapda joylashgan bo’lishi mumkin (yoki aks holda bo’lmasligi mumkin) Appostrof yoki qo’shtirnoq qo’yilgan.

Keyingi podstanovkalar “a” harfini  “bv” harfiga teng kuchga ega ekanligini aniqlaydi:

а -> bv

'а' -> 'bv '

"а" -> "bv"

'а' -> "bv"

 

Chap qismida (soz- nammuna) bolmasligi mumkinbu holda soz-almashinuvi ishchi sozining boshiga qoyiladi. Odatda bu  almashinuv  podstanovka ro’yhatining oxirida turishi kerak aks holda xatolik sodir bo’ladi. Podstanovkaning o’ng qismi ham bo’lmasligi mumkin(na’muna o’chirilganda)

Algoritm  dasturi tugatilganidan so’ng «.» belgisi  so’z – almashinuvi terminal podstanovkasini bildiradi.

'а' -> 'b '. «а» ni «b»ga  almashtirilib dastur to’xtatiladi.

* -> . * belisini o’chirib tashlanib dastur to’xtatiladi.

Dastur ustki qismida tahrirlovchi maydon bo’ladi, har qanday masala berilishini tahrirlovchi ichiga joylashimiz mumkin.

Podstanovka tizimi  Markov algorifmini dasturning quyi qismida jadval ko’rinishida yig’iladi.

Dastur (F9) tugmasi yordamida ishga tushiriladi yoki (F8) yordamida qadamma-qadam amalga oshiriladi. Xozirda bajariladigan buyruq yashil fon oynasida ko’rinadi. Ish tezligi Скорость.” Menyusidan boshqariladi.

Masalalarni fayllarda saqlash mumkin va fayllardan yuklash mumkin.  Masalaning berilishi podstanovka tizimida saqlanib qolinadi.

Algoritm ishining protokoli Ctrl+P tugmalarini bosish natijasida barcha almashinuvlar ko’rsatilishi mumkin.

 

 

Matn berilishi:

 

 

 

Hisobot electron korinishda tayyorlanadi. Agar algoritm dasturini yozish uchun  jadval qatori yetmasa yangi qator qoshish zarur. Agar masala bir nevchta bo’lsa, u holda butun tizim hisobotini bir necha marta qaytarish mumkin.

 

Подпись: iTopshiriqni bajarish hisoboti

 

Boshlang’ich ishchi qatorning “screenshot”ini qo’ying

 

 

 


Dasturdagi chiqqan natija yordamida jadvalni to’ldiring, har bir qatorga izoh bering.

Namuna

 

Almashinuv

Izoh

1

 

->

 

 

2

 

->

 

 

3

 

->

 

 

4

 

->

 

 

5

 

->

 

 

6

 

->

 

 

7

 

->

 

 

8

 

->

 

 

9

 

->

 

 

10

 

->

 

 

11

 

->

 

 

12

 

->

 

 

13

 

->

 

 

14

 

->

 

 

15

 

->

 

 

16

 

->

 

 

17

 

->

 

 

18

 

->

 

 

19

 

->

 

 

20

 

->

 

 

21

 

->

 

 

22

 

->

 

 

 

 

Nazorat  savollar:

1.     Markov algorifmi nima?

2.     Markov algorifminig podstanovka tizimi.

3.     Markov algorifmi toldirish qonuni.

4.     Dastur nihoyasida variantlarni to’ldiring.

 

Адабиётлар:

1.     Теория алгоритмов: учебник / Д.Ш. Матрос, Г.Б. Поднебесова. – М. : БИНОМ.Лаборатория знаний, 2008. – 202 с. : ил. – (Педагогическое образование).

2.     Босс В. Лекции по математике. Т. 10: Перебор и эффективные алгоритмы: Учебное пособие. — М.: Издательство ЛКИ, 2008. — 216 с.

3.     Игошин В.И. Математическая логика и теория алгоритмов : учеб. пособие для студ. высш. учеб. заведений / В. И. Игошин. — 2-е изд., стер. — М. : Издательский центр «Академия», 2008. — 448

4.     Игошин В.И. Задачи и упражнения по математической логике и теории алгоритмов / В. И. Игошин. — 3-е изд., стер. — М. : Издательский центр «Академия», 2007. — 304 с.

Қўшимча адабиётлар:

1.     Игошин В.И. Задачи и упражнения по математической логике и теории алгоритмов: учеб. пособие для студ. высш. учеб. заведений. – М.: Академия, 2007. - 304 с.

2.     Игошин В.И. Математическая логика и теория алгоритмов. – М.: Академия, 2008. - 448 с.

3.     Колмогоров А.Н., Драгалин А.Г. Математическая логика. – М.: КомКнига, 2006. - 240 с.

4.     Колмогоров А.Н., Драгалин А.Г. Математическая логика. – М.: КомКнига, 2006. - 240 с.

5.     Лихтарников Л.М., Сукачева Т.Г. Математическая логика. Курс лекций. Задачник-практикум и решения. – СПб.: Лань, 1999. - 288 с.

6.     Тимофеева И.Л. Математическая логика в вопросах и задачах. Учебное пособие для студентов математических факультетов педвузов. – М.: Прометей, 2002. - 112 с.

7.     Тимофеева И.Л. Математическая логика. Курс лекций. Часть 1. – М.: Прометей, 2003. - 144 с.

8.     Тимофеева И.Л. Математическая логика. Курс лекций. Часть 2. – М.: Прометей, 2003. - 164 с.

 

интернет ресурсЛАР

1.     http://mmf.nsu.ru/sites/default/files/AlgorithmsKogabaev.pdf

2.     http://230101.ru/teor_algor/lect_t_a.htm

3.     http://ap-economics.narod.ru/info/algoritms.pdf

4.     http://any-book.org/download/68890.html

5.     http://discopal.ispras.ru/ru.book-advanced-algorithms.htm

6.     http://www.coolreferat.com/%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%BE%D0%B2

7.     http://rutracker.org/forum/viewtopic.php?t=3025567

8.     http://logic.pdmi.ras.ru/
http://infologos.narod.ru/

9.      www.4tivo.com/education/www.matburo.ru/literat.php;www.plib.ruhttp://nehudlit.ruwww.gaudeamus.omskcity.comwww.alleng.ruwww.symplex.ruwww.math.ru.

10.                       http://agpi.itech.ru/.