N o`lchamli massiv berilgan. Uning elementlari teskari tartibda chiqarilsin
Download 33.38 Kb.
|
1-amaly topshiriq
MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI “Algoritmlarni loyihalash” fanidan AMALIY TOPSHIRIQ Mavzu: 1-amaliy topshiriq Bajardi: Azizov Zafarbek Tekshirdi: Ravshanov Anvar TOSHKENT 2023 1-amaliy ishi. N o`lchamli massiv berilgan. Uning elementlari teskari tartibda chiqarilsin. #include #include using namespace std; int main() { int massiv[] = {3, 8, 1, 6, 2}; int n = sizeof(massiv)/sizeof(massiv[0]); // Massivni teskari tartibda chiqaramiz reverse(massiv, massiv + n); // Teskari tartibdagi massivni chiqaramiz for (int i = 0; i < n; i++) { cout << massiv[i] << " "; } return 0; } Bu kod natijada, berilgan ‘massiv’ ning teskari tartibidagi elementlarini chiqaradi. ‘reverse()’ funktsiyasini ishlatish orqali massivni teskari tartibda chiqarishimiz mumkin. 2-amaliy ishi. 1. Aniqlangan oraliqda ildizning taqribiy qiymatini 0.001 aniqlikda hisoblang. 2. Kesmani teng ikkiga bo‘lish usuli bilan taqribiy hisoblang. 1) 3x-cosx-1=0 2) x3+0.2x2+0.5x-1.2=0 1) 3x-cosx-1=0 uchun kesmaning yechimi: x = (cos(x) + 1) / 3 x = 0.5, x = 0.7 va x = 0.8 ni hisoblash orqali aniqlangan kesmning kesmani teng ikkiga bo'lib 0.5 ni topamiz: f(0.5) = 3(0.5) - cos(0.5) - 1 = 0.1245 f(0.7) = 3(0.7) - cos(0.7) - 1 = 0.2586 f(0.8) = 3(0.8) - cos(0.8) - 1 = -0.0083 f(0.5) va f(0.7) ning x < 0.8 , f(0.8) ning x > 0.8, shuning uchun kesmning 0.5 dan 0.7 gacha bo'lgan oraliqda kesmning kesmani 0.5 deb olamiz. 2) x3+0.2x2+0.5x-1.2=0 uchun, kesmaning kesmani teng ikkiga bo'lish usuli yordamida yechimni topish uchun, quyidagi formuladan foydalanamiz: x(n+1) = x(n) - f(x(n))/f'(x(n)) Bu yerda, f(x) funksiyamiz, f'(x) esa funksiyaning o'zgaruvchanidan yaratilgan funksiyadir. f(x) = x3+0.2x2+0.5x-1.2 f'(x) = 3x2 + 0.4x + 0.5 Shuningdek, kesmaning kesmani teng ikkiga bo'lish usuli uchun yechimning bo'lishi kerak bo'lgan aniqlik miqdorini belgilab olishimiz zarur. 1.0e-6 ga teng bo'lgan aniqlikda yechimni topamiz: x0 = 1.0
x1 = x0 - f(x0)/f'(x0) = 1.085854
x2 = x1 - f(x1)/f'(x1) = 1.070595 x3 = x2 - f(x2)/f'(x2) = 1.064748 x4 = x3 - f(x3)/f'(x3) = 1.062847 x5 = x4 - f(x4)/f'(x4) = 1.062244 Natijada, kesmning yechimi taqribiy qiymatga teng bo'lib qoladi: x = 1.062244 C++ da kodi #include #include using namespace std; double f(double x) { return 3*x - cos(x) - 1; } double bisection(double a, double b, double eps) { double c = (a + b) / 2; while (fabs(b - a) > eps) { if (f(c) == 0.0) { return c; } else if (f(a) * f(c) < 0.0) { b = c; } else { a = c; } c = (a + b) / 2; } return c; } int main() { double a = 0.0; double b = 1.0; double eps = 0.001; double x = bisection(a, b, eps); cout << "The root is approximately: " << x << endl; return 0; } C++ kodi #include #include using namespace std; double f(double x) { return pow(x, 3) + 0.2 * pow(x, 2) + 0.5 * x - 1.2; } double bisection(double a, double b, double eps) { double c = (a + b) / 2; while (fabs(b - a) > eps) { if (f(c) == 0.0) { return c; } else if (f(a) * f(c) < 0.0) { b = c; } else { a = c; } c = (a + b) / 2; } return c; } int main() { double a = 1.0; double b = 2.0; double eps = 0.001; double x = bisection(a, b, eps); cout << "The root is approximately: " << x << endl; return 0; } 3-amaliy ishi Quyidagi integrallarni: 1)to‘rtburchak usulida; 2)trapetsiya usulida; dx To'rtburchak usuli (yaʼni to'rtta nuqta orqali integralni hisoblash usuli) integralni yaxlitlashda juda foydali bo'lgan bir usul hisoblanadi. Ushbu usul ko'pincha Reimann summalarini hisoblash uchun ishlatiladi va keyinchalik integrallarni hisoblash uchun xususan uchun uning yuqori chegaralarini va yuqori darajasini hisoblash uchun foydalaniladi. To'rtburchak usuli quyidagi formulaga asoslangan: ∫[a,b] f(x) dx ≈ (b-a)/6 [f(a) + 4f((a+b)/2) + f(b)] Bu yerda f(a) f(a+b)/2 va f(b) funksiyaning o'zgaruvchanining a, (a+b)/2 va b bo'lgan chegaralarida qiymati hisoblanadi. Ushbu formulada, ∫[a,b] f(x) dx integralni chegaralari a va b oralig'ida to'rtta barobar kesmalariga bo'linadi, va har bir kesmada funksiyalarning qiymati (a va b kesma chegaralarida yoki a va b kesmalari orasidagi yuqori chegaralarida) hisoblanadi. Bularning o'rtasida, 1 ta o'rta nuqta orqali ularning yig'indisi hisoblanadi. Bunda o'rta nuqta (a + b) / 2 qiymati a va b orasidagi yarmi kesmada o'rniga olingan. Bu formulani ishlatish orqali, integralni hisoblash uchun quyidagi qadamlarni bajarish kerak: 1) Integralning chegaralarini topish 2) Kesmalar uzunligini topish, ya'ni (b-a) 3) O'rta nuqtani topish, ya'ni (a+b)/2 4) Funksiyalarning qiymatlarini topish, ya'ni f(a), f((a+b)/2) va f(b) 5) Yuqori formulani ishlatib integralni hisoblash: ∫[a,b] f(x) dx ≈ (b-a)/6 [f(a) + 4f((a+b)/2) + f(b)] Bu formulani ishlatish orqali, integralni to'g'ri yoki ularni yaxshi hisoblash yolg'izligiga qarab, aniqlash mumkin. dx Berilgan integralni to'rtburchak usuli yordamida hisoblash uchun quyidagi qadamlarni bajarish kerak: 1)Chegaralarni topish: a = 0, b = 2. 2)Kesmalar uzunligini topish: (b-a) = (2-0) = 2. 3)O'rta nuqtani topish: (a+b)/2 = (0+2)/2 = 1. 4)Funksiyalarning qiymatlarini topish: f(a) = f(0) = 1/√9+0^3 = 1/3, f((a+b)/2) = f(1) = 1/√9+1^3 = 1/3, va f(b) = f(2) = 1/√9+2^3 = 1/√17. 5) Yuqori formulani ishlatib integralni hisoblash: ∫[0,2] 1/√9+x^3 dx ≈ (2-0)/6 [1/3 + 4(1/3) + 1/√17] ≈ (1/3) [8/3 + 1/√17] ≈ 0.8318
Shunday qilib, berilgan integral natijasi 0.8318 ga yaqin hisoblanadi.
C++ kodi #include #include using namespace std; int main() { double a = 0, b = 2; // Chegaralar double h = (b-a)/2; // Kesmalar uzunligi double x = (a+b)/2; // O'rta nuqta double fa = 1/sqrt(9+pow(a,3)); // f(a) qiymati double fx = 1/sqrt(9+pow(x,3)); // f(x) qiymati double fb = 1/sqrt(9+pow(b,3)); // f(b) qiymati double integral = (h/3)*(fa+4*fx+fb); // Integralni hisoblash cout << "Integral natijasi: " << integral << endl; // Natijani ekranga chiqarish return 0; } 2) Trapetsiya usuli, integralni trapetsiya shaklida hisoblashga asoslangan usuldir. U holda integrallarni chegaralar orqali qo'llash mumkin bo'lgan bo'lmaguncha, o'nlab kesmalar chiqarib, har birini trapetsiyalarga aylantirib integralni aniqlash mumkin. Shunday qilib, integralni qadamlariga bog'liq bo'lmaguncha, bu usul chegaralarni va funksiyaning qiymatlarini o'z ichiga oladi va shunday qilib integralni aniqlash uchun trapetsiya shaklida yuqoridagi chegaralarni (a va b) va kesmalar uzunligini (h) hisoblash lozim. Integralni trapetsiya usuli bilan hisoblash uchun quyidagi qadamlarni bajarish kerak: 1)Chegaralarni topish: a = 0, b = 2. 2)Kesmalar uzunligini topish: (b-a) = (2-0) = 2. 3)Kesmalar sonini topish: n = 10, masalan. 4)Kesmalar uzunligini topish: h = (b-a)/n = (2-0)/10 = 0.2. 5)Funksiyalarning qiymatlarini topish: f(a) = f(0) = 1/√9+0^3 = 1/3, f(b) = f(2) = 1/√9+2^3 = 1/√17. 6)Kesmalar uchun trapetsiyalarni hisoblash: I = (h/2) * (f(a) + 2*Σf(xi) + f(b)) xi qiymatlari esa shu formuladan foydalanib hisoblanadi: xi = a + i*h, i = 1,2,...,n-1. Integralni hisoblash. Yuqoridagi qadamlarni bajargandan so'ng, trapetsiya usulini ishlatib integralni hisoblash kerak. Quyidagi C++ kodida, yuqoridagi integralni trapetsiya usuli yordamida hisoblash ko'rsatilgan: C++ kodi #include #include using namespace std; double f(double x) { return 1 / sqrt(9 + pow(x, 3)); } int main() { double a = 0, b = 2; // Chegaralar int n = 10; // Kesmalar soni double h = (b - a) / n; // Kesmalar uzunligi double sum = 0; // Kesmalar uchun funksiya qiymatlari yig'indisi for (int i = 1; i < n; i++) { double xi = a + i * h; // xi qiymati sum += f(xi); // f(xi) qiymati va yig'indisi } double fa = f(a); // f(a) qiymati double fb = f(b); // f(b) qiymati double I = (h / 2) * (fa + 2 * sum + fb); // Trapetsiya usuliga ko'ra integralni hisoblash cout << "Integralning qiymati: " << I << endl; return 0; } Shu dastur yordamida, yuqoridagi integralning qiymati 0.60427 ga teng bo'ladi. Download 33.38 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling