Belajar C++ Bagian 1

Input dan Output di C++
Bahasa C memiliki rutin-rutin untuk proses input/output yang dideklarasikan di header file stdio.h. proses input/output versi C ini masih dapat digunakan di C++. Namun demikian C++ mengenalkan teknik baru untuk proses input/output, yaitu yang dinamakan iostreams atau disingkat menjadi streams saja. Hampir semua fungsi yang terdapat di stdio.h dapat dikonversikan ke dalam bentuk streams. Kelebihan streams dibandingkan input/output C adalah fleksibilitasnya dalam melakukan format input/output dan juga kemampuannya yang mendukung konsep operator berbeban lebih (overloaded operator).


Apa itu Streams ?

Streams adalah suatu abstraksi untuk menangani aliran data dari suatu sumber (producer) ke tujuan (consumer) lain. Baik sumber atau tujuan dapat berupa buffer di memori, string, file atau layar monitor. C++ mendeklarasikan kelas untuk strem di beberapa header file, yaitu;
• iostream.h (I/O umum)
• constrea.h (I/O ke console)
• strstrea.h (I/O ke string)
• fstream.h (I/O ke file)


Stream untuk Output

Untuk melakukan proses keluaran (output) digunakan operator <<. Bentuk umumnya adalah :

objek_stream << data

bentuk dikiri tanda << (objek_stream) adalah salah satu objek dari kelas ostream. Bentuk di kanan << adalah data yang akan dituliskan ke output.

#include

void main()
{
cout << “Belajar pemrograman C++”;
}

pernyataan diatas menuliskan string “Belajar pemrograman C++” ke stream cout. Stream cout adalah stream untuk output ke layar monitor. Operator << juga dapat dibuat bertingkat seperti contoh berikut :

#include

void main()
{
cout << “Belajar” << “ pemrograman C++” << ‘\n’;
}

seperti tipe data skalar yang ada di C++ sudah mendukung stream. Dengan demikian identifier yang memiliki tipe data skalar dapat dituliskan ke output dengan stream.
Contohnya :

#include

void main()
{
int x=10;
float y=20.0;
cout << "x = " << x << “ y = “ << y;
}

keluaran program diatas :
x = 10 y = 20

stream output juga dapat menuliskan alamat suatu identitas, misalnya :

#include

void main()
{
int x;
cout << &x; // menuliskan alamat variabel x
}

keluaran program diatas :
0x8f98fff4


Format pada Output dengan fungsi

Stream output dapat diformat seperti halnya output pada fungsi printf. Untuk mengubah format output, yang harus dilakukan adalah mengubah beberapa bit flag yang ada di kelas ios. Ada beberapa macam flag yang terdapat di kelas ios yaitu :

Tabel Daftar Flag Untuk Format Pada Output

Flag Bit Keterangan
skipws 0 Mengabaikan karakter spasi putih (white space) pada saat proses input
left 1 Mengatur output menjadi rata kiri
right 2 Mengatur output menjadi rata kanan
internal 3 Output disisipi karakter pengisi (padding character) setelah tanda positif atau tanda basis bilangan
dec 4 Menampilkan bilangan dalam basis desimal
oct 5 Manampilkan bilangan dalam basis oktal
hex 6 Manampilkan bilangan dalam basis heksadesimal
showbase 7 Menampilkan basis bilangan saat suatu bilangan ditampilkan (untuk heksadesimal dengan tambahan “0x” dan untuk oktal dengan tambahan “O”)
showpoint 8 Menunjukan tanda titik pada output bilangan real
uppercase 9 Membuat output bilangan heksadesimal menjadi huruf kapital
showpos 10 Menunjukan tanda ‘+’ pada output bila suatu bilangan lebih dari 0
scientific 11 Menggunakan cara penulisan eksponensial untuk bilangan real (format : xxxE()xxx)
fixed 12 Menggunakan format bilangan desimal untuk bilangan real
unitbuf 13 Mengosongkan semua stream
stdio 14 Mencegah masalah yang bisa terjadi bila digunakan stream dan stdio secara bersamaan


Sekilas tentang Flag
Flag merupakan sekumpulan bit-bit yang masing-masing bit melambangkan keadaan tertentu. Contoh yang paling sederhana adalah flag 1 bit yang hanya melambangkan keadaan nyala (“1”) atau padam (“0”).

Format Output yang lain
format pada output dengan fungsi-fungsi yang sering digunakan antara lain :
• int width (int) : fungsi ini digunakan untuk mengubah lebar output yang akan ditampilkan. Contoh :

versi C :
#include
void main()
{
int x=10;
printf(“Bilangan = %4d”, x);
}

versi C++ :
#include
void main()
{
int x=10;
cout.width(4);
cout << “Bilangan = “ << x;
}

keluaran dua program diatas :
Bilangan = 10

• char fill (char) : fungsi ini digunakan untuk mengubah karakter pengisi (padding charakter). Karakter pengisi adalah salah satu karakter ASCII yang dituliskan bila output yang diformat lebih besar daripada lebar yang ditentukan dengan fungsi width. Contoh :

versi C :
#include
void main()
{
int x=10;
printf(“Bilangan = %04d”, x);
}

versi C++ :
#include
void main()
{
int x=10;
cout.fill(‘0’);
cout.width(4);
cout << “Bilangan = “ << x;
}

keluaran dua program diatas :
Bilangan = 0010

Yang menjadi kelebihan I/O versi C++ dibandingkan dengan versi C adalah karakter pengisiannya yang bisa digunakan untuk bermacam-macam, bukan hanya karakter ‘0’. Contoh :

#include
void main()
{
int x=10;
cout.fill(‘x’);
cout.width(4);
cout << “Bilangan = “ << x;
}

keluaran program diatas :
Bilangan = xx10

 int precision (int) : fungsi ini digunakan untuk mengubah derajat ketelitian bilangan real (floating point) yang akan ditampilkan. Contoh :

versi C :
#include
void main()
{
float y=123.45;
printf(“Bilangan = %10.2f\n”, y);
}

versi C++ :
#include
void main()
{
float y=123.45;
cout.width(10);
cout.precision(5);
cout << “Bilangan = “ << y;
}

keluaran dua program diatas :
Bilangan = 123.45

Yang perlu diperhatikan bahwa di C yang dimaksud derajat ketelitian adalah jumlah digit dibelakang koma. Misalnya untuk bilangan 123.45. bila ditampilkan dengan derajat ketelitian satu digit dibelakang koma menjadi 123.5, sedangkan di stream, yang dimaksud derajat ketelitian adalah jumlah keseluruhan digit yang akan ditampilkan. Misalnya untuk bilangan 123.45 bila ditampilkan dengan derajat ketelitian satu menjadi 1e+3, bukan 123.5.

Meskipun demikian, derajat ketelitian stream dapat dibuat seperti bahasa C dengan menambahkan pernyataan :

cout.setf(ios::fixed);

atau

cout.setf(ios::scientific);

Contoh :

#include
void main()
{
float y=123.45;
cout.width(10);
cout.precision(2);
cout.setf(ios::fixed);
cout << “Bilangan = “ << y;
}

keluaran dua program diatas :
Bilangan = 123.45

Output pada String
Ada beberapa format yang dapat dilakukan pada string dengan fasilitas stream, yaitu :
• Lebar output dapat diubah dengan memanggil fungsi width diikuti argumen lebar yang dikehendaki.
• Alignment (rata kiri atau rata kanan) dapat diubah dengan memanggil fungsi setf atau unsetf diikuti argumen ios::left atau ios::right.
• Karakter pengisi (padding character) dapat diubah dengan memanggil fungsi fill diikuti argumen karakter yang akan digunakan sebagai karakter pengisi.

Contoh output pada string :

#include
#include

void main()
{
char* s="Belajar pemrograman C++";
clrscr();

// contoh penggunaan width
cout << "Menuliskan string dengan lebar berbeda\n";
cout.width(27);
cout << s << endl;
cout.width(29);
cout << s << endl;
cout.width(31);
cout << s << endl;
cout.width(33);
cout << s << endl;

// contoh penggunaan fill
cout << "\nMenuliskan string dengan karakter pengisi .\n";
cout.fill('.');
cout.width(27);
cout << s << endl;
cout.width(29);
cout << s << endl;
cout.width(31);
cout << s << endl;
cout.width(33);
cout << s << endl;

// contoh penggunaan setiosflags
cout.setf(ios::right);
cout.fill('-');
cout << "\n Menuliskan string dengan rata kanan\n";
cout.width(10);
cout << "SATU" << endl;
cout.width(10);
cout << "DUA" << endl;
cout.width(10);
cout << "TIGA" << endl;
cout.width(10);
cout << "EMPAT" << endl;
getch();
}

keluaran programnya :

Menuliskan string dengan lebar berbeda
Belajar pemrograman C++
Belajar pemrograman C++
Belajar pemrograman C++
Belajar pemrograman C++

Menuliskan string dengan karakter pengisi .
....Belajar pemrograman C++
......Belajar pemrograman C++
........Belajar pemrograman C++
..........Belajar pemrograman C++

Menuliskan string dengan rata kanan
------SATU
-------DUA
------TIGA
-----EMPAT


Output pada Bilangan Bulat

Yang dimaksud bilangan bulat disini adalah tipe short int, int, unsigned int, long, unsigned long. Ada beberapa format yang dapat dilakukan pada bilangan bulat dengan fasilitas stream, yaitu :
• Basis bilangan bulat (desimal, heksadesimal atau oktal) dapat diubah dengan memanggil fungsi setf atau unsetf diikuti argumen ios::dec, ios::hex atau ios::oct.
• Lebar output yang diformat dapat diubah dengan memanggil fungsi width diikuti argumen lebar yang dikehendaki.
• Alignment (rata kiri atau rata kanan) dapat diubah dengan memanggil fungsi setf atau unsetf diikuti argumen ios::left atau ios::right.
• Karakter pengisi (padding character) dapat diubah dengan memanggil fungsi fill diikuti argumen karakter yang akan digunakan sebagai karakter pengisi.
• Tampilan tanda ‘+’, diubah dengan memanggil fungsi setf atau unsetf diikuti argumen ios::showpos.
• Tampilan huruf (huruf kapital atau huruf kecil) pada bilangan heksadesimal, diubah dengan memanggil fungsi setf atau unsetf diikuti argumen ios::uppercase.

Contoh Output pada bilangan bulat :

#include
#include
#include

void main()
{
int x=3210;
clrscr();

// contoh penggunaan dec, hex dan oct
cout << "Menuliskan bilangan bulat dalam berbagai basis";
cout.setf(ios::dec);
cout << "\nDesimal : " << x;
cout.setf(ios::hex);
cout << "\nHeksadesimal (kecil) : " << x;
cout.setf(ios::uppercase);
cout << "\nHeksadesimal (besar) : " << x;
cout.setf(ios::showbase);
cout << "\nHeksadesimal : " << x;
cout.setf(ios::oct, ios::basefield);
cout << "\nOctal : " << x;
cout.unsetf(ios::showbase);

// contoh penggunaan fill
cout.fill('0');
cout.unsetf(ios::oct);
cout << "\n\nMenuliskan bilangan bulat dengan \ karakter pengisi 0";
cout << "\nLebar 5 : ";
cout.width(5);
cout << x;
cout << "\nLebar 6 : ";
cout.width(6);
cout << x;
cout << "\nLebar 7 : ";
cout.width(7);
cout << x;

// contoh penggunaan showpos
cout << "\n\nMenuliskan bilangan bulat showpos\n";
cout.setf(ios::showpos);
cout << "Desimal : " << x;
cout.setf(ios::hex, ios::basefield);
cout << "\nHeksadesimal : " << x;
cout.setf(ios::oct);
cout << "\nOctal : " << x;
getch();
}

keluaran programnya :

Menuliskan bilangan bulat dalam berbagai basis
Desimal : 3210
Heksadesimal (kecil) : c8a
Heksadesimal (besar) : C8A
Heksadesimal : 0XC8A
Octal : 06212

Menuliskan bilangan bulat dengan karakter pengisi 0
Lebar 5 : 03210
Lebar 6 : 003210
Lebar 7 : 0003210

Menuliskan bilangan bulat showpos
Desimal : +3210
Heksadesimal : C8A
Octal : 6212

Perhatikan bahwa flag untuk ios::showpos hanya dapat digunakan bila bilangan yang diformat adalah bilangan desimal. Untuk bilangan heksadesimal maupun oktal, tanda positif dihilangkan meskipun bilangan tersebut adalah bilangan positif.


Output pada Bilangan Real

Yang dimaksud bilangan real disini adalah tipe data float, double dan long double. Ada beberapa format yang dapat dilakukan pada bilangan real dengan fasilitas stream, yaitu :
• Derajat ketelitian (precision) dapat diubah dengan memanggil fungsi precision diikuti argumen jumlah ketelitian angka yang diinginkan.
• Lebar output dapat diubah dengan memanggil fungsi width diikuti argumen lebar yang dikehendaki.
• Format bilangan real (fixed atau scientific) dapat diubah dengan memanggil fungsi setf diikuti argumen ios::fixed atau ios::scientific.
• Alignment (rata kiri atau rata kanan) dapat diubah dengan memanggil fungsi setf atau unsetf diikuti argumen ios::left atau ios::right.
• Karakter pengisi (padding character) dapat diubah dengan memanggil fungsi fill diikuti argumen karakter yang akan digunakan sebagai karakter pengisi.
• Tampilan tanda ‘+’, diubah dengan memanggil fungsi setf atau unsetf diikuti argumen ios::showpos.
• Tampilan tanda ‘.’ Bila terdapat angka dibelakang koma, diubah dengan memanggil fungsi setf atau unsetf diikuti argumen ios::showpoint.

Contoh output pada bilangan real :

#include
#include

void main()
{
double y=1234.56789;
clrscr();

// contoh penggunaan setprecision
cout << "Menuliskan bilangan real dengan presisi berbeda";
cout << "\nPresisi 3 : ";
cout.precision(3);
cout.width(10);
cout << y;
cout << "\nPresisi 5 : ";
cout.precision(5);
cout.width(10);
cout << y;
cout << "\nPresisi 7 : ";
cout.precision(7);
cout.width(10);
cout << y;
cout << "\nPresisi 9 : ";
cout.precision(9);
cout.width(10);
cout << y;

// contoh penggunaan fixed/scientific
cout << "\n\nMenggunakan notasi fixed/scientific";
cout.setf(ios::scientific | ios::showpos);
cout << "\nScientific : " << y;
cout.setf(ios::fixed);
cout << "\nFixed : " << y;
cout.unsetf(ios::scientific | ios::fixed | ios::showpos);


// contoh penggunaan showpoint
cout << "\n\nMenggunakan showpoint";
double z=123;
cout.setf(ios::showpoint);
cout << "\nShowpoint aktif : " << z;
cout.unsetf(ios::showpoint);
cout << "\nShowpoint non-aktif : " << z;
getch();
}

keluaran program :

Menuliskan bilangan real dengan presisi berbeda
Presisi 3 : 1234.568
Presisi 5 : 1234.56789
Presisi 7 : 1234.56789
Presisi 9 : 1234.56789

Menggunakan notasi fixed/scientific
Scientific : +1.23456789e+03
Fixed : +1234.56789

Menggunakan showpoint
Showpoint aktif : 123.000000000
Showpoint non-aktif : 123


Stream untuk Input
Penggunaan steram untuk input mirip dengan output tetapi yang digunakan adalah karakter >>. Argumen yang digunakan tetap sama, yaitu di kiri adalah objek stream untuk input dan dikanan adalah data yang akan dikenai operasi input. Pada proses input dikenal istilah spasi putih (white space), yaitu karakter pemisah antara satu identifier dengan identifier yang lain. Deklarasi spasi putih ini terletak di header file ctype.h. untuk mengetahui sebuah karakter merupakan spasi putih atau bukan digunakan fungsi isspace (int). Ada beberapa karakter yang biasanya dikenali sebagai spasi putih, yaitu spasi biasa, tab, carriage return, new line, vertical tab, formfeed (kode ASCII dari 09h sampai dengan 0Dh, 20h).




Contoh versi C :
#include

void main()
{
int x, y;
printf(“Masukan dua buah bilangan bulat : “);
scanf(“%d %d”, &x, &y);
printf(“Bilangan itu adalah : %d dan %d”, x, y);
}

Versi C++ :
#include

void main()
{
int x, y;
cout << “Masukan dua buah bilangan bulat : “;
cin >> x >> y;
cout << “Bilangan itu adalah : “ << x << “dan” << y;
}

Ada satu hal yang perlu diperhatikan dalam melakukan operasi input, yaitu input untuk string. Contoh :

#include
#include

void main()
{
char* s = new char [100];
clrscr();
cout << "Masukan sebuah string : ";
cin >> s;
cout << "String yang anda masukan : " << s;
delete [] s;
getch();
}

Keluaran program :

Masukan sebuah string : Belajar pemrograman C++
String yang anda masukan : Belajar

Pertanyaannya mengapa yang muncul hanya string “Belajar” dan string yang lain tidak muncul? jawabannya karena spasi (ASCII 20h) merupakan karakter spasi putih. Karena merupakan spasi putih, maka spasi tersebut dianggap sebagai akhir string. Ada cara tersendiri mengatasi masalah diatas, yaitu mengganti perintah

cin >> s;
Dengan
cin.getline (s, 100);

sehingga sekarang keluaran programnya :

Masukan sebuah string : Belajar pemrograman C++
String yang anda masukan : Belajar pemrograman C++

Input/Output ke Layar

Untuk melakukan I/O kelayar digunakan kelas conbuf dan constream di header file constrea.h. kelas ini menyediakan fasilitas penanganan layar seperti conio.h tetapi dalam versi C++. Output kelayar ini tidak kompatibel dengan windows. Jangan sekali-sekali menggunakan I/O ke console pada pemrograman windows yang sebenarnya.

Ada beberapa manipulator tambahan untuk melakukan output ke layar yang pada intinya sama dengan conio.h. Cara kerja manipulator ini hampir sama dengan yang di conio.h.

Tabel Daftar manipulator untuk I/O ke console

Manipulator Keterangan
clreol Menghapus sampai dengan akhir baris dari jendela teks
delline Menghapus satu baris di jendela teks
highvideo Memilih karakter dengan intensitas terang
insline Menyisipkan satu baris kosong di jendela teks
lowvideo Memilih karakter dengan intensitas rendah
normvideo Memilih karakter dengan intensitas normal
setattr (int) Memberi nilai atribut layar
setbk (int) Memberi nilai warna latar belakang
setclr (int) Memberi nilai warna karakter
setcrstype (int) Mengubah bentuk kursor
setxy (int, int) Menempatkan kursor di posisi tertentu

Related Posts:

0 Response to "Belajar C++ Bagian 1"