BİLG214 20.10.2009 Dr. Mustafa T. Babagil 1
Yapısal bilgi türlerinin tanımlanması. (C++ daki struct yapısı. ) Daha önce öğrenmiş olduğumuz bilgi tipleri char, int ve float v.b. değişkenler ile dizi (array) tanımı idi. Şimdi artık bu temel bilgi tipleri üzerine kendi tanımlayacağımız bilgi tiplerini de ekleyebiliriz. Aslında yapacağımız, bir grup değişkeni tek bir değişkenmiş gibi tanımlamaktır. Bu amaç için de C++ programlama dili bize struct yapısını sunmaktadır. 23.02.2010 Dr. Mustafa T. Babagil 2
STRUCT yapısı Bilgi tiplerini birleştirerek yeni bilgi tipleri oluşturmak için struct yapısını kullanacağız. Bu yapı sayesinde C++ birden fazla değişken türünü gruplayarak kullanma olanağı sunar. Genel yapısı; struct <stuctisim> ; değişkentipi1 değişkentipi2... alan1; alan2; 23.02.2010 Dr. Mustafa T. Babagil 3
struct yapısı örneği!.. struct ogrenci int ogrencinumarasi; string isim; short okuldakikacinciyili; double gpa; double cgpa; ; Yapı ismi Yapı elemanları ; her yapının sonunda mutlaka olmalıdır!... 23.02.2009 Dr. Mustafa T. Babagil 4
Struct yapısı yalnız başına bellekte bir yer tutamaz. Struct yapısı ile oluşturmuş olduğunuz yeni yapının ismini kullanarak bellekte bir yer tutabilirsiniz. Bundan dolayı, struct yapısı kullanarak oluşturmuş olduğunuz yeni yapının ismini amacınıza göre adlandırınız ve bu ismi bir değişken tipi gibi kullanınız. Bir sonraki salytta bir örnek olarak, öğrencitipi yapısı olarak yeni bir yapı oluşturuldu. Bu yapıda bir dizi bilgi tutulması öngörülmüştür. Birden fazla öğrenci için bunu yapıyoruz ve sonuç olarak da sadece en büyük öğrenci numaralı öğrencinin bilgisini ekrana 23.02.2009 çıktı olarak Dr. aldık... Mustafa T. Babagil 5
#include <iostream.h> struct ogrencitipi char isim[20]; double ogrno; char cinsiyet; char bolum[20]; float GPA; float CGPA; double telno; char adres[20]; ; const max=10; int main() ogrencitipi ogrenci[max]; int i,yer; // yer değişkeni, en büyük numaralı öğrencinin dizi içerisindeki yerini tutmak için tanımlandı. double enbuyuknumara; for (i=0;i<5;i++) cout << "isim gir--->"; cin>> ogrenci[i].isim; cout << "ogrenci no gir--->"; cin>> ogrenci[i].ogrno; cout << "cinsiyet gir E/K--->"; cin>> ogrenci[i].cinsiyet; cout << "bolum gir--->"; cin>> ogrenci[i].bolum; cout << "GPA gir--->"; cin>> ogrenci[i].gpa; cout << "CGPA gir--->"; cin>> ogrenci[i].cgpa; cout << "telno gir--->"; cin>> ogrenci[i].telno; cout << "Adres gir---> \n"; cin>> ogrenci[i].adres; 23.02.2009 Dr. Mustafa T. Babagil 6
enbuyuknumara=ogrenci[0].ogrno;i=1; while (i < 5 ) if (enbuyuknumara <= ogrenci[i].ogrno) enbuyuknumara=ogrenci[i].ogrno; yer=i; i++; cout << "en buyuk ogrenci numarali ogrenci bilgileri \n"; cout << "isim --->" << ogrenci[yer].isim << "\n"; cout << "ogrenci no --->" << ogrenci[yer].ogrno << "\n"; cout << "cinsiyet --->" << ogrenci[yer].cinsiyet << "\n"; cout << "bolum --->" << ogrenci[yer].bolum << "\n"; cout << "GPA --->" << ogrenci[yer].gpa << "\n"; cout << "CGPA --->" << ogrenci[yer].cgpa << "\n"; cout << "telno --->" << ogrenci[yer].telno << "\n"; cout << "Adres --->" << ogrenci[yer].adres << "\n"; return 0; 23.02.2009 Dr. Mustafa T. Babagil 7
ÖDEV 1 Struct yapısını kullanarak kendinize ait yeni bir yapı oluşturunuz. En az 4 alan ve 4 çeşit değişken tipi içersin. Bu değişken tiplerinden birisi sayısal bir değişken olsun. En az 10 tane yeni yapı ile ilgili bilgi tutacak bir dizi tanımlayınız. Program çalıştığı zaman bilgi girişlerini yapınız ve çıktı olarak da bu girilen yeni yapıdaki bilgilerinizi sayısal alan dikkate alarak sıralayıp (büyükten küçüğe doğu) ekrana yansıtsın. 23.02.2009 Dr. Mustafa T. Babagil 8
Fonksiyonlarda Struct yapısının kullanılması ve Uygulamaları Fonksiyonlarda daha önceden de anlatmış olduğum gibi, main modülünden yazmış olduğunuz yeni fonksiyona bilgi gönderilmesi işlemi yapılabildiği gibi, yazılan yeni fonksiyon modülüne hiç bilgi gönderilmeden de bu modülü kullanabileceğimizi belirtmiştim. 20.10.2009 Dr. Mustafa T. Babagil 9
Fonksiyon kullanımı ile ilgili bilinmesi gereken 2 temel şey ise, Fonksiyona bilgi gönderilip (değişken göndermek), o bilgiyi kullanarak fonksiyonun işlem yapmasını sağlamak; (pass by value!..) Fonksiyona gönderilen değişken üzerinden işlem yapıp, o değişkenin değerinin değişmesini sağlayan yapıdaki fonksiyon tanımlamalarıdır. (pass by reference!..) Bu yapıdaki fonksiyonları kullanırken sonuç olarak ne istediğimize dikkat etmeliyiz ve bu doğrultuda fonksiyonları kullanmalıyız.
Bulunduğumuz seviye itibarı ile şu anda 1. tipteki fonksiyon kullanımı ile ilgili uygulamalar yapacağız. Yeni bir fonksiyon yazıp bilgi girişi yaptırıp, sıralama işlemi yapan programımızı hatırlıyorsunuz. Bununla ilgili fonksiyonlu bir örnek aşağıda verilmiştir. Herkes bu programı yazıp, F7 tuşu ile adım adım denemelidir.
#include <iostream.h> struct ogrencitipi char isim[20]; double ogrno; char cinsiyet; char bolum[20]; float GPA; float CGPA; double telno; char adres[20]; ; const max=10; ogrencitipi ogrenci[max]; // GLOBAL DEGISKEN TANIMI!.. int i,yer; // BU DEGISKENLER TUM PROGRAM ICIN 1 DEFA TANIMLANIR!.. double enbuyuknumara; // yer değişkeni, en büyük numaralı öğrencinin dizi içerisindeki yerini tutmak için tanımlandı. void bilgigiris(); void enbuyuk_numarali_ogrenciyi_bul(); void enbuyuk_numarali_ogrenciyi_ekrana_yansit();
void bilgigiris() for (i=0;i<max;i++) cout << "isim gir--->"; cin>> ogrenci[i].isim; cout << "ogrenci no gir--->"; cin>> ogrenci[i].ogrno; cout << "cinsiyet gir E/K--->"; cin>> ogrenci[i].cinsiyet; cout << "bolum gir--->"; cin>> ogrenci[i].bolum; cout << "GPA gir--->"; cin>> ogrenci[i].gpa; cout << "CGPA gir--->"; cin>> ogrenci[i].cgpa; cout << "telno gir--->"; cin>> ogrenci[i].telno; cout << "Adres gir---> \n"; cin>> ogrenci[i].adres; void enbuyuk_numarali_ogrenciyi_bul() enbuyuknumara=ogrenci[0].ogrno;i=1; while (i < max ) if (enbuyuknumara <= ogrenci[i].ogrno) enbuyuknumara=ogrenci[i].ogrno; yer=i; i++;
void enbuyuk_numarali_ogrenciyi_ekrana_yansit() cout << "en buyuk ogrenci numarali ogrenci bilgileri \n"; cout << "isim --->" << ogrenci[yer].isim << "\n"; cout << "ogrenci no --->" << ogrenci[yer].ogrno << "\n"; cout << "cinsiyet --->" << ogrenci[yer].cinsiyet << "\n"; cout << "bolum --->" << ogrenci[yer].bolum << "\n"; cout << "GPA --->" << ogrenci[yer].gpa << "\n"; cout << "CGPA --->" << ogrenci[yer].cgpa << "\n"; cout << "telno --->" << ogrenci[yer].telno << "\n"; cout << "Adres --->" << ogrenci[yer].adres << "\n"; int main() bilgigiris(); enbuyuk_numarali_ogrenciyi_bul(); enbuyuk_numarali_ogrenciyi_ekrana_yansit(); return 0;