Rabu, 21 Desember 2011

Input dan Output di C++

Untitled Document

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 <iostream.h>

#include <conio.h>



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 <iostream.h>

#include <conio.h>



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 <iostream.h>

#include <conio.h>



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 <iostream.h>

#include <conio.h>



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 <iostream.h>

#include <conio.h>

void main()

{

int x=10;

printf(“Bilangan = %4d”, x);

}



versi C++ :

#include <iostream.h>

#include <conio.h>

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 <iostream.h>

#include <conio.h>

void main()

{

int x=10;

printf(“Bilangan = %04d”, x);

}



versi C++ :

#include <iostream.h>

#include <conio.h>

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 <iostream.h>

#include <conio.h>

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 <iostream.h>

#include <conio.h>

void main()

{

float y=123.45;

printf(“Bilangan = %10.2f\n”, y);

}



versi C++ :

#include <iostream.h>

#include <conio.h>

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 <iostream.h>

#include <conio.h>

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 <iostream.h>

#include <conio.h>



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 <iostream.h>

#include <conio.h>



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 <iostream.h>

#include <conio.h>



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 <iostream.h>

#include <conio.h>



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 <iostream.h>

#include <conio.h>

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 <iostream.h>

#include <conio.h>



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

Tidak ada komentar:

Posting Komentar