logo

C++ da chiziqli tenglamalar sistemasini yechish dasturini ishlab chiqish

Загружено в:

19.11.2024

Скачано:

0

Размер:

303.15234375 KB
MAVZU:  C++ da chiziqli tenglamalar sistemasini yechish dasturini
ishlab chiqish  
 
                                        
                                            
II. ASOSIY QISM ................................................................................................
2.1. Chiziqli tenglamalar sistemasini matematik yechish usullari ....................
2.2. Tenglamalar sistemasini yechish agoritmi (Kramer) ..................................
2.3. Tenglamalar sistemasini yechishning dasturini ishlab chiqish ................. 11
III. XULOSA ...................................................................................................... 22
IV. FOYDALANILGAN ADABIYOTLAR ...................................................... 22
                                                                                                                                
1                                                     
                                                                 I .  KIRISH  
 
              Chiziqli   tenglamalar   sistemasi   -   bu   matematikada   va   ko ' plab   amaliy
sohalarda   muhim   rol   o ' ynaydigan   tushuncha   bo ' lib ,  ko ' plab   o ' zgaruvchilarning
bir   nechta   chiziqli   tenglamalariga   asoslangan .   Bu   tizimlar   ko ' plab   ilmiy ,
muhandislik   va   iqtisodiyot   masalalarini   yechishda   qo ' llaniladi .   Masalan ,
iqtisodiy   modellarni   yaratishda ,   fizika   va   kimyo   muammolarini   hal   qilishda ,
shuningdek ,   texnika   va   texnologiya   sohasidagi   muammolarni   hal   qilishda
chiziqli   tenglamalar   sistemasi   muhim   vosita   hisoblanadi . 
C ++  dasturlash   tili   keng   qamrovli   va   yuqori   samaradorlikka   ega   bo ' lgan
til   bo ' lib ,   uning   imkoniyatlari   va   kuchli   tomonlari   matematik   hisob - kitoblarni
amalga   oshirishda   juda   qo ' l   keladi .   C ++   ning   obyektga   yo ' naltirilgan
xususiyatlari ,   yuqori   tezlik   va   samaradorlikka   ega   bo ' lishi   matematik   va
muhandislik   hisob - kitoblarida ,   jumladan   chiziqli   tenglamalar   sistemasini
yechishda   keng   qo ' llaniladi .   Shuning   uchun   chiziqli   tenglamalar   sistemasini
yechish   algoritmlarini   C++   dasturlash   tilida   amalga   oshirish   muhim
ahamiyatga ega. 
Chiziqli   tenglamalar   sistemasining   ahmiyati.   Chiziqli   tenglamalar
sistemasining   yechimi   ko'plab   sohalarda   qo'llaniladi.   Misol   uchun,
iqtisodiyotda   iqtisodiy   ko'rsatkichlarni   bashorat   qilish,   muhandislikda
strukturaviy tahlil va dizayn masalalarini hal qilish, fizika va kimyoda esa har
xil   reaksiyalar   va   harakatlarni   model   qilishda   chiziqli   tenglamalar   sistemi
muhim o'rinni egallaydi. Shu bilan birga, kompyuter fanlari va sun'iy intellekt
sohalarida   ham   ma'lumotlarni   qayta   ishlash   va   analiz   qilishda   chiziqli
tenglamalar sistemasining qo'llanilishi keng tarqalgan. 
Chiziqli   tenglamalar   sistemasini   yechishning   ko'plab   usullari   mavjud,
lekin   ularning   eng   keng   tarqalgani   va   samaralisi   Gauss   eliminatsiyasi
algoritmidir. Gauss eliminatsiyasi algoritmi yordamida chiziqli tenglamalar
2                                       
 
System asini osonlik bilan yechish mumkin. Bu algoritm chiziqli tenglamalar
sistemasini   bosqichma-bosqich   soddalashtirish   va   nihoyat   yechimga   olib
kelish
  prinsipiga   asoslanadi.   Algoritm   matritsa   shaklida   berilgan   chiziqli
tenglamalar   sistemasini   uchburchak   matritsaga   aylantiradi   va   keyinchalik
ushbu uchburchak matritsani teskari tartibda yechadi. 
C++ dasturlash tilida chiziqli tenglamalar sistemasini yechish uchun bir
nechta   asosiy   qadamlar   mavjud.   Dastlab,   foydalanuvchidan   kerakli
ma'lumotlarni   kiritish   uchun   qulay  interfeys   yaratish   lozim.   Keyin,   kiritilgan
ma'lumotlar   asosida   matritsa   va   vektorlarni   yaratish   va   ularga   tegishli
amallarni bajarish uchun sinflar  va funksiyalar  yozish kerak. Nihoyat, Gauss
eliminatsiyasi   algoritmini   amalga   oshirish   va   natijalarni   chiqarish   uchun
kerakli kodni yozish lozim. 
Ushbu   loyiha   doirasida,   biz   chiziqli   tenglamalar   sistemasini   yechish
dasturini yaratishda C++ dasturlash tilining kuchli tomonlaridan foydalangan
holda, samarali va foydalanuvchi uchun qulay bo'lgan dastur ishlab chiqishni
maqsad   qilganmiz.   Ushbu   dasturni   ishlab   chiqish   jarayoni   matematik   hisob-
kitoblarni   dasturlash   tilida   qanday   amalga   oshirishni   o'rganish   uchun   ajoyib
imkoniyat   bo'lib,   chiziqli   algebra   va   algoritmika   bo'yicha   bilimlarni   ham
mustahkamlash imkonini beradi. 
   
3                                                 
II.  ASOSIY QISM 
 
2.1.   Chiziqli tenglamalar sistemasini matematik yechish 
usullari 
 
Kramer   qoidasi.   n   noma’lumli   n   ta   chiziqli   tenglamalar   sistemasi
quyidagi ko`rinishga ega: 
 
Bu yerda  ??????
????????????  sonlarga sistemaning koeffitsientlari,  ??????
??????  ozod hadlar,  ?????? 1,  ?????? 2, … , 
????????????  – noma’lumlar deyiladi.  
Ta’rif.   Agar   (3)   sistemaning   har   bir   tenglamasidagi   ?????? 1,   ?????? 2,   …   ,   ????????????
noma’lumlar   o`rniga   mos   ravishda   ?????? 1,   ?????? 2,   …   ,   ????????????   qiymatlar   qo`yilganda
sistemaning barcha tenglamalari ayniyatga aylansa,  ?????? 1,  ?????? 2, … ,  ????????????  sonlar (3)
sistemaning   yechimi   deyiladi.   Sistemaning   yechimi   mavjud   bo`lish   –
bo`lmasligi quyidagi determinantga bog’liqdir: 
 
(4)   determinant   (3)   sistemaning   noma’lumlari   oldidagi   koeffitsientlardan
tuzilgan. 
Agar ∆≠ 0 bo`lsa, sistema yagona yechimga ega bo`ladi va bu yechim 
 
4 formulalar yordamida topiladi.                            
Bunda ∆ ?????? 1 determinant ∆ determinantning b
irinchi   ustun   elementlarini   (3)   tenglamalar   sistemasining   ozod   hadlari   bilan
almashtirishdan   hosil   qilinadi;   ∆ ?????? 2   esa   ∆   determinantning   ikkinchi   ustun
elementlarini ozod hadlar bilan almashtirishdan hosil bo`ladi; ∆ ?????? 3 … ∆ ????????????  lar
ham   shunga   o`xshash   hosil   qilinadi.   (3)   tenglamalar   sistemasini   yechishning
bunday   usuli   Kramer   usuli   deyiladi.   Demak,   (3)   sistemani   yechish   uchun
(n+1) ta determinant tuzish va hisoblash kerak bo`ladi. 
Gauss   qoidasi.   Koeffitsientlari   sonlardan   iborat   bo`lgan   tenglamalar
sistemasi yechimlarini topish uchun qulay bo`lgan noma`lumlarni ketma – ket
yo`qotish   (chiqarish)   usulini,   ya’ni   Gauss   usulini   ko`rsatamiz.   Quyidagi
ixtiyoriy chiziqli tenglamalar sistemasi berilgan bo`lsin: 
(5) da  ??????
11  ≠ 0 deb faraz qilaylik. Dastlab birinchi tenglamadan tashqari barcha
tenglamalardan   ?????? 1   ni   yo`qotib,   (5)   sistemani   o`zgartiramiz.   Buning   uchun
birinchi tenglamaning har ikkala tomonini  ??????
11  ≠ 0 ga bo`lib chiqamiz. Natijada
(5) sistemaga ekvivalent bo`lgan yangi sistemani hosil qilamiz: 
Endi (6) sistemaning birinchi tenglamasini  ?????? 21 ga ko`paytiramiz va uni
ikkinchi   tenglamadan   ayiramiz.   So`ngra   birinchi   tenglamani   ?????? 31   ga
5 ko`paytiramiz   va   uchinchi   tenglamadan   ayiramiz   va   hokazo.   Natijada
quyidagi, yana (5) sistemaga teng kuchli ushbu yangi sistemani hosil qilamiz: 
Endi  (7) sistemaning ikkinchi tenglamasini   ??????
22  ̀  koeffitsientga bo`lamiz
va   hosil   bo`lgan   sistemaning   ikkinchi   tenglamasini   ketma   –   ket   ??????
32  
̀   ,   ??????
?????? 2	
̀
koeffitsientlarga   ko`paytirib   uchinchi   tenglamadan   boshlab   navbati   bilan
ayiramiz.  Natijada  (7)   ga teng  kuchli  sistema  hosil   bo`ladi. Agar  (5)  sistema
birgalikda bo`lsa, u holda natijada quyidagi 
sistemaga (bunda p 
sistemaga   ega   bo`lamiz.   (8)   sistema   pog’onali   sistema,   (9)   sistema   esa
uchburchak sistema deb ataladi. (9) sistema uchburchak bo`lgan holda so`nggi
tenglamadan   ??????
??????   ni   topamiz,   so`ngra   ??????
??????   ning   qiymatini   oldingi   tenglamaga
6 qo`yib   ??????
?????? −1   ni topamiz va hokazo. Demak, agar (5) tenglamalar sistemasi  bir
qator elementar almashtirishlarni bajargandan so`ng (9) uchburchak sistemaga
keltirilsa,   u   holda   (5)   sistemaning   birgalikda   va   u   yagona   yechimga   ega
ekenligi   kelib   chiqadi.  Agar   (5)   sistema   (8)   pog’onali   sistemaga   keltirilsa,   u
holda   (5)   sistema   yechimga   ega   bo`lmaydi   yoki   cheksiz   ko`p   yechimga   ega
bo`ladi. (8) tenglamalar sistemasini quyidagi ko`rinishda yozib olamiz: 
Bu   sistemadagi   ??????
?????? +1   ,   …   ,   ??????
??????   noma’lumlarga   ixtiyoriy   ??????
?????? +1   ,   …   ,   ??????
??????
qiymatlar berib, uchburchak sistemani hosil qilamiz. Undan esa qolgan barcha
??????
?????? ,   ??????
?????? −1 , … ,   ??????
1   noma’lumlarni ketma – ket topamiz.   ??????
?????? +1 , … ,   ??????
??????   sonlar turli
qiymatlarni qabul qilishligidan (5) sistema cheksiz ko`p yechimlar to`plamiga
ega ekanligi kelib chiqadi. 
 
2.2. Tenglamalar sistemasini yechish agoritmi (Kramer) 
x , x , x , ..., x  o'zgaruvchilar qiymatlarini topish uchun AX = B (yoki) ₁ ₂ ₃ ₙ
tizimini   yechish   uchun   Kramer   qoidasi   formulasi.      Tenglamalar         tizimini   
yechish uchun: 
• det |A| toping va uni D bilan ifodalaydi. 
• D , D , D , ..., D  determinantlarini  toping, bunda D	
ₓ₁ ₓ₂ ₓ₃ ₓₙ ₓ ᵢ  A matritsaning
determinanti, bunda I  
ustun B      ustun        matritsasi         bilan almashtiriladi . 
7 • Tegishli   o'zgaruvchilarning   qiymatini   topish   uchun   ushbu
determinantlarning har birini D ga ajratamiz. ya'ni,  x  = D /D,          x  =₁ ₓ₁ ₂
D /D   , ....,        x  = D /D. 	
ₓ₂ ₙ ₓₙ
E'tibor bering, tenglamalar tizimi faqat D ≠ 0 bo'lganda yagona yechimga ega.
Agar biz yuqoridagi barcha uchta bo'limda Kramer qoidasi formulasini
kuzatadigan   bo'lsak,   biz   hamma   joyda   D   ≠   0   ekanligini   aytib   o'tganmiz.
Buning   sababi   shundaki,   o'zgaruvchilar   qiymatlarini   topishda   D   maxrajda
bo'ladi va D = 0 bo'lsa, kasr (o'zgaruvchining qiymati) aniqlanmagan bo'ladi.
Shunday   qilib,   bu   qoida   faqat   D   ≠   0   bo'lganda   amal   qiladi.  Ammo   D   =   0
bo'lganda   tenglamalar   tizimi   haqida   nima   deyish   mumkin?   Keyin   ikkita
imkoniyat mavjud. 
• Tizimda hech     qanday        yechim        bo'lmasligi mumkin . 
• Tizim cheksiz ko'p echimlarga ega bo'lishi mumkin. 
Kramer   qoidasi   cheksiz   sonli   yechimlarni   topishga   yordam   bermasa
ham,   qoidani   qo llash   jarayoni   sifatida   hisoblaydigan   determinantlar	
ʻ
yordamida   tizimda   “yechim   yo q”   yoki   “cheksiz   sonli   yechimlar”	
ʻ
mavjudligini aniqlashimiz mumkin. 
• Agar D ≠ 0 bo'lsa, AX = B tizimi yagona yechimga ega deb aytamiz. 
• Agar D = 0 bo'lsa va numerator determinantlaridan kamida bittasi 0 bo'lsa,
tizim cheksiz ko'p echimlarga ega. 
• Agar D = 0 bo'lsa va numerator aniqlovchilarining hech biri 0 bo'lmasa, u
holda tizimning yechimi yo'q. 
8 Kramer qoidasini qo'llash bilan bog'liq ba'zi muhim eslatmalar: 
• Agar n ta o'zgaruvchi va n ta tenglama bo'lsa, biz (n + 1) determinantlarni
hisoblashimiz kerak. 
• Bu qoida faqat D ≠ 0 bo'lganda yechimlarni berishi mumkin. 
• Agar   D   =   0   bo'lsa,   tizimda   cheksiz   miqdordagi   echimlar   mavjud   yoki
echimlar yo'q. 
• Tizimda   cheksiz   ko'p   echimlar   mavjud   bo'lsa,   biz   ushbu   qoidadan
foydalanib echimlarni topa olmaymiz. 
 
Kramer usuli blok-sxemasi: 
9 Gauss usuli blok-sxemasi: 
10  
 
2.3. Tenglamalar sistemasini yechishning dasturini ishlab chiqish 
 
11 Kramer usulini C++ tilida dasturini tuzish ketma ketligini ko’ramiz. 
Kerakli sarlavha fayllarini qo’shamiz. 
#include <iostream> 
#include <iomanip> 
#include <cmath>    nXn matritsasining determinantini 
hisoblash funksiyasini yozish: 
Funksiyani e’lon qilish: 
double determinant(double matrix[], int n) 
• Bu   satr   determinant   ikkita   argumentni   oladigan   funksiyani
belgilaydi: 
• matrix:   Kvadrat   matritsaning   elementlarini   ifodalovchi   1D   massiv
(foydalanuvchi mos yozuvlar orqali o'tkaziladi []). 
• n: Kvadrat matritsaning o'lchami (satr va ustunlar soni). 
  Funktsiya   matritsaning   hisoblangan   determinanti   bo'lgan   doubleqiymatni
qaytaradi. 
if (n == 1) {   return matrix[0]; } else if (n == 2) 
{   return matrix[0] * matrix[3] - matrix[1] * 
matrix[2]; } 
• Funktsiya ikkita asosiy holatni boshqaradi: 
o Agar n1 bo'lsa (1x1 matritsa), determinant oddiygina matritsadagi yagona 
element ( matrix[0]). 
o Agar   n2   bo'lsa   (2x2   matritsa),   determinant   formuladan   foydalanib
hisoblanadi 
matrix[0] * matrix[3] - matrix[1] * matrix[2]. 
Rekursiv holat (n > 2): 
else { 
  for (int i = 0; i < n; i++) 
{     double subMatrix[(n - 1) * (n
12 - 1)];     int subRow = 0;     for 
(int row = 1; row < n; row++) {  
int subCol = 0;       for (int col = 
0; col < n; col++) {         if (col !
= i) { 
          subMatrix[subRow * (n - 1) + subCol] = matrix[row * n + col];  
subCol++; 
        } 
      } 
      subRow++; 
    } 
    det += (i % 2 == 0 ? 1 : -1) * matrix[i] * determinant(subMatrix, n -
1); 
  
}
 
}
 
Ushbu blok o'lchami n 2 dan katta bo'lgan matritsalar bilan ishlaydi. 
• U matritsaning har bir ustuni bo'ylab takrorlanadi .i 
• Loop   ichida   joriy   satr   (   )   va   joriy   ustun   (   )   ni   hisobga   olmaganda
olingan   submatritsani   saqlash   uchun   o‘lchami   bilan   vaqtinchalik   massiv
subMatrixe’lon 
qilinadi .(n - 1) * (n - 1)ii 
13 • Yuvalangan halqalar submatritsani qurish uchun matritsaning qolgan
elementlarini   takrorlaydi   subMatrix.   Elementlar   nusxalanadi,   joriy
qatordagilar bundan mustasno i. 
• Keyin o'zgaruvchi detquyidagi bosqichlar yordamida yangilanadi: 
o Ifoda (i % 2 == 0 ? 1 : -1)element uchun kofaktorni hisoblab
chiqadi matrix[i]. U ustun indeksiga qarab 1 va -1 o'rtasida almashadi
i(juft ustunlar kofaktori 1 ga, toq ustunlar esa -1 ga ega). 
o Keyin   kofaktor   matrix[i]submatritsaning   elementi   va
determinanti bilan ko'paytiriladi determinant(subMatrix, n - 1). Ushbu
mahsulot   joriy   qatordagi   har   bir   elementning   hissasini   hisobga   olish
uchun akkumulyatorga qo'shiladi . 
Umumiy determinant hisoblash kodi: 
double determinant(double matrix[], int n) { 
    double det = 
0;     if (n == 1) 
{         return 
matrix[0];     } 
else if (n == 2) {
        return matrix[0] * matrix[3] - matrix[1] * matrix[2]; 
    } else { 
        for (int i = 0; i < n; i++) {          
double subMatrix[(n - 1) * (n - 1)];    
int subRow = 0; 
            for (int row = 1; row < n; row++)
{                 int subCol = 0; 
                for (int col = 0; col < n; col++) { 
                    if (col != i) { 
                        subMatrix[subRow * (n - 1) + subCol] = matrix[row * n
+ col]; 
                        subCol++; 
                    } 
                } 
                subRow++; 
            } 
            det += (i % 2 == 0 ? 1 : -1) * matrix[i] * 
determinant(subMatrix, n - 1); 
14         } 
    } 
    return det; 
}  
 
Kramer usuli yordamida nxn chiziqli tenglamalar tizimini yechish 
funksiyasini yozish: 
Funktsiya e’lon qilish: 
void cramersSolution(double matrix[], double constants[], int n) 
 
o Bu   satr   cramersSolution   uchta   argumentni   oladigan   funksiyani
belgilaydi: 
o matrix:   Koeffitsient   matritsasi   elementlarini   ifodalovchi   1D   massiv
(foydalanilgan mos yozuvlar orqali berilgan []).  o   constants: Tenglamalarning
o'ng tomonidagi doimiy shartlarni ifodalovchi 1D 
massiv (foydalanuvchi havola orqali berilgan []). 
o n: Kvadrat matritsaning o'lchami (satr va ustunlar soni). 
o Funktsiya   voidqaytish   turiga   ega,   ya'ni   u   hech   qanday   qiymat
qaytarmaydi, 
lekin to'g'ridan-to'g'ri konsolga echimlarni chop etadi. 
Aniqlovchini hisoblash:  
double det = determinant(matrix, n); if (det == 0) {   std::cout << "The
system of equations has no unique solution."  << std::endl;   return; 
}  
• Funktsiya   birinchi   navbatda   determinantkoeffitsient   matritsasi
determinantini   hisoblash   uchun   funktsiyani   chaqiradi   (boshqa   joyda
aniqlangan deb hisoblanadi). 
• Agar determinant ( det) nolga teng bo'lsa, bu tenglamalar tizimining
cheksiz   ko'p   yechimga   ega   ekanligini   yoki   umuman   yechim   yo'qligini
ko'rsatadi. Bunday holda, funksiya xabarni chop etadi va dan foydalanib, erta
qaytib keladi. 
15  
Yechimlar qatorini taqsimlash: 
 
double* solutions = new double[n]; 
 
• Har   bir   o'zgaruvchi   (x1,   x2,   ...,   xn)   uchun   hisoblangan   yechimlarni
saqlash   uchun   nomli   dinamik   ravishda   ajratilgan   massiv
solutionsyaratiladi .new double[n]  Har bir o‘zgaruvchi uchun yechish: 
 
for (int i = 0; i < n; i++) 
{   double subMatrix[(n - 1) * (n
- 1)];   int subRow = 0;   for (int
row = 0; row < n; row++) 
{     int subCol = 0;     for (int 
col = 0; col < n; col++) {       if 
(col != i) { 
        subMatrix[subRow * (n - 1) + subCol] = matrix[row * n + col];    
subCol++; 
      } 
    } 
    subMatrix[subRow * (n - 1) + i] = constants[row];     
subRow++; 
  } 
  solutions[i] = determinant(subMatrix, n) / 
det; }  
•   Kod itenglamalar tizimidagi har bir o'zgaruvchi ( ) orqali takrorlanadi. 
o Loop   ichida   koeffitsient   matritsasining   o'zgartirilgan   versiyasini   saqlash
uchun o'lchamli vaqtinchalik massiv e'lon qilinadi.subMatrix(n - 1) * (n - 1) 
o Yana bir ichki o'rnatilgan halqalar to'plami quyidagilarni yaratadi subMatrix: 
16 ▪ matrixU joriy ustundan ( ) tashqari asl koeffitsient matritsasi ( ) elementlarini
ko'chiradi i. 
▪ Joriy   ustunda   (   i)   u   elementlarni   massivdan   mos   keladigan   doimiy   shartlar
bilan almashtiradi constants. 
o Ushbu   o'zgartirilgan   submatritsaning   determinanti   yordamida   hisoblab
chiqiladi determinant(subMatrix, n). 
o Nihoyat,   o'zgaruvchining   yechimi   x[i]submatritsaning   determinantini
dastlabki   koeffitsient   matritsasi   (   det)   ning   determinantiga   bo'lish   yo'li   bilan
hisoblanadi.  Bu natija massivda saqlanadi solutions. 
 
Chop etish yechimlari:  
std::cout << "The solutions are: " << std::endl; for (int i = 0;
i < n; i++) {   std::cout << "x" << i + 1 << " = " << 
solutions[i] << std::endl; 
} 
 
• Agar   determinant   nolga   teng   bo'lmasa,   funktsiya   yechimlarni   ko'rsatuvchi
xabarni chop etadi. 
• U   massiv   bo'ylab   takrorlanadi   solutionsva   har   bir   o'zgaruvchining   qiymatini
(x1, x2, ..., xn) tegishli indeks bilan birga chop etadi. 
 
Xotirani ajratish:  
delete[] solutions; 
 
• Solutionsdan foydalanib dinamik ravishda ajratilganligi sababli new, funktsiya
delete[] solutionsxotira oqishini oldini olish uchun xotirani bo'shatadi. 
 
Asosiy qism: 
17 int n; std::cout << "Enter the size of the 
matrix (n): "; std::cin >> n; 
Foydalanuvchi matritsa o’lchamini kiritishni so’raydi. 
double* matrix = new double[n * n]; 
double* constants = new double[n]; 
Kod   dinamik   ravishda   koeffitsient   matritsasi   (   matrix)   va   doimiy
atamalar vektori ( constants) uchun xotira ajratadi new. Matritsaning o'lchami
n   x   n,   shuning   uchun   matrixmassiv   elementlarni   talab   qiladi   n   *   n(er-xotin
qiymatlar).   Massiv   har   bir   tenglamaning   doimiy   shartlarini   saqlash   uchun
elementlarni constantstalab qiladi. 
std::cout << "Enter the coefficients of the 
matrix:\n"; for (int i = 0; i < n; i++) {   for (int 
j = 0; j < n; j++) {     std::cin >> matrix[i * n 
+ j]; 
  } 
} std::cout << "Enter the constant 
terms:\n"; for (int i = 0; i < n; i++) { 
std::cin >> constants[i]; 
} 
U foydalanuvchidan koeffitsient matritsasi ( ) elementlarini kiritishni taklif
qiladi matrix. 
O'rnatilgan   tsikllar   matritsaning   har   bir   satri   (   i)   va   ustuni   (   )   bo'ylab
takrorlanadi va foydalanuvchidan tegishli qiymatni kiritish so'raladi. Ifoda satr
va ustundagi element uchun 1D massivida to'g'ri indeksni hisoblab chiqadi. 
Funksiyaga murojaat qilish: 
18 cramersSolution(matrix, constants, n); 
Xotirani tozalash: 
delete[] matrix;  
delete[] constants;
Dasturdan chiqish: 
return 0; 
Kramer usulida chiziqli tenglamani yechishning c++ tilidagi dasturi. 
#include <iostream> 
#include <iomanip> 
#include <cmath> 
double determinant(double matrix[], int n) { 
    double det = 
0;     if (n == 1) 
{         return 
matrix[0];     } 
else if (n == 2) {
        return matrix[0] * matrix[3] - matrix[1] * matrix[2]; 
    } else { 
        for (int i = 0; i < n; i++) {         
double subMatrix[(n - 1) * (n - 1)];   
int subRow = 0; 
            for (int row = 1; row < n; row++)
{                 int subCol = 0; 
                for (int col = 0; col < n; col++) { 
                    if (col != i) { 
                        subMatrix[subRow * (n - 1) + subCol] = matrix[row * n
+ 
col];                         
subCol++; 
                    }  } 
                subRow++; 
            } 
            det += (i % 2 == 0 ? 1 : -1) * matrix[i] * 
determinant(subMatrix, n - 1); 
        } } 
    return det; 
19 } 
void cramersSolution(double matrix[], double constants[], int n) {   
double det = determinant(matrix, n); 
    if (det == 0) { 
        std::cout << "The system of equations has no unique solution." 
<< 
std::endl;     
return;
    } 
    double* solutions = new 
double[n];     for (int i = 0; i < n; 
i++) {         double subMatrix[(n - 
1) * (n - 1)];         int subRow = 0; 
        for (int row = 0; row < n; row++)
{             int subCol = 0; 
            for (int col = 0; col < n; col++) { 
                if (col != i) { 
                    subMatrix[subRow * (n - 1) + subCol] = matrix[row * n +
col];                     subCol++; 
                } 
            } 
            subMatrix[subRow * (n - 1) + i] = constants[row];            
subRow++; 
        } 
        solutions[i] = determinant(subMatrix, n) / det; 
    } 
 
    std::cout << "The solutions are: " << std::endl; 
    for (int i = 0; i < n; i++) { 
        std::cout << "x" << i + 1 << " = " << solutions[i] << std::endl; 
    } 
    delete[] solutions; 
}   int
main(
)
{     in
t n; 
    std::cout << "Enter the size of the matrix (n): ";     
std::cin >> n; 
 
    double* matrix = new double[n * n]; 
20     double* constants = new double[n]; 
 
    std::cout << "Enter the coefficients of the matrix:\n"; 
    for (int i = 0; i < n; i++)
{         for (int j = 0; j < n; 
j++) { 
            std::cin >> matrix[i * n + j]; 
        } 
    } 
    std::cout << "Enter the constant terms:\n"; 
    for (int i = 0; i < n; i++) { 
        std::cin >> constants[i]; 
    } 
    cramersSolution(matrix, constants, n); 
        delete[]
matrix;
delete[]
constants;
return 0; 
}    
21 III. XULOSA 
 
Ushbu   kurs   ishida   biz   chiziqli   tenglamalar   tizimini   yechishda   keng
qo'llaniladigan  ikkita  usulni  ko'rib  chiqdik:  Kramer   (Kramer)  usuli   va  Gauss
yo'q   qilish   usuli.   Bu   ikkala   yondashuvning   ham   o‘ziga   xos   kuchli   va   zaif
tomonlari   bor   va   ular   o‘rtasidagi   tanlov   ko‘rib   chiqilayotgan   muammoning
o‘ziga xos talablari va xususiyatlariga bog‘liq. 
Kramer   usuli   nisbatan   sodda   usul   bo‘lib,   u   koeffitsient   matritsasi
determinantini   va   o‘zgartirilgan   matritsalarning  determinantlarini   hisoblashni
o‘z ichiga oladi 
Boshqa   tomondan,   Gaussni   yo'q   qilish   usuli   ko'p   qirrali   va   kattaroq
tenglamalar tizimlarini samaraliroq boshqarishi mumkin.  
Biz   C++   da   ishlab   chiqqan   dastur   Kramer   va   Gauss   eliminatsiya
usullarini amalga oshirishni ko‘rsatib, foydalanuvchiga tenglamalar tizimining
o‘lchami   va   murakkabligidan   kelib   chiqib,   ma’qullangan   usulni   tanlash
imkonini beradi. Dastur foydalanuvchidan tenglamalarning koeffitsientlari va
konstantalarini   kiritishni   taklif   qiladi   va   keyin   tanlangan   usul   yordamida
yechim(lar)ni taqdim etadi. 
Xulosa   qilib   aytadigan   bo'lsak,   ushbu   dasturning   C++   tilida   ishlab
chiqilishi   masalalarni   yechish,   algoritmlarni   loyihalash   va   dasturlash
ko'nikmalarida   qimmatli   mashq   bo'ldi.   Bu   chiziqli   algebra   va   chiziqli
tenglamalar   tizimini   yechishda   qo‘llaniladigan   raqamli   usullar   haqidagi
tushunchamizni mustahkamladi, bu bizning kelajakdagi ishlarimizda qimmatli
boylik bo‘ladi. Chiziqli tenglamalarni echish uchun eng mos usulni tanlash va
amalga   oshirish   qobiliyati   ko'plab   ilmiy   va   texnik   sohalarda   hal   qiluvchi
mahoratdir va bu loyiha bizga qurish uchun mustahkam poydevor yaratdi. 
   
IV. FOYDALANILGAN ADABIYOTLAR 
 
22   3.1   Sh.A.Sadullayeva,   A.Z.Maxmudov.   C++   DA   DASTURLASH   fanidan
o‘quv qo‘llanma, Toshkent 2017; 
3.2  A.X.Nishanov, U.U.Turapov. “C++ tilida dasturlash asoslari fani bo‘yicha
o‘quv-uslubiy majmua”. Toshkent-2016; 
3.3   J.Axmadaliyev,   R.Holdarboyev.   “   C++   tilini   o‘rganish   bo‘yicha
o‘quvuslubiy majmua”. Andijon-2015; 
 
INTERNET RESUSRLARI 
 
  3.1  https://byjus.com/maths/cramers    -   rule/       
  3.2    https://www.onlinemathlearning.com/cramers    -   rule.html       
   3.3   https://math.libretexts.org/Bookshelves/Algebra/Map%3A_College_Algebra
_(OpenStax)/09%3A_Systems_of_Equations_and_Inequalities/
9.08%3A_Solving     _Systems_with_Cramers_Rule    )    
 
 
23

MAVZU: C++ da chiziqli tenglamalar sistemasini yechish dasturini ishlab chiqish II. ASOSIY QISM ................................................................................................ 2.1. Chiziqli tenglamalar sistemasini matematik yechish usullari .................... 2.2. Tenglamalar sistemasini yechish agoritmi (Kramer) .................................. 2.3. Tenglamalar sistemasini yechishning dasturini ishlab chiqish ................. 11 III. XULOSA ...................................................................................................... 22 IV. FOYDALANILGAN ADABIYOTLAR ...................................................... 22 1

I . KIRISH Chiziqli tenglamalar sistemasi - bu matematikada va ko ' plab amaliy sohalarda muhim rol o ' ynaydigan tushuncha bo ' lib , ko ' plab o ' zgaruvchilarning bir nechta chiziqli tenglamalariga asoslangan . Bu tizimlar ko ' plab ilmiy , muhandislik va iqtisodiyot masalalarini yechishda qo ' llaniladi . Masalan , iqtisodiy modellarni yaratishda , fizika va kimyo muammolarini hal qilishda , shuningdek , texnika va texnologiya sohasidagi muammolarni hal qilishda chiziqli tenglamalar sistemasi muhim vosita hisoblanadi . C ++ dasturlash tili keng qamrovli va yuqori samaradorlikka ega bo ' lgan til bo ' lib , uning imkoniyatlari va kuchli tomonlari matematik hisob - kitoblarni amalga oshirishda juda qo ' l keladi . C ++ ning obyektga yo ' naltirilgan xususiyatlari , yuqori tezlik va samaradorlikka ega bo ' lishi matematik va muhandislik hisob - kitoblarida , jumladan chiziqli tenglamalar sistemasini yechishda keng qo ' llaniladi . Shuning uchun chiziqli tenglamalar sistemasini yechish algoritmlarini C++ dasturlash tilida amalga oshirish muhim ahamiyatga ega. Chiziqli tenglamalar sistemasining ahmiyati. Chiziqli tenglamalar sistemasining yechimi ko'plab sohalarda qo'llaniladi. Misol uchun, iqtisodiyotda iqtisodiy ko'rsatkichlarni bashorat qilish, muhandislikda strukturaviy tahlil va dizayn masalalarini hal qilish, fizika va kimyoda esa har xil reaksiyalar va harakatlarni model qilishda chiziqli tenglamalar sistemi muhim o'rinni egallaydi. Shu bilan birga, kompyuter fanlari va sun'iy intellekt sohalarida ham ma'lumotlarni qayta ishlash va analiz qilishda chiziqli tenglamalar sistemasining qo'llanilishi keng tarqalgan. Chiziqli tenglamalar sistemasini yechishning ko'plab usullari mavjud, lekin ularning eng keng tarqalgani va samaralisi Gauss eliminatsiyasi algoritmidir. Gauss eliminatsiyasi algoritmi yordamida chiziqli tenglamalar 2

System asini osonlik bilan yechish mumkin. Bu algoritm chiziqli tenglamalar sistemasini bosqichma-bosqich soddalashtirish va nihoyat yechimga olib kelish prinsipiga asoslanadi. Algoritm matritsa shaklida berilgan chiziqli tenglamalar sistemasini uchburchak matritsaga aylantiradi va keyinchalik ushbu uchburchak matritsani teskari tartibda yechadi. C++ dasturlash tilida chiziqli tenglamalar sistemasini yechish uchun bir nechta asosiy qadamlar mavjud. Dastlab, foydalanuvchidan kerakli ma'lumotlarni kiritish uchun qulay interfeys yaratish lozim. Keyin, kiritilgan ma'lumotlar asosida matritsa va vektorlarni yaratish va ularga tegishli amallarni bajarish uchun sinflar va funksiyalar yozish kerak. Nihoyat, Gauss eliminatsiyasi algoritmini amalga oshirish va natijalarni chiqarish uchun kerakli kodni yozish lozim. Ushbu loyiha doirasida, biz chiziqli tenglamalar sistemasini yechish dasturini yaratishda C++ dasturlash tilining kuchli tomonlaridan foydalangan holda, samarali va foydalanuvchi uchun qulay bo'lgan dastur ishlab chiqishni maqsad qilganmiz. Ushbu dasturni ishlab chiqish jarayoni matematik hisob- kitoblarni dasturlash tilida qanday amalga oshirishni o'rganish uchun ajoyib imkoniyat bo'lib, chiziqli algebra va algoritmika bo'yicha bilimlarni ham mustahkamlash imkonini beradi. 3

II. ASOSIY QISM 2.1. Chiziqli tenglamalar sistemasini matematik yechish usullari Kramer qoidasi. n noma’lumli n ta chiziqli tenglamalar sistemasi quyidagi ko`rinishga ega: Bu yerda ?????? ???????????? sonlarga sistemaning koeffitsientlari, ?????? ?????? ozod hadlar, ?????? 1, ?????? 2, … , ???????????? – noma’lumlar deyiladi. Ta’rif. Agar (3) sistemaning har bir tenglamasidagi ?????? 1, ?????? 2, … , ???????????? noma’lumlar o`rniga mos ravishda ?????? 1, ?????? 2, … , ???????????? qiymatlar qo`yilganda sistemaning barcha tenglamalari ayniyatga aylansa, ?????? 1, ?????? 2, … , ???????????? sonlar (3) sistemaning yechimi deyiladi. Sistemaning yechimi mavjud bo`lish – bo`lmasligi quyidagi determinantga bog’liqdir: (4) determinant (3) sistemaning noma’lumlari oldidagi koeffitsientlardan tuzilgan. Agar ∆≠ 0 bo`lsa, sistema yagona yechimga ega bo`ladi va bu yechim 4

formulalar yordamida topiladi. Bunda ∆ ?????? 1 determinant ∆ determinantning b irinchi ustun elementlarini (3) tenglamalar sistemasining ozod hadlari bilan almashtirishdan hosil qilinadi; ∆ ?????? 2 esa ∆ determinantning ikkinchi ustun elementlarini ozod hadlar bilan almashtirishdan hosil bo`ladi; ∆ ?????? 3 … ∆ ???????????? lar ham shunga o`xshash hosil qilinadi. (3) tenglamalar sistemasini yechishning bunday usuli Kramer usuli deyiladi. Demak, (3) sistemani yechish uchun (n+1) ta determinant tuzish va hisoblash kerak bo`ladi. Gauss qoidasi. Koeffitsientlari sonlardan iborat bo`lgan tenglamalar sistemasi yechimlarini topish uchun qulay bo`lgan noma`lumlarni ketma – ket yo`qotish (chiqarish) usulini, ya’ni Gauss usulini ko`rsatamiz. Quyidagi ixtiyoriy chiziqli tenglamalar sistemasi berilgan bo`lsin: (5) da ?????? 11 ≠ 0 deb faraz qilaylik. Dastlab birinchi tenglamadan tashqari barcha tenglamalardan ?????? 1 ni yo`qotib, (5) sistemani o`zgartiramiz. Buning uchun birinchi tenglamaning har ikkala tomonini ?????? 11 ≠ 0 ga bo`lib chiqamiz. Natijada (5) sistemaga ekvivalent bo`lgan yangi sistemani hosil qilamiz: Endi (6) sistemaning birinchi tenglamasini ?????? 21 ga ko`paytiramiz va uni ikkinchi tenglamadan ayiramiz. So`ngra birinchi tenglamani ?????? 31 ga 5