Stack
Overflow error
olasiz.
II AMALIY QISMI
2.1 C++ da Ko’rsatkichlar qo’lanilshi.
Ko'rsatkich. O'zining qiymati sifatida xotira manziliini ko'rsatuvchi (saqlovchi)
o'zgaruvchilarga - ko'rsatkich o'zgaruvchilar deyiladi.
Masalan : Ko'rsatkichning qiymati
1) 0x22ff40
2) 0x22ff33
3) va xakazo kabi xotiraning aniq qismi bo'lishi mumkin.
Boshqa o'zgaruvchilar kabi, ko'rsatkichlardan foydalanish uchun ularni e'lon qilish,
toifasini aniqlash shart.
22
int *countPtr, count;
bu yerda countPtr - int toifasidagi ob'ektga ko'rsatkich, count esa oddiy butun (int)
toifasidagi o'zgaruvchi. Ko'rsatkichlarni e'lon qilishda har bir o'zgaruvchi oldigan *
qo'yilishi shart.
Maslahat: Ko'rsatkich o'zgaruvchilarini e'lon qilishning uchta usuli mavjud, ammo birinchi
usul afzal ko'riladi:
void printFun(
int
test) //C++
{
if
(test <
1
)
return
;
else
{
cout << test <<
" "
;
printFun(test-
1
);
cout << test <<
" "
;
return
;
}
}
int
main()
{
int
test =
3
;
printFun(test);
}
string*
mystring;
// Preferred
string *
mystring;
string *
mystring;
*
operator (
dereference
operatori) yordamida o'zgaruvchining qiymatini olish uchun
ko'rsatgichdan foydalanishingiz mumkin :
#include
#include
using namespace std;
23
int
main() {
string food =
"Palov"
;
string* ptr = &food;
cout << ptr <<
"
\n
"
;
cout << *ptr <<
"
\n
"
;
return
0
;
}
void
cplusStili(
int
& a
,
int
& b)
{
a *=
10
;
b *=
11
;
}
void
cStili(
int
* a
,
int
* b)
{
*a = -
10
;
*b = -
2
;
}
int
main(
int
argc
,
char ** argv)
{
int
* a;
int
* b;
a = new
int
; // xotiradan
joy
ajratish
24
b = new
int
;
*a =
3
; // boshlang
'ish qiymat berish (muhim!)
\
*b=4;
cplusStili(*a
,
*b);
cout <<
" *a="
<<
*a << endl;
cout <<
" *b="
<<
*b << endl;
cStili(a
,
b);
cout <<
" *a="
<<
*a << endl;
cout <<
" *b="
<< endl;
return
0
;
}
2.2 C++ da Funksiylardan foydalanib masalalar yechish
Misol 1
:
To'g'ri burchakli uchburchakning katetlari berilgan. (3, 4), (6, 8), (12, 5) bo'lgan
xollar uchun uchburchak gipotenuzasini hisoblovchi dastur tuzilsin.
1) Parametrli funksiya
#include
#include
// funksiya prototipi
float
hisobla(
float
,
float
);
int
main()
{
float
c;
c = hisobla(
3
,
4
);
cout << c << endl;
c = hisobla(
6
,
8
);
25
cout << c << endl;
c = hisobla(
12
,
5
);
cout << c << endl;
system (
"pause"
);
return
0
;
}
float
hisobla(
float
a
,
float
b)
{
//lokal o
'zgaruvchi
float
natija;
natija = sqrtf(a*a + b*b);
return
natija;
}
2
) void
Misol 2:
Kiritilgan n sonini 3 - darajasini hisoblovchi funksiya tuzilsin
#include
void kub (
int
*);
int
main()
{
int
n;
cout <<
"n="
; cin >> n;
kub (&n);
cout <<
"n ning qiymati ="
<< n << endl;
system (
"pause"
);
return
0
;
}
void kub (
int
*nPtr)
{
*nPtr = *nPtr * *nPtr * *nPtr;
}
Quydagi masalani yechilishni kurib chiqsak.
26
int
fac (
int
k) /*formulani hisoblash*/
{
int
i
,
j; /*lokal o’zgaruvchi*/
for
(i =
1
,
j =
1
; i <= k; i++)
/*hisoblash qiymati*/
j = j * i;
return
j;
}
int
main()
{
int
n
,
m
,
nmc
,
nm;
while
(
1
)
{
printf (
"
\n
n ni kiriting n = "
);
scanf (
"%d"
,
&n);
printf (“\n n ni kiriting m =
");
scanf (
"%d"
,
&m);
if
(m>=
0
&& n>=m && n<
10
)
break
;
printf (
"Xatolik! 0<=m<=n<10 bo’lishi kerak "
);
}
nm = n-m;
nmc = fac (n) /fac (m) / fac (nm);
printf (
"\ n binomial koeffisient = % d"
,
nmc);
getch();
return
0
;
}
2.3 C++ da Rekursif funksiyalar foydalanish.
1-misol: n! faktorialni rekursiyali funksiya orqali hisoblochi dastur
tuzilsin. n!=1*2*…*(n- 1)*n;
#include
int
fack1(
int
);
27
int
main()
{
int
n;
cout <<
"n="
; cin >> n;
cout << fack1(n) << endl;
qaytish
0
;
tizim (
"pauza"
);
}
int
fack1(
int
k)
{
if
(k <
0
)
0
ni qaytaradi;
agar (k ==
0
)
1
ni qaytarsa;
Aks holda fack1(k)*fack1(k-
1
)ni qaytaring;
}
Misol 2: Fibonachchi ketma ketligining n – hadini rekursiya qism orqali
hisoblovchi dasturi;
#include
int
fib(
int
);
int
main()
{
int
n;
cout <<
"n="
; cin >> n;
cout << fib(n) << endl;
qaytish
0
;
}
int
fib(
int
k)
{
agar (k ==
0
|| k ==
1
)
1
ni qaytarish;
Aks holda qaytaring fib(k -
1
) + fib(k -
2
);
}
2.4 Funksiya qiymatini qaytarish haqida
28
Barcha dasturlarda
int main( )
asosiy funksiyasidan foydalandik va bu
funksiyadan xohlagancha boshqa funksiyalarga murojaat tashkil qilish mumkin.
v
oid
turida bo‗lmagan har qanday funksiya
return
so‗zi bilan yakunlanadi.
Jumladan,
main()
funksiyasi ham shu operator bilan yakunlanadi.
return
o p e r a t o r i d a n f o y d a l a n i s h d a q u y i d a g i l a r g a e ‘ t i b o r b e r i s h k e r a k :
a) faqat
void
turli funksiyalar parametrsiz
return
operatori bilan yakunlanishi
mumkin. Chunki qiymat chaqiriq byurug‗iga qaytarilmaydi. Shuning uchun bu
turli funksiyalar
return operatorisiz
ham yakunlanishi, ya‘ni blok belgisi bilan
b)
void
turidan boshqa turli barcha funksiyalar
ret urn
operatori bilan
yakunlanadi, ya‘ni
return parametr
ko‗rinishida bo‗lishi kerak. Agar bu
operatordan parametrsiz foydalanilsa, kompilyator qaytariladigan qiymat yo‗q deb
c)
void
turidan boshqa turli funksiya
return
siz tugasa ham, blok belgisi
(})
ni
uchratgach, kompilyator funksiya tanasini bajarish tugaganligini tushunadi va
xatolik haqida xabar bermaydi. Ammo funksiya tanasidagi hisob natijalari
qaytarilmaganligi tufayli, chaqiriq byurug‗i qandaydir o‗zgaruvchiga qiymat
sifatida berilgan bo‗lsa, o‗sha o‗zgaruvchi qiymat sifatida tasodifiy sonni oladi va
t a b i i y k i , k e y i n g i b u y r u q l a r d a m a n t i q i y x a t o l i k l a r s o d i r b o ‗ l a d i ;
d)
return
so‗zidan keyin parametr sifatida biror o‗zgaruvchi nomidan,
masalan,
return p
kabi foydalanilgan bo‗lib, p e‘lon qilingan, ammo qiymati
a n iq l an mag an b o‗ ls a h a m qiy ma t s i fa ti da t a sod i fiy s on q ay t aril a di;
e) chaqiriq byurug‗idan foydalanilgandan keyin qandaydir qiymat qaytariladi.
29
Lekin o‗sha qiymatni zarurat bo‗lmasa biror o‗zgaruvchiga berib, chaqiriq
166byurug‗idan keyingi buyruqlarda foydalanish shart emas. Bunday holda funksiya
t a n a s i d a g i a m a l l a r n a t i j a s i o ‗ z - o ‗ z i d a n y o ‗ q o l i b k e t a d i ;
f) funksiya tanasidagi hisob natijalari qanday bo‗lishidan qat‘iy nazar
return
da ko‗rsatilgan son yoki parametrning qiymati qaytariladi. Masalan, funksiya.
return 20
kabi yakunlangan bo‗lsa, funksiya tanasidagi hisob natijalari turi va
qiymatidan qat‘iy nazar, chaqiriq byurug‗i natijasi 20 ga teng bo‗ladi;
d) yuqorida funksiya turi qanday bo‗lsa unga qaytariladigan qiymat turi ham
shunday bo‗lmasa, xatolik sodir bo‗lishi haqida aytilgan edi. Bu xatolik ham
mantiqiy xatolik bo‗lishi mumkin. Ya‘ni kompilyator xato haqida xabar bermasligi
mumkin. Masalan, funksiya turi
int
bo‗lsin. Lekin unga haqiqiy qiymat qaytarilsa,
qaytarilgan qiymatning kasr qismi tashlab yuboriladi. Xatto, butun turli funksiyaga
return true
kabi
bool
turli qiymat qaytarilsa, bu qiymat 1 deb,
false
qiymat
h)
return
operatori orqali faqat massivning qiymatini qaytarib bo‗lmaydi.
L e k i n m a s s i v e l e m e n t i q i y m a t i n i q a y t a r i s h m u m k i n ;
i) main ()
bosh funksiyasida qiymat qaytarish uchun
return 0
; byurug‗idan
foydalaniladi. Bunda nol butun son bo‗lganligi uchun foydalanilgan. Ammo nol
o‗rnida ixtiyoriy manfiy va musbat, butun va haqiqiy sonlardan, qiymati aniq
bo‗lgan arifmetik va mantiqiy ifodalardan ham foydalanish mumkin. Shuningdek,
return operatori bo‗lmasa ham dastur ijro etiladi. Ya‘ni bosh funksiyaning blok
b e l g i s i n i u c h r a t g a c h C + + d a s t u r y a k u n l a n g a n l i g i n i t u s h u n a d i .
30
Qiymat qaytarish bo‗yicha aytilgan fikrlarni quyidagi dastur misolida .
# include using namespace std;
int
fun1 (
int
x
,
int
y);
int
main()
{
int
i
,
j
,
k
,
m
,
r; i=
5
; j=
2
;
m=fun1(i
,
j); k=
10
+m;
cout<<‖\n k=‖<system (―pause‖);
return
-
56
;
}
int
fun1 (
int
x
,
int
y)
{
int
q1
,
p; q1=x+y;
cout<<‘\n q1=‖<return
q1; system(―pause‖); }
Qachonki funksiya turli xil argumentlar bilan chaqirilsa, funksiya turli xil natijalarni
qaytaradi. cube_volume(2) chaqiruvini e’tiborga oling. 2chi argument side_ length
parametr o’zgaruvchisiga mos keladi. Shu sababli bu chaqiruvda side_length bu 2.
Funksiya side_length * side_length * side_length, yoki 2 * 2 * 2.ni amalga oshiradi.
Qachonki funksiya turli xil argumentlar bilan chaqirilganda,aytaylik 10 bilan, so’ngra
funksiya 10 * 10 * 10 ni aniqlaydi. Endi biz ikkala funksiyani test dasturida
birlashtiramiz. Chunki main calls cube_ volume ni chaqiradi . cube_volume funksiyasini
main funksiyasini aniqlanishdan oldin bilish lozim. Bunga cube_volume ni dastlabki
faylga birinchi va main ni esa oxirida joylashtirish orqali osongina erishiladi. Mana
to’liq dastur.Funksiya harakatini tasvirlaydigan izohga e’tibor bering.
#include
using namespace std;
/**
Computes the volume of a cube.
86
@param
side_length the side length of the cube
@
return
the volume
*/
double cube_volume(double side_length)
31
{
double volume = side_length * side_length *
side_length;
return
volume;
}
int
main()
{
double result1 = cube_volume(
2
);
double result2 = cube_volume(
10
);
cout <<
"A cube with side length 2 has volume "
<<
result1 << endl;
cout <<
"A cube with side length 10 has volume "
<<
result2 << endl;
return
0
;
}
Agar foydalanuvchi tomonidan belgilangan funktsiya, masalan myFunction(),
main() funktsiyadan so'ng e'lon qilingan bo'lsa , xato yuz beradi . Buning sababi,
C ++ yuqoridan pastga ishlaydi; Agar funksiya yuqorida e'lon qilinmasa main(),
dastur bundan bexabar bo'ladi
XULOSA
Bugungi kunga kelib axborot texnologiyalari juda shiddad bilan rivojlanib
ketmoqda. Yuqori darajali dasturlash tillarini kunnan kunga har xil versialari
oylap topilmoqda. Bundan maxsad insonlarning dastur tuzish paytida eng
birinshi orinda vaqtini tejash undan keyin esa qulaylilik yaratish hisoplanadi.
Bugungi kunga kelip C++, Delphi, Pascal dasturlash tillari mavjud ekan. Bu
dasturlash tillari orqali axborot texnolagiyalari boyisha harqanday maumualarni
hal etish mumkun. Delphi dasturlash tilining asosini esa Pascal dasturlash tili
tashkil etar ekan. Buning sababi esa Pascal tilini takomillashtirish bolip
hisoplanadi. Bu takomillashtirish natiyjasida esa yangi bir Delphi dasturlash tili
juvudga keldi. Bu yuqori darajali dasturlash tillari ishida C++ dasturlash tili juda
32
kata ahamiyatga ega ekan. Saba bu dasturlash tilida ishlash ansha qulay eng
ahamiyatliysi C++tili mashina kodiga juda yaqin
Bu ishlarini ham biz kurs ishimizda korsatishga harakat qilganmiz.
Dasturlash – kompyuterlar va boshqa mikroprosersorli elektron mashinalar
uchun
dasturlar tuzish
, sinash va oʻzgartirish jarayonidan iborat.Odatda dasturlash yuqori
saviyali dasturlash tillari (Delphi, C++ Builder, Pascal) vositasida amalga oshiriladi. Bu
dasturlash tillarining semantikasi odam tiliga yaqinligi tufayli dastur tuzish jarayoni
ancha oson kechadi
Foydalanilgan adabiyotlar
1.
Бьярн Страустрап. Введение я язык С++ 2. Крис Паппас, Уильям Мюррей.
Программирование на С и С++ “Ирина”, BHV, Киев 2000г 3. Фридман
Александр Львович, Язык программирование С++ 4. Aripov M.M., Imomov T.,
Irmuhamedov Z.M. va boshqalar. Informatika.5.Axborot texnologiyalari. Toshkent, 1-
qism. 2002, 2-qism. 2003 Foydalanilgan elektron saytlar: http://www.infocity.kiev.ua/
http://www.intuit.ru/
http://www.ziyonet.com/
10>
Do'stlaringiz bilan baham: |