Файл: Ozbekiston respublikasi oliy va orta maxsus talim vazirligi navoiy davlat pedagogika instituti.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 08.11.2023
Просмотров: 335
Скачиваний: 8
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
1.2-§. O‘zgaruvchi va o‘zgarmas tipli kattaliklar
1.3-§. Dasturlash operatorlari
II BOB. BOSHQARUV OPERATORLARI
2.1-§. C++ dasturlash tilida shartli operatorlar
2.2-§. C++ dasturlash tilida takrorlanuvchi jarayonlar
2.3-§. C++ dasturlash tilida funksiyalar
2.4-§. C++ dasturlash tilida massivlar
Agar o‘sish (kamayish) amali o‘zgaruvchidan keyin yozilsa, u holda birinchi navbatda o‘zlashtirish amali bajariladi, so‘ngra o‘zgaruvchi qiymati oshiriladi (kamayadi):
x = 12; y = x ++; // y 12 ga va x esa 13 ga teng bo‘ladi;
x = 12; y = x --; // y 12 ga va x esa 11 ga teng bo‘ladi.
Butun sonli arifmetikaning amallari
Butun sonli bo‘linish amali butun o‘zgaruvchilarga tatbiq etilsa, bo‘linmaning butun qismini qabul qiladi (kasr qismi tashlab yuboriladi), aks holda odatiy bo‘linish amalga oshiriladi. Masalan: 11/4 = 2 yoki 11.0 / 4 = 2.75.
Bo‘linmaning qoldig‘ini topish (%) amali faqat butun sonli o‘zgaruvchilarga taalluqlidir. Masalan: 11% 4 = 3.
Bit arifmetikasiga quyidagi amallar kiradi: &, |, ˆ, ˜, <<, >>. Bit arifmetikasi butun sonlarning ikkilik tasvirida amallar bajariladi.
Arifmetik VA (&) amalida ikkala operand (ifodadagi o`zgaruvchi yoki o`zgarmas) ikkilik tizimga o‘tkaziladi, so‘ngra quyidagi qoidalarga muvofiq operandlarning mantiqiy bitli ko‘paytmasi topiladi:
1 & 1 = 1, 1 & 0 = 0, 0 & 1 = 0, 0 & 0 = 0.
Masalan, A = 13 va B = 25 bo‘lsa, ularning ikkilik ko‘rinishi quyidagicha:
A = 0000000000001101 va B = 0000000000011001 bo‘ladi.
A va B o‘zgaruvchilarning mantiqiy ko‘paytmasi natijasi o‘nli tizimda 9 ga ikkilik tizimda esa 0000000000001001 ga teng bo‘ladi (8-rasm). Ya’ni, A & B = 14 & 24 = 8.
8-rasm. Bitli ko‘paytirish amali.
Arifmetik yoki (|) amalida ham har ikkala operand ikkilik tizimga o‘tkaziladi, bundan so‘ng quyidagi qoidalarga binoan operandlar ustida mantiqiy bitli qo‘shish amali bajariladi: 1 | 1 = 1, 1 | 0 = 1, 0 | 1 = 1, 0 | 0 = 0.
Masalan, A = 13 va B = 25 sonlarini mantiqiy qo‘shish natijasi A | B = 29 ga teng bo‘ladi (9-rasm).
9-rasm. Bitli qo‘shish amali.
Arifmetik yoki amalining inkori (ˆ).
Bunda ikkala operand ham ikkilik tizimga aylantiriladi, shundan so‘ng ular ustida quyidagi qoidalar bo‘yicha mantiqiy bitli amal bajariladi: 1 I 1 = 0, 1 I 0 = 1, 0 I 1 = 1, 0 I 0 = 0.
Masalan, A = 13 va B = 25 sonlari ustida yoki amalining inkori bajarilsa A ˆ B = 20 ga teng bo‘ladi (10-rasm).
10-rasm. Yoki amalining inkori.
Arifmetik inkor (˜) amali bitta operandga nisbatan bajariladi. Amal natijasida sonning ikkilik tasviri teskarisiga almashtiriladi (rots bo`lsa, yolg`on yoki aksincha) (11-rasm). Ya’ni, ˜ 1 = 0, ˜ 0 = 1.
11-rasm. Inkor amali.
Chapga siljitish (A << B) amali.
Chapga siljish amali ikkilik tizimda ifodalanganda, A raqami chap tomonga B holatiga o‘tkaziladi. Masalan, 10 << 3. amalni ko‘rib chiqamiz. Ikkilik tizimdagi 10 soni 1010 shaklga ega. Uni 3 pozitsiyaga chapga siljitganda, biz 1010000 ni olamiz. O‘nli tizimda bu ikkilik raqam 80 ga teng. Demak, 10 << 3 = 80 (12-rasm). E’tibor bering, bitni chapga siljitish ikkiga, ikkita siljitish to‘rtga, uchta siljitish sakkizga ko‘paytirishga to‘g‘ri keladi. Shunday qilib, A << B amali A sonini 2B ga ko‘paytirishga tengdir.
12-rasm. Chapga siljish amali.
O‘ngga siljitish (A >> B) amali.
O‘ngga siljitish amali ikkilik tizimda ifodalanganda A raqami B pozitsiyaga -o‘ng tomonga siljiydi, bu A sonini 2B
ga bo‘linishiga tengdir. Masalan, 20 >> 2 = 5 (13-rasm) .
13-rasm. O‘ngga siljish amali.
Mantiqiy amallar
C ++ dasturlash tilida || (yoki), && (va) ,! (emas) mantiqiy amallar mavjud. Mantiqiy amallar true (rost) va false (yolg‘on) qiymatlar ustida bajariladi. C++ dasturlash tilida false – 0, true – 1 qiymatga teng.
8-jadval.
Mantiqiy amallar
A | B | ! A | A && B | A || B |
0 | 0 | 1 | 0 | 0 |
0 | 1 | 1 | 0 | 1 |
1 | 0 | 0 | 0 | 1 |
1 | 1 | 0 | 1 | 1 |
Munosabat amallari
C++ dasturlash tilida munosabat amallari bajarilishi natijasida mantiqiy qiymat hosil bo‘ladi. Bular quyidagilar: >, >=, <, <=, ==, !=. Ushbu amallarning natijasi true yoki false qiymatga teng bo‘ladi.
Mustaqil bajarish uchun topshiriqlar
1. L uzunlik santimetrda berilgan. Undagi to‘liq metr va qolgan santimetrni toping.
2. Ikki xonali natural son berilgan. Uning o‘nlar va birlar xonasidagi raqamlarini ekranga chiqaring.
3. Uch xonali natural son berilgan. Uning raqamlari yig‘indisini toping.
4. To‘g‘ri burchakli uchburchakning a va b katetlari berilgan. c gipotenuza va P peremetrni toping.
5. Tekislikda A va B nuqtalar koordinatalari bilan berilgan: A(x1,y1), B(x2,y2). Bundan AB kesma uzunligini toping.
6. Rombning diagonali d berilgan. Uning yuzasi S va perimetri P topilsin.
7. Uch xonali son berilgan. Uni teskari tomondan o‘qigandagi son chop etilsin.
8. 999 dan katta bo‘lgan butun son berilgan. 1 marta butunga bo‘lish va 1 marta qoldiqni topish amalidan foydalanib, shu sonning 100 lik xonasidagi raqam aniqlansin.
9. Uch xonali son berilgan. Uning o‘nlik va birlik xonalaridagi raqamlarini almashtirish natijasida hosil bo‘lgan son chop etilsin.
10. Sutkaning n-sekundi bo‘lsa, sutka boshidan buyon o‘tgan sekundlarni soatga aylantirib, oxirgi soatdan keyingi minut aniqlansin.
II BOB. BOSHQARUV OPERATORLARI
Ushbu bobda C ++ dasturlash tilining asosiy operatorlari tasvirlangan: if shartl operatori; switch tanlash operatori; for, while, do ... while takrorlanish operatori. Shuningdek, blok-sxemalar yordamida algoritmlarni tuzish haqida ma’lumotlar berilgan hamda turli xil murakkablik darajasidagi masalalarni dasturlashga oid misollar keltirilgan.
2.1-§. C++ dasturlash tilida shartli operatorlar
Ko‘pgina misol va masalalarni dasturlashda hisob-kitoblar tartibi ma’lum shartlarga, masalan, dastlabki ma’lumotlarga yoki dasturning oldingi bosqichlarida olingan oraliq natijalarga bog‘liq bo‘ladi. Bunda hisob-kitoblarni tartibga solish uchun, shartga qarab, C ++ dasturlash tilining if shart operatoridan foydalaniladi. Ushbu operatorning umumiy ko‘rinishi quyidagicha yoziladi:
if (shart) 1_operator; else 2_operator;
Bu yerda shart mantiqiy (yoki butun sonli) ifoda, o‘zgaruvchi yoki o‘zgarmas bo‘lib, 1_operator va 2_operator esa C ++ dasturlash tilining ixtiyoriy operatori bo‘lishi mumkin.
if operatori quyidagi tartibda ishlaydi. Birinchi, qavs ichidagi shart tekshiriladi. Agar u nolga teng bo‘lmasa, yoki rost (true) qiymat qabul qilsa, 1_operator bajariladi. Aksincha, agar shart nolga teng bo‘lsa, yoki yolg‘on (false) qiymat qabul qilsa 2_operator bajariladi. if shart operatori qo‘llanilgan algoritm tasviri 14-rasmga tasvirlangan.
Masalan, x va y o‘zgaruvchilarning qiymatlarini taqqoslash uchun quyidagi dastur kodi yoziladi:
cin>>x; cin>>y;
if (a==b) cout<<" x o‘zgaruvchi y ga teng " ;
else cout<<" x o‘zgaruvchi y ga teng emas " ;
Eslatma: == tenglik belgisi va = o‘zlashtirish operatorini aralashtirmang. Masalan, if (z = 0) k = 1; yozuvda sintaksis xatosi yo‘q. Bunda z = 0 o‘zlashtirish amali natijasi hosil qilanadi va uning qiymati esa shart sifatida tekshiriladi. Ushbu dastur kodida k = 1 operator hech qachon bajarilmaydi, chunki z o‘zgaruvchining qiymati har doim nolga teng, ya’ni yolg‘on (false) bo‘ladi. Bunda to‘g‘ri yozuv esa quyidagicha yoziladi: if (z == 0) k = 1;
14-rasm. if shart operatori blok sxemasi.
Agar berilgan masalada shartning qiymatiga qarab bir nechta operator bajarilishi kerak bo‘lsa, operatorlar figurali qavslar { } ichiga yozilishi lozim. Bunday holda, kompilyator operatorlar guruhini bitta ifoda sifatida ko‘rib chiqadi. Masalan:
if (shart)
{ 1_operator; 2_operator; ... }
else
{ 3_operator; 4_operator; ... }
Shart operatorida else bo‘limidan foydalanish talab etilmasa, ya’ni shart yolg‘on bo‘lganda hech qanday operator bajarilmasa, u holda else bo‘limini tushirib qoldirish mumkin. Masalan:
if (shart) operator;
yoki
if (shart)
{ 1_operator; 2_operator; ... }
Ushbu “qisqartirilgan” shakldagi shartli operatorning ishlash algoritmi quyidagicha: operator (operatorlar guruhi) shartli ifoda qiymatiga qarab bajariladi yoki o‘tkazib yuboriladi. Ushbu shartli jarayonni bajarish algoritmi 15-rasmda tasvirlangan.
15-rasm. Qisqa shart operatori blok sxemasi.
else bo‘limi ishtirokisiz shart operatoridan foydalanishning dastur kodi quyidagicha:
cin>>a ; cin>>b;
c=0;
// c o‘zgaruvchining qiymati faqat a va b teng bo‘lmaganda o‘zgaradi.
if (a!=b) c=a+b;
cout<<"c="<
Shart operatorlari o‘zaro ichma-ich holda qo‘llanilishi ham mumkin. Ichma-ich joylashgan shart operatorlarining ishlash algoritmi quyidagicha (bunda else bo‘limi har doim eng yaqin if ga tegishli bo‘ladi):
if (1_shart) if (2_shart) 1_operator; else 2_ operator;
Bu yerda 2_operator har doim 2_shart ga aloqador bo‘ladi. Quyidagi dastur kodida esa 1_shart ga aloqador bo‘ladi:
if (1_shart) { if (2_shart) 1_operator; }
else 2_ operator;
Yuqorida bayon etilgan fikrlarni tekshirish uchun C++ dasturlash tilining shartli operatorlardan foydalangan holda bir nechta misollarni ko‘rib chiqamiz.
1-misol. Butun son berilgan. Uning juft son ekanligini tekshirish dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
int a;
cout<<”a= ”; cin>>a;
if (a%2==0) cout<<"juft";
else cout<<"juft emas";
return 0;
}
2-misol. x ning berilgan qiymatlarida, funksiya qiymatini hisoblash dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include
using namespace std;
int main()
{
float x, y;
cout <<"x="; cin >> x;
if (x>0) y=-1;
else y=x*x;
cout<<"y="<
return 0;
}
3-misol. Butun son berilgan. Agar u manfiy bo‘lsa 2 ayirilsin, 0 ga teng bo‘lsa 10 bilan almashtirilsin. Olingan son chiqarilsin.
Berilgan masalaning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
int a; cin>>a;
if (a<0) a-=2;
else if (a==0) a=10;
cout<
return 0;
}
4-misol. Uchta son berilgan. Ular ichida manfiy sonlarning kubini hisoblovchi dastur.
Berilgan masalaning dastur kodi quyidagicha:
#include
using namespace std;
int main()
{
float a,b,c;
cout <<"a="; cin >> a;
cout <<"b="; cin >> b;
cout <<"c="; cin >> c;
if (a<0) cout<<"a="<
if (b<0) cout<<"b="<
if (c<0) cout<<"c="<
return 0;
}
5-misol. Uchta butun son berilgan. Ular orasidan musbatlari sonini topuvchi dastur.
Berilgan masalaning dastur kodi quyidagicha:
#include
using namespace std;
int main()
{
int a, b, c, k=0;
cout <<"a="; cin >> a;
cout <<"b="; cin >> b;
cout <<"c="; cin >> c;
if (a>0) k++;
if (b>0) k++;
if (c>0) k++;
cout<<"Musbatlari soni: "<
return 0;
}
6-misol. Uchta son berilgan. Ular orasidan eng kichigini topuvchi dastur.
Berilgan masalaning dastur kodi quyidagicha:
#include
using namespace std;
int main()
{
float a, b, c, min;
cout <<"a="; cin >> a;
cout <<"b="; cin >> b;
cout <<"c="; cin >> c;
if (a
if (c
cout<<"Eng kichigi: "<
return 0;
}
7-misol. Uchta son berilgan. Ularning ikkita kattasi yig‘indisini topuvchi dastur.
Berilgan masalaning dastur kodi quyidagicha:
#include
using namespace std;
int main()
{
float a, b, c, min;
cout <<"a="; cin >> a;
cout <<"b="; cin >> b;
cout <<"c="; cin >> c;
if (a
if (c
cout<<"Natija: "<
return 0;
}
Tanlash operatorlari
switch tanlash operatori o‘zgaruvchining qiymatiga qarab u yoki bu operator bajarilishi zarur bo‘lgan hollarda foydalaniladi. Operatorning umumiy ko‘rinishi quyida keltirilgan:
switch (ifoda)
{
case 1-qiymat: 1-operator; break;
case 2-qiymat: 2-operator; break;
case 3-qiymat: 3-operator; break;
. . .
case n-qiymat: n-operator; break;
default : operatorlar; break;
}
Operatorning ishlash algoritmi quyidagicha: 1. Dastlab ifodaning qiymati aniqlanadi (u butun son bo‘lishi kerak). 2. Agar ifoda 1-qiymat ga teng bo‘lsa, u holda 1-operator bajariladi. 3. Agar ifoda 2-qiymat ga teng bo‘lsa, u holda 2-operator bajariladi va hokazo. 4. Agar ifoda biron bir qiymatga mos kelmasa, u holda default xizmatchi so‘zdan keyingi operatorlar bajariladi.
Tanlash operatorida default bo‘limini tushirib qoldirish ham mumkin. Unda operatorning umumiy ko‘rinishi quyidagicha:
switch (ifoda)
{
case 1-qiymat: 1-operator; break;
case 2-qiymat: 2-operator; break;
case 3-qiymat: 3-operator; break;
. . .
case n-qiymat: n-operator; break;
}
Switch operatoridan chiqish uchun break operatoridan foydalanish talab etiladi. Agar break operatori qo‘llanilmasa, u holda aniqlangan qiymat ifoda qiymatiga mos kelmasligiga qaramay, ro‘yxatdagi barcha operatorlar bajariladi.
Yuqorida bayon etilgan fikrlarni tekshirish uchun C++ dasturlash tilida shartli operatorlardan foydalangan holda bir nechta misollarni ko‘rib chiqamiz.
1-misol. Berilgan k soniga mos keladigan hafta kunining nomini chop etuvchi dastur. (Bunda va birinchi kun dushanba)
Berilgan masalaning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
unsigned int k, z;
cout<<"k= "; cin>>k;
if (k<=31) {
z=k % 7;
switch (z) {
case 1: cout<<"Dushanba"; break;
case 2: cout<<"Seshanba"; break;
case 3: cout<<"Chorshanba"; break;
case 4: cout<<"Payshanba"; break;
case 5: cout<<"Juma"; break;
case 6: cout<<"Shanba"; break;
case 7: cout<<"Yakshanba"; break;
}
}
else cout<<"Bunday kun yo‘q";
return 0;
}
2-misol. Bahoni anglatadigan k soni berilgan. Agar k=1 bo‘lsa “yomon”, k=2 bo‘lsa “qoniqarsiz”, k=3 bo‘lsa “qoniqarli”, k=4 bo‘lsa “yaxshi”, k=5 bo‘lsa “a’lo” so‘zlaridan birini, agar k bu oraliqda bo‘lmasa “xato” so‘zini chop etish dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
unsigned int k;
cout<<"k= "; cin>>k;
switch (k) {
case 1: cout<<"Yomon"; break;
case 2: cout<<"Qoniqarsiz"; break;
case 3: cout<<"Qoniqarli"; break;
case 4: cout<<"Yaxshi"; break;
case 5: cout<<"A’lo"; break;
default: cout<<"Xato";
}
return 0;
}
3-misol. 1-12 oraliqdagi sonlarga mos keluvchi oy raqami berilgan. Shu oyga mos keladigan yil faslini chop etish dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
unsigned int oy;
cout<<"Oy raqami: "; cin>>oy;
switch (oy) {
case 1: case 2: case 12: cout<<"Qish fasli"; break;
case 3: case 4: case 5: cout<<"Bahor fasli"; break;
case 6: case 7: case 8: cout<<"Yoz fasli"; break;
case 9: case 10: case 11: cout<<"Kuz fasli"; break;
default: cout<<"Xato";
}
return 0;
}
4-misol. Arifmetik amallar quyidagi ko‘rinishda raqamlangan: 1 “qo‘shish”; 2 “ayirish”; 3 “ko‘paytirish”; 4 “bo‘lish”. n butun soni 1-4 oralig‘ida berilgan bo‘lib, a va b (b≠0) haqiqiy sonlari berilganda n ga mos keluvchi amalni bajarish va natijani chop etish dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
unsigned int n; float a, b;
cout<<"a= "; cin>>a;
cout<<"b= "; cin>>b;
cout<<"n= "; cin>>n;
switch (n) {
case 1: cout<
case 2: cout<
case 3: cout<
case 4: cout<
default: cout<<"Xato";
}
return 0;
}
5-misol. Birliklar quyidagi ko‘rinishda raqamlangan: 1-km; 2-m; 3-dm; 4-sm; 5-mm. Kesma uzunligi (haqiqiy son ko‘rinishida) berilib, uning birligi tanlanganda metrdagi ifodasini topish dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
unsigned int n; float a, m;
cout<<"a= "; cin>>a;
cout<<"n= "; cin>>n;
switch (n) {
case 1: cout<
case 2: cout<
case 3: cout<
case 4: cout<
case 5: cout<
default: cout<<"Xato";
}
return 0;
}
6-misol. Robot to‘rtta yo‘nalish bo‘yicha harakatlanishi mumkin (“1” Shimol, “2” G‘arb, “3” Janub, “4” Sharq) va uch xil buyruqni qabul qila oladi, ya’ni 0 harakatni davom ettirish, 1 chapga burilish, -1 o‘ngga burilish, c-robotning berilgan yo‘nalishi bo‘lib, n-unga uzatilgan buyruq bo‘lsa, berilgan buyruqdan keyingi robotning holatini chop etish dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
int c, n;
cout<<"c= "; cin>>c;
cout<<"n= "; cin>>n;
switch (c) {
1: switch (n){
0: cout<<"Shimol"; break;
1: cout<<"G‘arb"; break;
-1: cout<<"Sharq"; break;
}
2: switch (n){
0: cout<<"G‘arb"; break;
1: cout<<"Janub"; break;
-1: cout<<"Shimol"; break;
}
3: switch (n){
0: cout<<"Janub"; break;
1: cout<<"Sharq"; break;
-1: cout<<"G‘arb"; break;
}
4: switch (n){
0: cout<<"Sharq"; break;
1: cout<<"Shimol"; break;
-1: cout<<"Janub"; break;
}
default: cout<<"Xato";
}
}
7-misol. 1-99 oralig‘idagi butun son berilgan. U sonni satr ko‘rinishida chiqarish dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
int n, a, b;
cout<<"1 <= n <= 99 oralig‘idagi son kiriting: "; cin>>n;
if ((1<=n) && (n<=99)) {
a=n/10; b=n%10;
switch (a) {
case 1: cout<<"O‘n "; break;
case 2: cout<<"Yigirma "; break;
case 3: cout<<"O‘ttiz "; break;
case 4: cout<<"Qirq "; break;
case 5: cout<<"Ellik "; break;
case 6: cout<<"Oltmish "; break;
case 7: cout<<"Yetmish "; break;
case 8: cout<<"Sakson "; break;
case 9: cout<<"To‘qson "; break;
}
switch (b){
case 1: cout<<"bir "; break;
case 2: cout<<"ikki "; break;
case 3: cout<<"uch "; break;
case 4: cout<<"to‘rt "; break;
case 5: cout<<"besh "; break;
case 6: cout<<"olti "; break;
case 7: cout<<"yetti "; break;
case 8: cout<<"sakkiz "; break;
case 9: cout<<"to‘qqiz "; break;
}
} else cout<<"Xato";
}
Shartsiz o‘tish operatori
Shartsiz o‘tish operatori – dasturni bajarishda tasodifiy xatoliklarni keltirib chiqarishi mumkin. Uning qulayligi shundaki, algoritmning ixtiyoriy qatoridan boshqaruvni qulay hisoblash qatoriga o‘tkazadi. Bunda goto operatoridan foydalaniladi. goto operatorining sintaksisi quyidagicha:
goto
Nishon – bu biror bir belgilar davomida ikkita nuqta ( : ) qo‘yilgan identifikator. Nishon bilan qandaydir operator belgilanadi va keyinchalik, dasturning boshqa bir nomidan unga shartsiz o‘tish amalga oshiriladi. Nishonga shartsiz o‘tish goto operatori yordamida bajariladi. goto operatori orqali faqat, uning o‘zi joylashgan funksiya ichidagi operatorlarga o‘tish mumkin.
Yuqorida bayon etilgan fikrlarni tekshirish uchun C++ dasturlash tilida shartsiz o‘tish operatoridan foydalangan holda, bir nechta misollarni ko‘rib chiqamiz.
1-misol. n butun son berilgan. Agar n soni 10 dan katta bo‘lsa, n ning kvadrat ildizi topish, aks holda n sonini qayta kiritishni so`rovchi dastur.
Berilgan masalaning dastur kodi quyidagicha:
#include
#include
using namespace std;
int main(){
int n;
x: cout<<"n= "; cin>>n;
if (n>10) cout<
else {
cout<<"Qayta kiriting \n"; goto x;
}
}
2-misol. ax2+bx+c=0 kvadrat tenglama ildizlarini topish dasturi.
Berilgan masalaning dastur kodi quyidagicha:
#include
#include
using namespace std;
int main()
{
int a, b, c;
float d, x1, x2;
cout <<" ax^2+bx+c=0 tenglama ildizini topish dasturi!";
z: cout<<"\n a - koeffitsientni kiriting: ";
cin>>a;
cout<<"\n b - koeffitsientni kiriting: ";
cin>>b;
cout<<"\n c - koeffitsientni kiriting: ";
cin>>c;
if (a==0) {
cout<<" kvadrat tenglama emas\n qayta kiriting"; goto z; } else
{
d = b*b - 4 * a * c;
if (d<0)
{ cout << " tenglama haqiqiy ildizlarga ega emas\n qayta kiriting";
goto z; }
if (d==0)
{
cout << " tenglama yagona ildizga ega: ";
x1=x2= -b / (2 * a);
cout<<"\n x= "<
}
else
{
cout << " tenglama ikkita ildizga ega: ";
x1 = (- b + sqrt(d)) / (2 * a);
x2 = (- b - sqrt(d)) / (2 * a);
cout<<"\n x1= "<
cout<<"\n x2= "<
}
}
return 0;
}
Mustaqil bajarish uchun topshiriqlar
1. x va y butun sonlar berilgan. Ularning hech bo‘lmaganda bittasi toq ekanligini tekshiruvchi dastur tuzing.
2. Berilgann x, y, z butun sonlardan musbatlarining kubini chiqaruvchi dastur tuzing.
3. Uchta haqiqiy son berilgan. Ushbu sonlar uchburchakning tomonlarini tashkil etishini tekshiruvchi dastur tuzing.
4. Quyidagi misolni dasturini tuzing:
5. Quyidagi misolni dasturini tuzing:
6. To`rtta haqiqiy son berilgan. Ulardan bittasi qolgan uchtasidan ishorasi bilan farq qilsa, shu farq qiluvchi sonning tartib raqamini aniqlovchi dastur tuzing.
7. Ox va Oy o‘qlarida yotmaydigan nuqta koordinatalari berilgan. Uning qaysi chorakka tegishli ekanligini aniqlovchi dastur tuzing.
8. To‘g‘ri sanani ifodalovchi kabisa bo‘lmagan yilning (k) kuni va (o) oyi butun sonlar ko‘rinishida berilgan. Berilgan sanadan keyingi sanani topuvchi dastur tuzing.
9. Uch xonali a va b sonlar oralig‘idagi avtomashina davlat raqamini bildiruvchi butun son berilgan. U sonni satr ko‘rinishda chiqaruvchi dastur tuzing.
10. Kvadrat tenglamani to`la tekshiruvchi dastur tuzing.
1 2 3 4 5 6 7 8 9 10 11
2.2-§. C++ dasturlash tilida takrorlanuvchi jarayonlar
Ba’zi bir misol va masalalarning parametrlarini o‘zgarishiga qarab ma’lum hisoblashlar bir necha marta takrorlanib, bajarilishi talab etiladi. Ushbu jarayonlarni amalga oshirishda takrorlanuvchi operatorlardan foydalaniladi. Masalan, funksiyada x ning bir nechta qiymatlarini hisoblashni va berilgan ikkita oraliqdagi sonlarni yoki qatorlarni yig‘indisi, ko‘paytmasi kabi amallarni dasturlash talab etilgan bo`lsin. Bu kabi dasturlarni shartli o‘tish operatori yordamida ham dasturlash mumkin. Ammo takrorlanuvchi operatorlardan foydalanilsa, hisoblash vaqti ma’lum darajada tejaladi. Shu bois, C++ dasturlash tilida takrorlanuvchi jarayonlarni dasturlash uchun for, while, do-while, break, continue operatorlar mavjud. Ushbu operatorlarning imkoniyatlarini quyida ko`rib chiqamiz.
for takrorlash operatori
for operatori takrorlanishlar soni aniq bo‘lgan jarayonlarni hisoblashda foydalaniladi. Uning umumiy ko‘rinishi quyidagicha:
for (boshlang‘ich_o‘zlashtirish; shart; qadam) operatorlar;
Bu yerda, boshlang‘ich_o‘zlashtirish – vergul bilan ajratilgan operator yoki operatorlar guruhi bo‘lib, siklda ishlatiladigan qiymatlarga boshlang‘ich qiymatlarni, shu jumladan sikl parametrini belgilash uchun ishlatiladi va sikl boshida bir marta bajariladi; shart – siklga kirish shartini belgilaydigan butun yoki mantiqiy ifoda, agar shart rost bo‘lsa (nolga teng bo‘lmasa), u holda sikl bajariladi; qadam – operator yoki vergul bilan ajratilgan operatorlar guruhi, ular har bir takrorlanishdan keyin bajariladi va sikl parametrini o‘zgartirishga xizmat qiladi; operator - siklning tanasi bo‘lgan har qanday C++ dasturlash tili operatori.
For takrorlanish operatorining blok-sxemasi 16-rasmda keltirilgan.
16-rasm. For takrorlash operatori blok sxemasi.
Bunda qadam yoki operator natijasi shartga ta’sir qilishi kerak, aks holda sikl hech qachon tugamaydi. Masalan:
for(int i=n1; i<=n2; i++) m;
Bu yerda i sikl parametri, n1, n2 esa i parametrining boshlang‘ich va oxirgi qiymati hisoblanadi (bunda n1<=n2 bo‘lishi shart). Ular o‘zgarmas son yoki ifoda bo‘lishi mumkin. Bunda m sikl tanasi bo‘lib, bir nechta operatorlardan iborat bo‘ladi. Agar sikl tanasi bir necha operatordan iborat bo‘lsa, ular {…} ichiga olinadi.
Agar for(int i=n1; i<=n2; i--) ko‘rinishda berilsa,sikl parametri teskari bo‘yicha o‘zgaradi, ya’ni -1 qadam bilan (bu yerda n1>=n2 bo‘lishi shart). U holda sikl quyidagi ko‘rinishga ega bo‘ladi: for(int i=n1; i<=n2; i--) m;
for operatori tarkibidagi boshlang‘ich_o‘zlashtirish, shart yoki qadam ni tushirib qoldirish ham mumkin, ammo nuqta-vergul joyida qolishi kerak. Masalan, eng sodda ko‘rinishdagi takrorlash operatori quyidagi ko‘rinishga ega:
for ( ; ; ) cout <<”Cheksiz takrorlash…” ;
Agar takrorlanish jarayonida bir nechta o‘zgaruvchilarning qiymati bir vaqtda o‘zgarishi talab etilsa, bunda boshlang‘ich_o‘zlashtirish va qadam ifodalarida bir nechta operatorlarni vergul bilan yozish orqali amalga oshirish mumkin:
for (int i=1, j=10; i<=10; i++, j--)
{
…
};
Yuqoridagi takrorlanish operatorining har bir qadamida i va j o‘zgaruvchilarning qiymatlari mos ravishda o‘zgarib boradi.
for operatorida boshlang‘ich_o‘zlashtirish bo‘limini ham tushirib qoldirish mumkin. Bunda boshlang‘ich_o‘zlashtirish bo‘limini for operatoridan oldin berilishi shart. Masalan, 1 dan 10 gacha sonlar yig‘indisini toppish uchun quyidagi dastur kodi yoziladi:
…
int i=1;
for ( ; i<=n; i++) s+=i;
…
for operatorida
shart bo‘limini ham tushirib qoldirish mumkin. Bunday hollarda shart takrorlanish tanasida berilishi lozim. Takrorlanishni tugatish uchun esa break operatoridan foydalaniladi. Masalan, yuqorida misol uchun dastur kodi quyidagicha yoziladi:
…
int i=1;
for ( ; ; i++) {
s+=i;
if (i<=n) break;
}
…
Bundan tashqari operatordagi qadamni ham takrorlanish tanasida yozish mumkin. Masalan:
…
int i=1;
for ( ; ; ) {
s+=i;
if (i<=n) break;
i++;
}
…
Shu bilan birga for operatorida takrorlash tanasi bo‘lmasligi ham mumkin. Bu holda dastur bajarilishini ma’lum bir vaqtga “to‘xtatib” turish kerak bo‘lsa, takrorlash tanasiga hech qanday operator yozilmaydi. Bunda nuqtali vergul yozish orqali amalga oshiriladi:
for (int i=1; i<=100; i++) ;
Yuqorida keltirilgan usul orqali 1 dan 10 gacha bo‘lgan natural sonlar yig‘indisini topish uchun quyidagi dastur kodi yoziladi:
…
for (int i=1; i<=10; s+=i++) ;
. . .
while takrorlash operatori
while takrorlash operatori, operator yoki blokni takrorlash sharti yolg‘on (false) bo‘lguncha takror bajaradi. U quyidagi ko‘rinishga ega:
while (
Agar
while takrorlanish operatoring blok-sxemasi 17-rasmda keltirilgan.
17-rasm. While takrorlash operatori blok sxemasi
while takrorlash shartini oldindan tekshiruvchi takrorlash operatori hisoblanadi. Agar takrorlash boshida
Ayrim hollarda
do-while takrorlash operatori
do-while takrorlash operatori while operatoridan farqli ravishda oldin operator yoki blokni bajaradi va keyin takrorlash shartini tekshiradi. Bu operator takrorlash tanasini kamida bir marta bajarilishini ta’minlaydi. do-while takrorlash operatorining umumiy ko‘rinishi quyidagicha:
do
while (
Uning blok-sxemasi 18-rasmda keltirilgan.
18-rasm. do-while takrorlash operatori blok sxemasi.
Bunday takrorlash operatorining keng qo‘llaniladigan holatlari – birorta jarayonni davom ettirish yoki to‘xtatish haqidagi murojaatdir.
break operatori
Takrorlash operatorlari bajarilishida shunday holatlar yuzaga kelishi mumkinki, unda takrorlashni oxiriga yetkazmasdan, qaysidir qadamda takrorlashdan chiqish zarurati paydo bo‘ladi. Boshqacha aytganda takrorlashni “uzish” kerak bo‘lishi mumkin. Bunda break operatoridan foydalaniladi. break operatori takrorlash operatori tanasining ixtiyoriy (zarur) joylariga qo‘yish orqali shu joydan takrorlash operatoridan chiqishni ta’minlaydi.
continue operatori
continue operatori xuddi break operatoridek takrorlash operatori tanasini bajarishni to‘xtatadi, ammo dasturni operatordan chiqmasdan takrorlashning keyingi qadamiga o‘tishini ta’minlaydi.
Yuqorida bayon qilingan fikrlarni tekshirib ko‘rish uchun C++ dasturlash tilida, takrorlanuvchi operatorlardan foydalangan holda bir nechta dasturlarni ko‘rib o‘tamiz.
1-misol. 1 kg konfetning narxi haqiqiy sonda berilgan. 1, 2, …, 10 kg konfetning bahosini chiqaruvchi dastur.
1-usul. for takrorlash operatoridan foydalanilsa, hisoblashning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
float b;
cout<<"b= "; cin>>b;
for (int i=1; i<=10; i++)
cout<
return 0;
}
2-usul. while takrorlash operatoridan foydalanib hisoblashning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
float b;
cout<<"b= "; cin>>b;
int i=1;
while (i<=10){
cout<
i++;
}
return 0;
}
3-usul. do while takrorlash operatoridan foydalanib hisoblashning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
float b;
cout<<"b= "; cin>>b;
int i=1;
do {
cout<
i++;
} while (i<=10);
return 0;
}
2-misol. 1 dan n gacha bo‘lgan, 4 ga karrali sonlar yig‘indisini hisoblash dasturi.
1-usul. for takrorlash operatoridan foydalanib hisoblashning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
int n, s=0;
cout<<"n= "; cin>>n;
for (int i=1; i<=n; i++)
if (i%4==0) s+=i;
cout<
return 0;
}
2-usul. while takrorlash operatoridan foydalanib hisoblashning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
int n, s=0;
cout<<"n= "; cin>>n;
int i=1;
while (i<=n){
s+=i;
i++;
}
cout<
return 0;
}
3-usul. do while takrorlash operatoridan foydalanib hisoblashning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
int n, s=0;
cout<<"n= "; cin>>n;
int i=1;
do {
s+=i;
i++;
} while (i<=n);
cout<
return 0;
}
3-misol. a va n butun sonlari berilgan (n>0). 1+ a + a2 + a3 + ... + an . Bitta sikldan foydalanib yig‘indisini hisoblash dasturi.
1-usul. for takrorlash operatoridan foydalanib, hisoblashning dastur kodi quyidagicha:
#include
#include
using namespace std;
int main(){
int n, a; float s=0;
cout<<"a= "; cin>>a;
cout<<"n= "; cin>>n;
for (int i=0; i<=n; i++)
s+=pow(a,i);
cout<
return 0;
}
2-usul. while takrorlash operatoridan foydalanib, hisoblashning dastur kodi quyidagicha:
#include
#include
using namespace std;
int main(){
int n, a; float s=0;
cout<<"a= "; cin>>a;
cout<<"n= "; cin>>n;
int i=0;
while (i<=n){
s+=pow(a,i);
i++;
}
cout<
return 0;
}
3-usul. do while takrorlash operatoridan foydalanib, hisoblashning dastur kodi quyidagicha:
#include
#include
using namespace std;
int main(){
int n, a; float s=0;
cout<<"a= "; cin>>a;
cout<<"n= "; cin>>n;
int i=0;
do {
s+=pow(a,i);
i++;
} while (i<=n);
cout<
return 0;
}
4-misol. n (n>0) butun son berilgan. Butunga bo‘lish va qoldiqni aniqlash operatsiyalaridan foydalanib, n sonida 3 ga karrali raqam borligini aniqlovchi dastur.
1-usul. for takrorlash operatoridan foydalanib, hisoblashning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
int n, k=0;
cout<<"n= "; cin>>n;
if (n>0)
{
for (int i=1; ; i++){
if ((n%10)%3==0) k++;
n=n/10;
if (n==0) break;
}
cout<
} else cout<<"Butun va musbat son kiriting";
}
2-usul. while takrorlash operatoridan foydalanib, hisoblashning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
int n, k=0;
cout<<"n= "; cin>>n;
if (n>0)
{
int i=1;
while (n>0){
if ((n%10)%3==0) k++;
n=n/10;
}
cout<
} else cout<<"Butun va musbat son kiriting";
return 0;
}
3-usul. do while takrorlash operatoridan foydalanib, hisoblashning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
int n, k=0;
cout<<"n= "; cin>>n;
if (n>0)
{
int i=1;
do {
if ((n%10)%3==0) k++;
n=n/10;
} while (n>0);
cout<
} else cout<<"Butun va musbat son kiriting";
return 0;
}
5-misol. n (n>1) butun son berilgan. Agar u tub son bo‘lsa true, aks holda false jumlasini chiqaruvchi dastur.
1-usul. for takrorlash operatoridan foydalanib, hisoblashning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
int n, k=0;
cout<<"n= "; cin>>n;
for (int i=1; i<=n; i++)
if (n%i==0) k++;
if (k==2) cout<<"true";
else cout<<"false";
return 0;
}
2-usul. while takrorlash operatoridan foydalanib, hisoblashning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
int n, k=0;
cout<<"n= "; cin>>n;
int i=1;
while (i<=n){
if (n%i==0) k++;
i++;
}
if (k==2) cout<<"true";
else cout<<"false";
return 0;
}
3-usul. do while takrorlash operatoridan foydalanib, hisoblashning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
int n, k=0;
cout<<"n= "; cin>>n;
int i=1;
do {
if (n%i==0) k++;
i++;
} while (i<=n);
if (k==2) cout<<"true";
else cout<<"false";
return 0;
}
6-misol. Barcha uch xonali sonlar ichida raqamlarining yig‘indisi 21 ga teng bo‘lgan birinchi sonni topish dasturi.
Berilgan misolni break operatoridan foydalanib, hisoblashning dastur kodi quyidagicha:
#include
using namespace std;
int main(){
int n;
for(int i=100; i<=999; i++) {
int a=i%10;
int b=i/10;
int c=b/10;
int d=b%10;
if (a+c+d==21) { cout<
}
return 0;
}
7-misol. n butun son berilgan (n>0). 1 va n oralig‘idagi tub sonlarni chiqarish dasturi.
Berilgan misolni continue operatoridan foydalanib hisoblashning dastur kodi quyidagicha bo‘ladi:
#include
using namespace std;
int main(){
int n;
cout<<"n= "; cin>>n;
bool division=false;
for (int i=2; i<=n; i++)
{
for (int j=2; j
{
if (i%j) continue;
else
{
division=true; break;
}
}
if (!division) cout<
division=false;
}
return 0;
}
Mustaqil bajarish uchun topshiriqlar
1. 1 dan n gacha bo`lgan butun sonlarning ko‘paytmasini topish dasturini tuzing.
2. Quyidagi yig`indini hisoblash dasturini tuzing: . Bunda n>0.
3. 1,1-1,2+1,3-… Ifodaning qiymatini topish dasturini tuzing.
4. Quyidagi misolni dasturini tuzing:
5. n butun soni berilgan (n>0). 1!+2!+…+n! ni bitta sikldan foydalanib, yig‘indisini hisoblash dasturini tuzing.
6. Quyidagi yig‘indini hisoblash dasturini tuzing: 1n+2n-1+…+n1. Bunda n>0.
7. n (n>1) butun son berilgan. 1+2+…+k yig‘indining n dan katta yoki teng bo‘lishini ta’minlaydigan eng kichik k butun soni va yig‘indining qiymatini chiqaruvchi dastur tuzing.
8. n (n>1) butun son berilgan. Butunga bo‘lish va qoldiqni aniqlash amallaridan foydalanib, uning raqamlari yig‘indisini va raqamlari sonini chiqaruvchi dastur tuzing.
9. n (n>1) butun son berilgan. Agar u tub son bo‘lsa true, aks holda false jumlasini chiqaruvchi dastur tuzing.
10. a va b sonlar oralig`idagi butun sonlardan iborat bo`lgan uchburchakning tomonlari berilganda, uning yuzasi butun son bo`ladigan tomonlarni topuvchi dastur tuzing.