Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Yapılar(Structures) Her programlama dilinde tanımlı temel veri tipleri bulunmaktadır. Tanımlı olmayan veri türleri, kullanıcı bazlı tanımlama ile sağlanır. Topluluk ve birleşme gibi iki farklı şekilde yapılabilmektedir. Yapılar topluluk tipine giren veri tanımlama biçimidir. Yani, bir yapı temel değişkenlerin bir araya getirilmesidir. Yapı içerisindeki değişkenler farklı tiplerde olabilir. Diziler ile karıştırılmamalı diziler aynı tür değişkenlerden oluşur.
// Yapı örneği #include using namespace std; struct urun //yapı tanımla { int modelno; int parcano; float ucret; }; int main() { urun urun1; //yapı değişkeni tanımlanır //Yapı üyesine değer atama urun1.modelno = 54325; urun1.parcano = 89; urun1.ucret = F; //Yapı üyelerini ekrana yazdırma cout << “Model ” << urun1.modelno; cout << “, Parca ” << urun1.parcano; cout << “, Ucret $” << urun1.ucret << endl; return 0; }
struct urun { int modelno; int parcano; float ucret; } ; Struct anahtar kelimesi Yapı ismi Yapı üyeleri Yapı tanımlama (;) ile biter Yapı üyeleri Küme parantezi içine yazılır
Yapı tanımı, topluluk tipindeki değişkenleri tanımlamada sadece bir taslak görevi görür. Yapı tanımı ile yapı değişkeni tanımlanmış olmaz; yani bu tanımlama bellekte yer ayırmaz. Yapı tanımı basit bir değişken tanımından farklıdır. Basit bir değişken tanımlandığında bellekte yer ayrılır. Yapı tanımı ise sadece, yapı değişkenlerinin tanımlandıkları zaman nasıl görüneceklerini gösteren bir modeldir. Yapı değişkeninin Tanımlanması main() içindeki urun urun1; urun yapısı tipine urun1 isimli bir değişken tanımlanır. Bu tanımla birlikte bellekte urun1 için bellekte yer ayrılır.
struct urun { int modelno; int parcano; float ucret; } ; urun1 urun urun1;
Yapı üyelerine değer atama Bir yapı değişkeni tanımlandığı andan itibaren, bu değişkenin üyeleri nokta operatörü denilen bir operatör kullanılarak erişilebilir. urun1.modelno=54325; Yani yapı üyesinin yazımı üç kısımdan oluşur: yapı değişkeninin adı (urun1), nokta(.) operatörü ve üyenin ismi (modelno) Nokta operatörünün ismi üye erişim operatörüdür. Şu unutulmamalıdır ki ilk bileşen yapı adı değil yapı değişkenidir. Burada yapı adı(urun), yapı değişkeninin adı (urun1) dir. Değişken ismi bir değişkeni diğerinden ayırmak için kullanılır.
modelno parcano ucret modelno parcano ucret modelno parcano ucret urun1 urun2 urun3 urun2.parcano
Yapıların diğer özellikleri Yapı üyelerine ilk değer atanması Önceki örneğimizde tanımladığımız urun yapısı olarak tanımlanan urun1 değişkenine ilk değer ataması aşağıdaki şekilde de yapılabilir. urun urun1={5235, 98, f}; urun urun2;// urun2 yapı değişkeni tanımlanır. urun2= urun1; //ilk yapı değişkenindeki değerleri ikinci değişkene ata
// Yapı örneği #include using namespace std; struct urun //yapı tanımla { int modelno; int parcano; float ucret; }; int main() { urun urun1={54325,89,100.20F}; //yapı değişkenine ilk değer ata urun urun2;// değişken tanımla cout << “Model ” << urun1.modelno; cout << “, Parca ” << urun1.parcano; cout << “, Ucret ” << urun1.ucret << “TL “<<endl; urun2=urun1;// ilk değişken değerlerini ikinciye ata cout << “Model ” << urun2.modelno; cout << “, Parca ” << urun2.parcano; cout << “, Ucret ” << urun2.ucret << “TL “<<endl; return 0; }
İç içe Yapılar Yapıları başka yapıların içerisinde kümelemek mümkündür. Aşağıdaki örnekte odanın eni ve boyunun tutulacağı bir topluluk veri yapısını oluşturalım. Normalde oda diye bir veri tipi yoktur. #include using namespace std; struct mesafe //yapı tanımla { int metre; float cm; }; struct oda //yapı tanımla { mesafe en; mesafe boy; }; int main() { oda salon; //değişken tanımla salon.en.metre=6; salon.en.cm=20; salon.boy.metre=5; salon.boy.cm=27; float u=salon.en.metre + salon.en.cm/100; float g=salon.boy.metre + salon.boy.cm/100; cout << “ Salon Alanı..: ” << u*g << “ metre kare dir. “<<endl; return 0; }
boy en salon metre cm salon.boy.cm = 27;
Kümelenmiş yapılara ilk değer atamak oda salon = { { 6, 20 }, { 5, 27 } } ; Oda içerisinde tanımlanan her mesafe tipindeki yapıya yarı ayrı değer atanır. Bunun için değerleri küme parantezleri içine almak ve virgül ile ayırmak gerekir. Yapılarda iç içeliğin derinliği ne olabilir? Teorik olarak yapıların iç içelik derinliği(kümeleme) sınırlama yoktur. Kişi karmaşıklığı önleyecek şekilde dizayn edebilir. apartman1.daire1.salon.en.cm Gibi bir yapı kümelemesi olabilir.
Enumerations (Birleştirme veri tipi) Her programlama dilinde tanımlı temel veri tipleri bulunmaktadır. Tanımlı olmayan veri türleri, kullanıcı bazlı tanımlama ile sağlanır. Topluluk ve birleşme gibi iki farklı şekilde yapılabilmektedir. Yapılar kadar kritik öneme sahip değillerdir. Kendi veri tipinizi tanımlama imkanı sunar.
Döngü içerisindeki İf yapısı #include using namespace std; enum days_of_week { Sun, Mon, Tue, Wed, Thu, Fri, Sat }; int main() { days_of_week day1, day2; //days_of_week tipinde //değişkenleri t anımla day1 = Mon; //değişkenlere değer ata day2 = Thu; int diff = day2 - day1; //cebirsel işlem yapılabilir cout << “Günler arasında= “ << diff << endl; if(day1 < day2) //karşılaştırma yapılabilir cout << “day1,day2 den önce gelir\n”; return 0; }