atau Lingkaran
7
getchar(); } 1. Modifikasilah program di atas dengan struktur switch. 2. Buatlah program yang dapat menghitung luas, keliling, dan diagonal persegipanjang. Diagonal dihitung dengan rumus: diagonal = akar(panjang2 + lebar2). akar dapat dikerjakan dengan fungsi sqrt(). Masukan berupa panjang dan lebar. Program berupa pilihan untuk luas, keliling, dan diagonal.
8
MODUL 2 Perulangan Teori Singkat Seringkali di dalam program disuruh mengerjakan perintah secara berulang. Struktur perulangan (kalang) digunakan untuk mengulang perintah program secara berulang-ulang (iterasi). Struktur perulangan dalam C++ adalah •
for
•
while
•
do-while
Pada dasarnya, tiga struktur kalang di atas dapat saling menggantikan, artinya program yang ditulis dalam salah satu struktur dapat ditulis dalam bentuk struktur lain. Kalang for mempunyai bentuk: for (
9
yaitu kondisi apakah bilangan <= 100; jika ya maka diteruskan ke pernyataan if di bawahnya. Selanjutnya dikerjakan bagian ketiga, yaitu bilangan++. Perulangan diteruskan ke bagian kedua, pernyataan if, bagian ketiga, bagian kedua lagi, dst. Jika bagian kedua bernilai salah (tidak), maka perulangan dihentikan. Kalang while akan memeriksa kondisi pada awal kalang. Bentuk: while (kondisi) { Perintah } Selama (kondisi) bernilai benar maka blok {Perintah} akan dikerjakan. Pengerjaan blok {Perintah} akan dihentikan jika (kondisi) bernilai salah. Contoh program berikut adalah penggunaan kalang while untuk menghasilkan bilangan genap antara 1 sampai 100. #include
10
main() { int bilangan = 0; do { bilangan++; if (bilangan%2==0) cout<
Buka program dari icon C++ Builder Pilih menu File | New Pilihlan icon Console App (Console Wizard) Tulislah program berikut, gantilah bentuk fungsi main() yang sudah ada dalam editor dengan bentuk dalam program berikut. (kode lain, misalnya #include …, jangan dihapus). Setelah selesai, jalankan dengan menu Run | Run atau F9.
// beberapa baris ini mungkin sudah ada, JANGAN dihapus #include
11
1. Modifikasilah program di atas dengan struktur for. 2. Buatlah program untuk menghitung karakter yang dimasukkan dari keyboard. Pemasukan karakter dengan fungsi getchar(). Penggunaan: char karakter = getchar(); Akhir pemasukan dengan tombol <enter>. Tombol <enter> sama dengan nilai 13. Gunakan struktur perulangan do-while.
12
MODUL 3 Fungsi Teori Singkat Suatu program yang cukup panjang dapat saja ditulis dalam satu fungsi main(). Namun, agar langkah program dapat ditulis dengan baik, program biasanya dipecah kedalam sejumlah subprogram. Subprogram dalam C++ berbentuk fungsi. Dalam C++ tidak dikenal prosedur. Secara sederhana, sekelompok pernyataan dapat diambil, diapit kurung kurawal, dan dinamai, maka menjadi fungsi. Fungsi yang hanya mengerjakan tugas tertentu dan tidak menghasilkan nilai, maka fungsi itu bertipe hasil void. Fungsi seperti ini bertindak sebagai prosedur dalam bahasa lain. Perhatikan contoh berikut. void Tambah() { int a, b, c; a = 3; b = 4; c = a + b: cout << c; } void main() { Tambah(); //pemanggilan fungsi getchar(); } Ada kalanya fungsi mempunyai parameter, maka dalam pemanggilannya juga perlu disertai parameter dengan jumlah dan tipe yang sama dengan pada saat didefinisikan. void Tambah(int a, int b) { int c; c = a + b: cout << c; } void main() { int a = 3; Tambah(a, 4); getchar();
//pemanggilan fungsi
13
} Suatu fungsi yang memberikan hasil, maka tipe void di depan pengenal fungsi diganti dengan tipe lain. Hasil fungsi dikerjakan dengan pernyataan return. int Tambah(int a, int b) { int c; c = a + b: return c; } void main() { int a = 3; int d; d = Tambah(a, 4); //pemanggilan fungsi cout << “d = “ << d << endl; getchar(); } Pelewatan parameter kedalam fungsi adalah dengan cara bagaimana parameter aktual (parameter yang terdapat dalam pemanggilan fungsi) dilewatkan ke parameter formal (parameter yang terdapat dalam definisi fungsi). Pelewatan parameter mempunyai jenis •
pelewatan secara nilai
•
pelewatan secara pointer
•
pelewatan secara referensi
Pelewatan secara nilai adalah parameter aktual dikopikan ke parameter formal, sehingga perubahan yang terjadi pada parameter formal tidak mempengaruhi parameter aktual. Parameter dalam fungsi Tambah() di atas (parameter a dan b) dilewatkan secara nilai. Pelewatan secara pointer adalah parameter berupa pointer. Karena pointer menunjuk ke variabel lain, maka parameter aktual dapat dipengaruhi oleh perubahan nilai variabel yang ditunjuk oleh parameter formal. Berikut, parameter c dalam fungsi Tambah() dilewatkan secara pointer. void Tambah(int a, int b, int* c) {
14
*c = a + b: } void main() { int a = 3; int hasil; Tambah(a, 4, &hasil); //pemanggilan fungsi cout << “hasil = “ << hasil << endl; getchar(); }
Pelewatan secara referensi berperilaku parameter formal sebagai nama alias dari parameter aktualnya. Jadi, perubahan yang terjadi pada parameter formal akan menjadi hasil di parameter aktualnya. Pelewatan parameter secara referensi ditandai dengan karakter & setelah tipe parameter. Berikut, parameter c dalam fungsi Tambah() dilewatkan secara referensi
void Tambah(int a, int b, int& c) { c = a + b: } void main() { int a = 3; int hasil; Tambah(a, 4, hasil); //pemanggilan fungsi cout << “hasil = “ << hasil << endl; getchar(); }
Praktek Program berikut terdapat fungsi Tambah() yang menjumlah semua bilangan ganjil mulai dari isi variabel awal sampai dengan isi variabel akhir. Jika awal bernilai genap maka penjumlahan dimulai dari awal+1.
#include
void Tambah(int a, int b) {
15
int c = 0; int i = a; if((a % 2) == 0) i = a + 1; while (i <= b) { c += i; i +=2; } cout << "Hasil = " << c << endl; } void main() { int awal, akhir, hasil; cout << "Awal = "; cin >> awal; cout << "Akhir = "; cin >> akhir; Tambah(awal, akhir); getchar(); } 1. Modifikasilah fungsi Tambah() agar menghasilkan nilai (return value) dari penjumlahan itu. Dan pemanggilan fungsi Tambah() dalam main() tentunya juga berubah. 2. Buatlah fungsi untuk menghasilkan nilai perpangkatan AB. Perpangkatan dapat dikerjakan dengan rumus: pangkat = exp(B * log(A)) Mungkin Anda perlu menyertakan file header math.h A dan B bertipe float sebagai parameter fungsi. Hasil pangkat ditulis sebagai parameter ketiga berupa pointer. Deklarasi fungsi: void Pangkat(float A, float B, float* hasil) Panggillah fungsi ini dari fungsi main().
16
MODUL 4 Struktur dan Kelas Teori Singkat Seringkali terjadi sejumlah data yang saling berkaitan, misalnya, kode barang, jumlah barang, dan harga satuan. Masing-masing data ini biasanya berbeda tipenya. Sejumlah data dengan tipe berbeda seperti ini dapat dikumpulkan menjadi satu kesatuan membentuk struktur. Data itu di dalam struktur disebut field. Deklarasi struktur: struct TipeStruktur { tipe field1; tipe field2; . . . }; Untuk kasus barang di atas deklarasinya adalah: struct TBarang { char kode[6]; int jumlah; int harga; };
// kode barang bertipe string 5 karakter
Sedangkan deklarasi variabel adalah: TBarang barang; Untuk mengakses variabel barang ini, misalnya: barang.jumlah = 8; strcpy(barang.kode, “BRG01”); // mengisi field kode dengan BRG01 cout << barang.harga << endl;
Tipe struktur (struct) dapat digantikan dengan tipe kelas (class) dengan fieldnya diberi sifat public. Untuk kelas, istilah field diganti dengan anggota. Deklarasi struktur TBarang di atas bila digantikan dengan tipe kelas menjadi:
17
class TBarang { public: char kode[6]; int jumlah; int harga; };
// kode barang bertipe string 5 karakter
Sedangkan untuk deklarasi variabel kelas dan cara mengaksesnya sama dengan tipe struktur. Jadi antara struktur dengan kelas dapat saling menggantikan. Jika anggota anggota hanya berupa data (seperti contoh di atas) dipakai tipe struktur. Secara umum penggunaan kelas adalah bila anggotanya juga berupa fungsi. Anggota berupa data seringkali diberi sifat private, sedangkan bila anggota berupa fungsi seringkali diberi sifat public. Anggota dengan sifat private, artinya bahwa data itu hanya dapat diakses di dalam kelas itu sendiri, tidak dapat diakses lewat variabel kelas. Sedangkan anggota yang diberi sifat public dapat juga diakses dari luar keas itu, misalnya lewat variabel kelas itu. Untuk kasus kelas TBarang di atas, jika ditambahkan anggota berupa fungsi IsiData, yaitu untuk mengisi anggota data adalah: class TBarang { private: char kode[6]; // kode barang bertipe string 5 karakter int jumlah; int harga; public: void IsiData(char kd[], int jml, int hrg) { strcpy(kode, kd); jumlah = jml; harga = hrg; } }; Fungsi anggota IsiData juga dapat ditulis definisi fungsinya di luar kelas, yaitu: class TBarang { private: char kode[6]; int jumlah; int harga;
// kode barang bertipe string 5 karakter
18
public: void IsiData(char kd[], int jml, int hrg); }; void TBarang::IsiData(char kd[], int jml, int hrg) { strcpy(kode, kd); jumlah = jml; harga = hrg; } Variabel bertipe kelas (dalam pemrograman berorientasi objek disebut instan) dapat ditunjuk oleh pointer. Sedangkan untuk mengakses anggota digunakan notasi: pointer->anggota Perhatikan contoh berikut. TBarang barang;
// instan kelas TBarang
TBarang* brg;
// pointer ke kelas TBarang
brg = &barang;
// brg disuruh menunjuk ke barang
// mengakses fungsi IsiData dari instan barang barang.IsiData(“BRG01”, 8, 2000); // mengakses fungsi IsiData dari pointernya brg->IsiData(“BRG01”, 8, 2000);
Praktek 1. Tulislah program berikut lewat ConsoleWizard pada C++Builder. #include <string.h> #include
19
{ strcpy(kode, kd); jumlah = jml; harga = hrg; } void TBarang::Cetak() { cout << "kode barang = " << kode << endl << "jumlah barang = " << jumlah << endl << "harga barang = " << harga << endl; } void main() { TBarang barang; barang.IsiData("BRG01", 8, 2000); barang.Cetak(); getchar(); } 2. Modifikasilah fungsi main sehingga data mengenai barang (kode, jumlah, harga) dimasukkan dari keyboard (lewat cin). Baru kemudian panggillah fungsi IsiData. 3. Tambahkan fungsi anggota JumlahHarga, yang menghitung harga x jumlah. 4. Tambahkan ke dalam fungsi main, variabel pointer ke TBarang dan menunjuk ke instan barang. Panggilah fungsi anggota dari TBarang lewat pointernya.