O’zbekiston respublikasi oliy va o’rta maxsus ta’lim vazirligi farg’ona davlat universiteti fizika-matematika fakulteti



Download 98,6 Kb.
bet6/8
Sana01.08.2021
Hajmi98,6 Kb.
#134722
1   2   3   4   5   6   7   8
Bog'liq
Karimova Dilshoda

To'g'ridan-to'g'ri rekursiya: funktsiya o'zini o'zi chaqirganda, uni to'g'ridan-to'g'ri rekursiya deb atashadi, biz yuqorida ko'rgan misol to'g'ridan-to'g'ri rekursiya misoli.

Bilvosita rekursiya: Agar funktsiya boshqa funktsiyani chaqirsa va bu funktsiya chaqiruvchi funktsiyani chaqirsa, bu bilvosita rekursiya deb ataladi. Masalan: A funktsiyasi B funktsiyasini va B funktsiyasi A funktsiyasini chaqiradi.

C ++ da bilvosita rekursiya misoli

#include

using namespace std;

int fa(int);

int fb(int);

int fa(int n){

if(n<=1)


return 1;

else


return n*fb(n-1);

}

int fb(int n){



if(n<=1)

return 1;

else

return n*fa(n-1);



}

int main(){

int num=5;

   cout<

return 0;

}

Natija:

120
Ko’rsatkich va ulardan foydalanish

C ++ da ko'rsatkichlar boshqa o'zgaruvchilarning xotira manzillarini saqlaydigan o'zgaruvchilardir.

Manzil C ++ da

Agar bizda o'zgaruvchimiz bo'lsa var bizning dasturimizda, & varbizga manzilini xotirada beradi. Masalan,

1-misol: O'zgaruvchan manzillarni C ++ da chop etish

#include

using namespace std;

int main()

{

// declare variables



int var1 = 3;

int var2 = 24;

int var3 = 17;
// print address of var1

cout << "Address of var1: "<< &var1 << endl;


// print address of var2

cout << "Address of var2: " << &var2 << endl;


// print address of var3

cout << "Address of var3: " << &var3 << endl;

}

Chiqish
Var1 manzili: 0x7fff5fbff8ac



Var2 manzili: 0x7fff5fbff8a8

Var3 manzili: 0x7fff5fbff8a4

Bu erda 0xboshida manzil o'n oltinchi shaklda ko'rsatilgan.
E'tibor bering, birinchi manzil ikkinchisidan 4 baytga, ikkinchi manzil esa uchinchi baytdan 4 baytga farq qiladi.

Buning sababi shundaki, int64 bitli tizimda o'zgaruvchining hajmi 4 baytni tashkil qiladi.

Eslatma: Dasturni ishga tushirishda siz bir xil natijalarga erisha olmaysiz.

C ++ ko'rsatkichlari

Yuqorida aytib o'tganimizdek, ko'rsatkichlar qiymatlarni emas, balki manzillarni saqlash uchun ishlatiladi.

Ko'rsatkichlarni qanday e'lon qilishimiz mumkin.

int *pointVar;

Bu erda biz ko'rsatgichni e'lon qildik nuqtaVarning intturi.

Ko'rsatkichlarni quyidagi tarzda e'lon qilishimiz mumkin.

int* pointVar; // preferred syntax

Ko'rsatkichlarni e'lon qilishning yana bir misolini ko'rib chiqaylik.

int* pointVar, p;

Bu erda biz ko'rsatgichni e'lon qildik nuqtaVar va oddiy o'zgaruvchi p.

Eslatma:* operator DECLARE markerni ma'lumotlar turi so'ng ishlatiladi.

Ko'rsatkichlarga manzillarni tayinlash

Ko'rsatkichlarga qanday qilib manzillarni tayinlashimiz mumkin:

int* pointVar, var;

var = 5;


// assign address of var to pointVar pointer

pointVar = &var;

Bu erda 5o'zgaruvchiga tayinlanganvar. Va, manzilivar ga tayinlangan nuqtaVarkod bilan ko'rsatgich pointVar = &var.

Ko'rsatkichlar yordamida manzildan qiymat oling

Ko'rsatkich bilan ko'rsatilgan qiymatni olish uchun biz *operatordan foydalanamiz . Masalan:

int* pointVar, var;

var = 5;
// assign address of var to pointVar

pointVar = &var;


// access value pointed by pointVar

cout << *pointVar << endl; // Output: 5

Yuqoridagi kodda var manzili berilgan nuqtaVar. Biz *pointVarushbu manzilda saqlangan qiymatni olish uchun foydalanganmiz .

Qachon ko'rsatgichlar *bilan ishlatilsa, uni ajratish operatori deyiladi . U ko'rsatgichda ishlaydi va ko'rsatgichda saqlangan manzil ko'rsatgan qiymatni beradi. Ya'ni *pointVar = var,.

Eslatma: C ++ da, nuqtaVar va * nuqtaVarbutunlay boshqacha. Biz shunga o'xshash narsani qila olmaymiz*pointVar = &var;

2-misol: C ++ ko'rsatkichlarining ishlashi

#include

using namespace std;

int main() {

int var = 5;

// declare pointer variable

int* pointVar;

// store address of var

pointVar = &var;

// print value of var

cout << "var = " << var << endl;

// print address of var

cout << "Address of var (&var) = " << &var << endl



<< endl;

// print pointer pointVar

cout << "pointVar = " << pointVar << endl;

// print the content of the address pointVar points to

cout << "Content of the address pointed to by pointVar (*pointVar) = " << *pointVar << endl;

return 0;

}

Chiqish


var = 5

Var (& var) = 0x61ff08 manzili

nuqtaVar = 0x61ff08

PointVar (* pointVar) = 5 tomonidan ko'rsatilgan manzilning tarkibi

C ++ ko'rsatkichlarining ishlashi

C ++ ko'rsatkichlari bilan ishlash

Ko'rsatkichlar tomonidan ko'rsatilgan qiymatni o'zgartirish

Agar nuqtaVar manziliga ishora qiladi var, ning qiymatini o'zgartirishimiz mumkin var yordamida * nuqtaVar.

Masalan,

int var = 5;

int* pointVar;

// assign address of var

pointVar = &var;

// change value at address pointVar

*pointVar = 1;

cout << var << endl; // Output: 1

Bu yerda, nuqtaVarva &varqiymati bir xil manzilga egavar qachon o'zgartiriladi * nuqtaVar o'zgartirildi.

3-misol: Ko'rsatkichlar tomonidan ko'rsatilgan qiymatni o'zgartirish

#include

using namespace std;

int main() {

int var = 5;

int* pointVar;

// store address of var

pointVar = &var;
// print var

cout << "var = " << var << endl;

// print *pointVar

cout << "*pointVar = " << *pointVar << endl



<< endl;

cout << "Changing value of var to 7:" << endl;

// change value of var to 7

var = 7;


// print var

cout << "var = " << var << endl;

// print *pointVar

cout << "*pointVar = " << *pointVar << endl



<< endl;

cout << "Changing value of *pointVar to 16:" << endl;

// change value of var to 16

*pointVar = 16;

// print var

cout << "var = " << var << endl;

// print *pointVar

cout << "*pointVar = " << *pointVar << endl;

return 0;

}

Chiqish



var = 5

* pointVar = 5

Var qiymatini 7 ga o'zgartirish:

var = 7


* pointVar = 7

* PointVar qiymatini 16 ga o'zgartirish:

var = 16

* pointVar = 16

Ko'rsatkichlar bilan ishlashda keng tarqalgan xatolar

Aytaylik, biz ko'rsatgichni xohlaymiz varPoint manziliga ishora qilish var. Keyin,

int var, *varPoint;

// Wrong!

// varPoint is an address but var is not

varPoint = var;

// Wrong!

// &var is an address

// *varPoint is the value stored in &var

*varPoint = &var;

// Correct!

// varPoint is an address and so is &var

varPoint = &var;

// Correct!

// both *varPoint and var are values

*varPoint = var;



Download 98,6 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
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