Mirzo Ulug’bek nomidagi O’zbekiston Milliy universiteti Jizzax filiali
Download 0.81 Mb. Pdf ko'rish
|
Kurs ishi Ubaydullayev Temurbek....
Mirzo Ulug’bek nomidagi O’zbekiston Milliy universiteti Jizzax filiali “Amaliy matematika” fakulteti “Amaliy matematika va informatika” kafedrasi “Dasturlash asoslar” fanidan KURS ISHI Mavzu: Chiziqli tenglamalar sistemasini yechishning Gauss usuli va uning dasturiy taminotini yaratish. Bajardi: 103-guruh talabasi Ubaydullayev Temurbek Ilmiy rahbar: To’raqulov Olim Jizzax-2020 MUNDARIJA KIRISH …………………………………………………………….……….
Chiziqli algebraik tenglamalar sistemasini yechishning Gauss usuli ……………………………………
………
3. Chiziqli algebraik tenglamalar sistemasini yechishning dasturiy taminoti …………………………………
Kirish. Vaqt o‘tishi bilan dasturchilar oldiga quyilgan masalalar o‘zgarib boryapti. Bundan yigirma yil oldin dasturlar katta hajmdagi ma’lumotlarni qayta ishlash uchun tuzilar edi. Bunda dasturni yozuvchi ham, uning foydalanuvchisi ham kompyuter sohasidagi bilimlar bo‘yicha professional bo‘lishi talab etilardi. Hozirda esa ko‘pgina o‘zgarishlar ro‘y berdi. Kompyuter bilan ko‘proq uning apparat va dasturiy ta’minoti, haqida tushunchalarga ega bo‘lmagan kishilar ishlashyapti. Kompyuter odamlar tomonidan uni, chuqur o‘rganish vositasi emas, ko‘proq o‘zlarining oldilariga qo‘yilgan, o‘zlarining ishlariga tegishli bo‘lgan muammolarini echish instrumenti bo‘lib qoldi. Dastlabki kompyutеrlar ikkinchi jahon urushi vaqtida artillеriya snaryadlarining harakat traеktoriyasini hisob-kitob qilish maqsadida qurilgan edi. Oldin dasturchilar eng sodda mashina tilini uzida ifodalovchi kompyutеr komandalari bilan ishlaganlar. Bu komandalar nol va birlardan tashkil topgan uzun qatorlardan iborat bular edi. Kеyinchalik, insonlar uchun tushunarli bulgan mashina komandalarini uzida saqlovchi (masalan, ADD va MOV komandalari) assеmblеr tili yaratildi. Shu vaqtlarda BASIC va COBOL singari yuqori sathli tillar ham paydo buldiki, bu tillar tufayli suz va gaplarning mantiqiy konstruktsiyasidan foydalanib dasturlash imkoniyati yaratildi. Bu komandalarni mashina tiliga intеrprеtatorlar va kompilyatorlar kuchirar edi. Intеrprеtator dasturniuqish jarayonida uning komandalarini kеtma - kеt mashina tiliga utkazadi. Kompilyator esa yaxlit programma kodini biror bir oraliq forma - ob'еkt fayliga utkazadi. Bu bosqich kompilyatsiya bosqichi dеyiladi. Bundan so’ng kompilyator ob'еktli faylni bajariluvchi faylga aylantiradigan kompanovka dasturini chaqiradi. Intеrprеtatorlar bilan ishlash osonroq, chunki dastur komandalari qanday kеtma - kеtlikda yozilgan bulsa shu tarzda bajariladi. Bu esa dastur bajarilishini nazorat qilishni osonlashtiradi. Kompilyator esa kompilyatsiya va kompanovka kabi qushimcha bosqichlardan iborat bulganligi uchun ulardan hosil bo’ladigan bajariluvchi faylni tahlil qilish va uzgartirish imkoniyati mavjud emas. Faqatgina
kompilyatsiya qilingan fayl tеzroq bajariladi, chunki bundagi komandalar kompilyatsiya jarayonida mashina tiliga utkazilgan buladi. C++ kabi kompilyatsiya qiluvchi dasturlash tillarini yana bir afzalligi hosil bulgan dastur kompyutеrda kompilyatorsiz ham bajarilavеradi. Intеrprеtatsiya hiluvchi tillarda esa tayyor dasturni ishlatish uchun albatta mos intеrprеtator dasturi talab qilinadi. Kеyingi yillarda amaliy dasturchilarga juda kup intеgratsion dastur tuzish muhitlari taklif etilayapti. Bu muhitlar u yoki bu imkoniyatlari bilan bir-biridan farq qiladi. Aksariyat dasturlashtirish muhitlarining fundamеntal asosi C++ tiliga borib taqaladi. Biz ushbu mavzuda quyidagi savollarga javob olamiz: Nima uchun C++ tili dasturiy mahsulotlarni ishlab chiqish sohasida standart bulib qoldi? C++ tilida dastur ishlab chiqishni qanday uziga xos tomonlari bor? C++ tilida dastur qanday yoziladi va kompilyatsiya qilinadi? C++ tili tarixi.Birinchi elеktron hisoblash mashinalari paydo bўlishi bilan dasturlash tillari evolyutsiyasi boshlanadi.
mahsulotni bеlgilovchi suz sifatida ishlatiladi. Bu ikki xillik uquvchini chalg’itishi mumkin. Shuning uchun unga aniqlik kiritamiz. Dеmak dasturni yo dasturchi tomonidan yoziladigan komandalar tuplami, yoki amallar bajaradigan kompyutеr mahsuloti sifatida tushunish mumkin. C++ sistemasi asosan quyidagi qismlardan iborat. Bular dasturni yozish redaktori, C++ tili va standart kutubhonalardir. C++ dasturi ma'lum bir fazalardan o'tadi.
quyilgan masalalar uzgarib oryapti. Bundan yigirma yil oldin dasturlar katta hajmdagi ma'lumotlarni qayta ishlash uchun tuzilar edi. Bunda dasturni yozuvchi ham, uning foydalanuvchisi ham kompyutеr sohasidagi bilimlar buyicha profеssional bulishi talab etilardi. hozirda esa kupgina uzgarishlar ruy bеrdi. ompyutеr bilan kuproq uning apparat va dasturiy ta'minoti, haqida tushunchalarga ega bulmagan kishilar ishlashyapti. Kompyutеr odamlar tomonidan uni, chuqur urganish vositasi emas, kuproq uzlarining oldilariga quyilgan, uzlarining ishlariga tеgishli bulgan muammolarini еchish instrumеnti bulib qoldi. Foydalanuvchilarning ushbu yangi avlodini dasturlar bilan ishlashlarini osonlashtirilishi bilan bu dasturlarning uzini murakkabligi darajasi oshadi. Zamonaviy dasturlar - foydalanuvchi bilan do’stona munosabatni yuqori darajada tashkil qiladigan kup sondagi oynalar, mеnyu, muloqot oynalari va vizual grafikaviy muhitlardan tarkib topgan intеrfеysga ega bulishi lozim. Dasturlashga talabni uzgarishi nafaqat tillarning uzgarishiga balki uni yozish tеxnologiyasini ham uzgarishiga olib kеldi. Dasturlash evolyutsiyasi tarixida kupgina bosqichlar bulishiga qaramay biz bu kursimizda protsеdurali dasturlashdan ob'еktlarga muljallangan dasturlashga utishni qaraymiz. Dasturlashning bu yangi paradigmasi mashina tilida dasturlash paradigmasiga nisbatan ancha ilg‘or bo‘lib, unga tuzilmalashtirish- ning asosiy vositasi bo‘lgan protsyeduralar qo‘shilgan edi. Maydaroq funksiyalarni nafaqat tushunish, balki sozlash ham osonroq kechadi. Biroq, boshqa tomondan, protsyedurali dasturlash koddan takroran foydalanish imkonini chyeklab qo‘yadi. Buning ustiga dasturchilar tez-tez «makaron» dasturlar ham yozib turishganki, bu dasturlarni bajarish likopdagi spagyetti uyumini ajratishga o‘xshab ketar edi. Va, nihoyat, shu narsa aniq bo‘ldiki, protsyedurali dasturlash usullari bilan dasturlarni ishlab chiqishda diqqatni ma’lumotlarga qaratishning o‘zi muammolarni kyeltirib chiqarar ekan. Chunki ma’lumotlar va protsyedura ajralgan, ma’lumotlar inkapsulatsiyalanmagan. Bu nimaga olib kyeladi? Bu har bir protsyedura ma’lumotlarni nima qilish kyerakligini va ular qayyerda joylashganini bilmog‘i lozim bo‘ladi. Agar protsyedura o‘zini yomon tutsa-yu, ma’lumotlar ustidan noto‘g‘ri amallarni bajarsa, u ma’lumotlarni buzib qo‘yishi mumkin. Har bir protsyedura ma’lumotlarga kirish usullarini dasturlashi lozim bo‘lganligi tufayli, ma’lumotlar taqdimotining o‘zgarishi dasturning ushbu kirish amalga oshirilayotgan barcha o‘rinlarining o‘zgarishiga olib kyelar edi. Shunday qilib, hatto eng kichik to‘g‘rilash ham butun dasturda qator o‘zgarishlar sodir bo‘lishiga olib kelar edi. Kurs ishning maqsadi C++ andozalaridan foydalanib, amaliy masalalarni yechishni dasturlash prinsiplarini o’rganish ko’nikmalarini hosil qilish hisoblanadi. 1.Chiziqli algebrik tenglamalar sistemasini yechish. Nazariy va tadbiqiy matematikaning ko‘pgina masalalari birinchi darajali chiziqli tenglamalar sistemasini yechishga olib kelinadi. Masalan, funksiyaning n-ta nuqtada berilgan qiymatlari yordamida n-tartibli ko‘phad bilan interpolyatsiyalash yoki funksiyani o‘rta kvadratlar usuli yordamida yaqinlashtirish masalalari birinchi darajali chiziqli tenglamalar sistemasini yechishga keltiriladi. Birinchi darajali chiziqli tenglamalar sistemasini hosil qilishning manbai uzluksiz funksional tenglamalarni chekli ayirmali tenglamalar bilan
yaqinlashtirishdir. Birinchi darajali chiziqli tenglamalar sistemasini yechish asosan ikki usulga, ya’ni aniq va iteratsion usullarga bo‘linadi.
aniq bajarish natijasida masalaning aniq yechimini ishlarning limiti sifatida topiladi. Iteratsion usullarda chiziqli tenglamalar sistemasining yechimi ketma-ket yaqinlash Chiziqli tenglamalar sistemasini yechishning noma’lumlarni ketma-ket yo‘qotish orqali aniqlash usuli, ya’ni Gauss usulini ko‘rib chiqamiz. Bu usul bir necha hisoblash yo‘llariga ega. Shulardan biri Gaussning kompleks yo‘lidir. Ushbu sistema berilgan bo‘lsin: Faraz qilaylik, aoldidagi koeffisienti noldan farqli bo‘lgan tenglamani birinchi o‘ringa ko‘chiramiz. 11 ≠0 (etakchi element) bo‘lsin, aks holda tenglamalarning o‘rinlarini almashtirib, 1
Sistemadagi birinchi tenglamaning barcha koeffisientlarini a 11
ga bo‘lib, ni hosil qilamiz, bu yerda yoki qisqacha: (2) tenglamadan foydalanib, (1) sistemaning qolgan tenglamalarida xinchi va h.k. tenglamalaridan ayiramiz. Natijada, quyidagi sistema hosil bo‘ladi. 1 ni yo‘qotish mumkin. Buning uchun (2) tenglamani ketma-ket a 21 , a 31 , … larga ko‘paytirib, mos ravishda sistemaning ikkinchi, uchinchi va h.k. tenglamalaridan ayiramiz. Natijada, quyidagi sistema hosil bo‘ladi.
bu yerda koeffisientlar
formula yordamida hisoblanadi. Endi (3) sistema ustida ham shunga o‘xshash almashtirishlar bajaramiz. Buning uchun (3) sistemadagi birinchi tenglamaning barcha koeffisientlarini yetakchi element ga bo‘lib,
ni hosil qilamiz, bu yerda
(4) tenglama yordamida (3) sistemaning keyingi tenglamalarida yuqoridagidek x 2 ni yo‘qotib, quyda berilgan tenglikni hosil qilishimiz mumkin,
sistemaga kelamiz, bu yerda
Noma’lumlarni yo‘qotish jarayoni davom ettirilib, bu jarayonni m– qadamgacha bajarish mumkin deb faraz qilamiz va m – qadamda quyidagi sistemaga ega bo‘lamiz.
Faraz qilaylik, m mumkin bo‘lgan oxirgi qadamning nomeri bo‘lsin. Ikki hol bo‘lishi mumkin: m=n yoki m (1) sistemaga ekvivalent bo‘lgan quyidagi
sistemaga ega bo‘lamiz. Oxirgi sistemadan ketma-ket (x)larni topish mumkin
(6) uchburchak sistemasining koeffisientlarini topish Gauss usulining to‘g‘ri yurishi, (7) sistemadan yechimini topish Gauss usulining teskari yurishi deyiladi. Chiziqli tenglamalar sistemasini Gauss usuli yordamida yechish algoritmi va dasturi. Gauss usuli bilan quyidagi sistema yechilsin.
(8) tenglamadan x 1 ni topamiz (12) tenglamani (9) tenglamadagi x 1 ni o‘rniga qo‘yamiz va uni ixchamlaymiz.
(12) tenglamani (10) tenglamadagi x 1 ni o‘rniga qo‘yamiz va uni ixchamlaymiz.
(12) tenglamani (11) tenglamadagi x 1 ni o‘rniga qo‘yamiz va uni ixchamlaymiz.
Yuqoridagilardan quyidagi yangi tenglamalar sistemasini hosil qilamiz.
(13) tenglamadan x ni topamiz
(16) tenglamani (14) tenglamadagi ni o‘rniga qo‘yamiz va uni ixchamlaymiz
(16) tenglamani (15) tenglamadagi ni o‘rniga qo‘yamiz va uni ixchamlaymiz
Yuqoridagilardan qo‘yidagi yangi tenglamalar sistemasini hosil qilamiz
(17) tenglamadan ni topamiz
(19) tenglamani (18) tenglamadagi ni o‘rniga qo‘yamiz va uni ixchamlaymiz (20) tenglamaning qiymatini (19) tenglamadagi ni o‘rniga qo‘yib ni topamiz.
(21) va (20) qiymatlarini (18) tenglamadagi va 4 x ni o‘rniga qo‘yibni topamiz.
(20), (21) va(22) larni qiymatlarini (12) tenglamadagi x 23 4 ni o‘rniga qo‘yib x 1 , xva xlar ni topamiz.
[]11=x[]12=x[]13=x[]14−=x Tenglamalar sistemasi qo‘lda yechilganda hisoblashlarni 1-jadvalda ko‘rsatilgan Gaussning kompakt sxemasi bo‘yicha olib borish ma’quldir.
Soddalik uchun jadvalda to‘rtta no’malumli to‘rtta tenglamalar sistemasini yechish sxemasi keltirilgan .
2. Blok sxemalari.
Dasrturlash tillarini o’rganishda qaysi tilde bulishidan qatiy nazar dasturlashni o’rganish muhimroq shuning uchun faqatgina C++ tilida emas boshqa tillda dastur kodini yozib keyin esa C++ tilida yozib farqlarini ko’rib chiqamiz. Program Gauss1; label 1,2,3,4,5; var a:array[1..10, 1..10] of real; b,x:array[1..10] of real; c,s:real; i,j,k,n:integer; begin
readln(n); for i:=1 to n do begin for j:=1 to n do read(a[i,j]); readln(b[i]); end; k:=1;
3: i:=k+1; 2: c:=a[i,k]/a[k,k]; a[i,k]:=0; j:=k+1; 1: a[i,j]:=a[i,j]-c*a[k,j]; if j b[i]:=b[i]-c*b[k];
if i if k 5: j:=i+1; s:=0;
4: s:=s+a[i,j]*x[j]; if j x[i]:=(b[i]-s)/a[i,i];
if i>1 then begin i:=i-1; goto 5 end; for i:=1 to n do
writeln(x[i]:4:2); end.
C++ tilida. #include using namespace std; int main () { int mat [3][3],i,j; float determinant=0; cout<<"Enter elements of matrix row wise:\n"; for (i=0; i<3; i++) for (j=0; j<3; j++) cin>>mat[i][j]; printf("\n Given matrix is:"); for(i=0; i<3; i++){ cout<<"\n"; for (j=0; j<3; j++); cout< } //finding determinant for (i=0; i<3; i++) determinant=determinant+(mat[0][i]*(mat[1][(i+1)%3]*mat[2][(i+2)%3 ]-mat[1][(i+2)%3]*mat[2][i+1]%3)); cout<<"\n\ndeterminant:"< cout<<"\n\nInverse of matrix is:\n"; for (i=0; i<3; i++){ for (j=0; j<3; j++) cout<<((mat[(j+1)%3][(i+1)%3]*mat[(j+2)%3][(i+2)%3])- (mat[(j+1)%3][(i+2)%3]*mat[(j+2)%3][i+1]%3))/determinant<<"\t"; cout<<"\n"; } return 0; }
Quyidagi chiziqli tenglamalar sistemasini yeching:
Avval yuqorida ko’rib o’tgan masaladagidek, tenglamalar sistemasini AX=Bko`rinishda yozib olamiz. Bu yerda A – noma`lumlar koeffisentlardan tashkil topgan matritsa, B– ozod hadlardan tashkil topgan ustun (vektor), X– noma`lumlar ustuni (vektori). 1-masaladagidek, tenglamalar sistemasini
A matritsani, ya`ni noma`lumlar koeffisentlarini A1:D4 maydonga, B vektorni, ya`ni ozod hadlarni F1:F4 maydonga kiritamiz. X vektor uchun H1:H4 maydonni belgilab =МУМНОЖ(МОБР(A1:D4);F1:F4) formulani kiritamiz va Ctrl+Shift+Enter tugmalarini birgalikda bosamiz. Natijada H1:H4 maydonda izlanayotgan noma`lumlar hosil bo`ladi:
Xulosa. Xulosa qilib shuni aytish keraki bu kurs ishida, C++ dasturlash tilidan foydalanib uning dasturiy ta’minotini yaratish tug’risida qisqacha ma’lumotni izoxladim. C++ kabi kompilyatsiya qiluvchi dasturlash tillarining afzalligi hosil bo’lgan kompyuterda kompilyatorsiz ham bajarilaveradi. Interpretatsiya qiluvchi tillarda esa tayyor dasturni ishlatish uchun albatta mos interpretator dasturi talab qilinadi. Ayrim tillaarda (masalan VISUAL BASIC) interpretator rolini dinamik bibliotekalar bajaradi. Java tilining interpretatori esa Virtual Mashinalar(Virtual Maxine yoki VM). Virtual mashinalar sifatida odatda baruzer(Internet Explorer yoki Netscape) lar qo’llaniladi. Ko’p yillar davomida dasturlarning asosiy imkoniyati uning qisqaligi va tez bajarilishi bilan belgilanib kelar edi. Dasturni kichikroq qilishga intilish kompyuter xotirasini juda qimmatliligi bilan bog’liq bo’lsa, uning tez bajarilishiga qiziqish protssessor vaqtining qimmatbaholigiga bog’liq edi. Lekin kompyuterlarning narxi tushishi bilan dastur imkoniyatini baholash mezoni o‘zgaradi. Hozirgi kunda dasturchining ish vaqti biznesda ishlatiladigan ko’pgina kompyuterlarning narxidan yuqori. Hozirda professional tarzda yozilgan va oson expluatatsiya qilinadigan dasturlarga talab oshib bormoqda. Expluatatsiyaning oddiyligi, konkret masalani yechish bilan bog’liq bo’lgan talabni ozroq o’zgarishiga, dasturni ortiqcha chiqimlarsiz oson moslashtirish bilan bog’liq moslashtirish bilan izohlanadi.
Foydalanilgan adabiyotlar ro’yxati. 1. Гради Буч. Объектно-ориентированный анализ и проектирование с примeрами приложeний на С++. Нeвский диалeкт. 2001. 2. И. Грeхем. Объектно-ориентированные мeтоды. Принципы и практика. Вильямс. 2004. 3. Г.С.Иванова. Объектно-ориентированное программирование. Учебник. МГТУ им. Баумана. 2003. 4. М.Фаулeр, К.Скотт. UML в кратком изложeнии. Примeнeние стандартного языка объектного модeлирования. М. Мир. 1999. 5. Г.Буч, Д. Рамбо, А. Джeкобсон. Язык UML: руководство пользоватeля. М. ДМК. 2000. 6. Пол Айра. Объектно-ориентированное программирование на С++. Второе издание. М. Бином. 1999. 7. В.В.Подбeльский. Язык С++. М. Финансы и статистика. 1996. 8. Б. Страуструп. Язык программирования С++. Трeтье издание. М. Бином. 1999.
9. Д. Либeрти. Освой самостоятeльно С++: 10 минут на урок. Пeр с англ. Вильямс. 2004. 10. Я.К.Шмидский. Программирование на языкe С++. Самоучитeль. Учебное пособие. Диалeктика. 2004. 11. А. Б. Крупник. Изучаем С++. Питeр. 2003. 12. С. Мeйерс. Наиболeе эффeктивное использование С++. 35 новых рeкомeндаций. ДМК-Прeсс. 2000. 13. Т. Фeйсон. Объектно-ориентированное программирование на С++ 4.5. Киев. Диалeктика. 1996. 14. Г. Шилдт. Самоучитeль С++. Второе издание. СПб. BHV. 1998.
15. Jess Liberti, “особая сомостоятелно” C++ za 21 den”, Sankt Peterburg 2000, 815 s. 16. Liberti D. Osvoy samostoyatelno C++: 10 minut na urok. Per s angl. Vilyams, 374 str,2004 g. 17. SHmidskiy YA.K. Prorammirovanie na yazыke C++: Samouchitel. Uchebnoe posobie. Dialektika. 361 str, 2004 g. 18. Kimmel P., «Borland C++5» . SPb.: BHV, 1997. 19. Sayfiev J. F., «C++ tiliga kirish», Buxoro 2004 y. 20. Nazirov SH. A., Qobulov R. V., «Ob’ektga mo‘ljallangan dasturlash», Toshkent 2006 y. 21. Boltaev SH. J., Elov B.B., «Zamonaviy dasturlash tillari», Buxoro 2004 y. 22. Sh.A, Nazirov, R.V.Qobulov “C++ tili”, Toshkent 2011 y. 23. Internetdan (ziyonet, dastirum.uz, google.uz, edu.uz).
Ilova
#include using namespace std; int main () { int mat [3][3],i,j; float determinant=0; cout<<"Enter elements of matrix row wise:\n"; for (i=0; i<3; i++) for (j=0; j<3; j++) cin>>mat[i][j]; printf("\n Given matrix is:"); for(i=0; i<3; i++){ cout<<"\n"; for (j=0; j<3; j++); cout< } //finding determinant for (i=0; i<3; i++) determinant=determinant+(mat[0][i]*(mat[1][(i+1)%3]*mat[2][(i+2)%3 ]-mat[1][(i+2)%3]*mat[2][i+1]%3)); cout<<"\n\ndeterminant:"< cout<<"\n\nInverse of matrix is:\n"; for (i=0; i<3; i++){ for (j=0; j<3; j++) cout<<((mat[(j+1)%3][(i+1)%3]*mat[(j+2)%3][(i+2)%3])- (mat[(j+1)%3][(i+2)%3]*mat[(j+2)%3][i+1]%3))/determinant<<"\t"; cout<<"\n"; } return 0; }
Download 0.81 Mb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling