MAKALAH ALGORITMA DAN PEMROGRAMAN I

dokumen-dokumen yang mirip
BAB III PENGAMBILAN KEPUTUSAN

OPERATOR BAHASA C. Obyektif : 4. Mengetahui macam-macam operator dalam Bahasa C. 5. Mengetahui dan dapat menggunakan format pada tiap tipe data..

PENGENALAN C++ Bab 1

PENGENALAN C++ DADANG MULYANA 2012

BAB 4 PENGENALAN BAHASA C

Bab 2. Dasar-Dasar Pemrograman C

TUGAS MATA KULIAH ALGORITMA PEMROGRAMAN 3

Struktur Bahasa C dan C++

Struktur Program C++ Preprocessor directive : perintah dalam bahasa c++ yang akan membuat dan mengkompilasi file perantara dengan program utama

MATERI/BAHAN PRAKTIKUM PENDAHULUAN DAN PENGENALAN (IDENTIFIER)

DASAR PEMROGRAMAN. PENGANTAR BAHASA C ( Sejarah, Struktur Pemrograman, Tipe Data, Operator ) Djoko Soerjanto, M.Kom

Achmad Solichin.

Praktikum 4 PENGAMBILAN KEPUTUSAN

Pengambilan Keputusan DASAR PEMROGRAMAN

Tipe Data dan Operator

Turbo C adalah tool yang dipakai untuk membuat code program dalam bahasa C ataupun C++. Berikut adalah jendela utama Turbo C

MODUL IV OPERASI DASAR MASUKAN DAN KELUARAN

INPUT OUTPUT. cout. Digunakan untuk mencetak suatu informasi ke layar Contoh : cout << Halo Teknik Informatika

Operator untuk operasi aritmatika yang tergolong sebagai operator binary adalah: Perkalian Pembagian Sisa Pembagian (mod) Penjumlahan 6 2

PEMOGRAMAN BAHASA C. Oleh: SALAHUDDIN, SST

PSEUDOCODE TIPE DATA, VARIABEL, DAN OPERATOR

Chapter 1 KONSEP DASAR C

PENGERTIAN VARIABEL, KONSTANTA DAN TIPE DATA

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA

MODUL PRAKTIKUM ALGORITMA DAN STRUKTUR DATA PERTEMUAN 1

PENGENALAN BAHASA C DAN C++

PENGENALAN PROGRAM C++

Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya.

Algoritma dan Pemrograman

LANGKAH-LANGKAH MENULISKAN PROGRAM DALAM TURBO C++

3. Elemen Dasar C++ S. Indriani S. L., M.T L.,

BAB II DASAR-DASAR PEMROGRAMAN C

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA

BAHASA PEMROGRAMAN C

PERTEMUAN II Tipe Data, Variabel, Konstanta, Operator

elemen Dasar Bahasa Pemrograman C

Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya.

Pertemuan 04. Pemrograman Dasar 2012

KONSEP DASAR BAHASA C

Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya.

Algoritma & Pemrograman #3

Praktikum 3 PENGAMBILAN KEPUTUSAN

Bahasa C. Dosen : Dhamayanti

Dasar Pemrograman Java

Struktur Dasar Bahasa C Tipe Data Dalam bahasa C terdapat lima tipe data dasar, yaitu :

Bahasa C-M6 By Jamilah, Skom 1

MATERI 2 JENIS-JENIS DATA SEDERHANA & INPUT/OUTPUT DATA

BAB 3. OPERATOR DALAM BHS C

VARIABEL, TIPE DATA DAN EKSPRESI Bab 2

Data bisa dinyatakan dalam bentuk konstanta atau variabel.

TIPE DATA, VARIABLE, dan OPERATOR DELPHI

BUKU PETUNJUK PRAKTIKUM DASAR ALGORITMA DAN PEMROGRAMAN

PRAKTIKUM 3 DASAR PEMROGRAMAN C

disebut ternary operator. Di dalam suatu operasi dapat terdapat banyak operator. Urutan eksekusi dari operatoroperator

KARAKTER DAN STRING, ARRAY, STRUCT DAN REVIEW PADA BAHASA C

Pengambilan Keputusan. Konsep Pemrograman Oleh Tita Karlita

ALGORITHM 7 C++ Dahlia Widhyaestoeti, S.Kom dahlia74march.wordpress.com

Dasar-dasar Pemrograman C DASAR PEMROGRAMAN & ALGORITMA

ELEMEN DASAR C++ C++ mempunyai cara untuk menyatakan karakter-karakter yang tidak mempunyai kode tombol (seperti karakter tombol) misalnya \n.

Algoritme dan Pemrograman

Tipe Data Dasar. Data bisa dinyatakan dalam bentuk konstanta atau variabel.

Ekspresi, Pernyataan & Operasi Aritmetika/Logika

PENGANTAR KOMPUTER DAN TEKNOLOGI INFORMASI 1A

PEMROGRAMAN BERORIENTASI OBJEK. Operator. Budhi Irawan, S.Si, M.T

PENGERTIAN C++ DAN FUNGSI-FUNGSINYA

PRAKTIKUM 3 DASAR PEMROGRAMAN C

DASAR PEMROGRAMAN. PENGENAL dan VARIABEL

PENGENALAN BAHASA C. A. Struktur Kode Program dalam Bahasa C Secara garis besar, suatu kode program dalam bahasa C memiliki struktur umum seperti ini:

Ekspresi, Pernyataan & Operasi Aritmetika/Logika

Algoritma Pemrograman. Fery Updi,M.Kom

BAB 2. FUNGSI INPUT OUTPUT

IT234 - Algoritma dan Struktur Data. Ramos Somya

BAB 3 TYPE DATA, VARIABLE DAN OPERATOR

Tipe data dasar merupakan tipe data yang disediakan oleh kompailer, sehingga dapat langsung dipakai Dalam algoritma dan pemrograman yang termasuk dala

P 4 Bab 3 : Dasar Pemrograman C

INPUT DAN OUTPUT BAHASA C

Pengenalan Bahasa C week 1

MENAMPILKAN HASIL Operasi Keluaran (Output)

Pengantar dalam Bahasa Pemrograman Turbo Pascal Tonny Hidayat, S.Kom

PERTEMUAN 3 KONSEP TIPE DATA

SUMBER BELAJAR PENUNJANG PLPG

Pert 1 Struktur Data (mengajarkomputer.wordpress.com)

BAB 1 KONSEP DASAR BAHASA C

KURSUS ONLINE JASA WEBMASTERS

PENGANTAR KOMPUTER & SOFTWARE I REPRESENTASI DATA

FUNGSI INPUT & OUTPUT

Tipe bentukan dan pointer selanjutnya akan kita pelajari pada modul pemrograman 1 (akhir semester).

BAB 5 PERULANGAN DAN ARRAY

Chapter 2 Tipe Data, Identifier, Operator dan Control Statement

Tipe Data dan Variabel. Dosen Pengampu Muhammad Zidny Naf an, M.Kom

DASAR PEMROGRAMAN C BAB III 3.1 PENGENAL / IDENTIFIER

Pengenalan C++ Oleh : Dewi Sartika

LAPORAN PRAKTIKUM STRUKTUR DATA

BAB I SEKILAS TENTANG C

MODUL PEMOGRAMAN WEB II STMIK IM BANDUNG MODUL PEMOGRAMAN WEB II. Oleh: CHALIFA CHAZAR. Chalifa Chazar edu.script.id

PEMROGRAMAN TERSTRUKTUR OLEH : IR. H. SIRAIT, MT

OPERATOR DAN UNGKAPAN

9/9/2011 ILKOM IPB 1 ALGORITME DAN PEMROGRAMAN. Review: Algoritme dan Program. Bahasa tingkat rendah (low level language)

Tipe Data dan Operator. Ekohariadi FT Unesa

1.4 Struktur Program Pada C++ Program C maupun C++ secara umum tersusun dari beberapa bagian utama, yaitu :

Transkripsi:

MAKALAH ALGORITMA DAN PEMROGRAMAN I PENGENALAN BORLAND C++, FUNGSI IF, FUNGSI DAN STRUKTUR Diajukan sebagai tugas mata kuliah Algoritma dan Pemrograman I Disusun Oleh : Fadhli Umar Ali 17150109 (BAB I) Ari Indrawan 17150071 (BAB I) Surya Sumirat 17150045 (BAB II) Andri Budi Santosa 17150101 (BAB II) Fepi Priyatna 17150069 (BAB III) Irsam Mukharom 17150009 (BAB III) PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS TEKNIK UNVERSITAS BINA SARANA INFORMATIKA BANDUNG 2016

KATA PENGANTAR Puji syukur penyusun haturkan kehadirat lllahi Rabbi atas limpahan kenikmatan, taufik, inayah serta hidayahnya sehingga penyusun dapat menyelesaikan Makalah dengan judul ALGORITMA DAN PEMROGRAMAN I, yang didalamnya membahas tentang Pengenalan Borland C++, Fungsi IF, serta Fungsi dan Struktur. Segala puji dan syukur pembuatan makalah ini bisa terlaksana dengan tanpa suatu kendala apapun. Tujuan penyusun membuat makalah ini adalah keturutsertaan dalam mengerjakan tugas mata kuliah ALGORITMA DAN PEMROGRAMAN I dan sebagai prasyarat untuk nilai Ujian Akhir Semester. Dan agar menambah wawasan tentang ilmu Logika dan Pemrograman. Pertama penyusun ingin mengucapkan terima kasih kepada pihak pihak yang secara langsung maupun tidak langsung membantu penyusunan dalam menyelesaikan makalah ini sehingga makalah ini tersusun baik. Penyusun menyadari bahwa makalah ini jauh dari sempurna. Oleh karena itu kritik serta saran membangun sangat penyusun harapkan agar dilain kesempatan dapat menyusun karya ilmiah menjadi lebih baik. Bandung, 07 Januari 2016 Team Penyusun ii

DAFTAR ISI KATA PENGANTAR... ii DAFTAR ISI... iii BAB I Pendahuluan... 1 1.1 Pengenalan C++... 1 1.2 Tipe Data... 3 1.2.1 Tipe Data Sederhana... 4 1.2.2 Tipe Terstruktur... 6 1.2.3 Tipe Pointer... 6 1.3 Variabel... 8 1.4 Konstanta... 9 1.5 Fungsi Masukan dan Keluaran... 10 1.5.1 Fungsi Masukan... 10 1.5.2 Fungsi Keluaran... 11 1.6 Operator Bahasa... 13 1.6.1 Operator Aritmatika (Arithmetic Operator)... 15 1.6.2 Operator Pengerjaan (Assigment Operator)... 19 1.6.3 Operator Hubungan (Relational Operator)... 20 1.6.4 Operator Logika (Logical Operator)... 22 1.6.5 Operator Koma (Coma Operator)... 23 1.6.6 Operator Bitwise... 23 1.7 Manipulasi String... 27 BAB II FUNGSI IF... 28 2.1 Operator Kondisi... 28 2.1.1 Operator Relasi... 28 2.1.2 Operator Logika... 29 2.1.3 Prioritas Operator Logika dan Relasi... 31 iii

2.2 Pernyataan if Sederhana... 31 2.3 Pernyataan if Majemuk... 34 2.4 Pernyataan if bersarang (nested if)... 39 BAB III FUNGSI DAN STRUKTUR... 45 3.1 Fungsi... 45 3.1.1 Fungsi Operasi String (string.h)... 45 3.1.2 Fungsi Karakter (ctype.h)... 51 3.1.3 Fungsi Operasi Matematika (math.h dan stdlib.h)... 52 3.2 Struktur Data... 64 3.2.1 Mendefinisikan Struktur Data... 65 3.2.2 Mengakses Struktur... 66 3.2.3 Struktur Sebagai Fungsi Dari Agumen... 68 3.2.4 Pointer pada Struktur... 70 3.2.5 Typedef... 73 BAB IV PENUTUP... 75 4.1 Kesimpulan... 75 4.2 Saran... 75 DAFTAR PUSTAKA... 76 BIOGRAFI TEAM PENYUSUN... 77 iv

BAB I PENDAHULUAN 1.1 PENGENALAN C++ Bahasa C++ diciptakan oleh Bjarne Stroustrup di AT&T Bell Laboratories awal tahun 1980 berdasarkan C ANSI (American National Standard Institute). Pertama kali, prototype C++ muncul sebagai C yang dipercanggih dengan fasilitas kelas. Bahasa tersebut disebut C dengan kelas (C wih Class). Selama tahun 1983-1984, C dengan disempurnakan dengan menambahkan fasilitas pembeban lebihan operator dan fungsi yang kemudian melahirkan apa yang disebut C++. Simbol ++ merupakan operator C untuk operasi penaikan, muncul untuk menunjukan bahwa bahasa baru ini merupakan versi yang lebih canggih dari C. Borland International merilis compiler borland C++ dan Turbo C++. Kedua compiler ini sama-sama dapat digunakan untuk mengkompilasi kode C++. Bedanya, Borland C++ selain dapat digunakan dibawah lingkungan DOS, dapat juga digunakan untuk pemrograman Windows. Selain Borland International, beberapa perusahaan lain juga merilis compiler C++, seperti Topspeed C++ dan Zortech C++. C++ diciptakan untuk mendukung pemrograman berorientasi pada objek (Object Oriented Progamming/OOP) yang tidak dimilki C. Sementara C merupakan bahasa pemrograman terbaik dilingkungannya, bahasa ini tdak memiliki kemampuan OOP. Reputasi C tidak diragukan lagi dalam menghasilkan program.exe berukuran kecil, eksekusi yang cepat, antarmuka (Interfacing) yang sedeharna dengan bahasa lain dan fleksibilitas pemrograman. Apa yang membuat C tampak sukar dipelajari, mungkin karena tidak adanya pemeriksaan tipe. Sebagai contoh, dapat mencampur bilangan bulat dengan string untuk menghasilkan karakter. Namun, justru disitu letak fleksibilitas C, dapat mengolah data C sebebas mengolah data dalam bahasa Assembly. Sebenarnya program C++ dapat ditulis menggunakan sembarang editor teks,seperti EDIT (milik DOS),Wordstar,SideKick ataupun menggunakan editor bawaan dari compiler. Program C++ biasa ditulis dengan nama CPP ( dari kata C Plus Plus) Agar program ini bias dijalankan (eksekusi).program harus dikompilasi 1

terlebih dahulu dengan menggunakan compiler C++. Pada saat kompilasian, program sumber (CPP) bersama file-file header (berekstansi.h atau.hpp) akan diterjemahkan oleh compiler C ++ menjadi kode obyek (.OBJ) file ini berupa file dalam format biner (berkode 0 dan 1). Selanjutnya file obyek ini bersama-sama dengan file obyek lain serta file pustaka (.LIB) dikaitkan menjadi satu oleh linker. Hasilnya berupa file yang bersifat executable. File inilah yang biasa dijalankan dari system operasi secara langsung. Proses pengkompilasian file sumber hingga menjadi file eksekutabel dapat diilustrasikan pada gambar 1.1: Program Sumber (.CPP) File Header (.H/.HPP) Kompiler C++ File Objek (.OBJ) File Objek (.OBJ) File Pustaka (.LIB) Linker Program Executable (exe) Gambar 1.1 Proses pengkompilasian file sumber hingga menjadi file eksekutabel 2

1.2 Tipe Data Tipe data adalah suatu media atau memori pada komputer yang digunakan untuk menampung data. Oleh karena itu sebuah program C++ ditujukan untuk memanipulasi data. Sebuah program yang didesain untuk menghtung gajih karyawan akan menjumlahkan, mengurangi, mengalikan, dan membagi angkaangka, dan beberapa angka dipakai untuk merepresentasikan jam kerja dan gaji. Sama halnya, sebuah program yang didesain untuk mengalgabetisasi sebuah kelas dipakai untuk memanipulasi nama-nama. Dengan kondisi seperti itu tentu tidak akan mengurangi atau mengalikan nama-nama. Oleh karena itu, C++ mengelompokan data menjadi beberapa tipe data, dan hanya operasi-operasi tertentu yang dapat diterapkan pada tipe data tertentu. Meskipun dengan kondisi seperti ini agak menyulitkan untuk mempelajari C++, akan tetapi C++ telah menyediakan mekanisme pemeriksaan buit-in untuk mengantisipasi kesalahan tipe data. Tipe data C++ dikelompokan ke dalam tiga kategori dan diilustrasikan pada gambar 1.2. Sederhana Tipe Data C++ Pointer Terstrukur Gambar 1.2 Tipe Data C++ 3

1.2.1 Tipe Data Sederhana Tipe data sederhana merupakan tipe data fundamental dalam C++ karena ia menjadi blok pembangun untuk tipe data terstruktur. Ada tiga katagori tipe data sederhana : 1) Integral, yang merupakan tipe data yang berkaitan dengan integer (bilangan bulat), atau angka-angka tanpa titik desimal. 2) Titik-titik mengambang, yang merupakan tipe data yang berkaitan dengan angka-angka desimal. 3) Enumerasi, yang merupakan tipe data yang diciptakan oleh pengguna. 1.) Integral Untuk data-data angka yang tidak mengandung angka di belakang koma. Tipe data yang termasuk kategori ini adalah: Tabel 1.1 Kategori Tipe Data Integral Tipe Data Ukuran (dalam bit) Int 16 atau 32 Unsigned Int 16 atau 32 Signed Int 16 atau 32 Short Int 16 Unsigned Short Int 16 Signed Short Int 16 Long int 32 Signed Long Int 32 Unsigned Long Int 32 2.) Titik-titik mengambang Untuk merepresentasikan angka riil, C++ menggunakan notasi ilmiah (saintifik) yang dikenal dengan notasi titik-titik mengambang. Tabel 1.2 menunjukan bagaimana C++ menampilkan beberapa angka riil menggunakan salah satu interpretasi notasi titik-titik mengambang. Pada notasi titik mengambang C++, huruf E adalah singkatan dari eksponen. 4

Tabel 1.2 Contoh angka riil yang ditampilkan menggunakan notasi titik mengambang C++ Angka Riil Notasi Titik Mengambang C++ 75.924 7.592400E1 0.18 1.800000E-1 0.0000453 4.53000E-5-1.482-1.482000E0 7800.0 7.800000E3 Ada tiga tipe data di C++ untuk memanipulasi angka desimal : float, double, dan long double. Seperti pada kasus tipe data integral, tipe data float, double, dan long double memiliki himpunan nilai yang berbeda-beda. Tipe data float dipakai dalam C++ untuk merepresentasikan sembarang nilai riil antara -3.4E + 38 dan 3.4E + 38. Memori yang dialokasikan untuk sebuah nilai bertipe data float adalah 4 byte. Tipe data double dipakai dalam C++ untuk merepresentasikan sembarang nilai riil antara -1.7E308 dan 1.7E + 308. Memori yang dialokasikan untuk sebuah nilai bertipe data double adalah 8 byte. Nilai maksimum dan nilai minimum dari tipe data float dan double bergantung pada sistem. Untuk menemukan kedua nilai pada sistem tertentu, anda dapat memeriksa dokumen kompiler anda. Selain perbedaan himpunan nilai, ada satu lagi perbedaan antara tipe data float dan double. Jumlah maksimum dari digit signfikan, yaitu jumlah digit setelah titik desimal, pada nilai float adalah enam atau tujuh dijit. Jumlah maksimum dari dijit signifikan pada nilai bertipe double adalah 15. Jumlah maksimum dijit signifikan disebut dengan kepresisian. Kadangkala nilai bertipe float disebut dengan kepresisian tunggal, sedangkan nilai bertipe double dinamakan dengan kepresisian ganda. 5

3) Enumerasi Enumerasi adalah tipe data yang nilainya terbatas pada nilai-nilai yang telah didefinisikan saja dan nilainya bersifat pasti. Misalnya untuk mendefenisikan tipe jenis kelamin, nama hari, warna primer. 1.2.2 Tipe Terstruktur Tipe terstruktur adalah tipe yang berbentuk record. Record di susun oleh satu atau lebih field. Field menyimpan data tipe dasar tertentu atau tipe data berbentuk yang lain yang sudah di definisikan sebelumnya. Nama record didefinisikan sendiri oleh pemrograman. 1.Array Array adalah tipe terstruktur yang mempunyai komponen dalam jumlah tetap dan setiap komponen mempunyai tipe data yang sama.posisi masing-masing komponen dalam larik dinyatakan sebagai nomor index. 2.Record Dengan tipe data Record,dapat dikumpulkan beberapa item data yang masingmasing mempunyai tipe data yang berbeda-beda.masing-masing item data disebut field.record terdiri dari kumpulan field yang dapat mengadung berbeda tipe. 3.Set Tipe set merupakan suatau himpunan yang berisi nilai (anggota).set dalam pemrograman sangat mirip dengan himpunan dalam ilmu matematik. 1.2.3 Tipe Pointer Pointer adalah built-in type di C dan C++, dimana C++ mengambil konsep pointer dari C. Pointer sebenarnya sangat terkait dengan "Abstract C Machine", yaitu model mesin abstrak dimana program C bekerja. Abstract C Machine adalah mesin abstrak dimana mesin tersebut memiliki prosesor untuk menginterpretasikan stream of instruction, dan addressable memory yang terbagi kedalam 3 bagian : automatic memory, static memory dan free memory. Addressable memory adalah memory yang konten-nya dapat diambil jika diketahui alamatnya. Lebih jauh lagi, terdapat asumsi bahwa konten memori dapat di ambil dengan waktu konstan, tidak peduli berapa nilai alamat.hal ini disebut dengan Random Access Memory. 6

Menurut Frieyadie. 2007. Edisi Revisi Buku Pemrograman C++ dengan Borland C++ 5.02. Pointer adalah sebuah variabel yang berisi alamat lain. Suatu pointer dimaksudkan untuk menunjukan ke suatu alamat memori sehingga alamat dari suatu variabel dapat diketahui dengan mudah. Arti pointer dalam bahasa sehari-hari adalah putunjuk atau bisa di bilang penentu atau pointer secara sederhana bisa diartikan sebagai tipe data yang nilainya mengarah pada nilai yang terdapat pada sebuah area memori (alamat memori).namun dalam Dalam bahasa C, Pointer bisa berfungsi sebagai variabel arrayberarti pointer sebagai penunjuk elemen array ke-0 dalam variabel C. Kegunaan pointer yang utama adalah untuk menyimpan alamat memori dari sebuah variabel (data type atau object dari class). Selain menyimpan alamat dari variabel, pointer juga dapat digunakan untuk menyimpan alamat dari sebuah fungsi (function pointer). Function pointer telah digunakan sejak dikenalkannya bahasa C,dan banyak digunakan untuk sebuah fungsi callback atau untuk meningkatkan readability dari sebuah code. Anda dapat memperlakukan function pointer seperti pointer biasa (pointer ke datatype/object), anda dapat menyimpan,mengirimkan, merubah address, atau meng-evaluasi address dari pointer ke fungsi ini dengan sifat tambahan anda dapat memanggil fungsi yang ditunjuk oleh function pointer. Pointer bisa juga berguna untuk : 1. Mengirimkan Parameter yang berupa variabel ke dalam fungsi, artinya nilai variabel bisa diubah di dalam fungsi. 2. Untuk membuat variabel DINAMIS (Bukan variabel Statis) Penggunaan function pointer pada C++ dibatasi, yaitu function pointer tidak boleh menunjuk pada function yang berada dalam sebuah class (class member function) kecuali function tersebut berjenis static. 7

1.3 Variabel Variabel adalah tempat dimana kita dapat mengisi atau mengosongkan nilainya dan memanggil kembali apabila dibutuhkan. Setiap variabel akan mempunyai nama (identifier) dan nilai. Contoh Nama variabel dan nilai. Username = joni Nama = Al-Khawarizmi Harga = 2500 HargaTotal = 34000 username, Nama, harga dan HargaTotal adalah nama dari variabel, sedangkan joni, Al-Khawarizmi, 2500 dan 34000 adalah nilai dari masing-masing variabel. Nilai-nilai ini akan tersimpan di dalam nama variabel masing-masing sepanjang tidak kita rubah. Pada sebagian besar bahasa pemrograman, variabel harus dideklarasikan lebih dulu untuk mempermudah compiler bekerja. Apabila variabel tidak dideklarasikan maka setiap kali compiler bertemu dengan variabel baru pada kode program akan terjadi waktu tunda karena compiler harus membuat variabel baru. Hal ini memperlambat proses kerja compiler. Bahkan pada beberapa bahasa pemrograman, compiler akan menolak untuk melanjutkan proses kompilasi. Pemberian nama variabel harus mengikuti aturan yang ditetapkan oleh bahasa pemrograman yang kita gunakan. Namun secara umum ada aturan yang berlaku untuk hampir semua bahasa pemrograman. Aturan-aturan tersebut yaitu: Nama variabel harus diawali dengan huruf. Tidak boleh menggunakan spasi pada satu nama variabel. Spasi bisa diganti dengan karakter underscore (_). Nama variabel tidak boleh mengandung karakter-karakter khusus, seperti :.,+, -, *, /, <, >, &, (, ) dan lain-lain. Nama variabel tidak boleh menggunakan kata-kata kunci d bahasa pemrograman 8

Penanaman Yang Benar Penanaman Yang Salah Namasiswa nama siswa (salah karena menggunakan spasi) XY12 12X (salah karena dimulai dengan angka) harga_total harga.total (salah karena menggunakan karakter.) JenisMotor Jenis Motor (salah karena menggunakan spasi) Alamatrumah for (salah karena menggunakan kata kunci bahasa pemrograman) 1.4 Konstanta Konstanta adalah variabel yang nilai datanya bersifat tetap dan tidak bisa diubah. Jadi konstanta adalah juga variabel bedanya adalah pada nilai yang disimpannya. Jika nilai datanya sepanjang program berjalan tidak berubahubah, maka sebuah varibel lebih baik diperlakukan sebagai konstanta. Pada sebuah kode program, biasanya nilai data dari konstanta diberikan langsung di bagian deklarasi konstanta. Sedangkan untuk variabel biasanya hanya ditentukan nama variabel dan tipe datanya tanpa isian nilai data. Aturan penamaan variabel juga berlaku untuk penamaan konstanta. Demikian juga aturan penetapan tipe data. konstanta dibagi menjadi 4: Konstanta integer, berupa integer biasa, integer panjang (long int) dan integer tak bertanda (unsigned integer). Nilainya dapat berupa desimal, oktal atau hexadesimal. Konstanta floating point, dapat mengandung nilai pecahan, yang biasa ditulis dalam bentuk pecahan biasa maupun bentuk eksponensial dan selalu dinyatakan dalam double, kecuali jika diakhiri dengan F atau f (menyatakan konstanta float). Konstanta string, merupakan deretan karakter yang diawali dan diakhiri dengan tanda petik ganda ( ). Juga dapat mengandung karakter yang menggunakan tanda \ yang disebut karakter escape (escape sequence). Konstanta karakter, selalu diawali dan diakhiri dengan tanda petik tunggal ( ). Beberapa konstanta karakter dapat diawali dengan tanda \ (penempatannya setelah tanda petik tunggal). 9

Sebagai contoh, jika kita membuat program perhitungan matematik yang menggunakan nilai pi (3.14159) yang mungkin akan muncul dibanyak tempat pada kode program, kita dapat membuat pi sebagai konstanta. Penggunaan konstanta pi akan lebih memudahkan penulisan kode program dibanding harus mengetikkan nilai 3.14159 berulang-ulang. 1.5 Fungsi Masukan dan Keluaran 1.5.1 Fungsi Masukan 1. scanf( ) Fungsi ini digunakan untuk memasukan berbagai jenis data. Bentuk penulisannya adalah: scanf( penentu format,&nama variabel); Simbol & merupakan pointer yang digunakan untuk menunjuk kealamat variabel memori yang dituju. Berikut Tabel Penentu Format scanf( ). TIPE DATA PENENTU FORMAT Integer %d Floating Point: Bentuk Desimal %e atau %f Bentuk Berpangkat %e atau %f Double Precision %lf Character %c String %s Unsigned Integer %u Long Integer Long Unsigned Integer %ld %lu Unsigned Hexadecimal Integer %x Unsigned Octa Integer %o 10

2. gets( ) Fungsi ini digunakan untuk memasukan untuk memasukan data string. Bentuk penulisannya adalah: gets(nama variabel-array); Perbedaan antara scanf( ) dengan gets( ) adalah: scanf( ) gets( ) Tidak dapat menerima string yang mengandung spasi atau tab dan dianggap sebagai data terpisah Dapat menerima string yang mengandung sapasi atau tab dan masing-masing dianggap sebagai satu kesatuan data 3. cin( ) iostream.h Untuk bisa menggunakan fungsi ini harus mensertakan file header 4. getch( ) Fungsi getch( ) (get character and echo) dipakai untuk membaca sebuah karakter dengan sifat karakter yang dimasukan tidak perlu diakhiri dengan menekan tombol ENTER, dan karakter yang dimasukan tidak akan ditampilkan dilayar. File header yang harus disertakan adalah conio.h 5. getche( ) Fungsi ini dipakai untuk membaca sebuah karakter dengan sifat karakter yang dimasukan tidak perlu diakhiri dengan menekan tombol ENTER, dan karakter yang dimasukan akan ditampilkan dilayar. File header yang harus disertakan adalah conio.h 1.5.2 Fungsi Keluaran 1. printf( ) Bentuk penulisannya: printf( string-kontrol, argumen 1, argumen 2); String-kontrol dapat berupa keterangan yang akan ditampilkan pada layar beserta penentu format. Penentu format dipakai untuk memberi tahu kompiler mengenai 11

jenis data yang dipakai dan akan ditampilkan. Argumen ini dapat berupa variabel, konstanta dan ungkapan. Berikut tabel penentu format printf( ) TIPE DATA PENENTU FORMAT Integer %d Floating Point: Bentuk Desimal %f Bentuk Berpangkat %e Bentuk Desimal dan Pangkat %g Double Precision %lf Character %c String %s Unsigned Integer %u Long Integer %ld Long Unsigned Integer %lu Unsigned Hexadecimal Integer %x Unsigned Octa Integer %o 2. puts ( ) Perintah puts ( ) sebenarnya sama dengan printf ( ), yaitu digunakan untuk mencetak string ke layar. Puts ( ) berasal dari kata put string. Perbedaan antara printf( ) dengan puts( ) adalah: printf( ) puts( ) Harus menentukan tipe data untuk string, yaitu %s Tidak perlu penentu tipe data string, karena fungsi ini khusus untuk tipe data string. Untuk mencetak pindah baris, Untuk mencetak pindah baris tidak perlu memerlukan notasi \n notasi \n, karena sudah diberikan otomatis 12

3. putchar( ) Perintah ini digunakan untuk menampilkan sebuah karakter kelayar.penampilan karakter tidak diakhiri pindah baris. 4. cout( ) Untuk menggunakan perintah ini harus menertakan file header iostream.h 1.6 Operator Bahasa Operator merupakan simbol atau karakter yang biasa dilibatkan dalam program untuk melakukan suatu operasi atau manipulasi, seperti menjumlahkan dua buah nilai, memberikan nilai ke suatu variabel, membandingkan kesamaan dua buah nilai dan sebagainya. Tabel 1.3 menunjukkan macam-macam operator yang disediakan oleh bahasa C. Di tabel ini, arah dari proses menunjukkan bagaimana hubungan antara operand-operand di operator akan diproses, mulai dari yang sebelah kiri operatornya kearah kanan atau sebaliknya. Misalnya ungkapan A/B, maka yang akan di bagi oleh B adalah A, berarti operator / mempunyai arah proses dari kirikanan. Jenjang menunjukkan operator mana yang akan dikerjakan terlebih dahulu jika dalam suatu ungkapan melibatkan lebih dari satu macam operator. Jenjang dengan nomor 1 adalah jenjang yang tertinggi. Misalnya ungkapan X=B+A, melibatkan dua operator; operator aritmatika + mempunyai jenjang yang lebih tinggi dibandingkan dengan operator pengerjaan =, sehingga ungkapan B+A akan dikerjakan terlebih dahulu dan kemudian hasilnya akan diberikan ke variabel X. 13

Tabel 1.3 Macam-macam Operator, Arah Proses, dan Jenjangnya Kategori Operator Arah Proses Jenjang Kurung, indeks, larik, dan elemen ( ) [ ] -> Kiri-kanan 1 Operator unary! ~ ++ & * (tipe) sizeof Kanan-kiri 2 Operator aritmatika perkalian, pembagian, dan sisa pembagian? * % Kiri-kanan 3 Operator aritmatika pertambahan, dan pengurangan + Kiri-kanan 4 Operator bitwise pergeseran bit << >> Kiri-kanan 5 Operator hubungan < <= > >= Kiri-kanan 6 Operator hubungan dan kesamaan dan ketidak-samaan ==!= Kiri-kanan 7 Operato bitwise AND & Kiri-kanan 8 Operator bitwise XOR ^ Kiri-kanan 9 Operator bitwise OR Kiri-kanan 10 Operator kondisi AND && Kiri-kanan 11 Operator kondisi OR Kiri-kanan 12 Operator Ternary? ; Kanan-kiri 13 Operator pengerjaan aritmatika Operator pengerjaan bitwise = += -= *= /= %= Kanan-kiri 14 &= ^= = <<= >>= Kanan-kiri 15 Operator koma, Kiri-kanan 16 14

Bahasa C menyediakan jenis-jenis operator misalnya operator aritmatika, operator pengerjaan, operator hubungan, operator logika, operator bitwise, dan operator koma. 1.6.1 OPERATOR ARITMATIKA (ARITHMETIC OPERATOR) Bahasa C menyediakan sejumlah operator aritmatika (arithmetic operator) seperti tampak pada table 1.4. tabel 1.4 Operator Aritmatika Operator Jenjang Fungsi * 3 Perkalian / 3 Pembagian + 4 Penjumlahan 4 Pengurangan % 3 Pembagian modulo (Sisa pembagian) Jenjang menunjukan operator mana yang akan diprosses terlebih dahulu. Misalnya operator bagi / (jenjang 3) akan diproses terlebih dahulu dibandingkan dengan operator penjumlahan + (jenjang 4). Untuk jenjang yang sama, operator yang akan diproses terlebih dahulu adalah yang berada diposisi lebih kiri. Misalnya ungkapan sebagai berikut : A+B/C+D mempunyai arti A + +D Agar ungkapan yang dimaksud tidak salah, maka dapat digunakan tanda kurung ( ). Karena operator ( ) adalah operator dengan jenjang tertinggi (jenjang 1) maka penggunaannya sebagai berikut : (A+B)/(C+D) yang mempunyai arti Operator modulus % hanya digunakan untuk nilai-nilai integer saja dan tidak dapat digunakan untuk operasi nilai pecahan (tipe float,double atau long double). 15

Operator ini akan menghasilkansisa dari pembagian (remainder) dari dua buah nilai integer. Contoh: #include <stdio.h> main() int X, Y, Z; X =9; Y =4; Z = X%Y; printf( Nilai Z = %d\n,z); } Jika program ini dijalankan, akan didapatkan hasil: Nilai Z = 1 OPERATOR UNARY Operator Unary merupakan operator Yang hanya menggunakan operand saja (dibandingkan dengan operator-operator lainnya yang menggunakan dua buah operand). Adapun operasi yang tergolong unary yaitu : Tabel 1.5 Operator Unary Operator Jenjang Fungsi 4 Unary minus ++ 2 2 Increase dengan penambahan nilai 1 Decrease dengan pengurangan nilai 1 (tipe) 2 Cast Sizeof 2 Ukuran operand dalam byte! 2 Unary NOT 16

~ 2 Komplemen 1 (bitwise NOT) & 2 * 2 Menghasilkan alamat memori operand (operator pointer) Menghasilkan nilai pengenal dialamatnya (operator pointer) Operator Unary Minus Operator Minus - digunakan untuk memberi nilai minus suatu nilai numerik (bukan untuk pengurangan). Misalnya ungkapan A+-B/C akan diartikan sebagai A+. Operator Unary ++ dan Operator Unary ++ dan operator unary - - merupakan operator khusus yang ada pada bahasa C dan jarang dijumpai di Bahasa yang lain. Operator ++ akan menambah nilai numerik 1 ke pengenal yang menggunakannya dan operator - akan mengurangi dengan nilai numerik 1 untuk pengenal yang menggunakannya. Misalnya bentuk X=X+1 dapat dituliskan sebagai X++. Sedangkan bentuk X=X-1 dapat dituliskan sebagai X. Operator ini banyak dijumpai di statement for yang berbentuk sebagai berikut For(I=1; I<10;I=I+1) Dapat ditulis dengan operator ++ sebagai berikut For(I=1;I<10;I++) Operator Unary (tipe) Operator Unary (tipe) merupakan operator yang memaksa suatu ungkapan yang mempunyai tipe yang diinginkan (disebut juga dengan cast). Tipe yang diinginkan ditulis di dalam tanda kurung didepan ungkapannya. Misalnya variable X dan Y adalah bertipe int dan Z bertipe float, maka untuk membuat hasil pembagian X/Y menjadi tipe float, dapat dituliskan Z = (float) X/Y; 17

Contoh : #include <stdio.h> main() int X,Y; float Z; X=7; Y=3; Z=(float)X/Y; printf( Nilai Z=%f, Z); } Jika program ini dijalankan akan didapatkan hasil : Nilai Z=2.333333 Operator Unary sizeof Operator Unary sizeof digunakan untuk mengetahui ukuran memori dari operandnya dari satuan byte. Operator ini biasa digunakan untuk maksud portabilitas dari suatu mesin komputer dari komputer lainya. Contoh : #include <stdio.h> main() char C; int I; long int LI; float F; double D; long double LD; printf ( ukuran karakter = %d byte \n, sizeof C); printf ( ukuran integer= %d byte\n, sizeof I); printf( ukuran long integer= %d byte \n,sizeof LI); printf ( ukuran float= %d byte \n,sizeof F); 18

printf ( ukuran double= %d byte \n,sizeof D); printf ( ukuran long double= %d byte \n,sizeof LD); } Jika program ini dijalankan maka akan didapatkan hasil: ukuran karakter= 1 byte ukuran integer= 2 byte ukuran long integer= 4 byte ukuran float= 4 byte ukuran double= 8 byte ukuuran long double= 10 byte 1.6.2 OPERATOR PENGERJAAN (ASSIGMENT OPERATOR) Operator pengerjaan digunakan untuk memindahkan nilai dari suatu ungkapan ke suatu pengenal. Operator pengerjaan yang umum digunakan dalam bahasa pemrograman, termasuk bahasa C adalah operator sama dengan (. Contoh : Maka = adalah operator pengerjaan yang akan memberikan nilai dari ungkapan kepada variabel. Tabel 1.6 Operator Pengerjaan Aritmatika Operator Jenjang Contoh Ekuivalen dengan 14 Mengerjakan ke 14 14 14 14 %= 14 19

Contoh : Misalnya variabel I dan J adalah variable-variabel tipe interger dengan nilai awal keduanya adalah 10. Statement-statement berikut ini menggunakan variablevariabel I dan J dan hasil ungkapannya. Tabel 1.6 Contoh Operator Pengerjaan Statement Ekuivalen dengan Hasil ungkapan I += 3; I = I + 3; I = 10+3 = 13 I -= 2; I = I 2; I = 10-2 = 8 I *= J/2; I = I*(J/2); I=10* (10/2)=50 I /= J-8; I = I/(J-8); I= 10/ (10-8)= 5 1.6.3 OPERATOR HUBUNGAN (RELATIONAL OPERATOR) Operator hubungan digunakan untuk menunjukkan hubungan antara dua buah operand. Operator ini banyak digunakan untuk penyeleksian kondisi dengan statement if, do-while atau while. Tabel 1.7 Operator Hubungan Operator Jenjang Fungsi < 6 Lebih kecil dari <= 6 Lebih kecil atau sama dengan > 6 Lebih besar dari >= 6 Lebih besar atau sama dengan == 7 Sama dengan!= 7 Tidak sama dengan 20

Contoh 1: Nilai A adalah 5, nilai B adalah 7, dan nilai C adalah a. Beberapa ungkapan hubungan yang menggunakan variable-variebel ini dan hasilnya tampak sebagai berikut. Tabel 1.8 Contoh Operator Hubungan Ungkapan Hubungan Hasil Nilai A == 5 Benar 1 A == B Salah 0 B < 7 Salah 0 A <= 7 Benar 1 (A+B)!= 35 Benar 1 C!= A Benar 1 C <= Z Benar 1 Contoh 2: #include <stdio.h> main() int A=5,B=7; printf( %d < %d hasilnya adalah %d \n, A,B,A<B); printf( %d<=%d hasilnya adalah %d \n, A,B,A<=B); printf( %d>%d hasilnya adalah %d \n,a,b,a>b); printf( %d>=%d hasilnya adalah %d \n,a,b,a>=b); printf( %d==%d hasilnya adalah %d \n,a,b,a==b); printf( %d!=%d hasilnya adalah %d \n,a,b,a!=b); } Jika program ini dijalankan akan didapatkan hasil : 5 < 7 hasilnya adalah 1 21

5 <= 7 hasilnya adalah 1 5 > 7 hasilnya adalah 0 5 >= 7 hasilnya adalah 0 5 == 7 hasilnya adalah 0 5!= 7 hasilnya adalah 1 Operator hubungan banyak digunakan untuk penyeleksian kondisi dengan statement if, do-while 1.6.4 OPERATOR LOGIKA (LOGICAL OPERATOR) Operator logika digunakan untuk membandingkan hasil dari operatoroperator hubungan. Operator Logika membandingkan dua buah nilai logika. Nilai logika adalah nilai benar atau salah. Tabel 1.9 Operator Logika Operator Jenjang Fungsi && 11 Logika DAN (AND) 12 Logika ATAU (OR) Misalnya nilai A adalah 5, B adalah 7, dan C adalah a, maka ungkapan logika berikut ini akan mempunyai hasil akhir benar. A<B B== 7 && C> z 1 1 1 && 0 2 1 0 3 22

Hasil akhir benar dari ungkapan logika tersebut didapat dari langkah-langkah sebagai berikut ini. 1) Jenjang operator hubungan lebih tinggi dibandingkan dengan jenjang operator logika, sehingga ungkapan-ungkapan hubungan dikerjakan terlebih dahulu. Ungkapan hubungan A < B adalah benar, maka akan bernilai 1. Ungkapan hubungan B == 7 adalah benar dan bernilai 1. Ungkapan hubungan C > z adalah salah maka bernilai 0. 2) Operator logika && mempunyai jenjang yang lebih tinggi dibandingkan dengan operator logika, sehingga ungkapan logika 1 && 0 dikerjakan terlebih dahulu dengan hasil logikanya adalah 0. 3) Ungkapan logika 1 0 selanjutnya dikerjakan dengan memberikan hasil akhir bernilai logika benar atau 1. Contoh : Nilai A adalah 5, Nilai B adalah 7, dan nilai C adalah a. Beberapa logika yang menggunakan variabel-variabel ini dan hasilnya tampak seperti berikut ini. Operator logika juga banyak digunakan untuk penyeleksian kondisi yang rumit dengan statemen if, do-while atau while. 1.6.5 OPERATOR KOMA (COMMA OPERATOR) Operator koma digunakan untuk menggabungkan beberapa ungkapan dengan proses yang berurutan dari ungkapan sebelah kiri koma ke ungkapan sebelah kanan koma. Misalnya Statement berikut ini X= ( B= 5, B*2); Akan dihasilkan nilai X adalah 10, karena B= 5 akan diproses terlebih dahulu dan kemudian nilai B di kalikan dengan nilai 2. Hasil akhir ini yaitu nilai 10 diberikan ke variabel X. Nilai B terakhir adalah 5, sedangkan operasi B*2 tidak merubah nilai B karena operasi ini hasilnya tidak disimpan di variabel B. 1.6.6 OPERATOR BITWISE Operator bitwise digunakan untuk memanipulasi bit-bit nilai data yang ada di memori. Operator-operator ini hanya dapat digunakan untuk tipe data char, int dan long int. 23

Tabel 1.10 Operator Bitwise Operator Jenjang Fungsi << 5 Pergeseran bit ke kiri >> 5 Pegeseran bit ke kanan & 8 Bitwise AND ^ 9 Bitwise XOR (Exclusive OR) 10 Bitwise OR ~ Bitwise NOT OPERATOR BITWISE KOMPLEMEN SATU Operator Bitwise komplemen satu (One s Complement Operator) kadangkadang disebut juga dngan istilah komplementation operator. Operator ini menggunakan symbol ~ dan merupakan operator Unary yang mempunyai arti bitwise NOT, yaitu membalik nilai-nilai bit 1 menjadi nilai- nilai bit 0 atau sebaliknya. Misalnya nilai binary 11011001 maka nilai komplemen satunya adalah nilai binary 00100110. OPERATOR BITWISE LOGIKA Tiga buah operator bitwise logika dapat digunakan, yaitu operator bitwise AND ( & ), Operator bitwise OR( ) dan operator bitwise XOR ( ^ ). Operator-operator ini menggunakan dua buah operand. Hubungan bit-bit untuk operator-operator ini dan hasilnya tampak pada tabel berikut Tabel hubungan Bit dan Hasilnya untuk Operasi Bitwise Logika. Tabel 1.11 Operator Bitwise Logika Bit AND OR XOR b1 b2 b1 & b2 b1 b2 b1 ^ b2 24

1 1 1 1 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 0 Contoh: #include <stdio.h> main() int X=0x2d; /*bernilai 45 dalam decimal */ int Y=0x1b; /* bernilai 27 dalam decimal */ printf( %x & %x hasilnya adalah %x (dalam heksadesimal)\n,x,y,x&y); printf( %x %x hasilnya adalah %x (dalam heksadesimal)\n, X,Y, X Y); printf( %x^ %x hasilnya adalah %x (dalam heksadesimal)\n,x,y,x^y); } Jika program ini dijalankan akan didapatkan hasil: 2d & 1b hasilnya adalah 9 (dalam heksadesimal) 2d 1b hasilnya adalah 3f(dalam heksadesimal) 2d 1b hasilnya adalah 36 (dalam heksadesimal) Operator bitwise & (AND) banyak digunakan untuk mengecek status dari suatu bit, apakah bernilai bit 1 atau bernilai bit 0. Misalnya variabel A adalah tipe char berukuran 1 byte (8 bit) dan bernilai desimal 125 atau bernilai 0111 1101 dalam binari. Operasi bit ini dapat dituliskan dalam bentuk desimal A & 64. Nilai binary 0100 0000 dalam desimal adalah nilai 64. Hasil dari operasi ini adalah nilai desimal 64. Jika hasil untuk yang diperiksa tidak sama dengan 0 berarti bit tersebut adalah bernilai 1. Untuk bit ke tiga dari ujung untuk variabel A dapat diperiksa dengan operasi A & 32 dan seterusnya. Untuk nilai 1 byte (8 bit) yang diperiksa, penyeleksian operasi bit dengan operator & dimulai dengan 128. Nilai 128 ini adalah 2^7. Untuk nilai 2 byte (16 bit), maka penyeleksian operasi bit dengan operator & dimulai dengan nilai 2^15=32768. Nilai 128,32768 dan seterusnya ini berarti tergantung dari ukuran tipe datanya dan dapat dirumuskan sebesar 2 pangkat (sizeof(tipe datanya )*8-1). 25

OPERATOR PERGESERAN BIT Dua buah operator yang dapat digunakan untuk pergeseran bit adalah shift left ( << ) dan shift right( >> ). Operator-operator ini membutuhkan dua buah operand. Operand pertama adalah nilai integer yang nilai bit-bitnya akan digeser dan operand kedua menunjukkan banyaknya pergeseran. Misalnya ungkapan 125<<2 akan dihasilkan nilai 500 (0x1f4 dalam heksadesimal) sebagai berikut: Nilai 125 = 0000 0000 0111 1101 Digeser 2 bit ke kiri = 0000 0001 1111 0100 Sedangkan ungkapan 125>>2 akan dihasilkan nilai 31 (0x1f dalam heksadesimal) sebagai berikut: Nilai 125 = 0000 0000 0111 1101 Digeser 2 bit ke kanan = 0000 0000 0001 1111 2.7.4 OPERATOR BITWISE PENGERJAAN Bahasa C juga menyediakan operator-operator pengerjaan untuk bitwise. Operatoroperator ini adalah &=, ^=, =, <<= dan >>=. Contoh: Misalkan A adalah variabel tipe integer dengan nilai decimal 125 (0x7d dalam heksadesimal). Beberapa ungkapan pengerjaan bitwise berikut ini menggunakan variabel A dan hasil akhirnya tampak sebagai berikut ini. Tabel 1.12 Operator Bitwise Pengerjaan Ungkapan Ekuivalen dengan Hasil A &=0x1b A ^=0x1b A =0x1b A <<=2 A >>=2 A =A & 0x1b A =A ^ 0x1b A =A 0x1b A =A <<2 A =A >>2 0x19 (25 dalam nilai desimal) 0x66 (102 dalam nilai desimal) 0x7f (127 dalalmm nilai desimal) 0x1f (500 dalam nilai desimal) 0x1f (31 dalam nilai desimal) 26

1.7 Manipulasi String String dapat dimanipulasi dengan aturan tertentu. Di mana bahasa C++ telah menyediakan semua ini ke dalam pustakanya. Berikut adalah fungsi-fungsi yang digunakan untuk melakukan manipulasi string : Fungsi strcat Fungsi strcat digunakan untuk menggabungkan dua string menjadi satu. Fungsi strlen Fungsi strlen digunakan untuk menghitung panjang karakter pada suatu string. strlen adalah fungsi yang bertipe data integer. Fungsi strcpy Fungsi strcpy digunakan untuk menyalin isi string ke suatu variabel. Fungsi strupr Fungsi strupr digunakan untuk mengubah semua karakter huruf yang terdapat pada suatu variabel menjadi huruf besar semua (Uppercase). Fungsi strlwr Fungsi strlwr digunakan untuk mengubah semua karakter huruf yang terdapat pada suatu variable menjadi huruf kecil semua (Lowercase). 27

BAB II FUNGSI IF Sebuah pernyataan yang dapat dipakai untuk mengambil keputusan berdasarkan suatu kondisi. Pernyataan-pernyataan tersebut memerlukan suatu kondisi, sebagai basis dalam pengambilan keputusan. Kondisi umum yang dipakai berupa keadaan benar dan salah. Oleh karena itu pembahasan pada bab ini akan diawali dengan pengenalan operator yang membentuk kondisi benar dan salah. 2.1 Operator Kondisi Operator yang digunakan untuk menghasilkan kondisi benar dan salah, bisa berupa operator relasi dan bisa juga berupa operator logika. Berikut ini dibahas masing-masing jenis operator serta tabel prioritas masing-masing operator. 2.1.1. Operator Relasi Operator relasi biasa dipakai untuk membandingkan dua buah nilai. Hasil pembandingan berupa keadaan benar atau salah. Keseluruhan operator relasi pada C ditunjukkan pada Tabel 2-1. Tabel 2-1. Operasi relasi Operator > >= < <= ==!= Makna Lebih dari Lebih dari atau sama dengan Kurang dari Kurang dari atau sama dengan Sama dengan Tidak sama dengan Khususnya untuk operator relasi sama dengan (==) harap dibedakan dengan operator (=) yang merupakan operator penugasan (assignment). Contoh: Pembandingan Hasil 1 > 2 Salah 28

1 < 2 Benar A == 1 Benar, jika A bernilai 1 Salah, jika A tidak bernilai 1 'A' < 'B' Benar, karena kode ASCII untuk karakter A kurang dari kode ASCII untuk karakter B *) kar == 'Y' Benar, jika kar berisi 'Y' Salah, jika kar tidak berisi 'Y' *) Dalam daftar ASCII standar, kode untuk karakter A = 65 sedangkan karakter B = 66, C = 67, D = 68 dan seterusnya sampai dengan karakter Z = 90. 2.1.2. Operator Logika. Operator logika biasa dipakai untuk menghubungkan ekspresi relasi. Keseluruhan operator logika ditunjukkan pada tabel 3-2. Tabel 3-2. Operator logika Operator Makna Contoh &&! dan (AND) atau (OR) tidak (NOT) (a > 10) && (a < 100) (n < 0) (n > 100)!a Bentuk pemakaian operator && dan adalah operand1 operator operand2 Baik operand1 maupun operand2 dapat berupa ekspresi relasi ataupun ekspresi logika. Hasil ekspresi bias bernilai benar atau salah. Pada C nilai hasil dari sebuah ekspresi relasi atau ekspresi logika jika dinyatakan dengan angka adalah : Salah nilai = 0 Benar nilai!= 0 (misalnya nilai = 1) Tabel 2-3 memberikan penjelasan hasil operasi ekspresi logika yang menggunakan operator && maupun untuk berbagai kemungkinan keadaan operand-nya. 29

Tabel 2-3. Kemungkinan pada operasi logika && dan Operand1 Operand2 Hasil && Salah Salah Benar Benar Salah Benar Salah Benar 0 1 1 1 0 0 0 1 Tampak bahwa operator atau ( ) menghasilkan nilai 1 jika ada operand yang benar. Hasil berupa 0 jika semua operand adalah salah. Adapun operator logika dan (&&) memberikan hasil 1 hanya jika kedua operand adalah benar. Beberapa contoh ekspresi logika di antaranya : (kar > 'A') && (kar < 'Z') Hasil operasi logika && adalah benar hanya jika kar > 'A' dan kar < 'Z' (dalam hal ini yang diperbandingkan adalah kode ASCII dari karakter tsb). (pilihan == 'Y') (pilihan == 'y') Hasil operasi logika adalah benar jika pilihan berupa 'Y' atau 'y' Sedangkan bentuk pemakaian operator logika! adalah :!operand dengan operand dapat berupa ekspresi logika ataupun ekspresi relasi. Hasil operasi! bernilai : 1 jika operand bernilai salah 0 jika operand bernilai benar Perhatikan contoh potongan program di bawah ini : if (!sudah_benar) printf( Masukan Anda salah!\n ); Pada contoh potongan program di atas, dilakukan pengecekan kondisi terhadap nilai dari variabel sudah_benar. Jika variabel sudah_benar bernilai 0, maka kondisi!sudah_benar akan bernilai benar (true) sehingga instruksi : printf( Masukan Anda salah!\n ); 30

akan diproses. Penjelasan lebih rinci tentang pengecekan kondisi dengan pernyataan if dibahas pada sub bab 3.2. 2.1.3 Prioritas Operator Logika dan Relasi Tabel berikut ini memberikan penjelasan singkat mengenai prioritas di antara berbagai operator logika dan operator relasi. Tabel 3-4 Prioritas operator logika dan relasi Tertinggi :! > >= < <= = =!= Berdasarkan prioritas yang ditunjukkan pada tabel 3-4, maka ekspresi seperti (kar > 'A') && (kar < 'Z') sama saja kalau ditulis menjadi kar > 'A' && kar < 'Z' Hanya saja penulisan dengan menggunakan tanda kurung akan lebih memberikan kejelasan. 2.2 Pernyataan if Sederhana Pernyataan if mempunyai bentuk umum : if (kondisi ) pernyataan; Bentuk ini menyatakan : jika kondisi yang diseleksi adalah benar (bernilai logika = 1), maka pernyataan yang mengikutinya akan diproses. Sebaliknya, jika kondisi yang diseleksi adalah tidak benar (bernilai logika = 0), maka pernyataan yang mengikutinya tidak akan diproses. Mengenai kodisi harus ditulis diantara tanda kurung, sedangkan pernyataan dapat berupa sebuah pernyataan tunggal, pernyataan majemuk atau pernyataan kosong. Diagram alir dapat dilihat seperti gambar 3.1 31

kondisi salah benar pernyataan Gambar 3.1. Diagram alir if Contoh penggunaan pernyataan if adalah untuk menentukan besarnya potongan harga yang diterima oleh seorang pembeli, berdasarkan kriteria : tidak ada potongan harga jika total pembelian kurang dari Rp. 100.000 (dalam hal ini potongan harga diinisialisasi dengan nol). bila total pembelian lebih dari atau sama dengan Rp. 100.000, potongan harga yang diterima dirubah menjadi sebesar 5% dari total pembelian. 32

Contoh 1 /* File program : discount.c Contoh penggunaan if untuk menghitung nilai discount */ #include <stdio.h> main() double total_pembelian, discount = 0; /* discount diinisialisasi dengan nilai 0 */ printf("total pembelian = Rp ); scanf("%lf", &total_pembelian); if(total_pembelian >= 100.000) discount = 0.05 * total_pembelian; printf("besarnya discount = Rp %.2lf\n", discount); } Contoh eksekusi : Total pembelian = Rp 200000 Besarnya discount = Rp 10000.00 33

Contoh 2 Outputnya : Berapa usia anda : 12 Anda tidak diperkenankan menonton Penjelesan : Tampak bahwa kalau usia yang dimasukkan lebih dari atau sama dengan 17, program tidak menghasilkan apa-apa. 2.3. Pernyataan if Majemuk Pernyataan if-else memiliki bentuk : if (kondisi) pernyataan-1; else pernyataan-2; Diagram alir dapat dilihat seperti gambar 3.2. kondisi salah benar pernyataan-1 pernyataan-2 34

Arti dari pernyataan if-else : Jika kondisi benar, maka pernyataan-1 dijalankan. Sedangkan bila kondisi bernilai salah, maka pernyataaan-2 yang dijalankan. Masing-masing pernyataan-1 dan pernyataan-2 dapat berupa sebuah pernyataan tunggal, pernyataan majemuk ataupun pernyataan kosong. Bentuk Umumnya Dua Kasus : if (kondisi) pernyataan1 ; else pernyataan2; Untuk pernyataan if yang diikuti dengan pernyataan majemuk, bentuknya adalah sebagai berikut : if (kondisi) /* tanda awal pernyataan majemuk*/ pernyataan-1; pernyataan 2;... pernyataan-n; } /* tanda akhir pernyataan majemuk */ Pernyataan-pernyataan yang berada dalam tanda kurung dan } akan dijalankan hanya bila kondisi if bernilai benar. Pernyataan1 dilaksanakan jika dan hanya jika kondisi yang diinginkan terpenuhi, jika tidak, lakukan pernyataan2. Jika Anda tidak mempergunakan pernyataan else program tidak akan error, 35

namun jika anda mempergunakan pernyataan else tanpa didahului pernyataan if, maka program akan error. Jika pernyataan1 atau pernyataan2 hanya terdiri dari satu baris, maka tanda } tidak diperlukan, namun jika lebih maka diperlukan. Contoh penggunaan pernyataan if-else adalah untuk menyeleksi nilai suatu bilangan pembagi. Jika nilai bilangan pembagi adalah nol, maka hasil pembagian dengan nilai nol akan mendapatkan hasil tak berhingga. Jika ditemui nilai pembaginya nol, maka proses pembagian tidak akan dilakukan. /* File program : bagi.c Pemakaian if-else untuk menyeleksi bilangan pembagi */ #include <stdio.h> main() float a, b; printf("masukkan nilai a : "); scanf("%f", &a); printf("masukkan nilai b : "); scanf("%f", &b); } if (b == 0) printf("\n%g dibagi dengan nol = TAK BERHINGGA\n", a); else printf("\n%g dibagi dengan %g = %g\n", a, b, a/b); 36

Contoh eksekusi : Masukkan nilai a : 5 Masukkan nilai b : 0 5 dibagi dengan nol = TAK BERHINGGA Contoh 1: Contoh 2: Outputnya : Berapa usia anda? 16 Anda tidak diperkenankan menonton Penjelesan : Terlihat bahwa kalau usia yang dimasukkan lebih dari 17, program akan memberi pesan Selamat Menonton. Selain dari if else, juga dikenal bentuk if else if. Adapun perbedaannya diilustrasikan oleh dua contoh dibawah ini. 37

Contoh 3 : Outputnya: 166 Lebih Besar dari 100 166 Lebih Besar dari 10 Mengapa? Karena contoh 2 sama saja jika ditulis seperti dibawah ini 38

2.4. Pernyataan if bersarang (nested if) Di dalam suatu pernyataan if (atau if-else) bisa saja terdapat pernyataan if (atau if-else) yang lain. Bentuk seperti ini dinamakan sebagai nested if. Secara umum, bentuk dari pernyataan ini adalah sebagai berikut : if (kondisi-1) else if (kondisi-2).. else if(kondisi-n) pernyataan; else pernyataan;.. pernyataan; pernyataan; Kondisi yang akan diseleksi pertama kali adalah kondisi yang terluar (kondisi- 1). Jika kondisi-1 bernilai salah, maka statemen else yang terluar (pasangan if yang bersangkutan) yang akan diproses. Jika else (pasangannya tsb) tidak ditulis, maka penyeleksian kondisi akan dihentikan. Jika kondisi-1 bernilai benar, maka kondisi berikutnya yang lebih dalam (kondisi-2) akan diseleksi. Jika kondisi-2 bernilai salah, maka statemen else pasangan dari if yang bersangkutan yang akan diproses. Jika else (untuk kondisi-2) tidak ditulis, maka penyeleksian kondisi akan dihentikan. Dengan cara yang sama, penyeleksian kondisi akan dilakukan sampai dengan kondisi-n, jika kondisi-kondisi sebelumnya bernilai benar. 39

