Rekursiya
Bildiyimiz kimi bir funksiyanın daxilində başqa bir funksiya təyin etmək olmaz. Lakin bir funksiyanı başqa bir funksiyadan çağırmaq olar. Həmçinin funksiya özü özünü də çağıra bilər. Tam ədədin faktorialı məsələsinə baxaq. Bunu iki üsulla reallaşdırmaq olar. Birinci üsul iterasiyadan istifadə etməkdir. Bu üsulun proqram kodu aşağıdakı kimi olar:
int
fact(int n)
{
int netice = 1;
for (int i = 1; i <= n; i++)
netice = netice * i;
return netice;
}
İkinci üsulun proqram kodu isə aşağıdakı kimidir:
int
fact(int n)
{
if (n==0 || n==1)
return 1;
else
return n * fact(n -1);
}
Bu üsulda fact funksiyası özü özünü çağırır. Bu üsul rekursiya adlanır. Rekursiya güclü hesablama metodudur. Riyazi funksiyaların qiymətli hissələri rekursiv terminlərlə təyin olunur.
Qeyd edək ki, proqramlaşdırmada mürəkkəb strukturlu verilənlərin emalı alqoritmlərin əksəriyyəti də rekursiv olur.
Sətirlər
Sətirlər simvollar ardıcıllığıdır. C++ dilində simvollarla işləmək üçün verilənlərin char tipindən istifadə olunur. Əgər ifadədə yeganə simvol olarsa, onda o dırnaq işarəsi, ifadədə sətirdən istifadə olunduqda isə o ikiqat dırnaq işarəsi içərisində yaılmalıdır. Sətrin sonunu ’\0’ simvolu müəyyən edir. C++ dilində sətirlər simvollar massivi şəklində də təsvir oluna bilir. Bu halda ’\0’ sətrin sonu simvolunun yerinə baxmaq lazımdır.
Məsələn,
char s [25] ; // 25 simvoldan ibarət sətrin təsviri.
//s[25] elementi simvolun sətrin sonunda saxlanması üçün təyin edilmişdir.
char s [15]="salam" ; //15 simvoldan ibarət sətir təsvir olumuş və ona qiymət mənimsədilmişdir.
char m[3] [30]={ "Numune " , "istifade" , " sətir"} //hər biri 30 baytdan ibarət 3 sətirdən ibarət massiv təyin edilmişdir.
Sətirlərlə işləmək üçün göstəricilərdən də istifadə etmək olar. Bunun üçün (char *)-dan istifadə edilir. Bu halda birinci simvolun ünvanı göstəricinin başlanğıc qiyməti olur. Sətirlərin elan və daxil edilməsi nümunəsinə baxaq.
#include
#include
using namespace std ;
int main ( )
{
char s2 [ 25 ] , ∗ s3 , s4 [ 30 ] ; // s3 _ göstəricili 3 setrin təsviri.
cout<<"setri daxil edin:"<<”\n”;
cout<<" s2 = " ; cin>>s2 ; //s2 setrini daxil edilmesi
cout<<" Bu setir daxil edilmishdir :"<< ”\n”;
cout<<" s2 = "<
s3=s4 ; //s4 setrinin unvaninin s3-e yazilmasi s3 ve s4 gostericilerində eyni unvan saxlanir.
cout<<"setri daxil edin:"<< ”\n”;
cout<<" s3 = " ; cin>>s3 ; //s3 setrinin daxil edilmesi.
cout<<"Bu setir daxil edilmişdir:"<< ”\n”;
cout<<" s3 = "<
cout<<"yeni formalashmish setir:"<< ”\n”;
cout<<" s4 = "<
return 0 ;
}
Qeyd edək ki, əgər daxil edilən sətirdə simvol olarsa, onda istifadəçinin gözlədiyi nəticə alınmır. Çünki cin funksiyası probellə rastlaşan kimi sətri ekrana çıxarır. Yəni sətirdə n-dən çox simvol ola bilməz.
Daha universal cin.getline(char *s, int n); funksiyasıdır. Bu funksiya probelli s sətrinin klaviaturadan daxil edilməsi üçündür.
char s [25] ;
cout<<"setri daxil edin:"<<”\n” ;
cout<<" s2 = " ; cin.getline ( s , 2 5 ) ;
cout<<"bu setir daxil edilib:"<<”\n” ;
cout<<" s2 = "<
Dostları ilə paylaş: |