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


Download 98.6 Kb.
bet6/8
Sana05.01.2022
Hajmi98.6 Kb.
#209078
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 ©fayllar.org 2024
ma'muriyatiga murojaat qiling