Muhammad al-Xorazmiy nomidagi TATU Samarqand filiali
Laboratoriya mashg‘ulotI
FAN: |
|
DASTURLASH I
| Hafta raqami: |
|
8
| Mashg‘ulot mavzusi: |
| Ko‘rsatkichla va ular bilan ish yuritish | ishning Maqsadi: |
| Ko‘rsatkichni e’lon qilish va uning uchun xotiradan joy ajratilishini ko‘rib chiqish;
Qiymatlarga ko‘rsatkich yordamida murojaat qilishni ko‘rib chiqish ;
Typedef kalit so‘zi yordamida sinonim turlar yaratish.
Ko‘rsatkichlardan foydalanib oddiy dasturlar tuzish.
Funksiyadan ko‘rsatkich orqali qiymat qaytarilishini ko‘rib chiqish;
Massivda qo‘llaniladigan funksiyalarda ko‘rsatkichlardan foydalanishni o‘rganish;
Massiv va ko‘rsatkichlardan foydalanib dastur tuzish.
|
1-mashq. Ko‘rsatkichlar qo‘llanilishini namoyish etuvchi dastur tuzilsin.
Dastur kodi:
#include
using namespace std;
int main()
{
int count = 5;
int* pCount = &count;
cout << "Znacheniye count raven ==> " << count << endl;
cout << "Adress count raven ==> " << &count << endl;
cout << "Adress count raven ==> " << pCount << endl;
cout << "Znacheniye count raven ==> " << *pCount << endl;
return 0;
}
Natija:
6-satrda count nomli o‘zgaruvchi e’lon qilinmoqda va uning boshlang‘ich qiymati 5 ga teng. 7-satrda pCount nomli ko‘rsatkich-o‘zgaruvchi e’lon qilinmoqda va uning qiymati count o‘zgaruvchisining adresiga teng.
Quyidagi sintaksislarga ahamiyat bering
pCount = &count; // tugri
chem
*pCount = &count; // xato
2-mashq. Yuqoridagi dastur kodi typedef kalit so‘zi ishlatilgan holda qaytadan ko‘rib chiqilsin.
Dastur kodi:
#include
using namespace std;
typedef int* intPointer;
int main()
{
int count = 5;
intPointer pCount = &count;
cout << "Znacheniye count raven ==> " << count << endl;
cout << "Adress count raven ==> " << &count << endl;
cout << "Adress count raven ==> " << pCount << endl;
cout << "Znacheniye count raven ==> " << *pCount << endl;
return 0;
}
Natija:
3-mashq. Ko‘rsatkichlar va massivdan foydalangan holda dastur tuzilsin.
Dastur kodi:
1 #include
2 using namespace std;
3
4 int main()
5 {
6 int list[6] = {11, 12, 13, 14, 15, 16};
7 int* p = list;
8
9 for (int i = 0; i < 6; i++)
10 cout << "address: " << (list + i) <<
11 " znacheniye: " << *(list + i) << " " <<
12 " znacheniye: " << list[i] << " " <<
13 " znacheniye: " << *(p + i) << " " <<
14 " znacheniye: " << p[i] << endl;
15
16 return 0;
17 }
Natija:
7-satrda int turiga mansub ko‘rsatkich e’lon qilinmoqda, uning qiymatiga esa massiv adresi ta’minlanmoqda.
int* p = list;
Ahamiyat bering, massiv adresini ta’minlash vaqtida (&) operatoridan foydalanmayapmiz, chunki massiv nomining o‘zi massivning boshlang‘ich adresini o‘zida saqlaydi. Yuqoridagi yozuv quyidagi bilan teng kuchli:
int* p = &list[0];
1-mashq. swap dasturini qiymatlarni ko‘rsatkich yordamida yuborishni qo‘llagan qolda tuzish.
Dastur kodi:
#include
using namespace std;
//Zamena dvux peremennyx, ispolzuya peredachu po znacheniyu
void swap1(int n1, int n2)
{
int temp = n1;
n1 = n2;
n2 = temp;
}
// Zamena dvux peremennyx, ispolzuya peredachu po ssylke
void swap2(int& n1, int& n2)
{
int temp = n1;
n1 = n2;
n2 = temp;
}
// Peredacha dva ukazatelya po znacheniyu
void swap3(int* p1, int* p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
// Peredacha dva ukazatelya po ssylke
void swap4(int* &p1, int* &p2)
{
int* temp = p1;
p1 = p2;
p2 = temp;
}
int main()
{
// Obyavleniye i initsializatsiya peremennyx
int num1 = 1;
int num2 = 2;
cout << "Pered vyzovom funktsii num1 = "
<< num1 << " i num2 = " << num2 << endl;
// Vyzov 1-y funksii
swap1(num1, num2);
cout << "Posle vyzova funksii, num1 = " << num1
<< " i num2 = " << num2 << endl;
cout << "Pered vyzovom funktsii num1 = "
<< num1 << " i num2 = " << num2 << endl;
// Vyzov 2-y funksii
swap2(num1, num2);
cout << "Posle vyzova funksii, num1 = " << num1
<< " i num2 = " << num2 << endl;
cout << "Pered vyzovom funktsii num1 = "
<< num1 << " i num2 = " << num2 << endl;
// Vyzov 3-y funksii
swap3(&num1, &num2);
cout << "Posle vyzova funksii, num1 = " << num1
<< " i num2 = " << num2 << endl;
int* p1 = &num1;
int* p2 = &num2;
cout << "Pered vyzovom funktsii p1 = "
<< p1 << " i p2 = " << p2 << endl;
// Vyzov 4-y funksii
swap4(p1, p2);
cout << "Posle vyzova funksii, p1 = " << p1
<< " i p2 = " << p2 << endl;
return 0;
}
Natija:
To‘rtta funksiya swap1, swap2, swap3 va swap4 5-34 satrlarda e’lon qilingan. swap1 funksiyasi num1 ni n1 ga num2 ni n2 ga ta’minlash orqali chaqirilayapti (46-satr). swap1 funksiyasi n1 va n2 qiymatlarini o‘zgartirmoqda. n1, num1, n2, num2 o‘zgaruvchilar mustaqil bo‘lib. Funksiya chaqirilgandan so‘ng num1 va num2 qiymatlari o‘zgarishsiz qolmoqda.
swap2 funksiyasi 2 ta havolali parametrga ega: int & n1 va int & n2 (13-satr). num1 va num2 havolalari n1 va n2 ga yuborilgan (55-satr), shuning uchun n1 va num1 psevdonim hisoblanadi, n2 va num2 – ham psevdonimdir. swap2 da n1 va n2 o‘rnini o‘zgartiradi. Funksiya chaqirilganda esa num1 va num2 ham o‘z o‘rinlarini o‘zgartirishadi.
swap3 funksiyasi esa 2 ta ko‘rsatkich parametrga ega, p1 va p2 (21 satr). num1 va num2 adreslari p1 va p2 jo‘natiladi (64-satr), shuning uchun p1 va & num1 xotiradagi bitta joyda turadi, p2 va & num2 ham xotirada bir joyda saqlanadi. * p1 va * p2 swap3 da o‘z joylarini almashtiradi. Funksiya chaqirilgandan so‘ng num1 va num2 qiymatlari ham o‘z joylarini almashtiradi.
swap4 funksiyasi 2 ta ko‘rsatkich parametrga ega, p1 va p2, havola orqali yuborilganda (2-satr). Mazkur funksiyaning chaqirilishi p1 ni p2 ga o‘zgartiradi (75-satr).
2-mashq. Massiv elementlarini teskarisiga almashtiradigan dastur ko‘rsatkichlardan foydalangan holda tuzilsin.
Dastur kodi:
1 #include
2 using namespace std;
3
4 int* reverse(int* list, int size)
5 {
6 for (int i = 0, j = size - 1; i < j; i++, j--)
7 {
8 // Swap list[i] with list[j]
9 int temp = list[j];
10 list[j] = list[i];
11 list[i] = temp;
12 }
13
14 return list;
15 }
16
17 void printArray(const int* list, int size)
18 {
19 for (int i = 0; i < size; i++)
20 cout << list[i] << " ";
21 }
22
23 int main()
24 {
25 int list[] = {1, 2, 3, 4, 5, 6};
26 int* p = reverse(list, 6);
27 printArray(p, 6);
28
29 return 0;
30 }
Natija:
3-mashq. min_element i max_element funksiyalaridan foydalangan holda massivdagi maksimal va minimal elementlarni qaytaradiga va massivni sortirovka funksiyasidan foydalanib va random_shuffle funksiyalari yordamida dastur tuzilsin.
Dastur kodi:
#include
#include
using namespace std;
void printArray(const int* list, int size)
{
for (int i = 0; i < size; i++)
cout << list[i] << " ";
cout << endl;
}
int main()
{
int list[] = {4, 2, 3, 6, 5, 1};
printArray(list, 6);
int* min = min_element(list, list + 6);
int* max = max_element(list, list + 6);
cout << "Minimalnoye znacheniye " << *min << " index "
<< (min - list) << endl;
cout << "Maksimalnoye znacheniye " << *max << " index "
<< (max - list) << endl;
random_shuffle(list, list + 6);
printArray(list, 6);
sort(list, list + 6);
printArray(list, 6);
int key = 4;
int* p = find(list, list + 6, key);
if (p != list + 6)
cout << "Znacheniye " << *p << " nayden na pozicii "
<< (p - list) << endl;
else
cout << "Znacheniye " << *p << " ne nayden" << endl;
return 0;
}
Natija:
min_element (list, list + 6) (17-satr) chaqirilganda ko‘rsatkich massivdagi eng kichik elementni list[0] dan list[5] ga ko‘chirgan. Bu holda list + 5 qaytariladi chunki 1 eng kichik element hisoblanadi.
random_shuffle (list, list + 6) (24-satr) tasodifiy tarzda massiv elementlarini joyini o‘zgartirmoqda list[0] dan list[5] ga.
sort (list, list + 6) (27-satr) chaqirilganda massif elementlari saralanmoqda.
find(list, list + 6, key) (31-satr) funksiyasi key ni massiv ichidan topish uchun qo‘llanilgan. Element topilganda funksiya massivda topilgan elementni qaytarmoqda, aks holda esa funksiya oxirgi elmentdan keyin keladigan pozitsiyani qaytaradi (list + 6).
Dasturlash I fanidan 8.1-laboratoriya mashgʻuloti
Do'stlaringiz bilan baham: |