Contoh 1 : /* File program : determinan1.c Program untuk menghitung determinan dan akar-akar persamaan kuadrat menggunakan if bersarang */ #include <stdio.h> #include <math.h> main() float a, b, c, d = 0; double x1, x2, imaginair; printf("mencari AKAR-AKAR PERSAMAAN KUADRAT ax^2+bx+c=0\n"); printf("\nmasukkan nilai a : "); scanf("%f", &a); printf("masukkan nilai b : "); scanf("%f", &b); printf("masukkan nilai c : "); scanf("%f", &c); d = b*b-4*a*c; /* menghitung determinan */ if (d >= 0) if (d == 0) x1 = -b / (2 * a); printf("\ndua akar real kembar yaitu : \n"); printf("x1 = x2 = %g\n", x1); } else x1 = (-b + sqrt(d))/(2*a); 40

x2 = (-b - sqrt(d))/(2*a); printf("\ndua akar real berlainan yaitu :\n"); printf("x1 = %g\n", x1); printf("x2 = %g\n", x2); } else imaginair = (sqrt(-d)/(2*a)); x1 = -b/(2*a); printf("\ndua akar imaginair berlainan yaitu : \n"); printf("x1 = %g + %gi\n", x1, imaginair); printf("x2 = %g - %gi\n", x1, imaginair); } } Contoh eksekusi : MENCARI AKAR-AKAR PERSAMAAN KUADRAT a+bx+c=0 Masukkan nilai a : 3 Masukkan nilai b : 6 Masukkan nilai c : 2 Dua akar real berlainan yaitu : X1 = -0.42265 X2 = -1.57735 41

Contoh 2 : Contoh diatas disebut juga nested conditional Contoh 3 : Contoh implementasi nested if ini misalnya pembuatan sebuah program kalkulator sederhana. User memberikan masukan dengan format : operand1 operator operand2 Jenis operasi yang dikenakan bergantung pada jenis operator ang dimasukkan oleh user. Oleh karena itu program akan mengecek apakah operator berupa tanda *, /, +, ataukah tanda -. Jika operator berupa tanda * maka operand1 akan dikalikan dengan operand2. Jika operator berupa tanda / maka operand1 akan dibagi dengan operand2. Jika operator berupa tanda + maka operand1 akan dijumlahkan dengan operand2. Jika operator berupa tanda - maka operand1 akan dikurangi dengan operand2. Kalau operator yang dimasukkan bukan merupakan salah satu dari jenis operator di atas, maka ekspresi tersebut tidak akan diproses, dan user akan mendapatkan pesan berupa : Invalid operator! 42

/* File program : kalkulator1.c Contoh penggunaan else if untuk mengimplementasikan program kalkulator sederhana */ #include <stdio.h> main() int valid_operator = 1; /* valid_operator diinisialisasi dengan logika 1 */ char operator; float number1, number2, result; printf("masukkan 2 buah bilangan dan sebuah operator\n"); printf("dengan format : number1 operator number2\n\n"); scanf("%f %c %f", &number1, &operator, &number2); if(operator == '*') result = number1 * number2; else if(operator == '/') result = number1 / number2; else if(operator == '+') result = number1 + number2; else if(operator == '-') result = number1 - number2; else valid_operator = 0; ); } if(valid_operator) printf("\n%g %c %g is %g\n", number1, operator, number2, result else printf("invalid operator!\n"); 43

Contoh eksekusi : Masukkan 2 buah bilangan dan sebuah operator dengan format : number1 operator number2 23.2 + 12 23.2 + 12 is 35.2 44

BAB 3 FUNGSI DAN STRUKTUR 3.1 FUNGSI Penjelasan Fungsi (Function) merupakan blok dari kode yang dirancang untuk melaksanakan tugas khusus. Kegunaan dari fungsi ini adalah untuk: - Mengurangi pengulangan penulisan program yang berulangan atau sama. - Program menjadi lebih terstruktur, sehingga mudah dipahami dan dapat lebih dikembangkan. Fungsi-fungsi yang sudah kita kenal sebelumnya adalah fungsi main(), yang bersifat mutlak, karena fungsi ini program akan dimulai, sebagai contoh yang lainnya fungsi printf(), cout() yang mempunyai tugas untuk menampilkan informasi atau data kelayar dan masih banyak lainnya. Beberapa fungsi yang telah tersedia di dalam bahasa c++, antara lain: 3.1.1 Fungsi Operasi String (string.h) - strcpy() Berfungsi untuk menyalin suatu string asal ke variable string tujuan. Bentuk umum : strcpy(var_tujuan, string_asal); #include <stdio.h> #include <conio.h> #include <string.h> #include <iostream.h> main() char huruf[20]; char pindah[20]; 45

clrscr(); cout<<"masukkan Sembarang Kata = "; gets(huruf); /* Proses */ strcpy(pindah, huruf); cout<<"pemindahannya = "<<pindah; getch(); } - strlen() Berfungsi untuk memperoleh jumlah karakter dari suatu string. Bentuk umum : strlen(string); #include <stdio.h> #include <conio.h> #include <string.h> #include <iostream.h> main() char kata[20]; clrscr(); cout<<"masukan Sembarang Kata = "; 46

gets(kata); strrev(kata); cout<<"hasil Perubahan = "<<kata; getch(); } - strcat() Berfungsi untuk menambahkan string sumber ke bagian akhir dari string tujuan. Bentuk umum : strcat(tujuan, sumber); #include <stdio.h> #include <conio.h> #include <string.h> #include <ctype.h> #include <iostream.h> main() char a1[20]; char a2[20]; clrscr(); cout<<"masukkan Kata - 1= "; cin>>a1; 47

cout<<"masukkan Kata - 2= "; cin>>a2; strcat(a1, a2); cout<<"hasil Penggabungannya "<<a1; getch(); } - strupr() Berfungsi untuk mengubah setiap huruf dari suatu string menjadi huruf capital. Bentuk umum : strupr(string); #include <stdio.h> #include <conio.h> #include <string.h> #include <iostream.h> main() char kata[20]; clrscr(); cout<<"masukan Sembarang Kata dengan Huruf Kecil="; gets(kata); strupr(kata); cout<<"hasil Perubahan = "<<kata; getch(); 48

} - strlwr() Berfungsi untuk mengubah setiap huruf dari suatu string menjadi huruf kecil semua. Bentuk umum : strlwr(string); #include <stdio.h> #include <conio.h> #include <string.h> #include <iostream.h> main() char kata[20]; clrscr(); cout<<"masukan Sembarang Kata dengan Huruf Besar ="; gets(kata); strlwr(kata); cout<<"hasil Perubahan = "<<kata; getch(); } 49

- strcmp() Berfungsi untuk membandingkan dua buah string. Hasil dari fungsi ini bertipe integer dengan nilai (a) Negative, jika string pertama kurang dari string kedua, (b) Nol, jika string pertama sama dengan string kedua, (c) Positif, h=jika string pertama lebih besar dari string kedua. Bentuk umum : strcmp(string1,string2); #include <stdio.h> #include <conio.h> #include <string.h> #include <iostream.h> main() char a1[] = "FEPI"; char a2[] = "FePi"; char b1[] = "fepi"; clrscr(); cout<<"hasil Perbandingan "<<a1<<" dan "<<a2<<"->"; cout<<strcmp(a1,a2)<<endl; cout<<"hasil Perbandingan "<<a2<<" dan "<<a2<<"->"; cout<<strcmp(a2,a1) <<endl; cout<<"hasil Perbandingan "<<a1<<" dan "<<b1<<"->"; 50

} cout<<strcmp(a1,b1) <<endl; getch(); 3.1.2 Fungsi Karakter (ctype.h) - islower() Fungsi akan menghasilkan nilai benar (bukan nol) jika karakter merupakan hurup kecil. Bentuk umum : islower(char); - isupper() Fungsi akan menghasilkan nilai benar (bukan nol) jika karakter merupakan hurup capital. Bentuk umum : isupper(char); - isdigit() Fungsi akan menghasilkan nilai benar (bukan nol) jika karakter merupakan sebuah digit. Bentuk umum : isdigit(char); - tolower() Fungsi akan mengubah hurup kapital menjadi hurup kecil. Bentuk umum : tolower(char); - toupper() Fungsi akan mengubah hurup kecil menjadi hurup kapital Bentuk Umum : toupper(char); 51

3.1.3 Fungsi Operasi Matematika (math.h dan stdlib.h) - Sqrt() Digunakan untuk menghitung akar dari sebuah bilangan. Bentuk Umum : sqet(bilangan); - pow() Digunakan untuk menghitung pemangkatan suatu bilangan. Bentuk umum : pow(bilangan,pangkat); - sin(),cos(),tan() Masing-masing digunakan untuk menghitung nilai sinus, cosinus, dan tangens dari suatu sudut. Bentuk umum : sin(sudut); Cos(sudut); Tan(sudut); - atof() Digunakan untuk mengkonversi nilai string menjadi bilangan bertipe double. Bentuk umum : atof(char x); - atoi() Digunakan untuk mengkonversi nilai string menjadi bilangan bertipe integer. Bentuk umum : atoi(char x): - div() Digunakan untuk menghitung hasil pembagian dan sisa pembagian. Bentuk umum : div_t div(int x,int y) Strukturnya : Typedef struct int qout; //hasil pembagian Int rem //sisa pembagian }div_t; 52

- max() Digunakan untuk menentukan nilai maksimal dari dua buah bilangan. Bentuk umum : max(bilangan1, bilangan2); - min() Digunakan untuk menentukan nilai minimal dari dua buah bilangan. Bentuk umum : min(bilangan1, bilangan2); Membuat Fungsi Sendiri Deklarasi Fungsi Sebelum digunakan (dipanggil), suatu fungsi harus dideklarasikan dan didefinisikan terlebih dahulu. Bentuk umum pendeklarasian fungsi adalah : tipe_fungsi nama_fungsi(parameter_fungsi); Sedangkan bentuk umum pendefinisian fungsi adalah :Tipe_fungsi nama_fungsi(parameter_fungsi) statement statement...... } Hal-hal yang perlu diperhatikan dalam penggunaan fungsi : 1. Kalau tipe fungsi tidak disebutkan, maka akan dianggap sebagai fungis dengan nilai keluaran bertipe integer. 2. Untuk fungsi yang memiliki keluaran bertipe bukan integer, maka diperlukan pendefinisian penentu tipe fungsi. 3. Untuk fungsi yang tidak mempunyai nilai keluaran maka dimasukkan ke dalam tipe void 4. Pernyataan yang diberikan untuk memberikan nilai akhir fungsi berupa pernyataan return. 5. Suatu fungsi dapat menghasilkan nilai balik bagi fungsi pemanggilnya. 53

Parameter Formal dan Parameter Aktual 1. Parameter Formal adalah variabel yang ada pada daftar parameter dalam definisi fungsi. 2. Parameter Aktual adalah variabel (parameter) yang dipakai dalam pemanggilan fungsi. Cara Melewatkan Parameter Cara melewatkan suatu parameter dalam Bahasa C ada dua cara yaitu : 1. Pemanggilan Secara Nilai (Call by Value) Call by value akan menyalin nilai dari parameter aktual ke parameter formal. Yang dikirimkan ke fungsi adalah nilai dari datanya, bukan alamat memori letak dari datanya. Fungsi yang menerima kiriman nilai akan menyimpannya di alamat terpisah dari nilai aslinya yang digunakan oleh bagian program yang memanggil fungsi. Perubahan nilai di fungsi (parameter formal) tidak akan merubah nilai asli di bagian program yang memanggilnya. Pengiriman parameter secara nilai adalah pengiriman searah, yaitu dari bagian program yang memanggil fungsi ke fungsi yang dipanggil. Pengiriman suatu nilai dapat dilakukan untuk suatu ungkapan, tidak hanya untuk sebuah variabel, elemen array atau konstanta saja. Contoh Call by Value #include<conio.h> #include<stdio.h> #include<iostream.h> tambah(int m, int n); main() int a, b; 54

a = 2; b = 5; clrscr(); cout<<"nilai Sebelum Fungsi Digunakan "; cout<<"\na = "<<a<<" b = "<<b; tambah(a,b); cout<<"\nnilai Setelah Fungsi Digunakan"; cout<<"\na = "<<a<<" b = "<<b; getch(); } tambah(int m, int n) m+=8; n+=5; cout<<"\n\nnilai di dalam Fungsi Tambah()"; cout<<"\nm = "<<m<<" n = "<<n; cout<<endl; } 55

2. Secara Referensi (Call by Reference) Pemanggilan secara Referensi merupakan upaya untuk melewatkan alamat dari suatu variabel ke dalam fungsi. Yang dikirimkan ke fungsi adalah alamat letak dari nilai datanya, bukan nilai datanya. Fungsi yang menerima kiriman alamat ini makan menggunakan alamat yang sama untuk mendapatkan nilai datanya. Perubahan nilai di fungsi akan merubah nilai asli di bagian program yang memanggil fungsi. Pengiriman parameter secara referensi adalah pengiriman dua arah, yaitu dari fungsi pemanggil ke fungsi yang dipanggil dan juga sebaliknya. Pengiriman secara acuan tidak dapat bdilakukan untuk suatu ungkapan. Contoh Call by Reference #include<conio.h> #include<stdio.h> #include<iostream.h> tambah(int *c, int *d); main() int a, b; a = 2; b = 5; clrscr(); cout<<"nilai Sebelum Pemanggilan Fungsi"; cout<<"\na = "<<a<<" b = "<<b; tambah(&a,&b); cout<<endl; cout<<"\nnilai Setelah Pemanggilan Fungsi"; cout<<"\na = "<<a<<" b = "<<b; getch(); 56

} tambah(int *c, int *d) *c+=8; *d+=5; cout<<endl; cout<<"\nnilai di Akhir Fungsi Tambah()"; cout<<"\nc = "<<*c<<" d = "<<*d; } Penggolongan Variabel berdasarkan Kelas Penyimpanan (Storage Class) 1. Variabel lokal Variabel lokal adalah variabel yang dideklarasikan di dalam fungsi. Sifat-sifat variabel lokal : Secara otomatis akan diciptakan ketika fungsi dipanggil dan akan lenyap ketika proses eksekusi terhadap fungsi berakhir. Hanya dikenal oleh fungsi tempat variabel dideklarasikan. Tidak ada inisialisasi secara otomatis (saat variabel diciptakan nilainya random). Dideklarasikan dengan menambahkan kata auto (opsional). Contoh Variabel local: #include<conio.h> #include<stdio.h> #include<iostream.h> 57

lokal(); main() int a = 15; clrscr(); cout<<"pemanggilan Variabel Lokal"<<endl; cout<<"\nnilai didalam funsi main() = : "<<a; lokal(); cout<<"\nnilai didalam funsi main() = : "<<a; getch(); } lokal() int a = 10; cout<<"\nnilai a didalam fungsi lokal() = "<<a; } 2. Variabel global (eksternal) Variabel global (eksternal) adalah variabel yang dideklarasikan di luar fungsi. Sifat-sifat variabel global : Dikenal (dapat diakses) oleh semua fungsi. Jika tidak diberi nilai awal secara otomatis berisi nilai nol. Dideklarasikan dengan menambahkan kata extern (opsional). Contoh Variabel global: 58

#include<conio.h> #include<stdio.h> #include<iostream.h> int a = 6; //--> deklarasi variabel eksternal void lokal(); void main() clrscr(); cout<<"penggunaan Variabel Eksternal"<<endl; cout<<"\nnilai didalam funsi main() = : "<<a; lokal(); //--> pemanggilan fungsi local cout<<"\nnilai Setelah penggilan fungsi local() = "; cout<<a; getch(); } void lokal() a+=10; } 59

3. Variabel Statis Variabel statis adalah variabel yang nilainya tetap dan bisa berupa variable lokal (internal) dan variabel global (eksternal). Sifat-sifat variabel statis : Jika bersifat internal (lokal), maka variabel hanya dikenal oleh fungsi tempat variabel dideklarasikan. Jika bersifat eksternal (global), maka variabel dapat dipergunakan oleh semua fungsi yang terletak pada program yang sama. Nilai variabel statis tidak akan hilang walau eksekusi terhadap fungsi telah berakhir. Inisialisasi hanya perlu dilakukan sekali saja, yaitu pada saat fungsi dipanggil pertama kali. Jika tidak diberi nilai awal secara otomatis berisi nilai nol. Dideklarasikan dengan menambahkan kata static. Contoh variable statis: #include<conio.h> #include<stdio.h> #include<iostream.h> walah(); //--> prototipe fungsi walah main() int k = 5; clrscr(); walah(); walah(); cout<<"\nnilai K didalam fungsi main() = "<<k; getch(); } walah() static int k; // --> deklarasi variabel statis 60

k += 4; cout<<"\nnilai K didalam fungsi() = "<<k; } 4. Variabel Register Variabel Register adalah variabel yang nilainya disimpan dalam resister dan bukan dalam memori RAM. Sifat-sifat variabel register : Hanya dapat diterapkan pada variabel lokal yang bertipe int dan char. Digunakan untuk mengendalikan proses perulangan (looping). Proses perulangan akan lebih cepat karena variabel register memiliki kecepatan yang lebih tinggi dibandingkan variabel biasa. Dideklarasikan dengan menambahkan kata register. F U N G S I R E K U R S IF Rekursif ialah salah satu teknik pemrograman dengan cara memanggil sebuah fungsi dari dirinya sendiri, baik itu secara langsung maupun tidak langsung. Pemanggilan fungsi rekursif secara langsung berarti dalam fungsi tersebut terdapat statement untuk memanggil dirinya sendiri sedangkan secara tidak langsung berarti fungsi rekursif tersebut memanggil 1 atau lebih fungsi lain sebelum memanggil dirinya sendiri. 61

Tipe_fungsi nama_fungsi([parameter]) // statement coba([parameter]) // statement Fungsi Rekursif Langsung [ret-val] satu([parameter]) // statement dua([parameter]) // statement } [ret-val] dua([parameter]) // statement satu([parameter]) // statement } Fungsi Rekursif Tak Langsung Rekursif tidak selalu lebih jelek daripada iteratif. Ada kalanya sebuah fungsi rekursif justru empermudah penyelesaian masalah yang ditemui pada kasus iterative (pengulangan). Kelemahan pada proses rekursif antar lain, memerlukan tempat penampungan stack yang cukup besar. Karena setiap kali pemanggilan fungsi, register register seperti cs ( untuk memory far ) dan ip harus disimpan, belum lagi untuk penanganan local variable serta parameter fungsi yang tentunya membutuhkan ruang untuk stack lebih banyak lagi. Selain itu karena setiap pemanggilan fungsi, register dan memory harus di push ke stack maka setelahselesai pemanggilan perlu diadakannya pop stack. untuk mengembalikan memory dan register kembali ke keadaan awal, ini sering disebut sebagai overhead. 62

Proses Rekursif marilah Untuk dapat memahami proses yang terjadi dalam sebuah fungsi rekursif, kita simak contoh fungsi rekursif berikut : void rekursi(int a,int b) if (b == 0) return; a++; Misalkan Fungsi tersebut dipanggil dengan nilai a = 3 dan b = 3 maka b--; pertama-tama printf("masuk di cek apakah -> a b = = %d 0 (if (b b == = 0) %d return), \n",a,b); jika sama maka keluar. rekursi(a,b); Ternyata printf("keluar nilai b tidak sama -> dengan a = %d 0 maka b tambahkan = %d \n",a,b); a dengan 1 dan kurangi b dengan } 1. Maka keadaan sekarang menjadi a = 4 dan b = 2. Baris berikutnya menampilkan nilai a dan b ke layar (printf("masuk -> a = %d b = %d \n",a,b)). Kemudian panggil fungsi rekursi dengan nilai a = 4 dan b = 2. Langkah langkah tersebut diulang terus sampai pemanggilan fungsi rekursi dengan nilai a = 6 dan b = 0. Pada saat ini kondisi if bernilai benar sehingga fungsi akan keluar (return) dan melanjutkan perintah setelah pemanggilan fungsi rekursi dengan a = 6 dan b = 0. Yaitu mencetak nilai a dan b (printf("keluar -> a = %d b = %d \n",a,b)). Setelah mencetak nilai a dan b maka fungsi rekursif akan keluar lagi, dan melanjutkan perintah setelah pemanggilan fungsi rekursif sebelumnya dimana nilai a = 5 dan b = 1. Demikian seterusnya sampai nilai a = 4 dan nilai b = 2. yang tidak lain pemanggilan fungsirekurif yang pertama. Proses pemanggilan fungsi rekursif dapat diilustrasikan : Untuk memperjelas lagi penggunaan fungsi rekursif dibawah ini akan di berikan contoh-contoh program dengan menggunakan rekursif. 63

Menghitung Nilai Faktorial Dengan Rekursif Untuk menghitung nilai faktorial bilangan bulat positif marilah kita daftarkan dulu nilai nilai faktorial untuk mempermudah pengambilan algoritma. Dari daftar diatas dapat dibuat fungsi rekursi untuk menghitung nilai faktorial ke-n yaitu: Jika di terjemahkan ke dalam bahasa C menjadi : int Fakt(int n) if (n == 1 n == 0) return 1; return n * Fakt(n-1); } 3.2 Struktur Data Struktur data adalah elemen-elemen data yang dikelompokkan dalam satu nama. Elemen-elemen data tersebut dapat memiliki tipe dan ukuran yang berbeda. Struktur data digunakan untuk merepresentasikan suatu record, misalkan kita akan mendata buku di perpustakaan. Kita mungkin ingin menyimpan atribut pada setiap buku. Misalkan ID, penulis, tema, & judul. 64

3.2.1. Mendefinisikan Struktur Data Untuk mendefinisikan suatu struktur data, kita perlu menggunakan suatu pernyataan (struct statement). Struct statement mendefinisikan sebuah tipe data baru, dengan lebih dari satu anggota pada program. Berikut adalah format penggunan struct statement : struct [structure tag] member definition 1; member definition 2;... member definition n; } [satu atau lebih variabel struktur] Penggunaan structure tag adalah pilihan, dan setiap member definition adalah definisi sebuah variable misalkan, int i; atau float f; atau definisi variabel valid lainnya. Pada akhir definisi struktur, sebelum titik koma akhir, kita dapat menggunakan satu atau lebih variabel struktur. Tetapi penggunaanya adalah suatu pilihan. Berikut adalah contoh pendeklarasian struktur data buku: struct buku int id_buku; char judul[50]; char penulis[50]; char tema[50]; }buku; 65

3.2.2. Mengakses Struktur Utuk mengakses anggota struktur, kita menggunakan operator akses member (.) (member access operator). Operator akses member pada kode berupa titik diantara variabel nama struktur dan anggota struktur yang akan kita akses. Kita mungkin menginginkan untuk menggunakan kata struct untuk mendefinisikan variabel tipe struktur. Berikut ini adalah contoh penggunaan struktur: #include"conio.h" #include"stdio.h" #include"iostream.h" #include <cstring> //using namespace std; struct buku int id_buku; char judul[50]; char penulis[50]; char tema[50]; }; int main() struct buku buku1; struct buku buku2; //deklarasi buku1 pada tipe buku //deklarasi buku2 pada tipe buku //spesifikasi buku 1 strcpy(buku1.judul, "Pembelajaran C++"); strcpy(buku1.penulis, "John Tampan"); strcpy(buku1.tema, "Pemrograman C++"); 66

buku1.id_buku=100001; //spesifikasi buku 2 strcpy(buku2.judul, "Basic Hardware"); strcpy(buku2.penulis, "C. George"); strcpy(buku2.tema, "Hardware"); buku2.id_buku=100002; //output informasi buku 1 cout<<"buku 1 - Judul : "<<buku1.judul<<endl; cout<<"buku 1 - Penulis : "<<buku1.penulis<<endl; cout<<"buku 1 - Tema : "<<buku1.tema<<endl; cout<<"buku 1 - ID : "<<buku1.id_buku<<endl; //output informasi buku 2 cout<<"buku 2 - Judul : "<<buku2.judul<<endl; cout<<"buku 2 - Penulis : "<<buku2.penulis<<endl; cout<<"buku 2 - Tema : "<<buku2.tema<<endl; cout<<"buku 2 - ID : "<<buku2.id_buku<<endl; getch(); } 67

Hasil dari coding di atas: 3.2.3. Struktur Sebagai Fungsi Dari Agumen Kita dapat menggunakan suatu struktur sebagai fungsi dari argumen dengan cara yang sama dengan penggunaan pada variabel atau penunjuk (pointer) lainnya. Kita dapat mengakses struktur variabel dengan cara yang mirip dengan contoh diatas: #include"conio.h" #include"stdio.h" #include"iostream.h" #include <cstring> //using namespace std; void printbuku(struct buku0 buku); 68

struct buku0 int id_buku; char judul[50]; char penulis[50]; char tema[50]; }; int main() struct buku0 buku1; //deklarasi buku1 pada tipe buku struct buku0 buku2; //deklarasi buku2 pada tipe buku //spesifikasi buku 1 strcpy(buku1.judul, "Pembelajaran C++"); strcpy(buku1.penulis, "John Tampan"); strcpy(buku1.tema, "Pemrograman C++"); buku1.id_buku=100001; //spesifikasi buku 2 strcpy(buku2.judul, "Basic Hardware"); strcpy(buku2.penulis, "C. George"); strcpy(buku2.tema, "Hardware"); buku2.id_buku=100002; // Output info buku1 printbuku(buku1); // Output info buku2 printbuku(buku2); } void printbuku(struct buku0 buku) 69

cout<<"judul Buku\t : "<<buku.judul<<endl; cout<<"penulis Buku\t : "<<buku.penulis<<endl; cout<<"tema Buku\t : "<<buku.tema<<endl; cout<<"id Buku\t\t : "<<buku.id_buku<<endl; getch(); } Hasil dari coding di atas: 3.2.4. Pointer pada Struktur Kita dapat mendefinisikan penunjuk (pointers) pada struktur dengan cara yang sama dengan mendefinisikan penunjuk pada variabel lain seperti : struct buku0 *penunjuk_struktur; Sekarang, kita dapat menyimpan alamat variabel struktur pada variabel penunjuk yang telah didefinisikan di atas. Untuk mencari alamat variabel struktur tersebut, gunakan operator (&) sebelum nama struktur seperti: 70

struct_pointer = &buku1; Untuk mengakses anggota struktur menggunakan penunjuk, kita perlu menggunakan operator (->) seperti: struct_pointer -> judul; Contoh penggunaan penunjuk (pointers): #include"conio.h" #include"stdio.h" #include"iostream.h" #include <cstring> //using namespace std; void printbuku(struct buku0 *buku); struct buku0 int id_buku; char judul[50]; char penulis[100]; char tema[50]; }; int main() struct buku0 buku1; //deklarasi buku1 pada tipe buku struct buku0 buku2; //deklarasi buku2 pada tipe buku //spesifikasi buku 1 71

strcpy(buku1.judul, "Pembelajaran C++"); strcpy(buku1.penulis, "John Tampan"); strcpy(buku1.tema, "Pemrograman C++"); buku1.id_buku=100001; //spesifikasi buku 2 strcpy(buku2.judul, "Basic Hardware"); strcpy(buku2.penulis, "C. George"); strcpy(buku2.tema, "Hardware"); buku2.id_buku=100002; //Output info buku1 printbuku(&buku1); //Output info buku2 printbuku(&buku2); } //fungsi ini agar penunjuk pada struktur dikenali sebagai parameter void printbuku(struct buku0 *buku) cout<<"judul Buku\t : "<<buku->judul<<endl; cout<<"penulis Buku\t : "<<buku->penulis<<endl; cout<<"tema Buku\t : "<<buku->tema<<endl; cout<<"id Buku\t\t : "<<buku->id_buku<<endl; getch(); } 72

Hasil dari coding di atas: 3.2.5. Typedef There are no sources in the current document. (Tutorials Point Team, n.d.) (Rosihan Ari Yuana) Ada cara yang lebih mudah untuk mendefinisikan struktur atau kita dapat membuat tipe alias. Contohnya : typedef struct int id_buku; char judul[50]; char penulis[100]; char tema[50]; }buku0; Sekarang, kita dapat menggunakan buku0 untuk mendefinisikan variabel dari tipe buku0 tanpa menggunakan kata kunci struct. Contohnya: Buku0, buku1, buku2; 73

Kita juga dapat menggunakan typedef untuk hal selain struct : typedef long int *pint32; pint32 x, y, z; x, y, dan z adalah penunjuk (pointer) untuk long int. 74

BAB IV PENUTUP 4.1 KESIMPULAN C++ merupakan salah satu bahasa pemrograman yang mudah dipelajari dan berorientasikan pada objek. Bahasa C++ mempunyai struktur bahasa yang mudah dipahami. Dalam menjalankan program dari bahasa C++ dibutuhkan suatu compiler yang berguna untuk mengkompilasi kode yang kita tuliskan menjadi bentuk bahasa mesin sehingga program dapat berjalan. 4.2 SARAN Sebaiknya dalam membuat kode program perhatikan huruf besar dan huruf kecilnya, karena C++ bersifat case sensitive. Selain itu, kita juga harus memperhatikan compiler yang digunakan untuk menjalankan program tersebut agar program berjalan sesuai keinginan kita tanpa adanya kesalahan-kesalahan. 75

DAFTAR PUSTAKA Copyright PIK Unsri Agustus 2006 Frieyadie. 2006. Panduan Pemrogramman C++. Penerbit Andi. Yogyakarta. Muhammad Fachrurrozi www.unsri.ac.id M. Fachrurrozi Dwi Rosa Indah. C++. LABORATORIUM DASAR KOMPUTER PROGRAM ILMU KOMPUTER. R.H. Sianipar. 2014. Pemrograman C++ Untuk Pemula. Penerbit INFORMATIKA. Bandung Rosihan Ari Yuana S. Si. M.Kom Tutorial point team C++ data structures www.tutorialspoint.com 76

BIOGRAFI TEAM PENYUSUN Nama saya Fadhli Umar Ali, saya lahir di Bandung tepatnya tanggal 10 Januari 1988, saya adalah anak ke lima dari lima bersaudara. Ayah saya seorang wiraswasta, sedangkan ibu saya adalah ibu rumah tangga. Dalam dunia pendidikan saya memulai pendidikan pada usia 5 Tahun di SDN 3 Melong Asih. Setelah lulus sekolah dasar pada usia 11 tahun saya memulai pendidikan di sekolah menengah pertama tepatnya SMPN 39 Bandung, setelah itu pada usia 14 tahun saya memulia pendidikan di sekolah menengah atas di SMA PASUNDAN 2 Kota Cimahi. Pada saat ini melanjutkan pendidikan tinggi di salah satu universitas swasta yang cukup terkenal dalam bidang teknologinya, yaitu di Universitas Bina Sarana Informatika dengan mengambil jurusan Teknik Informatika. Saya melanjutkan pendidikan tinggi pada umur 27 Tahun. Pada saat ini masih aktif sebagai mahasiswa Bina Sarana Informatika dan berada di tingkat satu. 77

Nama saya Fepi Priyatna, saya lahir di Bandung pada tanggal 25 Agustus1995.umur saya baru 20 tahun. Saya anak pertama dari 2 bersaudara. Adik perempuan saya bernama Devi.Orang tua saya bernama Tatang dan Neneng Nurhayati. Saya memulai pendidikan pada usia 7 tahun di Sekolah Dasar Negeri Sasaksaat. Setelah lulus dari SDN Sasaksaat, saya melanjutkan sekolah ke SMPN 2 Cipatat. 3 tahun berlalu saya melanjutkan sekolah tingkat atas ke SMKN 11 Bandung. Saya mengambil jurusan Tektik Komputer dan Jaringan. Setelah lulus dari SMK,saya melanjutkan pendidikan di universitas swasta di bandung, yaitu di Universitas Bina Sarana Informatika. Saya kuliah mengambil jurusan Teknik Informatika. Saya melanjutkan pendidikan di perguruan tinggi pada usia 20 Tahun, dan pada saat ini masih aktif sebagai mahasiswa Bina Sarana Informatika. 78

Nama saya Ary Indrawan lahir di Bandung pada 14 Oktober 1996,saya anak ke satu dari 3 bersaudara ayah saya berprofesi sebagai guru di SMA PASUNDAN dan ibu saya sebagai ibu rumah tangga. Dalam pendidikan pertama,saya memulai pendidikan pada usia 5 tahun di SDN PAMEUNGPEUK II,setelah lulus pada usia 11 tahun saya melanjutkan pada jenjang selanjutnya di SMPN 1 BALEENDAH,setelah lulus di usia 14 tahun saya melanjutkan pendidikan menengah atas di SMKN 4 BANDUNG dan lulus pada usia 17 tahun. Setelah lulus Sekolah Menengah Atas saya lanjut bekerja d PT.DALIATEX KUSUMA,kemudian saya melanjutkan pendidikan tinggi di Universitas Swasta tepatnya di Bina Sarana Informatika pada usia 18 tahun dan masih aktif sebagai mahasiswa sampai saat ini. 79

Saya, Irsam Mukarom. Kelahiran Bandung pada tahun 1991. Anak pertama dari 3 bersaudara. Ayah saya seorang wirausahawan dan ibu saya seorang ibu rumah tangga. Saya memulai pendidikan di SDN Dr. Cipto Bandung. Setelah lulus pada tahun 2003, saya melanjutkan ke SMPN 2 Bandung, dan SMAN 20 Bandung pada tahun 2006. Setelah lulus SMA, saya bekerja selama beberapa bulan sebagai operator/teknisi pada sebuah warnet di Bandung sebelum bekerja di sebuah konsultan di Bandung. Saat ini saya melanjutkan pendidikan di Universitas Bina Sarana Informatika, jurusan Teknik Informatika dengan harapan dapat melakukan pekerjaan yang jauh lebih variatif kedepannya. 80

Nama saya Andri Budi Santoso, saya lahir di Bandung tepatnya tanggal 6 Juni 1997, saya adalah anak ke satu dari dua bersaudara. Ayah saya seorang wiraswasta, sedangkan ibu saya adalah ibu rumah tangga. Dalam dunia pendidikan saya memulai pendidikan pada usia 6 Tahun di SDN Cempaka Arum. Setelah lulus sekolah dasar pada usia 12 tahun saya memulai pendidikan di sekolah menengah pertama tepatnya SMPN 30 Bandung, setelah itu pada usia 15 tahun saya memulai pendidikan di sekolah menengah kejuruan di SMK NEGERI 4 Kota Bandung. Pada saat ini melanjutkan pendidikan tinggi di salah satu universitas swasta yang cukup terkenal dalam bidang teknologinya, yaitu di Universitas Bina Sarana Informatika dengan mengambil jurusan Teknik Informatika. Saya melanjutkan pendidikan tinggi pada umur 18 Tahun. Pada saat ini masih aktif sebagai mahasiswa Bina Sarana Informatika dan berada di tingkat satu. 81

Nama saya Surya Sumirat, saya lahir di sumedang pada tanggal 27 september 1994. Saya anak ke tiga dari lima bersaudara. Ayah saya bernama Olib umur 53 tahun bekerja sebagai wiraswasta dan ibu saya bernama Heni Rohaeni bekerja sebagai ibu rumah tangga. Saya pertama kali masuk TK Alqur an Nurul Yakin pada usia 5 tahun dan belajar disana selama 2 tahun selanjutnya masuk Sekolah Dasar di SDN Cikoneng 1. Selama sekolah dasar saya mendapat beberapa piala penghargaan dari bidang akademik sains dan olahraga sepak bola, selain itu juga saya pernah mendapat penghargaan di bidang seni suara. Setelah lulus dari SD saya masuk SMPN 2 Sumedang, disana saya aktif di organisasi OSIS, Paskibra, dan pramuka. Selama di SMP saya mengikuti beberapa perlombaan namun prestasi terbaik saya yaitu Juara 1 lomba majalah diding sekabupaten Sumedang dan pernah menjadi perwakilan kabupaten sumedang di tingkat provinsi dalam acara pasinggiri basa sunda maca warta pada tahun 2009 di Garut. Pada tahun 2010 saya lulus SMP dan melanjutkan ke SMKN 1 Sumedang Jurusan Teknik Elektronika saya bangga bisa lulus disana karena dari 1400 pendaftar yang diterima hanya 500 orang mengalahkan banyak saingan pada saat testing masuk. Di SMK saya aktif di Organisasi Drum Band Gita Sena Praja, saya mendapat pretasi sebagai juara umum Sumedang Open Festival Drumband pada tahun 2013. Selain itu juga saya mendapat presatasi akademik rangking 1 di kelas selama 3 tahun. Tahun 2013 saya lulus SMK dan mendaftar Bidik Misi di perguruan tinggi Politeknik Manufaktur Negeri Bandung. Pada saat tes pertama saya lulus pada tes administrasi nilai raport namun pada saat tes psikotes saya tidak lulus. Pada saat itu saya memutuskan untuk mencari pekerjaan, dan ternyata tak semudah yang saya bayangkan. Namun pada akhirnya pada tanggal 19 Agustus 2013 saya di terima di PT Elektrindodaya Pakarnusa sampai dengan sekarang. Setelah bekerja selama 2 tahun saya masuk kuliah di Universitas Bina sarana Informatika jurusan Teknik Informatika. Disini saya sangat senang sekali karena teman-temannya sangat baik dan dosennya sangat membantu dalam meraih ilmu. 82