1. Mavzu: Vektorlarni tashkil etish
Download 185.03 Kb.
|
dasturlash 2-mustaqil ish
O’ZBEKISTON RESPUBLIKASI AXBOROT TEXNOLOGIYALARI VA KOMMUNIKATSIYALARINI RIVOJLANTIRISH VAZIRLIGI MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI QARSHI FILIALI “TELEKOMUNIKATSIYA TEXNOLOGIYALARI VA KASBIY TA’LIM” FAKULTETI TT-11-22 GURUH TALABASINING DASTURLASH 1 FANIDAN 2-Mustaqil ishi Bajardi: G.SABRINA. Qabul qildi: N.AXMEDOVA. Qarshi 2022 1.Mavzu:Vektorlarni tashkil etish. Reja: 1.Skalyar va vektor miqdorlar. 2.Vektor tushunchasi. 3.Vektorlar ustida chiziqli amallar. 4.Ikki vektor orasidagi burchak tushunchasi. Skalyar va vektor miqdorlar. Kundalik hayotimizda: institutning eng keksa o’qituvchisining yoshi nechada?; ma‘lum quduqdan bir kecha-kunduzda qancha neft olinadi?; fakultet talabalari bir kunda qancha paxta teradi?; Bobomurod traktorchi bir kunda qancha yer haydaydi?; korxona bir kunda necha metr mato ishlab chiqardi?; xonadagi havoning harorati qanday; bir dona to’la ochilgan paxta ko’sagining massasi qancha?; ishchi bir kunda qancha g’isht terdi?; zavod bir kecha-kunduzda qancha neftni qayta ishlaydi? kabi savollarga duch kelamiz. Bu savollarning barchasiga bitta aniq son yordamida to’liq javob olish mumkin. Boshqacha aytganda bu yerda miqdor o’zining faqatgina son qiymati bilan to’la aniqlanadi. O’zining son qiymati bilan to’liq aniqlanadigan miqdorlar skalyar miqdorlar deyiladi. Uzunlik, yuza, hajm va harorat skalyar miqdorga misol bo’la oladi. Shunday miqdorlar ham uchraydiki, ularni faqatgina son qiymati orqali to’liq aniqlab bo’lmaydi. Masalan: Qarshi shahridan 70km/soat tezlik bilan chiqqan avtomobil bir soatdan keyin qaerda bo’ladi? degan savolga birgina 70 km/soat yordamida javob berib bo’lmaydi. Agarda masalaning shartiga yo’nalish tayinlansa, uni hal etish mumkin. Ya‘ni Qarshi shahridan 70 km/soat tezlik bilan Qarshi-Samarqand yo’nalishi bo’yicha harakatlanayotgan avtomobil bir soatdan keyin qaerda bo’ladi? deyilsa, bu savolga to’liq javob berish mumkin. Son qiymatidan tashqari ma‘lum yo’nalishga ega bo’lgan miqdorlar vektor miqdorlar deyiladi. 22 Harakat tezligi, tezlanish, kuch, magnit va elektr maydonining kuchlanganligi kabi kattaliklar vektor miqdorga misol bo’ladi. Vektor tushunchasi. Vektor kattalik (miqdor) lar vektor ko’rinishida tasvirlanadi. 4.1-ta‘rif. Yo’nalgan kesma vektor deyiladi. Boshlanish (bosh) nuqtasi А va oxirgi nuqtasi В bo’lgan vektorni АВ (yoki АВ ) kabi yozish qabul qilingan. Ba‘zan vektorni bitta harf bilan а (yoki а ) kabi belgilanadi. А va В nuqtalar orasidagi masofa АВ vektorning uzunligi deyiladi. АВ vektorning uzunligini uning moduli ham deb yuritiladi va АВ ko’rinishda belgilanadi. Boshi oxiri bilan ustma-ust tushgan vektor nol vektor deb ataladi va 0 (yoki 0 ) bilan belgilanadi. Demak, АА=0 –nol vektor. Nol vektorning moduli 0 ga teng bo’lib, uning yo’nalishi aniq emas. ВА vektor АВ vektorga qarama-qarshi vektor deyiladi. а vektorga qarama-qarshi vektor- а kabi belgilanadi. Uzunligi 1 ga teng vektor birlik vektor deyiladi va а vektorga mos (shu o’qda yotadi hamda u bilan bir xil yo’nalishga ega) birlik vektor а 0 kabi belgilanadi. 4.2-ta‘rif. Bitta to’g’ri chiziqda yoki parallel to’g’ri chiziqlarda yotuvchi а va b vektorlar kollinear vektorlar deyiladi (18-chizma). 4.3-ta‘rif. Bitta tekislikda yoki parallel tekisliklarda yotuvchi vektorlar komplanar vektorlar deb aytiladi. 4.4-ta‘rif. Kollinear а va b vektorlar bir xil yo’nalgan hamda bir xil uzunlikka ega bo’lsa, teng deyiladi ( а =b kabi yoziladi) (18b-chizma). Ta‘rifga binoan berilgan vektorni o’z-o’ziga parallel ko’chirish natijasida unga teng vektor hosil bo’ladi. Boshqacha aytganda vektorni uzunligi va yo’nalishini o’zgartirmagan holda uni fazoning bir nuqtasidan boshqa bir nuqtasiga ko’chirish mumkin ekan. Bunday vektorlar erkin vektorlar deyiladi. Biz faqatgina erkin vektorlar bilan ish ko’ramiz. 4.3. Vektorlar ustida chiziqli amallar. Matematikada vektor tushunchasi son tushunchasiga nisbatan murakkab tushuncha. Sonlar ustida bajariladigan barcha amallarni vektorlar ustida bajarib bo’lmaydi. Masalan ko’paytirish, bo’lish, darajaga ko’tarish, ildiz chiqarish kabi amallarni vektorlar ustida bajarish mumkin emas. 23 Vektorlar ustida chiziqli amallar deb, vektorlarni qo’shish, ayirish hamda vektorlarni songa ko’paytirish amallariga aytiladi. 1. Vektorlarni qo’shish. Noldan farqli ikkita а va b vektorlarni olamiz. Ixtiyoriy 0 nuqtani olib ОА=а vektorni yasaymiz, so’ngra А nuqtaga АВ =b vektorni qo’yamiz. Ikkita а va b vektorlarning yig’indisi а + b deb birinchi qo’shiluvchi а vektorning boshini ikkinchi qo’shiluvchi b vektorning oxiri bilan tutashtiruvchi ОВ vektorga aytiladi. (19а -chizma). Vektorlarni bunday qo’shish usuli uchburchak usuli deyiladi. Uchta а , b va с vektorlarning yig’indisi а + b + с deb birinchi qo’shiluvchi а vektorni oxiriga ikkinchi qo’shiluvchi b vektorni boshini qo’yib, so’ngra ikkinchi qo’shiluvchi vektorning oxiriga uchinchi с qo’shiluvchi vektorning boshini qo’yib birinchi а vektorning boshi bilan uchinchi с vektorning oxirini tutashtirish natijasida hosil bo’lgan vektorga aytiladi (19б -chizma). Vektorlarni bu xilda qo’shish qo’shiluvchilar soni har qanday bo’lganda ham yaroqlidir. Endi vektorlarni qo’shishning boshqa bir usuli bilan tanishamiz. ОА=а va ОС =b vektorlarni yig’indisini topish uchun bu vektorlarni tomon hisoblab ОАВС parallelogramm yasaymiz. Parallelogrammning O uchidan o’tkazilgan diagonali ОВ vektor, а va b vektorlarni yig’indisini ifodalaydi. Vektorlarni bunday qo’shish usuli parallelogramm qoidasi deb ataladi (19d -chizma). 2. Vektorlarni ayirish. а va b vektorlarni ayirmasi а -b deb b vektor bilan yig’indisi а vektorni beradigan c vektorga aytiladi. Demak а -b ayirmani topish uchun а vektor bilan b vektorga qarama-qarshi -b vektorni yig’indisini topish lozim ekan. ОА=а va ОС =b vektorlarni ayirmasini topish uchun bu vektorlarni 24 tomon hisoblab, yasalgan ОАВС parallelogramning С uchidan o’tkazilgan diagonali СА vektorni topish lozim. Ayirma vektorda yo’nalish «ayriluvchidan» dan «kamayuvchi» ga qarab yo’naladi(19e -chizma). 3. Vektorni songa ko’paytirish. Noldan farqli а vektorning m0 songa ko’paytmasi deb, а vektorga kollinear, uzunligi m a ga teng bo’lgan, m0, bo’lganda а vektor bilan bir xil yo’nalgan, m 0 bo’lganda esa unga qarama–qarshi yo’nalgan hamda m а bilan belgilanadigan vektorga aytiladi(20-chizma). Izoh. 1. Istalgan а vektorni uning uzunligi а bilan unga mos а 0 birlik vektorni ko’paytmasi shaklida tasvirlash mumkin, ya‘ni а = а 0 а . 2. а va b ( b 0 ) kollinear vektorlar uchun shunday yagona son mavjud bo’lib а = b tenglik o’rinli bo’ladi. Haqiqatan, а = а 0 а , b = b 0 b vektorlarni kollinearligidan 0 а = 0 b ekanligi kelib chiqadi. U holda а = а 0 b = b а b yoki b а = belgilashni kiritsak а = b hosil bo’ladi. Shunday qilib vektorlarni qo’shish, ayirish hamda vektorni songa ko’paytirish natijasida vektor hosil bo’lar ekan. Vektorlar ustida chiziqli amallar quyidagi xossalarga ega. 1. а + b =b + а (21а -chizma); 2. ( а + b )+ с =а + ( b + с ) (21b -chizma); 3. m( а + b )=m а + m b . 4. а +0= а ; 5. а +(- а )= 0 ; 6. а 1= а ; 7. (m+n) а = m а +n а , m va n haqiqiy sonlar; 8. (mn) а = m(n а )=n (m а ). 4.4. Ikki vektor orasidagi burchak tushunchasi. 25 Fazoda а va b vektorlar berilgan bo’lsin. Fazoda ixtiyoriy 0 nuqtani olib ОА =а va ОВ =b vektorlarni yasaymiz. 5-tarif. а va b vektorlar orasidagi burchak deb ОА va ОВ vektorlardan birini ikkinchisi bilan ustma-ust tushishi uchun burilishi lozim bo’lgan (0 ) burchakka aytiladi. а vektor bilan o’q orasidagi burchak deganda а vektor bilan o’qda joylashgan va у bilan bir xil yo’nalgan 0 birlik vektor orasidagi burchak tushiniladi. а va b vektorlar orasidagi burchak ( а ^ b ) kabi belgilanadi. Ikki vektorning skalyar ko’paytmasi а ·b = а · b ·cos( а ^ b ) dan cos( а ^ b )= а b а b ni topamiz. Agar vektorlar а =а х i + a y j + a z k , b =bх i +bу j +bz k yoyilmari yordamida berilgan bo’lsa, u holda (7.9) dan hamda vektorni uzunligini topish formulasi (6.6) dan foydalanib vektorlar orasidagi burchakning kosinusini topish uchun. Mavzu: Bir o’lchovli massivlarni funksiya parametrlari sifatida qo’llanishi. Reja: 1. Massivlar funksiya parametrlari sifatida 2. Funktsiya operator tomonidan chaqirilganda chop etish. 3. Funktsiya sarlavhasi. Massivlar funksiya parametrlari sifatida Bir o'lchovli massivni funktsiyaga o'tkazish Massivni funktsiya parametri sifatida ishlatish hech qanday qiyinchilik tug'dirmaydi. Yuqorida aytib o'tganimizdek, massiv har doim manzil bo'yicha quyi dasturga uzatiladi, shuning uchun funktsiyani chaqirishda massiv boshining manzilini yoki massivga ishlov berilishi kerak bo'lgan elementning manzilini ko'rsatish kifoya. Misol. Massiv elementlarini chop etish funksiyasini chaqiruvchi dastur yozing. Mumkin yechim: #include std nom maydonidan foydalanish; bekor chop etish(int x[], int n); int main() {
const int n = 5; int x[n] = {3, 5, 1,7, 4}; chop etish (x, n); qaytish 0; }
bekor chop etish (int x[], int n) {
cout << "Masiv:" << endl; for(int i = 0; i < n; i++) cout << x[i] << endl; }
Funktsiya operator tomonidan chaqirilganda chop etish (x, n); unga x massiv boshining manzili va n elementlar soni uzatiladi. Elementlar soni n qiymat bo'yicha o'tkaziladi va bu erda hamma narsa aniq bo'lishi kerak, ammo massivning o'zi o'tkazilishi bilan ba'zi tushunmovchiliklar bo'lishi mumkin, uni bartaraf etish kerak. Demak, massiv funksiyaga manzil bo‘yicha uzatilishi kerak va bizga butun massiv quyi dasturda kerak, shuning uchun funktsiya chaqiruvini quyidagicha yozish mantiqan to‘g‘ri keladi: chop etish(&x[0], n); Massivning ko'pincha pastki dasturga boshidan o'tkazilishini hisobga olgan holda, tilni ishlab chiquvchilar &x[0] shaklining kiritilishini x ga qisqartirdilar, ya'ni. Massivga nomi bo'yicha murojaat qilish 0 indeksidagi elementga manzil bo'yicha murojaat qilish bilan tengdir. Funktsiya sarlavhasida void print(int x[], int n) // 1-variant ikkita rasmiy parametr. x[] yozuvi uning pastki dasturga uzatiladigan massiv ekanligini bildiradi. Sarlavha quyidagicha ko'rinishi mumkin: void print(int *x, int n) // 2-variant Massiv manzil bo'yicha uzatiladi, shuning uchun biz birinchi parametrni int tipidagi ob'ektga manzil sifatida yozamiz. Ushbu ko'rsatkich ob'ekti chaqiruvchi funksiyada baholanadigan massiv elementining manzilini oladi (masalan, main() da). Qaysi shakldan foydalanish kerak? Bu lazzat masalasi. Kompilyator 1-variantni 2-variantga ekvivalent deb hisoblaydi, garchi bu odam uchun 1-variant aniqroq bo'lsa ham. Bu shuni ko'rsatadiki, rasmiy parametr, masalan, bitta elementga ko'rsatgich emas, balki aynan massivdir. Qo'ng'iroq qilishda x ni &x[0] sifatida ko'rib chiqish, agar kerak bo'lsa, subprogrammaga butun massivni emas, balki qaysidir manzildan boshlab uning faqat bir qismini o'tkazish imkonini beradi. Masalan, qo'ng'iroq qiling chop etish(&x[2], n - 2); 2 indeksli elementdan boshlab, massivning uchta elementini ekranda ko'rsatishga olib keladi. Shu bilan birga, funktsiyaning o'zi hech qanday o'zgartirishni talab qilmaydi. Shu nuqtai nazardan, C/C++ tillari boshqa ko'plab tillarga qaraganda ancha qulayroqdir. Shunday qilib, Paskal yoki BASICda yana bitta parametrni pastki dasturga o'tkazish kerak bo'ladi - massivni qayta ishlashni boshlash kerak bo'lgan elementning raqami va keyin bu raqamni sikl operatorida ishlating. Matritsa funktsiya parametri sifatida Matritsani pastki dasturga parametr sifatida o'tkazish bir o'lchovli massivni o'tkazishdan ko'ra biroz murakkabroq. Matritsa manzil bo'yicha ham o'tkaziladi. Funksiyani chaqirishda matritsa nomini ko'rsatish kifoya (bu ikki o'lchovli massiv boshining manzili bo'ladi), lekin matritsa tavsifini rasmiy parametrlar ro'yxatida qanday ko'rsatish kerak? Matritsa, yuqorida aytib o'tilganidek, massivlar massividir. Shuning uchun siz rasmiy parametrni quyidagicha yozishga harakat qilishingiz mumkin: Maʼlumotlar turi nomi[][] Afsuski, bu ishlamaydi. Birinchi bo'sh kvadrat qavslar biz massiv bilan ishlayotganimizni ko'rsatadi. Bu qabul qilinadi. Kvadrat qavslarning ikkinchi juftligi, bu ham massiv ekanligini ko'rsatuvchi belgi sifatida xatolik hosil qiladi. Bu erda kompilyator batafsilroq ma'lumot olishni xohlaydi. Noma'lum massivlar massivi unga mos kelmaydi. Ikkinchi qavslarda siz doimiyni yozishingiz kerak, shunda kompilyator matritsadagi xotira satrlar va ustunlar bo'ylab qanday taqsimlanganligini tushunishi mumkin. Shunday qilib, yozish mumkin Maʼlumotlar turi nomi[][Doimiy] Keling, yuqoridagilarni tushuntiruvchi kichik bir misolni ko'rib chiqaylik. Misol. Monitor ekranida butun son matritsasining qiymatlarini ko'rsatish funksiyasini yozing va sinab ko'ring. Mumkin amalga oshirish: #include std nom maydonidan foydalanish; # M 3 ni aniqlang void PrintMatr(int a[][M], int n, int m); int main() {
const int n=2; const int m=M; int a[n][m] = {{5, 4, -1}, {2, 6, 7}}; PrintMatr(a, n, m); qaytish 0; }
// Matritsani monitor ekranida ko'rsatish void PrintMatr(int a[][M], int n, int m) {
int i, j; cout << "Matriza:" << endl; for(i = 0; i < n; i++) {
for(j = 0; j < m; j++) cout << a[i][j] << " "; cout << endl; }
} Matritsani pastki dasturga o'tkazish qulaymi? Umuman olganda, yo'q. Bu faqat bir xil o'lchamdagi matritsalarga ega bo'lgan kichik dasturlar uchun qabul qilinadi. Turli o'lchamdagi bir nechta matritsalar uchun siz maksimal qatorlar sonini (M) berishingiz mumkin. Agar siz funktsiyani kompilyatsiya qilishni va uning ob'ekt modulini kutubxonaga kiritishni xohlasangiz yoki kerak bo'lsa-chi? Bu holatda global nom (M) mutlaqo qabul qilinishi mumkin emas. Mavzu:Matritsalarni funksiya parametri sifatida qo’llanishi. Reja: Matritsalar bilan ishlash. Matritsa qoidalari. 3. Funktsiyaning kirish argumenti. Matritsalar bilan ishlash (ushbu maqolada biz faqat ikki o'lchovli matritsalarni ko'rib chiqamiz) chiziqli algebra sohasidagi kuchli matematik nazariyaga asoslanadi. Bir ta'rif yoki harakat boshqasidan kelib chiqadi, bir funktsiya boshqasini chaqiradi. Shuning uchun funktsional tillar matritsalar bo'yicha matematik operatsiyalar funksionalligini dasturiy ta'minotni amalga oshirish uchun juda mos keladi. Ushbu maqolada biz F# tilidagi aniq misollarni ko'rib chiqamiz va uning qanday ishlashi haqida batafsil izoh beramiz. F# .NET oilasining bir qismi bo'lganligi sababli, natijada olingan funksionallik C# kabi boshqa imperativ tillarda muammosiz ishlatilishi mumkin. Matritsalar chiziqli algebraning asosiy va eng muhim qismidir. Matritsalar ko'pincha dasturlashda, masalan, 3D modellashtirish yoki o'yinni ishlab chiqishda qo'llaniladi. Albatta, g'ildirak uzoq vaqtdan beri ixtiro qilingan va matritsalar bilan ishlash uchun kerakli ramkalar allaqachon tayyor va ulardan foydalanish mumkin va kerak. Ushbu maqola yangi ramka ixtiro qilishni maqsad qilgan emas, balki F# dasturlash tilidan foydalangan holda funktsional uslubda matritsalar bilan ishlash uchun asosiy matematik operatsiyalarni amalga oshirishni ko'rsatadi. Materialni ko'rib chiqqach, biz matritsalarning matematik nazariyasiga murojaat qilamiz va uni kodda qanday amalga oshirish mumkinligini ko'rib chiqamiz. Birinchidan, matritsa nima ekanligini eslaylik? Nazariya bizga quyidagilarni aytadi m satr va n ta ustundan iborat to‘rtburchaklar jadvali m x n matritsa deyiladi. Matritsalar, qoida tariqasida, lotin alifbosining bosh harflari bilan belgilanadi va shunday yoziladi. Yoki qisqa vaqt ichida F# da matritsalar bilan ishlash uchun biz ikki o'lchovli jadval asosida yozuv yaratamiz, keyinchalik u ustida kerakli matematik amallarni bajarish uchun foydali usullar bilan kengaytiramiz. Matritsa turi = { qiymatlar: int[,] } bilan // bu erda usullarni qo'shamiz oxiri Ikki o'lchovli massiv bilan yozuvni ishga tushirish uchun yordamchi usulni qo'shamiz Array2D statik a'zosi (qiymatlar: int[,]) = {qiymatlar = qiymatlar} Funktsiyaning kirish argumenti ikki o'lchovli massiv bo'ladi va uning chiqishi Matrix tipidagi yozuv bo'ladi. Quyida yozuvni ishga tushirish misoli keltirilgan. a = massiv2D[[1;0;2] bo'lsin [3;1;0]] A = Matrix.ofArray2D a bo'lsin Ikki matritsa A=(aij) va B=(bij) teng deyiladi, agar ular element boʻyicha mos kelsa, yaʼni. aij=bij hamma uchun i=1,2...,m va j=1,2...n Ushbu qoidani amalga oshirish uchun biz bekor qilingan == operatoridan foydalanamiz va kelajakda bizga kerak bo'ladigan bir nechta foydali funktsiyalarni qo'shamiz. statik a'zo o'lchamlari matritsasi = qatorlar = matritsa.qiymatlar.[*,0].Uzunlik cols = matritsa.qiymatlar.[0,*].Uzunlik (qatorlar, ustunlar) statik a'zo teng o'lchamli matritsa1 matritsa2 = let dim1 = Matrix.sizes matrix1 let dim2 = Matrix.sizes matrix2 (dim1=dim2) statik a'zo (==) (matritsa1, matritsa2) = bo'lmasa (Matrix.isEquallySized matrix1 matrix2) u holda noto'g'ri boshqa emas(matritsa1.qiymatlar |> Array2D.mapi (qiziq x y v -> agar matrix2.qiymatlari bo'lsa.[x, y] <> v keyin noto'g'ri, aks holda rost) |>Seq.cast |> Seq. o'z ichiga noto'g'ri) Keling, yuqoridagi kodni batafsil ko'rib chiqaylik. Ko'rib turganingizdek, bu erda uchta funktsiya mavjud. Birinchi o'lchamlar funktsiyasi matritsaning o'lchamini kortej sifatida qaytaradi. Biz faqat to'rtburchaklar matritsalar bilan ishlayotganimiz sababli, qatorlar sonini olish uchun biz birinchi ustunning to'liq qismini olamiz va uning uzunligini qaytaramiz. kki matritsa elementini element bo'yicha taqqoslash uchun == operatori ancha murakkab ko'rinadi, ammo endi siz bu ham oddiy ekanligini ko'rasiz. Ikki matritsani solishtirishdan oldin ularning o'lchamlarini solishtiramiz. Agar ular teng bo'lmasa, unda keyingi tekshirishning ma'nosi yo'q, chunki matritsalar ham teng bo'lmasligi allaqachon aniq. bo'lmasa (Matrix.isEquallySized matrix1 matrix2) u holda noto'g'ri Keyinchalik, dastlabki matritsalar matritsalari 1 va matritsalar asosida, ikkala matritsaning mos keladigan kataklari mos kelishiga qarab, haqiqiy yoki noto'g'ri bilan to'ldirilgan yangi matritsa hosil qilamiz. matritsa1.qiymatlari |> Array2D.mapi (qiziqarli x y v -> agar matrix2. qiymatlari bo'lsa.[x, y] <> v keyin noto'g'ri, aks holda rost Array2D.mapi funksiyasi matritsa1 ning barcha elementlarini takrorlaydi va ishlov beruvchiga uchta parametrni uzatadi x - qator indeksi y - ustun indeksi v - hujayra tarkibi Biz v katak tarkibini mos keladigan hujayra matritsasi2 bilan solishtiramiz va agar ular teng bo'lsa, biz rost, aks holda noto'g'ri deb yozamiz. Agar noto'g'ri elementga ega kamida bitta hujayra bo'lsa, bu matritsalar bir-biriga teng emasligini anglatadi. Array2D filtrlash yoki qidirish usullarini o'z ichiga olmaydi, biz uni o'zimiz amalga oshiramiz. Buning uchun matritsani chiziqli ro'yxatga ajratamiz. Mavzu:Vektorlarni funksiya parametrlari sifatida qo’llanishi. Download 185.03 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling