Doç. Dr. Cemil Öz Algoritmalar ve Programlama II Ders 5: C++ programlama dilinde Yapılar 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 <iostream> 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 = 100.20F; //Yapı üyelerini ekrana yazdırma cout << “Model ” << urun1.modelno; cout << “, Parca ” << urun1.parcano; cout << “, Ucret $” << urun1.ucret << endl; return 0; } Struct anahtar kelimesi Yapı ismi struct Yapı üyeleri Küme parantezi içine yazılır urun { int modelno; int parcano; float ucret; }; Yapı üyeleri Yapı tanımlama (;) ile biter 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. urun { int modelno; int parcano; float ucret; }; urun urun1; 54325 89 100.20 urun1 struct 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. urun1 54325 89 100.20 modelno parcano ucret urun2 modelno parcano ucret urun3 modelno parcano ucret 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, 153.15f}; 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 <iostream> 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 <iostream> 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; } en boy salon 6 20 5 27 metre cm 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 <iostream> 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; }