MİO GRAF  Milli İntellektual Oyun
       

   ƏSAS     XƏBƏRLƏR     SİZİN DƏRSLƏR     FOTO QALEREYA     VİDEO DƏRSLƏR     DƏRS GÖNDƏR     SUAL-CAVAB
DƏRSLİKLƏR
        AutoCad0003
        3D Studio Max0057
        Adobe After Effect0002
        Adobe Premier0002
        Adobe Photoshop0094
        Visual Studio0002
        Flash / Action Script0013
        Asp / Asp.net / C#0006
        PHP0002
        HTML / CSS0002
        JavaScript0001
        Visual Basic0004
        Delphi0002
        C / C++0006
        Microsoft Office0005
        Microsoft Windows0018
        Digər dərslər...0016

GİRİŞ
   İstifadəçi adı
   

   Şifrə
    
 
                                             
    Qeydiyyat ol
    Şifrəni unutdun?
 

YENİ LİNKLƏR
   tehsilimizinfo.blogspot.c...0573 
   www.azresce.com3281 
   www.evalin.az4354 
   www.novruzov.net4612 
   www.azgraf.net/mocuzeler5367 
   videoders.azersayt.com5369 
   www.mado.az6107 
   www.artdeco.az4651 
   www.cv-az.com7328 
   www.fakto.info5423 
 Ardı    


ELANLAR
Yaşıl: işçi axtarıram - Mavi: iş axtarıramBeynəlxalq holding koperasiyası. »»
Yaşıl: işçi axtarıram - Mavi: iş axtarıramMünasib iş axtarıram... »»
Yaşıl: işçi axtarıram - Mavi: iş axtarıramQrafik dizayner »»
Yaşıl: işçi axtarıram - Mavi: iş axtarıramNeft şirkətində işləmək istiyirəm. »»
Yaşıl: işçi axtarıram - Mavi: iş axtarıramAsp.Net, Delphi, HTML, Web Dizayner »»
Yaşıl: işçi axtarıram - Mavi: iş axtarıramİşci teleb olunur »»
Yaşıl: işçi axtarıram - Mavi: iş axtarıramİngilis dili hazırlığı. »»
Yaşıl: işçi axtarıram - Mavi: iş axtarıramİşçi tələb olunur. »»
 Ardı     



İstifadəçi: 0000732
Video dərs: 0000042
Şəkilli dərs: 0000193
Sual: 0000070
Şəkil: 0000305
Xəbər: 0000470
 C / C++     
Bu dərslikdə C++ builder haqqında ətraflı məlumat verilmişdir. Dərsin köməkliyilə C++dilində ilkin giriş səviyyənizi müəyyən qədər artıracaqsız.

Tarix:        03.07.2011
Oxunub:   8383        
Müəllif:     
Rəsul Nəcəfov   



Paylaş

Çap et        Şərh yaz

 Borland C++Builder ilk addım

1. C ++ Builder-lə qısa tanışlıq
2. Konsol qoşması olan Win32-nin necə yazılması haqqında məlumat
3. C++ proqramm dilinin həyata keçirilməsi
4. C++ dəyişənləri və məlumat tipləri haqqında məlumat
5. C++ funksiyaları (main( )funksiyası daxil olmaqla) haqqında məlumat
6. Massivlər haqqında məlumat

C ++ Builder-lə qısa tanışlıq

C++ Builder Borland firmasının məhsulu olub C++ proqramm dilində sürətli olaraq tərtibatların (RAD-rapid application development) işlənib hazırlanması üçün yaradılmışdır.Qısacası siz bu proqramm vasitəsi ilə bütün windows proqramlarını və həmçinin win32 konsol tərtibatların işləyib hazırlaya bilərsiniz.

Konsol tərtibatı olan Win32-nin necə yazılması haqqında məlumat

  • File / New seçirik- New İtems (object repository)  açılır
  • New  bölməsinə basaraq-Console APP seçirik
  • Kod redaktoru açılır :

//-----------------------------------------------------------------------------------------
#include <condefs.h>
#include <stdio.h>
#include <stdlib.h>

#pragma hdrstop
//--------------------------------------------------------------------------------------------
Int main (int argc, char** argv)
{
return 0;    //operator (hər bir operatorun sonunda nöqtəli vergül qoyulur)
}
//--------------------------------------------------------------------------------------------

Hər bir proqrammçı operatorla ifadə arasındakı fərqi bilməlidir.Təyin olunmuş qaydalara əsasən , operator “ ardınca nöqtəli vergül qoyulmuş “ ifadədir.Nöqtəli vergül ifadəni bağlayır və onu bir sətirdə  öz cinsinə aid  kod blokuna çevirir.İfadələr – bu bir kod fraqmentidir ki, bir neçə qiymət hesablaması aparır.Operator – bu bir qapalı olan ifadədir.
Məsələn növbəti operatora baxaq :
c = a +b ;
Bu nümunədə operatorun bərabərlik işarəsindən sağda olan hissəsi a + b, ifadə adlanır.Sətir isə bütövlükdə operatordur.Unutmaq olmaz ki, operatorlar nöqtəli vergüllə bitir və özündə qapalı ifadə təşkil edir.
C++-da kodlar bloku  { fiquru ilə başlayır } fiquru ilə sona çatır.Və həmçinin skoblar if operatorları, funksiyalar, sikllər və digər vəziyyətlərlə əlaqəli  kod blokunun əvvəlində və axırında istifadə edilir.

Nümunədə göstərdiyim proqrammda “ Hello World ! ” yazılacaq və çox sadə proqramm olduğundan yalnız bir dəst skobdan istifadə olunub.
Hello World ! yazısını ekrana gətirmək üçün bizə C++ sinifi (class) lazım olacaq.Bu sinif  iostream adlanır .İostream sinfi baza daxil etmə və xaric etmə axını (sreams) üçün istifadə olunur.Məsələn, istifadəçi tərəfindən mətnin ekrana yazılması və məlumatların qəbul edilməsi. Cout axını məlumatların standart çıxış axınına göndərmək üçün istifadə olunur.Cin axını istifadəçi tərəfindən verilmiş məlumatların qəbulu üçün istifadə olunur.İostreama iki xüsusi operator qoşulub ki, məlumatların axına daxil edilməsi və axından xaric edilmısi üçün istifadə olunur. Daxil etmə operatoru (<<) məlumatları çıxış axınına yerləşdirmək üçün, xaric etmə operatoru (>>) isə məlumatları daxil etmə  axınından çıxarmaq üçün istifadə olunur.Məlumatları konsola çıxartmaq üçün aşağıdakıları yazmaq lazımdır:
cout  << “Do something!”;
Bu Do something! Mətninin standart çıxış axınına yerləşdirmək üçündür.Proqrammın bu sətri yerinə yetirildikdən sonra mətn ekrana veriləcək.

Cout yalnız konsol rejimindəki tərtibatları işləmək üçün nəzərdə tutulmuşdur.Windows poqrammlarında  mətni ekranda göstərmək üçün Draw Text(), TextOut,C++Builder vasitəsi ilə yazılmış mətnlər DrawText() ,TextOut və ya Windows APİ-dən, və ya TCanvas sinfindən istifadə olunur.

Coutu istifadə etmədən əvvəl kompilyatora məlumat vermək lazımdır ki, iostream sinfi (elan edilən adlanır) harada təsvir edilib.İostream üçün elan edilmə İOSTREAM.H  adlı faylda yerləşdirilmişdir.Bu fayl başlıq (header file) adlanır.

  Başlıq fayl bir və bir neçə sinif üçün elan etmə daşıyır.İOSTREAM.H faylında kompilyator iostream sinifinin təsvirini axtarması üçün #include directivindən istifadə edin :

#include <iostream.h>

Elan etmə (declaration) niyyətlərin xəbərdarlığını edir.O bir neçə vaqeənin təyinində (definition) iştirak edir.Bu halda iostream sinfini tapar və cout   operatoru ilə qarşılaşdıqda nə etməli olduğunu bilər.

 

Əgər siz sinif və ya funksiyaların başlıq faylarını sizin proqrammın göndərmə başlıqlarına əlavə etməyi unutsanız, onda kompilyator səhv haqqında xəbərdarlıq edəcək. Undefined symbol ‘cout’ (‘cout’sinvolu təyin edilməyib) .İostream sinfi xüsusi manipulyator (manipulators) təşkil edir ki, onun köməyi ilə daxil edilənlər idarə edilir.Onlardan biri olan endl (endl line – sətrlərin keçirilməsi) hansı ki, çıxış axınına yeni sətrin simvolunu qoyur.Biz endl –dən istifadə edərək növbəti sətrə keçəcəyik.

 //-----------------------------------------------------------------------------------------
#include <condefs.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>                          // bu sətri əlavə edin
#include <conio.h>                               //ekranın tez bağlanmaması üçün
#pragma hdrstop

int main (int argc, char** argv)
{
cout << “Hello World!” << endl ;     // bu sətri əlavə edin
cout << endl << “Press any key to continue…” ; // bu sətri əlavə edin
getch ( ) ;                                                               // bu sətri əlavə edin
return 0;   
}

C++ dili ilə tanışlıq

C++ proqramm dili ən güclü proqramm dilidir.Bu proqrammın zəif cəhətlərin-
dən biri təyin olunmuş yaddaş sərhədlərindən kənara çıxarkən və ya system resurslarından istifadə qaydalarının pozulması zamanı proqrammın yararsız hala gəlməsidir.Bu səhvliklər windowsun özünə belə xətər gətirə bilər.

Obyekt (object), təyin olunmuş tapşırığın yerinə yetirilməsi üçün component kimi, öncədən yazılmış, özündə ikili kod sahəsi təşkil edir .Komponentlər obyektdir- lər,ancaq bütün obyektlər component deyil.

Dəyişənlər  

Dəyişənlər yaddaşın bir neçə sahəsinə yiyələnmiş olanlardır.Dəyişənlər élan edildikdən sonra , siz onları yadaşşda məlumatlalra əməliyyat üçün istifadə edə bilərsiniz. Məsələn :

  int x;             // tam tipli ‘x’dəyişəni élan edilib
x = 100;       // indi  ‘x’ 100 qiymətini daşıyır
x += 50;      // indi  ‘x’ 150 qiymətini daşıyır
int  y = 150;     // ‘y’ élan edildi və 150 ədədi ilə qiymətləndirildi
x += y;            // indi  ‘x’ 300 qiymətini daşıyır
x ++  ;             //  indi  ‘x’ 301 qiymətini daşıyır 

Dəyişənlər (variable) – bu kompyuterin yaddaş sahəsidir ki, bir neçə kəmiyyətin saxlanılması üçün ayrılmışdır.

 int x;
int y;
 x = y + 10;   // səhvdir !
Burada x hər hansı qiymət daşıya bilər, ona görə ki, y dəyişəni istifadədən əvvəl təyin edilməmişdir.

C++ məlumatlar tipi

C++ -də məlumatlar tipi (data type) yaddaşda məlumatlrın saxlanma üsulunu təyin edir.C++ proqramm dilində istifadədən əvvəl dəyişənlərin tiplərini elan etmək lazımdır:
int x1 = -1;            // dəyişənin tipi - tam ədəd
int x = 1000;         // dəyişənin tipi - tam ədəd - minlik
float y = 3.14;       // dəyişənin tipi – qalıq ədəd
long z = 457000;   // dəyişənin tipi – tam ədəd onminlik                

Burada bool müstəqil tiptdir.Bool burada typedef-in köməyi ilə int tipinin ekvi- valenti kimi təyin olunur.Operator typedef  iki simvola uyğun olaraq qoyulur və bundan sonra kompilyator onlara ekvivalent kimi baxır:
typedef  int Bool;
Bu kompilyatora göstəriş verir ki, Bool-u int sözü kimi oxusun.

C++ əgər mümkün olduqda avtomatik olaraq müxtəlif tipli məlumatları eyniləşdirir:
short result;                          // tam dəyişən tipi short
long num1 = 200;                // tam qiymət tipi long
long num2 = 200;                // tam qiymət tipi long
result = num1 * num2;        // nəticə olacaqdır -25 534
Ona görə ki, short yalnız  32767 qiymətinə qədər hesablama aparır.Buradakı hasil isə 40000 edir.40000-32767=7233, 32767- 7233=25534

C++ operatorları 

Operatorlar (operators) məlumatların emalı üçün isdifadə olunur.Operatorlar hesablama, bərabərlik, mənimsımə və s. spesifik əməliyyatları yerinə yetirir ki, hansı ki, bir çox proqramçılar bunların hamısını dərk etmir.C++ də çoxlu sayda operator var.Aşağıdakı cədvəldə ən çox istifadə olunan operatorların siyahısı verilmişdir:
 


Diqqət yetirmək lazımdır ki, bir neçə halda operatorlar preinkrement (++x),digər hallarda isə postinkrement (x++) ola bilər. Preinkrement (pre-increment) halında operator kompilyatora göstəriş verir ki, “Dəyişənin qiymətini artır və sonra bu dəyişəni istufadə et”. Postinkrement (post-increment) halında operator kompilyatora göstəriş verir ki, “Öncə dəyişəni istifadə et və sonra onun qiymətini artır”.Məsələn:
int x = 10;
cout << “x = “ << x++ << endl;
cout << “x = “ << x << endl;
cout << “x = “ << ++x << endl;
cout << “x = “ << x << endl;
olacaq:
x = 10;
x = 11;
x = 12;
x = 12;

C++ funksiyaları 

Funksiyalar özlərində bilavasitə əsas proqramma daxil olmayan kodlar blokunu təqdim edir.Onlar proqramm üçün zəruri olan xüsusi əməliyyatların yerinə yetiril- məsi üçün çağırılır.Məsəl üçün, siz yazdığınız funksiyada iki rəqəm götürülür,bu rəqəmlər arasında riyazi vurma hesabı aparılır və nəticəni geri qaytarır.Sizə eləcə də funksiya lazım olar ki, sətri götürsün analiz etsin və sətrin bir hissəsini geri qaytarsın.

Funksiya (function) – bu bir kod bloku olub əsas proqramma daxil olmayaraq təyin olunmuş tək bir tapşırığı yerinə yetirir.Funksiyalar C++ proqramm dilinin bir hissəsi olaraq fəaliyyət göstərir.Sadə tipli funksiya heç bir arqument qəbul etmir və geriyə void tipli qiymət qaytarır (bu onu göstərir ki, əslində o heç bir şey geri qaytarmır).Digər funksiyalar bir və bir neçə arqument qəbul edə bilər və bir neçə qiymət geriyə qaytara bilər.Funksiyaların adları dəyişənlərinin adları ilə götürülür.
Arqument (parametr) – bu kəmiyyəti vermə funksiyasıdır.Əməliyyat obyektində funksiyanın işini dəyişdirmək və ya obyektin göstərilməsi üçün  istifadə olunur.
Funksiyanı istifadə etmədən öncə onu élan etmək lazımdır.Funksiyanı élan etmək(function declaration), və ya prototipi (prototype), kompilyatora məlumat verir ki, funksiya neçə arqument qəbul edib, hər bir arqumentin tipini və qayıdan qiymətin tipini .

Prototip (prototype) – bu funksiyanın élan edilməsi və ya onun qabaqcadan təyin olunmasıdır.

Aşağıdakı cədvəldə funksiyaların istifadə nümunəsi verilmişdir:

Aşağıda verilmiş proqrammda istifadəçi tərəfindən 11-14 cü sətrlərdə iki qiymət soruşulur(standart giriş axını cin-dən istifadə olunur) , multiply() funksiyası çağırılır ki, bu rəqəmlərin bir-birinə vurulması (sətr 15) və bundan sonra nəticənin verilməsi üçün showResult() funksiyası çağırılır(sətr 16).Diqqət yetirin ki, 5 və 6-cı sətrlərdə əsas proqramm başlamasından əvvəl multiply() və showResult funksiyalarının prototipləri  verilib.Prototiplərdə yalnız qayyıdan qiymətin tipi , funksiyanın adı və arqumentin tipi verilib.Bu funksiyaların élan edilməsinin minimal tələb olunanıdır.
İstəkdən asılı olaraq prototipdə dəyişənlərin adlarını da göstərmək olar ki, funksiyanın icra etdiyi fəaliyyəti aydınlaşdırsın.Məsəl üçün élan edilmiş multiply() funksiyasını belə yazmaq olar:
int multiply (int firstNumber, int secondNumber);

Ppoqramma diqqət yetirin təyin edilən funksiya multiply() (22-25 sətrlər) təyin edən funksiya main() (8-20 sətrlər)blokunun xaricindədir.Təyin edilən funksiya funksiyanın tərkibini göstərir.bizim proqrammda funksiyanın tərkibi kiçik ölçüdədir, belə ki, funksiya sadəcə iki öz arqumentini bir birinə vuraraq və nəticəni qaytarır.
Bu proqrammda funksiya multiply() bir neçə üsulda çağrıla bilər.Siz dəyişənləri , konstantları və hətta nəticələri digər funksiyaları çağıraraq onlara ötürə bilərsiniz:
result = multiply(2,5);       // konstantın ötürülməsi
result = multiply(x,y);       // dəyişənlərin ötürülməsi
showResult (multiply(x,y)); //qayıdan qiymət digər funksiyanın arqument xüsusun-
//da istifadə olunur
multiply (x,y);                                  // qayıdan qiymət nəzərə alnmır

 

Nümunəyə diqqət yetirdikdə görürük ki, qiymət qayıdan funksiyadan istifadə olunmur.Belə olan halda heç bir məna olmur ki, multiply() funksiyasını çağıraq və nəticəni nəzərə almayaq , amma belə çağırışlar C++-də proqrammlamada  tez-tez olur.Bir çox, funksiya mövcuddur ki, təyin olunmuş əməliyyatı yerinə yetirir və sonra əməliyyatın yekun kodunu grei qaytarır.Bəzən qayıdan qiymətin sizin proqramma heç bir aidiyyatı olmur və siz ona tamamilə məhəl qoymaya bilərsiniz.Əgər siz belə ki, qayıdan qiymətdən isttifadə etməsəniz o avtomatik olaraq proqrammdan atılır.Məsələn , biz proqramımızda  getch() funksiyasının yerinə yetirmə nəticəsindən istifadə etmirik.

Funksiyalar digər funksiyaları çağıra bilər.Funksiya özünü belə çağıra bilər.Bu rekursiya adlanır və C++-də proqramlamada potensial mənbə kimi  problem yaradır.Yaxşısı budur ki, yetəri qədər təcrübə qazanmadan rekursiyadan istifadə etməyəsən.

Rekursiya( recursion ) – bu proses zamanı funksiya özü-özünü çağırır.

    Bu bölmədə vərilən məlumatlar, C++ proqramlarının avtonom (standalone) funksiyalarıdır.Bu funksiyalar siniflərin nümayəndələri sayılmır.

Funksiyalarla işləmə qaydaları

  • Funksiyalar istənilən sayda arqument qəbul edə bilər və ya tamamən qəbul etməz 
  • Funksiya geriyə qiymət qaytara bilər, lakin bu mütləq deyildir.
  • Əgər qayıdan qiymət üçün void tipi göstətərilibsə, funksiya heç bir qiymət qaytarmır.Əgər siz belə funksiyada qiymət geriyə döndərmək cəhdi etsəniz kompilyator səhv haqqında xəbərdarlıq edəcək.Void, qaytaran funksiya return operatorunu qəbul etməyə bilər, amma istəyə görə əlavə edilir.Ehtimal olunan istənilən variant,əgər return operatoru yoxdursa, qayıtma funksiyanın sonunda (qapalı skoblarda) avtomatik olaraq yerinə yetirilir.
  • Əgər  funksiyanın elanında  qiyməti geri qaytarmaq üçün göstəriş  olunubsa,funksiyanın tərkibində bu qiyməti geri qaytarmaq üçün hökmən return operatoru olmalıdır.Əks təqdirdə kompilyator xəbərdarlıq edəcək.
  • Funksiyada istənilən sayda arqument ola bilər, lakin qayıdan qiymət həmişə bir dənə olur.
  • Arqumentlər qiymətləri funksiyalara göstəricilər və ya sitatlarl vasitəsi ilə verir.

Funksiyaların (prototiplərin) élan edilmə formatı:

ret_type function_name(argtype_1 rag_1, argtype_2 arg_2, …, argtype_n arg_n);

Proqrammda istifadə edilən funksiyaların elanı onları eyniləşdirir.Onlarda qayıdan funksiyanın  qiymət tipi(ret_type),  funksiyanın adı (function_name) göstərilir, gözlənilən funksiyanım arqumentlərinin ardıcıllığı (arg_1,arg_2,…,arg_n) və tipləri (argtype_1,argtype_2,…,argtype_n ) təyin olunur.

Funksiyaların təyin etmə formatı:

ret_type function_name(argtype_1 rag_1, argtype_2 arg_2, …, argtype_n arg_n)
{
statements;
}

Funksiyaların təyin edilməsi kod bloku (statements) təşkil edir ki, funksiyanı tərkibləşdirir.Təyin edilmədə həmçinin qayıdan qiymətin tipini (ret_type), funksiyanın adı (function_name), funksiyanın eyniləşdirilməsini, funksiyaların parametlərini (arg_1, arg_2, ...,arg_n) və onların tipləri (argtype_1, argtype_2, ..., argtype_n) göstərilir.

 

Main ( ) funksiyası

  C++ proqrammlarında main ( ) funksiyası olmalıdır ki, proqrammın giriş nöqtə- sinə xidmət edir.Bütün C++ proqrammlarında ənənəvi main () funksiyasından istifadə olunmur.Belə ki, Windows-proqrammlarının yazılışı üçün giriş nöqtəsi olan WinMain( )-dan istifadə olunur.

C++ Builder GUİ-tərtibatlarında  WinMain( ) funksiyası mövcuddur, yalnız bu bizdən gizlədilib.

Main ( ) eyniilə digər funksiyalar kimidir.Bu onu göstərir ki, bu da onlar kimi eyni bazaya sahibdir.Siz gördünüz ki, konsol tərtibatında main() funksiyasından istifadə olunub:
int main (int argc, char** argv);
Bu formada main( ) iki arqument qəbul edir və tam qiymət qaytarır.Öncədən bildiyimiz kimi arqumentlər funksiyalara çağırıldıqları zaman ötürülür.Amma main () funksiyası proqramm işə salındığı zaman avtomatik olaraq çağırılır.

Massivlər 

Siz istənilən C++ tipli qurulmuş məlumatları massivlərllə təşkil edə bilər- siniz.Massiv (array) – bu sadəcə məlumatlar dəstidir.Məsələn siz istəyirsiniz ki, beş rəqəmli int tipini tam rəqəmli massivdə saxlayasınız.Bunun üçün sizə bunları yazmaq lazımdır:
int myArray [5];
Kompilyator aşağıda göstərilən qaydada massiv üçün yaddaş ayırır:

    myArray [0]     myArray [1]       myArray [2]       myArray [3]       myArray [4]


baseAddr

baseAddr +4

baseAddr +8

baseAddr +12

baseAddr +16

   Hər int tipli rəqəmə 4 bayt yaddaş tələb olunur , bütün massiv 20 bayt yaddaş tutur.
Massivlər elan edildikdən sonra indeks operatorundan [ ] istifadə edərək onları rəqəmlə doldura bilərsiniz:
myArray [0] = -20;
myArray [1] = -100;
myArray [2] =  0;
myArray [3] = 100;
myArray [4] = 200;
Massivlərin ayrı elementlərinə daxil olmaq üçün yenədə indeks operatorlarından istifadə olunur:

int result  =    myArray [3]  +  myArray [4]; // result 300 qiymştini alır

 

Massivi eyni vaxtda elan edib və doldurmaq olar:

int myArray [5] = { -200, -100, 0, 100, 200 };

Bununla belə əgər siz massivdə nə qədər elementin olduğunu dəqiq bilirsinizsə və onu elan edərkən bütövlüklə doldurursunuzsa onda massivin ölçüsünü buraxa bilərsiniz:

 int myArray [ ] = { -200, -100, 0, 100, 200 };

Bu halda kompilyator massivdə olan elementlərin əhəmiyyətinə görə siyahı sayını təyin edir və bu saya əsasən yaddaşda massiv üçün yer ayırır.

Massivlər birdən çox ölçmə apara bilər.Tam say üçün ikili massiv yaratmaq üçün növbəti qeydi aparmaq lazımdır:

int mdArray [3 ] [ 5];

Bu halda 15 tam ədəd üçün yaddaş ayrılır (cəmi 60 bayt).Siz bu massivlərin elementlərinə digər sadə massivlər kimi yol tapa bilərsiniz, fərq burasındadır ki, lazımdır ki, iki indeks operatorundan istifadə olunsun:

int x = mdArray  [1 ] [ 1] + mdArray [2 ] [ 1];

Aşağıdakı cədvəldə ikili massivin yaddaşa verilmə qaydası göstərilib:

Siz gərək massivin sərhədlərindən kənara çıxmamaq üçün ehtiyyatlı olasınız.C++-nin yüksək ortamlarından biri onun yaddaşla birbaş əlaqəsidir.Buna görədə C++ sizin proqramm üçün ayırmadığınız yaddaşa qeydlər aparmanıza qadağa qoymur.Aşağıdakı kod yaddaşa daxil ola bilər lakin, bu sizin proqrammın (və ya Windowsun) zədələnməsinə yol aça bilər:

int array [5];
array [5] = 10;

Bu səhvdir: siz qeyd edirsiniz ki, massivin sonuncu elementi 5-dir, əslində isə bu 4-dür.Massivdən kənara çıxarkən siz bilməyəcəksiniz ki, yaddaşın hansı hissəsində dəyişiklik olub və ən yaxşı variantda nəticə qəbul olunmaz olacaq, pis variantda isə proqrammın və hətta Windowsun sıradan çıxmasına gətirib çıxara bilər.
Massivlərlə işləmə qaydası:

  • Massivin baza elementi 0 indeksini qəbul edir. İkinci elementin indeksi 1, üçünsü 2 və s.
  • Massivlərin ölçüləri kompilyasiya etapı zamanı təyin olunmuş konstantlarla olmalıdır.Proqrammın qurulması zamanı kompilyator bilməlidir ki, massivin yerləşdirilməsi üçün nə qədər yaddaş lazımdır.Siz dəyişənlərdən massivin ölçüsünün saxlanması üçün istifadə edə bilmərsiniz, buna görə də aşağıdakı fraqment kompilyasiya tərəfindən səhv xəbərdarlığı verəcək:

int x = 10;
int myArray [x]    // burada kompilyasiya səhv verəcək

  • Massivin sərhədlərindən kənara çıxmamaq üçün ehtiyyatlı olun.
  • Böyük massivləri pardağa yox “qalağa” (heap) yerləşdirin.

Simvol massivləri

Bu sizə qəribə görsənə bilər, amma C++-də mətn ifadə edən dəyişənlərin dəstəklənməsi yoxdur.Proqrammlarda sətrləri təqdim etmək üçün char tipli dəyişənlər massivindən istifadə olunur.Məsələn:

char text [ ] = “This is a string.”;

Bu sətrin yaddaşa verilməsi üçün 18 bayt həcmində yaddaş ayırır.Yəqin ki, siz diqqət yetirdiniz ki, bu sətr 17 simvoldan ibarətdir.18 bayt olmağın səbəbi hər bir sətrin sonu 0 simvolla bitir və C++ buna da yaddaşda 1 bayt yer ayırır.

Nol-simvol (terminating null) bu xüsusi simvol olub proqramm üçün \0, olub 0 rəqəminin ekvivalenti kimi təqdim olunur.Məsələn:

T

h

i

s

 

i

s

 

a

 

s

t

r

i

n

g

.

\0

Ekrana veriləcək: This is a string

T

h

i

s

 

i

s

\0

a

 

s

t

r

i

n

g

.

\0

Ekrana veriləcək: This is

 

Sətrlərlə işləmək üçün funksiyalar

Aşağıdakı cədvəldə sətrlərlə işləmək üçün ən çox istifadə olunan funksiyalardan bəziləri verilmişdir.

 


Funksiya strcpu( ) bir sətri digərinə kopyalayır.Giriş sətri dəyişən və ya sətr konstantı ola bilər.Nümunə:

// 29 simvoldan ibarət sətr üçün yaddaş ayrılır
char buff [30];
// sətr konstantlarının buferə kopyalanması
strcpy (buff, “This is a test.”);
//sətrin ekrana verilməsi
cout << buff << endl;
//ikinci buferin inisiallaşdırılması
char buff 2 [ ] = (“A second string.”);
//bu sətrdə olanların birinci buferə yüklənməsi
strcpy(buff, buff2);
cout << buff << endl;

Təsadüfən simvol massivlərindən kənara çıxmaq rəqəm massivlərinə görə daha çox ehtimal oluna bilər.Məsələn:

 char buff [10] = “A string”;
//…
strcpy (buff, “This is a test.”); // səhvdir !

Burada biz 10 simvolu yaddaşa vermək üçün  simvol massivi élan etmişik və onu 9 bayt tələb olunan sətrlə inisiallaşdırmışıq .Əvəzində isə massivin həcmini unudaraq 16 bayt tələb olunan sətr yazmışıq və bu halda biz 6 bayt massiv sərhəddini aşmışıq.

Digər bir sətrlə işləmək üçün funksiya sprintf ( ) .Bu funksiya imkan verir ki,  mətn və rəqəmdən ibarət olan sətr formatı  alasan.Nümunədə iki rəqəm yerləşdirilib və nəticə haqqında məlumat vermək üçün  sətrlər qurma  funksiya sprintf ( ) tətbiq olunub:

 char buff [20];
int x = 10 * 20;
sprintf (buff, “The result is: %d”, x);
cout << buff;

  Proqrammın bu fraqmenti yerinə yetirildikdn sonra ekrana verilir:

 The result is: 200

Bu nümunədə %d tam rəqəmin harada qoyulmasını göstərən sprintf ( ) funksiyasını göstərir. Sətr formatından sonra arqumentlər siyahısında x dəyişəni durur, qiymət təyin olunan yerdə qoyulacaq.Sprint( ) funksiyasının özəlliklərindən biri , arqumentlərin dəyişənənlər rəqəmi ola bilməsidir.Siz hökmən bufer və sətr formatını göstərməlisiniz, bu halda sətr formatından sonra arqument sayı istənilən qədər ola bilər.Aşağıdakı nümunədə üç əlavə arqumentdən istifadə olunmuş sprintf( ):

 int x = 20;
int y = 5;
sprintf (buff, “%d + %d = %d”, x, y, x +y);
cout << buff;

Bu əməliyyat yerinə yetirildikdən sonra ekrana gələn nəticə:
20 + 5 = 25

   Bir dənə qoyulmuş çəpəki xətt (slash) xüsusi simvolların yazılışı üçün istifadə olunur.Məsələn, “\n” sətrlərin keçirilməsi üçün, “\t” tabulyasiya üçün istifadə olunur.Çəpəki xəttin yalnız özündən istifadə etmək üçün mütləq ikili xəttdən istifadə etmək lazımdır.Məsələn:
strcpy (fileName, “c:\\windows\\system\\win/ini”);

Funksiya sprintf() yaxın qohumu olan wsprint(), sprintf-in Windows versiya- sıdır.Bircə fərq orasındadır ki,  wsprint() imkan vermir ki,  sətr formatında  üzən nöqtəli rəqəmdən istifadə olunsun.Sprintf() funksiyasından istifadə etmək daha sərfəlidir.

Sətr massivləri

Siz təkcə simvol massivləri ilə deyil və həmdə simvol massivlərinin massivləri (sətr massivləri) ilə işləyə bilərsiniz.Aşağıdakı nümunədə sətr massivləri elan edilib:

 char string [] [20] = {
“This is a string 1”,
“This is a string 2”,
“This is a string 3”,
“This is a string 4”,
};
                                                   2-ci gün

              İdarəetmə operatorları və strukturlar

Bu başlıqda biz C++ proqramm dilinin əsaslarını öyrənəcəyik.Bu gün öyrəniləcək dərslərin elementləri aşağıdakılardır:

  • if və else açar sözləri
  • Sikllər: for, do və do-while
  • Operator switch
  • Məhəlli görünüşlər
  • Strukturlar

 

If operatoru

Bütün növ proqramm dilləri üçün bir neçə proqramm konstruksiyası mövcuddur.Bunlardan biri C++ operatoru if-dir.İf operatoru hər hansı bir kod bloklarının nəticəsinin true (həqiqi) və ya false (yalan) olmasından asılı olaraq bir neçə şərtlərin və sonrakı fəaliyyətin yoxlanılması üçün istifadə olunur.Nümunəyə baxaq:

 int x;
cout   << “Enter a number: “;
cin       >> x;
if (x > 10)
cout << “You entered a number greater than 10.” << endl;

Proqrammın bu fraqmenti istifadəçidən qiymət soruşur.Əgər verilən qiymət 10-dan böyüksə , ifadə x > 10 true qiymətini alır və ekrana məlumat verilir; əks təqdirdə heç bir şey verilmir.Diqqət yetirin ki, əgər şərti ifadə true qiymətini aldıqda, if operatorundan sonra bilavasitə növbəti operator yerinə yetirilir.

Şərti ifadəni nöqtəli vergüllə bitirməyin.Nöqtəli vergül özü özünə boş operator ifadə edir.Əgər siz təsadüfən if operatorunun sonuna nöqtəli vergül qoysanız, onda kompilyator boş operatoru operator kimi təvsir edir ki, ondan sonra gərək bu operatorla həqiqi şərtlər əməliyyatı aparasan.Nümunə:

 if (x = = 10);   \\ ehtiyyatlı olun artıq nöqtəli vergül !
DoSomething (x);

Bu vəziyyətdə DoSomething (x); funksiyası istənilən halda çağırılacaq, belə ki, kompilyator onu if operatorundan sonra birinci operator saymayacaq.Belə ki, bu kod tamamən qanunidir (bu tapşırıqda yerinə yetirilməsədə) , kompilyator heç bir xəbərdarlıq etməyəcək.

Əgər bu hal şərti ifadənin həqiqi halındadırsa, bir neçə sətr vasitəsi ilə yerinə yetirilməlidir və hökmən blok daxilində bu sətrləri birləşdirmək üçün fiqurlu skoblardan istifadə etmək lazımdır:

 if (x > 10) {
cout << “The number is greater than 10” << endl;
DoSomethingWithNumber (x);
}

Əgər şərti ifadə if operatoru ilə əlaqəli kod blokunda false qiymətini alırsa, bu nəzərə alınmır və bu blokun ardınca ilk operarorla proqrammın yerinə yetirilməsi davam edir.

C++-də bir çox imkanlar var ki,proqramm yazılışını asanlaşdırasan.Bunlardan biri onunla yekunlaşır ki, həqiqiliyi yoxlamaq üçün dəyişənin adı yetərli olur.Bu fraqmentə diqqət yetirin:

 if (fileGood) ReadData ( );

və  bunu daha uzun bir forma ilə müqayisə edin:

  if (fileGood = = true) ReadData ( );

Bu nümunədə bool tipli dəyişəndən istifadə olunub, belə ki, bu digər məlumat tipləri üçün də keçərlidir.Nə qədər ki, dəyişən sıfır olmayan qiymət daşıyırsa ifadə həqiqidir.Siz məntiqi inkar (!) dəyişən operatorundan istifadə edərək yalanlıq yoxlamasını apara bilərsiniz :

Bool fileGood = OpenSomeFile ( );
if (! fileGood) ReportError ( );

Bir neçə halda şərtin həqiqi halında bir  cürə , yalan halında isə başqa cürə fəaliyyət yerinə yetirəsən. Bunun üçün else operatorundan istifadə olunur:

 if (x = = 20) {
DoSomething (x);
}
else {
DoADifferentThing( );
}

 

Else operatoru if operatoru ilə uyğunlaşdırılıb, o halda istifadə olunur ki, şərti ifadə false qiymətini qəbul edir.
----------------------------------------------------------------------------------------------------
Bəzi məsləhətlər:

Diqqət yetirin ki, bərabərlik operatoru üçün iki “ bərabərdir ” ( = =) işarəsindən , mənimsəmə operatoru üçün isə bir-( = ) işarəsindən istifadə olunur.Kobud səhv nəticəsi onda olur ki, bərabərlik operatorunun yerinə mənimsəmə operatorundan istifadə olunsun.Əgər diqqətsizlik nəticəsində aşağıdakı nümunəni belə yazsaq onda:

 if (x = 20) {
DoSomething (x);
}

 qiymət 20 alarıq.Belə ki bu əməliyyat uğurla başa çatacaq.Şərti ifadə true qiymətini alacaq
----------------------------------------------------------------------------------------------------

Zəruri halda siz daxili if operatorlarından istifadə edə bilərsiniz.Bu halda adi if operatorunun ardınca bir və ya bir neçə belə operatordan istifadə edilməlidir.Nümunəyə baxaq:

 if (x>10)
if (x< 20)
cout << “X is between 10 and 20” << endl;

Göründüyü kimi bu bir sadə nümunədir.Real vəziyyətdə blokları bir birindən ayırmaq üçün skoblar labirintində səhv edə bilərsiniz.Buna misal olaraq nümunəyə baxaq:

 if (x > 100) {
y = 20;
if (x > 200) {
y = 40;
if (x> 400) {
y = 60;
DoSomething (y);
}
}
}
else if (x < -100) {
y = -20;
if (x< -200) {
y = -40;
if (x< -400) {
y = -60;
DoSomething (y);
}
}
}

Yəqin ki, siz ideyanı başa düşdünüz. C++ builderdə skobun tayını tapmaq üçün kursoru skoblardan birinin üzərinə qoyub Alt+ basın,bundan sonra kursor skobun digər tayının üzərində duracaq.

İf-else kombinasiyaları üşün də qısadılmış yazı forması var.Nümunəyə baxaq:

 if (direction = = EAST) lost = true;
else (lost = = false);
Bu iki sətri birində birləşdirmək olar:

 direction = = EAST ? lost = true: lost = false;

Baxmayaraq ilk görünüşdə bu qısaltma sizə qəribə görünə bilər, amma siz bunları tətbiq etməyi tez öyrənəcəksiniz.İf operatoru C++-də çox geniş istifadə olunur.Əsas odur ki, skobları düzgün qoyasınız.

----------------------------------------------------------------------------------------------------
If operatoru , birinci forma:

 if (cond_expr) {
true_statements;
}
else {
false_ statements;
}

Əgər şərti ifadə cond_expr həqiqidirsə (0 bərabər deyil) onda , true_statements bloku yerinə yetirilir.Əgər bu ifadə yalandırsa onda, iştirak edən qeyrizəruri operator else tərəfindən false_statements bloku yerinə yetirilir.  

If operatoru , ikinci forma:

 if (cond_expr_1) {
true_statements_1;
}
else if (cond_expr_2) {
false_ statements_2;
}
else {
false_ statements;
}

Əgər şərti ifadə cond_expr_1 həqiqidirsə (0 bərabər deyil) onda , true_state- ments_1 bloku yerinə yetirilir.Əgər bu ifadə yalan və həqiqidirsə  cond_expr_2 ifadəsi, true_statements_2 bloku tərəfindən yrinə yetirilir.Əgər hər iki şərt cond_expr_1 və cond_expr_2 yalandırsa ,onda false_statements bloku yerinə yetirilir.

Sikllər   (loop)

Sikllər bütün proqramm dilləri üçün ümumi konstruksiyadır.O, massivlərin emalı üçün istifadə oluna bilər, təyin olunan sayda hər hansı bir fəaliyyəti yerinə yetirə bilər, diskdən faylın oxunması…İmkan olan qədər sonsuz sayda.Biz burada bir neçə tipdə sikllərə baxacayıq və onlar əsasən oxşar surətdə işləyirlər.İstənilən sikl aşağıdakı elementlərdən ibarət olur:

  • Giriş nöqtəsi
  • Siklin tərkibi, fiqurlu skoblarla bağlı olan bir keçid yerinə yetirən operatorlar təşkil edir.
  • Çıxış nöqtəsi
  • Siklin sonunu təyin edən məqamın şərti ifadəsi
  • Əlavə istifadə olunan break və continue operatorları

 

Siklə giriş nöqtəsi C++ sikl operatorları (for, while və ya do) ilə edilir, ondan sonra lazımdır ki, açılış fiqurlu skobu qoyulsun.Siklin tərkibi operatorlardan ibarət olub, siklin hər keçidində tətbiq olunurlar.Siklin tərkibi istənilən C++ kodu təşkil edə bilər.Çıxış nöqtəsi bağlayıcı skobdur.
Çoxunluq sikl təqribən növbəti simada işləyir.Siklin girişindən sonra şərti ifadələrin hesablanması aparılır.Əgər o həqiqidirsə siklin tərkibini təşkil edən operatorlar yerinə yetirilir.Nə zaman ki, proqramm siklin aşaği həddinə çatır (adətən bu bağlayıcı skobdur) , yenidən əvvələ keçilir və yenidən şərti ifadələrin hesablanması aparılır.Əgər o həqiqidirsə bütün proses təkrarlanır.Əgər şərtlər yerinə yetirilməyibsə,idarəetmə bağlayıcı skobdan sonra növbəti operatora ötürülür.Bu qaydalardan fərqli olaraq do-while sikli şərtlərin yoxlamasını əvvəldə deyil siklin sonunda aparır.
Şərti ifadələr siklin son mərhələsində təyin edilir.Məsələn, şərtlərin elanı “hələlik x bərabərdir 10 yerinə yetirilsin” və ya “faylın sonuna çatmadan ,mütaliə aparılsın” ola bilər.Nə qədər ki, şərtlər həqiqidir sikl davam edir.

Siklləri yazarkən səhvlik etmək yetəri qədər mümkündür, hansı ki, şərtlər həmişə yerinə yetiriləcək.Bu proqrammın dayanmasına gətirib çıxardacaq.Sizə qalacaq ki, Ctrl+Alt+Del basaraq onun fəaliyyətini dayandırasınız.
For sikli

For sikli digərlərindən daha çox istifadə olunur.O üç parametrdə çalışır: inisiallaşdırılmış ifadə, şərti ifadə və inkrement ifadə.

For siklinin operatoru

 for  (initial; cond_expr; adjust) {
statements;
}

For siklinin kod blokunda statements o zamana qədər yerinə yetirilir ki, nə qədər ki, cond_expr şərti ifadəsi həqiqi olsun (0 bərabər deyil).Siklin inisiallaşdırılması üçün initial operatorundan istifadə olunur.Statements bloku yerinə yetirildikdən sonra siklin dəyişəni adjust operatoruna çevrilir (şəklini dəyişir).

Yuxarıda deyilənləri daha aydın başa düşmək üçün bir neçə konkret nümunəyə baxaq.Öncə tipik for-sikl götürək:

 for (int i = 0; i < 10; i ++) {
cout << “This is iteration” << i << endl;
}

Bu nümunədə fiqurlu skoblar daxilində olan operator 10 dəfə yerinə yetiriləcək.Birinci parametr int i = 0, sikl dəyişəninin ilkin qiymətini təyi edir.(Biz burda dəyişəni for operatorunun daxilində elan etmişik və inisiallaşdırmışıq.Bu tamamən qanunidir və mütəmadi olaraq for siklində tərtib olunur.) İkinci parametr i < 10, şərtidir və dəyişənin qiyməti i kiçikdir 10 olana qədər təkrarlanacaq.Sonuncu parametr i++, i dəyişənini hər keçiddən sonra bir vahid artırır.

Dəyişən üçün i adı (iteratordan götürmə) ənənəvi olaraq for siklində istifadə olunur.Digər adlardan da istifadə etmək olar , amma siz tez-tez bu ada rast gələcəksiniz.

Gəlin  bu siklin digər bir variantına baxaq, hansı ki, birinci ilə müqayisədə daha dəqiq geri qaytarma effekti verir:

 for (int  i = 10; i > 0; i--) {
cout << “This is iteration” << i << endl;
}

Indi mən 10 rəqəmindən başlayıram , nə zaman ki, i bərabərdir 0 olarsa dayanıram və hər keçiddə i-ni bir vahid azaldıram.Bu nümunə siklin geri hesablamasıdır.

Gəlin for siklini nümayiş etdirən qısa bir proqramm yazaq.

#include <iostream.h>
#include <conio.h>
#pragma hdrstop

 int main (int argc , char** argv)
{
Cout << endl << “Starting programm...” << endl << endl;
int i;
for (i = 0; i < 10; i++) {
cout << “Iteration ” << i << endl;
}
cout  << endl;
for  (i = 10; i < 10; i++) {
cout << “Iteration” << i << endl;
}
cout  << endl;
for  (i = 10; i > 10; i--) {
cout << “Iteration” << i << endl;
}
getch ( );
return 0;

Indi siz bilirsiniz ki, çikl dəyişəninin ilkin qiyməti istənilən ola bilər (təbii ki, seçilmiş məlumat tipinə əsasən).Şərti ifadənin seçilməsi C++-nin istənilən ifadəsi ola bilər, hansı ki, nəticə true olsun.Sikl dəyişəni ilə müqayisə olunan kəmiyyət, konstant ola bilər ki, yuxarıda göstərilən nümunələrdəki dəyişənlər və ya geri qaytaran funksiyalar kimi olsun.Aşağıda şərti ifadənin düzgün yazılış nümunəsi verilib:

 for (int i = 0; i < 100; i++) {...}
for (int i = 1; i = = numberOfElements; i++) {...}
for (int i = 0; i <= GetNumberOfElements ( ); i+= 2) {...}

Sonuncu nnümunəyə diqqət yetirin. Burada hər siklə keçiddə sayğac 2 say artıb.Siz istənilən inkrement parametrinin inkrement ifadəsini istifadə edə bilərsiniz. Məsələn aşağıdakı sikldə 10 say artırma aparılıb:

 for  (int  i = 0; i < 100; i += 10) {…}

Yekunda siz for siklinin fəaliyyətini gördünüz və sizi üçün çətin olmayacaq ki, bu prinsipləri while və do-while-də tətbiq edəsiniz.

Ardı olacaq



  Paylaş      



   Ad, soyad:
    *
   Əlaqə:
    *
   (e-poçt, şəxsi sayt ya da telefon ola bilər)

   Şərh:
  

           
   • şərh yazmaq üçün saytımıza üzv olmalı və istifadəçi girişi etməlisiniz;
   • şərh yazarkən təhqir edici sözlərdən istifadə etməməli və mövzudan kənarlaşmamalısınız;
   • latın hərflərindən istifadə etməlisiniz.
ELAN GÖNDƏRDƏRS GÖNDƏRSAYT SİFARİŞİREKLAM SİFARİŞİBİZİM SƏHİFƏƏLAQƏ  
   Dizayn & proqramist: Emin Novruzov
   Şəxsi Portal  © 2010 Bütün hüquqları qorunur

   Standart 1024x768 px ekran ölçüsü, minimum 64 K/Bit internet sürəti ilə saytdan rahat istifadə edə bilərsiniz!