1-Mavzu. Axborotlarni kompyuter xotirasida tasvirlanishi Reja



Download 1,62 Mb.
Pdf ko'rish
bet68/80
Sana27.06.2022
Hajmi1,62 Mb.
#708480
1   ...   64   65   66   67   68   69   70   71   ...   80
Bog'liq
Maruza matni Dasturlash asoslari

Misol-4.
Ikkita tub son «egizak» deyiladi, agar ular bir-biridan 2 farq qilsa (masalan, 41 va 
43 sonlari). Berilgan natural n uchun [n..2n] kesmadagi barcha «egizak» sonlar juftliklari 
chop etilsin. Masalani yechish uchun berilgan k conini tub son yoki yo`qligi aniqlovchi 
mantiqiy funktsiyani tuzish zarur bo`ladi. Funktsiyada k soni 2..k/2 gacha sonlarga
bo`linadi, agar k bu sonlarning birortasiga ham bo`linmasa, u tub son hisoblanadi va 
funktsiya true qiymatini qaytaradi. Bosh funktsiyada, berilgan n uchun [n..2n] oraliqdagi 
(n, n+2), (n+1, n+3), ..., (2n-2, 2n) son juftliklarini tub sonlar ekanligi tekshiriladi va 
shartni qanoatlantirgan juftliklar chop etiladi. 
Dastur matni:
bool TubSon(unsigned long k); 
int main() 
{ unsigned long n,i; 
unsigned char egizak=0; 
cout<<"n -> "; cin>>n; 
cout<<'['<for(i=n; i<=2*n-2; i++) 
if(TubSon(i) && TubSon(i+2)) 
{ if (!egizak) cout<<" oralig'idagi egizak tub sonlar:\n"; 
else cout<<"; "; egizak=1; 
cout<<'{'<}; 
if(!egizak) cout<<" oralig'ida egizak tub sonlar mavjud emas."; 
else cout<<‘.‘; 
return 0;} 
bool TubSon(unsigned long k) 
{ unsigned long m; 
for (m=2; m<=k/2; m++) 
if (k%m==0) return false; 
return true;}
Natural n coni uchun 100 kiritilsa, dastur quyidagi sonlar juftliklarini chop qiladi: 


95 
[100..200] oralig'idagi egizak tub sonlar: 
{101,103}; {107,109}; {137,139}; {149,151};
{179,181}; {191,193}; {197,199}. 
Kelishuv bo`yicha argumentlar. 
C++ tilida funktsiya chaqirilganda ayrim argumentlarni tushirib qoldirish mumkin. 
Bunga funktsiya prototipida ushbu parametrlarni kelishuv bo`yicha qiymatini ko`rsatish 
orqali erishish mumkin. Masalan, quyida prototipi keltirilgan funktsiya turli chaqirishga 
ega bo`lishi mumkin: 
//funksiya prototipi 
void Butun_Son(int I, bool Bayroq=true, char Blg=‗\n‘); 
//funksiyani chaqirish variantlari 
Butun_Son(1, false, ‗a‘); 
Butun_Son(2, false); 
Butun_Son(3); 
Birinchi chaqiruvda barcha parametrlar mos argumentlar orqali qiymatlarini qabul 
qiladi, ikkinchi holda I parametri 2 qiymatini, bayroq parametri false qiymatini va Blg 
o`zgaruvchisi kelishuv bo`yicha ‗\n‘ qiymatini qabul qiladi. 
Kelishuv bo`yicha qiymat berishning bitta sharti bor - parametrlar ro`yxatida 
kelishuv bo`yicha qiymat berilgan parametrlardan keyingi parametrlar ham kelishuv 
bo`yicha qiymatga ega bo`lishlari shart. YUqoridagi misolda I parametri kelishuv bo`yicha 
qiymat qabul qilingan holda, Bayroq yoki Blg parametrlari qiymatsiz bo`lishi mumkin 
emas. Misol tariqasida berilgan sonni ko`rsatilgan aniqlikda chop etuvchi dasturni 
ko`raylik. Qo`yilgan masalani yechishda sonni darajaga oshirish funktsiyasi - pow() va 
suzuvchi nuqtali uzun sondan modul olish fabsl() funktsiyasidan foydala-niladi. Bu 
funktsiyalar prototipi «cmath» sarlavha faylida joylashgan:
#include  
using namespace std; 
#include  
void Chop_qilish(double Numb, double Aniqlik=1, 
bool Bayroq=true); 
int main() 

double Mpi=-3.141592654; 
Chop_qilish(Mpi, 4, false); 
Chop_qilish(Mpi, 2); 
Chop_qilish(Mpi); 
return 0;} 
void Chop_qilish(double Numb,double Aniqlik=1, 
bool Bayroq = true) 
{ if(!Bayroq)Numb=fabsl(Numb); 


96 
Numb=(int)(Numb*pow(10,Aniqlik)); 
Numb=Numb/pow(10,Aniqlik);
cout<Dasturda sonni turli aniqlikda (Aniqlik parametri qiymati orqali) chop etish uchun 
har xil variantlarda Chop_qilish( ) funktsiyasi chaqirilgan. Dastur ishlashi natijasida 
ekranda quyidagi sonlar chop etiladi: 
3.1415 
-3.14 
-3.1 
Parametrning kelishuv bo`yicha beriladigan qiymati o`zgarmas, global o`zgaruvchi 
yoki qandaydir funktsiya tomonidan qaytaradigan qiymat bo`lishi mumkin.
Ko`rinish sohasi. Lokal va global o`zgaruvchilar. 
O`zgaruvchilar funktsiya tanasida yoki undan tashqarida e`lon qilinishi mumkin. 
Funktsiya ichida e`lon qilingan o`zgaruvchilarga 
lokal o`zgaruvchilar
deyiladi. Bunday 
o`zgaruvchilar xotiradagi dastur stekida joylashadi va faqat o`zi e`lon qilingan funktsiya 
tanasida amal qiladi. Boshqaruv asosiy funktsiyaga qaytishi bilan lokal o`zgaruvchilar 
uchun ajratilgan xotira bo`shatiladi (o`chiriladi).
Har bir o`zgaruvchi o`zining amal qilish sohasi va yashash vaqti xususiyatlari bilan 
xarakterlanadi.
O`zgaruvchi 
amal qilish sohasi
deganda o`zgaruvchini ishlatish mumkin bo`lgan 
dastur sohasi (qismi) tushuniladi. Bu tushuncha bilan o`zgaruvchining 
ko`rinish sohasi
uzviy bog‘langan. O`zgaruvchi amal qilish sohasidan chiqqanda ko`rinmay qoladi. 
Ikkinchi tomondan, o`zgaruvchi amal qilish sohasida bo`lishi, lekin ko`rinmasligi 
mumkin. Bunda ko`rinish sohasiga ruxsat berish amali «::» yordamida ko`rinmas 
o`zgaruvchiga murojat qilish mumkin bo`ladi. 
O`zgaruvchining 
yashash vaqti
deb, u mavjud bo`lgan dastur bo`lagining 
bajarilishiga ketgan vaqt intervaliga aytiladi. 
Lokal o`zgaruvchilar o`zlari e`lon qilingan funktsiya yoki blok chegarasida 
ko`rinish sohasiga ega. Blokdagi ichki bloklarda xuddi shu nomdagi o`zgaruvchi e`lon 
qilingan bo`lsa, ichki bloklarda bu lokal o`zgaruvchi ham amal qilmay qoladi. Lokal 
o`zgaruvchi yashash vaqti - blok yoki funktsiyani bajarish vaqti bilan aniqlanadi. Bu hol 
shuni anglatadiki, turli funktsiyalarda bir-biriga umuman bog‘liq bo`lma-gan bir xil 
nomdagi lokal o`zgaruvchilarni ishlatish mumkin. 
Quyidagi dasturda main() va sum() funktsiyalarida bir xil nomdagi o`zgaruvchilarni 
ishlatish ko`rsatilgan. Dasturda ikkita sonning yig‘indisi hisoblanadi va chop etiladi: 
#include  
using namespace std; 
// funksiya prototipi 
int sum(int a, int b); 
int main() 


97 
{ // lokal o‗zgaruvchilar 
int x=r; int y=4; 
cout << sum(x, y); 
return 0;} 
int sum(int a,int b) 
{// lokal o‗zgaruvchi 
int x=a+b; 
return x;} 
Global o`zgaruvchilar dastur matnida funktsiya aniqlanishidan tashqarida e`lon 
qilinadi va e`lon qilingan joyidan boshlab dastur oxirigacha amal qiladi. 
#include  
using namespace std; 
int f1(); int f2(); 
int main() 
{cout<return 0;} 
int f1() 
{return x; // kompilyatsiya xatosi ro‗y beradi} 
int x=10; // global o‗zgaruvchi e‘loni 
int f2() { return x*x; } 
Yuqorida keltirilgan dasturda kompilyasiya xatosi ro`y beradi, chunki f1() funktsiya 
uchun x o`zgaruvchisi noma`lum hisoblanadi.
Dastur matnida global o`zgaruvchilarni ular e`lonidan keyin yozilgan ixtiyoriy 
funktsiyada ishlatish mumkin. SHu sababli, global o`zgaruvchilar dastur matnining 
boshida yoziladi. Funktsiya ichidan global o`zgaruvchiga murojat qilish uchun funktsiyada 
uning nomi bilan mos tushadigan lokal o`zgaruvchilar bo`lmasligi kerak. Agar global 
o`zgaruvchi e`lonida unga boshlang‘ich qiymat berilmagan bo`lsa, ularning qiymati 0 
hisoblanadi. Global o`zgaruvchining amal qilish sohasi uning ko`rinish sohasi bilan ustma-
ust tushadi.
SHuni qayd etish kerakki, tajribali dastur tuzuvchilar imkon qadar global 
o`zgaruvchilarni ishlatmaslikka harakat qilishadi, chunki bunday o`zgaruvchilar qiymatini 
dasturning ixtiyoriy joyidan o`zgartirish xavfi mavjudligi sababli dastur ishlashida 
mazmunan xatolar yuzaga kelishi mumkin. Bu fikrimizni tasdiqlovchi dasturni ko`raylik. 
#include  
using namespace std; 
// global o‗zgaruvchi e‘loni
int test = 100; 
void Chop_qilish(void); 
int main()
{//lokal o‗zgaruvchi e‘loni


98 
int test=10; 
//global o‗zgaruvchi chop qilish funksiyasini chaqirish 
Chop_qilish(); 
cout << ―Lokal o‘zgaruvchi: ‖ << test << ‗\n‘; 
return 0;} 
void Chop_qilish(void) 
{cout<< ―Global o‘zgaruvchi: ‖ << test << ‗\n‘;} 
Dastur boshida test global o`zgaruvchisi 100 qiymati bilan e`lon qilinadi. 
Keyinchalik, main() funktsiyasida test nomi bilan lokal o`zgaruvchisi 10 qiymati bilan 
e`lon qilinadi. Dasturda, Chop_qilish() funktsiyasiga murojaat qilinganida, asosiy 
funktsiya tanasidan vaqtincha chiqiladi va natijada main() funktsiyasida e`lon qilingan 
barcha lokal o`zgaruvchilarga murojaat qilish mumkin bo`lmay qoladi. SHu sababli 
Chop_qilish() funktsiyasida global test o`zgaruvchisining qiymatini chop etiladi. Asosiy 
dasturga qaytilgandan keyin, main() funktsiyasidagi lokal test o`zgaruvchisi global test 
o`zgaruvchisini «berkitadi» va lokal test o`zgaruvchini qiymati chop etiladi. Dastur 
ishlashi natijasida ekranga quyidagi natijalar chop etiladi: 
Global o‗zgaruvchi: 100 
Lokal o‗zgaruvchi: 10 

Download 1,62 Mb.

Do'stlaringiz bilan baham:
1   ...   64   65   66   67   68   69   70   71   ...   80




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2025
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish