C++ proqramlaşdırma dili haqqında ümumi məlumatlar



Yüklə 1,2 Mb.
səhifə25/37
tarix02.01.2022
ölçüsü1,2 Mb.
#47131
1   ...   21   22   23   24   25   26   27   28   ...   37
C -dan praktikum (1)

1. Siyahının elan edilməsi

Biz indiyə qədər int tipindən adi dəyişən, ünvan dəyişəni və cərgə elan etmək qaydalarını bilirik. Məsələn, aşağıdakı yazılışda int tipindən x dəyişəni, y ünvan dəyişəni və 10 elementdən ibarət z cərgəsi elan edilmişdir:

int x, *y, z[10];

İndi isə hər bir elementində int tipli dəyişən olan siyahı elan edək. Bunun üçün əvvəlcə siyahını təşkil edən obyektlərin tipini yaratmaq lazımdır. Qeyd edək ki, siyahı da cərgə kimi elementlər(obyektlər) ardıcıllığıdır və bu elementlərin(obtektlərin) hər birində müxtəlif məlumatlar yerləşdirmək olar.

Əvvəlcə müəyyən bir obyekt yaradaq və sonra ona uyğun daha bir neçə obyekt yaradıb onları bir-birilə əlaqələndirib siyahı tərtib edirik.

Fərz edək ki, ilk yaradacağımız obyekt tam int tipindən olan bir dəyişən haqqında məlumat saxlayır. Bu obyekti yaratmaq üçün struct tipdən istifadə etsək, onda o, aşağıdakı kimi olar:

struct syh_el

{

int x;



}

İndi bu tipdən olan bir neçə dəyişən elan edək.



İndi isə siyahı almaq üçün bu obyektləri bir-biri ilə aşağıdakı kimi əlaqələndirək:



Bu əlaqələri aşağıdakı kimi də göstərmək olar:



Qeyd edək ki, şəkildə əlaqələri çəkmək asandır, amma praktikada obyektlər arasında bu əlaqəni ən azı ilk cəhddə yaratmaq elə də asan deyildir.

Ümumiyyətlə, siyahı yaratma qaydasını aşağıdakı kimi təsvir etnək olar.

Əvvəlcə obyektlər yaradılır və bu obyektlərdən hər hansı biri digəri ilə əlaqələndirilir və onun əsasında o birilər arasında əlaqələr yaradılır. Sonra lazım gəldikcə yeni obyektlər əlavə edilir və əvvəlki obyektlərlə əlaqələndirilir.

Siyahıya istənilən sayda yeni obyekt əlavə edib sonu istənilən qədər uzatmaq olur.

Hər hansı bir obyekti digəri ilə əlaqələndirmək üçün proqramlaşdırmada aşağıdakı ilk baxışda elə də sadə görünməyən qaydadan istifadə edilir. Siyahıda hər bir obyekt özündən sonra gələn obyektin yaddaşdakı ünvanını bilməlidir. Bunun üçün obyektin daxilində onun öz tipindən olan ünvan dəyişəni yerləşdirilir və bu ünvan dəyişəninə siyahının növbəti obyektinin ünvanını mənimsədilir. Bunu aşağıdakı nümunə göstərək:

struct syh_el {

int x;


syh_el *novb_el;

}

Bu təsvirin yuxarıdakından yeganə fərqi burada struct syh_el tipinin daxilində bu tipdən olan *novb_el ünvan dəyişəni yerləşdirilməsidir.



Siyahı yaradarkən ilk növbədə onu aşağıdakı kimi elan etmək lazımdır:

syh_el *menim_syh;

Yaddaşın vəziyyəti:

Siyahı yaratmaq üçün syh_el tipindən olan daha iki ünvan dəyişəni lazımdır. Bunları p və q ilə (- p , yeni obyektlərin yaradılması və inhilizasiyası (ilkin qiymətin mənimsədilməsi), digəri - q isə iterasiya üçündür(siyahı boyu hərəkət etmək)) aşağıdakı kimi işarə edək:

syh_el *p,*q;

Dəyişənlərin yaddaşda tutduqları yerə baxaq:



Bundan sonra siyahının ilk elementini yarada bilərik. Bunun üçün yazırıq:

p = new syh_el;

Yaddaşın vəziyyəti isə aşağıdakı kimi olar:



Növbəti addım menim_syh dəyişənini bu yeni yaratdığımız obyektə mənimsətməkdir.

Bunun üçün sadəcə yazırıq:

menim_syh = p;

Yaddaşın vəziyyəti aşağıdakı kimidir:

İkinci elementi yaratmaq üçün iterasiya dəyişənini siyahının ilk elementinə ( p -yə) , ilk elementin ikinci elementlə əlaqələndirmə həddini (novb_el ) isə NULL qiymətinə mənimsədirik. NULL adətən ünvan dəyişənlərinin yaddaşda heç bir yerə ümvanlanmadığını bildirmək üçün istifadə olunur. Ondan siyahının sonun müəyyənləşdirmədə istifadə olunur.

q = p;

p->novb_el = NULL;

Yaddaşın vəziyyəti isə aşağıdakı kimi olur:

Eyni qayda ilə siyahının ikinci elementini yaradırıq:

p = new syh_el;

Onda yaddaş aşağıdakı kimi olar:



İlk elementlə yeni yaradılmış elementi birləşdirmək üçün

yazırıq:

q->novb_el = p; yazırıq. Bundan sonra yaddaşın vəziyyəti aşağıdakı kimi olar:



Növbəti 3-cü elementi yaratmaq üçün

q = p;

p->novb_el = NULL; yazırıq və yaddaşa baxırıq:



Bu qayda ilə davam edərək siyahıya istədiyimiz qədər yeni element əlavə edə bilərik.

Tutaq ki, siyahıya müəyyən qədər element əlavə etmişik və siyahımız aşağıdakı şəkildədir:

Əməliyyatın sonunda p və q dəyişənlərinin siyahıya istinadlarını ləğv edirik.

p=NULL;

q=NULL;


Bununla da, siyahı yaratma prosesi tamamlanmış olur.

Əməliyyat çətin görünə bilər, amma siyahılar proqramlaşdırmada əvəz edilməzdir və çox praktik əhəmiyyətə malikdirlər.

Aşağıdakı proqram nümunələrinə baxaq:

Sadə bir proqram tərtib edək, bu proqramda özündə ancaq bir hədd (int x) saxlayan obyektlərdən ibarət siyahı tərtib edək və bu siyahının obyektlərinin hədlərinə (x) qiymətlər mənimsədək, daha sonra siyahının elementlərini çap edək.

Proqram 1.

#include

#include

struct syh_el{

int x;


syh_el *novb_el;};

int main(int argc, char *argv[]){

// istifade edeceyimiz deyishenleri elan edirik

syh_el *menim_syh, *p, *q;

int dey;

// ilk elementi yaradaq

p = new syh_el;

// lazimi menimsetmeleri aparaq

menim_syh = p;

q = p;


p->novb_el = NULL;

// ikinci elementi yaradiriq

p = new syh_el;

// siyahi ile ikinci elementin elaqesini qururuq

q->novb_el = p;

// lazim menimsetmeleri edirik

q = p;

p->novb_el = NULL;



// artiq siyahida iki obyekt var, 3-nu yaradaq

// 3-cu elementi yaradiriq

p = new syh_el;

// siyahinin sonu ile uchuncu elementin elaqesini qururuq

q->novb_el = p;

// lazimi menimsetmeleri edirik

q = p;

p->novb_el = NULL;



// siyahida hal-hazirda 3 element var, helelik besdir.

// p ve q -nu siyahidan ayiraq

p=NULL;

q=NULL;

/* vessalam indi menim_syh deyisheni yeni yaratdigimiz siyahinin ilk

elementine istinad edir ve onun vastesile siyahini butun obyektlerine muraciet ede bilerem*/

/* Siyahinin elementlerine qiymetler menimsedek, daha sonra bu

qiymetleri cap edeceyik*/

// Yene p ye ehtiyacimiz olacaq

p = menim_syh;

// indi p dayanib siyahinin evvelinde , ashagidaki koda diqqet eleyin

std::cout<<"Siyahinin heddlerinin qiymetlerini daxil edin.\n";

std::cout<<"Siyahinin birinci heddinin qiymetini daxil edin. \n";

std::cin>>dey;

/*Siyahinin ilk obyektinin x heddine istifadecinin daxil etdiyi qiymeti menimsedirem */

p->x = dey;

/* Siyahinin ikinci obyekti uzerine surushmek ucun ashagidaki qaydadan istfade olunur */

p = p->novb_el;

Bu nümunədə 3 elementdən ibarət siyahı yaratdıq, siyahının hədlərinə qiymətlər mənimsətdik və bu qiymətləri çap etdik.

Praktikada bu cür məsələlərin həllində funksiyadan istifadə etmək zəruridir.

İndi isə yuxarıdakı məsələnin funksiyaların tətbiqi proqramını tərtib edək. Bu məsələnin həlli üçün 2 funksiya lazımdır. Onlardan biri siyahını yaratmaq və ona elementləri yerləşdirmək, digəri isə siyahının elementlərini çap etmək üçündür.

Bu funksiyaları uyğun olaraq siyahi_yarat və siyahini_cap_et kimi adlandıraq.

Birinci funksiya 2 parametr qəbul edir: syh_el * tipindən olan dəyişən - yaratmaq istədiyimiz siyahı və int tipli dəyişən - siyahıya daxil etmək istədiyimiz elementlərin sayı.

İkinci funksiya isə bir parametr qəbul edir və çap etməli olduğumuz siyahıya istinad, struct syh_el * tipli olur.

Funksiyaların elanları aşağıdakı kimi olar:

syh_el * siyahi_yarat (syh_el *syh, int elem_say); void siyahini_cap_et( syh_el *);

Proqram aşağıdakı kimi olar:

Proqram 2.

#include

#include

struct syh_el{

int x;


syh_el *novb_el;};

syh_el *siyahi_yarat(struct syh_el *syh, int elem_say);

void siyahini_cap_et(struct syh_el *);

int main(int argc, char *argv[]){

// istifade edeceyimiz deyishenleri elan edirik

struct syh_el *menim_syh;

// siyahinin bosh oldugunu bildirmek ucun

menim_syh = NULL;

int say;

std::cout<<"Siyahinin elementlerinin sayini daxil edin \n";

std::cin>>say;

menim_syh = siyahi_yarat(menim_syh,say);

siyahini_cap_et(menim_syh);

return 0;

}

syh_el *siyahi_yarat( syh_el *syh, int elem_say){



syh_el *p, *q;

p=syh;


q=syh;

int i,dey;

for (i=1; i<=elem_say; ++i){

std::cout<<"siyahinin "<

std::cin>>dey;

p = new syh_el;

p->x = dey;

p->novb_el = NULL;

if (syh==NULL){

//siyahi boshdur, ilk element

syh=p;

q = p;


p = NULL; }

else {


//siyahida element var

q->novb_el = p;

q = p;

}


}

return syh;

}

void siyahini_cap_et( syh_el *syh){



syh_el *p;

int dey;


p = syh;

if (syh == NULL ) {

std::cout<<"Siyahi boshdur \n";

return;


}

std::cout<<"Siyahinin elementleri \n";

while(p!=NULL){

dey = p->x;

std::cout<

p = p->novb_el; // novbeti elemente kec

}

std::cout<<"\n";



}


Yüklə 1,2 Mb.

Dostları ilə paylaş:
1   ...   21   22   23   24   25   26   27   28   ...   37




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin