• Tidak ada hasil yang ditemukan

LSP Telematika. Cover

N/A
N/A
Protected

Academic year: 2021

Membagikan "LSP Telematika. Cover"

Copied!
350
0
0

Teks penuh

(1)
(2)

Daftar Isi

Daftar Isi... 2

Kata Pengantar ... 5

C++ ... 6

Bab I Pengenalan C++ ... 7

1.1 Konsep Kompilasi dan Eksekusi Progam ... 8

1.2 Kerangka Program C++... 8

1.3 Komentar /(Comment) ... 10

1.4 Fungsi Input dan Output ... 12

Soal Latihan ... 14

Soal Praktek ... 15

BAB II Dasar Pemrograman C++ ... 16

2.1 Identifier ... 16

2.2 Konstanta ... 17

2.3 Variabel... 20

2.4 Tipe Data... 25

2.5 Keyword pada C++ ... 30

2.6 Pointer dan Reference ... 30

Soal Latihan ... 40

Soal Praktek ... 40

BAB III Pemrograman Lanjut... 41

3.1 Operator... 41 3.2 Array ... 47 3.3 Struktur Percabangan... 56 3.4 Struktur Pengulangan... 61 3.5 Pemrograman Jaringan ... 66 Soal Latihan ... 70 Soal Praktek ... 70

BAB IV Pemrograman Berorientasi Objek ... 71

4.1 Konsep Dasar OOP ... 71

4.2 Kelas dan Objek ... 73

4.3 Pewarisan Sifat Objek... 76

4.4 Polimorfisme (Polymorphism) ... 82

4.5 Fungsi... 83

Soal Latihan ... 90

Soal Praktek ... 90

Borland Delphi ... 91

BAB I Borland Delphi Programming ... 92

1.1 Menjalankan Borland Delphi ... 93

1.2 Pemrograman dalam Lingkungan Visual ... 98

Soal Latihan ...101

BAB II Pemrograman Borland Delphi ...103

2.1 Komentar Pada Kode ...103

2.2 Identifier ...103

2.3 Kata Kunci (Reserved Word) dan Directive...103

2.4 Compiler Directive ...104

2.5 Unit ...105

2.6 Initialization dan Finalization ...107

2.7 Konstanta ...109

(3)

2.9 Tipe Data...111

2.10 Struktur Percabangan dan Pengulangan ...115

2.11 Array...118

2.12 Pemrograman Berorientasi Objek ...119

Soal Latihan ...122

Soal Praktek ...122

BAB III FORM...123

3.1 Property ...123

3.2 Bekerja dengan Banyak Form ...126

3.3 Komponen Dalam Delphi...128

Soal Latihan ...130

Soal Praktek ...131

BAB IV Aplikasi Basis Data di Delphi ...132

4.1 Tipe Database ...132 4.2 Aplikasi MyBase...136 4.3 Manipulasi Data ...140 4.4 dbExpress...144 Soal Latihan ...146 Soal Praktek ...147

Visual Basic .NET...148

BAB I Pengenalan VB .NET ...149

1.1 Apa itu VB .NET ...150

1.2 Fitur Baru dalam VB .NET...150

1.3 .NET Framework ...154

1.4 Lingkungan Pemrograman VB .NET...159

Soal Latihan ...174

BAB II Forms dan Kontrol ...176

2.1 Mengenal Kontrol...176

2.2 Form Windows...180

2.3 Aplikasi MDI (Multiple Document Interface) ...185

2.4 Kotak Pesan dan Kotak Input...189

Soal Latihan ...193

Soal Praktek ...193

BAB III Pemrograman VB .NET ...194

3.1 Variabel...194

3.2 Tipe Data dan Structure...198

3.3 Operator...200

3.4 Penanganan Kesalahan (Error Handling)...204

3.5 Alur Percabangan (Selection)...206

3.6 Struktur Pengulangan (Iteration) ...209

3.7 Debugging ...213

3.8 COM dan ActiveX ...218

Soal Latihan ...219

Soal Praktek ...220

BAB IV Pemrograman Lanjut ...221

4.1 Array ...221

4.2 Prosedur dan Subrutin ...223

4.3 Fungsi...225

4.3 Pemrograman Berorientasi Objek ...230

4.4 ADO .NET ...252

Soal Latihan ...258

(4)

Visual Basic ...259

BAB I VISUAL BASIC ...260

1.1 Menjalankan Visual Basic ...261

1.2 Konsep...265

Soal Latihan ...267

BAB II Form dan Kontrol...269

2.1 Dasar-dasar Penggunaan Kontrol (Program “Hello World”) ...269

2.2 Menu dan Kotak Dialog ...271

2.3 Menggunakan Objek Common Dialog...275

Soal Latihan ...280

Soal Praktek ...280

BAB III Pemrograman Visual Basic ...282

3.1 Variabel...282

3.2 Fungsi ...291

3.3 Bekerja dengan Tipe Data Tertentu ...291

3.4 Operator...294

3.5 Struktur Keputusan...299

3.6 Struktur Perulangan ...308

Soal Latihan ...312

Soal Praktek ...313

BAB IV Pemrograman Lanjut ...314

4.1 Modul...314

4.2 Menulis Prosedur Function...318

4.3 Bekerja dengan Koleksi ...324

4.4 Array ...326

Soal Latihan ...336

Soal Praktek ...337

Jawaban Soal...338

(5)

Kata Pengantar

Jenis bahasa pemrograman yang berkembang dewasa ini salah satunya adalah bahasa pemrograman desktop. Beberapa bahasa yang termasuk jenis ini adalah C++, delphi, Visual Basic .NET dan Visual Basic. Buku ini akan membahas mengenai seluk beluk bahasa-bahasa tersebut, selain itu buku ini juga dilengkapi dengan tujuan serta tik akan diperoleh pembaca. Daftar tik yang dipenuhi oleh materi yang ada di buku ini adalah :

TIK.PR02.002.01 Membuat algoritma pemrograman lanjut. TIK.PR02.003.01 Membuat struktur data.

TIK.PR02.004.01 Menggunakan spesifikasi program. TIK.PR02.005.01 Menulis program dasar.

TIK.PR02.006.01 Menulis program lanjut.

TIK.PR02.008.01 Mengoperasikan pemrograman terstruktur.

TIK.PR02.009.01 Mengoperasikan bahasa pemrograman berorientasi obyek. TIK.PR08.002.01 Membuat program aplikasi berbasis Delphi

TIK.PR08.003.01 Membuat program aplikasi berbasis VB dan VB.NET TIK.PR08.001.01 Membuat program aplikasi berbasis C++

Sedangkan gambaran umum dari materi yang dibahas dalam buku ini ditunjukkan pada gambar di bawah ini :

Harapan penulis, kiranya buku ini akan berguna untuk memperdalam pengetahuan pembaca mengenai bahasa C++, Delphi, Visual Basic serta Visual Basic .NET.

(6)
(7)

Bab I Pengenalan C++

Tujuan Instruksional Umum :

1. Siswa dapat menyebutkan berbagai tipe data C++ 2. Siswa dapat menjelaskan fungsi dalam C++ 3. Siswa dapat menjelaskan konsep OOP Tujuan Instruksional Khusus :

1. Siswa dapat membuat program C++

2. Siswa dapat membuat program C++ dengan operator 3. Siswa membuat program dengan fungsi

Materi yang ada di bab ini memenuhi :

TIK.PR02.002.01 Membuat algoritma pemrograman. TIK.PR02.003.01 Membuat struktur data.

TIK.PR02.004.01 Menggunakan spesifikasi program. TIK.PR02.005.01 Menulis program dasar.

TIK.PR02.006.01 Menulis program lanjut.

TIK.PR02.008.01 Mengoperasikan bahasa pemrograman terstruktur.

TIK.PR02.009.01 Mengoperasikan bahasa pemrograman berorientasi obyek. TIK.PR08.001.01 Membuat program aplikasi berbasis C++

(8)

Bahasa C++ didasarkan pada bahasa pemrograman C sehingga kita dapat melakukan kompilasi program-program yang ditulis dalam bahasa C dengan menggunakan Compiler C++. Keistimewaan dari bahasa C++ adalah karena bahasa ini mendukung pemrograman berarah objek atau yang lebih sering dikenal dengan istilah Object Oriented Programming (OOP).

Sejak dikembangkan, bahasa C++ banyak digunakan untuk mengembangkan program-program aplikasi di bidang telekomunikasi, finansial atau bisnis dan sistem operasi.

1.1 Konsep Kompilasi dan Eksekusi Progam

Berikut ini gambar yang mengilustrasikan proses kompilasi dan eksekusi program di dalam C/C++.

1.2 Kerangka Program C++

Setiap program yang ditulis dalam bahasa C/C++ pasti akan memiliki sebuah fungsi utama dengan nama main(). Selanjutnya jika kita ingin mendefinisikan fungsi-fungsi lain maka kita akan melakukannya di luar fungsi utama

assembler

Link editor

compiler

preprocessor

kode program (source code)

Kode assembly

Kode objek

library

(9)

tersebut. Dalam C++, kode yang dibaca adalah kode-kode yang terdapat pada fungsi utama. Jika ternyata terdapat pemanggilan fungsi lain, maka progam akan mencari nama fungsi tersebut untuk dieksekusi. Setelah mengeksekusi fungsi tersebut, maka program akan kembali ke dalam fungsi utama, begitu seterusnya.

Sebagai bahan perbandingan, dibawah ini akan diberikan kerangka umum yang ditulis dalam bahasa C++.

Sintaks untuk fungsi utama dapat dilihat pada kode program berikut ini:

Adapun kerangka lengkap dari program yang ditulis dalam C++ adalah seperti terlihat dibawah ini

Perlu untuk diperhatikan bahwa file header yang digunakan dalam bahasa C++ untuk proses input/output(I/O) standar adalah iostream.h, sedangkan di dalam bahasa C file header yang digunakan untuk keperluan yang sama adalah stdio.h. int main(){ Statement_yang_akan_dilakukan; ... return 0; } #include<iostream.h> //Prototype fungsi

tipe_data nama_fungsi1(parameter1, parameter2, ...) tipe_data nama_fungsi2(parameter1, parameter2, ...) ... //Fungsi utama int main(){ Statement_yang_akan_dilakukan; ... return 0; }

tipe_data nama_fungsi1(parameter1, parameter2, ...){ Statement_yang_akan_dilakukan;

... }

tipe_data nama_fungsi2(parameter1, parameter2, ...){ Statement_yang_akan_dilakukan;

... }

(10)

Berikut ini program sederhana yang ditulis dalam bahasa C++ (Cin_Cout.cpp)

Hasil yang akan diberikan dari program di atas adalah sebagai berikut:

File header (file dengan ekstensi .h) adalah file yang berisi fungsi-fungsi dan

telah dikompilasi sebelumnya. Apabila kita akan menggunakan suatu file header tertentu, maka kita akan mendaftarkannya melalui directive

#include. Sebagai contoh, di kode program, kita akan menggunakan fungsi getch. Fungsi tersebut terdapat dalam file header conio.h, maka kita akan

melakukan pendaftaran dalam program kita melalui sintaks berikut: #include<conio.h>

Setiap kita menggunakan fungsi tertentu maka kita harus mendaftarkan file header-nya.

1.3 Komentar /(Comment)

Dalam proses pengembangan sebuah program, tentunya kita disibukkan dengan penulisan sintaks-sintaks yang begitu banyak dan tampak rumit sehingga akan sulit untuk dipahami oleh orang lain. Untuk menangani masalah ini, sebagai programmer sebaiknya kita menambahkan komentar

#include<iostream.h>

int main(){

int x;

//menampilkan teks untuk informasi

cout<< “Masukkan sebuah bilangan bulat:”;

//membaca nilai dari keyboard dan //menyimpannya ke dalam variabel x cin>>x;

//menampilkan nilai yang telah dimasukkan

cout<< “Bilangan yang telah Anda masukkan adalah ” <<x;

return 0;

}

Masukkan sebuah bilangan bulat: 10

(11)

untuk menjelaskan algortima dan keterangan-keterangan yang diperlukan dalam program. Hal ini akan membantu dalam proses pemeliharaan (maintenance) dari program yang telah kita buat.

Secara definisi, komentar adlaah bagian dari sintaks program yang tidak ikut dibaca pada saat proses kompilasi. Dengan kata lain, komentar tidak akan mempengaruhi jalannya program. Dalam bahasa C++, komentar dibagi menjadi dua jenis yaitu komentar yang hanya terdiri dari satu baris dan komentar yang terdiri dari beberapa baris. Berikut ini penjelasannya.

Menggunakan tanda //

Tanda ini digunakan untuk menuliskan komentar yang banyaknya hanya satu baris. Gaya penulisan komentar seperti ini hanya terdapat pada C++, sedangkan pada bahasa C tidak akan dikenali. Jika kita menggunakan tanda ini untuk menuliskan komentar yang lebih dari satu baris, maka teks di belakang tanda // tetap menjadi komentar tapi teks yang terdapat pada baris selanjutnya akan tetap dibaca oleh compiler sehingga akan menyebabkan terjadinya kesalahan (error) pada saar proses kompilasi program. Berikut ini adalah contoh penggunaannya.

//Ini adalah komentar untuk satu baris

Namun perhatikan, bagaimana jika komentar di atas dituliskan seperti berikut:

//Ini adalah komentar untuk satu baris

Penulisan di atas akan menyebabkan kesalahan, karena teks “untuk satu baris” tidak akan dianggap sebagai komentar melainkan akan dianggap sebagai tiga buah identifier yang tidak dikenal.

Menggunakan tanda /*...*/

Berbeda dengan tanda //, tanda ini dapat digunakan untuk menuliskan komentar yang banyaknya satu baris atau lebih. Komentar dimulai dari tanda /* sampai ditemukan tanda */. Contoh penggunaannya dapat dilihat di bawah ini:

/* Ini adalah komentar yang banyaknya satu baris*/ /* Ini adalah komentar panjang

(12)

lebih dari satu baris*/

Dengan menggunakan tanda ini kita juga dapat menggunakan komentar yang berupa sisipan. Misalnya pada penulisan sintaks di bawah ini:

int /* file ini digunakan untuk proses I/O pada C++*/ x;

1.4 Fungsi Input dan Output

Cin dan Cout

Cin merupakan suatu stream yang akan merespon proses input yang dilakukan. Stream ini hanya tersedia jika kita memasukkan file header iostream.h di dalam program yang kita buat. Adapun operator yang digunakan adalah operator >>.

Dalam C++, untuk melakukan output ke peralatan standar, yaitu layar (screen) adalah dengan cara menggunakan stream cout. Adapun operator yang digunakan adalah operator <<. Operator ini juga telah di overload sehingga dapat digunakan untuk berbagai macam tipe data.

Sebagai contoh, berikut ini contoh program yang menunjukkan penggunaan stream cin dan cout.

Cin_Cout2.cpp

Input dan Output pada File

#include<iostream.h> int main(){ int x,y,z; cout<<”Masukkan nilai x: ”; cin>>x; cout<<”Masukkan nilai y: ”; cin>>y; cout<<”Masukkan nilai z: ”; cin>>z; cout<<”Nilai x : ”<<x<<endl; cout<<”Nilai y : ”<<y<<endl; cout<<”Nilai z : ”<<z<<endl; return 0; }

(13)

Dalam bahasa C++, kita membuka file dengan menghubungkannya dengan sebuah stream. Setelah mendeklarasikan variabel stream, langkah selanjutnya adalah menghubungkannya ke file dengan cara memanggil fungsi open. Untuk membaca dan menuliskan teks ke file sama mudahnya dengan melakukan input dan output terhadap I/O console dengan menggunakan stream yang kita deklarasikan sendiri dan telah terhubung dengan sebuah

file. Berikut ini adalah contoh kode untuk membuat sebuah file :

ReadFile.cpp

#include<iostream.h> #include<fstream.h> int main() {

// Mendeklarasikan strem untuk proses output

ofstream output;

output.open(“coba.txt”);

// Melakukan pencegahan terhadap terjadinya error

if(!output) {

cout<<”File tidak dapat dibuka”;

return 1;

}

// Menuliskan teks ke dalam file tersebut output<<”Menulis ke sebuah file”;

// Menutup file

output.close();

return 0;

}

Untuk melakukan proses penulisan dan pembacaan data, kita menggunakan fungsi put dan get. Fungsi put untuk menuliskan data sedangkan fungsi get untuk membaca data. Untuk data biner, terdapat cara lain untuk proses penulisan dan pembacaan yaitu dengan fungsi write dan read. Berikut ini adalah contoh kode untuk penggunaan fungsi put dan get :

ReadWrite.cpp #include<iostream.h> #include<fstream.h> int main() { ofstream output; ifstream input;

(14)

output.open("h:/test.txt"); if(!output ) {

cout<<"File tidak dapat dibuka"; return 1; } int C = 65; while(char(C) <= 'Z') { output.put(char(C)); C++; } output.close(); input.open("h:/test.txt"); if(!input) {

cout<<"File tidak dapat dibuka"; return 1; } char B; while(input) { input.get(B); if(input) cout<<B; } input.close(); return 0; }

Soal Latihan

1. Sebuah fungsi yang akan ada di setiap program C++ dinamakan fungsi :

a. compile() b. count() c. directive() d. main()

2. Untuk menuliskan komentar yang panjangnya hanya satu baris dengan simbol:

(15)

b. /* .... */ c. << d. <!-- ... -->

3. fungsi Cin dan Cout dapat digunakan jika file .... diikutsertakan dalam program: a. conio.h b. iostream.h c. stdio.h d. stdlib.h

Soal Praktek

4. Buatlah sebuah program C++ yang menerima input berupa umur user dan menampilkan kembali input dari user.

5. Buatlah sebuah file yang berisi nama-nama buah kemudian buat program C++ untuk menampilkan isi file tersebut.

(16)

BAB II Dasar Pemrograman C++

2.1 Identifier

Identifier adalah suatu pengidentifikasian yang berfungsi untuk menampung

sebuah nilai yang digunakan dalam program. Identifikasi ini dilakukan untuk mempermudah proses penanganan data atau nilai, misalnya untuk memasukkan dan menampilkan nilai. Sebagai gambaran, di bawah ini adalah sebuah contoh program yang menggunakan dua buah identifier di dalamnya.

Pada program di atas kita mempunyai dua buah identifier, yaitu Teks dan x. Pada saat program dijalankan, identifier tersebut akan digunakan untuk menyimpan nilai yang dimasukkan dari keyboard. Dalam C++, proses penyimpanan nilai seperti ini dinyatakan dengan statemen cin. Berbeda dengan statemen cout yang menggunakan operator <<, pada statement cin operator yang digunakan adalah operator >>.

Dalam menentukan atau membuat identifier dalam program, kita harus memperhatikan hal-hal berikut:

1. Karena bahasa C++ bersifat case sensitive, maka C++ juga akan membedakan variabel yang ditulis dengan huruf kapital dan huruf kecil. Misalnya variabel A tentunya akan berbeda dengan variabel a.

#include<iostream.h>

int main() {

char Teks[20]; int x;

cout<<”Masukkan sebuah kata :”; cin>>Teks;

cout<<”Masukkan sebuah angka :”;

cin>>x; //bisa ditulis dengan cout<<x<<’\n’;

cout<<x; return 0; }

(17)

2. Identifier tidak boleh berupa angka atau diawali dengan karakter berupa angka

Contoh: long 1000; //SALAH karena identifier berupa angka

long 2x; // SALAH karena identifier diawali oleh karakter berupa angka

long x2; //BENAR karena identifier tidak diawali oleh angka 3. Identifier tidak boleh mengandung spasi

Contoh: int Bilangan Bulat; //SALAH karena identifier mengandung spasi int Bilangan_Bulat; //BENAR

int BilanganBulat; //BENAR int _BilanganBulat; //BENAR

4. Identifier tidak boleh menggunakan karakter-karakter simbol (#, @, ?, !, $, dll)

Contoh: long!satu; // SALAH long dua@; //SALAH long ti#ga; // SALAH

5. Identifier tidak boleh menggunakan kata kunci (keyword) yang terdapat pada C++.

Contoh: long break; // SALAH karena menggunakan keyword break long return; // SALAH karena menggunakan keyword return 6. Nama identifier sebaiknya disesuaikan dengan kebutuhannya, artinya

jangan sampai orang lain bingung hanya karena salah dalam penamaan

identifier. Sebisa mungkin, hindarilah penggunaan nama identifier yang

sama dengan identifier yang digunakan oleh C++.

Berdasarkan jenisnya, identifier sendiri dibagi ke dalam dua bagian yaitu konstanta dan variabel. Adapun penjelasan lebih detilnya dapat Anda dapat lihat pada sub bab berikut ini.

2.2 Konstanta

Konstanta adalah jenis identifier yang bersifat konstan atau tetap, artinya nilai dari konstanta di dalam program tidak dapat diubah. Konstanta berguna

(18)

untuk menentukan nilai yang merupakan tetapan, misalnya nilai phi, kecepatan cahaya dan lainnya. Dengan mendefinisikan konstanta yang bersifat global, maka kita dapat menggunakannya di setiap bagian program. Dengan C++, terdapat dua buah cara untuk membuat sebuah konstanta, yaitu dengan menggunakan preprocessor directive #define dan menggunakan keyword const.

1. Menggunakan Preprocessor Directive #define

Kita dapat menggunakan makro untuk mendefinisikan sebuah konstanta, yaitu dengan menggunakan preprocessor directive #define. Untuk mengetahui lebih jauh tentang manfaat penggunaan konstanta, perhatikan program di bawah ini.

#include<iostream.h> int main(){ int A[5]; for (int C=0; C<5;C++){ A[C] = C * 10; } for (int c=0;c<5;c++){ cout<<A[c]; } return 0; }

Untuk sintaks lainnya akan dijelaskan pada bagian berikutnya. Yang perlu diperhatikan adalah, angka 5 pada program di atas beberapa kali muncul. Jika kita hendak mengubah angka 5 tersebut dengan angka 10 maka akan terjadi beberapa pergantian angka tersebut. Untuk itu, dalam kasus ini sebaiknya kita menjadikan bilangan 5 tersebut ke dalam suatu konstanta sehingga jika terjadi perubahan kita hanya melakukan perubahan nilai terhadap konstantanya saja. Berikut ini merupakan program perbaikan dari program sebelumnya.

#include<iostream.h>

#define MAX 5; int main(){

(19)

for (int C=0; C< MAX; C++){ A[C] = C * 10;

}

for (int c=0;c< MAX;c++){ cout<<A[c]; }

return 0; }

2. Menggunakan keyword Const

Selain dari car di atas, dalam C++ kita dapat mendefinisikan sebuah konstanta dengan menggunakan keyword const. Berikut ini adalah bentuk umumnya.

const tipe_data nama_konstanta = nilai_tetapan;

Contoh pendeklarasian konstanta-konstanta adalah sebagai berikut: const double PI = 3.14;

const int NILAI_MAX = 100; const char MyChar = ‘A’;

Untuk lebih memahaminya, berikut ini dituliskan sebuah sintaks program yang merupakan implementasi dari penggunaan keyword const.

#include<iostream.h> const int MAX 5; int main(){

int A[MAX];

for (int C=0; C< MAX; C++){ A[C] = C * 10;

}

for (int c=0;c< MAX;c++){ cout<<A[c]<<endl; }

return 0; }

(20)

2.3 Variabel

Berbeda dengan konstanta yang mempunyai nilai tetap, variabel adalah sebuah identifier yang mempunyai nilai dinamis. Arti kata dinamis disini bermaksud bahwa nilai variabel tersebut dapat kita ubah sesuai kebutuhan dalam program. Berikut ini adalah bentuk umum pendeklarasian sebuah variabel dalam C++.

tipe_data nama_variabel;

Sebenarnya bentuk umum ini sudah dijelaskan pada bagian awal yakni pada bagian yang menerangkan pendeklarasian identifier, hanya disini lebih dikhususkanlagi, yaitu hanya untuk variabel.

Jika kita mendeklarasikan beberapa variabel yang bertipe sama maka kita dapat menyingkat penulisannya dengan menggunakan bentuk umum di bawah ini.

tipe_data nama_variabel1, nama_variabel2, nama_variabel3;

Contoh:

int A, B, C;

sedangkan kalo kita ingin melakukan inisialisasi, maka sintaksnya dapat di ganti dengan menggunakan sintaks berikut;

int A=10, B=15, C=25;

1. Variabel Global

Jika kita sedang membuat program dan kita membutuhkan sebuah variabel yang dapat dikenali oleh semua lingkungan dalam program kita, maka kita harus mendefinisikan variabel tersebut sebagai variabel yang bersifat global. Kita telah mengetahui bahwa program dalam bahasa C++ selalu terdapat fungsi utama dengan nama main. Jika kita mendeklarasikan sebuah variabel di luar fungsi, maka dengan sendirinya

compiler akan menganggap variabel tersebut sebagai variabel global.

Berikut ini adalah contoh program yang menunjukkan penggunaan variabel yang bersifat global.

(21)

#include<iostream.h>

int A; /*vaiabel A adalah variabel global karena dideklarasikan di luar fungsi*/

//Membuat fungsi utama int main(){ A=10; cout<<”Nilai A=”<<A; return 0; } 2. Variabel Lokal

Berbeda dengan variabel global, variabel lokal adalah variabel yang hanya dikenal oleh lingkungan luar di dalam program yang kita buat. Adapun bentuk pendeklarasian variabel yang bersifat lokal ini harus berada dalam lingkup fungsi yang dimaksud. Berikut ini contoh pendeklarasian variabel yang bersifat lokal.

Jika kita menambahkan fungsi lain di dalam program, dan kita mengakses variabel A yang telah dideklarasikan di dalam fungsi main, maka program tidak akan dijalankan karena fungsi baru yang kita tambahkan tentu tidak dapat mengenali variabel A di atas. Hal ini merupakan bukti nyata bahwa variabel A di atas bersifat lokal

Inisialisasi Variabel

Dalam penulisan program ada saatnya kita harus melakukan inisialisasi nilai terhadap sebuah variabel yang dideklarasikan. Artinya jika kita tidak melakukan pengisian nilai terhadap variabel tersebut, maka variabel masih

#include<iostream.h>

//Membuat fungsi utama int main(){

int A; /*vaiabel A bersifat lokal dan hanya dikenali oleh fungsi main*/

A=10;

cout<<”Nilai A=”<<A<<endl; return 0;

(22)

berisi nilai default. Hal ini sebenarnya sudah disinggung di atas, namun disini akan dibahas melalui contoh program.

Berikut ini merupakan contoh program yang tidak melakukan inisialisasi nilai awal.

#include<iostream.h> int main(){

int x; /*menampilkan nilai x sebelum dilakukan pemasukan nilai

(assignment) */

cout<<”Nilai x sebelum dilakukan assignment:” ; x=10;

cout<<”Nilai x setelah dilakukan assignment:” ; return 0;

}

Hasil dari program di atas adalah sebagai berikut: Nilai x sebelum dilakukan assignment: 0 Nilai x sesudah dilakukan assignment:10

Pada hasil di atas dapat kita lihat bahwa jika kita tidak melakukan inisialisasi dan kita sudah memanggil variabel tersebut, maka nilai yang akan ditampilkan oleh compiler adalah nilai 0.

Variabel Statis

Variabel statis adalah variabel yang menempati ruang memori komuter secara permanen, artinya nilai terakhir dari variabel ini akan terus disimpan. Dalam C++, untuk menyatakan variabel statis adalah dengan menggunakan

keyword static. Adapun bentuk umum pendeklarasiannya adalah sebagai

berikut:

static tipe_data nama_variabel;

Seperti halnya variabel biasa, variabel statis ini juga dibagi ke dalam dua jenis, yaitu variabel lokal dan variabel statis global.

1. Variabel statis lokal

Variabel statis lokal ini diterapkan di dalam suatu fungsi sehingga nama variabelnya hanya akan dikenali di dalam fungsi saja. Namun perlu diperhatikan bahwa nilai terakhir yang dihasilkan akan terus disimpan.

(23)

Dengan demikian setiap pemanggilan fungsi yang sama pasti akan memberikan hasil yang berbeda.

Untuk melihat perbedaan penggunaan variabel statis ini perhatikan kedua program ini dan output kedua program:

Menggunakan variabel biasa:

#include<iostream.h>

//Membuat fungsi dengan nama contoh int contoh(){

int A =0; //mendeklarasikan variabel biasa A = A + 10;

return A; }

int main(){

int x,y,z; //mendeklarasikan variabel x, y, z

x = contoh(); //memanggil fungsi contoh untuk pertama y = contoh(); //memanggil fungsi contoh untuk kedua z = contoh(); //memanggil fungsi contoh untuk ketiga

//menampilkan nilai yang telah diproses di dalam fungsi cout<<”Nilai fungsi pada pemanggilan pertama: ”<<x; cout<<”Nilai fungsi pada pemanggilan kedua: ”<<y; cout<<”Nilai fungsi pada pemanggilan ketiga: ”<<z;

return 0; }

Hasil yang akan diperoleh dapat dilihat di bawah ini: Nilai fungsi pada pemanggilan pertama: 10 Nilai fungsi pada pemanggilan kedua: 10 Nilai fungsi pada pemanggilan ketiga: 10

(24)

Menggunakan variabel statis

#include<iostream.h>

//Membuat fungsi dengan nama contoh int contoh(){

static int A =0; //mendeklarasikan variabel statis lokal A = A + 10;

return A; }

//fungsi utama int main(){

int x,y,z; //mendeklarasikan variabel x, y, z

x = contoh(); //memanggil fungsi contoh untuk pertama y = contoh(); //memanggil fungsi contoh untuk kedua z = contoh(); //memanggil fungsi contoh untuk ketiga

//menampilkan nilai yang telah diproses di dalam fungsi cout<<”Nilai fungsi pada pemanggilan pertama: ”<<x<<endl; cout<<”Nilai fungsi pada pemanggilan kedua: ”<<y<<endl; cout<<”Nilai fungsi pada pemanggilan ketiga: ”<<z<<endl;

return 0; }

Hasil yang akan diperoleh dapat dilihat di bawah ini: Nilai fungsi pada pemanggilan pertama: 10 Nilai fungsi pada pemanggilan kedua: 20 Nilai fungsi pada pemanggilan ketiga: 30

Jika kita amati hasil program di atas, nilai dari setiap pemanggilan fungsi akan memberikan hasil yang berbeda. Konsepnya sederhana yaitu pemanggilan fungsi yang pertama kali nilai variabel A masih bernilai 0. Fungsi akan menambahkan nilai tersebut dengan 10, maka nilai yang dikembalikan fungsi contoh adalah 10. Sampai disini, karena variabel A adalah variabel statis maka pada saat pemanggilan fungsi yang kedua, variabel A masih menyimpan nilai 10, bukan 0. Dengan demikian pemanggilan fungsi kedua tentu akan menambahkan nilai A dengan nilai 10, sehingga nilai yang dikembalikan adalah 20 dan begitu seterusnya.

2. Variabel statis global

Dalam memprogram dengan bahasa C++, kita diizinkan untuk melakukan pembuatan fungsi-fungsi dalam file yang terpisah dari program utama.

(25)

Untuk kasus-kasus tertentu dimana variabel statis lokal tidak dapat digunakan, kita dapat membuat file terpisah yang mempunyai variabel statis global.

Sebagai gambaran dari pemahaman materi ini, perhatikanlah contoh penggunaannya dalam potongan sintaks program di bawah ini.

2.4 Tipe Data

Tipe data berfungsi untuk merepresentasikan jenis dari sebuah nilai yang terdapat dalam program. Sebagai contoh kita mempunya suatu data dengan nilai 2, maka 2 termasuk ke dalam tipe bilangan bulat. Begitupun dengan data yang bernilai “Makan yuk”, maka data tersebut dikategorikan ke dalam tipe teks (string).

Kesalahan dalam menyebutkan tipe data akan menyebabkan program yang kita buat tidak dapat dijalankan. Oleh karena itu, kita harus pandai dalam menentukan tipe data yang akan digunakan sesuai kebutuhan program yang kita buat.

Dalam bahasa C++ tipe data dibagi menjadi tiga bagian besar yaitu tipe dasar, tipe bentukan, dan tipe enumerasi.

static int A; //mendeklarasikan variabel statis global

void set_NilaiA(int aa); int get_NilaiA();

void set_NilaiA(int aa){ A = aa; } Int get_NilaiA(){ A = A + 10; Return A; }

(26)

1. Tipe Data Dasar

Dalam C++ terdapat beberapa tipe data dasar yang telah didefinsikan, yaitu yang digolongkan ke dalam tipe bilangan bulat (integer), bilangan desimal (floating-point), tipe logika (boolean), tipe karakter/teks (character/string). Tipe-tipe ini adalah tipe yang siap digunakan tanpa adanya proses manipulasi terlebih dahulu.

Tipe Bilangan Bulat

Tipe data ini digunakan untuk data-data angka yang tidak mengandung angka di belakang koma, misalnya 2, 21, 78, dll. Tipe data yang termasuk ke dalam kategori ini dapat dilihat pada tabel di bawah ini:

Tabel 2.2.4.1 : Daftar Tipe Bilangan Bulat

Tipe Data Ukuran (dalam bit) Rentang

int 16 atau 32 -32.767 sampai 32.767

unsigned int 16 atau 32 0 sampai 65.535

sign int 16 atau 32 Sama seperti int

short int 16 -32.767 sampai 32.767

unsigned short int 16 0 sampai 65.535

signed short int 16 Sama seperti short int

long int 16 -2.147.483.647 sampai

2.147.483.647

signed long int 32 sama seperti long int

unsigned long int 32 0 sampai 4.294.967.295

Tipe Bilangan Desimal

Tipe ini adalah tipe yang merepresentasikan data-data bilangan yang mengandung angka di belakang koma, misalnya 3.21, 2.88, dll. Adapun tipe data yang termasuk ke dalam kategori ini adalah:

Tabel 2.2.4.2 : Daftar Tipe Bilangan Desimal

Tipe Data Ukuran (dalam bit) Rentang

float 32 Enam digit presisi

double 64 Sepuluh digit presisi

(27)

Tipe Logika

Tipe ini meprepresentasikan data-data yang hanya mengandung dua buah nilai, yaitu logika (boolean). Nilai logika itu sendiri hanya terdiri dari nilai benar (direpreenasikan dengan nilai selain 0, biasanya nilai 1) dan salah (direpresentasikan dengan nilai 0).

Tipe Karakter/String

Tipe ini merepresentasikan data-data yang berupa karakter. Tipe data ini dinyatakan dengan tipe char, sedangkan untuk string dinyatakan sebagai pointer dari tipe char, yaitu yang dituliskan dengan char*.

Sebagai contoh adalah karakter ‘A’, ‘a’, ‘ ‘, ‘1’, dll merupakan tipe char, sedangkan “Dia”, “Pergi”, “ke Glodok” adalah contoh dari tipe char*. Untuk lebih memudahkan Anda dalam membedakan tipe karakter dan string adalah tanda yang mengapitnya. Dalam C++, tipe karakter diapit oleh tanda petik tunggal, sedangkan tipe string diapit oleh tanda petik ganda. Adapun tipe data dalam kategori ini adalah:

Tabel 2.2.4.3 : Daftar Tipe Char

Tipe Data Ukuran (dalam bit) Rentang

char 8 -127 sampai 127

unsigned char 8 0 sampai 256

signed char 8 -127 sampai 127

2. Tipe Data Bentukan

Tipe data bentukan adalah tipe data yang dibuat sendiri sesuai kebutuhan dalam program yang akan kita buat. Tipe ini lebih dikenal dengan sebutan dalam bahasa asing, yaitu user defined types. Adapun yang termasuk ke dalam tipe bentukan adalah array,struktur dan enumerasi.

Struktur

Sesuai dengan namanya, struktur adalah tipe data bentukan yang menyimpan lebih dari satu variabel bertipe sama maupun berbeda. Untuk membuat tipe data struktur dalam C++, kita harus mendeklarasikannya dengan menggunakan keyword struct. Berikut ini bentuk umum pendeklarasian tipe data struktur di dalam C++.

struct nama_struktur{

(28)

Jika kita telah membuat tipe data bentukan baru yang berjenis struktur tentu kita akan menggunakannya di dalam pendeklarasian sebuah variabel. Pada saat itu, kita harus melakukan pengaksesan terhadap isi dari stuktur tersebut dengan menggunakan operator titik (.).

Sebagai contoh sederhana untuk menerangkan tipe data struktur adalah dengan melihat suatu objek, misalnya siswa. Kita tahu bahwa siswa pasti mempunyai NIS, nama, alamat, serta data pribadi lainnya. Kasus ini dapat kita implementasikan ke dalam tipe struktur, adapun contoh bentuk implementasinya adalah sebagai berikut:

#include <iostream.h> int main(){ struct SISWA{ char NIS[8]; char Nama[25]; char Alamat[20]; char Kota[15]; };

SISWA A; //Mendeklarasikan variabel A yang bertipe siswa. A.NIS = “D1202890”; A.Nama = “Desta”; A.Alamat = “Margonda”; A.Kota = “Depok”; } Enumerasi

Tipe enumerasi merupakan tipe data yang nilainya terbatas pada nilai-nilai yang telah didefinisikan saja. Tipe enumerasi digunakan untuk membentuk tipe data yang nilainya bersifat pasti. Misalnya untuk mendefinisikan tipe jenis kelamin, nama hari, warna printer dan sebaginya. Kita tahu bahwa jenis kelamin hanya terdiri dari pria dan wanita saja, maka jenis kelamin dapat kita bentuk ke dalam tipe enumerasi. Dalam bahasa C++, untuk mendefinisikan tipe enumerasi adalah dengan menggunakan keyword enum. Berikut ini adalah bentuk umum untuk mendefinisikannya.

(29)

Sebagai contoh, di bawah ini dituliskan contoh-contoh pendefinisian tipe enumerasi.

enum JENIS_KELAMIN{Pria, Wanita};

enum HARI{Minggu, Senin, Selasa, Rabu, Kamis, Jumat, Sabtu}; Penggunaannya dalam program dapat dilihat pada program berikut ini:

#include<iostream.h>

enum JENIS_KELAMIN{Pria, Wanita}; int main(){ struct SISWA{ char NIS[8]; char Nama[25]; JENIS_KELAMIN gender; }A; A.NIS = “D1202890”; A.Nama = “Desta”; A.gender = Wanita; cout<<”NIS ;”<<A.NIS; cout<<”Nama :”<<A.Nama; cout<<”Gender :”<<A.gender; return 0; }

Output dari program tersebut adalah:

NIS : D1202890 Nama : Desta Gender : 1

Nilai 1 di atas menunjukkan indeks dari nilai yang terdapat dalam tipe JENIS_KELAMIN. Sebagai catatan bahwa indeks diawali dari 0, maka nilai ‘Wanita’ pada tipe JENIS_KELAMIN di atas adalah 1 sedangkan ‘Pria’ akan bernilai 0.

(30)

2.5 Keyword pada C++

Keyword adalah suatu kata yang telah tersedia dalam komputer. Kita tidak

dapat menggunakannya sebagai nama variabel, konstanta, fungsi maupun nama kelas di dalam kode program yang kita tulis

Adapun beberapa keyword yang terdapat dalam C++ adalah seperti terlihat dibawah ini;

auto break case catch

char class const continue

default delete do double

else enum extern float

for friend goto if

int long mutable new

operator private protected public

register return short signed

sizeof static struct switch

template this throw typedef

union unsigned virtual void

volatile while

2.6 Pointer dan Reference

Salah satu kelebihan dari bahasa C/C++ adalah karena bahasa ini mendukung sepenuhnya untuk pemanipulasian memori dengan mendukung pointer. Namun di balik itu, pointer juga merupakan salah satu fitur C++ yang berbahaya karena dapat mengakibatkan sistem operasi pada komputer kita menjadi crash (rusak). Penggunaan pointer dengan cara yang salah juga dapat menyebabkan bug yang sangat sulit untuk ditemukan pada program kita.

Variabel Pointer

Secara definisi, pointer dapat dikatakan sebagai suatu variabel yang menyimpan alamat memori. Pada bab-bab sebelumnya kita telah membahas

(31)

penggunaan variabel, tapi variabel-variabel tersebut hanya berisi nilai, bukan alamat.

Jika kita mempunyai sebuah variabel dengan tipe data tertentu, maka untuk mendapatkan alamat dari variabel tersebut adalah dengan menggunakan opertor &(ampersand). Alamat inilah yang kemudian akan disimpan ke dalam variabel yang bertipe pointer. Sedangkan untuk mendeklarasikan variabel sebagai pointer, kita hanya menambahkan tanda asterisk(*) di depan nama variabel. Berikut ini bentuk umum dari pendeklarasian variabel yang bertipe pointer.

tipe_data *nama_pointer;

Sebagai catatan bahwa penulisan di atas dapat diganti dengan tipe_data* nama_pointer atau tipe_data * nama_pointer.

Tipe data di atas berguna untuk menyatakan bahwa pointer yang kita deklarasikan tersebut akan ditempati oleh data dengan tipe tertentu. Sebagai contoh, kita akan mendeklarasikan pointer P yang akan ditempati oleh tipe data long, maka bentuk pendeklarasiannya adalah sebagai berikut:

long *P; //mendeklarasikan pointer P yang akan merujuk ke tipe long jika kita mempunyai sebuah variabel yang bertipe long (misalnya x), maka kita dapat memerintahkan pointer P di atas untuk menunjuk ke alamat yang ditempati oleh variabel x. Adapun sintaks untuk melakukan hal tersebut adalah seperti yang terlihat di bawah ini.

Apabila kita analisis potongan sintaks di atas, sebenarnya konsepnya sangat sederhana. Kita tahu bahwa P adalah pointer (berisi alamat) dan &x juga berisi alamat, maka kita dapat menyimpan alamat dari variabel x tersebut ke dalam pointer P. Kita tidak diizinkan untuk memasukkan sebuah nilai (bukan

long x; //mendeklarasikan variabel x dengan tipe long long *P;

(32)

alamat) ke dalam pointer P. Misalnya dengan menuliskan sintak seperti berikut:

P = x; //SALAH, karena x berupa nilai (bukan berupa alamat)

Jika kita memang ingin mengisikan nilai ke dalam alamat yang disimpan oleh Pointer P, maka seharusnya kita menggunakan tanda astersik (*) di depan nama pointer tersebut, yaitu dengan mengubah sintaks di atas menjadi:

*P = x; //BENAR, karena *P adalah nilai yang berada pada pointer P Sebagai catatan bahwa *P ini disebut dengan dereference pointer. Untuk dapat lebih memahami konsep pointer. Berikut ini gambar yang mengilustrasikan kasus di atas.

Pada gambar di atas alamat 1 dari memori di tempati oleh variabel x yang bertipe long. Adapun nilai dari variabel x tersebut adalah 10. Di atas kita mempunyai pointer P yang menunjuk ke alamat x, maka untuk mendapatkan nilai x kita dapat menggunakan dereference pointer, yaitu dengan *P. Dengan demikian dapat disimpulkan bahwa jika:

P =&x // keduanya meyimpan alamat Maka:

*P = x; //keduanya menyimpan nilai

Untuk membuktikan hal di atas, di sini kita akan mengimplementasikannya ke dalam sebuah program sederhana. Adapun sintaks program tersebut adalah sebagai berikut:

Alamat x (&x) 10

Alamat 2 20

Alamat 3 30

Alamat 4 40

Memori Komputer Nilai Pointer P

(33)

Contoh hasil yang akan diberikan dari program di atas adalah sebagai berikut:

Jika kita amati hasil program di atas, pada saat kita mengisikan variabel x dengan nilai 10, *P juga akan bernilai 10. Sedangkan pada saat kita memasukkan nilai ke dalam *P dengan nilai 200, variabel x juga akan berubah nilainya menjadi 200. Hal ini menunjukkan bahwa *P akan selalu sama dengan x, dan ini semua disebabkan karena *P dan variabel x tersebut menempati alamat yang sama.

Memasukkan Nilai pada Pointer

Nilai yang dimaksud disini tentu berupa alamat, bukan berupa nilai data. Walaupun tampak mudah tapi kita juga harus berhati-hati dalam melakukan

#include<iostream.h>

int main(){

long *P; long x;

P = &x;

x = 10; //mengisikan nilai 10 ke dalam variabel x

cout<<”Nilai x :”<<x<<endl; cout<<”Nilai *P :”<<*P<<endl; cout<<”Nilai P :”<<P<<endl; cout<<”Nilai &x :”<<&x<<endl;

*P = 200; //mengisikan nilai 200 ke dalam *P

cout<<”Nilai x :”<<x<<endl; cout<<”Nilai *P :”<<*P<<endl; cout<<”Nilai P :”<<P<<endl; cout<<”Nilai &x :”<<&x<<endl;

return 0; } Nilai x : 10 Nilai *P : 10 Nilai P : 0065FDFC Nilai &x : 0065FDFC Nilai x : 200 Nilai *P : 200 Nilai P : 0065FDFC Nilai &x : 0065FDFC

(34)

hal ini. Perlu diperhatikan bahwa tipe data dari pointer harus sama dengan tipe data dari variabel yang akan menempatinya. Hal ini merupakan hal yang biasa terabaikan oleh para programmer pemula. Misalnya kita mendeklarasikan pointer P ke tipe double dan kita juga memiliki variabel x yang bertipe int. Pada kasus ini kita tidak diizinkan untuk menyimpan alamat dan variabel x ke pointer P karena tipenya berbeda. Berikut ini sintaks programnya.

Pointer Tanpa Tipe

Pada bagian sebelumnya kita telah mengetahui bahwa pointer harus diisikan dengan alamat dari variabel yang bertipe sama dengan tipe pointer tersebut. Sebenarnya ada cara khusus yang untuk membuat pointer yang kita deklarasikan tersebut dapat menunjuk ke semua tipe data, yaitu dengan mendeklarasikan pointer tersebut sebagai pointer tanpa tipe. Pointer semacam ini sering dinamakan dengan void pointer. Adapun bentuk umum untuk mendeklarasikan pointer tanpa tipe ini adalah sebagai berikut:

void *nama_pointer;

Berikut ini contoh program yang dapat membuktikan bahwa pointer tanpa tipe (void pointer) dapat menyimpan alamat dari variabel-variabel yang bertipe apapun.

#include<iostream.h>

int main(){

void *P; /*mendeklarasikan pointer P sebagai pointer tanpa tipe*/

//mendeklarasikan variabel x, y, dan z dengan tipe

berbeda int x; long y; double z; double *P;

int x; //mendeklarasikan variabel yang bertipe int

P = &x; /*SALAH, karena P hanya dapat menyimpan alamat dari variabel-variabel yang bertipe double saja*/

(35)

//memerintahkan P untuk menunjuk ke alamat dari variablel x

P = &x;

x = 10; //mengisikan nilai 10 ke dalam variabel x

cout<<”Nilai x :”<<x; cout<<”Nilai P :”<<P; cout<<”Nilai &x :”<<&x; cout;

//memerintahkan P untuk menunjuk ke alamat dari variabel y

P = &y;

y = 2000; //mengisikan nilai 200 ke dalam y

cout<<”Nilai y :”<<y; cout<<”Nilai P :”<<P; cout<<”Nilai &y :”<<&y;

cout;

//memerintahkan P untuk menunjuk ke alamat dari variabel z

P = &z;

Z = 21.0378; // mengisikan nilai 21.0378 ke dalam y

cout<<”Nilai z :”<<z; cout<<”Nilai P :”<<P; cout<<”Nilai &z :”<<&z; cout;

return 0; }

Hasil yang akan diberikan dari program di atas adalah sebagai berikut:

Seperti kita lihat di atas bahwa P dapat menunjuk ke tipe data yang berbeda-beda. Sebagai bukti dair hal ini adalah nilai P yang berbeda, yaitu sesuai dengan alamat dari variabel yang ditunjuk.

Nilai x : 10 Nilai P : 0065FDFC Nilai &x : 0065FDFC Nilai y : 2000 Nilai P : 0065FDF8 Nilai &y : 0065FDF8 Nilai z : 21.0378 Nilai P : 0065FDF0 Nilai &z : 0065FDF0

(36)

Melakukan Inisialisasi pada Pointer

Setiap kita mendeklarasikan sebuah pointer, maka pointer tersebut akan menunjuk lokasi acak di memori. Oleh karena itu kita harus mengeset pointer yang kita deklarasikan tersebut dalam keadaan NULL, atau tidak menunjuk lokasi manapun. Untuk membuktikan hal ini, jalankan program di bawah ini;

Hasil yang didapat adalah sebagai berikut:

Alamat yang ditunjuk oleh pointer P: 00000000

Sebelumnya jika baris P = NULL; dihilangkan maka hasil yang diperoleh adalah:

Alamat yang ditunjuk oleh pointer P: 006821A4

Pointer ke Pointer (Multiple Indirection)

Dalam C/C++, kita dapat mempunyai pointer yang menunjuk ke pointer lain yang telah menunjuk ke alamat tertenu. Situasi ini sering disebut dengan multiple indirection atau pointer ke pointer. Konsep dari pointer ke pointer ini sederhana, kita tahu bahwa pointer normalnya berisi alamat dari sebuah objek (variabel) yang menyimpan nilai berupa data. Sekarang kita mempunyai pointer lagi yang akan menunjuk ke pointer tadi. Sebagai gambaran, perhatikan gambar ilustrasi di bawah ini.

#include<iostream.h>

int main(){

int *P; /* mendeklarasikan pointer P yang akan menunjuk tipe data int */

P = NULL; //menset pointer P dengan nilai NULL

cout<<”Alamat yang ditunjuk oleh pointer P:” <<P; return 0;

(37)

Untuk mendeklarasikan sebuah pointer yang akan menunjuk ke pointer lain adalah dengan menggunakan tanda asterisk sebanyak dua kali (**). Sebagai contoh, jika kita mendeklarasikan pointer seperti pada potongan sintaks di bawah ini:

int **P;

Maka P bukan pointer yang menunjuk ke tipe data int, melainkan pointer yang menunjuk pointer ke tipe data int. Untuk dapat lebih memahaminya, perhatikan program di bawah ini;

Alamat Nilai

Alamat Alamat Nilai

Pointer Variabel

Singel Indirection

Pointer Pointer Variabel

Mutliple Indirection

#include<iostream.h>

int main(){

int x = 25; //mendeklarasikan variabel x dengan nilai 25

int *P1; //mendeklarasikan pointer P1 yang menunjuk ke tipe int

int **P2; // mendeklarasikan pointer P2 yang menunjuk ke pointer P1

P1 = &x; P2 = &P1; //menampilkan nilai cout<<”Nilai x :”<<x<<endl; cout<<”Nilai *P1 :”<<*P1<<endl; cout<<”Nilai *P2 :”<<*P2<<endl; cout<<”Nilai **P2:”<<**P2<<endl; //menampilkan alamat

cout<<”Nilai &x :”<<&x<<endl; cout<<”Nilai P1 :”<<P1<<endl; cout<<”Nilai P2 :”<<P2<<endl;

return 0; }

(38)

Hasil yang akan diperoleh dari program di atas adalah sebagai berikut; Nilai x : 25

Nilai *P1 : 25

Nilai *P2 : 0065FE00 Nilai **P2 : 25

Nilai &x : 0065FE00 Nilai P1 : 0065FE00 Nilai P2 : 0065FDFC

Seperti yang kita lihat bahwa nilai x dapat diakses dengan menggunakan *P1 atau **P2 sedangkan alamat dari variabel x dapat diakses dengan menggunakan &x, P, ataupun *P2 (catatan: *P2 merupakan nilai yang menempati alamat yang ditunjuk oleh pointer P2). Hal ini membuktikan bahwa pointer P2 tidak menunjuk ke tipe data int, melainkan menunjuk ke pointer P1. Dan yang terakhir, P2 sendiri menyimpan alamat dari pointer P1. Untuk contoh di atas, P2 menyimpan alamat 0065FDFC.

Reference

Reference digunakan untuk membuat alias atau nama lain dari sebuah variabel. Sebagai contoh jika terdapat seseorang yang bernama Roy Marten, maka kita dapat membuat alias atau julukan dari nama tersebut, misalnya dengan alias RM. Oleh karena Roy Marten dan RM sebenarnya adalah satu orang, maka apa yang dilakukan terhadap Roy Marten, berarti itu juga terjadi pada RM.

Setelah mendapat gambaran tersebut, sekarang kita kembali ke pokok permasalahan kita tentang reference. Untuk membuat reference adalah dengan menggunakan tanda & di belakang tipe data yang akan diacu. Berikut ini bentuk umum dari pembuatan reference.

tipe_data& nama_alias = nama_variabel;

Untuk dapat memahami lebih jauh mengenai reference ini, perhatikan contoh program di bawah ini.

#include<iostream.h> int main(){

(39)

int x; //mendeklarasikan variabel x

//membuat alias dari variabel x dengan nama AliasX

int& AliasX = x;

//mengisikan nilai ke dalam variabel x

x = 12;

//menampilkan nilai yang disimpan dalam variabel x dan AliasX

cout<<”Nilai x :”<<x; cout<<”Nilai AliasX :”<<AliasX; cout<<’\n’;

//mengisikan nilai ke dalam AliasX

AliasX = 35;

//menampilkan kembali nilai yang disimpan dalam variabel x dan AliasX

cout<<”Nilai x :”<<x; cout<<”Nilai AliasX :”<<AliasX;

return 0; }

Hasil yang diperoleh dari program di atas adalah sebagai berikut;

Apabila kita analisis hasil dari program di atas, tampak bahwa pada saat kita memasukkan nilai 12 ke dalam variabel x, AliasX juga akan bernilai 12. Begitu juga sebaliknya, pada saat kita memasukkan nilai 35 ke dalam AliasX, variabel X juga akan bernilai 35.

Alamat dari Reference

Nama alias dan variabel menempati alamat yang sama di memori, jadi keduanya bukanlah dua buah variabel yang berbeda, melainkan satu variabel yang mempunyai dua nama.

Nilai X : 12 Nilai AliasX : 12

Nilai X : 35 Nilai AliasX : 35

(40)

Soal Latihan

1. Jika kita membutuhkan variabel yang dapat dikenali oleh semua lingkungan dalam program kita, maka mendefinisikan variabel tersebut sebagai :

a. Variabel statis b. Variabel global c. Variabel lokal d. Variabel register

2. Berikut ini yang termasuk dalam user defined types kecuali a. array

b.struktur c. enumerasi d.char

3. Untuk mendapatkan alamat dari sebuah variabel, dapat digunakan operator : a. $ b. & c. * d. ""

Soal Praktek

3. Buatlah program C++ untuk menampilkan alamat dari 3 variabel yang berbeda tipe datanya.

4. Buatlah sebuah struktur yang berisi nama, alamat dan nomor telepon. Kemudian isi dan tampilkan isi struktur tersebut.

(41)

BAB III Pemrograman Lanjut

Operasi adalah suatu aksi yang dijalankan pada satu atau lebih nilai baik untuk memodifikasi nilai tersebut yang dilakukan oleh satu atau kedua variabel atau untuk menghasilkan sebuah nilai baru dengan mengkombinasikan variabel. Oleh karena itu, sebuah operasi dijalankan menggunakan paling sedikit satu simbol dan satu nilai. Simbol yang digunakan pada operasi disebut sebuah operator. Sebuah variabel atau sebuah nilai dilibatkan pada sebuah operasi disebut operan.

3.1 Operator

Operator Assignment

Operator assignment adalah operator yang berfungsi untuk memasukkan (assign) nilai ke dalam suatu variabel ataupun konstanta. Operator ini dilambangkan dengan tanda sama dengan (=). Berikut ini contoh program #include<iostream.h>

int main(){

//mendeklarasikan konstanta melakukan assignment dengan nilai 3.14

const PI = 3.14; //mendeklarasikan variabel-variabel char MyChar; char MyString; int MyInteger; double MyDouble;

//melakukan assignment terhadap variabel di atas MyChar = “P”;

MyString = “Saya semangat sekali”; MyInteger = 21;

MyDouble = 23.456;

//menampilkan nilai dari variabel di atas cout<<”MyChar :”<<MyChar<<endl;

cout<<”MyString :”<<MyString<<endl; cout<<”MyInteger :”<<MyInteger<<endl; cout<<”MyDouble :”<<MyDouble<<endl;

return 0;

yang menggunakan operator tersebut:

(42)

Operator Unary

Dalam ilmu matematika yang disebut dengan operator unary adalah operator yang hanya melibatkan sebuah operan. Adapun yang termasuk ke dalam operator unary adalah seperti tampak pada tabel di bawah ini.

Tabel 3.1.1 : Operator Unary

Operator Jenis Operasi Contoh

+ Membuat nilai positif +7

- Membuat nilai negatif -7

++ Increament C++

-- Decrement C--

o Increament

Increament adalah suatu penambahan nilai yang terjadi pada sebuah

variabel. Adapun opeartor yang digunakan untuk melakukan Increament adalah operator ++. Operator ini akan menambahkan nilai dari suatu variabel dengan nilai 1.

Terdapat dua buah jenis Increament yang terdapat dalam bahasa C++, yaitu pre-Increament dan post-Increament. Arti dari pre-Increament adalah melakukan penambahan nilai sebelum suatu variabel itu diproses, sedangkan post-Increament merupakan kebalikannya, yaitu melakukan proses terlebih dahulu sebelum dilakukan penambahan nilai. Adapun bentuk umum dari pre-Increament dan post-Increament dapat dilihat di bawah ini.

Berikut ini contoh program yang membedakan antara pre-Increament dan post-Increament.

#include<iostream.h>

int main(){

int C; //mendeklarasikan variabel C

//mengisikan nilai ke dalam variabel C dengan nilai 5 C = 5;

//melakukan pre-increament

cout<<”Nilai awal C :”<<C<<endl; //Melakukan pre-increament

++nama_variabel;

//Melakukan post-incarement Nama_variabel++;

(43)

cout<<”Nilai ++C :”<<++C<<endl; cout<<”Nilai C akhir :”<<C<<endl; cout<<’\n’;

//mengubah nilai dalam variabel C dengan nilai 10 C = 10;

//melakukan post-increament

cout<<”Nilai awal C :”<<C<<endl; cout<<”Nilai C++ :”<<C++<<endl; cout<<”Nilai C akhir :”<<C<<endl; cout<<’\n’;

return 0; }

Hasil yang akan diberikan program di atas adalah:

Pada saat kita melakukan pre-Increament, nilai C dinaikkan dulu sebelum diproses (dalam hal ini ditampilkan ke layar) sehingga yang tampil adalah nilai 6. Sedangkan pada saat melakukan post-Increament nilai dari variabel C diproses (ditampilkan) lebih dahulu sebelum dinaikkan nilainya. Hal ini menyebabkan nilai yang ditampilkan masih tetap 10. Namun pada saat pemanggilan nilai C setelah proses post-Increament, nilai C tentu telah bertambah satu, sehingga yang ditampilkan adalah 11.

o Decrement

Decrement merupakan kebalikan dari proses Increament, yaitu

menurunkan (mengurangi) nilai dari suatu variabel. Sama juga seperti pada Increament, decrement juga dibagi ke dalam dua jenis yaitu pre

decrement dan post decrement

Operator Binary Nilai C awal : 5 Nilai ++C : 6 Nilai C akhir : 6 Nilai C awal : 10 Nilai C++ : 10 Nilai C akhir : 11

(44)

Operator binary adalah operator yang digunakan dalam operasi yang melibatkan dua buah operan. Dalam bahasa C++, operator binary ini dikelompokkan lagi ke dalam empat jenis.

o Operator Aritmatika

Operator aritmatika adalah operator yang digunakan untuk melakukan operasi-operasi aritmatika seperti penjumlahan, pengurangan dan sebagainya. Adapun yang termasuk dalam operator aritmatika di dalam C++ adalah seperti yang tampak pada tabel di bawah ini;

Tabel 3.1.2 : Operator Aritmatika

Operator Jenis Operasi Contoh

+ Penjumlahan 2 + 3 = 5

- Pengurangan 5 – 3 = 2

* Perkalian 2 * 3 = 6

/ Pembagian 10 / 3 = 3.33

% Sisa bagi (modulus) 10 % 3 = 1

o Operator Logika

Operator logika adalah operator yang digunakan untuk melakukan operasi dimana nilai yang dihasilkan dari operasi tersebut hanya berupa nilai benar (true) atau salah (false). Nilai ini disebut dengan nilai boolean.

Dalam bahasa C++ nilai benar tersebut direpresentasikan dengan bilangan selain 0 (biasanya nilai 1), sedangkan nilai salah direpresentasikan dengan nilai 0. Adapun yang termasuk ke dalam operator logika dalam C++ adalah seperti yang tampak pada tabel di bawah ini.

Tabel 3.1.3 : Operator Logika

Operator Jenis Operator Contoh

&& AND (dan) 1 && 1 = 1

|| OR (atau) 1 || 0 = 1

| NOT (negasi) !0 = 1

Berikut tabel hasil dengan menggunakan operator logika

(45)

x y X && Y X || Y !X 1 1 1 1 0 1 0 0 1 0 0 1 0 1 1 0 0 0 0 1 o Operator Relasional

Operator rasional adalah operator yang digunakan untuk menentukan relasi atau hubungan dari dua buah operan. Operator ini ditempatkan di dalam sebuah ekspresi yang kemudian akan menentukan benar atau tidaknya sebuah eskpresi. Adapun yang termasuk dalam operator relasional di dalam C++ adalah seperti yang tampak pada tabel di bawah ini.

Tabel 3.1.5 : Operator Relasional

Operator Jenis Operator Contoh

> Lebih besar (5>2) = 1

< Lebih kecil (5<2) = 0

>= Lebih besar sama dengan (5>=5) = 1 <= Lebih kecil sama dengan (5<=2) = 0

== Sama dengan (5==2) = 0

!= Tidak sama dengan (5 !=2) = 1

Operator ini banyak digunakan untuk melakukan pengecekan sebuah ekspresi (kondisi) dalam struktur percabangan.

o Operator Bitwise

C++ mendukung penuh operator-operator bitwise. Operator bitwise sendiri berguna untuk melakukan operasi-operasi yang berhubungan dengan pemanipulasian bit. Sebagai catatan bahwa operator bitwise ini hanya dapat dilakukan pada operan yang bertipe char dan int saja karena ini berkoresponden dengan tipe byte atau word di dalam bit. Adapun yang termasuk dalam operator bitwise dalam C++ adalah seperti tampak pada tabel di bawah ini.

(46)

Operator Jenis Operator Contoh

& AND 1 & 0 = 0

| OR 1 | 0 = 1

^ Exclusive OR (XOR) 1 ^ 1 = 0

~ NOT ~1 = 0

>> Shift Right 5<<1 = 10 << Shift Left 10>>1 = 5

Fungsi dari operator &, | dan ~ di atas sama dengan operator &&, || dan ! pada operator logika, perbedaannya hanya operator bitwise ini bekerja bit demi bit, sedangkan pada operasi logika bekerja untuk setiap nilai.

Operator Ternary

Operator Ternary adalah operator yang digunakan dalam operasi yang melibatkan tiga buah operan. Adapun operator yang digunakan untuk menyatakannya adalah operator ?:. Konsep yang mendasari operasi ini adalah suatu percabangan (pemilihan) yang didasarkan atas kondisi tertentu. Berikut ini bentuk umum dari penggunaan operator ternary.

Ekspresi1 ? Ekspresi2 : Ekspresi3;

Jika ekspresi1 bernilai benar, maka program akan mengeksekusi ekspresi2. Sedangkan jika ekspresi bernilai salah maka yang dieksekusi adalah ekspresi3.

Operator SizeOf

Kita telah melihat bahwa ketika mendeklarasikan sebuah variabel, compiler mengalokasikan suatu bagian dari lokasi memori untuk menyimpan variabel tersebut. C++ menyediakan suatu operator sizeof untuk melihat berapa banyak ruang yang disediakan untuk suatu jenis tipe data atau variabel tertentu pada program yang menggunakannya.

Ada empat metode yang dapat Anda gunakan dengan operator sizeof; menggunakan variabel atau tipe data. Sintaks umum dari operator sizeof adalah:

sizeof NamaVariabel;

(47)

sizeof (NamaVariabel);

sizeof (TipeData);

Alasan Anda harus menggunakan operator sizeof pada variabel adalah karena, jika Anda mengubah variabel tersebut yaitu, jika anda menjalankan operasi pada variabel tersebut, operator sizeof akan memberitahukannya dan mengeluarkan hasil yang tepat. Kadang dan hampir selalu, jika anda menggunakan sizeof pada tipe data, Anda mungkin akan mendapatkan bug, atau program tersebut tidak akan di compile.

Berikut ini adalah contoh programnya:

#include <iostream> using namespace std;

int main() {

double Periode = 155.50; int sizeOf = sizeof Periode;

cout << "Ukuran dari Periode adalah " << sizeOf << " bytes\n\n";

return 0;

}

3.2 Array

Array adalah sebuah variabel yang menyimpan sekumpulan data yang memiliki tipe sama. Setiap data tersebut menempati lokasi atau alamat memori yang berbeda-beda dan selanjutnya disebut dengan elemen array. Elemen array itu kemudian dapat diakses melalui indeks yang terdapat di dalamnya. Namun penting sekali untuk diperhatikan bahwa dalam C++, indeks array selalu dimulai dari 0, bukan 1. Berikut ini gambar yang mengilustrasikan sebuah array.

Nilai ke-1 Nilai ke-2 ... Nilai ke-N Nilai elemen array Alamat ke-1 Alamat ke-2 ... Alamat ke-N Alamat elemen array

(48)

Untuk mendeklarasikan sebuah array dalam C++, kita harus menggunakan tanda [ ]. Adapun bentuk umum dari pendeklarasiannya adalah sebagai berikut;

tipe_data nama_array[jumlah_elemen];

Sebagai contoh jika kita ingin mendeklarasikan sebuah array (misalnya dengan nama BUKU) yang memiliki 25 elemen dengan tipe data int, maka pendeklarasiannya adalah seperti yang tampak di bawah ini.

int BUKU[25]

Ruang memori yang dibutuhkan untuk pendeklarasian array tersebut adalah 100 byte, yang berasal dari 25 x 4 byte (4 merupakan ukuran dari tipe data int). Sedangkan cara yang digunakan untuk mengakses elemennya adalah dengan menuliskan indeksnya. Misalnya kita ingin mengambil nilai yang terdapat pada elemen ke-10 dan menampung nilai tersebut ke dalam sebuah variabel yang bertipe int juga (misal x), mka kita harus menuliskan sintaks dibawah ini.

x = BUKU[9]

Mengisikan Nilai ke dalam Elemen Array

Untuk mengisikan nilai ke dalam elemen-elemen array, kita dapat melakukannya langsung untuk setiap elemen, misalnya seperti berikut.

A[0] = 10 A[1] = 20 A[2] = 13 ...dst

Namun cara ini tidak direkomendasikan karena tidak efisien. Cara yang lebih umum dan banyak digunakan oleh para pemrogram untuk mengisikan nilai ke dalam elemen-elemen array adalah dengan menggunakan pengulangan (looping). Cara ini akan jauh lebih cepat dibandingkan cara manual seperti di atas. Sebagai contoh jika kita ingin melakukan pengisian 25 elemen array, maka kita dapat menuliskan sintak seperti di bawah ini.

for (int C; C<25; C++){

(49)

}

Berikut ini contoh program yang di dalamnya terdapat proses pengisian array dengan menggunakan proses pengulangan.

Menampilkan Nilai yang Terdapat pada Array

Setelah memahami cara mengisikan nilai ke dalam elemen array sekarang kita akan membahas bagaimana cara untuk mengakses atau menampilkan nilai-nilai tersebut. Konsepnya sama seperti di atas, kita akan menggunakan pengulangan untuk menampilkannya. Berikut ini program yang akan mengisikan dan menampilkan nilai yang terdapat pada elemen array.

#include<iostream.h>

int main(){

//mendeklarasikan array A dengan 5 buah elemen bertipe int int A[5];

//memasukkan nilai ke dalam elemen array Cout<<”Masukkan nilai yang diinginkan”; for (int C; C<5; C++){

cout<<”A[“<<C<<”]= ”; cin>>A[C]; }

cout<<’\n’

//menampilkan nilai yang terdapat dalam elemen array cout<<”Menampilkan nilai yang telah dimasukkan”; for (int J=0; J<5; J++){

cout<<”Nilai yang terdapat pada elemen ke-”<<J+1<<” : “<<A[J];

}

return 0;

#include<iostream.h>

int main(){

//mendeklarasikan array A dengan 5 buah elemen bertipe int int A[5];

//memasukkan nilai ke dalam elemen array for (int C; C<5; C++){

cout<<”A[“<<C<<”]= ”; cin>>A[C]; }

return 0; }

(50)

Contoh hasil yang akan diberikan dari progam di atas adalah sebagai berikut;

Melakukan Inisialisasi Array

Pada saat kita mendeklarasikan sebuah array, kita dapat langsung melakukan inisialisasi nilai terhadap elemen-elemen array di dalamnya. Hal ini dimaksudkan untuk mengisikan nilai default pada elemen array sehingga jika elemen bersangkutan tidak diisi dengan nilai baru, maka nilai yang digunakan adalah nilai yang telah ada. Adapun bentuk umum dari inisialisasi array adalah seperti yang tampak di bawah ini.

tipe_data nama_array[N] = {nilai1, nilai2, ..., nilaiN};

Berikut ini adalah contoh program yang menunjukkan proses inisialisasi nilai pada elemen-elemen array.

#include<iostream.h>

int main(){

/* mendeklarasikan array dengan langsung menginisialisasi nilainya */

int A[5] = {10, 20, 30, 40, 50};

//menampilkan nilai yang terdapat pada elemen array cout<<”Sebelum dilakukan perubahan nilai”<<endl; cout<<”A[0] = ”<<A[0]<<endl;

cout<<”A[1] = ”<<A[1]<<endl; cout<<”A[2] = ”<<A[2]<<endl; cout<<”A[3] = ”<<A[3]<<endl; cout<<”A[4] = ”<<A[4]<<endl;

//mengubah elemen ke-1 dan ke-2 A[0] = 12;

A[1] = 25;

Masukkan nilai yang diinginkan A[0] = 10

A[1] = 21 A[2] = 13 A[3] = 35 A[4] = 28

Menampilkan nilai yang telah dimasukkan Nilai yang terdapat pada elemen ke-1 : 10 Nilai yang terdapat pada elemen ke-2 : 21 Nilai yang terdapat pada elemen ke-3 : 13 Nilai yang terdapat pada elemen ke-4 : 35 Nilai yang terdapat pada elemen ke-5 : 28

(51)

//menampilkan kembali nilai yang terdapat pada elemen array cout<<”Setelah dilakukan perubahan nilai”<<endl;

cout<<”A[0] = ”<<A[0]<<endl; cout<<”A[1] = ”<<A[1]<<endl; cout<<”A[2] = ”<<A[2]<<endl; cout<<”A[3] = ”<<A[3]<<endl; cout<<”A[4] = ”<<A[4]<<endl; return 0; }

Hasil yang akan diberikan dari program di atas adalah sebagai berikut; Sebelum dilakukan perubahan nilai

10 20 30 40 50

Setelah dilakukan perubahan nilai 12

25 30 40 50

Array yang Bersifat Konstan

Nilai dalam elemen array dapat dibuat tetap, yaitu dengan mendefinisikannya sebagai konstanta. Caranya sama seperti pada saat kuta membuat konstanta dari identifier, yaitu dengan menggunakan keyword const di depan nama array yang didefinisikan. Berikut contoh programmnya.

#include<iostream.h>

int main(){

/* mendeklarasikan array dengan langsung menginisialisasi nilainya */

const int A[5] = {10, 20, 30, 40, 50};

//menampilkan nilai yang terdapat pada elemen array A for (int C=0; C<5; C++){

cout<<”A[<<C<<] = ”<<A[C]; }

return 0; }

(52)

Nilai-nilai yang ditampilkan di atas akan bernilai tetap karena kita mendefinisikan array A tersebut dengan nilai konstan.

Array Sebagai Tipe Data Bentukan

Dalam C++, array juga dapat digunakan sebagai tipe data bentukan seperti halnya struktur dan enumerasi. Untuk melakukan hal ini kita harus menggunakan keyword typedef, dimana berfungsi untuk memberikan nama lain dari array yang dideklarasikan.

Berikut ini bentuk umum untuk membuat array sebagai tipe data bentukan.

typedef tipe_data nama_array[jumlah_elemen];

Untuk lebih memahaminya, perhatikan contoh program di bawah ini dimana terdapat sebuah array yang didefinisikan sebagai tipe data bentukan;

#include<iostream.h>

int main(){

/* mendeklarasikan tipe data berbentuk array dengan nama BUKU */

typedef int BUKU[5];

/* menggunakan tipe data BUKU untuk mendeklarasikan variabel A */

BUKU A;

int C; //variabel Bantu untuk melakukan pengulangan

//mengisikan nilai elemen ke dalam variabel A for (C=0; C<5; C++){

A[C] = (C+1) * 100; }

//menampilkan nilai elemen yang terdapat pada variabel A for (C=0; C<5; C++){ cout<<”A[“<<C<<”] = “<<A[C]; } return 0; A[0] = 10 A[1] = 20 A[2] = 30 A[3] = 40 A[4] = 50

Gambar

Tabel 2.2.4.1 : Daftar Tipe Bilangan Bulat
Gambar 1.1.1 Kotak Dialog New
Gambar 1.1.2 Kotak Dialog Open
Gambar 1.1.3 Tool Palette
+7

Referensi

Dokumen terkait

Percaya dengan apa yang telah Tuhan katakan, “setiap orang yang percaya kepadaNya tidak binasa, melainkan beroleh hidup yang kekal.” Jadi saya harap Anda bisa melihat

Pengaruh Strategi Diferensiasi dan Positioning Produk Terhadap Motivasi Nasabah ( Studi Kasus Pada Produk Tabungan Investa Cendekia di BSM KCP Banyumanik2. Semarang )

Alkulturasi arsitektur empat Negara itu misalnya pada bagian pintu Masjid dengan ukiran relief China, ukiran relief pada pilar bangunan bernuansa Eropa, kubah yang besar

 Secara Nasional produksi padi Provinsi Sulawesi Tengah tahun 2015 mempunyai kontribusi sebesar 1,35 persen dari total produksi padi nasional sebesar 75,36 juta ton

Berdasarkan perhitungan bobot karakteristik teknis secara keseluruhan, dapat diketahui bahwa karakteristik teknis yang memiliki bobot paling tinggi yaitu background berwarna

Sedangakan penelitian dari Jincheng Din mengatakan bahwa minyak jelantah sebagai bahan baku pembuatan biodiesel adalah berperan dalam memanfaatkan limbah rumah

Berdasarkan hasil Penelitian maka didapatkan data sebagai berikut: Analisis Hasil validasi atau penilaian oleh keenam validator (internal dan eksternal) terhadap satuan

[r]