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 ]
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
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.
int main()
{
int n,s=0;
cin>>n;
int a[n];
for(int i=0;i{cin>>a[i];
if(a[i]<0)
s=s+a[i];
}
cout<
}
2-misol #include
using namespace std;
int main()
{
int n,s=0;
cin>>n;
int a[n];
for(int i=0;i{cin>>a[i];
if(a[i]<0)
s=s+a[i];
}
cout<
}
5-mavzu Saralash algoritmlari
1-misol #include using namespace std;
// Array[] ikkita ichki massivni birlashtiradi.
//Birinchi ichki massiv - Array[l..m]
// Ikkinchi ichki massiv Array[m+1..r]
void merge(int Array[], int l, int m, int r)
{
int n1 = m - l + 1;
int n2 = r - m;
// Vaqtinchalik massivlarni yaratish
int L[n1], R[n2];
// Ma‟lumotlarni vaqtinchalik L[] va R[] massivlariga nusxalash
for (int i = 0; i < n1; i++)
L[i] = Array[l + i];
for (int j = 0; j < n2; j++)
R[j] = Array[m + 1 + j];
// Vaqtinchalik massivlarni yana arr [l..r] ga birlashtirish.
// Birinchi ichki massivning boshlangʻich koʻrsatkichi
int i = 0;
67
// Ikkinchi kichik massivning boshlangʻich koʻrsatkichi
int j = 0;
// Birlashtirilgan ichki massivning dastlabki koʻrsatkichi
int k = l;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
Array[k] = L[i];
i++;
}
else {
Array[k] = R[j];
j++;
}
k++;
}
// L [] ning qolgan elementlarini nusxalash,
//agar mavjud boʻlsa
while (i < n1) {
Array[k] = L[i];
i++;
k++;
}
// Agar mavjud boʻlsa, R [] ning
//qolgan elementlarini nusxalash
while (j < n2) {
Array[k] = R[j];
j++;
k++;
}
}
// l chap indeks uchun,
//r esa tartiblangan ichki massivning oʻng indeksidir
void mergeSort(int Array[],int l,int r){
68
if(l>=r){
return;//rekursiv ravishda qaytadi
}
int m =l+ (r-l)/2;
mergeSort(Array,l,m);
mergeSort(Array,m+1,r);
merge(Array,l,m,r);
}
// Massivni chop etish funksiyasi
void printArrayay(int A[], int size)
{
for (int i = 0; i < size; i++)
cout << A[i] << " ";
}
int main()
{
int Array[] = { 12, 11, 13, 5, 6, 7 };
int Array_size = sizeof(Array) / sizeof(Array[0]);
cout << "Berilgan massiv \n";
printArrayay(Array, Array_size);
mergeSort(Array, 0, Array_size - 1);
cout << "\n Tartiblangan massiv \n";
printArrayay(Array, Array_size);
return 0;
}
6-Mavzu Xesh jadvallari
Xesh jadvallar (hash tables) ma'lumotlarni saqlashda va ularga qo'lda tezroq murojaat qilishda samarali bo'lgan ma'lumotlar tuzilmasi hisoblanadi. Ular bir nechta ma'lumotlarni tegishli indekslar orqali o'z ichiga oladi va bundan foydalanib ma'lumotlarga tezroq murojaat qilish imkoniyatini beradi.
Xesh jadvallar quyidagi elementlardan iborat:
Kalitlar (Keys): Bu ma'lumotlarning indekslarini aniqlash uchun ishlatiladi. Bu kalitlar xususiyatlar yoki ma'lumotlar bo'lishi mumkin.
Xesh jadvallar yoki hash tables ma'lumotlarni tegishli indekslar orqali saqlash uchun ishlatiladi. Kalitlar (keys) bu jadvallarning asosiy qismidir. Bu kalitlar ma'lumotlarni identifikatsiya qilish uchun ishlatiladi va ularga bog'liq ma'lumotlar (values)ni aniqlash uchun foydalaniladi.
Kalitlar quyidagi xususiyatlarga ega: