Alqoritmləşdirmə Proqramlaşdırmanın əsasları Translyator və kompilyatorlar



Yüklə 1,04 Mb.
səhifə53/53
tarix02.01.2022
ölçüsü1,04 Mb.
#37204
1   ...   45   46   47   48   49   50   51   52   53
alqoritmlesdirma ve proqramlasdirmanin esaslari muhazire

funksiya crg_daxilet ( ){

tam i;

xaricet("10 eded daxil edin \y");

//x qlobal cergedir



say (i 10) daxilet(x[i]);
}

// crg_xaricet adli cergenin elementlerini

// cap eden funksiya tertib edek

funksiya crg_xaricet ( ){

tam i;

//x qlobal cergedir


say (i 10) xaricet(x[i], " ");

xaricet("\y");



}

// crg_artan adli cergenin elementlerini

// artan sirada nizamlayan funksiya tertib

// edek


funksiya crg_artan ( ){

tam i,j, mvq;

//x qlobal cergedir

say (i 10) say (j i 10)

eger (x[i] > x[j]){ mvq = x[i];

x[i] = x[j]; x[j] = mvq;



}

}

// crg_azalan adli cergenin elementlerini

// azalan sirada nizamlayan funksiya tertib

// edek


funksiya crg_azalan ( ){

tam i,j, mvq;

//x qlobal cergedir

say (i 10) say (j i 10)

eger (x[i] < x[j]){ mvq = x[i];

x[i] = x[j]; x[j] = mvq;



}

}

crg_daxilet(); crg_artan();



xaricet("Cergenin elementleri artan sirada\y"); crg_xaricet();

crg_azalan();

xaricet("Cergenin elementleri azalan sirada\y"); crg_xaricet();






10 eded daxil edin

12 3 45 6 768 90 321 4 55 420

Cergenin elementleri artan sirada 3 4 6 12 45 55 90 321 420 768

Cergenin elementleri azalan sirada 768 420 321 90 55 45 12 6 4 3


Nəticə.

Yuxarıdakı kodda cərgə üzərində müxtəlif işlər görən crg_daxilet(), crg_xaricet(), crg_artan() və crg_azalan() adlı funksiyalar tərib etdik. Aşağıdakı nümunədə isə bu funksiyaları tərtib edəcəyimiz artan() və azalan() adlı digər funksiyalardan çağırırıq. Bu halda proqram daha yığcam görünür.



Nümunə.



// crg_daxilet adli cergenin elementlerini

// daxil eden funksiya tertib edek



funksiya crg_daxilet ( ){

tam i;

xaricet("10 eded daxil edin \y");

//x qlobal cergedir



say (i 10) daxilet(x[i]);

}

// crg_xaricet adli cergenin elementlerini

// cap eden funksiya tertib edek

funksiya crg_xaricet ( ){


tam i;

//x qlobal cergedir



say (i 10) xaricet(x[i], " ");

xaricet("\y");



}

// crg_artan adli cergenin elementlerini

// artan sirada nizamlayan funksiya tertib

// edek


funksiya crg_artan ( ){

tam i,j, mvq;

//x qlobal cergedir

say (i 10) say (j i 10)

eger (x[i] > x[j]){ mvq = x[i];

x[i] = x[j]; x[j] = mvq;



}

}

// crg_azalan adli cergenin elementlerini

// azalan sirada nizamlayan funksiya tertib

// edek


funksiya crg_azalan ( ){

tam i,j, mvq;

//x qlobal cergedir

say (i 10) say (j i 10)

eger (x[i] < x[j]){ mvq = x[i];

x[i] = x[j]; x[j] = mvq;



}

}

funksiya artan(){

crg_artan();

xaricet("Cergenin elementleri artan sirada\y"); crg_xaricet();
}

funksiya azalan(){ crg_azalan();

xaricet("Cergenin elementleri azalan sirada\y");

crg_xaricet();

}

crg_daxilet(); artan();

azalan();




Nəticə.



10 eded daxil edin

23 44 65 7 0 89 -23 32 667 308

Cergenin elementleri artan sirada

-23 0 7 23 32 44 65 89 308 667

Cergenin elementleri azalan sirada 667 308 89 65 44 32 23 7 0 -23


İzahı. Burada biz artan funksiyasından cer_artan və crg_xaricet funksiyalarını çağırdıq. Analoji olaraq azalan funksiyasından isə crg_azalan və crg_xaricet funksiyalarını çağırdıq.

Mövzu23

Rekursiv Funkiyalar.Kitabxana funksiyaları

Plan:

  1. Rekursiv Funkiyalar

  2. Kitabxana funksiyaları

Proqramda funksiyanın özlərinə etməsi rekursiya adlanır. Bu cür funksiyalara isə rekursiv funksiyalar deyilir. Rekursiv funksiya tərtib edərkən onun başa çatma şərtini düzgün təyin etmək lazımdır, əks halda funksiya öz-özünə sonsuz müraciət edər və proqram asılar.

Rekursiv funksiyalara aid proqram nümunələri ilə tanış olaq.



Nümunə. Aşağıdakı proqramda cərgənin elementlərini çap etmək üçün rekursiv funksiyadan istifadə olunur.



tam x[10],k;
// cergenin elementlerini cap etmek

// ucun rekursiv funksiya tertib edek



funksiya f (tam k){

// basha catma shertini teyin edirik



eger (k > 10) qaytar;

xaricet(x[k], " ");

// f funksiyasini cagiririq

// k -nin qiymetin 1 vahid artiraraq f(k + 1);



}

xaricet("10 eded daxil edin.\y"); say (k 10)

daxilet(x[k]);

xaricet("cergenin elementleri \y"); f(1);




Nəticə.



10 eded daxil edin.

2 34 5 7 67 8 9 21 33 4

cergenin elementleri

2 34 5 7 67 8 9 21 33 4




İzahı. Burada biz cərgənin elementlərini çap etmək üçün rekursiv f fuksiyasından istifadə edirik. f funksiyası parametr olaraq tam tipli dəyişən qəbul edir, cərgənin çap olunmalı elementinin ideksini. Ilk olaraq 1 qiyməti verilir, funksiya çağırılan zaman.

Funksiya isə k-nı yoxlayır, əgər 10-dan böyükdürsə onda başa çatır, əks halda k indeksli elementi çap edir və k –nın bir vahid artırılmış qiyməti ilə , hansı ki növbəti elementin

indeksidi f funksiyasını çağırır. Beləliklə rekursiv olaraq x cərgəsinin bütün elementləri çap olunur. Aşağıdakı kod isə rekursiv olaraq x cərgəsinin elementlərini axırdan əvvələ çap edir.

Nümunə. Aşağıdakı proqramda cərgənin elementlərini axırdan əvvələ çap etmək üçün rekursiv funksiyadan istifadə olunur.



tam x[10],k;

// cergenin elementlerini cap etmek

// ucun rekursiv funksiya tertib edek

funksiya g (tam k){

// basha catma shertini teyin edirik



eger (k <1 )

qaytar; xaricet(x[k], " ");

// g funksiyasini cagiririq

// k -nin qiymetin 1 vahid azaldaraq g(k - 1);



}

xaricet("10 eded daxil edin.\y"); say (k 10)

daxilet(x[k]);

xaricet("cergenin elementleri \y"); g(10);




Nəticə.

10 eded daxil edin.

34 55 76 88 90 21 33 4 5 3

cergenin elementleri

3 5 4 33 21 90 88 76 55 34



Rekursiv funksyalardan əsasən ağac şəklində olan verilənlər strukturu ilə işləyirlər. Ağaclar qrafların xüsusi formasıdır və proqramlaşdırmada olduqca əhəmiyyətli rola malikdirlər. Bu mövzu bir qədər çətinliyi artırılmış proqramlaşdırma kursunun mövzusudur. Rekursiv funksiyalar ilə bağlı demək olar ki bütün proqramlaşdırma

kitablarında verilən nümunələrdən biri də n faktorialın hesablanmasıdır. Riyaziyyatdan n faktorial n! kimi işarə olunur və aşağıdakı kimi təyin olunur:

0! = 1


n! = n*(n-1)!

Bu cür təyindən misal üçün 6! –lı aşağıdakı kimi hesablaya bilərik:

6! = 6*5!

5! = 5*4!

4! = 4*3!

3! = 3*2!

2! = 2*1!

1! = 1*0!




0! = 1

6! = 6*5*4*3*2*1

Əsrin proqramlaşdırma dilində rekursiv olaraq n! –lı aşağıdakı kimi hesablaya bilərik.

Nümunə. n! hesablayan proqram.



tam k, z;
// n faktoriali hesablayan rekursiv

// nf funksiyasi



funksiya nf (tam k){

// basha catma shertini teyin edirik



eger (k == 0 )

qaytar 1;






// nf funksiyasina rekursiv muraciet

// edirik

qaytar k * nf(k-1);

}

xaricet("Her hansi eded daxil edin.\y"); daxilet(k);


z = nf(k);

xaricet(k, "! = ", z, "\y");





Nəticə.



Her hansi eded daxil edin. 7

7! = 5040


Kitabxana Funkiyaları

Bildiyimiz kimi hər bir dilin əsas imkanlarından biri də proqramçılara təqdim etdiyi hazır kitabxana funksiyalarıdır. Buraya məlumatlar bazası, riyazi hesablamalar, qrafik tətbiqlər, standart giriş/çıxış, proseslərin idarəolunması v.s. kimi interfeyslərlə işləmək üçün dil tərəfindən hazır təqdim olunan funksiyalar daxildir. Təəssüf ki əsrin dili hələ yenicə yarandığından onun kitabxanaları hazır deyil. Yalnız nümunə üçün verilmiş ədədin kvadrat kökünü hesablayan kvk adlı funksiyadan savayı.

kvk funksiyası kəsr tipli bir parametr qəbul edir və nəticə olaraq həmin ədədin kvadrat kökünü qaytarır.

Aşağıdakı nümunədə proqram istifadəçidən bir ədəd daxil etməsini istəyir və onun kvadrat kökünü ekranda çap edir. Nümunəyə baxaq:





kesr x, net;

xaricet("Her-hansi eded daxil edin\y"); daxilet(x);






//kvk funksiyasini cagiririq

//ve qaytardigi neticeni net deyishenine



//menimsedirik net = kvk(x);

xaricet(x, " -in kvadrat koku = ", net , "\y");





Nəticə



64.256

64.256 -in kvadrat koku = 8.015984


Aşağıda kvk funksiyasından istifadə etməklə kvadrat tənliyin köklərini hesablayan proqram kodu göstərilir.





kesr a, b, c, x1, x2, determinant;

xaricet(" a, b ve c emsallarini daxil edin: "); daxilet(a, b, c);

determinant = b*b - 4*a*c;

eger (determinant > 0) {

x1 = (-1*b + kvk(determinant)) / (2*a); x2 = (-1*b - kvk(determinant)) / (2*a); xaricet("Kokler ferqlidir. \y"); xaricet("x1 = ", x1, "\y");

xaricet("x2 = ", x2, "\y");

}

yoxsa

eger(determinant == 0) {

xaricet("Kokler eynidir. \y");

x1 = (-1*b + kvk(determinant)) / (2*a);

xaricet("x1 = ", x1, "\y");



}

yoxsa

xaricet("Kvadrat tenliyin heqiqi koku yoxdur. \y");




Nəticə



a, b ve c emsallarini daxil edin: 1 -1 -6

Kokler ferqlidir. x1 = 3



x2 = -2

Yüklə 1,04 Mb.

Dostları ilə paylaş:
1   ...   45   46   47   48   49   50   51   52   53




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