Anda di halaman 1dari 99

PEMROGRAMAN VISUAL

(C ++ BUILDER)
SEMESTER II
(2 SKS/ 4 Jam/Minggu)
Penyusun:
Drs. Yoyok Heru P.I., MT
NIP. 196807081994031002
JURUSAN TEKNIK ELEKTRO
PROGRAM STUDI JARINGAN TEKNIK DIGITAL
POLITEKNIK NEGERI MALANG
2012
YHPI -> hal : 1
KATA PENGANTAR
Segala puji dan syukur disampaikan kepada Allah SWT, atas limpahan rahmat, karunia
dan cahaya petunjuk-Nya yang tiada tara, sehingga buku PEMROGRAMAN VISUAL
DENGAN BAHASA C++ BUILDER untuk matakuliah Pemrograman Visual di Program Studi
Jaringan Teknik Digital Telekomunikasi POLINEMA. Buku ini sebenarnya hanya dipakai untuk
kalangan internal POLINEMA, namun apabila ada dari saudara kita di luar POLINEMA yang
berminat menggunakan buku ini, dengan senang hati kami persilahkan. Sholawat dan salam
semoga tetap terkunjuk pada junjungan Nabi Agung Muhammad SAW, keluarga, sahabat,
thabiit, dan thabiin, dengan ghirroh perjuangan yang tinggi dan keikhlasan yang mendalam
dalam memberantas kebodohan dan menegakkan kebenaran di muka bumi ini.
Buku ajar ini dimaksudkan untuk membantu dan memfasilitasi peserta didik dalam
mempelajari pemrograman komputer lanjut khususnya menggunakan bahasa C++ Builder.
Salah satu faktor yang menentukan keberhasilan sebuah pembelajaran di kelas adalah buku
ajar oleh karena itu keberadaan dan pemberdayaan buku ini menjadi penting dan merupakan
salah satu rujukan dalam menempuh matakuliah pemrograman visual. Sistem yang
ditekankan dalam buku ini proses latihan dalam menuangkan dan mengurai permasalahan ke
dalam desain sebuah program, dengan tujuan membangkitkan daya nalar dan logika
Mahasiswa.
Penulis berharap semoga buku ini dapat bermanfaat bagi mahasiswa program studi T.
Telekomunikasi yang menempuh matakuliah Pemrograman Komputer Lanjut maupun semua
pembaca buku ini. Terimaksih bagi siapa saja yang sudi memberikan saran dan kritik atas
penulisan buku ini, karena kami yakin bahwa masih banyak kekurangan alam penuisan buku
ini.
Malang, Nopember 2012
Penulis
YHPI -> hal : 2
DAFTAR ISI
LEMBAR PENGESAHAN
KATA PENGANTAR 1
DAFTAR ISI 2
PENDAHULUAN 5
BAB I VCL, FORMS, DAN KOMPONEN-KOMPONEN PADA C++ BUILDER 7
I.1 Tujuan 7
I.2 Teori Dasar 7
I.2.1 Project dalam Program C++ Builder 7
I.2.2 Form 8
I.2.3 SpeedBar 8
I.2.4 Komponen Palete 8
I.2.5 Events dan Event Handlers 8
I.3 LATIHAN PROGRAM 10
I.3.1 Membuat desain project operasi matematika 10
I.3.2. Membuat Desain Deret Bilangan dan Perhitungannya Menggunakan
Tampilan Stringgrid 12
I.4 SOAL (UJI KEMAMPUAN) 14
BAB II MANIPULASI STRINGGRID, LISTBOX DAN COMBOBOX 15
II.1. Tujuan 15
II.2. Teori Dasar OverView StringGrid 15
II.2.1 Properties Cells 16
II.2.2 ComboBox dan ListBox 17
II.3 LATIHAN PROGRAM 18
II.3.1 Latihan pertama memanipulasi StringGrid, dengan merubah lebar,
jumlah baris dan jumlah kolom dalam coding, dan juga merubah cells menjadi
modifable, sehingga cells dapat ditulisi 18
II.3.2 Latihan ini mengajarkan bagaimana membuat dan membuat VCL pada
combobox dan listbox 20
II.4. SOAL (UJI KEMAMPUAN) 21
BAB III VARIABEL ARRAY 22
III.1. Tujuan 22
III.2. Teori Dasar 22
III.2.1 Console Wizard 22
III.2.2 Variabel Array 23
III.3. Latihan Program 23
III.3.1 Melatih logika array, menghitung nilai pangkat 3, dan menghitung
masing-masing nilai faktorialnya 24
III.3.2 Menentukan nilai terbesar dan nilai terkecil dari sejumlah data yang
diinputkan => perhatikan caranya! 25
III.4. SOAL (UJI KEMAMPUAN), 26
BAB IV SORTIR DATA 27
IV.1. Tujuan 27
IV.2. Teori Dasar Teknik Sortir Data 27
IV.3. LATIHAN PROGRAM 29
IV.4. SOAL (UJI KEMAMPUAN) 31
BAB V MATRIK 32
V.1. Tujuan 32
V.2. Teori Dasar 32
V.2.1. Penjumlahan Dan Pengurangan Matrik 32
V.2.2. Perkalian Matrik 32
V.2.2. Invers Matrik 33
YHPI -> hal : 3
V.2.3. Penyelesaian Persamaan Linier dengan Matrik 36
V.3. LATIHAN PROGRAM 37
V.3.1. Menjumlah dua buah matrik, dengan ordo masing-masing diinputkan,
kemudian mencek persyaratan ordo dua matrik tersebut, dan nilai
masing-masing elemen matrik diinputkan 37
V.3.2. Menentukan invers matrik dengan metode Reduksi gauss-Jordan,
dengan ordo diinputkan, kemudian mencek persyaratan ordo matrik
tersebut, dan nilai masing-masing elemen matrik bersiafat variatif 39
V.4. SOAL (UJI KEMAMPUAN) 41
BAB VI STRING 42
VI.1 Tujuan 42
VI.2 Teori Dasar 42
VI.2.1 STRING dalam C++ 42
VI.2.2 STRING dalam C++ Builder 43
VI.3. LATIHAN PROGRAM 43
VI.4. SOAL (UJI KEMAMPUAN) 46
BAB VII (KONVERSI BILANGAN) 47
VII.1. Tujuan 47
VII.2. Teori Dasar Konversi Bilangan 47
VII.3. LATIHAN PROGRAM 48
VII.4. SOAL (UJI KEMAMPUAN) 49
BAB VIII STRUKTUR FUNGSI 50
VIII.1. Tujuan 50
VIII.2. Teori Dasar Fungsi 50
VIII.3. LATIHAN PROGRAM 50
VIII.4. SOAL (UJI KEMAMPUAN) 52
BAB IX OOP, STRUKTUR DAN CLASS 53
IX.1. Tujuan 53
IX.2. Teori Dasar 53
IX.2.1 Variabel Obyek atau dikenal sebagai OOP (Object Oriented Programming) 53
IX.2.2. STRUKTUR dan CLASS 54
IX.3. LATIHAN PROGRAM 55
IX.3.1 Mengimplementasikan type struct dalam data -> biodata,
perhatikan pola dan cara penggunaanya! 55
IX.3.2 Mengimplementasikan type class dalam data -> biodata, perhatikan polanya! 56
IX.3.3 Mengimplementasikan type class dengan menggunakan desain VCL 57
IX.4. SOAL (UJI KEMAMPUAN) 61
BAB X VARIABEL PUBLIC, PRIVATE, DAN OVERLOADING OPERATOR 62
X.1. Tujuan 62
X.2. Teori Dasar Public, Private, dan Overloading operator 62
X.3. LATIHAN PROGRAM 62
X.4. SOAL (UJI KEMAMPUAN) 64
BAB XI SISTEM FILE 65
XI.1. Tujuan 65
XI.2. Teori Dasar Sistem File 65
XI.3. LATIHAN PROGRAM 66
XI.4. SOAL (UJI KEMAMPUAN) 68
BAB XII SISTEM FILE LANJUTAN 69
XI.1. Tujuan 69
XI.2. Teori Dasar Sistem File Lanjutan 69
XI.3. LATIHAN PROGRAM 69
XI.4. SOAL (UJI KEMAMPUAN) 73
BAB XIII dan XV PRESENTASI, PROJECT 74
BAB XVI GRAFIK 75
XVI.1. Tujuan 75
YHPI -> hal : 4
XVI.2 Teori Dasar 75
XVI.2.1 Review Grafik 75
XVI.2.2 Komponen Pembentuk Grafik 76
XV.3 LATIHAN PROGRAM 79
XV.3.1 Latihan Pengenalan Pola Grafik Primitiv 79
XV.3.2 Latihan Penggunaan Pixel 81
XV.4. SOAL (UJI KEMAMPUAN) 84
BAB XVII OPERASI GEOMETRI SEDERHANA PADA GRAFIK 85
XVII.1. Tujuan 85
XVII.2 Teori Dasar 85
XVII.2.1 Operasi Geometri 85
XVII.2.2 Pergeseran atau Translasi 85
XVII.2.3 Penskalaan atau Stretching 86
XVII.2.4 Perputaran atau Rotasi 87
XVII.3 LATIHAN PROGRAM 87
XVII.3.1 Latihan operasi geometri translasi / pergeseran 87
XVII.3.2 Latihan operasi geometri Rotasi dan Penskalaan 91
XV.4. SOAL (UJI KEMAMPUAN) 95
BAB XVIII, XIX 97
DAFTAR PUSTAKA 98
YHPI -> hal : 5
PENDAHULUAN
Pemrogram Visual
Pemrograman visual adalah kelompok pemrograman yang metode pembuatannya
terdapat hubungan antara komponen objek yang biasanya berbentuk gambar atau icon
dengan coding yang merupakan statement, kendali, function, class, type, dan yang lainnya
pada sebuah media User Interface (UI). Dimana user interface pada pemrograman visual
berupa GUI (Graphical User Interface) yang berisi desain visual program dan Text Coding
yang berisi kode-kode program atau sintak program yang mengendalikan GUI. Yang intinya
adalah bahwa pemrograman visual mempunyai hasil running program sesuai dengan bentuk
desain, yang biasanya media desainnya disebut dengan Form dan tempat mengetik program
disebut code editor. Contoh pemrograman visual adalah : C++ Builder, Visual C, Delphi, Visual
Basic, dan masih banyak lagi.
Buku ini merupakan lanjutan dari buku Pemrograman Lanjut yang sudah di gunakan di
program studi JTD POLINEMA, dimana bahasa yang digunakan adalah C++ Builder. Ada
beberapa alasan pemilihan bahasa program tersenut diantaranya adalah:
1. C++ Builder merupakan pengembangan dari bahasa C++, dan C++ merupakan
pengembangan dari bahasa C standar.
2. Bahasa C merupakan akar dari bahasa pemrograman yang lain seperti Java, Android, dan
yang lain.
3. Keberlanjutan antar matakuliah Algoritma, Pemrograman Lanjut, Pemrograman Visual,
dan Interfacing yang kesemuanya menggunakan basis bahasa C
4. Banyak operating sistem yang dibuat dengan menggunakan bahasa C, seperti linux, unix,
Android, dan yang lain.
Alasan tersebut yang menjadikan landasan mengapa buku ini menggunakan bahasa C++
Builder, dan buku ini di gunakan sebagai buku paket pendukung matakuliah pemrograman
visual, walau dalam implementasinya nanti tidak menutup kemungkinan untuk dimanfaatkan
oleh matakuliah yang lain.
YHPI -> hal : 6
YHPI -> hal : 7
BAB I
BEKERJA DENGAN MULTI FORM
Asumsi:
Mahasiswa dianggap sudah pernah menempuh matakuliah Pemrograman Lanjut, sehingga
pelajaran dasar tentang pemrograman visual yang melibatkan OOP dan komponen sudah
dipahami.
I.1 TUJUAN
Tujuan latihan program pertemuan pertama ini adalah,
1. Mahasiswa mampu membuat desain program dengan menggunakan lebih dari satu
Form.
2. Mahasiswa mampu me lingkan antar Form dalam sebuah projek.
3. Mahasiswa mempu mengendalikan (menampilkan, menyembunyikan, meremove) antar
Form.
I.2 TEORI DASAR
I.2.1 Project dalam Program C++ Builder
Setelah kita me-running C++ Builder maka kita akan melihat tampilan penuh C Builder
seperti nampak pada gambar 1.1 di bawah, dan tampilan semacam ini lebih di kenal dengan
IDE(Integrated Development Environment). IDE mempunyai segala hal yang kita butuhkan
untuk mendesain program dalam satu tampilan, tampak seperti pada gambar di bawah.
Gambar 1.1
YHPI -> hal : 8
IDE juga merupakan area kerja dalam mendesain program dalam Project kita, disini kita dapat
melakukan manipulasi komponen, mengetik coding program, mengkonfigurasi C Builder, dan
mungkin mengeset properties dalam sebuh project.
VCL adalah sebuah repository dari komponen2 yang digunakan untuk membuat aplikasi
program. Sedangkan komponen adalah sebuah object yang tampil dalam bentuk gambar
seperti Label, Edit, Button, dan yang lainnya, yang kita pilih dengan klik mouse kiri, dan
meletakkannya di area form kerja kita. Komponen2 VCL adalah coding yang kita tuliskan pada
area editor code (unit area) untuk menjalankan operasi dari komponen tersebut.
1.2.2 Form
Form adalah sebuah jendela yang disediakan oleh C Builder yang diguakan untuk
membuat desain tampilan program kita. Ketika kita membuat sebuah aplikasi baru dalam C
Builder secara otomatis akan terbuat sebuah form baru. Untuk membangun user interface
dalam form, kita tinggal menambahkan visual componen kemudian meletakkan posisi
componen dan mengatur ukurannya. Disamping itu kita juga bisa menambahkan komponen
non-visual seperti komponen timer. Secara default, ketika kita me-running aplikasi, maka form
akan terletak di tengah2 layar monitor kita, namun kita juga bisa mengatur tampilan form
sesuai dengan kebutuhan kita.
1.2.3 SpeedBar
SpeedBar menyediakan akses cepat untuk fungsi2 menu, yang paling sering digunakan
seperti menyimpan data, menampilkan unit dan form, me-running program, menambah
roject,dan yang lain. Kita dapat memilih speedbar yang kita kehendaki, yaitu dengan
menambah, menghapus speedbar yang ada lewat view->toolbars->customize.
1.2.4 Komponen Palete
Komponen palete diletakkan di bawah baris menu utama, masing-masing komponen di
kelompokkan dalam beberapa kategori. Nama-nama kelompok diletakkan tepat di atas dari
nama-nama komponen, seperti Standart, Additional, ...Untuk mengambil/membuka komponen
kita harus meng klik nama group dengan klik mouse kiri, dan untuk mengambilnya kita harus
mengklik komponen yang kita inginkan dan meletakkan pada area form yang kita kehendaki.
1.2.5 Events dan Event Handlers
Untuk memhami sub ini kita buat terlebih dahulu sebuah komponen button, dimana
komponen ini berada pada group komponen atau komponen palete Standart. Silahkan buat
komponen seperti gambar di bawah ini:
YHPI -> hal : 9
Gambar 1.2
Jika kita running project ini maka sebuah event akan digenerate oleh C Builder, agar aplikasi
ini merespon event ini maka kita perlu membuat sebuah event handler. Event handler adalah
sebuah fungsi sederhana yang secara otomatis dibuat oleh C Builder, pada saat kita mengklik
salah satu item yang ada pada form ini. Atau kita mengklik salah satu bagian dari Event pada
Object Inspector. Untuk mencoba silahkan double klik kiri mouse pada komponen button1
yang sudah di letakkan di Form. Maka C builder akan menampilkan code seperti di bawah ini:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
}
//---------------------------------------------------------------------------
Coding ini secara otomtis akan generate oeh C Builder, dan jika program ini di running maka
belum ada pengaruh apa-apa jika tombol button di klik. Sekarang coba isikan coding di bawah
ini :
YHPI -> hal : 10
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage(Hello world! This is a test application! Press OK);
Close();
}
//---------------------------------------------------------------------------
Kemudian jalankan apa yang terjadi jika tombol button di ubah!
I.3 LATIHAN PROGRAM :
Mahasiswa wajib mengerjakan latihan program ini, dengan cara membuat dasain form dan
menuliskan masing-masing listing program pada editor C++ Builder, menyimpannya
(sesuaikan nama file dengan yang diminta), setelah itu menjalankan program, kemudian
mempelajari proses logika dilanjutkan dengan membandingkan antara output hasil logika
terhadap output hasil running komputer.
I.3.1 Membuat desain project operasi matematika
Buat project aplikasi baru -> File, New, application kemudian buat desain Form sebagai
berikut:
Gambar 1.3
YHPI -> hal : 11
Langkah-langkah pembuatan desain sebagai berikut:
- Masukkan komponen label1, Label2, dan label3 pada form, di tempat seperti pada
gambar 1.3.
- Ubahlah caption label1 dan label2 pada object inspector, menjadi Input Bilangan
Pertama dan Input Bilangan Kedua
- Masukkan Komponen Edit1 dan Edit2 pada form, di tempat seperti pada gambar 1.3.
- Hapus tulisan di Text Edit1 dan Edit2 pada object inspector, sehingga tulisan Edit1 dan
Edit2, pada masing-masing komponen hilang, tampak seperti gambar 1.3
- Masukkan komponen GroupBox pada Form, ubah captiannya dengan tulisan operasi
matematika
- Masukkan komponen RadioButton1 5, di dalam komponen GroupBox, dan ubah
masing-masing captionnya seperti pada gambar 1.3
- Masukkan komponen Button, dan ubah captionnya sesaui dengan gambar 1.3
- Langkah berikutnya tuliskan codingnya pada masing-masing komponennya, dengan
cara men-double Click pada komponen RadioButton1-5, dan Button1. Codingnya
adalah sebagai berikut:
//---------------------------------------------------------------------------
float hasil,bil1,bil2;
void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
bil1=StrToFloat(Edit1->Text);
bil2=StrToFloat(Edit2->Text);
hasil=bil1*bil2;
Label3->Caption="Hasilnya adalah : "+FloatToStr(hasil);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton2Click(TObject *Sender)
{
bil1=StrToFloat(Edit1->Text);
bil2=StrToFloat(Edit2->Text);
hasil=bil1/bil2;
Label3->Caption="Hasilnya adalah : "+FloatToStr(hasil);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton3Click(TObject *Sender)
{
bil1=StrToFloat(Edit1->Text);
bil2=StrToFloat(Edit2->Text);
hasil=pow(bil1,bil2);
Label3->Caption="Hasilnya adalah : "+FloatToStr(hasil);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton4Click(TObject *Sender)
{
bil1=StrToFloat(Edit1->Text);
bil2=StrToFloat(Edit2->Text);
hasil=int(bil1)%int(bil2);
Label3->Caption="Hasilnya adalah : "+FloatToStr(hasil);
}
//---------------------------------------------------------------------------
YHPI -> hal : 12
void __fastcall TForm1::RadioButton5Click(TObject *Sender)
{
bil1=StrToFloat(Edit1->Text);
bil2=StrToFloat(Edit2->Text);
hasil=int(bil1)/int(bil2);
Label3->Caption="Hasilnya adalah : "+FloatToStr(hasil);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
- Setelah mengetik sour code, kemudian simpanlah project ini dengan mengklik Save
ALL, untuk unit->beri nama Latihan1_1.cpp, sedangkan untuk Project beri nama
Platihan1_1
Apabila mengalami kesulitan silahkan bertanya pada Dosen yang mendampingi !
1.3.2 Membuat Desain Deret Bilangan dan Perhitungannya Menggunakan Tampilan
Stringgrid
Buat project aplikasi baru -> File, New, application kemudian buat desain Form sebagai
berikut:
Gambar 1.4
YHPI -> hal : 13
Langkah-langkah pembuatan desain sebagai berikut:
a. Masukkan semua komponen yang dibutuhkan pada form, di tempat seperti pada
gambar 1.4.
b. Ubah semua caption maupun Text untuk masing-masing komponen seperti pada
gambar1.4
c. Hasil akhir desain adalah seperti nampak pada Gambar 1.4
d. Kemudian Doubel-Click pada masing-2 komponen yang diperlukan untuk menuliskan
coding di bawah ini:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
StringGrid1->Hide();
Button2->Hide();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Label1->Hide();
Label2->Hide();
Label3->Hide();
Edit1->Hide();
Edit2->Hide();
Edit3->Hide();
Button1->Hide();
StringGrid1->Show();
Button2->Show();
StringGrid1->ColCount=6;
StringGrid1->RowCount=StrToInt(Edit3->Text)+1;
StringGrid1->Cells[0][0]="No.";
StringGrid1->Cells[1][0]="Bilangan (x)";
StringGrid1->Cells[2][0]="x^3";
StringGrid1->Cells[3][0]="x!";
StringGrid1->Cells[4][0]="Sin(x)";
StringGrid1->Cells[5][0]="Cos(x)";
int i,j,bil,it,jd;
float cs,sn,fak,pkt;
i=1;
bil=StrToInt(Edit1->Text);
it=StrToInt(Edit2->Text);
jd=StrToInt(Edit3->Text);
while (i<=jd)
{ pkt=pow(bil,3);
fak=1;
for (j=1;j<=bil;j++)
fak=fak*j;
sn=sin(bil*3.14/180);
cs=cos(bil*3.14/180);
StringGrid1->Cells[0][i]=IntToStr(i);
StringGrid1->Cells[1][i]=IntToStr(bil);
StringGrid1->Cells[2][i]=FloatToStr(pkt);
StringGrid1->Cells[3][i]=FloatToStr(fak);
StringGrid1->Cells[4][i]=FloatToStr(sn);
StringGrid1->Cells[5][i]=FloatToStr(cs);
i=i+1;
bil=bil+it;
YHPI -> hal : 14
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
e. Setelah Menuliskan Coding, aturlah tempat StringGrid, sehingga hasil running aplikasi
program akan propoesional dan terletak di tengah.
f. Simpan unit Latihan1_2.cpp dan project Platihan1_2
I.4 SOAL (UJI KEMAMPUAN),
Kerjakan setiap soal pada buku anda dengan cara membuat flowchart dan listing
program, masing-masing soal simpan dengan nama file SOALI_1.cpp/bpr, dan
SOALI_2 .cpp/bpr!
1. Buat desain seperti latihan 1.3.1, dengan hanya merubah radiobutton diubah ke dalam
bentuk checklist.
2. Buat desain aplikasi untuk memasukkan nilai Resistor sebanyak 5 Resistor, kemudian
buat output berupa nilai pengganti R paralel dan R seri.
YHPI -> hal : 15
BAB II
MANIPULASI STRINGGRID, LISTBOX DAN COMBOBOX
II.1. TUJUAN
Materi pertemuan kedua dititik beratkan optimalisasi penggunaan komponen stringgrid dan
combobox, adapun tujuan latihan program pertemuan kedua ini adalah,
1. Mahasiswa mampu menggunakan stringgrid sebagai tampilan data
2. Mahasiswa mampu memodifikasi stringgrid, sehingga stringgrid dapat digunakan untuk
entry data
3. Mahasiswa mampu menggunakan combobox untuk membuat desain untuk
kepentingan listing pilihan.
II.2. TEORI DASAR
OverView StringGrid
StringGrid adalah sebuah teknik penggunaan baris dan kolom untuk merepresentasikan
data dalam bentuk visual. Tidak ada aturan yang sangat keras dalam mengontrol penggunaan
stringgrid ini. Untuk menangani isinya sebuah grid dibuat dalam baris vertikal dan horizontal.
Baris-baris ini menggunakan pemisah, yang vertikal disebut kolom sedangkan yang horizontl
disebut baris.
Gambar 2.1
Pertemuan antara baris dan kolom disebut Cells, untuk membuat sebuah grid data, VCL
menyediakan beberapa kontrol, diantaranya adalah TstringGrid class.
Jika kita ingin menentukan baris dan kolom fix-nya, kita bisa mengatur nilai FiedRows atau
FixedCols,.
YHPI -> hal : 16
Gambar 2.2
II.2.1. Properties Cells
Secara default cells pada stringgrid dibedakan menjadi dua, yaitu cells yang dapat
dilalui oleh pointer, bahkan dapat diubah-ubah nilainya, dan cells yang tidak dapat dilalui oleh
pointer, dan nilainya juga tidak dapat di ubah. Cells-cells yang tidak bisa di lalui pointer secara
umum berada kawasan baris dan kolom yang Fixed. Warna dari cells-cells ini juga berbeda,
pada tulisan ini dibedakan warna biru untuk cells yang modifable dan yang berwarna sama
dengan warna form nya.
Gambar 2.3
Kita juga bisa merubah warna fixed cells, dan, modifable cells, dengan menggunakan code
berikut:
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
TStringGrid *StatRates = new TStringGrid(this);
StatRates->Parent = this;
StatRates->Color = TColor(RGB(255, 230, 204));
StatRates->FixedColor = TColor(RGB(255, 128, 0));
}
//---------------------------------------------------------------------------
Hasilnya tampak seperti gambar 2.4 di bawah :
Gambar 2.4
YHPI -> hal : 17
II.2.2 ComboBox dan ListBox
ListBox dan ComboBox adalah komponen yang sangat penting dan sangat sering
digunakan dalam membuat sebuah desai aplikasi. Komponen listBox merepresentasikan
jendela listBox standar, yang mana menampilkan simple listing dalam bentuk pilihan. Sebagai
contoh adalah tuliskan coding di bawah, dan jangan lupa menyiapkan komponen ListBox pada
form :
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ListBox1->Items->Add("Senegal");
ListBox1->Items->Add("Botswana");
ListBox1->Items->Add("Morocco");
ListBox1->Items->Add("Suddan");
ListBox1->Items->Add("Kenya");
ListBox1->Items->Add("Libya");
ListBox1->Items->Add("Angola");
ListBox1->Items->Add("Ghana");
}
//---------------------------------------------------------------------------
Hasilnya adalah:
Gambar 2.5
ComboBox merupakan bentuk dari ListBox Khusus, sebenarnya combobox merupakan
kobinasi dari sebuat listbox dan edit control. User dapat memilih dari listing yang disedian
dalam porsi yang disediakan. Ketika user memilih sebuah item maka item tersebut akan
diletakkan pada edit kontrol. Sebagai contoh kita akan menambahkan list data pada combobox
sebagai berikut :
================
Telekomunikasi
Elektronika
Listrik
Informatika
=================
Maka coding yang bisa kita buat adalah sebagai berikut, dan juga harus menyiapkan
komponen ComboBox di Form:
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
YHPI -> hal : 18
{
ComboBox1->Items->Add("Telekomunikasi");
ComboBox1->Items->Add("Elektronika");
ComboBox1->Items->Add("Listrik");
ComboBox1->Items->Add("Informatika");
}
//---------------------------------------------------------------------------
Hasilnya tampak seperti gambar 2.6 berikut:
Gambar 2.6
II.3. LATIHAN PROGRAM,
II.3.1 Latihan pertama memanipulasi StringGrid, dengan merubah lebar, jumlah baris dan
jumlah kolom dalam coding, dan juga merubah cells menjadi modifable, sehingga
cells dapat ditulisi.
Langkah-langkah yang harus dilakukan adalah :
a. Buat aplikasi baru, File-New-Applications
b. Buat Desain form seperti pada gambar di bawah ini:
Gambar 2.7
YHPI -> hal : 19
c. Ubah Caption pada masing-masing komponen sehingga tampilan sama persis
dengan gambar 2.7
d. Klik 1x pada stringgrid, kemudain klik properties pada object inspector, dan pilih
option, kemudian gantilah nilai false menjadi true pada item goEditing dan
goTabs.
e. Langkah berikutnya adalah ketikkan coding berikut ini pada masing-masing VCL,
sesuai dengan tempatnya!
//============================================
void __fastcall TForm1::FormCreate(TObject *Sender)
{
StringGrid1->Hide();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
StringGrid1->Show();
StringGrid1->ColCount=7;
StringGrid1->FixedCols=2;
if (Trim(Edit1->Text)=="")
Edit1->Text = '0';
int n,jr;
jr=StrToInt(Edit1->Text)+1;
StringGrid1->RowCount=jr;
for (n=1;n<=jr;n++)
StringGrid1->Cells[0][n]=IntToStr(n);
StringGrid1->ColWidths[0]=25;
StringGrid1->ColWidths[1]=55;
StringGrid1->ColWidths[2]=80;
StringGrid1->ColWidths[3]=60;
StringGrid1->ColWidths[4]=85;
StringGrid1->ColWidths[5]=90;
StringGrid1->ColWidths[6]=90;
StringGrid1->Cells[0][0]="No.";
StringGrid1->Cells[1][0]="Router";
StringGrid1->Cells[2][0]="Media";
StringGrid1->Cells[3][0]="Jarak (m)";
StringGrid1->Cells[4][0]="Bandwith Kbit/s";
StringGrid1->Cells[5][0]="Throughput Kbit/s";
StringGrid1->Cells[6][0]="Delay Alat (s)";
StringGrid1->SetFocus();
int rt,asci,i=1,k=0;
AnsiString tasci,awal="";
for (rt=1;rt<=jr;rt++)
{ asci=i%26;
tasci=awal+char(i+64);
if (asci==0)
{ i=0;
k=k+1;
awal=char(k+64);
}
i=i+1;
StringGrid1->Cells[1][rt]=tasci;
}
}
//---------------------------------------------------------------------------
YHPI -> hal : 20
f. Coba running aplikasi ini, kemudian isi masing-masing celnya
g. Simpan aplikasi ini dengan nama unit Latihan2_1.cpp, dan Project dengan nama
Platihan2_1.bpr
II.3.2. Latihan ini mengajarkan bagaimana membuat dan membuat VCL pada combobox
dan listbox,
Langkah-langkah yang harus dilakukan adalah :
a. Buat aplikasi baru, File-New-Applications
b. Buat Desain form seperti pada gambar di bawah ini:
Gambar 2.8
c. Ubah Caption pada masing-masing komponen sehingga tampilan sama persis dengan
gambar 2.8
d. Langkah berikutnya adalah ketikkan coding berikut ini pada masing-masing VCL,
sesuai dengan tempatnya!
//========================================
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ComboBox1->Items->Add("SEMESTER 1");
ComboBox1->Items->Add("SEMESTER 2");
ComboBox1->Items->Add("SEMESTER 3");
ComboBox1->Items->Add("SEMESTER 4");
ComboBox1->ItemIndex = 0;
}
//---------------------------------------------------------------------------
YHPI -> hal : 21
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
if (ComboBox1->ItemIndex==0)
{ ListBox1->Clear();
ListBox1->Items->Add("QMS & KWU-1");
ListBox1->Items->Add("Alat Ukur dan Pengukuran");
ListBox1->Items->Add("Metematika Dasar");
ListBox1->Items->Add("Rangkaian Listrik 1");
ListBox1->Items->Add("Teknik Digital Dasar");
ListBox1->Items->Add("Sistem Telekomunikasi Analog");
ListBox1->Items->Add("Arsitektur Komputer");
ListBox1->Items->Add("Elektronika Dasar");
ListBox1->Items->Add("Praktikum Alat Ukur dan Pengukuran");
}else
if (ComboBox1->ItemIndex==1)
{ ListBox1->Clear();
ListBox1->Items->Add("Pemrograman Lanjut");
ListBox1->Items->Add("Alat ukur");
ListBox1->Items->Add("Bahasa inggris 2");
ListBox1->Items->Add("Praktikum Fiber Optik");
ListBox1->Items->Add("Teori Mobile");
ListBox1->Items->Add("Praktikum Interfacing");
ListBox1->Items->Add("Komunikasi data");
ListBox1->Items->Add("Propagasi Antena");
}
if (ComboBox1->ItemIndex==2)
{ ListBox1->Clear();
ListBox1->Items->Add("Sistem Mikrokontroller Dasar");
ListBox1->Items->Add("Elektronika Telekomunikasi");
ListBox1->Items->Add("Elektronika Telekomunikasi");
}
}
//---------------------------------------------------------------------------
e. Coba running aplikasi ini, kemudian perhatikan hasilnya
f. Simpan aplikasi ini dengan nama unit Latihan2_2.cpp, dan Project dengan nama
Platihan2_2.bpr.
II.4. SOAL (UJI KEMAMPUAN),
Kerjakan setiap soal di bawah ini dengan membuat flowchart dan listing
program, masing-masing soal simpan dengan nama file SOALII_1.cpp.
1. Buatlah desain aplikasi dengan menggunakan dua stringgrid, dimana stringgrid1 digunakan
untuk menginputkan Nama, Nilai 1, Nilai 2, dan Nilai 3, dengan jumlah siswa yang
diinputkan dengan menggunakan Edit->Text, simpan masing-masing cells ke dalam variabel
array dimensi2. Sedangkan Stringgrid2 digunakan untuk menampilkan hasil perhitungan
nilai rata-rata=(nilai1+nilai2+nilai3)/3, dimana isi kolom stringgrid2 adalah nama, dan nilai
rata-rata.
YHPI -> hal : 22
BAB III
VARIABEL ARRAY
III.1. TUJUAN
Pada dasarnya sebuah variabel hanya mampu menampung sebuah nilai, dengan
menggunakan variabel array maka variabel tersebut mampu menampung lebih dari satu nilai,
tujuan dari pertemuan ini adalah,
1. Mahasiswa mampu membedakan antara variabel tunggal dengan variabel array
2. Mahasiswa mampu menggunakan variabel array dalam mendesain sebuah program
III.2. TEORI DASAR
III.2.1 Console Wizard
Program C++ Builder menyediakan vasilitas bahasa C++, yaitu Console. Aplikasi console
memberikan fasilitas kepada kita untuk membuat coding C Standart atau C++. Untuk
menjalankan editor console pada C++ Builder ver 6.0 adalah ->File, New, Other, kemudian
pilih Console Wizard, type kita bisa pilih C++ atau C. Tampilan dari editor console adalah
Gambar 3.1
Untuk memasukkan coding kita bisa menghapus coding yang tersedia di editor console
tersebut.
YHPI -> hal : 23
II.2.2 VARIABEL ARRAY
Variabel array adalah sebuah variabel yang mampu menampung data lebih dari satu nilai,
karena di dalam variabel tersebut diberi indeks yang berfungsi sebagai pemembeda antara
satu dengan yang lain. Salah satu teknik buffering adalah dengan cara menggunakan variabel
array. Struktur variabel array secara umum adalah:
nama_variabel[indeks]
contoh :
Jika cuplikan program di atas di jalankan dengan masukan berikut,
Bandingkan dengan contoh berikut:
Jika cuplikan program di atas di jalankan dengan masukan berikut,
III.3. LATIHAN PROGRAM,
Gunakan editor Console pada C++ Builder, dengan cara seperti yang sudah di jelaskan
terdahulu, kemudian ketikkan coding pada latihan berikut, mohon diperhatikan hasil dan
struktur logikanya, check hasilnya secara manual!
1. Masukkan sebuah bilangan : 5 (inputkan)
2. Masukkan sebuah bilangan : 4 (inputkan)
3. Masukkan sebuah bilangan : 8 (inputkan)
Nilai dari variabel bil adalah: 5 4 8
Int bil[5],i,j;
for (i=1; i<=3; i++)
{ cout<<i;
cout<<. Masukkan sebuah bilangan;
cin>>bil[i]
}
cout<<Nilai dari variabel bil adalah : ;
for i=1; i<=3; i++) cout<<setw(5)<<bil[i];
1. Masukkan sebuah bilangan : 5 (inputkan)
2. Masukkan sebuah bilangan : 4 (inputkan)
3. Masukkan sebuah bilangan : 8 (inputkan)
Nilai dari variabel bil adalah: 8 8 8
Int bil,i;
for (i=1; i<=3; i++)
{ cout<<i;
cout<<. Masukkan sebuah bilangan;
cin>>bil
}
cout<<Nilai dari variabel bil adalah : ;
for (i=1; i<=3; i++) cout<<setw(5)<<bil;
YHPI -> hal : 24
III.3.1 Melatih logika array, dengan mengimplementasikan input bilangan secara variatif
sesuai dengan jumlah data yang dimasukkan, kemudian menghitung nilai pangkat
3, dan menghitung masing-masing nilai faktorialnya.
*listing program
//latih3_1.cpp
//Array dimensi satu
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
#include<math.h>
void main()
{ clrscr();
int bil[10]; //deklarasi variable array dimensi satu
int i,jd,j;
float bp,fak;
cout<<"Masukkan jumlah data : ";
cin>>jd;
i=1;
while (i<=jd)
{ cout<<"Input data(anggka) ke "<<i<<" : ";
cin>>bil[i]; // input untuk variabel array
i=i+1;
}
/* Tampilan header */
cout<<endl<<endl<<endl;
cout<<"============================================"<<endl;
cout<<setiosflags(ios::left)<<setw(5)<<"No.";
cout<<setiosflags(ios::left)<<setw(15)<<"Bilangan (X)";
cout<<setiosflags(ios::left)<<setw(15)<<"X^3";
cout<<setiosflags(ios::left)<<setw(15)<<"X!"<<endl;
cout<<"============================================"<<endl;
i=1;
do
{ cout<<setiosflags(ios::left)<<setw(5)<<i;
cout<<setiosflags(ios::left)<<setw(15)<<bil[i];
bp=pow(bil[i],5);
cout<<setiosflags(ios::left)<<setw(15)<<bp;
fak=1;
for(j=1;j<=bil[i];j++)
fak=fak*j;
cout<<setiosflags(ios::left)<<setw(15)<<fak<<endl;
i++;
}while (i<=jd);
getch();
}
YHPI -> hal : 25
III.3.2 Menentukan nilai terbesar dan nilai terkecil dari sejumlah data yang diinputkan =>
perhatikan caranya!
*listing program
//latih3_2.cpp
//Array dimensi satu ,menentukan nilai terkecil dan nilai terbesar
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
#ifdef __cplusplus
int max (int value1, int value2);
int max(int value1, int value2)
{
return ( (value1 > value2) ? value1 : value2);
}
int min (int value1, int value2);
int min(int value1, int value2)
{
return ( (value1 < value2) ? value1 : value2);
}
#endif
void main()
{ clrscr();
int i,jd,bil[10],j,ntt,ntk;
cout<<"Masukkan jumlah data : ";
cin>>jd;
i=1;
while (i<=jd)
{ cout<<"Input data(anggka) ke "<<i<<" : ";
cin>>bil[i];
i=i+1;
}
/* Tampilan header */
cout<<endl<<endl<<endl;
clrscr();
cout<<"==========Data Yang diinputkan tadi adalah =========="<<endl;
i=1;
while (i<=jd)
{ cout<<"data ke "<<i<<" -> "<<bil[i]<<endl;
i=i+1;
}
//proses max dan min
YHPI -> hal : 26
i=1;
ntt=bil[1];
ntk=bil[1];
while (i<=jd-1)
{
ntt=max(ntt,bil[i+1]);
ntk=min(ntk,bil[i+1]);
i=i+1;
}
cout<<endl<<endl<<endl;
cout<<"================================="<<endl;
cout<<"Nilai terbesar (maximum) dari data diatas adalah : "<<ntt<<endl;
cout<<"Nilai terkecil (minimum) dari data diatas adalah : "<<ntk<<endl;
getch();
}
III.4. SOAL (UJI KEMAMPUAN),
Kerjakan setiap permasalahan dengan membuat flowchart dan listing program,
masing-masing simpan dengan nama file SOAL3_1.cpp/bpr, dan
SOAL3_2.cpp/bpr
1. Gunakan stringgrid untuk input data, ubahlah latihan3_1 dan latihan3_2 kedalam bentuk
VCL.
2. Inputkan sejumlah bilangan, dengan jumlah deret yang diinputkan, kelompokkan data
sesuai dengan tingkat kemiripan data, dengan model console.
YHPI -> hal : 27
BAB IV
SORTIR DATA
IV.1. TUJUAN
Mengurutkan (sorting) data dari kecil ke besar atau sebaliknya sangat dibutuhkan dalam
merangking, mengelompokkan, maupun teknik pencarian data. Adapun tujuan dari pertemuan
ini adalah,
1. Mahasiswa mampu menyusun algoritma pensortiran data dengan metode insertion sot,
selection sort, dan exchange sort.
2. Mahasiswa mampu mengimplementasikan salah satu metode pensortiran data dalam
menrancang program.
IV.2. TEORI DASAR
TEKNIK SORTIR DATA
Dua hal yang dapat mempengaruhi kecepatan Algoritma Sortir yaitu, jumlah operasi
perbandingan yang dilakukan, dan jumlah operasi pemindahan data yang dilakukan. Proses
sortir data harus diperhatikan jumlah pemindahan data atau data movement yang dilakukan.
Hal ini penting karena pada proses sortir, isi data input akan berubah menjadi data output yang
sudah terurut. Oleh karena itu teknik pemindahan data yang dilakukan jelas akan
mempengaruhi kecepatan Algoritma.
Secara umum ada 3 teknik utama yang dapat dilakukan dalam melakukan Sortir. Ketiga teknik
tersebut adalah :
1. Sortir Penyisipan atau Insertion Sort, dengan algoritma sebagai berikut:
Keterangan:
i : adalah variabel counter
jum_dat : adalah jumlah data keseluruhan
x : variabel temporer sebagai buffer data
sementara
a : vaiabel buffering data (dalam bentuk
array)
YHPI -> hal : 28
2. Sortir Pemilihan atau Selection Sort, mempunyai algoritma sebagai berikut,
3. Sortir Penukaran atau Exchange Sort, secara logika mempunyai algoritma berikut,
Masing-masing teknik pensortiran data tersebut secara logika mempunyai beberapa kelebihan
dan kekurangan.
Keterangan:
i ,k,j : adalah variabel counter
jum_dat : adalah jumlah data keseluruhan
x : variabel temporer sebagai buffer data
sementara
a : vaiabel buffering data (dalam bentuk
array)
Keterangan:
I,j : adalah variabel counter
jum_dat : adalah jumlah data
keseluruhan
temp : variabel temporer sebagai buffer
data sementara
a : vaiabel buffering data (dalam bentuk
array)
YHPI -> hal : 29
IV.3. LATIHAN PROGRAM,
Gunakan editor Console pada C++ Builder, dengan cara seperti yang sudah di jelaskan
terdahulu, kemudian ketikkan coding pada latihan berikut, mohon diperhatikan hasil dan
struktur logikanya, check hasilnya secara manual!
IV.3.1. Mensortir data atau mengurutkan data, menggunakan metode penyisipan, yaitu
mensortir/mengurutkan data dengan membuffer data untuk hasil sortir dan
kemudian disisipi oleh data hasil seleksi berikutnya.
*listing program
//latih4_1.cpp
//sortir data metode penyisipan
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
#include<math.h>
void main()
{ clrscr();
int k,i,jd,bil[10],j,temp;
float bp,fak;
cout<<"Masukkan jumlah data : ";
cin>>jd;
i=1;
while (i<=jd)
{ cout<<"Input data(anggka) ke "<<i<<" : ";
cin>>bil[i];
i=i+1;
}
/* Tampilan header */
cout<<endl<<endl<<endl;
clrscr();
cout<<"==========Data sebelum disortir=========="<<endl;
i=1;
while (i<=jd)
{ cout<<"data ke "<<i<<" -> "<<bil[i]<<endl;
i=i+1;
}
//proses sortir data
for (i=2;i<=jd;i++)
{ temp=bil[i];
bil[0]=temp;
k=i-1;
while (temp<bil[k])
YHPI -> hal : 30
{ bil[k+1]=bil[k];
k=k-1;
}
bil[k+1]=temp;
}
cout<<endl<<endl<<endl;
cout<<"==========Data sesudah disortir=========="<<endl;
for(i=1;i<=jd;i+=1)
cout<<"data ke "<<i<<" -> "<<bil[i]<<endl;
getch();
}
IV.3.2. Mensortir data atau mengurutkan data, menggunakan metode penukaran, yaitu
mensortir/mengurutkan data dengan cara menukar hasil seleksi.
*listing program
//latih4_2.cpp
// sortir data metode penukaran
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
#include<math.h>
void main()
{ clrscr();
int i,jd,bil[10],j,temp;
float bp,fak;
cout<<"Masukkan jumlah data : ";
cin>>jd;
i=1;
while (i<=jd)
{ cout<<"Input data(anggka) ke "<<i<<" : ";
cin>>bil[i];
i=i+1;
}
/* Tampilan header */
cout<<endl<<endl<<endl;
clrscr();
cout<<"==========Data sebelum disortir=========="<<endl;
i=1;
while (i<=jd)
{ cout<<"data ke "<<i<<" -> "<<bil[i]<<endl;
i=i+1;
}
//proses sortir data
i=1;j=1;
YHPI -> hal : 31
do
{ for(j=i+1;j<=jd;j++)
if (bil[i]>bil[j])
{ temp=bil[i];
bil[i]=bil[j];
bil[j]=temp;
}
i=i+1;
}while (i<=jd);
cout<<endl<<endl<<endl;
cout<<"==========Data sesudah disortir=========="<<endl;
for(i=1;i<=jd;i+=1)
cout<<"data ke "<<i<<" -> "<<bil[i]<<endl;
getch();
}
IV.4. SOAL (UJI KEMAMPUAN),
Kerjakan setiap permasalahan dengan membuat flowchart dan listing program,
masing-masing simpan dengan nama file SOAL4_1.cpp/bpr, dan
SOAL4_2.cpp/bpr !
1. Buat latihan4_1 ke dalam bentuk VCL, desain formnya sesuai dengan yang anda inginkan
2. Buat latihan4_2 ke dalam bentuk VCL, desain formnya sesuai dengan yang anda inginkan
3. Buat kesimpulan kelebihan dan kekurangan dari ketiga metode sortir data tersebut!
YHPI -> hal : 32
BAB V
MATRIK
V.1. TUJUAN
Selain sebagai buffering biasa, variabel array juga bisa diaplikasikan untuk membuffer operasi
matrik, tujuan dari BAB kelima ini adalah,
1. Mahasiswa mampu mengimplementasikan variabel array dalam buffering input data
matrik.
2. Mahasiswa mampu mengimplementasikan variabel array dalam buffering operasi
penjumlahan matrik.
3. Mahasiswa mampu mengimplementasikan variabel array dalam buffering operasi
perkalian matrik.
4. Mahasiswa mampu mengimplementasikan variabel array dalam buffering operasi invers
matrik.
5. Mahasiswa mampu mendesain sebuah program untuk menyelesaikan sebuah
persamaan linier dengan metode matrik.
V.2. TEORI DASAR
V.2.1. PENJUMLAHAN DAN PENGURANGAN MATRIK
Jumlalh dua matriks A dan B (ditulis A + B) adalah matriks yang didapat dengan menjumlahkan
setiap elemen A dengan elemen B yang bersesuaian (dengan syarat A dan B harus
mempunyai ordo sama). Kesimpulan penjumlahan matrik mempunyai syarat bahwa matrik
yang dijumlahkan harus mempunyai ordo yang sama, dan berlaku hukum komutatif.
Pengurangan matrik secara prinsip sama dengan penjumlahan matrik.
V.2.2. PERKALIAN MATRIK
Perkalian matrik mempunyai beberapa syarat diantaranya adalah, tidak berlaku hukum
komutatif, dan jumlah kolom matrik pertama harus sama dengan jumlah baris matrik kedua.
Perkalian antara k suatu skalar dengan A suatu matriks, maka dihasilkan kA adalah matriks
yang diperoleh dengan mengalikan setiap elemen A dengan k.
YHPI -> hal : 33
Perkalian antara dua matriks A dan B terdefinisi, dapat dioperasikan jika jumlah kolom A =
jumlah baris B, dengan hasil suatu matriks C yang berukuran < baris
matrik A
x kolom
matrik B
>,
Dengan aturan sebagai berikut,
Contoh,
a.
matirk dan matrik , dengan melakukan perkalian,
b.
V.2.2. INVERS MATRIK
Ada dua cara mencari invers matriks yaitu:
1. Menggunakan rumus,
det(A) : determinan matrik A
adj(A) : adjoin matrik A
Determinan Matrik berordo 2 x 2, Misal A = maka det(A)= det
= ad bc,
Determinan Matriks berordo 3 x 3 misalnya,
, ,
Determinan Matriks melalui cara di atas, diperoleh dengan menjumlahkan hasil kali pada
panah-panah yang mengarah ke kanan dan mengurangkan hasil kali panah-panah yang
mengarah ke kiri. Maka det(A) = acf + bfg + cdh ceg afh bdi.
YHPI -> hal : 34
Adjoin diperoleh dari transpose kofaktor matrik A, misalnya matrik tersebut dapat dibentuk
matriks baru, misalnya matriks C yang elemennya kofaktor adalah :
dengan masing-masing elemen kofaktor diperoleh dari:
A
1,1
= +[A
22
.A
33
A
23
.A
32
]; A
12
= -[A
21
.A
33
A
23
.A
31
]; A
13
=+[A
21
.A
32
A
22
.A
31
]
A
2,1
= +[A
12
.A
33
A
13
.A
32
]; A
22
= -[A
11
.A
33
A
13
.A
31
]; A
23
=+[A
11
.A
32
A
12
.A
31
]
A
3,1
= +[A
12
.A
23
A
13
.A
22
]; A
32
= -[A
11
.A
23
A
13
.A
21
]; A
13
=+[A
11
.A
22
A
12
.A
21
]
Adj(A) = C
T
=
(
(
(

33 23 13
32 22 12
31 21 11
A A A
A A A
A A A
2. Menggunakan metode Reduksi Gauss-Jordan matriks, ada beberapa syarat yang harus
dipenuhi, yaitu:
a) Matrik membentuk bujur sangkar (baris dan kolom harus sama)
b) Matrik memiliki bentuk eselon baris
c) Entri bukan nol pertama dalam setiap baris adalah satu-satunya entri bukan nol dalam
kolom yang bersangkutan,
d) Matrik harus singular, artinya tidak ada kesamaan dalam setaip barisnya atau kesamaan
dalam setiap kolomnya
e) tidak ada elemen dalam satu baris atau dalam satu kolom mempunyai nilai nol.
Adapun langkah-langkanya adalah,
- Pasang matrik identitas dibelakang matirk sumber, dengan baris dan kolom sama
dengan matrik sumber
- Arahkan matrik sumber menjadi matrik identitas, dan matrik identitas menjadi matrik
baru (menjadi invers matrik sumber), dengan cara:
a. Tentukan elemen 1,1 menjadi poros, sehingga baris pertama menjadi baris poros
b. Bagi semua elemen baris poros dengan nilai elemen 1,1 (poros), sehingga elemen
poros akan bernilai 1
c. Semua elemen kolom dalam poros tersebut menjadi elemen target pereduksi
(pengurang) sebanyak kelipatan masing-masing elemen baris poros terhadap baris
masing-masing elemen target, reduksi ini bertujuan merubah nilai kolom poros
menjadi nol.
d. Ulangi komponen a-c untuk poros elemen 2,2 kemudian 3,3 danseterusnya.
YHPI -> hal : 35
Contoh, misal kita mempunyai matrik A dengan nilai berikut,
Penyelesaian:
- Langkah 1, tuliskan matrik identitas dibelakang matrik A,
1 0 0
0 1 0
0 0 1
2 2 1
3 2 0
3 3 1


Karena kebetulan elemen poros sudah bernilai 1 maka sudah tidak ada perubahan
nilainya.
- Langkah 2, elemen kolom poros pertama yaitu elemen A
2,1
sudah bernilai nol sehingga
tidak perlu ada reduksi, berikutnya adalah elemen kolom poros ke dua, sehingga nilai
masing-masing elemen barisnya akan berubah menjadi :
-1 berubah menjadi : -1 (-1 * 1)-> 0
-2 berubah menjadi : -2 (-1 * 3)-> 1
-2 berubah menjadi : -2 (-1 * 3)-> 1
0 berubah menjadi : 0 (-1 * 1)-> 1
0 berubah menjadi : 0 (-1 * 0)-> 0
1 berubah menjadi : 1 (-1 * 0)-> 1
sehingga matriknya akan menjadi:
1 0 1
0 1 0
0 0 1
1 1 0
3 2 0
3 3 1

- Langkah 3, tentukan elemen 2,2 menjadi poros, sehingga baris ke dua menjadi baris
poros, bagi masing-masing elemen baris poros dengan nilai elemen poros, sehingga
nilainya akan berubah manjadi :
0 berubah menjadi : 0/(-2) -> 0
-2 berubah menjadi : -2/(-2) -> 1
-3 berubah menjadi : -3/(-2) -> 3/2
0 berubah menjadi : 0/(-2) -> 0
1 berubah menjadi : 1/(-2) -> -1/2
0 berubah menjadi : 0/(-2) -> 0
sehingga matriknya akan menjadi:
poros
baris poros
elemen target
YHPI -> hal : 36
1 0 1
0 1/2 0
0 0 1
1 1 0
3/2 1 0
3 3 1
- Langkah 4, sama seperti langkah 2, akan diperoleh matrik yang bernilai,
2 - 1 2 -
0 1/2 0
0 3/2 - 1
1 0 0
3/2 1 0
3/2 - 0 1
- Langkah 5, sama dengan langkah 3 dan 4, diperoleh matrik,
2 - 1 2 -
3 1 - 3
3 - 0 2 -
1 0 0
0 1 0
0 0 1
Sehingga diperoleh bahwa invers matrik A->A
-1
adalah,
2 - 1 2 -
3 1 - 3
3 - 0 2 -
1
=

A
V.2.3. Penyelesaian Persamaan Linier dengan Matrik,
Perhatikan sistem persamaan linier berikut :
a
11
x
1
+ a
12
x
2
+a
13
x
3
+ ... a
1n
x
n
= b
1
;
a
21
x
1
+ a
22
x
2
+a
23
x
3
+ ... a
2n
x
n
= b
2
;
.
.
a
n1
x
1
+ a
n2
x
2
+a
n3
x
3
+ ... a
nn
x
n
= b
n
;
Dengan menggunakan matriks persamaan di atas dapat dibuat dalam bentuk matriks :
YHPI -> hal : 37
Jika kedua ruas persamaan matriks dikalikan dengan invers matriks A, maka akan diperoleh :
A
-1
*A*x=A
-1
*b, dan
A
-1
*A = I; I * x =A
-1
* b -> x= A
-1
* b
V.3. LATIHAN PROGRAM,
Gunakan editor Console pada C++ Builder, dengan cara seperti yang sudah di jelaskan
terdahulu, kemudian ketikkan coding pada latihan berikut, mohon diperhatikan hasil dan
struktur logikanya, check hasilnya secara manual!
V.3.1. Menjumlah dua buah matrik, dengan ordo masing-masing diinputkan,
kemudian mencek persyaratan ordo dua matrik tersebut, dan nilai
masing-masing elemen matrik diinputkan,
*listing program
//latih5_1.cpp
//penjumlahan matrik dengan ordo dinamik
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
#include <stdio.h>
#include <stdlib.h>
void main()
{ int a[5][5],b[5][5],c[5][5];
int i,j,bar_a,kol_a,bar_b,kol_b,x=2,y,x2;
char atem[6],btem[6];
int put;
do
{ clrscr();
/* Proses input ordo matrik */
cout<<"Input Jumlah Baris matrik A :";
scanf("%d",&bar_a);
cout<<"Input Jumlah kolom matrik A :";
YHPI -> hal : 38
scanf("%d",&kol_a);
cout<<"Input Jumlah Baris matrik B :";
scanf("%d",&bar_b);
cout<<"Input Jumlah Baris matrik B :";
scanf("%d",&kol_b);
if (bar_a==bar_b && kol_a==kol_b)
put=0;
else
put=1;
} while(put==1);
/* Proses Input Data matrik */
cout<<"\n Masukkan Nilai natrik :"<<endl;
for (i=1;i<=bar_a;i++)
for (j=1;j<=kol_a;j++)
{ cout<<"A["<<i<<","<<j<<"] = ";
cin.getline(atem,sizeof(atem));
cout<<"B["<<i<<","<<j<<"] = ";
cin.getline(btem,sizeof(btem));
a[i][j] = atoi(atem);
b[i][j] = atoi(btem);
cout<<endl;
}
/* Proses Penjumlahan matrik */
for (i=1;i<=bar_a;i++)
for (j=1;j<=kol_a;j++)
{ c[i][j]=a[i][j]+b[i][j];
}
/* Proses Menampilkan hasil Penjumlahan matrik */
y=wherey();//mengambil posisi baris kursor dan nilainya disimpan pada y
gotoxy(x+5,y+1);
cout<<"A + B =";
x=wherex()+1; //mengambil posisi kolom dan nilainya + 1 disimpan di x
x2=x-2;
for (i=1;i<=bar_a;i++)
for (j=1;j<=kol_a;j++)
{ gotoxy(x+3*(j-1),y+2*(i-1));
cout<<a[i][j];
}
x=wherex();
gotoxy(x+5,y+1);cout<<"+";
x=wherex()+5;
for (i=1;i<=bar_a;i++)
for (j=1;j<=kol_a;j++)
{ gotoxy(x+3*(j-1),y+2*(i-1));
cout<<b[i][j];
}
YHPI -> hal : 39
y=wherey()+5;
gotoxy(x2,y+1);cout<<"=";
for (i=1;i<=bar_a;i++)
for (j=1;j<=kol_a;j++)
{ gotoxy(x2+3*(j),y+2*(i-1));
cout<<c[i][j];
}
getche();
}
V.3.2. Menentukan invers matrik dengan metode Reduksi gauss-Jordan, dengan
ordo diinputkan, kemudian mencek persyaratan ordo matrik tersebut, dan
nilai masing-masing elemen matrik bersiafat variatif (diinputkan),
//latih5_2.cpp
//Menentukan nilai invers matrik !
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
#include <stdio.h>
#include <stdlib.h>
void main()
{ float a[10][10],b[10][10],c[10][10],d;
int i,ii,j,jj,bar_a,kol_a,bar_b,kol_b,x=2,y,x2,k;
char atem[10],btem[10];
int put;
do
{ clrscr();
/* Proses input ordo matrik */
cout<<"Input Jumlah Baris matrik A :";
scanf("%d",&bar_a);
cout<<"Input Jumlah kolom matrik A :";
scanf("%d",&kol_a);
if (bar_a==kol_a)
put=0;
else
{
put=1;
cout<<"Maaf Jumlah baris harus sama dengan jumlah kolom (tekan enter untuk
memasukkan data kembali), OK!";
getche();
}
} while(put==1);
/* Proses Input Data matrik */
YHPI -> hal : 40
cout<<"\n Masukkan Nilai natrik :"<<endl;
for (i=1;i<=bar_a;i++)
for (j=1;j<=kol_a;j++)
{ cout<<"A["<<i<<","<<j<<"] = ";
cin.getline(atem,sizeof(atem));
a[i][j] = atoi(atem);
c[i][j] = a[i][j];
if (i==j)
b[i][j] =1;
else
b[i][j]=0;
cout<<endl;
}
/* Proses Menampilkan bentuk matrik */
clrscr();
cout<<"======== Matrik A bernilai :===============";
y=wherey()+5;//mengambil posisi baris kursor dan nilainya disimpan pada y
gotoxy(x+7,y);
x=wherex()+1; //mengambil posisi kolom dan nilainya + 1 disimpan di x
x2=x-2;
for (i=1;i<=bar_a;i++)
for (j=1;j<=kol_a;j++)
{ gotoxy(x+3*(j-1),y+2*(i-1));
cout<<a[i][j];
}
y=wherey()-((wherey()-y)/2);
gotoxy(5,y);
cout<<"A =";
getche();
// proses reduksi Metode Gauss-Jordan
for (i=1;i<=bar_a;i++)
for (j=i;j<=i;j++)
{ if (a[i][j]!=1)
{ for (k=1;k<=kol_a;k++)
{ b[i][k]=b[i][k]/c[i][j];
a[i][k]=a[i][k] /c[i][j]; //merubah nilai poros menjadi satu
}
for (k=1;k<=kol_a;k++)
c[i][k]=a[i][k];
}
for (ii=1;ii<=bar_a;ii++)
if (ii!=j)
if (a[ii][j]!=0)
{
d=a[ii][j];
for (jj=1;jj<=kol_a;jj++)
{
YHPI -> hal : 41
b[ii][jj]=b[ii][jj]-(d*b[i][jj]);
a[ii][jj]=a[ii][jj]-(d*a[i][jj]);
}
for (jj=1;jj<=kol_a;jj++)
c[ii][jj]=a[ii][jj];
}
}
/* Proses Menampilkan hasil invers matrik */
clrscr();
y=wherey()+10;//mengambil posisi baris kursor dan nilainya disimpan pada y
gotoxy(x+1,y);
x=wherex()+15; //mengambil posisi kolom dan nilainya + 1 disimpan di x
x2=x-2;
for (i=1;i<=bar_a;i++)
for (j=1;j<=kol_a;j++)
{ gotoxy(x+8*(j-1),y+2*(i-1));
cout<<setw(4)<<setprecision(2)<<b[i][j];
}
y=wherey()-((wherey()-y)/2);
gotoxy(5,y);
cout<<"invers matirk A =";
gotoxy(50,30);
getche();
}
V.4. SOAL (UJI KEMAMPUAN),
Kerjakan setiap permasalahan dengan membuat flowchart dan listing program,
masing-masing simpan dengan nama file SOAL5_1.cpp/bpr, SOAL5_2.cpp/bpr,
dan Soal5_3.cpp/bpr
1. Ubah program latihan5_1 dan 5_2 kedalam model VCL, desainlah formnya sesuai dengan
yang anda inginkan.
2. Buat program untuk menentukan nilai persamaan linier, dengan masing-masing koefisien
diinputkan!, dalam model VCL.
YHPI -> hal : 42
BAB VI
STRING
VI.1. TUJUAN
Data string bisa berupa sekumpulan angka, campuran antara angka dengan huruf,
sekumpulan huruf, dan campuran angka, huruf, dengan karakter khusus, tujuan dari BAB
keenam ini adalah,
1. Mahasiswa mampu membedakan tipe data string, karakter, atau angka.
2. Mahasiswa mampu mengimplementasikan fungsi operasi string untuk mendesain
sebuah program .
VI.2. TEORI DASAR
VI.2.1 STRING dalam C++
String adalah tipe data yang merupakan kumpulan dari sebuah karakter, string dapat berupa
konstanta atau variabel. Penulisan ekspresi string diapit oleh tanda petik (...), sebagai contoh,
cout<<bahasa ProgramC++;. Setiap karakter menempati memori sebesar 1 byte. Prototipe
string terdapat pada file header <stdlib.h> dan <string.h>.
Beberapa fungsi operasi string:
No Fungsi Pemakaian Keterangan
1 strlen(str) str=strlen(Indonesia) Hasilnya adalah variabel str bernilai 9,
Fungsi ini digunakan untuk menghitung
panjang string dari variabel str
2 strcat(str1,str2) strcat(a,RAYA) Hasilnya adalah variabel a bernilai RAYA
jika nilai awal a adalah kosong->,
Fungsi ini digunakan untuk menggabungkan
nilai dari variabel str1 dengan nilai dari
variabel str2
3 strcmp(str1,str2) a=strcmp(A,D) Hasilnya adalah variabel a bernilai -3,
Fungsi ini digunakan untuk membandingkan
string str1 dengan str2 dengan hasil,
- negatif jika str1<str2 (kode ASCII)
- nol jiak str1=str2
- positif jika str1>str2
4 stricmp(str1,str2) a=stricmp(a,A) Hasilnya adalah variabel a bernilai 0,
Fungsi ini sama dengan strcmp tetapi untuk
YHPI -> hal : 43
stricmp tidak membedakan huruf besar atau
huruf kecil.
5 strupr(str) str=indonesia;
strupr(str);
Hasilnya adalah variabel str bernilai
INDONESIA,
Fungsi ini digunakan untuk mengubah nialai
variabel str menjadi huruh kapital.
6 strlwr(str) str=INDONESIA;
strlwr(str);
Hasilnya adalah variabel str bernilai
indonesia,
Fungsi ini digunakan untuk mengubah nialai
variabel str menjadi huruh kecil.
7 strrev(str) str=1234
strrev(str)
Hasilnya adalah variabel str bernilai 4321,
Fungsi ini digunakan untuk membalik nilai
string variabel str.
8 atoi(val) a=atoi(500) Hasilnya adalah variabel a bernilai 500 buksn
500,
Fungsi ini digunakan untuk memgkonversikan
nilai angka dengan tipe string menjadi nilai
angka bertipe numerik
VI.2.2 STRING dalam C++ Builder
Operasi string pada C++ Builder terutama dijalankan pada Class yang sering disebut
AnsiString. Kelas ansistring tidak diperoleh dari Tobject, tetapi didapat dari indepency dan
flexibilitas aplikasi form. Ada perbedaan yang prinsip antara ansistring dengan string yang
dimaksud pada C++, string yang dimaksud oleh C++ masih bergantung pada sistem karakter,
sedangkan ansistring yang dimaksud pada Builder sudah terbebas dari aturan karakter. Hal
sangat penting yang harus kita ketahui adalah semua type data VCL adalah ansistring.
Fungsi-fungsi yang penting dalan ansistring adalah:
- Length, contoh penggunaan : Edit1->Text.Length()
- SetLength, contoh penggunaan : Edit1->Text.SetLength(10)
- TrimLeft, contoh penggunaan : Edit1->Text.TrimLeft()
- TrimRight, contoh penggunaan : Edit1->Text.TrimRight()
- UpperCase, contoh penggunaan : Edit1->Text.Uppercase()
VI.3. LATIHAN PROGRAM,
Gunakan editor Console pada C++ Builder, dengan cara seperti yang sudah di jelaskan
terdahulu, kemudian ketikkan coding pada latihan berikut, mohon diperhatikan hasil dan
struktur logikanya, check hasilnya secara manual!
YHPI -> hal : 44
VI.3.1. Memasukkan sebuah data dengan type data string menggunakan cin,
kemudaian jalankan program dan inputkan dengan kata tanpa spasi, coba
jalan lagi program tadi kemudian masukkan dua buah kata dengan spasi,
perhatikan hasilnya, dan bandingkan.
*listing program
//latih6_1.cpp
//Input data Type ==String== tanpa space
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
#include<math.h>
void main()
{ clrscr();
char nama[10];
cout<<"masukkan sebuah nama orang : ";
cin>>nama; //masukkan data string simpan dalam variable nama
cout<<endl<<endl<<endl;
cout<<"nama yang anda masukkan adalah : "<<nama;
getch();
}
VI.3.2. Memasukkan sebuah data dengan type data string menggunakan cin.get,
kemudaian jalankan program dan inputkan dengan kata tanpa spasi, coba
jalan lagi program tadi kemudian masukkan dua buah kata dengan spasi,
perhatikan hasilnya, dan bandingkan.
*listing program
//latih6_2.cpp
//Input data Type ==String==
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
#include<math.h>
void main()
{ clrscr();
char nama[20];
cout<<"masukkan sebuah nama orang : ";
cin.get(nama,20);// bisa juga ditulis cin.get(nama,sizeof(nama))
cout<<endl<<endl<<endl;
YHPI -> hal : 45
cout<<"nama yang anda masukkan adalah : "<<nama;
getch();
}
VI.3.3. Memasukkan sebuah data dengan type data string menggunakan gets,
kemudaian jalankan program dan inputkan dengan kata tanpa spasi, dan
implementasi array pada string. Perhatikan pola dan bentuknya!
*listing program
//latih6_3.cpp
//Input data Type ==String== lebih dari satu input + array dua dimensi
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
main()
{ clrscr();
int jd,i,j;
char nim[5][20],nama[5][20],alm[5][20],jds[5];
cout<<"Masukkan jumlah data : ";
gets(jds);
jd=atoi(jds);
for(i=1;i<=jd;i++)
{
cout<<i<<". N I M = ";
gets(&nim[i-1][0]);
cout<<" Nama = ";
gets(&nama[i-1][0]);
cout<<" Alamat = ";
gets(&alm[i-1][0]);
}
clrscr();
cout<<endl<<endl<<endl;
cout<<"Data yang anda masukkan tadi adalah "<<endl;
cout<<"========================================================"<<endl;
cout<<setw(5)<<setiosflags(ios::left)<<"No.";
cout<<setw(15)<<setiosflags(ios::left)<<"N I M";
cout<<setw(20)<<setiosflags(ios::left)<<"Nama";
cout<<setw(20)<<setiosflags(ios::left)<<"Alamat"<<endl;
cout<<"========================================================"<<endl;
YHPI -> hal : 46
for(j=1;j<=jd;j++)
{ cout<<setw(5)<<setiosflags(ios::left)<<j;
cout<<setw(15)<<setiosflags(ios::left)<<&nim[j-1][0];
cout<<setw(20)<<setiosflags(ios::left)<<&nama[j-1][0];
cout<<setw(20)<<setiosflags(ios::left)<<&alm[j-1][0]<<endl;
}
getch();
}
VI.4. SOAL (UJI KEMAMPUAN),
Kerjakan setiap permasalahan dengan membuat flowchart dan listing program,
masing-masing simpan dengan nama SOAL6_1a, SOAL6_1b), dan SOAL6_1c
VI.4.1. Buat program untuk mensortir data bertipe string dengan metode penyisipan,
gunakan design VCL.
VI.4.2. Buat program untuk mensortir data bertipe string dengan metode penukaran, gunakan
design VCL.
VI.4.3. Buat program untuk mensortir data bertipe string dengan metode pemilihan, gunakan
design VCL.
YHPI -> hal : 47
BAB VII
KONVERSI BILANGAN
VII.1. TUJUAN
Secara umum sistem bilangan yang digunakan dalam proses komputerisasi (interfacing,
mikroprosesor, pengolahan citra, dan pengolahan data) adalah, bilangan biner, bilangan octal,
bilangan desimal, dan sistem bilangan heksadesimal. Tujuan dari BAB ketujuh ini adalah,
1. Mahasiswa mampu mengkonversikan bilangan biner ke desimal atau sebailknya, heksa
ke desimal atau sebaliknya, biner ke heksadesimal atau sebaliknya, ...
2. Mahasiswa mampu menyusun algoritma untuk konversi bilangan.
3. Mahasiswa mampu mengimplementasikan algoritma konversi bilangan dalam membuat
sebuah program
VII.2. TEORI DASAR
Konversi Bilangan
Sistem bilangan yang umum digunakan oleh manusia adalah sistem biilangan desimal, yaitu
sistem bilangan yang menggunakan 10 macam symbol untuk mewakili suatu besaran. Sistem
ini banyak digunakan karena manusia mempunyai sepuluh jari untuk dapat membantu
perhitungan. Lain halnya dengan komputer, sistem bilangan yang digunakan oleh komputer
adalah bilangan biner, yang terdiri dari dua symbol yaitu 0 dan 1. Karena logika di komputer
diperoleh dari bentuk elemen dua keadaan yaitu off (tidak ada arus) dan on (ada arus),
sehingga memanfaatkan pengkodean system bilangan biner.
Konversi bilangan adalah suatu proses dimana satu system bilangan dengan basis tertentu
akan dijadikan bilangan dengan basis yang lain.
1. Konversi dari bilangan desimal ke biner
Yaitu dengan cara membagi bilangan desimal dengan dua kemudian diambil sisa
pembagiannya.
Contoh :
43 (10) = ..(2)
43 : 2 = 21 + sisa 1
21 : 2 = 10 + sisa 1
10 : 2 = 5 + sisa 0
5 : 2 = 2 + sisa 1
2 : 2 = 1 + sisa 0 101011(2) ditulis dari bawah ke atas
YHPI -> hal : 48
2. Konversi bilangan Desimal ke Oktal
Yaitu dengan cara membagi bilangan desimal dengan 8 kemudian diambil sisa
pembagiannya
Contoh :
385 ( 10 ) = .(8)
385 : 8 = 48 + sisa 1
48 : 8 = 6 + sisa 0
601)
3. Konversi bilangan Desimal ke Hexadesimal
Yaitu dengan cara membagi bilangan desimal dengan 16 kemudian diambil sisa
pembagiannya
Contoh :
1583 ( 10 ) = .(16)
1583 : 16 = 98 + sisa 15
96 : 16 = 6 + sisa 2
62F (16)
VII.3. LATIHAN PROGRAM,
Gunakan editor Console pada C++ Builder, dengan cara seperti yang sudah di jelaskan
terdahulu, kemudian ketikkan coding pada latihan berikut, mohon diperhatikan hasil dan
struktur logikanya, check hasilnya secara manual!
VII.3.1 Mengkonversikan bilangan desimal ke dalam bilangan biner.
*listing program
//latih7_1.cpp
//mengkonversikan bilangan desimal ke biner
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iomanip.h>
#include <string.h>
void main()
{ int bildes,shb,hb;
YHPI -> hal : 49
char shbs[1],kshb[20];
clrscr();
cout<<"Masukkan sebuah bilangan Desimal : ";
cin>>bildes;
strcpy(kshb,"");
do
{ hb=bildes/2;
shb= bildes % 2;
itoa(shb,shbs,10);
strcat(kshb,shbs);
bildes=hb;
}while (bildes>1);
itoa(hb,shbs,10);
strcat(kshb,shbs);
strrev(kshb);
cout<<"konversi ke bilangan dasar dua (biner) = "<<kshb;
getche();
}
VII.4. SOAL (UJI KEMAMPUAN),
Kerjakan setiap permasalahan dengan membuat flowchart dan listing program,
masing-masing simpan dengan nama file SOAL7_1, SOAL7_2, dan SOAL7_3.
1. Ubahlah latihan7_1 kedalam bentuk desain VCL.
2. konversi bilangan hexa ke dalam bilangan biner, dengan model VCL
3. konversi bilangan biner ke dalam bilangan hexadesimal, dengan model VCL
YHPI -> hal : 50
BAB VIII
STRUKTUR FUNGSI
VIII.1. TUJUAN
Pembuatan fungsi dalam sebuah program bertujuan menghindari penulisan subroutin yang
berulang-ulang, sehingga akan memperkecil kapasitas memori, dan juga mempermudah
penggunaan. Tujuan dari BAB kedelapan ini adalah,
1. Mahasiswa mampu menyusun routin kegiatan dalam sebuah fungsi
2. Mahasiswa mampu mengimplementasikan fungsi ke dalam sebuah desain program
VIII.2. TEORI DASAR
Fungsi
Fungsi berisi sejumlah parameter yang dikemas dalam sebuah nama. Nama ini selanjutnya
dapat dipanggil beberapa kali di beberapa tempat dalam program. Tujuan pembuatan sebuah
fungsi adalah: mempermudah pengembangan program, dan menghemat kapasitas program
jika terdapat suatu rutin yang sama di ualang-ulang pada tempat yang berbeda. Struktur fungsi
adalah sebagai berikut:
deklarasi fungsi()
main()
{ penggunaan fungsi()
.............................
.............................
............................
}
Isi dari fungsi()
{ .........................
.........................
.........................
}
VIII.3. LATIHAN PROGRAM :
Gunakan editor Console pada C++ Builder, dengan cara seperti yang sudah di jelaskan
terdahulu, kemudian ketikkan coding pada latihan berikut, mohon diperhatikan hasil dan
struktur logikanya, check hasilnya secara manual!
VIII.3.1. Implementasi fungsi tanpa nilai kembalian (return), perhatikan pola dan
penggunaanya!
YHPI -> hal : 51
*listing program
//latih8_1.cpp
//fungsi tanpa nilai kembalian (return)
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <iomanip.h>
void garis();
void main()
{ cout<<setiosflags(ios::left);
garis();
cout<<setw(40)<<"Nama Alamat Tgl Lahir"<<endl;
garis();
cout<<setw(40)<<"didik Malang 27-01-1980"<<endl;
getche();
}
void garis()
{ cout<<"============================================"<<endl;
}
VIII.3.2. Implementasi fungsi dengan nilai kembalian (return value), implementasi
bilangan pangkat dua
*listing program
//latih8_2.cpp
//fungsi dengan nilai kembalian (return value)
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <iomanip.h>
long kuadrat(int i);
void main()
{ int k;
clrscr();
cout<<"nilai kuadrat dari 9 adalah:";
cout<<kuadrat(9);
getche();
}
long kuadrat(int i)
{ long x;
x=i*i;
return(x);
}
YHPI -> hal : 52
VIII.3.3. Implementasi fungsi dengan nilai kembalian (return value), untuk perpangkatan.
*listing program
//latih8_3.cpp
//fungsi pangkat
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <iomanip.h>
long pang(int bildas,int bilpang);
void main()
{ int bd,bp;
clrscr();
cout<<"Input bilangan Dasar :";cin>>bd;
cout<<"Input bilangan pangkat :";cin>>bp;
cout<<bd<<" pangkat : "<<bp<<" = ";
cout<<pang(bd,bp);
getche();
}
long pang(int bildas,int bilpang)
{ long x;
int i;
x=1;
for (i=1;i<=bilpang;i++)
x=x*bildas;
return(x);
}
VIII.4. SOAL (UJI KEMAMPUAN)
Kerjakan setiap permasalahan dengan membuat flowchart dan listing program,
masing-masing simpan dengan nama SOAL8_1, dan SOAL8_2
1. Ubahlah latihan8_3 ke dalam bentuk VCL, desain formnya sesuai dengan yang anda
inginkan
2. buat fungsi nilai faktorial dari suatu bilangan (ada return value dan non return value),
dengan desain VCL
YHPI -> hal : 53
BAB IX
OOP, STRUKTUR DAN CLASS
IX.1. TUJUAN
Pemrograman berorientasi objek merupakan paradigma pemrograman yang semua data dang
fungsi dibungkus dalam kelas-kelas atau obyek-obyek. Tujuan dari BAB kesembilan ini
adalah,
1. Mahasiswa mampu membandingkan pemrograman antara logika terstrukur dengan
logika berorientasi obyek.
2. Mahasiswa mampu menyusun permasalahan dalam struktur dan kelas.
3. Mahasiswa mampu mendesain sebuah program dengan memanfaatkan struct dan
class sebagai elemen OOP.
IX.2. TEORI DASAR
IX.2.1 Variabel Obyek atau dikenal sebagai OOP (Object Oriented
Programming)
C++ mempunyai keistimewaan, yaitu bahasa ini mendukung pemrograman yang berorientasi
objek atau OOP (Object Oriented Programming). Yang di maksud dengan objek disini
sebenarnya mencerminkan pola kerja manusia dalam kehidupan sehari-hari. Sebuah objek
dapat diibaratkan sebagai departemen-departemen di dalam sebuah institusi pendidikan.
Contoh departemen :
1. akademik
2. personalia
3. kemahasiswaan
4. perawatan
5. jurusan
6. dan yang lain
Pembagian departemen institusi pendidikan merupakan upaya untuk memudahkan
pengoperasian kerja institusi. Sebagai gambaran, jika anda seorang KABAG AKADEMIK di
Kantor Pusat ingin mengetahui data tentang biodata dari seorang mahasiswa, apa yang anda
lakukan? Langkah yang anda tempuh pasti tidak datang secara langsung ke ruang
kemahahasiswaan dan mencari data pada berkas-berkas yang ada pada departemen tersebut.
Untuk memudahkan tugas anda, anda cukup mengutus sekretaris anda untuk meminta
informasi dari departemen kemahasiswaan sesuai yang anda butuhkan. Masalah bagaimana
dan siapa yang mencarikan laporan yang diperlukan bukanlah menjadi urusan anda. Analogi
dengan hal ini, kalau seseorang bermaksud menggunakan objek, ia cukup mengirim suatu
pesan ke objek dan objek itu sendiri yang akan menanganinya.
YHPI -> hal : 54
Sebuah gambaran tentang objek yang berisi data dan fungsi yang memanipulasi data dapat
dilihat pada gambar di bawah ini :
Adapun gambar yang melukiskan hubungan antar objek yang menganalogikan struktur di
institusi :
IX.2.2. STRUKTUR dan CLASS
Dalam C++ Struct dan class mempunyai penulisan yang sama. Secara konsep class
merupakan struktur data dari obyek atau elemen dasar dari OOP. Deklarasi class dan struct
memiliki anggota dengan akses public kecuali jika dinyatakan lain. C ++ tidak membedakan
nama class dan nama tag, paling tidak dari sudut pandang pemprogram dan tetap menerima
deklarasi structure. Kompatibilitas C ++ tidak sebatas pada perbedaan nama class dan nama
type karena C++ masih memerlukan definisi type POD (Plain Old Data). C++ mendefinisikan
POD Type sebagai objek suatu class yang tidak mempunyai userdefined constructor, anggota
protected maupun private, tidak memiliki base class dan tidak memiliki fungsi virtual.
Struktur bertujuan untuk mengelompokkan sejumlah data dengan tipe yang berlainan, sebagai
contoh:
struct data_biodata
{ char nama[30];
YHPI -> hal : 55
int tanggal_lahir;
int bulan_lahir;
int thn_lahir;
char hobi[20];
}
contoh calss:
class biodata
{ static :
int th_lahir;
public:
void umur();
}
IX.3. LATIHAN PROGRAM :
Gunakan editor Console pada C++ Builder, dengan cara seperti yang sudah di jelaskan
terdahulu, kemudian ketikkan coding pada latihan berikut, mohon diperhatikan hasil dan
struktur logikanya, check hasilnya secara manual!
IX.3.1. Mengimplementasikan type struct dalam data -> biodata, perhatikan pola
dan cara penggunaanya!
*listing program
//latih9_1.cpp
//Implementasi Struktur
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <iomanip.h>
struct biodata
{ char nim[15];
char nama[30];
char alamat[35];
char hoby[30];
};
void main()
{ clrscr();
int i,jd;
biodata data[10];
YHPI -> hal : 56
cout<<"Input Jumlah data : ";
scanf("%d",&jd);
cout<<endl<<endl<<endl;
cout<<"=====Input data ========"<<endl;
for(i=1;i<=jd;i++)
{ cout<<i<<". Nim : ";
cin.getline(data[i].nim,sizeof(data[i].nim));
cout<<" Nama : ";
cin.getline(data[i].nama,sizeof(data[i].nama));
cout<<" Alamat : ";
cin.getline(data[i].alamat,sizeof(data[i].alamat));
cout<<" Kegemaran : ";
cin.getline(data[i].hoby,sizeof(data[i].hoby));
}
cout<<"\n \n \n";
cout<<"===========OUT PUT DATA ============"<<endl<<endl;
cout<<"N I M Nama Alamat Hobby"<<endl;
cout<<"================================================"<<endl;
for(i=1;i<=jd;i++)
{ cout<<setw(10)<<data[i].nim;
cout<<setw(20)<<data[i].nama;
cout<<setw(20)<<data[i].alamat;
cout<<setw(20)<<data[i].hoby<<endl;
}
getche();
}
IX.3.2. Mengimplementasikan type class dalam data -> biodata, perhatikan
polanya!
*listing program
//latih9_2.cpp
//implementasi class & public variabel
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <iomanip.h>
class biodata
{ public:
char nim[15];
char nama[30];
char alamat[35];
char hoby[30];
};
void main()
YHPI -> hal : 57
{ clrscr();
int i,jd;
biodata data[10];
cout<<"Input Jumlah data : ";
scanf("%d",&jd);
cout<<endl<<endl<<endl;
cout<<"=====Input data ========"<<endl;
for(i=1;i<=jd;i++)
{ cout<<i<<". Nim : ";
cin.getline(data[i].nim,sizeof(data[i].nim));
cout<<" Nama : ";
cin.getline(data[i].nama,sizeof(data[i].nama));
cout<<" Alamat : ";
cin.getline(data[i].alamat,sizeof(data[i].alamat));
cout<<" Kegemaran : ";
cin.getline(data[i].hoby,sizeof(data[i].hoby));
}
cout<<"\n \n \n";
cout<<"=======================OUT PUT DATA ==========================";
cout<<endl<<endl;
cout<<"N I M Nama Alamat Hobby"<<endl;
cout<<"==============================================================";
cou<<endl;
for(i=1;i<=jd;i++)
{ cout<<setw(10)<<setiosflags(ios::left)<<data[i].nim;
cout<<setw(20)<<setiosflags(ios::left)<<data[i].nama;
cout<<setw(20)<<setiosflags(ios::left)<<data[i].alamat;
cout<<setw(20)<<setiosflags(ios::left)<<data[i].hoby<<endl;
}
getche();
}
IX.3.3. Mengimplementasikan type class dengan menggunakan desain VCL,
buatlah desain form seperti gambar 9.1 berikut:
YHPI -> hal : 58
Gambar 9.1
Langkah-langkah pengerjaan adalah sebagai berikut:
- Buka aplikasi program baru, letakkan masing-masing komponen sesuai dengan
tempatnya seperti pada gambar 9.1
- Ubahlah masing-masing caption yang diperlukan sehingga tampilan sesuai dengan
gambar 9.1
- Kemudian Doubel-Click pada masing-2 komponen yang diperlukan untuk menuliskan
coding di bawah ini:
//=============================
class biodata
{ public:
AnsiString nim[15];
AnsiString nama[30];
AnsiString alamat[35];
AnsiString umurS[30];
};
biodata data[10],temp;
//AnsiString nim[10][10],nm[10][10], alm[10][10],um[10][10];
DATE tgl;
int i;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
data[i].nim[0]=Edit1->Text;
data[i].nama[0]=Edit2->Text;
YHPI -> hal : 59
data[i].alamat[0]=Edit3->Text;
tgl=StrToDate(Edit4->Text);
data[i].umurS[0]=FormatDateTime("yy",Date()-tgl);
i=i+1;
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";
Edit1->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
StringGrid1->ColCount=5;
StringGrid1->RowCount=10;
StringGrid1->Cells[0][0]="NO.";
StringGrid1->Cells[1][0]="N I M";
StringGrid1->Cells[2][0]="NAMA";
StringGrid1->Cells[3][0]="ALAMAT";
StringGrid1->Cells[4][0]="U M U R";
StringGrid1->ColWidths[0]=50;
StringGrid1->ColWidths[1]=80;
StringGrid1->ColWidths[2]=100;
StringGrid1->ColWidths[3]=100;
StringGrid1->ColWidths[4]=70;
StringGrid2->ColCount=5;
StringGrid2->RowCount=10;
StringGrid2->Cells[0][0]="NO.";
StringGrid2->Cells[1][0]="N I M";
StringGrid2->Cells[2][0]="NAMA";
StringGrid2->Cells[3][0]="ALAMAT";
StringGrid2->Cells[4][0]="U M U R";
StringGrid2->ColWidths[0]=50;
StringGrid2->ColWidths[1]=80;
StringGrid2->ColWidths[2]=100;
StringGrid2->ColWidths[3]=100;
StringGrid2->ColWidths[4]=70;
StringGrid1->Hide();
StringGrid2->Hide();
Label5->Hide();
Label6->Hide();
Button3->Hide();
i=1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Label1->Hide();
Label2->Hide();
Label3->Hide();
Label4->Hide();
Label5->Show();
Label5->Caption="DATA SEBELUM DISORTIR";
Label6->Show();
Label6->Caption="DATA SESUDAH DISORTIR";
YHPI -> hal : 60
Edit1->Hide();
Edit2->Hide();
Edit3->Hide();
Edit4->Hide();
Button1->Hide();
Button2->Hide();
Button3->Show();
StringGrid1->Show();
StringGrid1->RowCount=i;
StringGrid2->Show();
StringGrid2->RowCount=i;
int j,k,n,m;
i=i-1;
for (j=0;j<=i;j++)
{ StringGrid1->Cells[0][j+1]=IntToStr(j+1);
StringGrid1->Cells[1][j+1]=data[j+1].nim[0];
StringGrid1->Cells[2][j+1]=data[j+1].nama[0];
StringGrid1->Cells[3][j+1]=data[j+1].alamat[0];
StringGrid1->Cells[4][j+1]=data[j+1].umurS[0];
}
// PROSES PENSORTIRAN
for (k=1;k<=i-1;k++)
for (j=k+1;j<=i;j++)
{ n=StrToInt(data[k].nim[0]);
m=StrToInt(data[j].nim[0]);
if (n>m)
{ temp=data[k];
data[k]=data[j];
data[j]=temp;
}
}
// MENAMPILKAN DATA HASIL SORTIR
for (j=0;j<=i;j++)
{ StringGrid2->Cells[0][j+1]=IntToStr(j+1);
StringGrid2->Cells[1][j+1]=data[j+1].nim[0];
StringGrid2->Cells[2][j+1]=data[j+1].nama[0];
StringGrid2->Cells[3][j+1]=data[j+1].alamat[0];
StringGrid2->Cells[4][j+1]=data[j+1].umurS[0];
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
- Aturlah letak masing-masing komponen sehingga pada saat di running desain akan
lebih proporsional.
- Setelah mengetik source code dan mengatur tempat yang proporsional, kemudian
simpanlah project ini dengan mengklik Save ALL, untuk unit->beri nama
Latihan9_3.cpp, sedangkan untuk Project beri nama Platihan9_3
Apabila mengalami kesulitan silahkan bertanya pada Dosen yang mendampingi !
YHPI -> hal : 61
IX.4. SOAL(UJI KEMAMPUAN)
Kerjakan setiap permasalahan dengan membuat flowchart dan listing program,
masing-masing simpan dengan nama SOAL9_1.cpp, dan SOAL9_2.cpp
1. Buat program dengan basis struct seperti latih9_1.cpp, dengan mensortir NIM
berdasarkan pilihan ascending atau descending sesuai dengan pilihan, pilihan gunakan
bentuk radiobutton. Desain dengan mode VCL.
2. Buat program dengan basis class seperti latih9_3.cpp, dengan mensortir pilihan field,
masukkan pilihan ke dalam komponen combobox, buat dalam VCL.
YHPI -> hal : 62
BAB X
VARIABEL PUBLIC, PRIVATE, DAN OVERLOADING OPERATOR
X.1. TUJUAN
Variabel mempunyai luas cakupan, yang dibedakan antara variabel lokal disebut dengan
private dan variabel global disebut dengan public. Tujuan dari BAB kesepuluh ini adalah,
1. Mahasiswa mampu membedakan antara variabel yang bersifat private dan variabel
yang bersifat public.
2. Mahasiswa mampu mengimplementasikan variabel private dan public dalam struc
maupun class untuk mendesain sebuah program.
3. Mahasiswa mampu menggunakan overloading operator dalam sebuah program.
X.2. TEORI DASAR
Public, Private, dan Overloading operator
Yang dimaksud denga public adalah anggota class (variabel) yang dideklarasikan public dapat
diakses diluar class tersebut atau bersifat global. Sedangkan private berarti anggota class
(variabel) yang dideklarasikan private tidak dapat diakses diluar class tersebut atau bersifat
lokal. Overloading bertujuan memudahkan operasi terhadap data, khususnya yang melibatkan
obyek. Sebagai contoh matrik A + matrik B, secara aturan dasar operasi penjumlahan tersebut
tidak dapat dillakukan, tetapi dengan menggunakan metode overloading maka operai ini dapat
dilakukan.
X.3. LATIHAN PROGRAM :
Gunakan editor Console pada C++ Builder, dengan cara seperti yang sudah di jelaskan
terdahulu, kemudian ketikkan coding pada latihan berikut, mohon diperhatikan hasil dan
struktur logikanya, check hasilnya secara manual!
X.3.1. Mengimplementasikan class dengan menggunakan public, private dan
overloading operator, perhatikan secara sungguh-sungguh polanya!
*listing program
//latih10_1.cpp
//implementasi class, (public + private variabel), overloading operator
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
#include <stdlib.h>
YHPI -> hal : 63
class matrik
{ private:
int jumbar;
int jumkol;
long int mat[10][10];
public:
matrik();
void inputmatrik();
void tampilmatrik();
matrik operator + (matrik);
};
// nilai awal obyek matrik
matrik::matrik()
{ jumbar=0;
jumkol=0;
int i,j;
for(i=0;i<10;i++)
for(j=0;j<10;j++)
mat[i][j]=0;
}
// input anggota matrik+jumlah ordo
void matrik::inputmatrik()
{ int i,j;
do { cout<<" Input jumlah baris :";
cin>>jumbar;
} while(jumbar>10);
do { cout<<" Input jumlah kolom :";
cin>>jumkol;
} while(jumkol>10);
// input data
for (i=0;i<jumbar;i++)
for (j=0;j<jumkol;j++)
{ cout<<"Matrik ["<<i+1<<","<<j+1<<"] : ";
cin>>mat[i][j];
}
}
//menampilkan matrik :
void matrik::tampilmatrik()
{ int i,j;
cout<<setiosflags(ios::right);
for (i=0;i<jumbar;i++)
{ for (j=0;j<jumkol;j++)
cout<<setw(8)<<mat[i][j];
cout<<endl;
}
}
// operasi penjumlahan dua matrik
matrik matrik::operator + (matrik m2)
{ int i,j;
matrik hasil;
YHPI -> hal : 64
//cek jumlah ordo matrik1 dan matrik2
if ((jumbar != m2.jumbar) || (jumkol != m2.jumkol))
{ cout<<"\noperasi penjumlahan "<<endl;
cout<<"jumlah ordo matrik 1 dan matrik 2 tidak sama \n";
getche();
exit(1);
}
//proses penjumlahan
hasil.jumbar=jumbar;
hasil.jumkol=jumkol;
for (i=0;i<jumbar;i++)
for (j=0;j<jumkol;j++)
hasil.mat[i][j]=mat[i][j]+m2.mat[i][j];
return(hasil);
}
//program utama
void main()
{ clrscr();
matrik matA;
cout<<"Matrik A :"<<endl;
matA.inputmatrik();
matrik matB;
cout<<"\n Matrik B :"<<endl;
matB.inputmatrik();
matrik matJumlah;
matJumlah=matA + matB;
cout<<"\n \nHasil penjumlahan matrik A dan matrik B :"<<endl;
matJumlah.tampilmatrik();
getche();
}
X.4. SOAL (UJI KEMAMPUAN)
Kerjakan setiap permasalahan dengan membuat flowchart dan listing program,
masing-masing simpan dengan nama SOAL10_1
1. Buat program menentukan perkalian 2 buah matrik dengan menggunakan bentuk obyek +
overloading operator seperti contoh latih10_1.cpp, desain dalam bentuk VCL.
YHPI -> hal : 65
BAB XI
SISTEM FILE
XI.1. TUJUAN
Penyimpanan data secara permanen sangat dibutuhkan, untuk keperluan ini kita harus
memmahami konsep filing dalam secundary strorage. Tujuan dari BAB kesebelas ini adalah,
1. Mahasiswa mampu membedakan antara penyimpanan data secara permanen dengan
penyimpanan data sementara.
2. Mahasiswa mampu membedakan antara tipe data teks, biner dan tak berbentuk
3. Mahasiswa mampu mengimplementasikan sistem file untuk menyimpan data kedalam
media penyimpanan permanen ke dalam sebuah program
XI.2. TEORI DASAR
Sistem File
Data yang disimpan dalam variabel siaftnya hanya sementara, artinya data itu masih tersimpan
saat program dalam keadaaan running, tetapi jika program dalam keadaan off atau computer
mati maka data tersebut akan hilang. Untuk kebutuhan tertentu diperlukan penyimpanan data
secara permanen yang diletakkan ke dalam file. Terdapat tiga operasi dasar system file data
yaitu:
a. Mengaktifkan file atau menciptakan file
b. Memproses file (Membaca atau menulis data ke dalam file)
c. Menutup file
Dalam Bahasa C++ file header untuk perintah-perintah yang berkaitan dengan operasi file
adalah fstream.h. Modus dalam operasi file adalah fstream diikuti dengan:
a. ios::in untuk mengaktifkan file operasi baca data dari disk,
b. ios ::out untuk mengaktifkan file operasi tulis data ke disk sifatnya buat data baru,
c. ios::app untuk mengaktifkan file operasi tulis data ke disk sifatnya menambah data,
d. ios::beg untuk menentukan posisi awal file,
e. ios::end untuk menentukan posisi akhir file.
f. Ios::binary untuk operasi file dengan data bertipe biner.
g. Ios::cur untuk operasi file menunjukkan letak posisi data sekarang pada suatu file
Contoh penggunaan: fstream fbiodata(c:\\biodata.txt,ios::out)
Selain cara diatas terdapat bentuk lain yang disediakan oleh C++, yaitu
a. ofstream untuk mengaktifkan file operasi tulis data ke disk sifatnya buat data baru,
b. ifstream untuk mengaktifkan file operasi baca data dari disk,
untuk bahasa C standart ada statemen sendiri, sehingga bahasa C dikatakan kaya akan
environment.
YHPI -> hal : 66
Fungsi-fungsi yang berkaitan dengan operasi file:
No. Fungsi Keterangan
1 close() Menutup file
2 good() Memeriksa keberhasilan operasi file, bernilai true jika
operasi file berhasil.
3 eof() Memeriksa akhir file, nilai true jika akhir file ditemui
4 fail() Memeriksa kesalahan (gagal perangkat keras, gagal
baca/tulis, file tidak ditemukan), akan bernilai true jika
terdapat kesalahan.
5 bad() Memeriksa operasi yang tidak absah (hampir sama dengan
fail), akan bernilai true jika di jumpai ketidak absahan.
XI.3. LATIHAN PROGRAM :
Gunakan editor Console pada C++ Builder, dengan cara seperti yang sudah di jelaskan
terdahulu, kemudian ketikkan coding pada latihan berikut, mohon diperhatikan hasil dan
struktur logikanya, check hasilnya secara manual!
XI.3.1. Membuat file data teks baru dan secara otomatis menyimpan data yang dituliskan
ke disk lewat perintah objek ofstream
*listing program
//latih11_1.cpp
//men create file data text
#include <fstream.h>
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
void main()
{ ofstream buatfile("coba.txt");
clrscr();
buatfile<<" ini percobaan menuliskan data"<<endl;
buatfile<<" 1. belajar c++"<<endl;
buatfile<<" 2. belajar menulis data ke file"<<endl;
buatfile.close();
}
XI.3.2. Membuat file data teks baru dan menyimpan data kedalam disk dari input data
(cin, gets, scanf, atau yang lain)
*listing program
YHPI -> hal : 67
//latih11_2.cpp
#include <fstream.h>
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
void main()
{ ofstream buatfile;
buatfile.open("data1.txt");
int i,jd;
char nim[13],nama[25],alm[30],jkel[15];
cout<<"jumlah data :";
scanf("%d",&jd);
cout<<endl<<endl;
cout<<"masukan bio data kelas 1D! : "<<endl;
for (i=1;i<=jd;i++)
{
cout<<i<<". Nomor induk : "; cin.getline(nim,sizeof(nim));
cout<<" Nama : "; cin.getline(nama,sizeof(nama));
cout<<" Alamat : "; cin.getline(alm,sizeof(alm));
cout<<" Jenis kelamin: "; cin.getline(jkel,sizeof(jkel));
buatfile<<nim<<nama<<alm<<jkel<<endl;
}
buatfile.close();
}
XI.3.3. Membaca file data teks dengan objeck ifstream-, membaca file data hasil
eksekusi dari latih11_2.cpp
*listing program
//latih11_3.cpp
#include <fstream.h>
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
void main()
{ clrscr();
ifstream bacafile;
bacafile.open("data1.txt");
int i,jd;
char nim[13],nama[25],alm[30],jkel[15];
cout<<endl<<endl;
cout<<"hasil pembacaan file data1.txt adalah: "<<endl;
i=1;
while (bacafile)
{
bacafile.getline(nim,sizeof(nim));
bacafile.getline(nama,sizeof(nama));
bacafile.getline(alm,sizeof(alm));
YHPI -> hal : 68
bacafile.getline(jkel,sizeof(jkel));
cout<<i<<". Nomor induk : " <<nim<<endl;
cout<<" Nama : " <<nama<<endl;
cout<<" Alamat : " <<alm<<endl;
cout<<" Jenis kelamin: " <<jkel<<endl;
i=i+1;
}
getche();
bacafile.close();
}
XI.4. SOAL (UJI KEMAMPUAN)
Kerjakan setiap permasalahan dengan membuat flowchart dan listing program,
masing-masing simpan dengan nama SOAL11_1, SOAL11_2
1. Gunakan operasi file (tulis data ke disk) untuk permasalahan pelanggan baru pengguna
jasa telephon kabel (PT. TELKOM) dengan data sebagai berikut:
Nama, alamat, pekerjaan, alamat kantor,
Kemudian memberikan data no.telephon yang masih tersedia pada area tersebut,
kemudian includkan ke data di atas.
2. Gunakan operasi file (baca data dari disk) untuk mengedit data no. 1 dengan proses
pencarian berdasarkan no. Telephon
YHPI -> hal : 69
BAB XII
(SISTEM FILE LANJUTAN)
XII.1. TUJUAN
Penyimpanan data secara permanen dibutuhkan kestabilan dan kompatibilitas yang memadai,
untuk itu dibutuhkan kemampuan yang cukup. Tujuan dari BAB kedua belas ini adalah,
1. Mahasiswa mampu mengimplementasikan sistem file yang kompatibel dan stabil untuk
kebutuhan penyimpanan data.
2. Mahasiswa mampu merancang sebuah program yang berisi input data, penyimpanan
data, pencarian data, dan mendesain sebuah laporan.
XII.2. TEORI
Sistem File yang dimiliki oleh C++ dan C Builder berbeda, pada C++ sistem file masih
ditangani oleh program C++ sendiri, dan belum mengenal database, sedangkan C builder
sistem file data, ditangani oleh aplikasi database lain atau database sederhana yang dimiliki
oleh C Builder sendiri. Pada matakuliah ini belum dibahas materi database, materi database
akan di bahas pada matakuliah Pemrograman Visual.
XII.3. LATIHAN PROGRAM :
XII.3.1. Mengimplementasikan rekam file data, baca file data, tambah file data, laporan,
dalam bentuk menu, => perhatikan bahwa contoh ini adalah sistem yang sangat
lemah dan kurang kompatibel, (contohnya adalah semua input tidak boleh ada
space, jika dilanggar maka sistem kacau)
*listing program
//latih12_1.cpp
#include <stdio.h>
#include <math.h>
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
float dk, ek,Ryy0;
FILE *kel, *msk, *msknl, *fopen();
int Io;
char nim[13],pil;
YHPI -> hal : 70
void biodata()
{ char pilih;
char nama[30],nim[13],jur[15];
if (msk==fopen("biodata.txt","r")==NULL)
msk=fopen("biodata.txt","a+");
else
msk=fopen("biodata.txt","w");
do
{ clrscr();
cout<<" Nomer Induk Mahasiswa : ";scanf("%13s",&nim);
cout<<" Nama Mahasiswa : ";scanf("%30s",&nama);
cout<<" Jurusan : ";scanf("%15s",&jur);
cout<<"==================================="<<endl;
cout<<"A. Rekam data B. Keluar"<<endl;
cout<<"pilihan :";pilih=getch();
switch (pilih)
{ case 'a' :
case 'A' : {
fprintf(msk,"%13s %30s %15s \n",nim,nama,jur);
}
}
} while (pilih=='a' || pilih=='A');
fprintf(msk,"%13s %30s %15s \n",nim,nama,jur);
fclose(msk);
}
void nilai()
{ int pilih,na,i;
char nama[30],nim[13],jur[15];
char namanl[30],nimnl[13],jurnl[15],mtkliah[20],skor[1];
if (msk==fopen("biodata.txt","r")==NULL)
msk=fopen("biodata.txt","r");
else
cout<<"file biodata tidak ditemukan";
if (msknl==fopen("nilai.txt","r")==NULL)
msknl=fopen("nilai.txt","a+");
else
msknl=fopen("nilai.txt","w");
do
{ clrscr();
cout<<" Nomer Induk Mahasiswa : ";scanf("%13s",&nimnl);
cout<<" Nama Mahasiswa : ";scanf("%30s",&namanl);
cout<<" Jurusan : ";scanf("%15s",&jurnl);
cout<<" Matakuliah : ";scanf("%20s",&mtkliah);
cout<<" Nilai Huruf : ";scanf("%1s",&skor);
YHPI -> hal : 71
cout<<"==================================="<<endl;
cout<<"A. Rekam data dan lanjut B. Simpan dan Keluar"<<endl;
cout<<"pilihan :";pilih=getch();
switch (pilih)
{ case 'a' :
case 'A' : {
fprintf(msknl,"%13s %30s %15s %20s %1s
\n",nimnl,namanl,jurnl,mtkliah,skor);
}
}
} while (pilih=='a' || pilih=='A');
fprintf(msknl,"%13s %30s %15s %20s %1s
\n",nimnl,namanl,jurnl,mtkliah,skor);
fclose(msknl);
}
void laporan()
{ char namanl[30],nimnl[13],jurnl[15],mtkliah[20],skor[1],**skorp;
int n,banding,skora,i,na,skA,skB,skC,skD;
if (msknl==fopen("nilai.txt","r")==NULL)
msknl=fopen("nilai.txt","r");
else
{ cout <<"File nilai Tak Dapat dibuka";
exit(1);
}
n=1;
i=1;
clrscr();
while (fscanf(msknl,"%13s %30s %15s %20s
%1s",&nimnl,&namanl,&jurnl,&mtkliah,&skor)!=EOF)
{ banding=strcmp(nim,nimnl);
if (banding==0 && n==1)
{ cout<<"Nomer induk : "<<nimnl<<endl;
cout<<"Nama Mahasiswa : "<<namanl<<endl;
cout<<"Jurusan : "<<jurnl<<endl;
cout<<"======================================================"<<endl;
cout<<"nomer Matakuliah Nilai Huruf Nilai Angka
"<<endl;
cout<<"======================================================"<<endl;
n=n+1;
}
if (banding==0 && n>=1)
{
cout<<setw(3)<<i<<setw(20)<<mtkliah<<setw(12)<<skor;
if (strcmp(skor,"a")==0|| strcmp(skor,"A")==0) na=4;
else
YHPI -> hal : 72
if (strcmp(skor,"b")==0 || strcmp(skor,"B")==0) na=3;
else
if (strcmp(skor,"c")==0 || strcmp(skor,"C")==0) na=2;
else
if (strcmp(skor,"d")==0 || strcmp(skor,"D")==0) na=1;
else
na=0;
cout<<setw(13)<<na<<endl;
i=i+1;
}
}
fclose(msknl);
}
void main()
{
clrscr();
do
{ clrscr();
cout<<" MENU PILIHAN"<<endl;
cout<<"======================"<<endl;
cout<<"A. ISI BIODATA MAHASISWA"<<endl;
cout<<"B. ISI DATA NILAI"<<endl;
cout<<"C. REPORT NILAI (KHS)"<<endl;
cout<<"D. KELUAR"<<endl;
cout<<"======================"<<endl;
cout<<"\n Pilihan Anda :";
pil=getch();
switch (pil)
{ case 'a':
case 'A' :{
biodata();
break;
}
case 'b' :
case 'B' : { nilai();
break;}
case 'c' :
case 'C' : { clrscr();
cout<<"Nomer induk : ";
scanf("%13s",&nim);
laporan();
getche();
break;
}
}
} while (pil=='a' || pil=='A' || pil=='b' || pil=='B' || pil=='c' ||
pil=='C');
YHPI -> hal : 73
}
XII.4. Soal (UJI KEMAMPUAN)
Kerjakan setiap permasalahan dengan membuat flowchart dan listing program, masing-
masing simpan dengan nama SOAL12_1, SOAL12_2. Perbaikilah sistem diatas sehingga
menjadi stabil, langkah yang diambil:
1. pola tetap dengan menggunakan kombinasi perintah yang tepat
2. ubah pola ke dalam structur atau kelas
YHPI -> hal : 74
BAB XIII
(PERTEMUAN KETIGA BELAS)
s.d.
BAB XV
(PERTEMUAN KELIMA BELAS)
Presentasi
Implementasikan Materi bab I s.d. XII kemudian desailah sebuah project,
dimana masing-masing mahasiswa wajib membuat project, kemudian
dikumpulkan dan di presentasikan!
YHPI -> hal : 75
BAB XVI
GRAFIK
XVI.1. TUJUAN
C Builder mempunyai dua penekanan dalam menyediakan fasilitas grafik, yaitu model primitv
atau lebih dikenal gravik sistem vektor dan modern atau lebih dikenal sistem image. Tujuan
dari BAB keenam belas ini adalah,
1. Mahasiswa mampu mengenal cara membuat grafik dengan model primitiv.
2. Mahasiswa mampu mengimplementasikan rekayasa grafik klasik ke dalam sebuah
desain program desain VCL
XVI.2. TEORI DASAR
XVI.2.1 Review Grafik
Grafik model primitiv dikembangkan sudah cukup lama yaitu sekitar tahun 1960, bentuk
ini di awali dari pengembangan tampilan titik, tampilan garis dan tampilan karakter. Dalam
teknologi konverter tampilan ini merupakan proses konversi tegangan analog ke tegangan
digital, dan sebaliknya. Jika dijelaskan mulai dari tampilan titik atau garis maka proses ini dapat
dijelaskan bahwa pengolah tampilan akan mengubah data digital menjadi data analog yang
digunakan untuk memancarkan elektron yang bisa mengenal tabung monitor berlapis phospor,
yang akan menyebabkan phospor berpendar dan terlihat pada screen monitor. Untuk
mengatasi kedip atau fliker maka elektron tersebut harus ditembakkan minimal 30 kali dalam
satu detik, peristiwa ini dikenal dengan electron refreshing.
Tampilan berdasarkan teknologi TV dan disebut raster display. Dikembangkan tahun
sekitar 1970. Tampilan dalam bentuk garis, karakter dan bentuk-bentuk lain selalu digambar
berdasar komponen terkecilnya yaitu titik, dan biasa disebut sebagai pixel atau pel(picture
element). Sebuah titik pada layar tampilan bisa dihidup matikan dengan mudah dalam
pengingat digital karena 0 untuk titik mati dan 1 untuk titik yang menyala. Didalam pengingat
digital, citra grafis yang akan ditampilkan disimpan sebagai pola-bit dengan mengubah pola bit
(piksel) yang ada dalam pengingat digital, bisa dibentuk gambar sesuai dengan keinginan.
Untuk gambar hitam-putih, warna hitam disajikan menggunakan bit 1, dan warna putih
menggunakan bit 0. Untuk gambar berwarna pengaturan yaitu lebih rumit. Yang dimaksud
dengan raster atau resolusi layar (screen resolution) adalah matrix piksel yang menutup
seluruh permukaan layar tampilan. Semakin besar ukuran matrix pikxel yang dibentuk pada
suatu layar tampilan, semakin bagus dan halus pula gambar yang bisa dihasilkan oleh layar
tersebut.
YHPI -> hal : 76
XV.2.2 Komponen Pembentuk Grafik
- Titik (Pixel)
Titik merupakan satuan gambar/grafis yang terkecil. Dengan menggambar titik maka kita
dapat menggambar obyek apapun. Termasuk bentuk geometri dibawah merupakan bentuk
bentuk yang pada dasarnya berasal dari titik-titik. Operasi titik ini sering digunakan pada
pengolahan citra (Image processing). Setiap titik pada monitor memiliki parameter
koordinat dan warna. Koding titik adalah:
Canvas->Pixel[x][y]=warna
Dengan x : koordinat horizontal
y : koordinat vertikal
warna : warna default dari C, atau menggunakan RGB()
- Garis (Line)
Garis adalah kumpulan titik-titik/pixel yang tersusun secara lurus dan linier dari titik awal
sampai titik akhir.
Kodingnya adalah :
Canvas->MoveTo(x0,y0)-> meletakkan atau memindahkan pointer
Canvas->LineTo(x1,y1) -> menggambar garis dimulai dari moveTo
..
Canvas->LineTo(xn,yn)
Garis ini dimulai dari titik koordinat (x0,y0) kemudian ke (x1,y1), dilanjutkan ke (x2,y2) dan
selanjutnya ke (xn,yn).
- Kotak (Box)
Kotak merupakan bentuk tertutup dari kumpulan empat buah garis yang saling sejajar
pada panjang dan saling sejajar pada lebar, dan mempunyai dua titik acuan, yaitu titik
pojok kiri atas dan titik pojok kanan bawah.
Koding kotak adalah :
Canvas->Rectangle(x1,y1,x2,y2)
Dengan : X1,Y1 : titik pojok kiri atas
YHPI -> hal : 77
X2,Y2 : titik pojok kanan bawah
- Lingkaran atau Elips (Circle / Ellipse)
Lingkaran adalah sekumpulan titik yang membentuk putaran dengan diameter horizontal
sama panjang dengan diameter vertikal, sedangkan elips mempunyai panjang diameter
horizontal berbeda dengan diameter vertikal.
Kodingnya adalah
Canvas->Ellipse(x1,y1,x2,y2)
- Busur (Arc)
Busur adalah curva dalam bentuk garis lengkung.
Kodingnya adalah:
Canvas->Arc(x1,y1,x2,y2,x3,y3,x3,x4,y4)
- Tembereng (Chord)
Tembereng adalah bentuk curva lengkung dengan garis penghubung pada ujung curva
tersebut.
Kodingnya adalah :
Canvas->Chord(x1,y1,x2,y2,x3,y3,x3,x4,y4);
YHPI -> hal : 78
- Juring (Pie)
Juring adalah bentuk curva lengkung dengan garis pada masing-masing ujung curva
terhadap pusat lengkung tersebut.
- Garis Segi Banyak (Polygon)
Kodingnya secara umum adalah :
//==========================
POINT variable[n]; //deklarasi variabel
variable[0]=Point(x,y);
variable [1]=Point(x,y);
.
variable [n]=Point(x,y);
Canvas->Polygon((TPoint*) variable ,n);
//==========================
YHPI -> hal : 79
- Polyline
Bentuk polyline hampir sama dengan plygon, hanya polyline tidak harus dalam bentuk
curva tertutup.
XVI.3. LATIHAN PROGRAM :
XVI.3.1. Latihan Pengenalan Pola Grafik Primitiv.
Langkah-langkahnya adalah :
- Buat aplikasi baru
- Tempatkan komponen kanvas pada form dan komponen lainnya yang diperlukan
tampak seperti gambar 16.1 berikut :
Gambar 16.1
YHPI -> hal : 80
- Ubah caption masing-masing komponen sesaui dengan gambar 16.1
- Double klick komponen button kemudain isikan masing-masing coding VCL pada
masing-masing komponen yang sesuai, coding adalah berikut:
//============================================
void __fastcall TForm1::Button2Click(TObject *Sender)
{
PaintBox1->Canvas->Brush->Style= bsSolid;
PaintBox1->Canvas->Brush->Color = clWhite;
PaintBox1->Canvas->FillRect(Rect(0,0,ClientWidth, ClientHeight));
Canvas->Pen->Width = 1;
Canvas->Pen->Mode = pmCopy;
Canvas->Pen->Style = psSolid;
Canvas->Pen->Color = clBlack;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// penggunaan moveTo dan LineTo
// Hasilnya adalah koordinat kartesian X dan Y
PaintBox1->Canvas->MoveTo(5,320);
PaintBox1->Canvas->LineTo(550,320);
PaintBox1->Canvas->MoveTo(20,10);
PaintBox1->Canvas->LineTo(20,340);
// Penggunaan rectangle
PaintBox1->Canvas->Rectangle(30,250,150,310);
// Rectangle dengan pengisiannya, dengan pola solid warna merah
PaintBox1->Canvas->Brush->Style=bsSolid;
PaintBox1->Canvas->Brush->Color=clRed;
PaintBox1->Canvas->Rectangle(30,180,150,240);
// Ellipse dengan pengisiannya, dengan pola cross warna biru
PaintBox1->Canvas->Brush->Style=bsCross;
PaintBox1->Canvas->Brush->Color=clBlue;
PaintBox1->Canvas->Ellipse(30,110,150,170);
YHPI -> hal : 81
// Polygon dengan pengaturan Pen, dengan pola sama seperti sebelumnya
PaintBox1->Canvas->Pen->Style=psDashDot;
PaintBox1->Canvas->Pen->Width=2;
POINT poli[5]; //deklarasi variabel poli sebagai polygon
poli[0]=Point(170,310);
poli[1]=Point(210,310);
poli[2]=Point(250,270);
poli[3]=Point(250,200);
poli[4]=Point(210,160);
poli[5]=Point(170,160);
PaintBox1->Canvas->Polygon((TPoint*) poli ,5);
// Polyline dengan pengaturan Pen,
PaintBox1->Canvas->Pen->Style=psDash;
PaintBox1->Canvas->Pen->Width=3;
POINT pline[4];
pline[0]=Point(270,310);
pline[1]=Point(340,310);
pline[2]=Point(300,250);
pline[3]=Point(270,160);
pline[4]=Point(270,300);
PaintBox1->Canvas->Polyline((TPoint*) pline,4);
}
//---------------------------------------------------------------------------
//============================================
- Jalankan program, amati hasilnya
- Simpanlah project ini dengan nama Latihan16_1.cpp dan Platihan16_1.bpr
XVI.3.2. Latihan Penggunaan pixel,
Pixel atau titik sebenarnya merupakan komponen dasar pembentuk segala macam
bentuk grafik. Sebagi latihan di bawah ini adalah latihan membuat gambar bentuk sinus
dan cosinus yang dibentuk oleh pixel
Langkah-langkahnya adalah :
- Buat aplikasi baru
- Tempatkan komponen kanvas pada form dan komponen lainnya yang diperlukan
tampak seperti gambar 15.2 berikut :
YHPI -> hal : 82
Gambar 16.2
- Ubah caption masing-masing komponen sesaui dengan gambar 16.2
- Double klick komponen button kemudain isikan masing-masing coding VCL pada
masing-masing komponen yang sesuai, coding adalah berikut:
//============================================
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int xm,ym;
xm=PaintBox1->Width;
ym=PaintBox1->Height;
PaintBox1->Canvas->Pen->Color=RGB(100,0,255);
PaintBox1->Canvas->Pen->Width=2;
PaintBox1->Canvas->MoveTo(10,ym/2);
PaintBox1->Canvas->LineTo(xm-50,ym/2);
PaintBox1->Canvas->MoveTo(100,10);
PaintBox1->Canvas->LineTo(100,ym-10);
float Y,A,f,teta,pi,ypos,xpos;
int y0,x0,t;
A = 140; f=1/(3.14*2); teta=0; pi=3.14;
y0=ym/2;x0=100;
for(t=0;t<=360;t++)
{ Y=A * sin((2*pi*f*t+teta)*pi/180);
YHPI -> hal : 83
ypos=y0-Y;
xpos=x0+t;
PaintBox1->Canvas->Pixels[int(xpos)][int(ypos)]=RGB(0,0,255);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int xm,ym;
xm=PaintBox1->Width;
ym=PaintBox1->Height;
PaintBox1->Canvas->Pen->Color=RGB(100,0,255);
PaintBox1->Canvas->Pen->Width=2;
PaintBox1->Canvas->MoveTo(10,ym/2);
PaintBox1->Canvas->LineTo(xm-50,ym/2);
PaintBox1->Canvas->MoveTo(100,10);
PaintBox1->Canvas->LineTo(100,ym-10);
float Y,A,f,teta,pi,ypos,xpos;
int y0,x0,t;
A = 140; f=1/(3.14*2); teta=0; pi=3.14;
y0=ym/2;x0=100;
for(t=0;t<=360;t++)
{ Y=A * cos((2*pi*f*t+teta)*pi/180);
ypos=y0-Y;
xpos=x0+t;
PaintBox1->Canvas->Pixels[int(xpos)][int(ypos)]=RGB(0,100,100);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
- Jalankan program, amati hasilnya
- Simpanlah project ini dengan nama Latihan16_2.cpp dan Platihan16_2.bpr
YHPI -> hal : 84
XVI.4. Soal (UJI KEMAMPUAN)
Kerjakan setiap permasalahan dengan membuat flowchart dan listing program, masing-
masing simpan dengan nama SOAL16_1.cpp/bpr, dan SOAL16_2.cpp/bpr:
1. Ubahlah latihan16_2, dengan membuat parameter input (amplitudo, frekuensi, dan sudut
awal)
2. Buatlah desain grafik bentuk gelombang kotak dan gelombang segitiga.
YHPI -> hal : 85
BAB XVII
OPERASI GEOMETRI SEDERHANA PADA GRAFIK
XVII.1. TUJUAN
Operasi geometri merupakan dasar operasi yang sangat penting dalam memanipulasi grafik.
topik yang dibahas dalam bab ini diantaranya adalah rotasi, translasi, dan penskalaan. Tujuan
dari BAB ketujuh belas ini adalah,
1. Mahasiswa mampu mengenal operasi geometri dasar.
2. Mahasiswa mampu mengimplementasikan logika operasi geometri pada
pemanipulasian grafik.
XVII.2. TEORI DASAR
XVII.2.1 Operasi Geometri
Operasi geometri merubah hubungan spasial antara objek dalam sebuah grafik
termasuk citra. Operasi ini bekerja dengan menggerakkan sekitar object-object dan mengubah
ukuran dan bentuk dari objek. Operasi geometri membantu mengatur kembali sebuah grafik
atau citra sehingga kita dapat melihat apa yang kita inginkan sedikit lebih jelas. Ada tiga
operasi dasar geometri yaitu pergeseran, penskalaan, dan pemutaran objek, dan yang
keempat merupakan manipulasi dari ke tiga dasar operasi yaitu cross product yaitu
menunjukkan bagimana mendistorsi sebuah objek menggunakan pengaturan orde tinggi.
XVII.2.2 Pergeseran atau Translasi
Pergeseran atau translasi adalah menggerakkan atau menggeser objek kearah vertikal
atau kearah horizontal, gambar 12.1 di bawah menunjukkan proses translasi ke arah (a)
horizontal, (b) vertikal, (c) diagonal.
(a)Translasi horizontal (b) Translasi vertikal
YHPI -> hal : 86
(c) Translasi diagonal
Gambar 12.1
Persamaan translasi yang sering digunakan adalah:
Dengan tx : vektor translasi X, dan ty : vektor translasi Y
XVII.2.3 Penskalaan atau Stretching
Penskalaan atau stretching adalah proses memperbesar atau memperkecil sebuah
objek ke dalam arah vertikal atau arah horizontal. Persamaan yang digunakan untuk
penskalaan adalah sebagai berikut:
X = X * S
x
Y = Y * S
y
dengan S
x
= skala koordinat X, dan S
y
: skala koordinat Y
Adapun gambar 12.2 adalah contoh bentuk penskalaan,
Gambar 12.2
YHPI -> hal : 87
XVII.2.4 Perputaran atau Rotasi
Perputaran adalah proses memutar sebuah objek ke arah sudut dengan pusat
perputaran yang ditentukan. Yang harus diperhatikan adalah dalam memutar sebuah obyek
pusat perputaran tidak harus berada pada koordinat (0,0), sering dilakukan bawa pusat
perputaran berada pada koordinat tertentu (x,y). Sehingga dalam bab ini diberikan formula
untuk perputaran pada koordinat (0,0) sebagai berikut:
X = X Cos(u) YSin(u)
Y = X sin(u) + YCos(u)
dan pusat perputaran pada koordinat (x
c
,y
c
), sebagai berikut :
X = X
c
+ (X- X
c
)Cos(u) (Y Y
c
)Sin(u)
Y = Y
c
+ (X - X
c
) sin(u) +(Y Y
c
) Cos(u)
Dan berikut gambar 12.2 adalah contoh untuk rotasi objek dengan sudut putar -90
o
.
Gambar 12.3
XVII.3. LATIHAN PROGRAM :
XVII.3.1. Latihan operasi geometri translasi / pergeseran
- Buat aplikasi baru
- Tempatkan komponen kanvas pada form dan komponen lainnya yang diperlukan
tampak seperti gambar 17.1 berikut :
YHPI -> hal : 88
Gambar 17.1
- Ubah caption masing-masing komponen sesaui dengan gambar 17.2
- Aktifkan header unit1.h dengan menekan CTRL + F6 secara bersamaan, kemudian
tambahkan deklarasi fungsi buatan pada bagian __published:, seperti berikut:
__published: // IDE-managed Components
TPaintBox *PaintBox1;
TButton *Button1;
TButton *Button2;
TButton *Button3;
TButton *Button4;
TButton *Button5;
void __fastcall Hapus(); //ini yang ditambahkan
void __fastcall Kotak(); //ini yang ditambahkan
- Double klick komponen button kemudain isikan masing-masing coding VCL pada
masing-masing komponen yang sesuai, coding adalah berikut:
//============================================
// posisi zero point perhitungan
int x0,y0 ;
//variabel posisi awal kotak dalam layar
int x1=30,y1=230,x2=150,y2=310;
//variabel posisi awal hasil perhitungan (xp--yp)
int xp1,xp2,yp1,yp2;
//variabel posisi hasil translasi dalam perhitungan
YHPI -> hal : 89
int xh1,xh2,yh1,yh2;
//variabel posisi hasil translasi dalam layar
int xl1,xl2,yl1,yl2;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ Hapus();
Kotak();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//posisi zero point perhitungan
x0=20;y0=320;
//posisi dalam perhitungan (xp--yp)
xp1=x1-x0; xp2=x2-x0;
yp1=y0-y1; yp2=y0-y2;
//posisi (xh--yh) setelah mengalami pergeseran dalam perhitungan dengan tx=15,ty=0
int tx=300,ty=0;
xh1=xp1+tx; xh2=xp2+tx;
yh1=yp1+ty; yh2=yp2+ty;
//posisi hasil pergeseran pada layar
xl1=x0+xh1; xl2=x0+xh2;
yl1=y0-yh1; yl2=y0-yh2;
// kotak hasil pergeseran;
Hapus();
PaintBox1->Canvas->Rectangle(xl1,yl1,xl2,yl2);
}
//---------------------------------------------------------------------------
YHPI -> hal : 90
void __fastcall TForm1::Button4Click(TObject *Sender)
{ Hapus();
PaintBox1->Canvas->MoveTo(5,320);
PaintBox1->Canvas->LineTo(550,320);
PaintBox1->Canvas->MoveTo(20,10);
PaintBox1->Canvas->LineTo(20,340);
PaintBox1->Canvas->Rectangle(x1,y1,x2,y2);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
//posisi zero point perhitungan
x0=20;y0=320;
//posisi dalam perhitungan (xp--yp)
xp1=x1-x0; xp2=x2-x0;
yp1=y0-y1; yp2=y0-y2;
//posisi (xh--yh) setelah mengalami pergeseran dalam perhitungan dengan tx=0,ty=100
int tx=0,ty=100;
xh1=xp1+tx; xh2=xp2+tx;
yh1=yp1+ty; yh2=yp2+ty;
//posisi hasil pergeseran pada layar
xl1=x0+xh1; xl2=x0+xh2;
yl1=y0-yh1; yl2=y0-yh2;
// kotak hasil pergeseran;
Hapus();
PaintBox1->Canvas->Rectangle(xl1,yl1,xl2,yl2);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Hapus()
{ PaintBox1->Canvas->Brush->Style= bsSolid;
PaintBox1->Canvas->Brush->Color = clBtnFace;
PaintBox1->Canvas->FillRect(Rect(0,0,ClientWidth, ClientHeight));
Canvas->Pen->Width = 1;
Canvas->Pen->Mode = pmCopy;
Canvas->Pen->Style = psSolid;
PaintBox1->Canvas->Brush->Style=bsSolid;
PaintBox1->Canvas->Brush->Color=clRed;
YHPI -> hal : 91
PaintBox1->Canvas->MoveTo(5,320);
PaintBox1->Canvas->LineTo(550,320);
PaintBox1->Canvas->MoveTo(20,10);
PaintBox1->Canvas->LineTo(20,340);
}
void __fastcall TForm1::Kotak()
{ PaintBox1->Canvas->Rectangle(x1,y1,x2,y2);
}
void __fastcall TForm1::Button5Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
- Jalankan program, amati hasilnya, dalam latihan ini mempergunakan pembuatan fungsi
buatan sendiri.
- Simpanlah project ini dengan nama Latihan16_2.cpp dan Platihan16_2.bpr
XVII.3.2. Latihan operasi geometri Rotasi dan Penskalaan
- Buat aplikasi baru
- Tempatkan komponen kanvas pada form dan komponen lainnya yang diperlukan
tampak seperti gambar 17.1 berikut :
Gambar 17.2
YHPI -> hal : 92
- Ubah caption masing-masing komponen sesaui dengan gambar 17.2
- Aktifkan header unit1.h dengan menekan CTRL + F6 secara bersamaan, kemudian
tambahkan deklarasi fungsi buatan pada bagian __published:, seperti berikut:
__published: // IDE-managed Components
TPaintBox *PaintBox1;
TButton *Button1;
TButton *Button2;
TButton *Button3;
TButton *Button4;
TButton *Button5;
void __fastcall Hapus();
void __fastcall GambarAsli();
void __fastcall Skala();
void __fastcall Rotasi();
- Double klick komponen button kemudain isikan masing-masing coding VCL pada
masing-masing komponen yang sesuai, coding adalah berikut:
//============================================
// koordinat titik potong sumbu:
int xs=100, ys=320;
// posisi zero point perhitungan
int x0,y0,xl0,yl0 ;
//variabel posisi awal kotak dalam layar
int x1=130,y1=200,x2=200,y2=200,
x3=200,y3=310,x4=130, y4=310;
//variabel posisi awal hasil perhitungan (xp--yp)
int xp1,xp2,yp1,yp2,xp3,yp3,xp4,yp4;
//variabel posisi hasil translasi dalam perhitungan
float xh1,xh2,yh1,yh2,xh3,yh3,xh4,yh4;
//variabel posisi hasil translasi dalam layar
int xl1,xl2,yl1,yl2,xl3,yl3,xl4,yl4;
// Faktor Skala
int tx,ty;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Hapus();
YHPI -> hal : 93
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Hapus()
{ PaintBox1->Canvas->Brush->Style= bsSolid;
PaintBox1->Canvas->Brush->Color = clBtnFace;
PaintBox1->Canvas->FillRect(Rect(0,0,ClientWidth, ClientHeight));
Canvas->Pen->Width = 1;
Canvas->Pen->Mode = pmCopy;
Canvas->Pen->Style = psSolid;
PaintBox1->Canvas->Brush->Style=bsSolid;
PaintBox1->Canvas->Brush->Color=clRed;
PaintBox1->Canvas->MoveTo(5,ys);
PaintBox1->Canvas->LineTo(550,ys);
PaintBox1->Canvas->MoveTo(xs,10);
PaintBox1->Canvas->LineTo(xs,340);
}
//==============================
void __fastcall TForm1::GambarAsli()
{ PaintBox1->Canvas->Rectangle(x1,y1,x3,y3);
}
//=====================================
void __fastcall TForm1::Skala()
{ PaintBox1->Canvas->Rectangle(xl1,yl1,xl3,yl3);
}
//=====================================
void __fastcall TForm1::Rotasi()
{// PaintBox1->Canvas->MoveTo(xl1,yl1);
// PaintBox1->Canvas->LineTo(xl2,yl2);
// PaintBox1->Canvas->LineTo(xl3,yl3);
// PaintBox1->Canvas->LineTo(xl4,yl4);
POINT kotak[3]; //deklarasi variabel poli sebagai polygon
kotak[0]=Point(xl1,yl1);
kotak[1]=Point(xl2,yl2);
kotak[2]=Point(xl3,yl3);
kotak[3]=Point(xl4,yl4);
PaintBox1->Canvas->Polygon((TPoint*) kotak ,3);
}
YHPI -> hal : 94
//=====================================
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Hapus();
GambarAsli();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
tx=2;ty=2;
//posisi zero point perhitungan
xl0=xs;
yl0=ys;
//posisi dalam perhitungan (xp--yp)
xp1=x1-xl0; xp3=x3-xl0;
yp1=yl0-y1; yp3=yl0-y3;
//posisi (xh--yh) setelah mengalami pergeseran dalam perhitungan dengan tx=10,ty=5
xh1=xp1*tx; xh3=xp3*tx;
yh1=yp1*ty; yh3=yp3*ty;
//posisi hasil pergeseran pada layar
xl1=xl0+xh1; xl3=xl0+xh3;
yl1=yl0-yh1; yl3=yl0-yh3;
// kotak hasil pergeseran;
Hapus();
Skala();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
tx=1;ty=1;
//posisi zero point perhitungan
xl0=x4;yl0=y4;
x0=(x2-x1)/2;y0=(y3-y1)/2;
//posisi dalam perhitungan (xp--yp)
xp1=x1-xl0; xp2=x2-xl0;
xp3=x3-xl0; xp4=x4-xl0;
yp1=yl0-y1; yp2=yl0-y2;
yp3=yl0-y3; yp4=yl0-y4;
YHPI -> hal : 95
int teta=45;
//posisi (xh--yh) setelah mengalami pergeseran dalam perhitungan dengan tx=10,ty=5
xh1=x0+(xp1-x0)*cos(teta*3.14/180)-(yp1-y0)*sin(teta*3.14/180);
xh2=x0+(xp2-x0)*cos(teta*3.14/180)-(yp2-y0)*sin(teta*3.14/180);
xh3=x0+(xp3-x0)*cos(teta*3.14/180)-(yp3-y0)*sin(teta*3.14/180);
xh4=x0+(xp4-x0)*cos(teta*3.14/180)-(yp4-y0)*sin(teta*3.14/180);
yh1=y0+((xp1-x0)*sin(teta*3.14/180)+(yp1-y0)*cos(teta*3.14/180));
yh2=y0+((xp2-x0)*sin(teta*3.14/180)+(yp2-y0)*cos(teta*3.14/180));
yh3=y0+((xp3-x0)*sin(teta*3.14/180)+(yp3-y0)*cos(teta*3.14/180));
yh4=y0+((xp4-x0)*sin(teta*3.14/180)+(yp4-y0)*cos(teta*3.14/180));
/*
xh1=(xp1)*cos(teta*3.14/180)-(yp1)*sin(teta*3.14/180);
xh2=(xp2)*cos(teta*3.14/180)-(yp2)*sin(teta*3.14/180);
xh3=(xp3)*cos(teta*3.14/180)-(yp3)*sin(teta*3.14/180);
xh4=(xp4)*cos(teta*3.14/180)-(yp4)*sin(teta*3.14/180);
yh1=((xp1)*sin(teta*3.14/180)+(yp1)*cos(teta*3.14/180));
yh2=((xp2)*sin(teta*3.14/180)+(yp2)*cos(teta*3.14/180));
yh3=((xp3)*sin(teta*3.14/180)+(yp3)*cos(teta*3.14/180));
yh4=((xp4)*sin(teta*3.14/180)+(yp4)*cos(teta*3.14/180));
*/
//posisi hasil pergeseran pada layar
xl1=int(xl0+xh1); xl2=int(xl0+xh2);
xl3=int(xl0+xh3); xl4=int(xl0+xh4);
yl1=int(yl0-yh1); yl2=int(yl0-yh2);
yl3=int(yl0-yh3); yl4=int(yl0-yh4);
// kotak hasil pergeseran;
Hapus();
Rotasi();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
XVII.4. Soal (UJI KEMAMPUAN)
Kerjakan setiap permasalahan dengan membuat flowchart dan listing program, masing-
masing simpan dengan nama SOAL17_1.cpp/bpr, dan SOAL17_2.cpp/bpr:
YHPI -> hal : 96
1. Ubahlah latihan17_1, dengan membuat parameter translasi dalam bentuk input
2. Ubahlah latihan17_2, dengan membuat parameter skala, sudut rotasi, pusat rotasi dalam
bentuk input!
YHPI -> hal : 97
BAB
XVIII, XIX
Buat sebuah proyek dengan kriteria program seperti di bawah ini!
1. Memuat fungsi
2. Memuat struct dan class
3. Terdapat pengolahan Grafik
Setiap Mahasiswa wajib mempresentasikan hasil karyanya!
SELAMAT BEKERJA, BELAJAR DAN SEMOGA ALLAH
SELALU MELIMPAHKAN ILMU YANG BERMANFAAT
DUNIA DAN AKHIRAT KEPADA KITA SEMUA
AMIN 99X
YHPI -> hal : 98
DAFTAR PUSTAKA
C++ Builder 5 Developers Guide, Jarrod Hollingworth, Butterfield, SAMS, USA, 2001
C Plus Plus, 2001, Abdul Kadir, PT Elex Media Komputindo, Jakarta.
Open MP C and C++ Aplication Program Interface, OpenMP Architecture Review Board,
WWW.OpenMP.Org

Anda mungkin juga menyukai