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; double enbuyuknumara; // 5 ogrenci için bilgi girisi yapalim ve bu girilen bilgileri ekrana toplu halde yansitalim. 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
Çalışma 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
ÖDEV 1 Bir marketteki 50 ürün için, ürün kodu, ürün ismi, ürün fiyatı, ürünün stok miktarı ve ürünün cinsi(temizlik yada gıda olarak adlandırılabilir.) olmak üzere bir yeni yapı tanımlayınız ve bunu bir dizi ile tanımlayınız. Dizi boyutu 50 olsun. Tüm alanlara bilgi girişi yapılsın ve ürün koduna göre sıralama(ister küçükten büyüğe, ister büyükten küçüğe) yapılarak çıktısını ekrana yazdırın.
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 10
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=2; ogrencitipi ogrenci[max]; // GLOBAL DEGISKEN TANIMI!.. int i,yer; // BU DEGISKENLER TUM PROGRAM ICIN 1 DEFA TANIMLANIR!.. double enbuyuknumara; void bilgigiris(); void enbuyuk_numarali_ogrenciyi_bul(); void enbuyuk_numarali_ogrenciyi_ekrana_yansit();
void bilgigiris() // 5 ogrenci için bilgi girisi yapalim ve bu girilen bilgileri ekrana toplu halde yansitalim. 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;
Yukarıda verilmiş olan en temel fonksiyon kullanımı ile ilgili uygulama programını değiştirerek fonksiyon kullanımında bir adım daha ileriye gidelim. Yeni uygulamalarımızda hazırlamış olduğumuz modüller içerisine değişken(ler) gönderip bu değişkenler ile işlem yapılmasını sağlayacağız. Buna benzer fonksiyon kullanımlarını BİLG213 dersimizde de yapmıştık. Şimdi bizim tanımlamış olduğumuz yapıları ( struct ile tanımlanmış) da fonksiyona gönderelim.
Çalışma sorusu olarak VERİLMİŞ OLAN PROGRAMINIZIN KODU AŞAĞIDAKİ SLAYTLARDA DETAYLI BİR ŞEKİLDE AÇIKLANMIŞTIR
#include <iostream.h> struct ogrencitipi char isim[20]; double ogrno; char cinsiyet; char bolum[20]; float GPA; float CGPA; double telno; char adres[20]; ; Yeni tanımladığımız ogrencitipi yapısı const max=3; // GLOBAL DEGISKEN TANIMI!.. // BU DEGISKENLER TUM PROGRAM ICIN 1 DEFA TANIMLANIR!.. ogrencitipi ogrenci[max], gecici; int i,yer,k; double enbuyuknumara,enkucuknumara,numara; char secim; char bulundu; Global değişken tanımları void bilgigiris(); void enbuyuk_numarali_ogrenciyi_bul(); void ogrenciyi_ekrana_yansit(); void enkucuk_numarali_ogrenciyi_bul(); void arama_yap(); void kucuk_buyuk_sirala(); void buyuk_kucuk_sirala(); Fonksiyonların prototiplerinin tanımlandığı yer.
void bilgigiris() // max ogrenci için bilgi girisi yapalim ve bu girilen bilgileri ekrana toplu halde yansitalim. 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---> "; cin>> ogrenci[i].adres;cout <<"\n"; void enbuyuk_numarali_ogrenciyi_bul() enbuyuknumara=ogrenci[0].ogrno;i=1; yer=0; while (i < max ) if (enbuyuknumara <= ogrenci[i].ogrno) enbuyuknumara=ogrenci[i].ogrno; yer=i; i++; Bilgi giriş modülü En büyük numaralı öğrenciyi bulan modül
void enkucuk_numarali_ogrenciyi_bul() enkucuknumara=ogrenci[0].ogrno;i=1; yer=0; while (i < max ) if (enkucuknumara >= ogrenci[i].ogrno) enkucuknumara=ogrenci[i].ogrno; yer=i; i++; En küçük numaralı ogrenciyi bulan modül void arama_yap() cout << " bir numara gir ----> "; cin>> numara; i=0; bulundu='y'; while (i < max ) if (numara == ogrenci[i].ogrno) bulundu='d'; yer=i; i++; Girilen bir numara için arama yapar ve bulunan pozisyonu yer değişkeni ile tutar.
void buyuk_kucuk_sirala() for (i=1;i<max;i++) k=i; while ((ogrenci[k].ogrno>ogrenci[k-1].ogrno) && (k>0)) gecici=ogrenci[k]; ogrenci[k]=ogrenci[k-1]; ogrenci[k-1]=gecici; k--; for(yer=0;yer<max;yer++) cout << "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"; Girilen bilgileri, Ogrenci numarasına göre küçükten büyüğe sıralayan modül
void kucuk_buyuk_sirala() for (i=max-1;i>0;i--) k=i; while ((ogrenci[k].ogrno<ogrenci[k-1].ogrno) && (k<=(max-1))) gecici=ogrenci[k]; ogrenci[k]=ogrenci[k-1]; ogrenci[k-1]=gecici; k++; for(yer=0;yer<max;yer++) cout << "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"; Girilen bilgileri, Ogrenci numarasına göre büyükten küçüğe sıralayan modül.
void ogrenciyi_ekrana_yansit() cout << "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"; Ogrenci yapısındaki herhangi bir girilmiş bilgiyi ekrana yansıtır.
int main() while (secim!= '8') cout << " bilgi girisi icin -------------------> 1"<<"\n"; cout << " en buyuk numarali ogrenci -----------> 2"<<"\n"; cout << " en kucuk numarali ogrenci -----------> 3"<<"\n"; cout << " ekrana yansitmak icin ---------------> 4"<<"\n"; cout << " arama yapmak icin -------------------> 5"<<"\n"; cout << " kucukten buyuge sirala --------------> 6"<<"\n"; cout << " buyukten kucuge sirala --------------> 7"<<"\n"; cout << " cikis icin --------------------------> 8"<<"\n"; cout << " isleminizi seciniz --->"; cin >> secim; Ekrana bir menü yansıtır. Bu menü her seçenek sonrasında ekrana tekrardan gelir. switch (secim) case'1': bilgigiris(); break; case'2': enbuyuk_numarali_ogrenciyi_bul();break; case'3': enkucuk_numarali_ogrenciyi_bul();break; case'4': ogrenciyi_ekrana_yansit();break; case'5': arama_yap();if (bulundu=='y') cout <<" bulunamadi!.."<<"\n";break; case'6': kucuk_buyuk_sirala();break; case'7': buyuk_kucuk_sirala();break; return 0; Menü seçeneğine göre, yapılması gereken modüle yönlendirilir. SWITCH kullanımına dikkat ediniz.
Fonksiyonlara Struct ile tanımlanmış yeni yapıların gönderilmesi Fonksiyonlar içerisine C++ ın kendi değişkenlerini göndermeyi daha önce yapmıştık. Şimdi fonksiyonlar içerisine kendi tanımlamış olduğumuz yapıları gönderip, yazmış olduğumuz yeni modül ile işlem yaptıracağız. Aşağıdaki slaytlarda bilgi girişi için modül yazılmıştır. İnceleyiniz.
#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=3; ogrencitipi ogrenciler[max]; // GLOBAL DEGISKEN TANIMI!.. int i; // BU DEGISKENLER TUM PROGRAM ICIN 1 DEFA TANIMLANIR!.. char secim; void bilgigiris(ogrencitipi ogrenci); void ogrenciyi_ekrana_yansit(ogrencitipi ogrenci[]);
void bilgigiris(ogrencitipi ogrenci) int i; for (i=0;i<max;i++) cout << "isim gir--->"; cin>> ogrenci.isim; cout << "ogrenci no gir--->"; cin>> ogrenci.ogrno; cout << "cinsiyet gir E/K--->"; cin>> ogrenci.cinsiyet; cout << "bolum gir--->"; cin>> ogrenci.bolum; cout << "GPA gir--->"; cin>> ogrenci.gpa; cout << "CGPA gir--->"; cin>> ogrenci.cgpa; cout << "telno gir--->"; cin>> ogrenci.telno; cout << "Adres gir---> "; cin>> ogrenci.adres;cout <<"\n"; ogrenciler[i]=ogrenci; void ogrenciyi_ekrana_yansit(ogrencitipi ogrenci[max]) for (i=0;i<max;i++) cout << "ogrenci bilgileri \n"; cout << "isim --->" << ogrenci[i].isim << "\n"; cout << "ogrenci no --->" << ogrenci[i].ogrno << "\n"; cout << "cinsiyet --->" << ogrenci[i].cinsiyet << "\n"; cout << "bolum --->" << ogrenci[i].bolum << "\n"; cout << "GPA --->" << ogrenci[i].gpa << "\n"; cout << "CGPA --->" << ogrenci[i].cgpa << "\n"; cout << "telno --->" << ogrenci[i].telno << "\n"; cout << "Adres --->" << ogrenci[i].adres << "\n";
int main() secim='0'; while (secim!= '3') cout << " bilgi girisi icin -------------------> 1"<<"\n"; cout << " ekrana yansitmak icin ---------------> 2"<<"\n"; cout << " cikis icin --------------------------> 3"<<"\n"; cout << " isleminizi seciniz --->"; cin >> secim; switch (secim) case'1': bilgigiris(ogrenciler[1]); break; case'2': ogrenciyi_ekrana_yansit(ogrenciler);break; return 0;
Dosya opersyonları (File operations) fstream header kütüğünü eklemek gerekir. ifstream bilgi giriş dosyaları tanımlamak için. ofstream bilgi çıkış dosyaları tanımlamak için. fstream hem bilgi giriş-hem bilgi çıkış dosyaları tanımlamak için kullanılır.
<< dosyaya yazmak için kullanılır >> dosyadan okumak için kullanılır eof komutu ise giriş dosyası sonunu kontrol etmek için kullanılan bir hazır fonksiyondur. open komutu ile bazı mode lar kullanılmalı örnek mode lar: ios::in giriş (input) ios::out çıkış (output) open çağrıldığı zaman bu mode lar birlikte kullanılabilir: dfile.open("class.txt", ios::in ios::out);
// 10 sayıyı dosyalar arasında kopyalar // dosyayı açar fstream girisdosyasi("input.txt", ios::in); fstream cikisdosyasi("output.txt", ios::out); int sayi; for (int i = 1; i <= 10; i++) girisdosyasi >> sayi;// dosyalari kullanir cikisdosyasi << sayi; girisdosyasi.close(); // dosyalari kapatir cikisdosyasi.close();
Kabuledilen Dosya Açma Mode ları ifstream: Sadece giriş için dosya açılır dosya yazılabilir mode da değildir open, dosya bulunamazsa başarısız olur ofstream: Sadece çıkış için dosya açılır. Dosya okunabilir değildir. Dosya bulunamazsa, dosya yaratılır. Eğer dosya zaten varsa, dosya içeriği silinir.
Örnek File (Dosya, Kütük) Uygulaması #include<iostream.h> #include<iomanip.h> #include<fstream.h> int main() fstream fl1; İnt num; int i; fl1.open("sayidosya.txt", ios::out); num=2; for (i=0;i<10;i++) fl1 << num*i << endl; fl1.close (); return 0; Yandaki Program kodu, sayidosya.txt adında bir text (düz yazı) kütüğü yaratarak içerisine, 0,1,2,3,4,5,6,7,8 ve 9 sayılarının 2 ile çarpımlarını yazmaktadır. Sonra da bu dosyayı yazma işlemini, dosyayı kapatarak bitiriyor.
Örnek File (Dosya, Kütük) Uygulaması #include<iostream.h> #include<iomanip.h> #include<fstream.h> int main() fstream fl1,fl2; double num; int i; fl1.open("c:\sayidosya.txt", ios::in); fl2.open("c:\kopyala.txt", ios::out); for (i=0;i<10;i++) fl1 >> num; fl2 << num << endl; fl1.close (); return 0; Yandaki Program kodu, sayidosya.txt adında, daha önce yaratılmış ve içerisine bilgi yazılmış bir text (düz yazı) kütüğünü açarak içerisindeki bilgileri tek tek okuyup yeni dosyaya kopyala.txt ye aktarmaktadır. Sonuç olarak ise 2 tane ayni dosya olacaktır.
Asağıdaki kütük bizim tarafımızdan yaratılmış (yazılmış ve kaydedilmiş) bir kütüktür. Kütük ismi ise yine bizim uygun gördüğümüz bir isim ile kaydedilmiştir. Bu kütük istediğiniz bir düz editor yardımı ile hazırlanabileceği gibi, C++ derleyicisinin editörü ile de hazırlanabilir. Hatırlayacağınız gibi, Lab dersimizde birlikte hazırlamış olduğumuz kütüğü C++ editörü ile hazırlamıştık. Kütük adı: isimler.txt 900188 90 35 40 900101 100 100 100 963254 50 60 70 987899 32 45 60
Aşağıdakidaki programı birlikte geliştirmiştik. Gereken açıklamaları birlikte yapalım. #include<iostream.h> #include<iomanip.h> #include<fstream.h> int main() fstream fl1; double num; int vz1, vz2, final; float ortalama; int i; // kütük değişkeni // Kütükteki öğrenci numarasının okutulmasında kullanılacak. // Kütükteki sınav notlarını okutmak için kullanılacak değişkenler // vz1, vz2 ve final değişkenleri yardımı ile hesaplama yapacağımız ortalama değişkeni tanımı. // döngü için kullanılacak olan tam sayı değişkeni. fl1.open("isimler.txt", ios::in); // dosya değişkeninin isimler.txt kütüğü için tanımlanıp, okutulmak için açılması. for (i=0;i<4;i++) fl1 >> num; fl1 >> vz1; fl1 >> vz2; fl1 >> final; // dosya değişkeni ile öğrenci numarasının dosyadan okunması // vize 1 notunun okutulması // vize 2 notunun okutulması // final notunun okutulması ortalama=0.3*vz1+0.3*vz2+0.4*final; // Ortalamanın hesaplanması. cout << num << " " << ortalama << " \n"; // ekrana öğrenci numarasının ve ortalamanın yansıtılması fl1.close (); // dosyanın kapatılması. return 0;
Şimdi de Yeni bir kütüğe hesaplamış olduğumuz ortalamaları, ve öğrenci numaralarını yazdıralım. #include<iostream.h> #include<iomanip.h> #include<fstream.h> int main() fstream fl1,fl2; // kütük değişkenleri double num; // Kütükteki öğrenci numarasının okutulmasında kullanılacak. int vz1, vz2, final; // Kütükteki sınav notlarını okutmak için kullanılacak değişkenler float ortalama; // vz1, vz2 ve final değişkenleri yardımı ile hesaplama yapacağımız ortalama değişkeni tanımı. int i; // döngü için kullanılacak olan tam sayı değişkeni. fl1.open("isimler.txt", ios::in); // dosya değişkeninin isimler.txt kütüğü için tanımlanıp, okutulmak için açılması. fl2.open("ortalama.txt", ios::out); // dosya değişkeninin ortalama.txt kütüğü için tanımlanıp, yazdırılmak için açılması (yaratılması). for (i=0;i<4;i++) fl1 >> num; // dosya değişkeni ile öğrenci numarasının dosyadan okunması fl1 >> vz1; // vize 1 notunun okutulması fl1 >> vz2; // vize 2 notunun okutulması fl1 >> final; // final notunun okutulması ortalama=0.3*vz1+0.3*vz2+0.4*final; // Ortalamanın hesaplanması. fl2 << num << " " << ortalama << endl; // Yeni dosyaya, (ortalama.txt) öğrenci numarası ve ortalamaların yazdırılması!.. cout << num << " " << ortalama << " \n"; // ekrana öğrenci numarasının ve ortalamanın yansıtılması fl1.close (); fl2.close (); return 0; // dosyaların kapatılması.