Massiv elelmentlarini tartiblashtirish. Matritsa maksimal, minimal elementlarini aniqlash algoritmi.
Massivlar haqidagi m asalalar ichida eng ko ‘p uchraydigani bu uning elementlarini o ‘sish yoki kamayish tartibida tartiblash masalasidir. Bu muammoni hal qilishning usullari k o ‘p b o ‘lib, ulardan birortasini boshqasidan ustun q o ‘yib bo ‘lmaydi. Har bir usul elementlar joy lashuviga k o ‘ra boshqasidan yaxshi b o ‘lishi mumkin.
1-usul. A[l\N ] massiv elementlarini o ‘sish tartibida tartiblash talab qilingan bo‘lsin.
Berilgan massiv elementlari ichidan eng kichigini topib, uning o ‘rni 1-element bilan almashtiriladi. Shu bilan 1-element tartiblandi. Endi 2-element tartiblanadi. Buning uchun qolgan elementlar ichidan eng kichigi topilib, uning o ‘mi 2-element bilan almashtiriladi va hokazo. Bu jarayon N -1 marta takrorlanganda tartiblash ham tugaydi. Bu usul uchun kod quyidagicha yoziladi:
# include
int mainQ
{
int min, a, j, k;
int i; int b [ 10]={56, 88, 75, 65, 78, 82, 79, 81, 68, 72};
f o r (i=0; i<=8; i+ + ) {
m in=b[i]; k=I;
f o r ( j= i+ l; j< = 9 ; j + + ) if (b[j]
a= b[i]; b[i]=b[k]; b[k]=a;j
f o r (i=0; i<=9; i+ +)
c o u t « b [ i ] « ” , “;
return 0;
}
Bu usul eng kichik elementni chiqarish usuli deyiladi.
2-usul. Ko ‘piksim on usul. Bu usulning asosiy g ‘oyasi yengil elementlarni yuzaga chiqarishdan iborat bo"lib, xuddi suv ichidan chiqayotgan pufakchalam i eslatadi. Yengil elementlar “vazni” darajasida 94 borgan sari yuqorilab boradi. Buning ucliun birinchi elementdan boshlab, hamma elementlari o ‘z yonida turgan element bilan taqqoslanadi. Agar a[i] > a[i + 1] bo ‘lsa, u holda bu elementlar o ‘mi o ‘zaro almashtiriladi. Tekshirish yana boshidan boshlanadi.
# include < io stream .h >
int mainQ
{ int a, i, k;
int b [1 0 ]= {5 6 , 88, 75, 65, 78, 82, 79, 81, 68, 72};
f o r (i= 0 ; i< = 8 ; i+ + )
i f ( b [ i ] > b [ i + l j ) { a = b [ij; b [ i] = b [ i + l] ; b [ i + l ] = a ; i = - l ;}
f o r (i= 0 ; i < —9; i+ + )
c o u t « b [ i ] «
return 0;
i
j
5-masala: 5(5, 5) butun sonli massiv berilgan b o isin . Uning har bir satridagi eng katta elementlar orasidagi eng kichigi topilsin.
Yechish g ‘oyasi. Dastlab har bir satrdagi eng katta elementlardan I [5] massivni hosil qilamiz. So‘ngra A ning eng kichik elementi topi ladi. Bu g ‘oyaga mos kod quyidagicha yoziladi:
# include
int main()
{ int a[5];
int b[5][5]= {2, 4, 4, 2, 3, 4, 5, 4, 3, 2, 6, 8, 9, 1, 2, 3, 4, 5, 4, 3,
4, 4, 4, 8, 7};
fo r (i=0; i<=4; i+ + ) {
m ax=b[i][0];
fo r ( j = l ; j < = 4 ;j+ + )
if (m ax
kichik=a[0'];
fo r (i= l; i<=4; i+ + ) if (kichik>a[i]) kichik=a[i];
c o u t « “Izlangan element— ”« k i c h i k « “ ”;
return 0;
95
Ushbu kod uchun kom pyuter quyidagi natijani beradi:
Izlangan element= 4
6.3. Massivlardan satrlarni qayta ishlashda foydalanish Biz yuqorida massivlardan satrlarni ham qayta ishlash uchun foydalanish mumkinligi haqida fikr bildirgan edik. Buning uchun bizga belgili tipdagi massivlar qo ‘l keladi.
Belgili massivlami ikki xil usulda e ’lon qilish mumkin:
a) char satr[] = “first
b) char sa tr[5 ]= { f \ 7 V
‘s
‘t \ 0 ’};
C++ tilida a-usul bilan e ’lon qilingan m assiv elementlarining soni ko’rsatilmagan bo ‘lsa ham qiymatidagi belgilar sonidan kelib chiqqan holda satr massivini 6 elementli deb qabul qilinadi. Oxirgi elementni C++ tili to ‘g ‘ridan-to‘g ‘ri nol element (\0) sifatida tan oladi va u satm ing tugaganligini anglatadi. Satrlarni ifodalovchi barcha belgili m assivlar ana shu belgi bilan tugashi shart.
Satr (yoki matn) belgili m assiv 1oo‘lgani uchun uning alohida elementlariga sonli massivlardagi kabi indekslardan foydalangan holda murojaat qilish mumkin. Masalan, yuqoridagi misollarda satr[0] element uf harfiga, satr[6 ] esa nol elementga (“\0”) mos keladi.
Shuningdek, satrli m a’lumotlami cin operatori yordamida klaviatura orqali ham kiritish mumkin. Masalan, char satr[20];
buyrug’i uzunligi 20 ta, eng yuqori indeksi 19 b o lg an belgili massivni e ’lon qiladi. Unga klaviatura orqali qiymat berish uchunc in » s a t r ;
buyrug’idan foydalanish mumkin. Kompyuter bu buyruqqa javoban klaviaturadan kiritilgan satming oxiriga “\0” belgisini qo‘shib o ‘qiydi. Shuni yoddan chiqarmaslik kerakki, klaviaturadan kiritilgan bu satrning uzunligi 20 dan kichik bo’lishi mumkin, aks holda, dastumi bajarish vaqtida xatolik yuzaga keladi.
Belgili massiv elementlarini cout yordamida ekranga chiqarish ham mumkin. Buning uchun 96
c o u t «
sa tr;
ko ‘rsatmasi yetarli. Bu holda indekslar diapazonini k o ‘rsatish shart emas. Faqat zarur bo‘lganda bo ‘sh joy (probel) belgilari o ‘m iga belgisini qo‘yish lozim bo‘ladi. Quyidagi dastur kodiga e ’tibor bering.
# include
int main()
/
I
char satr 1 [20];
char sa tr2 []= ’’Assalomu alaykum ”;
cout « “Uzunligi 20 tagacha bo ‘Igan matn kiriting\n ”;
cin » s a t r l ;
c o u t « s a t r 2 « “\n ”;
fo r (int i=0; s a trl[i]!= O’; i+ + )
c o u t « s a t r l [i];
c o u t « “\n ”;
return 0;
}
Ushbu dastumi ishga tushiramiz:
Uzunligi 20 tagacha bo‘lgan matn kiriting
C++_ga_xush_kelibsiz
Assalomu alaykum
C++_ga_xush_kelibsiz
Tekshirish uchun savol va topshiriqlar
1. M assiv nima?
2. Qanday turdagi m assivlami bilasiz?
3. C++ tilida m assivlar qanday e ’lon qilinadi?
4. Massivning biror elementiga qanday murojaat qilish mumkin?
5. Quyidagi masalalar uchun dastur ishlab chiqing.
a) Natural N soni va A( \ :,¥) butun sonlar jadvali berilgan. Uning
nomeri toq, o ‘zi juft b o ‘lgan elementlar yig‘indisi topilsin.
b) A( 1:30) haqiqiy sonlar jadvali berilgan. Hisoblang:
m ax(a,+a}0, a 2+a2g, .... a I5+ a16).
97
c) Natural N soni va A (l :N) butun sonlar jadvali berilgan. Unda
necha xil element uchraydi? (Bir xil elementlar bitta element deb
hisoblanadi.)
d) N *M o ‘lchovli A matritsaning har bir satridagi eng katta ele
m entlar ro ‘yxatini aniqlang.
e) N> o ‘lchovli A matritsaning har bir satridagi eng kichik ele
m entlar orasidan eng kattasi topilsin.
Do'stlaringiz bilan baham: |