MUHAMMAD AL-XORAZMIY NOMIDAGI
TOSHKEMT AXBOROT TEXNOLOGIYALARI
UNIVERSITETI
KOMPYUTER INJINERINGI fakulteti
M215-22 KIo‘-guruh talabasi
Maxamadiyev Odiljonning
“Ma’lumotlar tuzilmasi va algoritmlar” fanidan tayyorlagan
3-Amaliy ishi
Toshkent – 2023
Ishning maqsadi: Rekursiya tushunchasi, turlari va rekursiv triadani
o'rganish, C++ tilidagi muammolarni hal qilishda rekursiv triadani ishlab
chiqishni o'rganish va samaradorligini tahlil qilish.
Topshiriq: Rekursiya yordamida oldingi topshiriq uchun dastur yozing. Rekursiv triadani ishlab chiqish. Rekursiv algoritm uchun rekursiv chaqiruv daraxtini yarating.
N o'lchamdagi massiv berilgan. K dan L gacha (1 < K ≤ L ≤N) bo'lgan raqamlardan massivning o'rta-geometrik qiymatini topish funktsiyasini tuzing.
Yechim:
VARIANT №: 5
Rekursiv triadani ishlab chiqamiz.
Parametrlash: K, L – massiv elementlaring tartib raqami (butun son) N massiv elementlaring soni. 1 < K ≤ L ≤ N chunki o’rta geometrik ifodaning qiymatini qanoatlantirish uchun.
Rekursiya bazasini yaratish: K = L holat uchun rekursiya shartini qanaotlantiruvchi o’z o’zini qayta chaqirish holati ishlamaydi.Qolgan holatlarda quyidagi formula orqali o’rta geomerik ifodani hisoblab topamiz. K dan L gacha tartib raqamda bo’lgan massiv elelmentlrining ko’paytmasini L-K+1 – ildiz ostidan chiqaramiz.
Dekompozitsiya: K > L yoki L > N holatlar uchun rekursiv funksiya notg’ri ishlashi mumkin. Chunki boshlang’ich nuqta chegaradan katta bo’lishi mumkin emas. N esa massiv elemaentlari soni.
Yechim dasturi:
Kodi:
#include
#include
// Rekursiv algoritmani yozish
double rekursivOrtaGeometrik(int arr[], int start, int fin) {
// O'rtadagi elementlarni topish
if (start <= fin) {
int mid = start + (fin - start) / 2;
// O'rta-geometrik qiymatni hisoblash
double ortaGeometrikQiymat = sqrt(arr[mid]);
// Qo'shimcha rekursiv chaqiruvlar
double ongYuz = rekursivOrtaGeometrik(arr, mid + 1, fin);
double chapYuz = rekursivOrtaGeometrik(arr, start, mid - 1);
// O'rtadagi qiymatlarni bir-biriga ko'paytirish
return ortaGeometrikQiymat * sqrt(ongYuz * chapYuz);
}
return 1.0;
}
// Massiv o'lchamini so'rab olish uchun funksiya
int massivOlchamniKiritish() {
int N;
std::cout << "Massiv o'lchamini kiriting: ";
std::cin >> N;
return N;
}
// Massiv elementlarini kiritish uchun funksiya
void massivElementlariniKiritish(int arr[], int N) {
std::cout << "Massivni elementlarini kiriting:\n";
for (int i = 0; i < N; ++i) {
std::cout << "Element #" << i + 1 << ": ";
std::cin >> arr[i];
}
}
// Dastur boshlanishi
int main() {
// Massiv o'lchamini olish
int N = massivOlchamniKiritish();
int K, L;
// Massivni to'ldirish
int* arr = new int[N];
massivElementlariniKiritish(arr, N);
std::cout << "K ning qiymatini kiriting: (1
std::cin >> K;
std::cout << "L ning qiymatini kiriting: (K
std::cin >> L;
// Rekursiv algoritmani chaqirish
double natija = rekursivOrtaGeometrik(arr, K, L);
// Natijani chiqarish
std::cout << "O'rta-geometrik qiymat: " << natija << std::endl;
// Dynamic massivni bo'shatish
delete[] arr;
return 0;
}
Do'stlaringiz bilan baham: |