C++ Programming:
Program Design Including Data Structures, Third Edition
Bölüm 3: Giriş/Çıkış
C++ Programming: From Problem Analysis to Program Design, Third Edition 2
Bölümün Amaçları
• Akış (stream) nedir? Girdi/çıktı akışlarının işleyişi
• Standart bir giriş aygıtından veri okuması nasıl gerçekleşir?
• Bir programdaki ön tanımlı (predefined ) fonksiyonlar nasıl kullanılır?
• Bazı giriş akış fonksiyonlarının ( input stream functions) kullanılışı : get, ignore, fill,
C++ Programming: From Problem Analysis to Program Design, Third Edition 3
Bölümün Amaçları
• Girişlerdeki başarısızlıkları (input failure) izleyebilmek
• Standart bir çıktı aygıtına verinin nasıl yazıldığını öğrenmek
• Bir programda çıktının istenildiği şekilde elde edilmesini öğrenmek
• string veri tipini kullanarak giriş çıkış işlemlerinin nasıl yapıldığını öğrenmek
• Dosya giriş/çıkış işlemleri hakkında bilgilenmek
C++ Programming: From Problem Analysis to Program Design, Third Edition 4
Giriş /Çıkış Akışları
(Input/Output Streams)
• I/O: Kaynaktan hedefe baytların bir dizilişi (bayt akışı- stream of bytes)
• Bayt genellikle karakterlerle simgelenir.
Bazen farklı tipteki bilgilerin gerektiği programlar olabilir
• Akış (Stream) : Kaynaktan hedefe karakterlerin sıralanışıdır.
• Giriş Akışı (Input Stream) Bir giriş aygıtından bilgisayara karakterlerin sıralanışıdır.
• Çıkış Akışı (Output Stream): Bilgisayardan çıktı aletine karakterlerin sıralanışıdır.
C++ Programming: From Problem Analysis to Program Design, Third Edition 5
Standart I/O Aygıtları
• Klavyeden veriyi çıkarmak (extract-receive) ve ekrana göndermek için iostream
kullanılır.
• iostream iki tipte tanımlama içerir
− istream - input stream
− ostream - output stream
• iostream iki değişkene sahiptir.
− cin – ortak girişi tutar
− cout – ortak çıkışı tutar
C++ Programming: From Problem Analysis to Program Design, Third Edition 6
cin ve cout kullanımı
• cin ve cout, kullanabilmek için önişlemci direktifi (preprocessor directive)
#include <iostream> kullanılmalıdır.
Bildirimi şöyledir:
istream cin;
ostream cout;
• Giriş için akış değişkenleri (input stream variables): istream tipindedir.
• Çıkış akış değişkenleri (output stream variables): ostream tipindedir
C++ Programming: From Problem Analysis to Program Design, Third Edition 7
cin ve
Çıkartma İşleci (Extraction Operator ) >>
• Giriş deyimi sentaksı olarak cin ve çıkartma işleci (extraction operatör) >>
cin >> variable >> variable...;
kullanılır.
• Çıkartma işleci (extraction operator )>> ikili (binary) bir işleçtir.
Sol tarafındaki işlenen (operand) ise bir giriş akışı değişkenidir (örneğin is cin)
Sağ tarafındaki işlenen (operand) ise herhangi bir basit veri tipidir
C++ Programming: From Problem Analysis to Program Design, Third Edition 8
Standart Giriş
• >> işlecinin her kullanılışında giriş akışından (input stream) bir sonraki veri çıkartılır.
• Tek bir cin deyimi ile fazla sayıda değişken ifade etmekle, fazla çok sayıda cin deyimi ile her seferinde tek bir değişken tanımlamak
aynıdır.
• Tarama sırasında >> işleci tüm boş
karakterleri atlar . «Whitespace» olarak adlandırılır.
• «Whitespace» karakterler çıktısı alınamayan karakterler de olabilir.
C++ Programming: From Problem Analysis to Program Design, Third Edition 10
Datanın Okunması
• char tipinde bir verinin okunması için variable
>> çıkartma (extraction) operatörü boşluğu atlar ve sonraki karakteri bularak depolar
Tek bir karakterin okunmasından sonra okuma işlemi durur.
C++ Programming: From Problem Analysis to Program Design, Third Edition 11
Datanın Okunması
• int ya da double tipinde bir değişkenin okunması
>> çıkartma (extraction) işleci
boşlukları atlar, eğer işaret dijiti varsa bunu okuduktan sonra, sonraki dijitleri okur.
− Okuma işlemi dijit olmayan bir «whitespace»
karakter ile sonlanır.
Example 3-1 int a, b;
double z;
char ch, ch1, ch2;
Statement Input Value Stored in Memory
1 cin >> ch; A ch = 'A‘
2 cin >> ch; AB ch = 'A', 'B' is held for later input
3 cin >> a; 48 a = 48
4 cin >> a; 46.35 a = 46, .35 is held for later input
5 cin >> z; 74.35 z = 74.35
6 cin >> z; 39 z = 39.0
7 cin >> z >> a; 65.78 38 z = 65.78, a = 38
Statement Input Value Stored in Memory
8 cin >> a >> b; 4 60 a = 4, b = 60
9 cin >> a >> ch >> z; 57 A 26.9 a = 57, ch = 'A', z = 26.9 10 cin >> a >> ch >> z; 57 A26.9 a = 57, ch = 'A', z = 26.9 11 cin >> a >> ch >> z; 57 A26.9 a = 57, ch = 'A', z = 26.9 12 cin >> a >> ch >> z; 57A26.9 a = 57, ch = 'A', z = 26.9 13 cin >> z >> ch >> a; 36.78B34 z = 36.78, ch = 'B', a = 34 14 cin >> z >> ch >> a; 36.78 B34 z = 36.78, ch = 'B', a = 34
15 cin >> a >> b >> z; 11 34 a = 11, b = 34, computer waits for the next number
Statement Input Value Stored in Memory
16 cin >> a >> z; 46 32.4 68 a = 46, z = 32.4,
68 is held for later input 17 cin >> a >> z; 78.49 a = 78, z = 0.49
18 cin >> ch >> a; 256 ch = '2', a = 56
19 cin >> a >> ch; 256 a = 256, computer waits for the input value for ch
20 cin >> ch1 >> ch2; A B ch1 = 'A', ch2 = 'B'
C++ Programming: From Problem Analysis to Program Design, Third Edition 15
Öntanımlı Fonksiyonlar
• Fonksiyon (alt program ): komutlar dizisidir.
• Aktivite olduğunda bir görev (iş) gerçekleştirir.
• main fonksiyonu bir program çalıştırıldığında (run) işlenir (executes).
• Diğer fonksiyonlar ise çağrıldıklarında çalıştırılır.
• C++ bir dizi hazır fonksiyon içerir. Bunlar
öntanımlı (predefined) fonksiyonlardır ve başlık
dosyaları ile çağrılan kütüphane fonksiyonlarının bir koleksiyonudur.
16
Öntanımlı Fonksiyonlar
• Başlık dosyası (Header file) pek çok fonksiyon içerebilir.
• Ön tanımlı bir fonksiyonun kullanılması için, başlık dosyasının ismi bilinmelidir.
• Ayrıca
− Fonksiyonun ismi
− Gerekli parametrelerinin sayısı
− Her parametrenin tipi
− Fonksiyonun hangi işlemi gerçekleştirdiğinin bilinmesi şarttır.
C++ Programming: From Problem Analysis to Program Design, Third Edition 17
Öntanımlı Fonksiyon Örneği
• pow (power) fonksiyonun kullanılması için , cmath başlık dosyası kullanılmalıdır.
• Pow fonksiyonunun 2 nümerik parametresi vardır
• Sentaksı pow(x,y) = xy
• x ve y argümanlardır.
• pow(2,3) fonksiyonunu parametreleri 2 ve 3 dür.
//Öntanımlı fonksiyonların kullanılması
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
int main() {
double u, v;
string str;
cout << "Line 1: 2 to the power of 6 = "
<< pow(2, 6) << endl; //Line 1
u = 12.5; //Line 2
v = 3.0; //Line 3
cout << "Line 4: " << u
<< " to the power of "
<< v << " = " << pow(u, v)
<< endl; //Line 4
cout << "Line 5: Square root of 24 = "
<< sqrt(24.0) << endl; //Line 5
u = pow(8.0, 2.5); //Line 6
cout << "Line 7: u = " << u
<< endl; //Line 7 str = "Programming with C++"; //Line 8 cout << "Line 9: Length of str = "
<< str.length() << endl; //Line 9 return 0;
}
Sample Run:
Line 1: 2 to the power of 6 = 64
Line 4: 12.5 to the power of 3 = 1953.13 Line 5: Square root of 24 = 4.89898
Line 7: u = 181.019
Line 9: Length of str = 20
C++ Programming: From Problem Analysis to Program Design, Third Edition 20
cin ve get Fonksiyonu
• get fonksiyonu:
− Sonraki karakterin okunmasını sağlar («whitespace» içerebilir),
− Depolama karakteri cin ve get fonksiyonunun birlikte kullanılır. cin.get(varChar);
varChar
− char tipinde bir değişkendir
− Fonksiyonun argümanıdır (parametresi)
C++ Programming: From Problem Analysis to Program Design, Third Edition 21
Nokta Notasyonu (Dot Notation)
cin.get(ch);
deyiminde cin ve get farklı iki tanımlayıcıdır ve nokta (dot) ile birbirlerinden ayrılırlar.
• Nokta (Dot) giriş akış değişkeni ismini bir fonksiyon ya da bir isimden ayırır.
• C++ dilinde , nokta (dot) üye erişim operatörüdür (member access operatör)
C++ Programming: From Problem Analysis to Program Design, Third Edition 22
Standart çıktının Yazılıması
• cout terim olarak << operatörü ile kullanılır.
cout < <ifade ya da manipülatör
<< ifade ya da manipülatör...;
• İfade değerlendirilir
• Değeri yazılır
• Manipülatör çıktının düzenlenmesi için kullanılır
C++ Programming: From Problem Analysis to Program Design, Third Edition 23
Çıktı Formatları
(Formatting Output)
• endl manipülatördür. Çıktıyı sonraki satıra taşır.
• setprecision(n): Çıktının ondalıklı bir sayı olarak görüntülenmesini sağlar.
• fixed : kKayan nokta sayılarının ( floating- point numbers) belirtilen sabit bir formatta görüntülenmesini sağlar
• showpoint : Çıktı mutlaka ondalıklı olarak görüntülenir.
C++ Programming: From Problem Analysis to Program Design, Third Edition 24
setw Manipülatörü
• setw sütunün istenilen uzunluk değerini verir.
• Eğer belirlenen sütün değeri, ifadede
belirlenmiş olan sayının sütunlarını aşarsa - İfadenin çıktısı sağa dayandırılır
- Eğer çıktıda setw ile belirlenmiş ama
kullanılmayan sütunlar varsa, boşluk olarak sol taraftan doldurulur.
25
Çıktı Formatı için İlave Komutlar
• Çıktı akış değişkenleri setfill komutunun
yazılması ile ile kullanılmayan kolonların 8değer atanmamış olan sütunların) bir karakter ile
doldurulmasını sağlar.
• left: Çıktıyı sola dayar.
setfill ile birlikte etkindir.
ostreamVar << left;
• left komutunu etkinsizleştirmek için unsetf kullanılır.
• right: çıktıyı sağa yaslar ostreamVar << right;
C++ Programming: From Problem Analysis to Program Design, Third Edition 26
Manipülator Tipleri
• İki tip manipülasyon gerçekleştirilir:
− Parametreli
− Parametresiz
• Parametreli: iomanip başlık dosyasının verilmesini gerektirir setprecision, setw, ve setfill
• Parametresiz : iostream başlık dosyası gerektirir.
- endl, fixed, showpoint, left, ve flush…..
C++ Programming: From Problem Analysis to Program Design, Third Edition 27
I/O ve string Veri Tipi
• Bir giriş akışı değişkeni (cin) and çıkarma (extraction) işleci >> birlikte «string» tipinde bir verinin okunmasını sağlar.
• Çıkarma (Extraction) operatörü
− «whitespace» karakterleri atlar. Bir
«whitespace» karakter ile okuma durur.
− Boşluk içeren dizgilerin (strings) bu operatör ile okunması mümkün değildir.
• getline fonksiyonu
− Mevcut satırın sonuna kadar okuma gerçekleştirir
− Boşlukların da okunması mümkündür.
C++ Programming: From Problem Analysis to Program Design, Third Edition 28
Dosya Giriş /Çıkışı (File Input/Output)
• File: ikinci bellekte (secondary storage) tutulan verileri gösterir.
• File I/O
1. fstream başlık dosyası (header) içerir.
2. Dosya akış değişkenleri bildirilir.
3. Dosya akış değişkenleri (file stream variables) giriş/çıkış kaynakları ile ilişkilendirilir.
4. Dosya akış değişkenleri >>, <<, veya diğer giriş /çıkış fonksiyonlarını kullanır
5. Dosya giriş/çıkışı kapatılır.
C++ Programming: From Problem Analysis to Program Design, Third Edition 29
Programming Example
• A theater owner agrees to donate a portion of gross ticket sales to a charity
• The program will prompt the user to input:
− movie name
− adult ticket price
− child ticket price
− number of adult tickets sold
− number of child tickets sold
− percentage of gross amount to be donated
C++ Programming: From Problem Analysis to Program Design, Third Edition 30
Programming Example I/O
• Inputs: movie name, adult and child ticket price, # adult and child tickets sold, and percentage of the gross to be donated
• Program output:
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Movie Name: ...Duckey Goes to Mars Number of Tickets Sold: ... 2650
Gross Amount: ... $ 9150.00 Percentage of Gross Amount Donated: 10.00%
Amount Donated: ... $ 915.00 Net Sale: ... $ 8235.00
C++ Programming: From Problem Analysis to Program Design, Third Edition 31
Problem Analysis
• The program needs to:
1. Get the movie name
2. Get the price of an adult ticket price 3. Get the price of a child ticket price 4. Get the number of adult tickets sold 5. Get the number of child tickets sold
C++ Programming: From Problem Analysis to Program Design, Third Edition 32
Problem Analysis (continued)
6. Get the percentage of the gross amount donated to the charity
7. Calculate the gross amount
8. Calculate the amount donated to the charity 9. Calculate the net sale amount
10.Output the results
C++ Programming: From Problem Analysis to Program Design, Third Edition 33
Formulas
• Calculate the gross amount:
grossAmount = adultTicketPrice * noOfAdultTicketsSold + childTicketPrice
* noOfChildTicketsSold;
• Calculate the amount donated to the charity:
amountDonated = grossAmount *
percentDonation / 100;
• Calculate the net sale amount:
netSale = grossAmount – amountDonated;
C++ Programming: From Problem Analysis to Program Design, Third Edition 34
Variables
string movieName;
double adultTicketPrice;
double childTicketPrice;
int noOfAdultTicketsSold;
int noOfChildTicketsSold;
double percentDonation;
double grossAmount;
double amountDonated;
double netSaleAmount;
C++ Programming: From Problem Analysis to Program Design, Third Edition 35
Formatting Output
• First column is left-justified
• Numbers in second column are right-justified
• When printing a value in the first column, use left
• Before printing a value in the second column, use right
• Use setfill to fill the empty space between the first and second columns with dots
C++ Programming: From Problem Analysis to Program Design, Third Edition 36
Formatting Output (continued)
• In the lines showing gross amount, amount donated, and net sale amount
− Use blanks to fill space between the $ sign and the number
• Before printing the dollar sign
− Use setfill to set the filling character to blank
C++ Programming: From Problem Analysis to Program Design, Third Edition 37
Main Algorithm
1. Declare variables
2. Set the output of the floating-point to
− Two decimal places
− Fixed
− Decimal point and trailing zeros
3. Prompt the user to enter a movie name
4. Input movie name using getline because it might contain spaces
C++ Programming: From Problem Analysis to Program Design, Third Edition 38
Main Algorithm (continued)
5. Prompt user for price of an adult ticket 6. Input price of an adult ticket
7. Prompt user for price of a child ticket 8. Input price of a child ticket
9. Prompt user for the number of adult tickets sold
C++ Programming: From Problem Analysis to Program Design, Third Edition 39
Main Algorithm (continued)
10.Input number of adult tickets sold
11.Prompt user for the number of child tickets sold
12.Input the number of child tickets sold
13.Prompt user for percentage of the gross amount donated
14.Input percentage of the gross amount donated
C++ Programming: From Problem Analysis to Program Design, Third Edition 40
Main Algorithm (continued)
15.Calculate the gross amount 16.Calculate the amount donated 17.Calculate the net sale amount 18.Output the results