Download - BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 11 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)
![Page 1: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 11 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)](https://reader035.vdocuments.pub/reader035/viewer/2022062218/56815b2a550346895dc8ef1e/html5/thumbnails/1.jpg)
BM-104
Nesneye Yönelik Programlama
Bahar 2013
(11. Sunu)
(Yrd. Doç. Dr. Deniz Dal)
![Page 2: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 11 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)](https://reader035.vdocuments.pub/reader035/viewer/2022062218/56815b2a550346895dc8ef1e/html5/thumbnails/2.jpg)
Dosya Yönetimi
Bir bilgisayarda 2 tür depolama yapılabilir:
1 - Geçici Depolama (Temporary Storage)Bilgisayarın ana belleğini (RAM) kullanan depolamadır.Bilgisayar kapanınca bilgiler de kaybolur. (Volatile)
2- Kalıcı Depolama (Permanent Storage)Bilgisayar kapatıldığında bile bilgilerin silinmediği yani
bilginin diske kaydedildiği depolamadır. (Non-volatile)Bilgi diskte dosyalar içerisinde saklanır.
![Page 3: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 11 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)](https://reader035.vdocuments.pub/reader035/viewer/2022062218/56815b2a550346895dc8ef1e/html5/thumbnails/3.jpg)
Files (Dosyalar) ve Streams (Akışlar)
C++ her bir dosyayı sıralanmış byte lar olarak görür. Her bir dosyanın sona erdiği noktayı belirleyen özel bir işaretçisi vardır. (end-of-file ya da eof)
Bir dosya açıldığı zaman buna ilişkin bir nesne oluşturulur ve bu nesneye stream adını verdiğimiz bir bilgi akış mekanizması iliştirilir.
C++ ile dosya işleyebilmek için standart kütüphaneden <fstream> header dosyasını include etmek gerekir.
include edilen bu <fstream> sayesinde ifstream (bir dosyadan bilgi okuma) ve ofstream (bir dosyaya bilgi yazma) sınıfları ve bunların nesneleri çağrılabilir.
![Page 4: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 11 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)](https://reader035.vdocuments.pub/reader035/viewer/2022062218/56815b2a550346895dc8ef1e/html5/thumbnails/4.jpg)
Dosyaya Bilgi Yazdırma
![Page 5: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 11 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)](https://reader035.vdocuments.pub/reader035/viewer/2022062218/56815b2a550346895dc8ef1e/html5/thumbnails/5.jpg)
Dosya Açma Modları
ios::in Okunmak üzere dosya aç
ios::out Yazılmak üzere dosya aç (Dosya zaten mevcutsa içindeki bilgiler tamamen silinir.)
ios::app Dosyanın sonundan itibaren yaz (append)
![Page 6: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 11 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)](https://reader035.vdocuments.pub/reader035/viewer/2022062218/56815b2a550346895dc8ef1e/html5/thumbnails/6.jpg)
Dosyadan Bilgi Okuma
![Page 7: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 11 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)](https://reader035.vdocuments.pub/reader035/viewer/2022062218/56815b2a550346895dc8ef1e/html5/thumbnails/7.jpg)
Hatırlatma
Boşluklar (white spaces) ve satır sonu karakterleri (end-of-line) şimdiye kadarki dosyadan okuma örneklerinde ihmal edildiler. Bunu istemiyorsak eğer ifstream sınıfının get() fonksiyonunu ve string sınıfının getline() fonksiyonunu kullanmalıyız.
getline() fonksiyonu herhangi bir akışı (iostream, fstream veya sstream) bir string değişkenine yönlendirir.
![Page 8: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 11 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)](https://reader035.vdocuments.pub/reader035/viewer/2022062218/56815b2a550346895dc8ef1e/html5/thumbnails/8.jpg)
ifstream Sınıfının get() Fonksiyonu ile Dosyadan Tek Karakter Okuma
Örnek:ifstream test;test.open("deneme.txt",ios::in);char ch;test.get(ch); //dosyadan tek bir karakter okucout<<ch; //okunan karakteri ekrana yazdır
![Page 9: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 11 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)](https://reader035.vdocuments.pub/reader035/viewer/2022062218/56815b2a550346895dc8ef1e/html5/thumbnails/9.jpg)
string Sınıfının getline() Fonksiyonu ile Dosyadan Satır Satır Bilgi Okuma
Okunan satırın herhangi bir sütununda bir tamsayı veya ondalıklı sayı olabilir. Ama biz herşeyi bir string değişkeninin içerisinde saklıyoruz???
![Page 10: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 11 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)](https://reader035.vdocuments.pub/reader035/viewer/2022062218/56815b2a550346895dc8ef1e/html5/thumbnails/10.jpg)
Dosyanın Her Bir Satırındaki Sütunlar Birbirinden Boşluklar Yerine Özel bir Ayraçla (Delimiter) Ayrılmışlarsa
![Page 11: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 11 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)](https://reader035.vdocuments.pub/reader035/viewer/2022062218/56815b2a550346895dc8ef1e/html5/thumbnails/11.jpg)
atoi ve atof Fonksiyonları
atoi ve atof fonksiyonları kendilerine parametre olarak aldıkları karakter dizilerini rakama çevirirler.
atoi(char *str) fonksiyonu kendisine argüman olarak aldığı karakter dizisini integer a çevirir.
atof(char *str) fonksiyonu kendisine argüman olarak aldığı karakter dizisini ondalıklı sayıya çevirir. (floating point)
atoi ve atof fonksiyonlarını C++ programlarımızın içerisinde kullanabilmek için standart kütüphaneden <cstdlib> header dosyasını programımızın başına eklemeliyiz.
![Page 12: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 11 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)](https://reader035.vdocuments.pub/reader035/viewer/2022062218/56815b2a550346895dc8ef1e/html5/thumbnails/12.jpg)
Örnek
#include <cstdlib> //atoi ve atof için
#include <string> //string veri tipi için
using namespace std;
string metin="123";
int i=atoi(metin.c_str());
string metin= "123.34";
float f=atof(metin.c_str());
![Page 13: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 11 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)](https://reader035.vdocuments.pub/reader035/viewer/2022062218/56815b2a550346895dc8ef1e/html5/thumbnails/13.jpg)
Uygulama
PersonelBilgileri.txt adlı bir düzyazı dosyasının içerisine TiKKiR adındaki bir şirkette çalışan personele ait bilgiler (her bir personele ait bilgi kaydı dosyanın bir satırında yer almak üzere) yukarıdaki formatta kaydedilmiştir. Dosyanın her bir satırında ilk sütun personelin kurum sicil numarasını, ikinci sütun personelin adını, üçüncü sütun personelin soyadını, dördüncü sütun personelin doğum tarihini ve son sütun ise personelin doğum yerini temsil etmektedir. (Şirket personelinden hiçbirisinin ikinci bir isme sahip olmadığını kabul edebilirsiniz.) Bu dosyayı okuyan ve 2013 yılı itibariyle şirket çalışanlarının yaş ortalamasını hesaplayarak ekrana basan bir C++ fonksiyonu yazınız ve main içerisinden çağırınız.
![Page 14: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 11 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)](https://reader035.vdocuments.pub/reader035/viewer/2022062218/56815b2a550346895dc8ef1e/html5/thumbnails/14.jpg)
Bir Dosyanın Başına ve Sonuna Birkaç Kez Gidip Gelmek Gerekirse
Bir dosyanın sonuna ulaşıldığında dosyayı kapatıp yeniden açarak dosyanın başına geri dönülebilir ama bu iyi bir yöntem değildir.
![Page 15: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 11 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)](https://reader035.vdocuments.pub/reader035/viewer/2022062218/56815b2a550346895dc8ef1e/html5/thumbnails/15.jpg)
!! Önemli Hatırlatma !!
Bir dosya sadece bir kere okunmak üzere açılmalıdır ve bu esnada okunan bilgiler uygun bir veri yapısı içerisinde saklanmalıdır. Daha sonra ihtiyaç duyulan herhangi bir veri bu veri yapısı içerisinden temin edilmelidir.
Her ihtiyaç duyulduğunda ilgili dosyayı okumaya açmak suretiyle bilgiye erişmek ve sonrasında dosyayı kapatmak iyi bir yöntem değildir.
![Page 16: BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 11 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)](https://reader035.vdocuments.pub/reader035/viewer/2022062218/56815b2a550346895dc8ef1e/html5/thumbnails/16.jpg)
PersonelBilgileri.txt adlı dosyadaki bilgiler vector<vector<string>> içerisinde saklanabilir mi?
? SORU ?