Bajardi: Abdurasulov F


Download 42.8 Kb.
bet1/2
Sana17.06.2023
Hajmi42.8 Kb.
#1523593
  1   2
Bog'liq
Abdurasulov F (13)


Toshkent Amaliy Fanlar Universiteti
3-Fakultet Axborot xavfsizligi yo’nalishi

KURS ISHI

Bajardi:Abdurasulov F.
Tekshirdi: Muqimov A.

TOSHKENT-2023



Topshiriq
Variant35
1. Rekursiv jarayonlarni tashkil etish.
2. a soni berilgan. 0 dan a gacha bo'lgan juft sonlar soni toping va konsolga chiqaring. a sonini inobatga olmaymiz
Mundarija:


Kirish…………………………………………………………….
Nazariy qism…………………………………………………….
Amaliy qism……………………………………………………..
Xulosa……………………………………………………………
Adabiyotlar……………………………………………………..


Kirish
C++ da dasturlashning asosiy bloklaridan biri funksiyalardir. Funksiyalar dasturchi ishini juda yengillashtiradi. Funksiyalar yordamida programma modullashadi, qismlarga bo'linadi. Bu esa keyinchalik dasturni rivojlantirishni osonlashtiradi. Bunda dasturchi yozgan funksiyalar C++ ning standart kutubhonasi va boshqa kutubhonalar ichidagi funksiyalar bilan birlashtiriladi. Bu esa ishni osonlashtiradi. Ko'p holda dasturda takroran bajariladigan amalni funksiya sifatida yozish va kerakli joyda ushbu funksiyani chaqirish mumkin.


Nazariy qism
Funksiya e’lonlarda kirish parametrlarining faqat tipi yozish kifoya, huddi square() funksiyasidek. Yoki kiruvchi parametrlarning nomi ham berilishi mumkin, bu nomlar kompilyator tarafidan etiborga olinmaydi, biroq dasturning o'qilishini ancha osonlashtiradi. Bulardan tashqari C++ da funksiya imzosi (function signature) tushunchasi bor. Funksiya imzosiga funksiya nomi, kiruvchi parametrlar tipi, soni, ketma-ketligi kiradi. Funksiyadan qaytuvchi qiymat tipi imzoga kirmaydi.
int foo(); //No1
int foo(char, int); //No2
double foo(); //No3 – No
1 funksiya bilan imzolari ayni. void foo(int, char);
//No4 - No2 bilan imzolari farqli. char foo(char, int);
//No5 - No2 bilan imzolari ayni. int foo(void);
//No6 - No1 va No3 bilan imzolari ayni, Yuqoridagi misolda kirish parametrlari bo'lmasa biz () qavsning ichiga void deb yozishimiz mumkin (No6 ga qarang). Yoki () qavslarning quruq o’zini yozaversak ham bo’ladi (No1 ga qarang). 64 Yana bir tushuncha - funksiya chaqirig'idir. Dasturda funksiyani chaqirib, qo'llashimiz uchun uning chaqiriq ko'rinishini ishlatamiz. () qavslari funksiya chaqirig'ida qo'llaniladi. Agar funksiyaning kirish argumentlari bo’lmasa, () qavslar bo’sh holda qo’llaniladi. Ma’lumki, funksiyalarni aniqlashda ulaming qaytarishi lozim bo‘lgan qiymatlar tipi va funksiya uchun zarur bo‘lgan parametrlar tipini ko'rsatish lozim edi. Faraz qilaylik, ikkita butun sonni qo‘shish uchun funksiya qurilgan bo‘lsin. Agar uchta butun sonni qo‘shish talab qilingan bo‘lsa, ular uchun boshqa nomdagi funksiyani qurish talab qilinadi. Ikkita haqiqiy sonni qo‘shish uchun esa boshqa funksiya qurish lozim bo'ladi. Bunday hollarda bir xil funksiyani takror va takror yozishning o'miga, C++ tili bir xil nomdagi funksiyalarni qurish imkonini beradi. Dastumi kompilatsiya qilish jarayonida C++ funksiyalaming har biridagi argumentlar miqdori e’tiborga olinadi va aynan kerak bo'lgan funksiyani chaqiradi. Kompilyatorga bir nechta funksiyalar orasidan kcragini tanlash imkoniyati funksiyalarni qayta yuklash deb ataladi. Funksiyalami qayta yuklash amali bir xil nomdagi parametrlami har xil tipga mansub bo‘lgan turli funksiyalar uchun qo‘llashga ruxsat beradi. Masalan, quyidagi dastur add_values nomli ikkita funksiyani qayta yuklash uchun xizmat qiladi:
#include

using namespace std;


int add_values (int a, int b)


{
return(a + b);


}
int add_values (int a, int b, int c)


{


return(a + b + c);

}


int main() {

cout « “200 + 801 = “ « add_values(200, 801) « endl;


cout « “100 + 201 + 700 = “ « add_values(100, 201, 700) « endl;}


Ko‘rinib turibdiki, dasturda ikkita bir xil nomdagi, ammo parametrlari soni har xil bo‘lgan add_values funksiyasi aniqlangan. Bu holda kompilyator parametrlar soniga ko‘ra qaysi funksiyani qo‘llash haqida mustaqil ravishda xulosa qiladi. Agar funksiya o‘zidan yordamchi funksiya sifatida foydalanadigan bo‘lsa, bunday funksiyalar rekursiv deyiladi. Rekursiv funksiyalar ikki turga bo‘linadi: a) to‘g‘ri rekursiya. Bunda dastur o‘ziga-o‘zi murojaat qiladi. b) yondosh rekursiya. Bunda A funksiya B ga, B funksiya A ga murojaat qiladi. Rekursiv funksiya yozish uchun avvalo : 1) rekkurent munosabat; 2) shu munosabat uchun boshlang‘ich holatlar aniqlangan bo‘lishi shart. Rekkurent munosabat deganda qaralayotgan jarayonga doir muayyan bosqichlami avvalgi bosqichlar bilan bog‘lovchi munosabatlar tushuniladi. Masalan, N! =N*(N—1) formulani N! uchun rekurent munosabat deb qarash mumkin. Boshlang‘ich holat sifatida esa 1!=1 olinadi. Keltirilgan ma’lumotlami hisobga olsak, faktorialni hisoblash masalasi uchun rekkurent va boshlang‘ich munosabatlar quyidagicha bo'ladi:


𝑁! = { 𝑁 ∗ (𝑁 − 1)! 𝑎𝑔𝑎𝑟 𝑁 > 1 1, 𝑎𝑔𝑎𝑟 𝑁 = 1 Ko‘rinib turibdiki, N! ni hisoblash uchun (N-1)! ma’lum bo‘lishi kerak.
Lekin, (N-1)!=(N-1)*(N-2)! bo‘lgani uchun o‘z navbatida (N-2)! ni inpish talab qilinadi. (N-2)! esa (N-3)!*(N-2) ga teng va hokazo. Bu yerda N! ni hisoblash algoritmi o ‘zining ichiga o ‘zi “cho‘kib” borishi hodisasi ro‘y bermoqda. Cho‘kish jarayoni boshlang‘ich holat sodir bo‘lgunga qadar, ya’ni 1! gacha davom etadi. Shundan keyin, “cho‘- kish” jarayoni to‘xtaydi, 1!=1 ekanligi haqida ko‘rsatma olgan kompyuter yuqoriga qarab “suzib” chiqish bosqichini boshlaydi. Ya’ni, 2!=1, 2!=l-2=2, 3 !=2!-3=6 va hokazo. Bu holat to N! hisoblanmaguncha davom etaveradi. Yuqorida keltirilgan masala dasturi quyidagicha bo’ladi

: #include


using namespace std;


long fak(int m) {

long f; if (m==1) f=1;


else f=fak(m-1)*m; return f; }


int main() {


int n;

cout<<"Butun sonni kiriting: ";

cin>>n;

cout< using namespace std;

int fun(int m) {


int f; if (m==0) f=1;


else { int h=m/2; if (m % 2==0) f=fun(h);

else f=fun(h)+1 ; } return f; }


int main() {


int n; cout<<"Butun sonni kiriting: ";


cin>>n;



Klаssik аlgоritmlаr nаzаriyasi


1965 yildа Edmоnds tоmоnidаn tа’riflаngаn PqNP muаmmоsi, NP to’liq mаsаlаlаr sinfining оchilishi vа tеkshirilishi);
-
Аlgоritmlаrning аsimptоtik аnаlizi nаzаriyasi(аsimptоtik bаhоlаsh usullаri, аlgоritmlаrning murаkkаbligi, аlgоritmlаrni bаhоlаsh kritеriylаri vа hokazo). Ushbu yo’nаlish rivоjigа Knut, Ахо, Хоpkrоft, Ulmаn, Kаrp kаbi оlimlаr o’z hissаlаrini qo’shdilаr;
- hisоblаsh аlgоritmlаrining prаktik аnаlizi nаzаriyasi(аlgоritmlаrning mеhnаttаlаbligi оshkоr 
funksiyasini tоpish, funksiyalаrning chеgаrаviy аnаlizi, rаsiоnаl аlgоritmlаrni tаnlаsh mеtоdikаsi). Ushbu yo’nаlish rivоjlаnishigа sаbаb bo’lgаn ilmiy ish D.Knutning “Isskustvо prоgrаmmirоvаniya dlya EVM” kitоbidаn ibоrаt.
Algoritm – berilgan natijaga erishish uchun qilinishi kerak boʻlgan aniq koʻrsatmalar ketma-ketligi. Algoritm keng maʼnoda faqat kompyuterga oid atama boʻlmay, balki unda berilgan koʻrsatmalarni bajara oluvchi har qanday narsaga oiddir. 
Algoritm, algorifm – maʼlum bir turga oid masalalarni yechishda ishlatiladigan amallarning muayyan tartibda bajarilishi haqidagi aniq qoida (dastur). Kibernetika va matematikaning asosiy tushunchalaridan biri. O‘rta asrlarda sanoqning o‘nli tizimi bo‘yicha to‘rt arifmetik amal bajariladigan qoidani Algoritm deb atashgan.
"Bu qoidalarni matematikaga 9-asrda al-Xorazmiy kiritgan. Yevro-pada bunday qoidalar uning tugilgan yurtiga nisbatan lotinchalashtirilgan (Algoritmus yoki Algorithmus shaklida "algorizm" deyilgan), keyinchalik "algoritm"ga aylangan" (akad. A. N. Kol-mogorov). Fanda "Yevklid algoritmi", "G‘iyosiddin Koshiy algoritmi", "Laure algoritmi", "Markov algoritmi" deb ataluvchi A.lar maʼlum. A. tushunchasi tobora kengayib borib, kibernetikaning nazariy va mantiqiy asosi hisoblangan A.lar nazariyasi paydo bo‘ldi. Oʻzbekiston Respublikasi da bir necha ilmiy tadqiqot muassasalari va hisoblash mar-kazlarida A.dan foydalanish sohasida samarali ishlar olib borilmoqda.

Amaliy qism


#include
using namespace std;
int main() {
int a, count=0;
cout << "Please enter a number: ";
cin >> a;
for (int i=0; iif (i%2 == 0) {
count++;
}
}
cout << "There are " << count << " even numbers from 0 to " << a << endl;
return 0;
}



Xulosa

Rekursiv funksiya qaysidir vaqta kelib o’ziga murojaat qilishni to’xtatishi kerak bo’ladi. Aynan shu narsani rekursiya asos sharti ta’minlab beradi.

Rekursiv funksiya qaysidir vaqta kelib o’ziga murojaat qilishni to’xtatishi kerak bo’ladi. Aynan shu narsani rekursiya asos sharti ta’minlab beradi.

Keyingi shartda o’zgartirilgan argument deganda, odatda masala boshidagi argumentdan kichikroq argument tushiniladi (ba’zi hollarda kattaroq bo’lishi mumkin). Bu narsa ham juda muhim, chunki bir xil argument bilan qayta-qayta murojaat qilinganda yoki argument notog’ri o’zgartirilganda funksiya o’zini cheksiz marta chaqirishiga to’g’ri kelib qoladi.





Download 42.8 Kb.

Do'stlaringiz bilan baham:
  1   2




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling