Turktekno.net yeniden yayına başladı!! .
Uzun süren kesintinin ardından yeniden sizlerleyiz.

C++ Dersleri 11

Yazar admin

Programlamanın temellerinden olan C++ üzerine başlattığımız makalelere yeni bir bölüm ile devam ediyoruz.
Bu makalemizde "Void, float, int, char, double, dizi parametreler", "İki anlamlılık hatası" , "Fonksiyon, char, void, bool, int, long, float, double dönüş Tipler" ve "Diziler(Arrays)" konularına değineceğiz.

Void Parametreler:

ANSI C standartlarına göre void, fonksiyon argümanlarının yokluğunu açık olarak ifade etmek için kullanılmalıdır. C++ içinde void zorunlu değildir, ancak kullanımı akıllıca görülür. Aşağıdaki program voutput () adında, argüman alamayan ve bir değer döndürmeyen basit bir fonksiyona sahiptir ve main () fonksiyonu, voutput () fonksiyonunu çağırır. Voutput () fonksiyonu bittiğinde, kontrol main () fonksiyonuna geri döner. Bu yazabileceğimiz en basit fonksiyon tiplerinden biridir:

//
//fvoid.cpp : Konsol uygulaması icin giris noktası tanımlıyor.
// Bir fonksiyonla bir mesaj yazdiran bir c++ fonksiyonu.
// Fonksiyon standart C kutuphanesinden sqrt fonksiyonunu
// ve bir void tipi arguman kullanıyor.
// Copyright (c) Chris H. Pappas ve William H. Murray, 2001
//

#include “stdafx.h”
#include
#include

using namespace std;

Void voutput(void);
İnt main(int argc, char* argv[])
{
cout << “this program will find the square root. \n\n” ;
voutput ();

return (0);
}
Void voutput(void)
{
double dt =12345.0;
double du ;

du = sqrt(dt) ;
cout << “ the square root of “ <

Faruk Alkaya
Selçuk Üniversitesi - Teknik Eğitim Fakültesi

C++ Dersleri


<< “ is “ << du ;
}

Örneği incelemediğinizde, voutput() fonksiyonunun sqrt () isimli C kütüphane fonksiyonunu çağırdığını fark edeceksiniz. sqrt () kütüphane fonksiyonunun protipi cmath içinde bulunur. Fonksiyon, argüman olarak double (çift duyarlılıklı sayı ) kabul eder ve kare kökü double tipinde döndürür.

char Parametreler:

Karakter bilgisi de bir fonksiyona aktarılabilir. Aşağıdaki örnekte main() fonksiyonu içinde, klavyeden bir karakter alınıyor ve voutput() fonksiyonuna aktarılıyor. get() fonksiyonuna karakteri okuyor. Standart C kütüphanesinde get( ) fonksiyonuyla yakından ilgili başka fonksiyonlar vardır: getc( ), getchar ( ) ve getche ( ). Bu fonksiyonlar C++ içinde de kullanılabilir, ama cin çoğu durumda muhtemelen daha iyi bir seçimdir. Aşağıdaki gösterildiği gibi get ( ) fonksiyonu, standart girdi cihazından (klavye) bir karakter alır ve ekranda görüntülemeden bir karakter değer döndürülür.

//
// fchar.cpp : Konsol uygulaması icin giris noktası tanımlıyor.
// Bir fonksiyonla bir mesaj yazdiran bir c++ fonksiyonu.
// Fonksiyon standart C kutuphanesinden sqrt fonksiyonunu
// ve bir void tipi arguman kullanıyor.
// Copyright (c) Chris H. Pappas ve William H. Murray, 2001
//


#include “stdafx.h”
#include


using namespace std;

void voutput(char c);

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

cout << “ Enter one character from the keyboard .>” ;
cyourchar = cin get ( );

voutput (cyourchar);

return (0);

}

void voutput (char c)

{
cout << “\nThe character entered is ; “ << c << endl;
cout << “\nThe next five characters are :”;
for ( int j = 0 < 5; j++ )
cout << “ “ << ++c;
}

Yukarıdaki listede, fonksiyona tek bir karakterin aktarıldığına dikkat edin. Fonksiyon daha sonra, bir mesaj ve karakteri takip eden 5 karakter yazdırıyor.

int Parametreler:

Aşağıdaki uygulamada, klavyeden C++ cin fonksiyonuyla tek bir tamsayı okunacaktır. Bu tamsayı vside( ) fonksiyonu, sağlanan bu genişliği bir karenin alanı, bir küpün hacmi ve yüzey alanını hesaplamakta ve yazdırmakta kulanacaktır.

//
// finit.cpp : Konsol uygulaması icin giris noktası tanımlıyor.
// Bu C++ programi, verilen bir uzunluga gore degerleri hesaplar.
// Fonksiyon int tipi arguman kullanıyor ve
// scanf ( ) fonksiyonuyla uzunluk kabul ediyor.
// Copyright (c) Chris H. Pappas ve William H. Murray, 2001
//


#include “stdafx.h”
#include


using namespace std;

void vside(int is);
int main(int argc, char * argv[])
{
cout << “ Enter the lenght, as an integer, \n;
cout << “ from the keyboard ->” ;
cin >> iyourlength;
vside(iyourlength);

return (0);
}

void vside(int is )
{
int iarea, ivolume, isarea;

iarea = is * is ;
ivolume = is * is ;
isarea = 6 * iarea;

cout << “ \nThe the lenght, of side is “ << is << endl;
cout << “A square would have an area of “ << iarea << endl;
cout << “A cube would have a volume of “ << ivolume << endl;
cout << “ The surface area of the cube is “ << isarea;
}

is değişkenin ve hesaplanan tüm değerlerin tamsayı olduğuna dikkat edin. Bir dairenin ve kürenin yarıçapı olsaydı, hesaplanan tiplere ne olurdu? Farkları görmek için algoritmayı yeniden yazmayı deneyin.

Float Parametreler

Kayan noktalı sayılar da fonksiyonlara argüman olarak aktarılabilir. Aşağıdaki örnekte iki kayan noktalı sayı dağeri vhypotenuse( ) ismindeki fonksiyona aktarılıyor. Cin fonksiyonu, klavyeden her iki kayan noktalı değeri almak için kullanılıyor:

//
// ffloat.cpp : Konsol uygulamasi icin giris noktasi tanimliyor.
// Dik ücgenin hipotenusun bulan C++ programi.
// Fonksiyon float tipi arguman kullaniliyor ve klavyeden
// scanf fonksiyonuyla girdi aliyor.
// Copyright ( c ) Chris H. Pappas ve William H. Murray, 2001
//

#inculude “stdafx.h”
#include
#include

using namespace std;

void vhypotenuse(float fx, float fy);

int main(int argc, char* argv [])
{
float fxlen,fylen;

cout << “ Enter the base of the right triangle -> “;
cin >> fxlen;

cout << “ \nEnter the base of the right triangle -> “;
cin >> fylen;
vhypotenuse(fxlen,fylen);
return (0);
}
void vhypotenuse (float ft,float fu)
{
double dresult;
dresult = hypot((double) ft, (double) fu);
cout << “ \nThe hypotenuse of the right triangle is “
<< dresult;
}

double Parametreler

double tipi çok kesin bir kayan noktalı değerdir. Tüm cmath fonksiyonları double tipleri kabul eder ve döndürür. Aşağıdaki program, klavyeden iki çift duyarlıklı değer kabul ediyor. vpover ( ) fonksiyonu, ilk sayının ikinci sayı kadar üssünü hesaplıyor. Her iki değer de double olduğundan dolayı, 45.7 sayısının 5.2 üssünü hesaplayabilirsiniz ve 42811841,757 bulursunuz.

//
// ffloat.cpp : Konsol uygulamasi icin giris noktasi tanimliyor.
// Bir sayiyinin bir ussunu alan C++ programi.
// Fonksiyon double tipi arguman kullaniliyor ve pow fonksiyonunu kullanıyor
// Copyright ( c ) Chris H. Pappas ve William H. Murray, 2001
//

#inculude “stdafx.h”
#include
#include

using namespace std;

void vpower(double dt, double du);


int main(int argc, char* argv [])
{
double dtnum, dunum;

cout << “ Enter the base number -> “;
cin >> dtnum;

cout << “ \nEnter the power -> “;
cin >> dunum;
vpower(dtnum, dunum);

return (0);
}
void vpower(double dt, double du);
{
double danswer;

danswer =pow(dt,du);
cout.setf(ios::fixed);
cout << “ \nThe results is” << setprecision(3) << danswer;

}

Bu fonksiyon bir sayinin üssünü bulmak için cmath dosyasının içinde protiplenmiş pow( ) kütüphane fonksiyonunu kullanıyoruz.

Dizi Parametreler:

Aşağıdaki uygulama, referansla çağırma yöntemiyle bir dizinin içeriğinin nasıl bir fonksiyonu aktarıldığını gösteriyor. Bu örnekte dizinin ilk elemanının adresi bir işaretçiyle aktarılıyor.

//
// fpnptr.cpp : Konsol uygulamasi icin giris noktasi tanimliyor.
// C++ programi bir diziyle bir fonksiyon cagıracak.
// Fonksiyon dizi bilgisini aktarmak icin bir isartci kullaniliyor.
// Copyright ( c ) Chris H. Pappas ve William H. Murray, 2001
//

#inculude “stdafx.h”
#include

using namespace std;

void voutput(int *pinums);


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

int yourarray[7] = {2,7,15,32,45,3,1};
faverage = fsum/iv;
cout << “\nThe average is” << faverage << endl;
}

Ortalama, terimleri toplayıp terim sayısına bölerek elde ediliyor. cout akışı ekrana gönderilen çıktıyı biçimlendirmek için kullanılır.

İki anlamlılık hatası

C++ derleyicisi aynı sayıda parametrelere sahip birden fazla aynı isimli fonksiyonun bulunması durumunda çağırılma ifadesine tür bakımından uygun bir fonksiyon bulamazsa bu durum iki anlamlılık hatasına yol açar. Bu durumun 3 istisnası vardır:

1. Fonksiyon char ya da short parametreyle çağırılmışsa char ya da short int parametreye sahip bir fonksiyon yok ancak int parametreye sahip bir fonksiyon varsa int parametreye sahip olan fonksiyon çağırılır.
2. Fonksiyon float parametreyle çağırılmışsa ancak float parametreye sahip bir fonksiyon yok double parametreye sahip bir fonksiyon tanımlanmışsa bu durumda double parametreye sahip olan fonksiyon çağırılır.
3. Fonksiyon aynı türden const olmayan bir ifadeyle çağırılmışsa ancak aynı türden const parametreye sahip bir fonksiyon ya tanımlanmışsa tür uyuşumunun sağlandığı kabul edilir ve const parametreye sahip olan fonksiyon çağırılır.

Fonksiyon Dönüş Tipler

Bu kısımda C ve C++ programlamada mümkün olan fonksiyonlar için önemli dönüş tiplerinden her biri için bir bulacaksınız. Fonksiyonun tipi tarafından döndürülen değerin tipini belirtir. Önceki konudaki örnekler hiçbiri fonksiyondan bilgi döndürmüyor çünkü void tipindedirler.

void Dönüş Tipi

void daha önceki tüm örneklerde kullanılmıştır ve buradaki örnek biraz daha karışıktır. C ve C++ dillerinin, sayısal bilginin ikilik (binary) değil ama onaltılık (hexadecimal), onluk (decimal) ve sekizlik (octal) düzenlerde biçimlendirilmesine izin verdiğinizi öğrendiniz. Veriyi ikilik düzen biçimde belirtmek, ikili matematikte ve bit maskeleri (bit masks) geliştirmede kullanışlıdır. vbinary () fonksiyonu, klavyeden girilen onluk sayiyi ekranda ikilik temsile dönüştürür. İkilik rakamlar tek bir ikilik sayı olarak paketlenmez ve dizide kendi başlarına depolanırlar. İkilik bir sayıyı incelemek için dizinin içeriği yazdırılmalıdır.

//
// voidf.cpp : Konsol uygulamasi icin giris noktasi tanimliyor.
// void fonksiyon tipini ornekleyen C++ programi.
// program bir sayinin ikilik esdegerini yazdiracak.
// Copyright ( c ) Chris H. ve William H. Murray, 2001
//

#include “stdafx.h”
#include

using namespace std;

void vbinary(int ivalue);

int main(int argc, char* argv[] )
{
int value;
cout << “Enter a number (base 10) for conversion to”
<< “binary ->”;
cin >> ivalue;
vbinary(ivalue);

return (0);
}

void vbinary(int idata)
int t =0;
int iyourarray[50];
while (idata !=0) {
iyourarray[t] = (idata %2);
idata /= 2;
t++;

}

for(–t; t>=0; t–)
cout << iyourarray[t];
cout << endl;
}

Üst tabanlardan alt tabanlara dönmüşüm prosesi, basit bir matematiksel algoritmalardan ibarettir. Örneğin, 10 tabanlı bir sayı bir değer tabana, sayıyı yeni tabana arka arkaya bölerek dönüştürülür. Sayı 10 tabanından 2 tabanına dönüştürülecekse, 10 tabanlı sayı arka arkaya 2 ile bölünür. Bu işlem bir bölüm, bir de artan oluşturur. Her ardışık bölme için bölme, bölünen haline gelir. Kalan, dönüştürülen sayının bir basamağı olur. İkilik dönüşüm durumunda kalan ya birdir ya da sıfırdır.

vbinary () fonksiyonunda, idata sıfıra ulaşmadıkça matematiksel işlemi yapan bir while dögüsükullanılır. Modül operatörü kalanı saptar ve bit’i dizide saklar. Daha sonra, idata üzerinde bölme yapılır ve sadece tamsayı sonuç saklanır. Bu süreç, bölen (bu halde data) sıfır olana kadar tekrarlanır.

İkilik sonucu oluşturan her dizi bit’i, diziden ters sırayla boşaltılmalıdır. Bunu program içeriğinde görebilirsiniz. Fonksiyonda kullanılan her for döngüsünü inceleyin.

char Dönüş Tipi

Önceki uygulamadan biraz farklı bir örnekle inceleyelim. C++ fonksiyonu clowercase () bir jarakter argüman alır ve aynı karakter tipini döndürür. Bu örnekte, klavyeden alınan bir büyük harf fonksiyona aktarılıyor. Fonksiyon tolower () kütühane fonksiyonunu (standart kütüphaneden ve cctype dosyasında prototiplenen) kullanarak karakteri küçük harfe dönüştürüyor. tolower () fonksiyonuyla ilgili toascii () ve toupper () fonksiyonlarını kapsar.

//
// charf.cpp : Konsol uygulamasi icin giris noktasi tanimliyor.
// Karakter fonksiyon tipini ornekleyen C++ programi.
// Fonksiyon buyuk harf karakter alıyor ve
// kucuk harfe donusturuyor.
// Copyright ( c ) Chris H. ve William H. Murray, 2001
//

#include “stdafx.h”
#include
#include

using namespace std;

char clowercase(char c);


int main(int argc, char* argv[] )
{
Char clowchar, chichar;
Cout << “Enter an uppercase character ->”;
Chichar = cin.get();

Clowchar = clowercase(chichar);
Cout << “The characterin lowercase is:” <

Return (0);
}

Char clowercase(char c)
{
Return (tolower (c));

}

bool Dönüş Tipi

Yeni bool tipinin kullanımı aşağıdaki uygulamada, bu yeni ANSI C tipini dödüren is_upper () ve is_lower () fonksiyonlarının tanımlanmasıyla örneklenmiştir:

//
// bool.cpp : Konsol uygulamasi icin giris noktasi tanimliyor.
// bool yeni ANSI C/C++ tipinin kullanimi
// gosteren C++ programi.
// Copyright ( c ) Chris H. ve William H. Murray, 2001
//

#include “stdafx.h”
#include

using namespace std;

bool is_upper(char);
bool is_tolower(char);


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

Char cTestChar = ‘T’ ;
bool bIsUppercase, bIsLowercase;

bIsUppercase = is_upper(cTestChar);
bIsLowercase = is_lower(cTestChar);

cout << “The letter T”
<< (bIsUppercase ? “is” : “isn’t” ) << “upper case.\n”;

cout << “The letter T”
<< (bIsKowercase ? “is” : “isn’t” ) << “lower case.”;

return(0);
}
bool is_upper(char c)
{
return (ch >= ‘A’ && ch <= ‘Z’ );
}

bool is_lower(char ch)

{
return (ch >= ‘a’ && ch <= ‘z’ );
}

int Dönüş Tipi

Aşağıdaki fonksiyon tam sayı kabul ediyor ve döndürüyor. icube( ) fonksiyonu main( ) içinde üretilen bir sayıyı kabul ediyor, küpünü alıyor ve tamsayı değeri main( ) fonksiyonuna döndürüyor. asıl sayı ve küpü ekrana yazdırılıyor:

//
//jntf.cpp: Konsol uygulaması için giriş noktası tanımlıyor.
// C++ programı tamsayı fonksiyon tipini gösteriyor.
//Fonksiyon birer birer tamsayılar alıyor ve
//birer birer birer küplerini donduruyor.
//Copyright (c) Chris H. Pappas ve William H. Murray,2001
//

#include”stdafx.h”
#include

using namespace std;

int icube(int ivalue);

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

for(int k=0;k<20;k+=2){
inumbercube=icube(k);
cout<<”the cube of the number”<
<<”is”<
}

return(0);
}
int icube(int value)
{
return (ivalue*ivalue*ivalue);
}

long Dönüş Tipi

Aşağıdaki C++ örneğinde bir programın nasıl bir tamsayı değer kabul ettiğini ve bir long döndürdüğünü göreceksiniz. Visual C/C++ ve diğer yaygın derleyicilerin kullandığı long tipi, standart ANSI C tipi olarak tanınmaz. Fonksiyon 2’nin bir tamsayı üssünü hesaplıyor.
//
//longf.cpp :Konsol uygulaması için giriş noktası tanımlıyor.
//C++ programı long fonksiyon tipini örnekliyor.
//Fonksiyon birer birer tamsayılar alıyor ve
//2’nin bu tamsayı üssünü donduruyor.
//Copyright (c) Chris H. Pappas ve William H. Murray,2001
//
#include “stdafx.h”
#include

using namespace std;

long power(int ivalue);

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

for(int k=0;k<31;k++){
lanswer=lpower(k);
cout<<”2 raised to the “<<<”power is”
<<
}

return(0);
}
int t;
long Iseed=1;

for (t=0:t
Iseed*=2;
Return (Iseed);
}

Bu uygulamada fonksiyon, asıl sayıyı sadece belirtilen üsse çıkana kadar çarpıyor. Örneğin, 2üssü 6 için program aşağıdaki çarpmayı yapıyor:

2*2*2*2*2*2=64

float Dönüş Tipi

Aşağıdaki uygulama, bir float dizi argümanın bir fonksiyona aktarılmasını ve float döndürülmesini gösteriyor. Bu C++ örneği dizideki tüm elemanların çarpımını bulacaktır.

//
//floatf.cpp :Konsol uygulaması için giriş noktası tanımlıyor.
//C++ programı float fonksiyon tipini örnekliyor.
//Fonksiyon kayan noktalı sayı dizisi alıyor ve
//carpımları kayan noktalı sayı olarak donduruyor.
//Copyright (c) Chris H. Pappas ve William H. Murray,2001
//

#include “stdafx.h”
#include

using namespace std;

float fproduct(float farray[]);

int main (int argc, char* argv[])
{
float fmyarray[7]={4.3,1.8,6.12,3.19,0.01234,0.1,9876.2};
float fmultiplied;

fmultiplied=fproduct(fmyarray);
cout<<”the product of all array entries is:”
<<

return(0);
}

float fproduct(float farray[])
{
float fpartial;

fpartial=farry[0];
for(int i=1;i<7;i++)
fpartial*=farray[i];
return(fpartial);
}

double Dönüş Tipi

Aşağıdaki örnek ir programın nasıl double tipi kabul ettiğini ve döndürdüğünü gösteriyor. dtrigcosine( ) fonksiyonu derece cinsinden verilen bir açıyı kosinüs değerine çeviriyor:

//
//double.cpp :Konsol uygulaması için giriş noktası tanımlıyor.
//C++ programı double fonksiyon tipini örnekliyor.
//Fonksiyon 0’dan 90’a tamsayıları birer birer alıyor ve
//her birinin kosinüsünü birer birer donduruyor.
//Copyright (c) Chris H. Pappas ve William H. Murray,2001
//

#include “stdafx.h”
#include
#include


using namespace std;

const doule dPi=3.14159265359;
double dtrigcosine (double dangle);

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

for (int j=0;j<91;j++){
dcosine=dtrigcosine((double)j);
cout <<”the cosine of”<
<<”degrees is”<
}

return(0);
}

double dtrigcosine(double dangle)
{
double dpartial;
dparial=cos((dPi/18.0)*dangle);
return(dpartial);
}

DİZİLER(ARRAYS):

Bellekte ardışıl bir biçimde bulunan ve aynı türden nesnelerin oluşturduğu veri yapısına dizi denir.
Dizilerin kullanılmasını gerektiren iki önemli özellikleri vardır :

1. Bellekte ardışıl (contigous) olarak bulunmaları
2. elemanların aynı türden nesne olmalarıdır.

Diziler bileşik nesnelerdir. Yani bir dizinin tanımlanmasıyla birden fazla sayıda nesne birlikte tanımlanabilir. (bileşik sözcüğü ingilizce aggregate sözcüğünün karşılığı olarak kullanılmıştır.)

Örneğin 10 elemanlık bir dizi tanımlamak yerine, şüphesiz farklı isimde 10 ayrı nesne de tanımlanabilir. Ama 10 ayrı nesne tanımlandığında bu nesnelerin bellekte ardışıl (contigous) olarak yerleşmeleri garanti altına alınmış bir özellik değildir. Oysa dizi tanımlamasında, dizinin elemanı olan bütün nesnelerin bellekte ardışıl (contigous) olarak yer almaları garanti altına alınmış bir özelliktir.

Diziler aslında bellekte ardışıl olarak yer alan n adet aynı türden nesnenin oluşturduğu veri yapıları olduğuna göre dizi elemanı olan nesnelerin de kullanılmasından önce tanımlanmaları gerekecektir.

DİZİ NİTELİKLERİ:

• Dizi içindeki başlı başına her veri öğesine eleman denir.
• Tüm elemanlar aynı veri tipinde elamanlar olmalıdır.
• Tüm elamanlar bilgisayarın belleğinde ardışık olarak depolanır ve ilk elemanın indisi sıfırdır.
• Dizinin ismi, dizinin ilk eleman adresini temsil eden sabit bir değişkendir.

TÜR : dizi elemanlarının türünü gösteren anahtar sözcüktür.
DİZİ İSMİ : isimlendirme kurallarına uygun olarak verilecek herhangi bir isimdir.
ELEMAN SAYISI : dizinin kaç elemana sahip olduğunu gösterir.

Örnek dizi bildirimleri:

double a[20]; /* a, 20 elemanlı ve elemanları double türden olan bir dizidir*/
float ave[10]; /* ave 10 elemanlı ve her elemanı float türden olan bir dizidir. */
unsigned long total[100]; /* total 100 elemanlı ve her elemanı unsigned long türden olan bir dizidir */
char path[80]; /* path 80 elemanlı ve her elemanı char türden olan bir dizidir. */

Bildirim ifadesinde yer alan eleman sayısının mutlaka tamsayı türlerinden birinden sabit ifadesi olması zorunludur… (Kaynak: Turkstudent.Net)

Dizilerin ilk kullanıma hazırlanması

Dizilerin ilk kullanıma hazırlanması için üç teknik vardır.
• Varsayılan durumda, oluşturdukları esnada: Bu sadece global ya da stratejik diziler için geçerlidir.
• Sabit ilk değer atama verisi sağlayarak, oluşturduklarında açık olarak.
• Programın çalışması esnasında diziye veri atama ya da kopyalama yaparken.

1. Diziden saklanan elemanlar (mantıksal) kesinlikle ardışık bloklarda saklanırlar.
“Bilgisayar bir adresteki veriye o adresi yani kutucuğun numarasını kullanarak erişir. Eğer bir kutucuğun numarasını biliyorsak, o kutucuğun beli sayıda ilerisindeki yada gerisindeki kutucuklara da erişmemiz mümkün olacaktır. Bu da bize bellekle ilgili işlem yaparken son derece büyük bir avantaj kazandırır. Bir bölge üzerinde çalışırken, sadece başlangıç noktası olarak alacağımız bir adres ve o adrese belli uzaklıktaki adrslere erişmek için basit sayılar kullanabiliriz.”
2. ilk elemanın indisi daima 0(sıfır)’dır.
Bu sayı Pascal vb. bazı dillerde 1’dir, farka dikkat edin.
3. Dizinin adı, dizideki ilk elemanın adresini içeren sabit bir değişkendir.

Dizilerin tanımlanması ve değer atma

Bir dizi çok basit bir şekilde tanımlanır.

int a[100];

gibi. Bunun biçimi şöyledir.

[] ;

Bu tip tanımlamada boyut sabit olmak zorundadır. (C++’da değişken boyutlu diziler de tanımlanabilir, ancak bunu birazdan göreceğiz.) Sabit sayı doğrudan verilmek zorunda değildir, sabit bir değişken ile de verilebilir.

const int boyut=10;
int a[boyut ] ;

Bu, özellikle aynı boyutta birçok dizi ile çalışacaksanız, programın denenmesinde işe yarayacaktır. Örneğin, asıl program boyutu 1000 olan dizilerle çalışacaktır, ancak siz programın çalışmasını denerken daha küçük boyutlu dizilerle çalışmak istiyorsunuzdur.

const int boyut=10;
int a[boyut), b[boyut];
//…
Şeklindeki tanımlar, programın çalıştığından emin olunduktan sonra, sadece
const int boyut=10;
satırı
const int boyut =1000;
olarak değiştirilerek asıl amaca göre düzenlenmiş olur.

Şu ana kadar dizileri tanıttık ancak içerdikleri değeler, daha doğrusu ilk değerler ile ilgili üç şekilde oluşur demiştik şimdi bunları örneklerle açıklayalım.

1. Durağan ve global dizilerde oluşturuldukları anda içerik otomatik olarak belirlenebilir.

Örnek:
#include
const int boyut=5;
int globaldizi[boyut];
main() {
static int duragandizi [boyut];
for (int i=0;i
cout<
cout<
for (int i=0;i
cout<
cout<
return 0;
}

Program çıktısı
0 0 0 0 0
0 0 0 0 0
Görüldüğü gibi, dizi oluşturulurken elemanlara ait bellek blokları temizlenmiş ve sıfırlarla doldurulmuştur. Bu sıfır dolu içerik de int tipi için 0 değeri olarak yorumlanmaktadır.

2. Duyuru sırasında sabit değerler belirilerek belirlenebilir.

Örnek:
int sayilar[2]={1,2};
float gammaxyz[3]={5.6, 4.5, 7.8};

Bu durumda sık rastlanan bir hata ise belirtilenden fazla sayıda değer yazmaktır. Mesela float gammaxyz[3] dizisi 3 elemanlı bir dizidir. Dört eleman yazılırsa hata verecektir.
Bu tür hataların önüne geçmek için birçok derleyicinin desteklediği bir özellik vardır. Bu derleyiciler, dizi tanımlanırken içeriği belirleniyorsa boyut bilgisi istemezler. Bu özellikle karakter dizileri için işe yarar. Örneğin;

char hata1[ ]=” diske yazma hatası \n “;

Bu gibi dizilerin boyutunu yazmak için yazdığınız cümlenin kaç karakter olduğunu saymanız gerekmeyecektir.

3. Program işleyişi sırasında indiler kullanarak her elemana tek tek veri kopyalanabilir.

Üçüncü yöntem ise, program akışı içinde en çok kullanılan yöntemdir. Bu yöntemi kullanabilmek için , öncelikle dizi indislerinin nasıl kullanılacağını görmek gerekmektedir.

Yorum Yapın