N o`lchamli massiv berilgan. Uning elementlari teskari tartibda chiqarilsin


Download 33.38 Kb.
Sana29.07.2023
Hajmi33.38 Kb.
#1663561
Bog'liq
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





  1. 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;


}



  1. 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



  1. 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

  1. 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.



  1. 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:



  1. 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'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling