I-bosqich ki-12-22 guruh talabasi shavkatov sirojbek ning “dasturlash2


Raqamli sinflar va ular bilan ishlash (complex, vallaray, slice,gslice va b.sh)


Download 340.29 Kb.
bet6/11
Sana18.06.2023
Hajmi340.29 Kb.
#1564702
1   2   3   4   5   6   7   8   9   10   11
Bog'liq
O-3XWxhqJ4kseNw9IGwHXz8oEzECnwoh

2. Raqamli sinflar va ular bilan ishlash (complex, vallaray, slice,gslice va b.sh)

Oliy matematk kursida komleks sonlar bilan tanishgansizlar.


Ta’rif. Tartiblangan ikkita haqiqiy sonlar juftligi bolib, asosan standart ko’rinisda
a+bi (Dekart koorditalar tisimida) yoki (a,b)
beriladi. Bu erda:
a – uning butun qismi, bo’lib, haqiqiy sonlar to’plamiga tegishli;b – uning mavhum qismi bo’lib, haqiqiy sonlar to’plamiga tegishli;
i – qiymati ga teng bo’lgan irratsional son;Komplex sonnig qutb koordinatalar tizimidagi ko’rinishi:
z= p(cosα+isinα)
Bu erda:
p – complex sonning absolyut qiymati deyiladi, va
α – vektorning Ox o’qi bilan hosil qilgan burchagii – qiymati ga teng bo’lgan irratsional son;
Komplex sonlar ustida to’rtta arifmetik amallar quyidagi algoritm (formulalar) yordamida amalga oshiriladi: z1=a+bi va z2=c+di 2 ta complex son uchun -
1) z1+z2=(a+c)+(b+d)i= ((a+c),(b+d)) - qo’shish
2) z1-z2=(a-c)+(b-)i= ((a-c),(b-d)) - ayirish
3) z1·z2=(ac-bd) +(ad+bc)i=((ac-bd),(ad+bc)) - ko’paytirish
4) – bo’lish

C ++ standart kutubxonasining kompleks son sinfi ob'ekt modelidan foydalanishning yaxshi namunasidir. Ortiqcha arifmetik operatsiyalar tufayli ushbu klass ob'ektlari o'rnatilgan ma'lumotlar turlaridan biriga tegishlicha ishlatiladi. Bundan tashqari, o'rnatilgan arifmetik turdagi o'zgaruvchilar va murakkab raqamlar bir vaqtning o'zida bunday operatsiyalarda ishtirok etishlari mumkin.


1. Raqamli sinflar va ular bilan ishlash.

C ++ standart kutubxonasining kompleks son sinfi ob'ekt modelidan foydalanishning yaxshi namunasidir. Ortiqcha arifmetik operatsiyalar tufayli ushbu sinf ob'ektlari o'rnatilgan ma'lumotlar turlaridan biriga tegishlicha ishlatiladi. Bundan tashqari, o'rnatilgan arifmetik turdagi o'zgaruvchilar va kompleks sonlar bir vaqtning o'zida bunday operatsiyalarda ishtirok etishlari mumkin. (E'tibor bering, bu erda biz murakkab sonlar matematikasining umumiy masalalariga murojaat qilmaymiz. Qarang [PERSON68] yoki matematikaga oid biron bir kitob.)

Masalan:
#inc1ude
comp1ex< double > a;
comp1ex< double > b; // ...
complex< double > с = a * b + a / b;
Kompleks va arifmetik turlarni bitta ifoda bilan aralashtirishga ruxsat beriladi:
complex< double > complex_obj = a + 3.14159;
Xuddi shunday, kompleks sonlar arifmetik tur bilan initsializatsiya qilinadi va ularga quyidagicha qiymat berilishi mumkin:
double dval = 3.14159;
complex_obj = dval;
yoki
int ival = 3;
complex_obj = ival;
Masalan, quyidagi ifoda kompilyatsiya xatosiga olib keladi:
// xato: arifmetik turga aniq konversiya qilinmaydi
double dval = complex_obj;

Kompleks sonning qaysi qismini - haqiqiy yoki mavhum - biz muntazam raqamga belgilashni xohlayotganimizni aniq ko'rsatishimiz kerak. Kompleks sonlar sinfi mos ravishda haqiqiy va mavhum qismlarni qaytaradigan ikkita funksiyaga ega. Biz ularga sinf a'zolariga kirish uchun sintaksis yordamida kirishimiz mumkin:



double re = complex_obj.real();
double im = complex_obj.imag();
yoki shunga o'xshash funktsiyani chaqirish sintaksisi:
double re = real(complex_obj);
double im = imag(complex_obj);
Kompleks son sinfi to'rtta kompozitsion tayinlash operatorlarini qo'llab-quvvatlaydi: + =, - =, * = va / =. Shunday qilib,
complex_obj += second_complex_obj;

Kompleks sonlarni Qo'llab-quvvatlaydigan kirish / chiqish . Chiqish operatori vergul bilan ajratilgan haqiqiy va mavhum qismlarni qavs ichiga bosib chiqaradi. Masalan, chiqish bayonotlarini bajarish natijasi



complex< double > complex0( 3.14159, -2.171 );
comp1ex< double > complex1( complexO.real() );
cout << complexO << " " << complex1 << endl;
quyidagicha:
( 3.14159, -2.171 ) ( 3.14159, 0.0 )
Kirish operatori quyidagi formatlarning istalganini tushunadi.
// kompleks sonlarni kiritish uchun ruxsat etilgan tiplari
// 3.14159 ==> comp1ex( 3.14159 );
// ( 3.14159 ) ==> comp1ex( 3.14159 );
// ( 3.14, -1.0 ) ==> comp1ex( 3.14, -1.0 );
// sifatida o'qish mumkin
// cin >> a >> b >> с
// bu yerda a, b, с – kompleks sonlar
3.14159 ( 3.14159 ) ( 3.14, -1.0 )
Ushbu operatsiyalarga qo'shimcha ravishda, kompleks sonlar sinfida quyidagi a'zo funksiyalariga ega: sqrt(), abs(), polar(), sin(), cos(), tan(), exp(), log(), log10() va pow().

Biz uchun mavjud bo'lgan C ++ standart kutubxonasining joriy etilishi, agar to'g'ri operand kompleks son bo'lmasa, murakkab tarkibiy operatsiyalarini qo'llab-quvvatlamaydi. Masalan, shunga o'xshash yozuv haqiqiy emas:


complex_obj += 1;

(C ++ standartiga binoan, bunday ifoda to'g'ri bo'lishi kerak, ishlab chiqaruvchilar ko'pincha standartga rioya qilmaydilar.) Bunday operatsiyani bajarish uchun biz o'z operatorimizni aniqlay olamiz. Bu yerda complex uchun qo'shimcha operatorni amalga oshiradigan funksiyaning varianti:


#include
inline complex&
operator+=( complex &cval, double dval )
{
return cval += complex( dval );
}
Ushbu misoldan foydalanib, complex turi uchun yana uchta boshqa tayinlash operatorlarini amalga oshiring. Amaliyatingizni quyidagi dasturga qo'shing va tekshirish uchun ishga tushiring.
#include
#include
// определения операций...
int main() {
complex< double > cval ( 4.0, 1.0 );
cout << cval << endl;
cval += 1;
cout << cval << endl;
cval -= 1;
cout << cval << endl;
cval *= 2;
cout << cval << endl;
cout /= 2;
cout << cval << endl;
}
C ++ standartida kompleks son uchun o'sish va kamaytirish operatsiyalarining bajarilishi ko'rsatilmagan. Ammo, ularning semantikasi tushunarli: agar biz yoza olsak:
cval + = 1;
bu Cvalning haqiqiy qismining 1 ga ko'payishini anglatadi, bu holda o'sish jarayoni juda qonuniy ko'rinishi mumkin. Ushbu operatsiyalarni complex turi uchun bajaring va quyidagi dasturni ishlating:

#include


#include
// определения операций...
int main() {

complex< double > cval( 4.0, 1.0 );


cout << cval << endl;

++cva1;


cout << cval << endl;

}
C ++ 98 massivlarda matematik operatsiyalarni samarali saqlash va ta'minlash uchun maxsus valarray konteynerini taqdim etdi.



  • elementlarga asoslangan matematik operatsiyalarni va umumlashtirilgan indeksi, qism va bilvosita kirish operatorlarining har xil shakllarini qo'llab-quvvatlaydi.

  • vektorlar bilan taqqoslaganda, vektorlar ma'lum matematik operatsiyalarda vektorlarga qaraganda samaraliroq.

Valarray sinfida ochiq funksiya a’zolari:



  1. 1. apply () : —Ushbu funksiya o'z argumentlarida ko'rsatilgan manipulyatsiyalarni bir vaqtning o'zida barcha valarray elementlariga qo'llaydi va manipulyatsiyalangan qiymatlarga ega yangi valarray ni qaytaradi.


Download 340.29 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   10   11




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling