|
Alisher ismailov shakirovich algoritmlash va dasturlash asoslari (1-qism)
|
bet | 18/33 | Sana | 21.02.2024 | Hajmi | 290,29 Kb. | | #160200 |
Bog'liq Algoritmlash va dasturlash asoslari-fayllar.orgFunksiyalar
|
Tavsifi
|
length()
|
Ushbu qatordagi belgilar sonini qaytaradi.
|
size()
|
length() bilan bir xil.
|
at()
|
Ushbu string(satr)dan belgilangan indeksdagi belgini qaytaradi.
|
String class(sinf)idagi funksiyalar faqat ma’lum bir string(satr) misolidan chaqirilishi mumkin. Shuning uchun bu funksiyalar instansiya funksiyalari deb ataladi. Masalan, string class(sinf)idagi size() funksiyasidan string obyektining o‘lchamini olishingiz mumkin va quyidagi kodda ko‘rsatilganidek, belgilangan indeksdagi belgini qaytarish uchun at(index) funksiyasidan foydalanishingiz mumkin:
string xabar = "ABCD";
cout << xabar.length() << endl;
cout << xabar.at(0) << endl;
string s = "Kichik";
cout << s.length() << endl;
cout << s.at(1) << endl;
xabar.length() funksiyasini chaqirish 4 qiymatini, message.at(0) funksiyasini chaqirish ‘A’ belgisini qaytaradi. s.length() funksiyasini chaqirish 6 qiymatini, s.at(1) funksiyasini chaqirish esa ‘i’ belgisini qaytaradi.
Namuna funksiyasini chaqirish sintaksisi bunday ko‘rinishda bo‘ladi:
obyektNomi.funksiyaNomi(argumentlar)
Funksiyada ko‘p argumentlar bo‘lishi mumkin yoki hech qanday argument bo‘lmasligi ham mumkin. Masalan, at(index) funksiyasi bitta argumentga ega, lekin length() funksiyasi hech qanday argumentga ega emas.
String Index va Subscript operatorlari
s.at(index) funksiyasidan indeks 0 va s.length()–1 oraligʻida boʻlgan s qatoridagi maʼlum bir belgini olish uchun foydalanish mumkin.
Masalan, xabar.at(0) quyidagi rasmda ko‘'rsatilganidek, S belgisini qaytaradi. Satrdagi birinchi belgi uchun indeks 0 ekanligini esda saqlang.
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
S
|
A
|
L
|
O
|
M
|
|
C
|
+
|
+
|
indeks
xabar
xabar.art(0) xabar.length() 9 ga teng xabar.at(8)
String obyektidagi belgilarga uning indeksi yordamida kirish mumkin. Qulaylik uchun C++ stringNomi[index] sintaksisi yordamida satrdagi belgilangan indeksdagi belgiga kirish uchun funksiyani taqdim etadi. Ushbu sintaksisdan satrdagi belgini olish va o‘zgartirish uchun foydalanish mumkin.
Misol uchun, quyidagi kod s[0] = 'P' yordamida 0 indeksida yangi P belgisini belgilaydi va uni ekranga chop etadi.
string s = "ABCD";
s[0] = 'P';
cout << s[0] << endl;
String(Satr)larni birlashtirish
C++ dasturlash tilida ikkita string o‘zgaruvchisini birlashtirish uchun + operatoridan foydalanish. Quyida keltirilgan bayonot, masalan, s1 va s2 qatorlarini s3 o‘zgaruvchisiga birlashtiradi:
string s3 = s1 + s2;
Kengaytirilgan += operatori qatorlarni birlashtirish uchun ham ishlatilishi mumkin. Misol uchun, quyidagi kod "Salom C++" qatoriga xabardagi "va dasturlash qiziqarli" qatori qo‘shiladi.
String xabar = “Salom C++ ”;
xabar += "va dasturlash qiziqarli";
Endi, yangi xabar o‘zgaruvchisi "Salom C++ va dasturlash qiziqarli" qiymatiga ega bo‘ldi. Belgini string bilan birlashtirish ham mumkin.
Masalan,
string s = "ABCD";
s += 'E';
Demak, yangi s qiymati "ABCDE" bo‘ldi.
Stringlarni taqqoslash
Ikkita stringni solishtirish uchun ==, !=, <, <=, >, >= operatorlaridan foydalanish mumkin. Bu ularning mos belgilarini birma-bir chapdan o‘ngga solishtirish orqali amalga oshiriladi. Masalan,
string s1 = "ABC";
string s2 = "ABE";
cout << (s1 == s2) << endl; // 0 ni ko‘rsatadi (noto‘g‘ri degan ma’noni anglatadi)
cout << (s1 != s2) << endl; // 1 ni ko‘rsatadi (to‘g‘ri degani)
cout << (s1 > s2) << endl; // 0 ni ko‘rsatadi (noto‘g‘ri degan ma’noni anglatadi)
cout << (s1 >= s2) << endl; // 0 ni ko‘rsatadi (noto‘g‘ri degan ma’noni anglatadi)
cout << (s1 < s2) << endl; // 1 ni ko‘rsatadi (to‘g‘ri degani ma’noni anglatadi)
cout << (s1 <= s2) << endl; // 1 ni ko‘rsatadi (to‘g‘ri degan ma’noni anglatadi
s1 > s2 ni solishtirish jarayonini ko‘rib chiqing. s1 va s2 dan dastlabki ikkita belgi (A va A) solishtiriladi. Ular teng bo‘lgani uchun ikkinchi ikkita belgi (B va B) taqqoslanadi. Ular ham teng bo‘lgani uchun uchinchi ikkita belgi (C va E) solishtiriladi. C belgisi E dan kichik bo‘lgani uchun taqqoslash 0 qiymatini qaytaradi.
Stringni klaviaturadan o‘qish
Klaviaturadan string(satr)ni cin obyekti yordamida o‘qish mumkin. Masalan, quyidagi kodni ko‘ramiz:
1 string shahar;
2 cout << "Shaharni kiriting: ";
3 cin >> shahar; // Shaharni o`qing
4 cout << "Siz kiritgan" << shahar << endl;
3-qator string(satr)ni shahar qiymatini o‘qiydi. Agar shahar nomi ikkita so‘zdan iborat bo‘lsa cin obyekti faqat birinchi so‘zni qabul qiladi va ikkinchi so‘z dasturda ko‘rsatilmaydi. Bu muammoni yechish uchun C++ dasturlash tili string kutubxonasida getline funksiyasini taʼminlaydi, u quyidagi sintaksisdan foydalanib klaviaturadan string(satr)larni oʻqiydi:
getline(cin, s, delimitCharacter)
Agar kiritilayotgan satr qiymati bir nechta so‘zlardan iborat bo‘lsa getline() fuknsiyasi barcha so‘zlarni dasturga qabul qiladi.
Quyidagi kod satrni o‘qish uchun getline funksiyasidan foydalanadi.
1 string shahar;
2 cout << "Shaharni kiriting: ";
3 getline(cin, shahar, '\n'); // getline bilan bir xil (cin, shahar)
4 cout << "Siz kirirtgan shaha:" << shahar << endl;
getline funksiyasidagi uchinchi argument uchun standart qiymat “\n” boʻlgani uchun 3-qator quyidagi bilan almashtirilishi mumkin.
getline(cin, shahar); //string qiymatini o‘qish
quyidagi kod foydalanuvchiga ikkita shaharni kiritishni taklif qiladigan va ularni alifbo tartibida qaysi biri oldin kelsa shu shahar nomini chop etadigan dasturni taqdim etadi.
1 #include
2 #include
3 using namespace std;
4
5 int main()
6 {
7 string shahar1, shahar2;
8 cout << "Birinchi shahar nomini kiriting: ";
9 getline(cin, shahar1);
10 cout << "Ikkinchi shahar nomini kiriting: ";
11 getline(cin, shahar2);
12
13 cout << "Shaharlar alifbo holatida tartiblangan holatda, birinchi shashar nomi:";
14 if (shahar1 < shahar2)
15 cout << shahar1 << " " << shahar2 << endl;
16 else
17 cout << shahar2 << " " << shahar1 << endl;
18
19 return 0;
20 }
Natija:
Birinchi shahar nomini kiriting: Andijon
Ikkinchi shahar nomini kiriting: Toshkent
Shaharlar alifbo holatida tartiblangan holatda, birinchi shashar nomi: Andijon
Dasturda string(satr)lardan foydalanganda siz doimo string(satr) sarlavhasi faylini (2-qator) kiritishingiz kerak. Agar 9-qator cin >> shahar1 bilan almashtirilsa, siz shahar1 uchun boʻsh joylar bilan qatorni kirita olmaysiz. Shahar nomi boʻshliqlar bilan ajratilgan bir nechta soʻzlardan iborat boʻlishi mumkinligi sababli, dastur string(satr)ni oʻqish uchun getline funksiyasidan foydalandi (9, 11-qatorlar).
Amaliy mashg‘ulotlar
Foydalanuvchiga klaviaturadan butun son (int) va kasrli son (double) kiritishiga ruxsat berish uchun bayonotlar qanday yoziladi?
Quyidagi kodni bajarayotganda 2 va 2.5 kiritgan bo‘lsangiz, natija qanday bo'ladi?
double eni;
double boyi;
cin >> eni >> balandlik;
cout << eni * boyi;
Quyidagi koddagi xatolarni aniqlang va tuzating:
1 #include
2 using namespace std;
3
4 int Main()
5 {
6 int i = k + 1;
7 cout << I << endl;
8
9 int i = 1;
10 cout << i << endl;
11
12 return 0;
13 }
Quyidagi koddagi xatolarni aniqlang va tuzating:
1 #include
2 using namespace std;
3
4 int main()
5 {
6 int i = j = k = 1;
7
8 return 0;
9 }
konstantalardan foydalanishning qanday afzalliklari bor? 20 qiymatiga ega int konstanta e’lon qiling.
Quyidagi algoritmni C++ kodiga o‘tkazing:
Boshlash
Dastlabki qiymati 100 bo‘lgan mil deb nomlangan double o‘zgaruvchini e’lon qiling.
KILOMETER_MIL nomli double konstantani e’lon qiling qiymatini 1.609 ga teng qilib belgilang.
kilometr deb nomlangan double o‘zgaruvchini e’lon qiling, mil o‘zgaruvchisi va KILOMETER_MIL konstantani ko‘paytiring va natijani kilometr o‘zgaruvchiga belgilang.
Konsolga kilometr natijasini chop eting.
Tugatish
Quyidagi modul operatorining natijasini ko‘rsating:
56 % 6
78 % 4
34 % 5
34 % 15
5 % 1
1 % 5
Agar bugun seshanba bo‘lsa, 100 kundan keyin qaysi kun bo‘ladi?
C++ dasturlash tilida kodini yozing.
25/4 ning natijasi qanday bo‘ladi? Agar natija kasrli son (double) bo‘lishini xohlasangiz, ifodani qanday qayta yozish mumkin?
Quyidagi kodning natijasi qanday bo‘ladi:
int a = 6;
int b = a++;
cout << a << endl;
cout << b << endl;
a = 6;
b = ++a;
cout << a << endl;
cout << b << endl;
Quyidagi kodning natijasi qanday bo‘ladi:
int a = 6;
int b = a--;
cout << a << endl;
cout << b << endl;
a = 6;
b = --a;
cout << a << endl;
cout << b << endl;
Quyidagi kodning natijasi qanday bo‘ladi:
double f = 12.5;
int i = f;
cout << "f is " << f << endl;
cout << "i is " << i << endl;
Quyidagi kodning natijasi qanday bo‘ladi:
double amount = 5;
cout << amount / 2 << endl;
cout << 5 / 2 << endl;
Ifodalar. Operand, amal, ifoda, amallarning ustuvorligi. Ifodalar yozish qoidalari.
9-mavzu
Topshiriq bayonotlari va Topshiriq ifodalari
Ifodalar va operator ustuvorligini baholash
Joriy vaqtni ko‘rsatish dasturi
Matematik funksiyalar
Amaliy mashg‘ulotlar
Ifodalar: operand, operatsiya, ifoda, amallarning ustuvorligi. Ifodalar yozish qoidalari. Standart matematik funksiyalar. Ifodalar va amallar: arifmetik va mantiqiy. Ifodalar va amallarni yozish qoidalari.
Topshiriq bayonotlari va Topshiriq ifodalari
Topshiriq bayonoti o‘zgaruvchining qiymatini belgilaydi. Tayinlash bayonoti C++ dasturlash tilida ifoda sifatida ishlatilishi mumkin. O‘zgaruvchi e’lon qilingandan so‘ng, tayinlash bayonotidan foydalanib, unga qiymat berishingiz mumkin. C++ dastulash tilida tayinlash operatori sifatida barobar belgisi (=) ishlatiladi. Topshiriq iboralari sintaksisi quyidagicha:
o`zgaruvchiNomi = qiymati;
Ifoda - qiymatlarni, o‘zgaruvchilarni va operatorlarni o‘z ichiga olgan hisoblashni ifodalaydi va ularni birlashtirib, qiymatni baholaydi. Misol uchun, quyidagi kodni ko‘rib chiqamiz:
int y = 1; // 1 qiymatini y o`zgaruvchiga belgilaydi
double radius = 1.0; // 1.0 qiymatini radius o`zgaruvchisiga belgilaydi
int x = 5 * (3 / 2); // hisoblashning natijasini x o`zgaruvchisiga qiymat qilib belgilaydi
x = y + 1; // y va 1 yig`indisini x o`zgaruchiga qiymat qilib belgilaydi
yuzi = radius * radius * 3.14159; // hisoblash
Siz ifodada o‘zgaruvchidan foydalanishingiz mumkin. O‘zgaruvchi = operatorining ikkala tomonida ham ishlatilishi mumkin. Masalan
x = x + 1;
Ushbu topshiriq bayonotida x + 1 natijasi x ga qiymat qilib beriladi. Agar operator bajarilgunga qadar x 1 ga teng bo‘lsa, yuqoridagi koddan keyin x qiymati 2 ga aylanadi.
O‘zgaruvchiga qiymat berish uchun o‘zgaruvchi nomini belgilash operatorining chap tomoniga qo‘yish kerak. Shunday qilib, quyidagi bayonot noto‘g‘ri hisoblanadi:
1 = x; // noto`g`ri
Ushbu bayonotni to‘g‘ri tuzish uchun o‘zgaruvchi = operatorining chap tomoniga va qiymatni = operatining o‘ng tomoniga qo‘yish kerak:
x = 1 //to`g`ri
Ifodalar va operator ustuvorligini baholash
C++ dasturlash tilida raqamli ifodalarni yozish C++ operatorlari yordamida arifmetik ifodani to‘g‘ridan-to‘g‘ri tarjima qilishni o‘z ichiga oladi.
Masalan, arifmetik ifodani C++ ifodasiga quyidagicha tarjima qilish mumkin
C++ ning sahna ortidagi ifodani baholashning o‘ziga xos usuli bo‘lsada, C++ ifodasining natijasi va unga mos keladigan arifmetik ifoda bir xil. Shunday qilib, siz C++ ifodasini baholash uchun arifmetik qoidani xavfsiz qo‘llashingiz mumkin. Qavslar ichida joylashgan operatorlar birinchi navbatda bajariladi. Qavslar ichkariga kiritilishi mumkin, bu holda birinchi navbatda ichki qavs ichidagi ifoda bajariladi. Ifodada bir nechta operator ishlatilsa, bajarish tartibini aniqlash uchun quyidagi operator ustunlik qoidasi qo‘llaniladi.
Qavslar operatorlari bajarilganidan so‘ng, ko‘paytirish, bo‘lish va qoldiq operatorlari qo‘llaniladi. Agar ifodada bir nechta ko‘paytirish, bo‘lish va modul operatorlari bo‘lsa, ular chapdan o‘ngga qarab bajariladi.
Qo‘shish va ayirish operatorlari oxiri bajariladi. Agar ifodada bir nechta qo‘shish va ayirish operatorlari bo‘lsa, ular chapdan o‘ngga qarab bajariladi.
Bu yerda ifoda qanday bajariishiga misol keltirilgan:
Misol:
quyidagi kod formuladan foydalanib Farengeyt darajasini Selsiyga aylantiradigan dasturni beradi.
Selsiy = (5.0 / 9) * ( Farengeyt - 32)
FarangeytSelsiy dasturi
1 #include
2 using namespace std;
3
4 int main()
5 {
6 // gradus darajasini Farangeytda kiriting
7 double farangeyt;
8 cout << " gradus darajasini Farangeytda kiriting: ";
9 cin >> farangeyt;
10
11 // selsiy darajasiga o`tkazish
12 double selsius = (5.0 / 9) * (farangeyt - 32);
13
14 // Natijani chop eting
15 cout << "Farangeytda" << farangeyt << " :" <<
16 selsius << "Selsiyda" << endl;
17
18 return 0;
19 }
Natija:
gradus darajasini Farangeytda kiriting: 100
Farengeyt 100 Selsiy bo‘yicha 37,7778 gradusni tashkil qiladi
Bo‘lishni qo‘llashda ehtiyot bo‘ling. Ikkita butun sonni bo‘lish C++ da butun sonni beradi. 12-qatordagi 5/9 oʻrniga 5.0/9 ga o‘zgartirilgan, chunki C++ da 5/9, 0 natijani beradi.
Joriy vaqtni ko‘rsatish
Joriy vaqtni GMT (Grinvich vaqti) da soat: daqiqa: soniya formatida, masalan, 13:19:8 kabi ko‘rsatadigan dasturni ishlab chiqish mumkin. ctime kutubxonasi faylidagi time(0) funksiyasi joriy vaqtni 1970-yil 1-yanvar GMT 00:00:00 dan beri o‘tgan soniyalarda qaytaradi.
1 #include
2 #include
3 using namespace std;
4
5 int main()
6 {
7 // 1-yanvar, 1970 yildan beri o`tkan umumiy sekundlarni olish
8 int umumiysoniyalar = time(0);
9
10 // soatdagi daqiqada joriy soniya
11 int joriySoniya = umumiysoniyalar % 60;
12
13 // Jami daqiqalarni olish
14 int jamidaqiqalar = umumiysoniyalar / 60;
15
16 // Joriy daqiqani soatda hisoblang
17 int joriyMinut = jamidaqiqalar % 60;
18
19 // Jami soatlarni oling
20 int jamiSoat = jamidaqiqalar / 60;
21
22 // Joriy soatni hisoblang
23 int joriySoat = jamiSoat % 24;
24
25 // Natijalarni ko`rsatish
26 cout << "Hozirgi vaqt " << joriySoat << ":"
27 << joriyMinut << ":" << joriySoniya << " GMT" << endl;
28
29 return 0;
30 }
Natija:
Hozirgi vaqt: 17:31:26 GMT
time(0) (8-qator) chaqirilganda, u joriy GMT vaqt va 1970 yil 1 yanvar GMT vaqti o‘rtasidagi umumiy soniyalarda o‘lchangan farqni qaytaradi.
Mantiqiy ifoda doim true yoki false (to‘g‘ri yoki notogri) qiymatini beradi. Masalan, ikkita sonni solishtirib to‘g‘ri yoki noto‘g‘ri ekanligini tekshirish uchun mantiqiy ifodadan foydalanish mumkin:
cout<
agar son1 va son2 qiymatlari teng bo‘lsa yuqoridagi ifodadan true (to‘g‘ri) qiymati qaytariladi, agar son1 va son2 qiymatlari teng bo‘lmasa false (noto‘g‘ri) qiymati qaytariladi.
Matematik funksiyalar
C++ dasturlash tili umumiy matematik funksiyalarni bajarish uchun cmath kutubxonasida juda ko‘p foydali funksiyalarni taqdim etadi. Funksiya ma’lum bir vazifani bajaradigan bayonotlar jamlanmasi hisoblanadi. Ularni trigonometrik funksiyalar, darajali funksiyalar va xizmat funksiyalari sifatida tasniflash mumkin. Xizmat funksiyalariga round, min, max, va abs funksiyalar kiradi.
Trigonometrik funksiyalar
|
| |