§ Taqqoslashlar soni
S= N(N-1)/2=(N2-N)/2
§ Massiv tartiblanganda o„rinlashtirishlar soni
Mmin=3(N-1)
§ Massiv teskari tartiblanganda o„rinlashtirishlar soni
Mmin=MminN/2=3N(N-1)/2
Ushbu usul bo„yicha saralash bajarilsa, eng yomon holda taqqoslashlar va o„rinlashtirishlar soni tartibi n2 bo„ladi.
Pufaksimon saralash algoritmi
Ushbu usulning g„oyasi quyidagicha: n - 1 marta massivda quyidan yuqoriga qarab yurib kalitlar jufti-jufti bilan taqqoslanadi. Agar pastki kalit qiymati yuqoridagi jufti kalitidan kichik bo„lsa, u holda ularning o„rni almashtiriladi (1- rasm).
Misol : massiv - 4, 3, 7, 2, 1, 6.
1-rasm. Pufaksimon saralash usulida massivelementlarining o„rnini almashtirish
Pufaksimon usulni massiv elementlarida pastdan yuqoriga va yuqoridan pastga o„tishni bir vaqtda amalga oshirish natijasida yaxshilash mumkin.
Taqqoslashlar soni:
M=(n/2)(n/2)=n2/4
Almashtirishlar soni:
Cmax=3n2/4
2-rasm. Massivni pufaksimon saralashga misol
2-rasmda berilgan misolda 5 ta elementdan iborat massiv berilgan. Demak, massivda pastdan yuqoriga (yuqoridan pastga) o„tishlar soni 5-1=4 marta bo„ladi. Misoldan ko„rinib turibdiki, algoritm ichki siklda 3-qadamdan boshlab massivni “bekor” qayta ishlaydi, 4-qadamni bajarmasa ham bo„ladi.
Berilgan usullarning afzalligi:
1) Eng sodda algoritm;
2) Amalga oshirish sodda;
3) Qo„shimcha o„zgaruvchilar shart emas.
Kamchiliklari:
1) Katta massivlarni uzoq qayta ishlaydi;
2) Har qanday holatda ham o„tishlar soni kamaymaydi.
“Pufaksimon” usulni yaxshilash
1) Agar massivda o„tishlar nafaqat yuqoridan pastga, balki bir vaqtning o„zida pastdan yuqoriga ham bo„lsa, u holda “yengil” elementlar “yuqoriga suzib” chiqadi va “og„ir” elementlar esa “cho„kadi”.
2) Massivda “bekor” o„tishni yo„q qilish uchun, tashqi siklda massiv saralanganligini tekshiruvchi belgi qo„yish lozim.
for (int i=0;ifor (int j=n-1;j>i;j--)
if (a[j] < a[j - 1]){
int x= a[j - 1];
a[j - 1] = a[j];
a[j] = x; }
O’rinlashtirish va taqqoslashlar soni: (n* log( n )).
Quiksort – tez saralash algoritmi
Bu algoritm “bo„lib ol va egalik qil” tamoyilining yaqqol misolidir. Bu algotirm rekursiv bo„lib, o„rtacha N*log2N ta solishtirish natijasida saralaydi. Algoritm berilgan massivni saralash uchun uni 2 taga bo„lib oladi. Bo„lib olish uchun ixtiyoriy elementni tanlab undan 2 ta qismga ajratiladi. Lekin o„rtadagi elementni tanlab, massivning teng yarmidan 2 ga ajratgan ma‟qul. Tanlangan kalit elementga nisbatan chapdagi va o„ngdagi har bir element solishtiriladi. Kalit elementdan kichiklar chapga, kattalar o„ng tomonga o„tkaziladi (6.3-rasm). Endi massivning har ikkala tomonida xuddi yuqoridagi amallar takrorlanadi. Ya‟ni bu oraliqlarning o„rtasidagi elementlar kalit sifatida olinadi va h.k.
Misol uchun rasmdagi massivni saralash algoritmini ko„rib chiqamiz.
1. Oraliq sifatida 0 dan n-1 gacha bo„lgan massivning barcha elementlarini olamiz.
2. Oraliq o„rtasidagi kalit elementni tanlaymiz, ya‟ni
key=(+)/2, i=,
j=.
3-rasm. Quicksort algoritmida o„rinlashtirish
3. Chapdagi i-elementni key bilan solishtiramiz. Agar key kichik bo„lsa, keyingi qadamga o„tamiz. Aks holda i++ va shu qadamni takrorlaymiz.
4. O„ngdagi j-element bilan key solishtiriladi. Agar key katta bo„lsa, keyingi qadamga o„tamiz, aks holda j-- va shu qadamni takrorlaymiz.
5. i- va j-elementlarning o„rni almashtiriladi. Agar i<=j bo„lsa, 3-qadamga o„tiladi.
Birinchi o„tishdan keyin tanlangan element o„zining joyiga kelib joylashadi.
6. Endi shu ko„rilayotgan oraliqda key kalitning chap tomonida elementlar mavjud bo„lsa, ular ustida yuqoridagi amallarni bajarish lozim, ya‟ni ko„riladigan oraliq 0 dan key-1 gacha deb belgilanadi va 2-qadamga o„tiladi. Aks holda keyingi qadamga o„tiladi.
7. Endi shu ko„rilayotgan oraliqda key kalitning o„ng tomonida elementlar mavjud bo„lsa, ular ustida yuqoridagi amallarni bajarish lozim, ya‟ni ko„riladigan oraliq key+1 dan n-1 gacha deb belgilanadi va 2-qadamga o„tiladi. Aks holda algoritm tugaydi.
Shu algoritmga misol ko„rib chiqamiz.
Misol: Talabalar ism-sharifi va tartib raqamidan iborat jadvalni quicksort algoritmi bilan saralang va nechta o„rinlashtirish amalga oshirilganini aniqlang.
Dastur kodi
#include
#include
using namespace std;
struct table{
int t;
string FIO;};
int q=0;
void qs(table *a,int first,int last){
int i = first, j = last;table x =a[(first + last) / 2];
do {
while (a[i].FIO < x.FIO) i++;
while (a[j].FIO > x.FIO) j--;
if(i <= j) {
if (i < j){ swap(a[i], a[j]);q++;}
i++;
j--;
}
} while (i <= j);
if (i < last)
qs(a,i,last);
if (first < j)
qs(a,first,j);
}
int main(int args, char *argv[])
{ int n;cout<<"n=";cin>>n;
table talaba[n];
for(int i=0;italaba[i].t=i+1;
cin>>talaba[i].FIO;
}
qs(talaba,0,n-1);
for(int i=0;icout<cout<<"quicksort algoritmi "<}
Dastur natijasi:
talabalar sonini kiriting=5
5 ta talabalar FIO sini kiriting
Farhod
Asror
Sobir
Bobur
Vali
| 2 | Asror |
| 4 | Bobur |
| 1 | Farhod |
| 3 | Sobir |
| 5 | Vali |
Bu algoritm jadvalni 3 ta o‘rinlashtirishda saraladi
LABORATORIYA ISHI - 21
Mavzu: Bog’langan graflarda marshrutlar, ularni narxi(masofasi) bo’yicha baholash.
Ishdan maqsad. Bog’langan graflarda marshrutlar, ularni narxi(masofasi) bo’yicha baholashni o’rganish.
Qo’yilgan masala. Bog’langan graflarda marshrutlar, ularni narxi(masofasi) bo’yicha baholash.
Ish tartibi:
Tajriba ishi nazariy ma’lumotlarini o‘rganish;
Berilgan topshiriqning algoritmini ishlab chiqish;
C++ dasturlash muhitida dasturni yaratish;
Natijalarni tekshirish;
Hisobotni tayyorlash va topshirish.
Nazariy qism
Juda ko`p masalalarni yechish algoritmlarida algoritmning shunday bir qismi uchraydiki, bunda ma`lum guruh amallari ko`p marta takrorlanadi. Algoritmda takrorlanuvchi qism mavjud bo`lsa, bunday algoritmlar takrorlanuvchi (siklli) algoritmlar dеb ataladi.
yig`indini hisoblash algoritmining ikki xil ko`rinishi bеrilgan. Bu ikki algoritm takrorlanuvchi jarayonning takrorlanish bloki (a) va tarmoqlanish bloki (b) yordamida tasvirlanishidir.
a) b)
1- rasm.
Ifodalarni hisoblash algoritmlari.
Chiziqli jarayonlarni algoritmlarini tuzish.
Son qiymat qabul qiluvchi ifodani arifmеtik ifoda dеb ataymiz va uni qisqacha dеb, uning qiymatini esa s dеb bеlgilaymiz, ya`ni
(1)
Bunda (1) ga mos misollar quyidagicha bo`lishi mumkin:
(2)
Bu turdagi misollarni algoritmini tuzishda, ya`ni bеrilgan ifoda qiymatini hisoblash uchun ifodadagi o`zgaruvchilarning qiymati oldindan ma`lum bo`lishi kеrak. (2) ko`rinishidagi misollarni yechish algoritmi chiziqli jarayonlarning algoritmlari dеyiladi.
Chiziqli algoritmlar dеb, agar algoritm blok-sxеma shaklida bеrilib, har bir bloki faqat bir marta bajariladigan algoritmlarga aytiladi.
Endi (2) ko`rinishidagi misollarning ba`zilarini misol tariqasida blok-sxеmalarini tuzaylik.
2-rasmdagi blok-sxеma yuqorida kеltirilgan misolning algoritmidir. Bu blok-sxеmada hisoblash jarayonining EHMda qanday kеchishini y axshiroq tasavvur qilish uchun 3–rasmdagi blok sxеmani ishlash jarayonini ko`rib chiqamiz.3-rasmdagi algoritm bo`yicha tuzilgan dastur mashina xotirasiga kiritilgan dеb faraz qilaylik. EHM translyatori dasturni mashina tiliga o`tkazish paytida algoritmda uchragan har bir o`zgaruvchiga xotirasidan joy ajratadi va ajratilgan joy makonini shu o`zgaruvchilarning nomiga moslaydi.
LABORATORIYA ISHI - 22
Mavzu: Xasis algoritmlar. Eng qisqa marshrutni aniqlash algoritmi. Uni variantlar soni bo’yicha hajmini baholash.
Ishdan maqsad. Xasis algoritmlar. Eng qisqa marshrutni aniqlash algoritmi. Uni variantlar soni bo’yicha hajmini baholashni o’rganish.
Qo’yilgan masala. Xasis algoritmlar. Eng qisqa marshrutni aniqlash algoritmi. Uni variantlar soni bo’yicha hajmini baholash.
Ish tartibi:
Tajriba ishi nazariy ma’lumotlarini o‘rganish;
Berilgan topshiriqning algoritmini ishlab chiqish;
C++ dasturlash muhitida dasturni yaratish;
Natijalarni tekshirish;
Hisobotni tayyorlash va topshirish.
Nazariy qism
Komponentlar palitrasi bizga kerakli ob`ekt(komponent)ni tanlab undan foydalanish imkoniyatini yaratadi. Komponentdan foydalanish uchun dastlab sichqonchaning chap tugmasi kerakli komponent, so`ngra formaning sirtida bosiladi. Formadagi komponentning turgan joyini o`zgartirish uchun sichqonchadan foydalanish mumkin.
Komponentlar palitrasi guruhlar bo`yicha sahifalarga bo`lingan bo`lib, sahifalar soni 14 tadir. Komponentlar palitrasida Standard, Additional, Dialogs kabi sahifalar mavjud. Istalgan sahifa sirtida sichqonchaning chap tugmasi bosilsa, tanlangan sahifadagi komponentlar ro`yhati chqarib beriladi. Quyidagi rasmda komponentlar palitrasining ko`rinishi keltirilgan:
Tanlangan komponent “Objekt Inspector” oynasi yordamida tahrirlanadi.
Xususiyat
Delphida barcha ob`ektning o`ziga hos xususiyati (Properties) bo`lib, bu xususiyatlar dastuchi tomonidan o`zgartirilishi mumkin. Barcha ob`ektlarning xususiyatlari bir-biriga juda o`xshash bolib, biz misol sifatida “Label” ob`ektining xususiyatlari bilan tanishamiz.
Ob`ekt xususiyatini o`zgartirish uchun “Object Inspector” oynasining “Properties” bo`limidan foydalanamiz. Dastlab Label komponentini formaga joylaymiz. Dasturning forma ko`rinishi quyidagicha bo`ladi:
Label komponentining xususiyatlari quydagilardir:
Align – Ob`ektning joylashish o`rnini o`zgartiradi. Unda alButton, alClient, alLeft, alNone, alRight, alTop ko`rsatkichlari mavjud bo`lib, ular quyidagi vazifalarni bagaradi:
Ko`rsatkich
|
Vazifasi
|
alNone
|
Formaning ko`rsatilgan qismida
|
alTop
|
Formaning yuqori qismida
|
alBottom
|
Formaning quyi qismida
|
alLeft
|
Formaning chap qismida
|
alRight
|
Formaning o`ng qismida
|
alClient
|
Formaning barcha qismida
|
Alignment – O`bekt tarkibidagi matn o`rnini gorizontal yo`nalish bo`yicha o`zgartirish. Undagi ko`rsatrichlarning vazifasi quyidagicha:
Ko`rsatkich
|
Vazifasi
|
taLeftJsirtify
|
Matn ob`ektning chap qismida
|
taRightJsirtify
|
Matn ob`ektning o`ng qismida
|
taCenter
|
Matn ob`ektning o`rta qismida
|
Anchors – forma hajmi o`zgarishiga qarab ob`ektning turgan joyini o`zgartirish (ko`rsatkich True bo`lgandagina aktivlashadi). Undagi ko`rsatrichlarning vazifasi quyidagicha:
Ko`rsatkich
|
Vazifasi
|
taTop
|
Ob`ektning turgan joyi formani yuqori qismi bo`yicha o`zgarmaydi
|
taLeft
|
Ob`ektning turgan joyi formani chap qismi bo`yicha o`zgarmaydi
|
taRight
|
Ob`ektning turgan joyi formani o`ng qismi bo`yicha o`zgarmaydi
|
taButton
|
Ob`ektning turgan joyi formani ostki qismi bo`yicha o`zgarmaydi
|
AutoSize – Ob`ekt hajmini o`zgaruvchan yoki o`zgarmas holiga keltirish. Ko`rsatkich True bo`lganida ob`ekt hajmi o`zgaruvchan, aks holda o`zgamas bo`ladi.
Amliy qism
Yuqoridagi amallar bajarilgach, dastur ishga yuklanidan so`ng formaning istalgan qismida sichqonchaning chap tugmasi bosilsa quyidagi oyna hosil bo`ladi:
Yuqoridagi misoldan ko`rinib turibdiki, qandaydir xodisa ro`y berganida javob olish mumkin ekan. Ko`pchilik dasturchilar bu vaqtda qanday jarayon bo`layotganligini tushunmay dastur tuzadilar. Shuni aytish mumkinki, har-bir xodisa ro`y berganida operatsion sistema bu xodisani aniqlaydi va dasturga xodisaning turi xaqidagi xabarni uzatadi. Misol qilib forma sirtida sichqonchaning chap tugmasi bosilganida ro`y beradigan xodisani ko`rishmuz mumkin. Buning uchu xodisa sahifasidan OnMouseDown xodisasi tanlanadi va dasturga quyidagi o`zgartirish kiritiladi:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Canvas.TextOut(X, Y, 'X='+IntToStr(X)+' Y='+IntToStr(Y));
end;
Dasturni ishga yuklab forma sirtida sichqonchaning chap tugmasi bosilsa quyidagiga o`xshash natijani ko`rish mumkin:
Ko`rinib turibdiki, xodisalar bilan ishlash unchalik murakkab emas ekan. Yana bir misol sifatida quyidagi dasturni ko`rishimiz mumkin (OnKeyDown (tugmacha bosilganida) xodisasi):
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
MessageDlg(Chr(Key), mtInformation, [mbOk], 0);
end;
LABORATORIYA ISHI - 23
Mavzu: Kruskal algoritmi. Prima algoritmi. Xoffman algoritmi.
Ishdan maqsad. Kruskal algoritmi. Prima algoritmi. Xoffman algoritmini o’rganish.
Qo’yilgan masala. Kruskal algoritmi. Prima algoritmi. Xoffman algoritmi.
Ish tartibi:
Tajriba ishi nazariy ma’lumotlarini o‘rganish;
Berilgan topshiriqning algoritmini ishlab chiqish;
C++ dasturlash muhitida dasturni yaratish;
Natijalarni tekshirish;
Hisobotni tayyorlash va topshirish.
Nazariy qism
Kruskal algoritmi. Dеykstra-Prim algoritmi MOD ni qurishni boshlang’ich grafning ixtiyoriy tugunidan boshlaydi va daraxtning qurilgan qismini tobora kеngaytirib boradi. Ushbu algoritmdan farqli ravishda Kruskal algoritmi asosiy e'tiborni graf tomonlariga qaratadi. Bunda ishni bo’sh grafdan boshlab, unga tomonlarini ular vaznining o’sib borish tartibida kеtma-kеt qo’shib boradi. Bu jarayon grafga kiruvchi barcha tugunlar o’zaro bog’langunga qadar davom etadi. Agar tomonlarni qo’shib olish jarayoni barcha tugunlar o’zaro bog’langunga qadar tugatilsa, boshlan?ich grafning to’liq bog’lanmagan ekanligi kеlib chiqadi. Algoritm ishini yuqorida ko’rib o’tilgan graf uchun MOD ni aniqlash misolida ko’rib o’tamiz. Ishni eng kichik vaznli DF tomondan boshlaymiz. Boshlang’ich garf v rasmda ifodalangan. Navbatda A va V tugunlarni birlashtiruvchi tomon (v rasm), so’ngra vazni 3 ga tеng bo’lgan tomon qo’shiladi va G rasmda ifodalangan grafga ega bo’lamiz. Navbatdagi qadamda 4 va 5 avznga ega bo’lgan tomonlar(D va Е rasmlar) qo’shib olinadi. Natijada qo’shilmagan faqat G tugun qoladi. Kеyingi qadamda vazni 6 ga tеng tomonlarni qayta ishlash kеrak bo’ladi. Vazni 6 ga tеng bo’lgan to’rtta tomondan ikkitasini qoldiramiz. Natijada qaysi ikki tomonning qoldirilishiga bo?liq holda J yoki Z rasmlarda ifodalangan MOD lardan biriga ega bo’lamiz.
a) b)
v) g)
B irinchi hadni qo`shishda har doim oldingi hadni nol dеb olish tavsiya etiladi, chunki yig`indiga nol qo`shgan bilan yig`indi o`zgarmaydi. 3-blokda paramеtrga boshlang`ich qiymat bеrilayapti ( siklning paramеtri ham dеyiladi), ya`ni 1 qiymat. Umuman ning boshlang`ich qiymati 1 bo`lishi shart emas. Bеrilgan aniq misolda qaysi qiymatdan boshlansa, shu qiymatni bеrish kifoya. 4-blokda ning ayni shu va kеyingi qiymatlari hadlar sonidan oshib kеtmasligi tеkshirilyapti. Agar ning qiymatlari n dan kichik yoki bunga tеng bo`lsa, 5-blokdagi yig`indi hosil qilinadi va natija S ga yoziladi, kеyin 6-blokda ning oldingi qiymatiga 1 qo`shiladi. Bu algoritmda ning qadami ( ga qo`shiluvchi qiymat) 1 olingan, umuman qadam ixtiyoriy bo`lishi mumkin. 6-blokdan so`ng yana 4-blok ishlaydi va ning qiymatiga qarab 4-, 5-, 6- bloklar t akrorlanib boradi, ning n dan katta bo`lishi bilan 7- blok bajariladi, ya`ni S ning qiymati chop etiladi va algoritm tugaydi.
Amaliy qism
Ko`paytmalarni hisoblash algoritmlari.
Dasturlash jarayonida ko`p uchraydigan misollardan biri ko`paytmalarning algoritmlarini tuzishdir.Faraz qilaylik,
(6.6)
ko`paytma bеrilgan bo`lsin. Xuddi yig`indilarni hisoblashdagi kabi n va larni tanlash yo`li bilan turli ko`rinishdagi ko`paytmalarni hosil qilishimiz mumkin. Masalan, n ni 10 va ni dеb,
(6.7)
ko`rinishdagi va hokazo ko`paytmalarni hosil qilishimiz mumkin. Agar biz (5.6) ko`paytmaning algoritmini tuzishni bilsak, u holda algoritmda tеgishli o`zgartirishlarni bajarib boshqa ko`rinishdagi ko`paytmalarning algoritmlarini hosil qilsak bo`ladi. Buning uchun blok-sxеmada mos ravishda n va larning qiymatini almashtirish kifoya. Bu misolda ko`paytmaning boshlang`ich shartlaridan biri S ning qiymatini 1 dеb olamiz. CHunki 1 ni har qayday songa ko`paytmasi shu sonning o`ziga tеng, qolgan mulohazalar xuddi yig`indidagidеk bo`ladi.
F aktoriallarni hisoblash
Faktoriallarni hisoblashda ko`paytmani hisoblash algoritmidan foydalansa ham bo`ladi. Chunki faktoriallar ham chеkli sondagi sonlarning o`zaro ko`paytmalaridir.
Faraz qilaylik,
faktorial bеrilgan bo`lsin. Matеmatika kurslaridan bizga ma`lumki,
yoki
Uni hisoblash algoritmini blok sxеmasi quyidagicha tashkil qilamiz:
LABORATORIYA ISHI - 24
Mavzu: Kesishmaydigan to’plam ostilari va birlashmalarini qidirish algoritmi.
Ishdan maqsad. Kesishmaydigan to’plam ostilari va birlashmalarini qidirish algoritmini o’rganish.
Qo’yilgan masala. Kesishmaydigan to’plam ostilari va birlashmalarini qidirish algoritmi.
Ish tartibi:
Tajriba ishi nazariy ma’lumotlarini o‘rganish;
Berilgan topshiriqning algoritmini ishlab chiqish;
C++ dasturlash muhitida dasturni yaratish;
Natijalarni tekshirish;
Hisobotni tayyorlash va topshirish.
Nazariy qism
Esingizda bo’lsa bu masalani xasislik algoritmlari orqali yechgandik. Xasislik algoritmlarining xususiyatlaridan kelib chiqib, biz o’shanda 3000 natijasini olgandik. Chunki xasislik algoritmi har doim ham optimal yechimni bermaydi, balki, u yechimni tezkorlik bilan topishga yordam beradi. Yechim yetarlicha bo’ladi, lekin optimal bo’lmasligi mumkin. Masala uchun Xasislik algoritmida algoritm murakkabligi bahosi O(n) ga teng.
Dinamik dasturlashda esa, masalaning optimal yechimi topiladi. Bunda masala qism masalalarga ajratilib keyin umumlashtirilgani uchun yechimni olishda xasislik algoritmidan biroz ko’proq vaqt sarflanadi. Yechim esa optimal bo’ladi. Masala uchun Dinamik dasturlashda algoritm murakkabligi bahosi O(n^2) ga teng.
Amaliy qism
1-misol. Shunday uch xonali son topingki, uni 11 ga bo’lganda bo’linma uning raqamlari yig’indisiga teng bo’lsin.
Program L23;
uses Crt;
var
a, n, p, s : integer;
begin
a := 100;
writeln(' 11 ga bo’lganda bo’linma uning raqamlari yig’indisiga teng ’);
write(‘bo’lgan uch xonali son ');
repeat
n := a; s := 0;
repeat
p := n mod 10;
s := s + p*p;
n := n div 10
until n = 0;
if (a mod 11 = 0) and (s = a div 11) then write(a, '; ');
a := a + 1
until a = 1000;
end.
2- misol. n soning barcha bo’luvchilarini aniqlovchi dastur tuzilsin.
Bunday masala berilganda talabalar ko’pincha quyidagi yechish usulini taklif etishadi.
1 dan to n gacha bo’lgan barcha natural sonlarni ko’rib chiqish kerak, agar ulardan birontasi n soninig bo’luvchisi bo’lsa, uni ekranga chiqarish kerak. Masalan 36 soni uchun tekshirish maqsadida 1, 2, 3, ..., 36 sonlarini olamiz va ulardan 36 ning bo’luvchilarini tanlab olamiz. Bo’luvchilar quyidagilardir: 1, 2, 3, 4, 6, 9, 12, 18 va 36. Bunday usuldan foydalanish mumkin. Lekin, diqqat bilan 36 ning bo’luvchilariga qarab chiqsangiz, bularning barchasi 1 dan to 18 gacha, ya’ni 36 ning yarmigacha bo’lgan oraliqda joylashganligini ko’rasiz, faqatgina oxirgi bo’luvchi - sonning o’zidir.
Mantiqan o’ylaganda ham, shunga amin bo’lamizki, bo’luvchilar aynan: 1 dan n/2 gacha bo’lgan oraliqda joylashadi.
Agar sonning yarmidan ham katta bo’luvchi bor degan fikr tug’ilsa, uni 2 ga ko’paytirib berilgan sondan katta son hosil qilamiz. Shunday qilib, sonning o’zidan tashqari barcha bo’luvchilari 1 dan n/2 gacha bo’lgan oraliqda joylashishi ayon bo’ladi, demak sonning bo’luvchilarini aynan shu oraliqdan tekshirish kerak. Bu yerdan dasturni tuzish rejasi kelib chiqadi: 1 dan n/2 gacha bo’lgan sikl tashkil etish; agar nson ushbu oraliqdagi biror-bir songa bo’linsa, u holda ushbu bo’luvchi ekranga chiqarilsin; sikl davom ettirilsin; ekranga sonning o’zi chiqarilsin.
Dastur
Program L24; {Sodda algoritm. 1 - usul }
uses Crt;
var
n, d : integer;
begin
write('Butun sonni kiriting '); readln(n);
d := 1;
writeln(n, 'soning bo’luvchilari ');
repeat
if n mod d = 0 then write(d, ' ');
d := d + 1
until d > n div 2;
write(n)
end.
Lekin bu masalani yechishda ham mashinaga yordam bersa va uning ishini yengillashtirsa bo’ladi. Bu yerda yordamga yana matematika keladi. n soning bo’luvchilarini topish uchun sqrt(n) dan katta bo’lmagan bo’luvchilarni topish yetarli ekan. Qolgan barcha bo’luvchilar n ni topilgan bo’luvchilarga bo’lganda hosil bo’ladi.
Masalan, agar n=30 bo’lsa, u holda faqatgina 1, 2, 3, 5 (30 dan chiqadigan natural kvadrat ildizdan katta bo’lmagan son 5 ga teng) bo’luvchilarni topish yetarli, qolgan bo’luvchilarni esa 30 ni hosil bo’lgan sonlarga bo’lish orqali hosil qilsa bo’ladi:
30 div 1 = 30;
30 div 2 = 15;
30 div 3 = 10;
30 div 5 = 6.
Dasturni tuzishda muammo chiqib qoladi - butun sonlar to’plamida kvadrat ildizni chiqarish funksiyasi yo’q. Bu to’siqni yengib o’tish oson. Qanday qilib deysizmi? Buning uchun d ning 1 dan d*dNima uchun bunday qilish kerak?
Bu 36 soni uchun keltirilgan misolda ravshan bo’ladi. sqrt(36)= 6, dxd < 6 bo’lganicha-sikli;
d = 1, dxd = 1x1 = 1 < 36 (rost),
sikl davom etadi;
qoldiq topiladi: 36 mod 1 = 0; 1 va 36 ni 1 ga bo’lgandagi butun son ekranga chiqariladi, 36 div 1 =36;
d = 2, dxd = 2x2 = 4 < 36 (rost),
sikl davom etadi;
36 mod 2 = 0;
2 va 36 ni 2 ga bo’lgandagi butun son ekranga chiqariladi, 36 div 2 = 18;
d = 3, dxd = 3x3 = 9 < 36 (rost),
sikl davom etadi;
36 mod 3 = 0;
3 va 36 ni 3 ga bo’lgandagi butun son ekranga chiqariladi, 36 div 3 = 12;
d = 4, dxd = 4x4 = 16 < 36 (rost),
sikl davom etadi;
36 mod 4 =0;
4 va 36 div 4 = 9 ekranga chiqariladi;
d = 5, dxd = 5x5 = 25 < 36 (rost),
sikl davom etadi;
36 mod 5 <>0, ekranga hech narsa chiqarilmaydi,
sikl davom etadi;
d = 6, dxd = 6x6 = 36 < 36 (yolg’on), sikl tugatiladi.
d = 6 (dxd = n), 6x6 = 36 tekshiriladi (rost), 6 ekranga chiqariladi.
Agar sikl dxd <= n bo’lguncha davom etganda, u holda d = 6 da ekranga 6 va 36 div 6 = 6 chiqarilar edi, ya’ni ikkita olti, bu esa xato bo’lar edi
Dastur
Program L24a; {Sonning bo’luvchilari. 2 -usul }
uses Crt;
var
n, d : integer;
begin
write('Butun sonni kiriting '); readln(n);
writeln(n, ‘sonining bo’luvchilari’);
d := 1;
while d*d < n do
begin
if n mod d=0 then write(d, ' ', n div d, ' ');
d := d + 1
end;
if d*d = n then write(d); writeln
end.
Xulosa:
Men ushbu labaratoriyalarni bajarish davomida “Ajrat va hukmronlik qil” prinsipi bo’yicha ishlaydigan algoritmlarni loyihalash. Elementlar jamlanmasini biror belgi bo’yicha tartiblashtirish algoritmi. Bog’langan graflarda marshrutlar, ularni narxi(masofasi) bo’yicha baholash. Xasis algoritmlar. Eng qisqa marshrutni aniqlash algoritmi. Uni variantlar soni bo’yicha hajmini baholash. Kruskal algoritmi. Prima algoritmi. Xoffman algoritmi. Kesishmaydigan to’plam ostilari va birlashmalarini qidirish algoritmini o’rgandim.
Foydalanilgan adabiyotlar: http://fayllar.org
Asosiy adabiyotlar
1. Кленберг Дж.,Тардос Е.”Алгоритмы.Разработка и применение”.2016г.
2. Кормен Т.,Лейзерсон Ч.,Ривест Р.«Алгоритмы.Построение и анализ»,2013г.
3. Колдаев. Основы_алгоритмизации_и программирования. 2013 г.
4. Г.Уоррен «Алгоритмические трюки для программистов», 2014 г.
5. Xamedova N.A, Ibragimova Z, Tasetov T. Matеmatika. Darslik. T.: Turon-iqbol, 2007. 363b.(13-17 bet)
Qo‘shimcha adabiyotlar
Abdullayeva B.S., Sadikova A.V., Muxitdinova M.N., Toshpo‘latova M.I., Raximova F. Matematika. TDPU. (Boshlang‘ich ta’lim va sport-tarbiyaviy ish bakalavriyat ta’lim yo‘nalishi talabalari uchun darslik) Toshkent-2012, 284 bet (18-22 bet)
http://fayllar.org
Do'stlaringiz bilan baham: |