Kompüterlər, proqramlaşdırma dilləri, əməliyyat sistemləri



Yüklə 395 Kb.
səhifə2/5
tarix26.11.2019
ölçüsü395 Kb.
#29694
1   2   3   4   5
C dili haqqinda

Dəyişənlər


Əvvəlki paraqrafda biz C dilində necə proqram yerinə yetirməyi örgəndik. Bu paraqrafda biz C dilində yazılmış proqramın ən vacib elementlərindən biri – dəyişənlərlə tanış olacağıq. Hər bir proqram yerinə yetirilərkən müxtəlif məlumatları yadda saxlamalı (yaddaşa yerləşdirməli) olur. Tutaq ki iki ədədin cəmini hesablayan proqram yazmaq istəyirik. Bu zaman biz yaddaşda 3 məlumat üçün yer ayırmalıyıq. İki toplanan və cəm. Proqramlaşdırmada hər hansı məlumatı qəbul etmək, yadda saxlamaq və bu məlumatın qiymətinə müraciət etmək üçün dəyişənlərdən istifadə olunur. Konkret olaraq dəyişən adı olan müəyyən bir yaddaş sahəsidir. Bu yaddaşın sahəsini və adı dəyişəni elan edərkən biz özümüz(proqramçılar) müəyyən edirik.

Yadda saxladığı məlumatın növünə və həcminə görə dəyişənlər tiplərə ayrılır. Misal üçün tam ədədlər tipi - int, kəsr ədədlər tipi - float, simvol tipi - char, sətir tipi - char [], char *v.s. Bu tiplərə standart tiplər deyilir. Bundan əlavə C dilində ünvan dəyişənləri tip, struktur tiplər və siyahılardan da çox geniş istifadə olunur ki, bunlarla da uyğun olaraq 4, 8 və 9-cu paraqraflarda məşğul olacayıq.

Əgər biz proqramda tam tipdən(int) olan və adı x olan dəyişən elan etmək istəyiriksə bu zaman

int x;


sətrini proqrama yerləşdiririk.

Dəyişənlərə istədiyimiz kimi ad verə bilərik yalnız və yalnız həriflərdən(ingilis əlifbasının) , '_' simvolundan və rəqəmlərdən istifadə etməklə. Dəyişənin adı mütləq hərflə başlamalıdır, və operator, tip v.s. adlardan da dəyişən adı kimi istifadə etmək olmaz. Operatorlarla gələn mövzularda tanış olacayıq.

Beləliklə cəm proqrmında hər iki toplananı və onların cəmini yerləşdirmək üçün biz tam tipli 3 dəyişən təyin etməliyik. Gəlin bu dəyişənləri uyğun olaraq top1, top2 və cem kimi adlandıraq. Bu dəyişənləri təyin etmək üçün proqram kodu aşağıdakı kimi olacaq.

int top1;

int top2;

int cem;


Qeyd edək ki eyni tipdən olan dəyişənləri vergüllə ayırmaqla bir sətirdə də elan edə bilərik. Aşağıdakı kimi

int top1,top2,cem;

Burada ; simvoluna diqqət yetirməyinizi istəyirəm. Bu işarə kompilyatora hər hansısa bir əməliyyatın (indiki halda dəyişənlərin elanının) bitməsini göstərir.
Gəlin proqramımızı tərtib edək. Hələlik 3 dəyişən elan etmişik(dəyişən elan etmək və ya təyin etmək eyni məna bildirir). Proqramımız belə olacaq.

#include

int main(){

int top1, top2, cem;

}

Proqramı cem.c faylında yadda saxlayaq və kompilyasiya edək və yerinə yetirək.



user@gnu_linux:~/prg

user@gnu_linux:~/prg gcc cem.c -o cem

user@gnu_linux:~/prg

user@gnu_linux:~/prg ./cem

user@gnu_linux:~/prg

user@gnu_linux:~/prg

Göründüyü kimi proqram heç bir iş görmür, sadəcə tam tipli 3 dəyişən elan edir və icrasını bitirir.

İndi gəlin bu elan etdiyimiz dəyişənlərdə hər hansı məlumat (ədədlər) yerləşdirək(daha doğrusu dəyişənə aid olan yaddaş sahəsinə). Proqramlaşdırmada hər hansı əməliyyatı yerinə yetirmək üçün istifadə olunan əmrə operator deyilir. Yaddaşa məlumat yazma əməliyyatı üçün mənimsətmə operatorundan istifadə olunur. Mənimsətmə operatoru = kimi işarə olunur. Qətiyyən riyaziyyatda olan bərabərlik simvolu ilə qarışdırmaq olmaz. Proqramda bu operatordan solda dəyişənin adı , sağda isə ona mənimsədiləcək qiymət dayanır(və əlbəttdə bütün operatorların sonunda olduğu kimi sonda ; işarəsi). məsələn


x = 5 ;

Bu operator x dəyişəninə 5 qiymətini mənimsədir. Bu zaman yaddaşda nəyin baş verdiyinə gəlin nəzər salaq. Əvvəlcə 5ədədi onluq say sistemindən ikilik say sisteminə çevrilir. Say sistemləri əsasən assembler proqramlaşdırma dilinin mövzusu olduğundan və bu işlərlə məşğul olmaq böyük proqramlaşdırma təcrübəsi tələb etdiyindən bu haqda çox dərinə getməyəcəyik.


5 ədədi ikilik say sistemində aşağıdakı kimi göstərilir.

00000000000000000000000000000101

x tam tipli olduğundan yaddaşda onun üçün 4 bayt yer ayrılır. Bir bayt 8 bit – dən ibarət yaddaş sahəsidir. Bir bit ən kiçik yaddaş sahəsidir və bu sahəyə ancaq 1 və ya 0 yazmaq olar. Komputerin yaddaşı baytlar ardıcıllığından və o da öz növbəsində bitlərdən ibarət olduğundan, bitlərdə isə ancaq 0 və ya 1 yerləşdirmək mümkün olduğundan belə çıxır ki kompüterin yaddaşına yerləşdirilən bütün məlumat orada 0 və 1 -lər ardıcıllığı şəklində saxlanılır. Yəni bütün bizim mp3 , wav, jpg , doc v.s. fayllarımız və ümumiyyətlə bütün fayllar yalnız və yalnız 0 və 1 - lər ardıcıllığıdır. Məişətdə istifadə etdiyimiz bir çox texnikanın (komputer , fotoaparat, ... ) adının rəqəmsal (digital, digit ingilis dilində rəqəm deməkdir)olması da buradan qaynaqlanır və burada söhbət ancaq 0 və 1 rəqəmlərindən gedir.

Tutaq ki baxdığımız anda proqramın yaddaşı aşağıdakı şəkildədir. 


Shekil1.

x=5;


Indi isə yaddaşın vəziyyəti aşağıdakı kimi olar.
şəkil 2.

Aşağıdakı operatora baxaq.

x=y;

Bu halda y -in qiyməti yaddaşdan x-in ünvanına köçürülür.


Sekil3. Shekil4.

Aşağıdakı hala baxaq.

x=x+1;

Bu halda əvvəlcə x-in qiyməti yaddaşdan götürülür, onun üzərinə 1 əlavə olunur və alınmış nəticə yenidən x-ə yazılır. Tutaq ki x – ə 3 qiyməti mənimsədilib.



x=3;

Shekil5. x=x+1; 3+1 --- 4 --- 00000000000000000000000000000100 Shekil6.


Proqramda Şərhlər


C dilində yazılmış hər – hansı proqramı şərhsiz təsəvvür etmək olmaz. Şərh (comment, statement ... ) proqramın bu və ya digər hissəsinin hansı iş gördüyünü bildirmək üçün proqramın mətn koduna əlavə olunur .Şərhlər ancaq proqramın işini başa düşmək istəyənlər üçündür. Proqramın real yerinə yetirilən koduna şəhrlərin heç bir aidiyyəti yoxdur. Belə ki, kompilyator proqramı kompilyasiya edərkən birinci gordüyü iş şərhləri proqram kodundan silməkdir. Proqramda şərh elan etmək üçün /* və */ - dən istifadə olunur.
Bu zaman kompilyator bu işarələr arasında yerləşdirilən mətni şərh kimi üəbul edəcək. Lakin səhvən proqram kodlarını şərh kimi verməyin. Bu zaman kompilyator onları nəzərə almayacaq. Onu da deyim ki, çox vaxt bu qaydadan proqramdakı səhvləri tapmada istifadə olunur (proqramın müəyyən hissəsini şərh kimi verib nəticəni yoxlamaqla).

Dəyişənlərin müqayisəsi və qiymətlərinin dəyişdirilməsi.


Dəyişənlərin qiymələrinin dəyişdirilmə və müqaisə imkanının olması proqramçıya çox geniş imkanlar verir. Dəyişənərlə aşağıdakı əməliyyatları aparmaq olar. 
*, -, +, /, =, ==, >, < * hasil, - çıxma, + cəm. Bizim üçün lazım olan ən vacib əməliyyat , dəyişənin qiymətinin dəyişdirilməsi əməlidir. Bunun üçün '=' operatorundan istifadə olunur. Bu operatora 'mənimsətmə' operatoru deyirlər. Bu opratoru bərabərlik opratoru kimi qəbul etmək olmaz. C++ dilində bərabərlik opratoru olaraq == istifadə olunur. Aşağıdakı nümunələrə baxaq.

a = 4*6; /* proqramda bu sətir yerinə yetirildikdən sonra */

/* əvvəlki qiymətindən asılı olmayaraq a-nın qiyməti yeni qiyməti 24 olacaq. */

a = a + 5; /* a -nın yeni qiyməti əvvəlki qiyməti ilə 5 -in cəminə bərabər olur. */

a == 3; /* a -ya heç bir yeni qiymət mənimsədilmir(a-nin qiymeti deyishmir) , sadəcə onun 3 - */

/*ə bərabər olub olmaması yoxlanılır */

Yəqin ki, siz < və > operatorlarının necə işlədiyini düşünürsünüz. Onlar uyğun olaraq böyükdür və kiçikdir operatorlarıdır. Məsəslən.

a < 5 /* a -nın 5 -dən kiçik olmasını yoxlayır */

a > 5 /* a -nın 5 -dən böyük olmasını yoxlayır */

a == 5 /* a -nın 5 -ə bərabər olmasını yoxlayır */

proqramlaşdırmanı örgənməyin yeganə yolu proqram yazmaqdır.
Aşağıda verilən tapşırıqları yerinə yetirən proqramlar yazın.

Həlli olanlar. (həllərə yalnız öz cəhdləriniz nəticə vermədikdə müraciət etmək məsləhət görülür.)

1.3 ədədin cəmini hesablayan proqram tərtib edin.

2. Hər – hansı ədədi və onun kvadratını hesablayan proqram tərtib edin.

3. Aşağıdakı kod hissəsinin gördüyü işi yoxlamaq üçün proqram tərtib edin.

int x,y;


x=5;

y=9;


printf("x=%d y=%d",x,y);

Operatorlar


Əvvəlki paraqrafda biz mənimsətmə operatoru ilə tanış olduq, bu paraqrafda isə şərt(if, switch) və dövr (for, while, do while) operatorları ilə tanış olacayıq.

Şərt operatorları -- if , switch


Bildiyimiz kimi operator proqramda hansı əməliyyatın yerinə yetirilməli olduğunu bildirir. Bir çox hallarda bu və ya digər əməliyyatın yerinə yetirilməsi hansısa şərtdən asılı olur. Bu zaman if operatorundan istifadə olunur. 

if operatoru


if operatorunun sintakisisi aşağıdakı kimidir

if (şərt) {

yerinə yetirilməli əməliyatlar

}

else {



digər əməliyatlar

}

Qeyd edək ki, əgər cəmi bir əməliyyat yerinə yetirilirsə onda {} mötərizələrinə ehtiyac yoxdur. Izahı:


Əvvəlcə şərt yoxlanılır , əgər doğrudursa onda {} arasında olan əməliyatlar yerinə yetirilir əks halda else – dən sonrakı {} mötərizələri arasında olan əməliyatlar yerinə yetirilir.

Məsələn:


int x;

if (x<5)


printf("%d 5 -den kiçikdir",x);

else


printf("%d 5 -den böyükdür",x);

nümunə proqram prog3_1.c :

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

int x;
printf("zehmet olmasa x-in qiymetini daxil edin\n");

scanf("%d",&x);
if (x<5)

printf("%d 5 -den kichikdir\n",x);

else

printf("%d 5 -den boyukdur\n",x);


return 0;

}

proqramı kompilyasiya edək və hər dəfə müxtəlif qiymətlər daxil etməklə bir neçə dəfə yerinə yetirək.



user@gnu_linux:~/progs/3$ gcc prog3_1.c -o prog3_1

user@gnu_linux:~/progs/3$ ./prog3_1

zehmet olmasa x-in qiymetini daxil edin

7

7 5 -den boyukdur



user@gnu_linux:~/progs/3$ ./prog3_1

zehmet olmasa x-in qiymetini daxil edin

3

3 5 -den kichikdir



user@gnu_linux:~/progs/3$ ./prog3_1

zehmet olmasa x-in qiymetini daxil edin

45

45 5 -den boyukdur



user@gnu_linux:~/progs/3$

Dövr operatorları


for, while, do while

Dövr operatorları müəyyən əməliyyatların bir neçə dəfə təkrar yerinə yetirilməsinə imkan verir. Bu operatorlardan proqramlaşdırmada çox geniş istifadə olunur. 


for operatoru


for operatorunun sintakisisi aşagıdakı kimidir:

for (sayğacın ilkin qiyməti; dövrün başa çatma şərti; sayğacın dəyişmə qaydası){

əməliyyatlar;

} nümunə proqram:


/* prog3_2.c */
int main(int argc, char *argv[]){
int k;

for (k=0; k<10; k=k+1)

printf("salam dunya\n");

return 0;

}

programı kompilyasiya edib yerinə yetirək.



user@gnu_linux:~/progs$

user@gnu_linux:~/progs$ gcc -o prog3_2 prog3_2.c

user@gnu_linux:~/progs$

user@gnu_linux:~/progs$ ./prog3_2

salam dunya

salam dunya

salam dunya

salam dunya

salam dunya

salam dunya

salam dunya

salam dunya

salam dunya

salam dunya

user@gnu_linux:~/progs$

user@gnu_linux:~/progs$

indi isə proqramda for (k=0; k<10; k=k+1) sərtini for (k=5; k<10; k=k+1) ,for (k=0; k<3; k=k+1), for (k=0; k<10; k=k+7),
for (k=0; k<10; k=2) şərtləri ilə əvəz edib proqramı icra edək. Hər dəfə müxtəlif nəticələr alacağıq. Sonuncu halda isə ekranda Salam dunya ifadəsi sonsuz çap olunacaq(proqramın icrasını dayandırmaq üçün CTRL + Z düyməsini daxil edin).
Birinci halı təhlil edək.

for (k=0; k<10; k=k+1)

Sayğac olaraq k dəyişənindən istifadə olunur və ona başlanğıc qiymət olaraq 0 mənimsədilir. k=0; dövrün sona çatması şərti kimi k<10; göstərilib. Bu o deməkdir ki nə qədər ki k < 10 şərti ödənir dövr davam edəcək. Sayğacın qiymətinin dəyişmə qaydası kimi k=k+1 (! sonda ; simvolunun yoxluğuna diqqət yetirin) göstərilib, yəni dövr hər dəfə təkrar olunduqda sayğacın qiyməti 1 vahid artır.

Proses aşağıdakı şəkildə baş verir:

Əvvəlcə k dəyişəni 0 qiyməti alır. Sonra dərhal başa çatma şərti yoxlanılır. k<10 Şərt ödənir, belə ki, 0 < 10 ifadəsi doğru qiymət alır və avtomatik olaraq {} arasında olan əməliyatlar icra olunur. Bizim halda cəmi bir əməliyyatdan, printf("salam dunya\n"); 
istifadə etdiyimizə görə onu {} mötərəzələri arasına almadıq. Daha sonra növbə sayğacın qiymətinin dəyişməsinə gəlir. 
Baxdığımız hal üçün ( k -nın qiyməti 0 olan hal ) k-nın yeni qiyməti 1 olur. Dərhal şərt yoxlanılır. 1 < 10 . Hələki hər şey qaydasında, əməliyyatlar yerinə yetirilir, sayğacın qiyməti dəyişdirilir və hər dəfə 1 vahid artaraq 2,3, ... , 9 qiymətlərini alır. k - nın bütün bu qiymətlərində k<10 şərti ödənir və əməliyyatlar( printf("salam dunya\n");) yerinə yetirilir. Növbəti qiymət isə 10 – dur. Bu halda isə artıq 10 < 10 şərti üdənmir və for operatoru sona çatır.

while opratoru


for operatorunda biz sayğac təyin etdik, dövrün başa çatması şərtini və sayğacın dəyişmə qaydasını verdik. Bu zaman biz dövrün neçə dəfə təkrar olunacağını dəqiq bilirik. Bəzən isə elə olur ki, dövrün başa çatması şərtinin nə vaxt ödənəcəyi əvvəlcədən bilinmir. Bu zaman while operatorundan istifadə olunur. while operatorunun sisntaksisi aşağıdakı kimidr.
while(şərt){

əməliyatlar;

}

nümunə:
char x;



x='b';

while (x!='a'){

printf("salam dunya\n");

printf(" yeni simvol daxil edin\n");

scanf("%c",&x);

}

Bu koddan proq3_3.c -də istifadə edilib. Bu proqramı kompilyasiya edib yerinə yetirək. Göründüyü kimi dövr biz a simvolunu daxil edənə kimi davam edəcək.



while dövr operatorunun digər nadir hallarda istifadə olunan forması do while operatorudur. do while operatorunun sintaksisi belədir:

do{


əməliyyatlar;

} while(şərt);

bu operatorun while opratorundan yeganə fərqi odur ki, bu halda şərtin nə zaman ödənməsindən asılı olmayaraq əməliyyatlar ən azı 1 dəfə yerinə yetiriləcək.

switch operatoru


Əgər müəyyən halda proqramın icra istiqaməti bir neçə şərtdən asılıdırsa bu zaman if opratoru ilə bu şərtlərin mürəkkəb konfiqurasiyasından istifadə etmək əvəzinə switch operatorundan istifadə edirlər.

switch operatorunun sintaksisi aşağıdakı kimidir:

switch ( dəyişən ) {

case qiymət1:

yerinə yetirilməli proqram hissəsi /* əgər dəyişənin qiyməti == qiymət1 */

break;


case qiymət2:

yerinə yetirilməli proqram hissəsi /* əgər dəyişənin qiyməti == qiymət2 */

break;

...


default:

yerinə yetirilməli proqram hissəsi /* yuxarıdakı şərtlərin heç biri ödənmədikdə */

break;

}

switch opratoru dəyişənin qiymətini yuxarıdan aşağı case ifadəsinin qarşısında dayanan qiymətlə yoxlayır və bərabər olarsa onda iki nöqtə : - dən sonra gələn bütün operatorları yerinə yetirir. Növbəti case ifadəsinə qədər. break rast gəlinən yerdə switch opratoru işini dayandırır və proqramda switch -dən sonra gələn oprator yerinə yetirilir. 


switch operatoru ilə bağlı mühüm məqamlardan biri də case ifadələrində qiymət kimi ancaq tam tipli dəyişənlərdən istifadə etmək olar (int) .
default seçimindən istifadə etmək vacib deyil. Əgər qiymətlərdən heç biri dəyişənə bərabər olmasa onda default:seçimində göstərilən operatorlar yerinə yetiriləcək.
nümunə proqram: prog3_4.c

#include

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

int color = 0;

printf("Her hansi reng sechin(qirmizi=1,yashil=2,qara=3):\n");

scanf("%d",&color);

switch(color){

case 1: printf("siz qirmizi rengi seçdiniz\n");

break;

case 2:printf("siz yaşıl rengi seçdiniz\n");



break;

case 3:printf("siz qara rengi seçdiniz\n");

break;

default:printf("siz hech bir reng sechmediniz\n");



}

return 0;

}

Proqramı kompilyasiya edib yerinə yetirək.



user@gnu_linux:~/progs$

user@gnu_linux:~/progs$ gcc -o prog3_4 prog3_4.c

user@gnu_linux:~/progs$

user@gnu_linux:~/progs$ ./prog3_4

Her hansi reng sechin(qirmizi=1,yashil=2,qara=3):

2

siz yaşıl rengi seçdiniz



user@gnu_linux:~/progs$

user@gnu_linux:~/progs$




Yüklə 395 Kb.

Dostları ilə paylaş:
1   2   3   4   5




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