1-mavzu Statik MT Algoritm yozish usullari .Algoritm sinflari.
1-misol.
Berilgan A massiv elementlarini Insertsion sort usuli yordamisda saralansin.
2-misol. Berilgan bir o`lchovli massiv ichidan qiymati 5 ga teng bo`lgan massiv elementi bor yo`qligini aniqlovchi dastur tuzing. Agar bu qiymat mavjud bo’lsa ekranga ushbu element joylashgan index raqami chiqarilsin . [ chiziqli qidiruv ]
2-Mavzu Rekursiv algoritmlar va ularning funksiyalari
Rekursiv algoritm, bir dastlabki vazifani bajarish uchun o'zini qayta-qayta chaqirib turadi. Buning o'rniga, algoritm bir necha qadamda yoki vazifalarda o'zini qayta ishlatadi. Rekursiv funksiyalar esa rekursiv algoritmlarni yaratish uchun ishlatiladigan dasturiy tillardagi funksiyalardir.
Rekursiv algoritmni yaratish uchun biror vazifani undan kichik bo'lgan bir nechta o'zodan yoki ma'lumotdan foydalanish mumkin. Rekursiv funksiyalarda esa o'zini chaqirish (rekursiya) orqali vazifa yechimini topish mumkin.
Masalan, faktorialni hisoblash uchun rekursiv algoritmni yozish mumkin. Faktorialni hisoblashda, n faktorialini topish uchun n! = n * (n-1)! formula qo'llaniladi. Shunday qilib, faktorialni hisoblash algoritmi rekursiv tarzda yoziladi.
#include
// Rekursiv faktorial hisoblash funksiyasi
unsigned int faktorial(unsigned int n) {
if (n == 0 || n == 1) {
return 1;
} else {
return n * faktorial(n - 1);
}
}
int main() {
unsigned int n = 5; // Misol uchun 5 faktorialini hisoblaymiz
}
Misollar
Rekursiv Fibonachchi ketma-ketligi hisoblash funksiyasi tuzilsin
#include
// Rekursiv Fibonachchi ketma-ketligi hisoblash funksiyasi
int fibonachchi(int n) {
if (n <= 1) {
return n;
} else {
return fibonachchi(n - 1) + fibonachchi(n - 2);
}
}
int main() {
int n = 7; // Misol uchun 7-lik Fibonachchi ketma-ketligini hisoblaymiz
std::cout << "Fibonachchi ketma-ketligi: ";
for (int i = 0; i < n; ++i) {
std::cout << fibonachchi(i) << " ";
}
std::cout << std::endl;
return 0;
}
Rekursiv ekub hisoblash funksiyasi hisoblansin
#include
// Rekursiv ekub hisoblash funksiyasi
int ekub(int a, int b) {
if (b == 0) {
return a;
} else {
return ekub(b, a % b);
}
}
int main() {
int number1 = 56;
int number2 = 84;
int result = ekub(number1, number2);
std::cout << "Ekub: " << result << std::endl;
return 0;
}
3-mavzu Binar daraxtlar bilan ishlash
1-misol Berilgan a va b sonlarining EKUKini topuvchi rekursiv funksiya tuzing.
Daraxtning balandligini aniqlashni o’rganganimizdan keyin uning muvoza-natlanganligini tekshirish mumkin. Binar daraxtning muvozanatlanganligini tekshirish uchun uning har bir tugunini har ikkala qismdaraxti balandliklarini hisoblab, farqlarini tekshirib ko’rish kerak. Agar farq 0 yoki 1 ga teng bo’lsa, bu muvozanatlangan daraxt hisoblanadi. Quyida binar daraxtni muvozanatlanganlikka tekshirishning rekursiv funksiyasini qo’llovchi dastur keltirilgan.
#include #include using namespace std;
class node{
public: int info;
node *left;
node *right;
};
int k=0,Flag=1;
int height(node *tree){
int h1,h2;
if (tree==NULL) return (-1);
else {
h1 = height(tree->left);
h2 = height(tree->right);
if (h1>h2) return (1 + h1);
else return (1 + h2);
}
}
void vizual(node *tree,int l)
{ int i;
if(tree!=NULL) {
vizual(tree->right,l+1);
for (i=1; i<=l; i++) cout<<" ";
cout<info<vizual(tree->left,l+1);
}
}
int AVLtree (node *tree){
int t;
if (tree!=NULL){
t = height (tree->left) - height (tree->right);
if ((t<-1) || (t>1)) { Flag = 0; return Flag; }
AVLtree (tree->left); AVLtree (tree->right);
}
}
int GetFlag(){return Flag;}
int main()
{ int n,key,s; node *tree=NULL,*next=NULL;
cout<<"n="; cin>>n; int arr[n];
for(int i=0; inode *p=new node;
node *last=new node;
cin>>s;
p->info=s;
p->left=NULL;
p->right=NULL;
if(i==0){tree=p; next=tree; continue; }
next=tree;
while(1)
{ last=next;
if(p->infoinfo)next=next->left;
else next=next->right;
if(next==NULL)break; }
if(p->infoinfo)last->left=p;
else last->right=p;}
cout<cout<<"\nbinar daraxt:\n";
vizual(tree,0);
AVLtree(tree);
if(GetFlag()) cout<<"ha, muvozanatlangan daraxt"; else cout<<"yo’q, muvozanatlanmagan daraxt";cout< getch();
2-misol
Yuqorida keltirilgan bir nechta algoritmlarni qo’llab bitta misol ko’rib chiqamiz.
berilgan binar daraxtning balandligini aniqlang va muvozanatlang.