C++ Dersi: Nesne Tabanlı Programlama Bölüm 7: Yapılar
Diziler İçerik Yapıların Tanımı Yapılara İlk Değer Atama Yapı Elemanlarına Erişim İç içe Yapılar Yapılar ve Fonksiyonlar 2
Yapılar (structures) içinde aynı veya farklı veri tipinde birden fazla eleman saklayabildiğimiz bileşik veri tipidir. struct yapıtipi veritipi eleman1; veritipi eleman2; Örnek: isim struct insan string isim; boy float boy; kilo int kilo; birey insan birey1; 3
struct insan string isim; VEYA float boy; int kilo; insan birey1; struct string isim; float boy; int kilo; birey1; VEYA struct insan string isim; float boy; int kilo; birey1; 4
Yapılara İlk Değer Atama insan birey1= Can Ozkan,1.80,85 isim boy kilo Can Ozkan 1.80 85 birey1 5
Yapı Elemanlarına Erişim yapıdeğişkeni.elemanadı Örnek: cout<<birey1.isim; birey1.kilo+=5; if (birey1.boy>1.70) insan birey1,birey2; cin>>birey1.isim>>birey1.kilo>>birey1.boy; birey2=birey1; 6
#include <iostream> using namespace std; struct rasyonel int pay,payda; int main() rasyonel sayi1,sayi2,sonuc; cout<<"1. sayinin pay ve paydasini giriniz:"; // Pay ve paydayı içeren bir yapı tanımlanır cin>>sayi1.pay>>sayi1.payda; // Sayılar okunur cout<<"2. sayinin pay ve paydasini giriniz:"; cin>> sayi2.pay>>sayi2.payda; sonuc.pay=sayi1.pay* sayi2.pay; sonuc.payda= sayi1.payda* sayi2.payda; // Pay ve paydalar çarpılır cout<< sayi1.pay<<"/"<< sayi1.payda<<" x "; cout<< sayi2.pay<<"/"<< sayi2.payda<<" = "; cout<<sonuc.pay<<"/"<<sonuc.payda<<endl; // Sonuç yazdırılır return 0; ÇIKTI 1.sayinin pay ve paydasini giriniz: 2 3 2.sayinin pay ve paydasini giriniz: 4 5 2/3 x 4/5 = 8/15 2 3 4 5 8 15 7
İç İçe Yapılar Bir yapının elemanı başka bir yapı olabilir. Bu durumdaki yapılara iç içe yapı (nested structures) adı verilir. struct tarih int gun,yil; string ay; struct insan string isim; float boy; int kilo; struct tarih dogumtarihi; insan birey1; birey1.dogumtarihi.gun=17; isim boy kilo gun yil ay birey1 8
Yapılar ve Fonksiyonlar Fonksiyondan bir Yapı Değerini Döndürme #include <iostream> using namespace std; struct rasyonel // Pay ve paydayı içeren bir yapı tanımlanır int pay,payda; rasyonel carp() // Sayıları okuyan ve çarpan fonksiyon rasyonel sayi1,sayi2,s; cout<<"1. sayinin pay ve paydasini giriniz:"; cin>>sayi1.pay>>sayi1.payda; // Sayılar okunur cout<<"2. sayinin pay ve paydasini giriniz:"; cin>>sayi2.pay>>sayi2.payda; s.pay=sayi1.pay*sayi2.pay; s.payda=sayi1.payda*sayi2.payda; // Pay ve payda çarpılır return s; int main() rasyonel sonuc=carp(); // carp() fonksiyonu çağırılır cout<< Sonuc= ; cout<<sonuc.pay<<"/"<<sonuc.payda<<endl; return 0; // Sonuç yazdırılır 9
Yapı Değerinin Fonksiyona Parametre Olarak Yollanması #include <iostream> using namespace std; struct rasyonel // Pay ve paydayı içeren bir yapı tanımlanır int pay,payda; rasyonel carp() // Sayıları okuyan ve çarpan fonksiyon rasyonel sayi1,sayi2,s; cout<<"1. sayinin pay ve paydasini giriniz:"; cin>>sayi1.pay>>sayi1.payda; // Sayılar okunur cout<<"2. sayinin pay ve paydasini giriniz:"; cin>>sayi2.pay>>sayi2.payda; s.pay=sayi1.pay*sayi2.pay; s.payda=sayi1.payda*sayi2.payda; // Pay ve payda çarpılır return s; int main() rasyonel sonuc=carp(); // carp() fonksiyonu çağırılır cout<< Sonuc= ; // Sonuç yazdırılır cout<<sonuc.pay<<"/"<<sonuc.payda<<endl; return 0; 10
Yapı Değerinin Fonksiyona Parametre Olarak Yollanması #include <iostream> using namespace std; struct rasyonel int pay,payda; rasyonel carp(rasyonel a,rasyonel b) rasyonel s; s.pay=a.pay*b.pay; s.payda=a.payda*b.payda; return s; int main() rasyonel sayi1,sayi2; cout<<"1. sayinin pay ve paydasini giriniz:"; // Pay ve paydayı içeren bir yapı tanımlanır // Rasyonel sayıları çarpan fonksiyonu // Pay ve paydalar çarpılır cin>>sayi1.pay>>sayi1.payda; // Sayılar okunur cout<<"2. sayinin pay ve paydasini giriniz:"; cin>>sayi2.pay>>sayi2.payda; rasyonel sonuc=carp(sayi1,sayi2); // carp() fonksiyonu çağırılır cout<< Sonuc= ; // Sonuç yazdırılır cout<<sonuc.pay<<"/"<<sonuc.payda<<endl; return 0; 11
#include <iostream> #include <math.h> using namespace std; struct noktatip //x ve y koordinatlarını içeren bir yapı int x,y; void oku(struct noktatip& a) // Bir nokta okuyan fonksiyon cout<<"x ve y koordinatlarini giriniz: "; cin>>a.x>>a.y; float mesafe(struct noktatip& a, struct noktatip &b) // İki nokta arasındaki // mesafeyi hesaplayan fonksiyon return sqrt(pow((a.x-b.x),2)+pow((a.y-b.y),2)); int main() struct noktatip nokta1,nokta2; cout<<"nokta bilgilerini giriniz:"<<endl; oku(nokta1); // İki nokta okunur oku(nokta2); cout<<"1. nokta: ("<<nokta1.x<<","<<nokta1.y<<")"<<endl; cout<<"2. nokta: ("<<nokta2.x<<","<<nokta2.y<<")"<<endl; cout<<"aralarindaki mesafe= "<<mesafe(nokta1,nokta2)<<end; return 0; ÇIKTI Nokta bilgilerini giriniz: x ve y koordinatlarini giriniz: 2 5 x ve y koordinatlarini giriniz: 4 8 1. nokta: (2,5) 2. nokta: (4,8) Aralarindaki mesafe = 3.60555 Mesafe formülü ( x y 2 2 1 x2 ) ( y1 2 ) 12