SlideShare a Scribd company logo
1 of 145
Download to read offline
Sebelum kita memulai Delphi, kita harus menginstalasi program Delphinya terlebih dahulu. Kita bisa
menggunakan Delphi 5, 6, 7 atau 8. Sebenarnya Delphi versi berapapun tidak masalah, karena produk Borland
ini selalu menjaga kompatibilitas antar versinya. Untuk menginstalasi Delphi cukup mudah, tinggal ikuti
petunjuk yang diberikan pada tampilan di layar. Sesudah Delphi terinstalasi pada komputer, kita bisa memulai
mengenal dahulu apa itu Delphi? Kelompok bahasa pemrograman apa?
Delphi adalah kompiler / penterjemah bahasa Delphi (awalnya dari Pascal) yang merupakan bahasa
tingkat tinggi sekelas dengan Basic, C. Bahasa Pemrograman di Delphi disebut bahasa prosedural artinya
bahasa/sintaknya mengikuti urutan tertentu / prosedur. Ada jenis pemrograman non-prosedural seperti
pemrograman untuk kecerdasan buatan seperti bahasa Prolog. Delphi termasuk Keluarga Visual sekelas Visual
Basic, Visual C, artinya perintah-perintah untuk membuat objek dapat dilakukan secara visual. Pemrogram
tinggal memilih objek apa yang ingin dimasukkan kedalam Form/Window, lalu tingkah laku objek tersebut saat
menerima event/aksi tinggal dibuat programnya. Delphi merupakan bahasa berorentasi objek, artinya nama
objek, properti dan methode/procedure dikemas menjadi satu kemasan (encapsulate). Sebelum mempelajari
ketiga struktur pemrograman ada baiknya kenali dahulu tampilan IDE, yang merupakan editor dan tools untuk
membuat program Delphi. Pada IDE akan ditampilkan Form baru yang merupakan aplikasi/program Window
yang akan dibuat. Aplikasi / program berbasis windows sering disebut dengan jendela (window). Bagaimana
membuat aplikasi berbasis windows (berbasis grafik dan bukan berbasis teks seperti pada DOS)? Caranya
dengan membuat sebuah form. Pada pemrograman berbasis windows, kita akan diperhadapkan pada satu atau
beberapa jendela yang nampak dihadapan kita. Jendela ini dalam Delphi disebut juga dengan form. Pada
pemrograman berbasis windows, kita akan diperhadapkan pada satu atau beberapa jendela yang nampak
dihadapan kita. Jendela ini dalam Delphi disebut juga dengan form. Delphi adalah sebuah perangkat lunak
(bahasa pemrograman) untuk membuat program / aplikasi komputer berbasis windows. Delphi merupakan
bahasa pemograman berbasis objek, artinya semua komponen yang ada merupakan objek-objek. Ciri sebuah
objek adalah memiliki nama, properti dan method/procedure. Delphi disebut juga visual programming artinya
komponen-komponen yang ada tidak hanya berupa teks (yang sebenarnya program kecil) tetapi muncul berupa
gambar-gambar.
1.1.1 Membuat Sebuah Form
Saat anda pertama kali masuk ke Delphi, anda akan diperhadapkan pada sebuah form kosong yang akan
dibuat secara otomatis. Form tersebut diberi nama Form1. Form ini merupakan tempat bekerja untuk membuat
antarmuka pengguna.
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
1
PENDAHULUAN : IDE DAN
STRUKTUR PROGRAM DELPHI
PEMROGRAMAN DELPHI
1.1 PENDAHULUAN
Gambar1. Form kosong yang dibuat saat anda masuk Delphi
1.1.2 Mengganti Nama Form dan Menambahkan Judul
Biasakan sebelum menjalankan program, sebaiknya ganti nama form dan beri judul sesuai program
yang kita buat. Delphi akan secara otomatis memberi nama form1, form2, form3, dst. Nama form tersebut
kurang mengandung arti dan akan menyulitkan bila form yang dibuat cukup banyak.
Saat membuka Delphi pertama kali, nampak sebuah jendela Object Inspector. Jika tidak muncul pilih
menu View | Object Inspector atau tekan tombol F11. Pada Object Inspector ada dua buah halaman (tab) yaitu
Properties dan Events. Properties digunakan untuk mengganti properti (kepemilikan) sebuah objek/komponen.
Sedangkan Events digunakan untuk membuat procedure yang diaktifkan (trigered) lewat sebuah event.
Gambar 2. Jendela Object Inspector untuk mengganti properti caption
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
2
Nama objek
Tab events
Tab properties
Nilai / isi dari
properties
Properties Caption
Nama form
Minimize
Maximize
Close
Tempat
bekerja
` Semua properti diurutkan berdasarkan alpabetik, dan dapat juga diurutkan berdasarkan kategori.
Gantilah judul form dengan Hello melalui properti Caption, sedangkan nama form dengan nama frmHello
melalui properti Name. Caption digunakan untuk menyimpan keterangan yang dimunculkan pada form,
sedangkan Name digunakan sebagai Nama dari objek tersebut.
Anda sekarang sudah membuat aplikasi form kosong dengan tombol standar window : Minimize,
Maximize, dan Close. Anda dapat mengubah ukuran form dengan menarik pada bingkai form menggunakan
mouse (drag = klik tombol kiri mouse, tahan tombol tersebut lalu geser ke kiri/kanan atau atas/bawah). Anda
dapat memindahkan form dengan meletakkan kursor pada form kemudian menggesernya (drag).
1.1.3 Menyimpan Form
Pada Delphi ada 3 buah file utama (*.dpr, *.pas dan *.dfm).
a) *.dpr adalah file proyek yang dibuat berisi program kecil untuk :
 mendefinisikan Unit yang ada dalam file proyek
 menginisialisasi data
 membangun form
 menjalankan aplikasi
b) *.pas adalah unit-unit (pascal code file), bisa terdiri satu atau banyak file
c) *.dfm adalah file definisi Form (special pseudo code file), bisa terdiri satu atau banyak file
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
3
Catatan :
Isi dari properti Name harus diawali alpabet dan tidak menggunakan spasi
atau tanda baca.
uses Forms,
Unit1 in ‘Unit1.pas’ {Form1};
begin
Application.Initialize;
Application.CreateForm(Tform1, Form1);
Application.Run;
end.
object Form1: Tform1
Left = 200
Top = 108
Width = 696
Height = 480
Caption = ‘Form1’
:
Font.Name = ‘MS Sans Serif’
Font.Style = []
PixelsPerInch = 96
TextHeight = 13
object Button1: Tbutton
Left = 176
Top = 116
:
end
Pilih submenu Save Project atau Save Project As pada menu File, dan Delphi akan menanyakan nama
file source code untuk unit (*.pas) dan nama file proyeknya (*.dpr). Beri nama file form dengan HELLO.PAS
dan project HELLO.DPR. Sesudah disimpan, jalankan program dengan menekan tombol F9 atau pilih menu Run
| Run.
1.1.4 Menempatkan Komponen pada Form
Karena Delphi merupakan bahasa pemrograman visual, maka komponen-komponen akan nampak pada
layar. Anda tinggal menempatkan komponen yang diinginkan pada form. Ada empat cara menempatkan
komponen pada form. Misal anda memilih komponen Button pada Components Palette bagian Standard Page.
Anda dapat memilih salah satu langkah berikut:
 Klik pada kompenen tersebut, pindahkan kursor ke form, sambil menekan tombol kiri mouse (drag
komponen dan geser pada form) atau
 Pilih komponen (klik komponen yang diinginkan) pada Components Palette kemudian klik pada form
dimana komponen itu akan diletakkan.
 Klik ganda pada komponen yang diinginkan, maka komponen tersebut akan ditambahkan pada form
 Anda dapat menggunakan Copy dan Paste bila ingin membuat komponen yang sama yang sudah ada
pada form. Caranya Shift-Klik kiri pada komponen yang ada di form, lalu pilih menu Copy (Ctrl-C)
kemudian pilih menu Paste (Ctrl-V).
Gambar 3. Kumpulan komponen
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
4
Catatan:
Setiap Form (.dfm) harus memiliki sebuah Unit (.pas), tetapi anda dapat memiliki
Unit tanpa sebuah Form (hanya kode saja). Jika ingin melihat kode tersebut anda
dapat mengklik kanan mouse, lalu pilih VIEW AS TEXT atau tekan tombol Alt-
F12. Sebaiknya anda tidak mengubah isi code tersebut, karena akan menyebabkan
masalah serius. Tunggu saat anda sudah memahami maksud kode tersebut. Untuk
kembali ke bentuk form, pilih VIEW AS FORM atau tekan tombol Alt- F12
kembali.
Speedbar
Menu utama : File, Edit,
Seaarch, View, dll.
Component palette
bagian Tab Standard
komponen Label
1.1.5 Mengatur Tataletak Komponen
Pada form ini hanya ada satu button, mungkin ada di bagian tengah form. Anda dapat mengatur letak
komponen tersebut dengan menggesernya. Bila anda ingin merapihkan pilih menu View |Alignment Palette,
maka muncul sebuah Toolbox Align dengan ikon perapihan (alignment icons).
Gambar 4. Form dan Toolbox Alignment
Dengan toolbox ini anda dapat merapikan beberapa komponen sekaligus, caranya buat fokus beberapa
komponen, lalu klik icon pada toolbox yang diinginkan. Untuk mengetahui arti icon tersebut gerakan mouse
pada tombol tersebut, lalu akan muncul penjelasan singkat kegunaan icon tersebut atau lihat Help (tekan F1).
Anda bisa mempelajarinya sendiri. Cukup mudah!.
Langkah yang penting adalah mengubah nama dan keterangan kompenen button tersebut. Ikuti bagian ini
1.1.6 Mengubah Nilai Properti
Ubah nilai properti Caption menjadi Katakan Hello dan nilai properti Name menjadi btnHello.
Langkah ini mirip dengan mengubah nama dan keterangan sebuah form.
Properti name adalah properti internal dan digunakan untuk memberi nama pada sebuah
komponen/objek. Nama ini adalah sebuah variabel yang mengacu pada komponen tersebut.
Beberapa aturan penamaan komponen atau variabel atau identifer sebagai berikut
 Diawali alpabet, berikutnya boleh angka, garis bawah.
 Tidak memakai spasi atau tanda-tanda baca atau operator
 Boleh huruf kapital atau kecil, tidak ada perbedaan
 Tidak menggunakan kata kunci (reserve word) yang digunakan Delphi
 Biasakan nama komponen diawali kelompok komponennya, misal btnHello, frmHello, rgrKelas.
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
5
Setiap komponen sebaiknya diberinama yang memiliki arti dan diawali oleh jenis
komponennya. Misal nama dari form Hello adalah “frmHello” atau nama dari
button Hello adalah “btnHello”. Tujuannya adalah mengelompokkan
komponen-komponen sejenis, karena pada Object Inspector nama komponen
diurutkan berdasarkan alpabet.
Berikut contoh penamaan yang keliru menggunakan spasi
Gambar 5. Pesan kesalahan saat mengubah properti Name.
Sesudah anda mengubah properti anda dapat melihat kode programnya (tekan Alt-F12) sebagai berikut :
object Form1: Tform1
:
Caption = ‘Hello’
:
object btnHello: Tbutton
Caption = ‘Katakan Hello’
End
end
1.1.7 Membuat Method/Procedure lewat Event
Saat anda menekan tombol pada sebuah form atau komponen, Windows memberitahukan bahwa
aplikasi mengirim pesan yang dibangkitkan oleh event tertentu . Delphi akan menanggapi dengan menerima
event atau panggilan tersebut. Hal ini yang dinamakan penanganan event (event-handler method). Delphi
mendefinisikan sejumlah event pada setiap komponennya. Daftar event ini berbeda untuk setiap komponen.
Event yang paling umum pada komponen Button adalah OnClick. Artinya jika komponen Button tersebut di
Klik maka akan melakukan procedure apa.
Ada beberapa teknik yang dapat dilakukan untuk menangani event misal OnClick pada komponen
button :
 Klik ganda pada button tersebut, maka sebuah method/procedure btnHelloClick
 Pilih button, kemudian pilih Object Inspector’s combo box (called the Object Selector), pilih Tab
Events, dan klik ganda pada area putih disebelah kanan event OnClick
 Pilih button, pilih Tab Events, dan masukkan nama method yang dikehendaki, misal btnHelloClick
pada area putih di sebelah kanan event OnClick
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
6
Gambar 6. Tab Events pada Object Inspector, dan procedure yang dibangkitkan
lewat event OnClick.
Sekarang anda mengisi procedure tersebut dengan perintah untuk menampilkan pesan sebagai berikut :
Perintah ini sangat sederhana, yaitu untuk menampilkan pesan. Fungsi ini mempunyai empat parameter.
Untuk rincinya anda dapat melihat bantuan (F1).
 Parameter pertama : kalimat yang akan dimunculkan (pesannya)
 Parameter kedua : tipe message box seperti mtWarning, mtError, mtInformation,
atau mtConfirmation. Coba lihat perbedaannya.
 Parameter ketiga : kumpulan tombol yang akan digunakan seperti mbYes, mbNo,
mbOK, mbCancel, atau mbHelp.
 Parameter keempat : untuk help context atau nomor halaman pada Help, beri angka nol
jika anda tidak mempunyai file help.
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
7
Bila anda ingin menghapus procedure atau penanganan event tersebut, anda dapat
menghapus pada editor Unit tersebut. Hapus blok procedure tersebut dan hapus
pada bagian definisi procedure yang ada diatasnya.
procedure Tform1.BtnHelloClick(Sender: Tobject);
begin
MessageDlg (‘Hello, guys’, mtInformation, [mbOK], 0);
end;
Gambar 7. Message box
1.1.8 Kompilasi dan Jalankan Program
Tekan tombol Run atau pilih menu Run | Run, Delphi does the following:
1. Kompilasi Pascal source code file yang mendefinisikan form-form yang ada (.pas,.dfm)
2. Kompilasi project file (.dpr)
3. Buat executable (.EXE) file
4. Jalankan executable file, biasanya pada mode pencarian kesalahan (debug mode).
Perintah-perintah ini akan diproses oleh kompiler secara berurutan. Contoh kita memiliki 3 baris
perintah. Kompiler akan memroses mulai dari baris-1, baris-2 kemudian baris-3.
Contoh program untuk menampilkan pesan sebanyak 3 kali seperti berikut :
Berikut latihan ke-1 untuk tiga buah aplikasi yaitu membuat tombol Hello, saat diklik tombolnya,
tombol akan beraksi dengan memunculkan pesan. Ikuti langkahnya sebagai berikut :
1. Buat form frmHello1 seperti yang sudah dijelaskan.
 Komponen yang dibutuhkan form dengan nama frmHello1 dan button dengan nama btnHello1. Ubah
properti name-nya
 Ubah properti caption masing-masing komponen menjadi Membuat program Hello1 dan Katakan
Hello
 Buat method dari komponen btnHello1 lewat event OnClick, seperti berikut
 Jalankan program lihat hasilnya
 Coba ganti parameter ke-1, ke-2 dan ke-3
 Simpan dengan nama unit uHello1.pas dan project pHello1.dpr pada direktori Latih1
2. Buat aplikasi baru (File-New-Application) dengan form baru frmHello2 mirip form frmHello1 dengan
tambahan sebagai berikut. Apa yang terjadi? (properti caption dari komponen tombol diganti saat program
berjalan)
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
8
MessageDlg (‘Hello, guys’, mtInformation, [mbOK], 0);
MessageDlg (‘Hello, lady’, mtInformation, [mbOK], 0);
MessageDlg (‘Hello, everybody’, mtInformation, [mbOK], 0);
procedure TfrmHello1.btnHello1Click(Sender: Tobject);
begin
MessageDlg (‘Hello, guys’, mtInformation, [mbOK], 0);
end;
1.2 PERINTAH SEQUENCE / DIPROSES SECARA BERUNTUN
 Komponen yang dibutuhkan form dengan nama frmHello2 dan button dengan nama btnHello2. Ubah
properti name-nya
 Buat method untuk mengubah ukuran formHello2 lewat event OnResize, perhatikan apa yang terjadi
bila ukuran form diubah saat program berjalan
 Simpan dengan nama unit uHello2.pas dan project pHello2.dpr pada direktori Latih1
3. Buat aplikasi baru (File-New-Application) dengan form baru frmHello3 seperti yang sudah dijelaskan.
Objek Properties Value of properties Method lewat event
Form1 Name FrmHello3
Button1 Name BtnHello3 (lihat dibawah)
Caption &Show Me
Label1 Name LblHello3
Font Size 24
 Buat method dari komponen btnHello3 lewat event OnClick, seperti berikut
 Jalankan program lihat hasilnya
 Simpan dengan nama unit uHello3.pas dan project pHello3.dpr pada direktori Latih1
2.1. Menu dan Perintah pada Delphi
Ada empat cara untuk memberi perintah pada lingkungan Delphi (Delphi environment):
 Gunakan menu
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
9
procedure TfrmHello2.btnHello2Click (Sender: Tobject);
begin
MessageDlg (‘Hello, guys’, mtInformation, [mbOK], 0);
BtnHello2.Caption := ‘Say Hello Again’;
end;
procedure TfrmHello2.FormResize(Sender: Tobject);
begin
BtnHello2.Top := frmHello2.ClientHeight div 2 –
BtnHello2.Height div 2;
BtnHello2.Left := frmHello2.ClientWidth div 2 –
BtnHello2.Width div 2;
end;
procedure Tform1.btnHello3Click(Sender: Tobject);
begin
if btnHello3.caption =’&Show Me’ then
begin
lblHello3.caption := ‘Selamat Datang di Delphi 5.0’;
btnHello3.caption :=’&Hide Me’;
end else
begin
lblHello3.caption := ‘’;
btnHello3.caption :=’&Show Me’;
end;
end;
 Gunakan Short Cut (misal F9, F12 dsb)
 Gunakan SpeedBar (atau toolbar).
 Gunakan SpeedMenu ( lokal menu yang diaktifkan dengan tombol mouse kanan).
Berikut menu utama yang ada pada Delphi (untuk mempelajarinya gunakan Help Delphi):
Menu File. Menu ini berhubungan dengan file seperti membuat, menyimpan dan mengakhiri sebuah pekerjaan.
Menu Edit .Menu ini berhubungan dengan penyuntingan apa yang dikerjakan seperti Undo , Redo, Cut, Copy,
Paste atau dapat dengan tombol Ctrl+Z, Ctrl+X, Ctrl+C, Ctrl+V.
Menu Search. Menu ini berhubungan dengan pencarian dan penggantian data.
Gambar 8. Jendela Find Text
Menu View. Menu ini berhubungan dengan penampilan atau apa yang akan ditampilkan.
Menu Project. Menu ini berhubungan dengan proyek yang sedang dibuat, misal unit yang akan ditambahkan ke
proyek ini, unit apa yang akan dihapus, dsb.
Menu Run. Menu ini berhubungan dengan menjalankan program, mencari kesalahan (debug), dsb.
Menu Component. Menu ini berhubungan dengan komponen, misal menambah komponen baru, menghapus
komponen yang ada.
Menu Database. Menu ini berhubungan dengan Database, Database Form Wizard dan Database Explorer.
Menu Tools. Menu ini berhubungan dengan pengaturan/konfigurasi, tool-tool pembantu Delphi.
Menu Help. Menu ini berhubungan dengan informasi mengenai Delphi, Help / bantuan
2.2. Component, Property, Method, Event
Kode yang akan dilihat, serupa dengan struktur Bahasa Pascal. Delphi adalah bahasa pemrograman berbasis
objek, artinya pendekatan pembuatan program melalui objek-objek yang ada. Misalnya objek form, text dsb.
Setiap objek akan memiliki properti (atribut) dan method yang diaktifkan / dipicu oleh event. Mari kita lihat
penjelasan berikut.
Apakah Objek (COMPONENT) itu?
Ingat sebuah komponen adalah sebuah objek pada Palette, :
 sebuah Objek, adalah sebuah komponen dalam Component Palette,
 atau sesuatu yang dibuat melalui kode-kode / bahasa pemrograman
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
1
Jadi sebuah objek adalah secara umum kelas dari kumpulan sesuatu. Komponen pasti objek namun tidak selalu
merupakan komponen, misal TstringList adalah sebuah objek (kumpulan karakter), dan bukan sebuah
komponen. Penjelasan mengenai komponen di Lampiran A.
Apakah sebuah PROPERTY itu?
Sebuah Property tidak lain adalah sebuah nama/variabel milik sebuah objek/komponen misal Caption, Text yang
dapat diubah nilai baik melalui object Inspector atau melalui program.
Beberapa istilah/ nama berikut yang mirip, dan sering digunakan:
 Procedure adalah kumpulan perintah yang melakukan suatu proses tertentu
 Function adalah sama dengan procedure, tetapi proses tersebut dapat mengembalikan suatu hasil / nilai
misal hasilnya = 1
 Method adalah procedure atau function yang tergabung pada sebuah komponen
 Subroutine adalah istilah umum dari semuanya (procedure/function/method) misal pada bahasa Basic.
Apakah sebuah METHOD itu?
Sebuah method adalah sebuah function/fungsi yang tergabung dalam sebuah objek. Contoh ListBox (dapat
berarti sebuah array of strings) yang memiliki Method (Clear) yang membuat Listbox tersebut menjadi kosong.
CLEAR adalah sebuah Method pada ListBox tersebut.
Apakah sebuah EVENT itu?
Sebuah Event adalah sebuah aksi pengguna (User Action) misal Mouse Click, KeyPressed. Setiap Events
diawali dengan kata ‘On’.
Contoh :
Nama event Nama method
OnClick .. Button1Click(Sender : Tobject)
OnKeyDown .. Button1KeyDown(Sender : Tobject)
OnMouseMove .. Button1MouseMove(Sender : Tobject)
2.3. Cara Delphi Bekerja
Saat anda menambahkan Components pada Form1 dan merubah nilai properti, Delphi akan membuat (pseudo)
code (dalam Unit1.dfm) untuk mendefinikan apa yang anda lakukan. Secara normal, ANDA TIDAK
DIHARAPKAN MENGUBAHNYA Unit1.dfm File; Anda hanya bekerja pada Form1 secara Visual. Ini yang
dinamakan bahasa pemrograman Visual (Visual Programming)
Apakah Delphi itu?
 Delphi (IDE) adalah sebuah Visual Interface antara anda (the User) dan Komputer anda (yang berjalan
diatas Windows ).
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
1
Begin
ListBox1.Clear; // Mengosongkan isi ListBox
ListBox1.Items.LoadFromFile(‘c:Data1.txt’);
//properti Items (bertipe string) memiliki method untuk LoadFromFile
end;
 Delphi menterjemahkan Visual Components (Buttons, Panels,..) yang ada pada Form kedalam sebuah
kode-kode komputer (pseudo in Unit1.dfm) yang mendefinisikan bagaimana dibentuknya form dan
komponennya termasuk juga propertinya.
Saat anda mengkompilasi program, apa yang terjadi?
 Delphi akan memanggil file .dpr file (file proyek anda)
 Delphi meminta program yang ada dalam proyek tersebut dan file dpr memberikan sebagai berikut :
 Delphi meminta, Apa yang dilakukan pertama kali ? .dpr file memberikan sebagai berikut:
2.4. Forms, Dialog Boxes, Messages , ...
Menampilkan Form atau Window
Anda dapat bekerja dengan beberapa form pada sebuah project. Saat anda berada di Form1 untuk menampilkan
form yang lain misal Form2 sebagai berikut :
Form2.Show;
Membuka (Shows) Form2 (tetapi user diijinkan untuk dapat mengklik Form1)
Form2.ShowModal;
Membuka (Shows) Form2 (tetapi user TIDAK DIIJINKAN mengklik Form1)
Menampilkan Pesan (Message)
ShowMessage('Ini kotak pesan);
Tampilan sederhana sebuah baris/teks; User dapat menekan tombol OK untuk keluar dari kotak pesan (message
window).
MessageDlg('Msg',mtConfirmation,[mbYes],0);
Mirip ShowMessage tapi dapat lebih dari satu tombol pilihan.
if MessageDlg ('Please say YES or ',mtConfirmation,[mbYes,mbNo],0) = mrYES then
begin
Label1.Text:='Tekan tombol YES';
end;
Meminta Masukan (Input Box)
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
1
uses Forms,
Unit1 in ‘Unit1.pas’ {Form1};
begin
Application.Initialize; itializes stuff
Application.CreateForm(Tform1, Form1);
Application.Run;
end.
TMsgDlgType = mtWarning,mtError,mtInformation, mtConfirmation, mtCustom
TMsgDlgBtn
= mbYes,mbNo,mbOK,mbCancel,mbAbort,mbRetry,mbIgnore,mbAll,mbHelp
Return values
= mrNone, mrYes, mrNo, mrOk, mrCancel, mrAbort, mrRetry, mrIgnore, mrAll
InputBox(...);
var
InputString: string;
begin
InputString:= InputBox('Masukkan Nama', 'Please Enter your Name','');
end;
3. PERINTAH PENCABANGAN / STRUKTUR PEMILIHAN
Pada beberapa kasus terkadang kita menginginkan komputer melakukan suatu aksi tertentu bila suatu kondisi
terpenuhi. Keberadaan perintah bersyarat pada suatu program memberikan pencabangan proses seperti
ditunjukkan oleh Error! Not a valid link.. Bahasa Pascal menyediakan dua cara penyajian perintah bersyarat,
yaitu If…Then…Else dan Case…of.
Gambar 3.1 Pencabangan pada program
Pada prinsipnya pemilihan aksi dapat dikelompokkan menjadi 3 bagian :
3.1. IF … THEN : Pemilihan 1 kasus
Perintah bersyarat If – then digunakan hanya melakukan 1 aksi bila kondisi dipenuhi.
Bentuk sintaks dari perintah bersyarat ini adalah:
3.2. IF … THEN … ELSE : Pemilihan 2 kasus
Perintah bersyarat If umumnya digunakan untuk melakukan pencabangan sederhana (antara 2 atau 3 cabang).
Atau untuk pencabangan yang banyak, dimana kondisi yang menjadi prasyaratnya melibatkan lebih dari satu
parameter. Bentuk sintaks dari perintah bersyarat ini adalah:
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
1
Aksi 1 Aksi 2
Kondisi 1 Kondisi 2
Pemilihan 1 pilihan/kasus. Gunakan perintah IF – THEN
Pemilihan 2 pilihan/kasus. Gunakan perintah IF – THEN – ELSE
Pemilihan N pilihan/kasus. Gunakan Case – of (Catatan sebenarnya dapat
menggunakan if—then – else bersarang)
If <kondisi_pencabangan> then
Begin
... {aksi-1}
end;
If <kondisi_pencabangan> then
Begin
... {aksi-1}
end
else
Begin
... {aksi-2}
end;
3.3. IF … THEN … ELSE : Pemilihan N kasus
3.4. CASE … OF … : Pemilihan N kasus
Perintah bersyarat Case umumnya digunakan untuk kondisi dengan banyak pencabangan. Syarat pencabangan
pada bentuk ini hanya boleh melibatkan satu buah parameter dengan tipe data bukan Real. Pemeriksaan kondisi
di sini lebih tepat disebutkan dalam hubungan relasi samadengan (=). Dengan demikian bila parameter bernilai
tertentu maka dilakukan suatu aksi terkait, bila bernilai lain maka dilakukan aksi yang lain juga, demikian
seterusnya.
Latihan ke-2
Buat aplikasi baru dengan nama form frmWelcome, kemudian ubah nama komponen/objek sebagai berikut:
Objek Properti Nilai properti Metode lewat event
Form1 Name FrmWelcome OnActive
Caption Welcome
Button1 Name BtnQuit OnClick, isi dengan:
application.terminate;
Caption &Quit
Label1 Name Lblunsur
Caption Lambang Unsur Kimia
Font Times New Roman, Bold, Size : 18
Label2 Name Lblchoose
Caption Pilih Lambang Unsur
Label3 Name Lbllambang
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
1
If <kondisi_pencabangan1> then
Begin
... {aksi-1}
end
else
If <kondisi_pencabangan2> then
Begin
... {aksi-2}
end
else
Begin
... {aksi-3}
End;
Case <Parameter> Of
<nilai_1> : <aksi_1> ;
<nilai_2> : <aksi_2> ;
...
<nilai_n> : <aksi_n> ;
Else <aksi_n+1> ;
End;
Caption (kosong)
Font Times New Roman, Bold, Size
=12, Color = clTeal
Label4 Name Lblcomment
Caption (kosong)
Font Times New Roman,
Bold-Italic,Size = 24, Color
= clTeal
listBox1 Name Lbxunsur OnClick
 Buat method dari komponen frmWelcome lewat event OnActivate, seperti berikut
 Buat method dari komponen lbxCountry lewat event OnClick, seperti berikut
 Simpan dengan nama unit uWelcome1.pas dan project pWelcome1.dpr pada direktori Latih3
4. STRUKTUR PENGULANGAN
Dalam menyelesaikan masalah, terkadang kita harus melaku suatu proses yang sama lebih dari satu kali. Untuk
itu perlu dibuat suatu algoritma pengulangan. Pascal memberikan tiga alternatif pengulangan, yaitu dengan For,
While, atau Repeat. Masing-masing memiliki karakteristik, yang akan dipelajari pada modul ini. Ada dua hal
yang penting dalam melakukan merancang perintah pengulangan, yaitu:
 Inisialisasi awal.
 Nilai akhir pengulangan atau kondisi berhenti.
4.1. FOR – TO - DO
Pada pengulangan dengan For, inisialisasi awal dan kondisi akhir ditentukan dengan menggunakan suatu
variable kendali yang nilainya dibatasi dalam suatu range tertentu. Sintaks untuk perintah ini adalah:
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
1
procedure TForm1.FormActivate(Sender: TObject);
begin
lbxCountry.Hint := 'Please choose...';
lbxCountry.Items[0]:='Ca';
lbxCountry.Items[1]:= 'C';
lbxCountry.Items[2]:= 'Cu';
lbxCountry.Items[3]:= 'Cd';
end;
procedure TForm1.lbxCountryClick(Sender: TObject);
begin
lblCountry.caption := lbxCountry.Items[lbxCountry.ItemIndex]; case
lbxCountry.ItemIndex of
0 : lblComment.caption := 'lambang unsur dari Calsium' ;
1 : lblComment.caption := 'lambang unsur dari Carbon' ;
2 : lblComment.caption := 'lambang unsur dari Cuprum' ;
3 : lblComment.caption := 'lambang unsur dari Cadmium' ;
end;
end;
atau
Perbedaan antara to dan downto adalah pada kondisi nilai awal dan akhir. Pada to: nilai awal lebih kecil dari
nilai akhir, sedangkan pada downto nilai awal lebih besar dari nilai akhir. Perlu diingat, bahwa variable kendali
harus dideklarasikan dengan tipe data integer.
Contoh program pengulangan menggunakan For-to-do
Hasilnya adalah : 1, 2, 3, 4, 5
Contoh program yang sama jika tapa perintah tanpa pengulangan
Hasilnya adalah : 1, 2, 3, 4, 5
4.2. WHILE - DO
Pada metoda pengulangan ini aksi hanya akan diproses bila kondisi pengulangan terpenuhi, bentuk sintaks dari
pengulangan ini adalah:
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
1
For <variable_kendali> := <nilai_awal> to <nilai_akhir> do
Begin
…
{aksi}
End ;
For <variable_kendali> := <nilai_awal> downto <nilai_akhir> do
Begin
… {aksi}
End ;
procedure TfrmPengulangan.btnPengulanganClick(Sender: TObject);
var I : integer;
begin
lbxHasil.Items.Clear;
For I := 1 to 5 do
Begin
lbxHasil.Items.Add(inttoStr(i));
End;
End;
procedure TfrmPengulangan.btnPengulanganClick(Sender: TObject);
begin
lbxHasil.Items.Clear;
lbxHasil.Items.Add(inttoStr(1));
lbxHasil.Items.Add(inttoStr(2));
lbxHasil.Items.Add(inttoStr(3));
lbxHasil.Items.Add(inttoStr(4));
lbxHasil.Items.Add(inttoStr(5));
End;
While <kondisi_ pengulangan> do
Begin
… {aksi}
End ;
Selama kondisi_pengulangan bernilai true maka aksi akan dilakukan, dan baru akan berhenti setelah kondisi
pengulangan bernilai false. Karena kondisi pengulangan diperiksa pada bagian awal, maka ada kemungkinan
aksi tidak pernah dilakukan, yaitu bila kondisi pengulangan tidak pernah bernilai true.
Contoh program pengulangan menggunakan While-do
4.3. REPEAT - UNTIL
Metoda pengulangan ini juga melakukan pengulangan berdasarkan pemeriksaan kondisi pengulangan. Hanya
saja natur dari pengulangan ini adalah sistem seakan-akan memaksa untuk melakukan pengulangan, sampai di
ketahui adanya kondisi berhenti. Bentuk sintaks dari pengulangan ini adalah:
Berlawanan dengan While, yang akan memproses aksi hanya bila kondisi_pengulangan bernilai true, pada
pengulangan Repeat, sistem akan memproses aksi selama kondisi_berhenti bernilai false. Dengan demikian aksi
pasti akan selalu diproses (minimal satu kali). Pada tipe ini, pengulangan dapat terjadi terus-menerus (tidak
pernah berhenti), yaitu bila kondisi berhenti tidak pernah bernilai true.
Contoh program pengulangan menggunakan Repeat- Until
Latihan ke-3
Buat aplikasi bari dengan nama form frmPengulangan, kemudian ubah nama komponen/objek sebagai berikut:
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
1
procedure TfrmPengulangan.btnPengulanganClick(Sender: TObject);
var I : integer;
begin
lbxHasil.Items.Clear;
I := 1;
While I<=5 DO
Begin
lbxHasil.Items.Add(inttoStr(i));
I := I + 1;
End;
End;
Repeat
… {aksi}
Until <kondisi_ berhenti>
procedure TfrmPengulangan.btnPengulanganClick(Sender: TObject);
var I : integer;
begin
lbxHasil.Items.Clear;
I := 1;
Repeat
lbxHasil.Items.Add(inttoStr(i));
I := I + 1;
Until I > 5;
End;
Objek Properti Nilai properti Method lewat event
Form1 Name FrmPengulangan
Caption Pengulangan
Button1 Name BtnPengulangan Onclick
Caption &Pengulangan
Label1 Name LblComment
Caption (kosong)
Font Times New Roman, Bold-Italic,
Size = 12
ListBox1 Name LbxHasil OnClick
Font Times New Roman, Bold-Italic,
Size = 20, Color = clTeal
 Buat method dari komponen btnPengulangan lewat event OnClick, seperti berikut
 Buat method dari komponen lbxHasil lewat event OnClick, seperti berikut
 Simpan dengan nama unit uPengulangan1.pas dan project pPengulangan1.dpr pada direktori Latih4
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
1
procedure TfrmPengulangan.btnPengulanganClick(Sender: TObject);
var I : integer;
begin
lbxHasil.Items.Clear;
For I := 0 to 20 do
Begin
lbxHasil.Items.Add(inttoStr(i));
end;
end;
procedure TfrmPengulangan.lbxHasilClick(Sender: TObject);
begin
lblComment.caption := 'Dicetak saat I bernilai ' +
IntToStr(lbxHasil.ItemIndex);
end;
Setiap data yang disimpan di memori komputer harus memiliki tipe data. Tipe data yang sederhana
sekali adalah dikelompokkan menjadi 2 bagian :
1.Teks :
a.Char (terdiri dari 1 huruf /1 angka)
b.String (terdiri dari beberapa huruf/angka)
2.Bilangan :
a.Integer (bilangan bulat )
b.Real (bilangan pecahan)
Di Delphi ada beberapa tipe data varian dari kedua tipe data tersebut, yang membedakan adalah range (rentang
nilainya). Lihat lampiran tipe data lebih lengkap.
1.1.Berlatih Tipe Data Float dan String
Dengan memahami seperti ini kita akan coba membuat sebuah program (projek)untuk menghitung tekanan gas
ideal, rumusnya sebagai berikut :
P := (n*R*T)/V ;
Tempatkan komponen-komponen berikut pada form kemudian ubah nilai propertiesnya :
Objek Properti Nilai properti Method lewat event
Label1 Caption Tulis : MENGHITUNG TEKANAN
GAS IDEAL
Font Tahoma, style : bold, size : 14, effects :
underline, color : green
Label2 Caption Tulis : mol (n)
Font Tahoma, style : bold, size : 12, color :
green
Label3 Caption Tulis : suhu (T)
Font Tahoma, style : bold, size : 12, color :
green
Label4 Caption Tulis : volume (V)
Font Tahoma, style : bold, size : 12, color :
green
Label5 Caption Tulis : tekanan (P)
Font Tahoma, style : bold, size : 12, color :
green
Button1 Caption Tulis : HITUNG OnClick
Font Tahoma, style : bold, size : 12
Button2 Caption Tulis : KELUAR OnClick
Font Tahoma, style : bold, size : 12
Form1 Color clMoneyGreen
Name Formtekanan
Edit1 Text (kosong)
Edit2 Text (kosong)
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
1
TIPE DATA DALAM DELPHI
2.1 BERLATIH TIPE DATA DI DELPHI
Edit3 Text (kosong)
Edit4 Text (kosong)
Berikut desain form di Delphi :
Gambar12. Desain form tekanan
 Membuat even OnClick pada Button1
Catatan :
 Pada bagian Var, tambahkan :
n,T,V,P : real ;
 Pada bagian Const, tambahkan :
R = 0.082 ;
 Membuat even OnClick pada Button2
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
2
procedure TForm1.Button1Click(Sender:TObject);
begin
//Konversi dari String ke Float
n :=StrTofloat(Edit1.Text);
T :=StrTofloat(Edit2.Text);
V :=StrTofloat(Edit3.Text);
P := (n*R*T)/V ;
//Konversi dari Float ke String
Edit4.Text :=floatToStr(P);
end;
procedure TForm1.Button2Click(Sender:TObject);
begin
application.terminate;
end;
 Hasil running program aplikasi
Gambar14. Hasil Running
Di bawah ini adalah sebagian dari tipe data pada Delphi :
1. Integer
Merupakan tipe data bilangan bulat, dengan :
Type Range Format
Integer –2147483648..2147483647 signed 32-bit
Cardinal 0..4294967295 unsigned 32-bit
Secara fundamental, tipe integer terdiri dari :
Type Range Format
Shor int –128..127 signed 8-bit
Smallin –32768..32767 signed 16-bit
Longin –2147483648..2147483647 signed 32-bit
Int64 –263
..263
–1 signed 64-bit
Byte 0..255 unsigned 8-bit
Word 0..65535 unsigned 16-bit
Longword 0..4294967295 unsigned 32-bit
2. Real Merupakan bilangan pecahan, dengan :
Type
Significant
digits
Size in
bytes
Range
Real48 11 –12 2.9 x 10–39
..1.7 x 10386
Single 7 –8 1.5 x 10–45
..3.4 x 10384
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
2
Double 15 –16 5.0 x 10–324
..1.7 x 103088
Extended 19 –20 3.6 x 10–4951
..1.1 x 10493210
Comp 19 –20 –263
+1 ..263
–18
Currency 19 –20 –922337203685477.5808..922337203685477.58078
Secara Generik, tipe real adalah :
Type
Significant digits
Size in bytes Range
Real 15 –16 5.0 x 10–324
..1.7 x 103088
3. String
Merupakan huruf, dengan :
Type Maximum lenght Memory required
Char 1 characters 1 bytes
ShortString 255 characters 2 to 256 bytes
AnsiString ~231
characters 4 bytes to 2GB
WideString ~230
characters 4 bytes to 2GB
4. Boolean
Merupakan tipe variabel logika. Nilai dari variabel dari bertipe Boolean adalah True atau
False.
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
2
FUNGSI STANDAR ARITMATIKA
Dalam aplikasi problem-problem sains sejumlah fungsi matematika sering diperlukan.
Beberapa fungsi telah tersedia (integrated) dalam Turbo Pascal dan sebagian lagi
diperlukan pemrograman.
Beberapa fungsi dalam Delphi dapat adalah sebagai berikut :
FUNGSI DESKRIPSI
1. FUNGSI ARITMATIKA
1.1. ABS (X) Digunakan untuk menentukan harga mutlak (absolut) dari argumen X
Contoh :
Var
r : single ;
i : integer ;
begin
r := Abs(-2.3) ; {hasil 2.3}
i := Abs(-157) ; {hasil 157}
end;
1.2. CEIL (X) Digunakan untuk menghasilkan nilai integer terendah yang lebih besar atau sama
dengan argumen X.
Contoh :
Var
i, j : real ;
begin
i := Abs(-2.8) ; {hasil -2}
j := Abs(2.8) ; {hasil 3}
end;
1.3. EXP (X) Digunakan untuk menghasilkan nilai eksponen, atau nilai e yang dipangkatkan
dengan argumen X, dimana e adalah bilangan dasar logaritma 2.718281828
Contoh :
Var
e : real ;
S : string ;
begin
e := exp(1.0) ;
Str(ln(e):3:2, S) ;
end;
1.4. FLOOR (X) Digunakan untuk menghasilkan pembulatan (integer) ke bawah dari suatu
bilangan ke kelipatan terdekat yang diberikan.
Contoh :
Var
i, j : integer ;
begin
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
2
FUNGSI STANDART & PENULISAN
EKSPRESI ARITMATIKA DELPHI
i := Floor(-2.8) ; {hasil -3}
j := Floor(2.8) ; {hasil 2}
end;
1.5. FRAC(X) Digunakan untuk menghasilkan bagian pecahan dari argumen X.
Contoh :
Var
R : real ;
begin
R := Frac(123.456) ; {hasil 0.456}
R := Frac(-123.456) ; {hasil -0.456}
end;
1.6. INT(X) Digunakan untuk membulatkan bilangan pecahan dengan pembulatan ke bawah
menghasilkan bilangan bulat terdekat.
Contoh :
Var
R : real ;
begin
R := Int(123.456) ; {hasil 123.0}
R := Int(-123.456) ; {hasil -123.0}
end;
1.7. LN(X) Digunakan untuk menampilkan logaritma suatu bilangan dengan basis e.
Contoh :
Var
e : real ;
S : string ;
begin
e := Exp(1.0) ;
Str(ln(e):3:2,S);
S := ’e=’+FloatToStr(e) ;
Edit1.Text := S ;
end;
1.8. MAX(X,Y) Menentukan nilai tertinggi atau terbesar dari dua bilangan.
Contoh :
Var
S : string ;
i : integer ;
begin
i := Max(10,15); {menghasilkan nilai 15}
S := ’Max’ = ’+IntToStr(i);
Edit1.Text := S ;
end;
1.9. MIN(X,Y) Menentukan nilai terendah atau terkecil dari dua bilangan.
Var
S : string ;
i : integer ;
begin
i := Min(10,15); {menghasilkan nilai 10}
S := ’Min’ = ’+IntToStr(i);
Edit1.Text := S ;
end;
1.10. PI Digunakan untuk menghasilkan nilai pi (3.1415926535897932385) dalam
perhitungan matematika.
1.11. POWER(X,Y) Digunakan untuk menghasilkan nilai hasil pemangkatan suatu bilangan X dengan
nilai pemangkat Y.
Contoh :
Var
S : string ;
i : extended ;
begin
i := power(2,3); {hasil 8}
S := ’Power’ = ’+FloatToStr(i);
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
2
Edit1.Text := S ;
end;
1.12. ROUND(X) Digunakan untuk menghitung pembulatan data numerik X yang bertipe real dan
menghasilkan suatu nilai yang bertipe integer.
Contoh :
Var
S, T : String ;
Begin
Str(1.4:2:1,T) ; {hasil 1}
S := T +’menjadi’+IntToStr(Round(1.4)) ;
Str(1.5:2:1,T) ; {hasil 2}
S := T +’menjadi’+IntToStr(Round(1.5)) ;
Str(-1.4:2:1,T) ; {hasil -1}
S := T +’menjadi’+IntToStr(Round(-1.4)) ;
Str(-1.5:2:1,T) ; {hasil -2}
S := T +’menjadi’+IntToStr(Round(-1.5)) ;
MessageDlg(S, mtInformation,[mbOk],0) ;
end;
1.13. SQR(X) Memberikan nilai kuadrat suatu bilangan X.
Contoh :
var
S, Y : string;
begin
Str(Sqr(5.0):3:1,Y) ; {hasil 25}
S := ’5 bernilai kuadrat’ + Y ;
Edit1.Text := S;
end;
1.14. SQRT(X) Memberikan nilai akar kuadrat suatu bilangan X.
Contoh :
var
S, Y : string;
begin
Str(Sqrt(2.0):5:4,Y) ; {hasil 1.4142}
S := akar kuadrat dari 2 adalah’ + Y ;
MessageDlg(S, mtInformation,[mbOk],0) ;
end;
1.15. TRUNC(X) Menghilangkan bagian nilai pecahan tanpa memperhatikan pembulatan dari suatu
data numerik.
Contoh :
Var
S, T : string ;
begin
Str(1.4:2:1, T);
S := T +’hasil’+IntToStr(Trunc(1.4)) ;
Edit1.Text := S ;
Str(-1.4:2:1, T);
S := T +’hasil’+IntToStr(Trunc(-1.4)) ;
Edit1.Text :=Edit1.Text + S ;
end;
2. FUNGSI
TRIGONOMETRI
2.1. ARCCOS(X)
Menghitung nilai kebalikan cosinus dari nilai argumen X.
Contoh :
var
S : string ;
begin
S := FloatToStr(ArcCos(0.5)) ;
Edit1.Text := S ; {hasil 1.0471975511966}
end;
2.2. ARCSIN(X) Menghitung nilai kebalikan sinus dari nilai argumen X.
Contoh :
var
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
2
S : string ;
begin
S := FloatToStr(ArcSin(0.5)) ;
Edit1.Text := S ; {hasil 0.523598775598299}
end;
2.3. ARCTAN(X) Menghitung nilai kebalikan tangen dari nilai argumen X.
Contoh :
var
S : string ;
begin
S := FloatToStr(ArcTan(1)) ;
Edit1.Text := S ; {hasil 0.785398163397448}
end;
2.4. COS(X) Menghasilkan niai cosinus dari suatu sudut.
var
S : string ;
begin
S := FloatToStr(Cos(Pi)) ;
Edit1.Text := S ; {hasil -1}
end;
2.5. SIN(X) Menghasilkan niai sinus dari suatu sudut.
var
S : string ;
begin
S := FloatToStr(Sin(90)) ;
Edit1.Text := S ; {hasil 0.893996663600558}
end;
2.6. TAN(X) Menghasilkan niai tangen dari suatu sudut.
var
S : string ;
begin
S := FloatToStr(Tan(45*Pi/180)) ;
Edit1.Text := S ; {hasil 1}
end;
3. FUNGSI STATISTIK
3.1. MAXINTVALUE(X) Menghasilkan nilai tertinggi yang terdapat di dalam array dengan tipe data
integer.
Contoh :
var
S : string ;
begin
S := FloatToStr(MaxIntValue([10,20,40,30]));
Edit1.Text := S ; {hasil 40}
end;
3.2. MAXVALUE(X) Menghasilkan nilai tertinggi yang terdapat di dalam array dengan tipe data
integer, dan fungsi MaxValue akan menghasilkan data bertipe Double.
Contoh :
var
S : string ;
begin
S := FloatToStr(MaxValue([10.5,20,40.25,30]));
Edit1.Text := S ; {hasil 40.25}
end;
3.3. MEAN(X) Menghasilkan nilai rata-rata dari semua nilai dalam suatu array
Contoh :
var
S : string ;
begin
S := FloatToStr(Mean([10.5,20,40.25,30]));
Edit1.Text := S ; {hasil 25.1875}
end;
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
2
3.4. MININTVALUE(X) Menghasilkan nilai terendah yang terdapat di dalam array dengan tipe data
integer.
Contoh :
var
S : string ;
begin
S := FloatToStr(MinIntValue([10,20,40,30]));
Edit1.Text := S ; {hasil 10}
end;
3.5. NORM(X) Menghasilkan norma Euclidean ’L-2’.
Contoh :
var
S : string ;
begin
S := FloatToStr(Norm([10,20,40,30]));
Edit1.Text := S ; {hasil
54.7722557505166}
end;
3.6. POPNSTDDEV(X) Menghitung populasi standar deviasi (akar kuadrat varian populasi) dari semua
nilai dalam parameter array data.
Contoh :
var
S : string ;
begin
S := FloatToStr(POPNSTDDEV([10,20,40,30]));
Edit1.Text := S ; {hasil
11.1803398874989}
end;
3.7. POPNVARIANCE Menghitung varian populasi dari semua nilai dalam parameter array data.
Contoh :
var
S : string ;
begin
S := FloatToStr(POPNVARIANCE([10,20,40,30]));
Edit1.Text := S ; {hasil 125}
end;
3.8. STDDEV(X) Menghasilkan sampel standart deviasi (akar kuadrat dari varian sampel) dari
semua nilai dalam parameter array data.
Contoh :
var
S : string ;
begin
S := FloatToStr(StdDev([10,20,40,30]));
Edit1.Text := S ; {hasil
12.9099444873581}
end;
3.9. SUM(X) Meghasilkan jummlah semua nilai-nilai dari parameter array data.
Contoh :
var
S : string ;
begin
S := FloatToStr(Sum([10,20,40.25,30]));
Edit1.Text := S ; {hasil 100.25}
end;
3.10 VARIANCE(X) Menghitung varian sampel dari semua nilai dalam parameter array data, gunakan
metode n-1 (tidak bias).
Contoh :
var
S : string ;
begin
S := FloatToStr(Variance([10,20,40,30]));
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
2
Edit1.Text := S ; {hasil 166.6666667}
end;
Harga x dalam fungsi sinus, cosinus dan arctangen dalam radian karena itu agar dapat memasukkan x
dalam satuan derajat harus dilakukan konversi dari derajat ke radian yaitu
x =
π/180
x
Misalnya untuk penulisan sin (x)
y = )
/180
sin(
π
x
Untuk perpangkatan ab
diturunkan dengan cara berikut
x = ab
Ln (x) = b*Ln (a), maka
e
aLnb
x
)(*
=
PENULISAN EKSPRESI ARITMATIKA PASCAL UNTUK DELPHI
Beberapa hal yang harus diperhatikan dalam penulisan ekspresi aritmatika adalah
• Penggunaan operasi aritmatika, memiliki urutan yang sama sebagaimana dalam aljabar yaitu pertama
perpangkatan, kedua perkalian atau pembagian, dan ketiga penjumlahan atau pengurangan.
• Penggunaan kurung untuk menjamin urutan hitungan dengan benar
• Simbol perkalian harus dituliskan
• Untuk rumus yang kompleks maka dilakukan dengan pemecahan rumus menjadi beberapa rumus sederhana
Beberapa contoh penulisan ekspresi aritmatika adalah
EKSPRESI ARITMATIKA EKSPRESI PASCAL
A − b a − b
ab a * b
2b 2 * b
2c + 3b2
2 * c + 3 * Sqr(b) atau
2 * c + 3 * b * b
7 .
dc
ba
−
− (a − b)/(c − d) * 7 atau
7 * (a − b)/(c − d) atau
7/(c − d) * (a − b)
7).( dc
ba
−
− (a − b)/(c − d) / 7 atau
(a − b)/((c − d) * 7) atau
1/7/(c − d) * (a − b)
X2
Sqr(x) atau
x * x
X5
Sqr(x) * Sqr(x) * x atau
x * x * x * x * x
x Sqrt(x)
x2
3 x * Sqrt(x) atau
Sqrt(x * x * x) atau
Sqrt(x * Sqr( x))
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
2
( )M
RT
π
8 2
1
Sqrt((8*R*T)/(Pi*M))
RT
E
E/(R * T) atau
E/R/T atau
E/T/R atau
1/(T * R) * E
e RT
Mgz
Exp ((M*g*z)/(R*T))
)(
)(
xCos
xSin
Sin (x)/Cos (x)
Log(x) Ln (x)/Ln (10) atau
Ln (x)/2.303
Abs(x) Abs (x)
Untuk rumus yang kompleks misalnya





 −
+





−
−
=
21
212
1
2
VV
VV
an
nbV
nbV
nRTLnW
Penulisannya adalah
W := n*R*T*Ln((V2-n*b)/(V1-n*b)) + a*Sqr(n)*((V1-V2)/(V1*V2));
Penulisan seperti ini memungkinkan banyak kesalahan, karena itu lebih baik jika ditulis secara bertahap sebagai
berikut
Rumus1 := (V2-n*b)/(V1-n*b);
Rumus2 := Ln(Rumus1);
Rumus3 := n*R*T*Rumus2;
Rumus4 := (V1-V2)/(V1*V2);
Rumus5 := a*Sqr(n)*Rumus4;
W := Rumus3 + Rumus5;
Cara lain
Rumus1 := (V2-n*b)/(V1-n*b);
Rumus2 := (V1-V2)/(V1*V2);
W := n*R*T*Ln(Rumus1) + a*Sqr(n)*Rumus2;
Contoh lain rumus untuk menghitung fraksi molekul pada range kecepatan tertentu per satuan luas
interval
RT
Mc
ec
RT
M
Fv 2
2
2
2
3
2
4
−





=
π
π
Penulisan ekspresi Pascal untuk rumus di atas dengan cara langsung akan sulit dan lebih banyak
kemungkinan salahnya, karena itu sebaiknya ditulis secara bertahap, sebagai contoh
R1 := M/(2*Pi*R*T);
R2 := Sqrt(R1*R1*R1);
R3 := (-M*c*c)/(2*R*T);
R4 := Exp(R3);
Fv := 4*Pi*R2*Sqr(c)*R4;
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
2
Cara lain
R1 := M/(2*Pi*R*T);
R1 := R1*Sqrt(R1);
R2 := (-M*c*c)/(2*R*T);
R2 := Exp(R2);
Fv := 4*Pi*R1*Sqr(c)*R2;
Banyak cara lain untuk menulis rumus di atas, yang penting penulisan rumus dengan ekpresi Pascal
tidak boleh menyalahi ekpresi matematikanya.
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
3
Menghitung harga tekanan berdasarkan hukum gas ideal jika jumlah mol, temperatur dan
volume sistem diketahui.
Rumus :
V
nRT
p =
R adalah konstanta gas dengan harga 0,082054 L.atm/mol.K.
Design Form:
Tabel Properties Object Inspector:
Objek Properti Nilai Properti
Form Caption Hitung Tekanan gas Ideal
Color clMoneyGreen
Label1 Caption MENGHITUNG TEKANAN GAS IDEAL
Font Color: clNavy, Name: Times New Roman,
Size: 15, Style: fsBold (True)
Label2 Caption INPUT
Font Color: clRed, Name: Tahoma, Size: 12,
Style: fsBold
Label3 Caption Mol
Font Style: fsBold (True)
Label4 Caption R
Font Style: fsBold (True)
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
3
6.1. RUMUS GAS IDEAL
APLIKASI SEDERHANA KIMIA
KOMPUTASI MENGGUNAKAN DELPHI
Label5 Caption Temperatur
Font Style: fsBold (True)
Label6 Caption Volume
Font Style: fsBold (True)
Label7 Caption OUTPUT
Font Color: clRed, Name: Tahoma, Size: 12,
Style: fsBold
Label8 Caption RUMUS
Font Color: clRed, Name: Tahoma, Size: 12,
Style: fsBold
Edit1 Color clInactiveCaptionText
Text (kosong)
Edit2 Color clInactiveCaptionText
Text 0.082
Edit3 Color clInactiveCaptionText
Text (kosong)
Edit4 Color clInactiveCaptionText
Text (kosong)
Edit5 Color clAqua
Listing Unit Program:
unit hitP;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Label3: TLabel;
Label4: TLabel;
Edit2: TEdit;
Label5: TLabel;
Edit3: TEdit;
Label6: TLabel;
Edit4: TEdit;
Label7: TLabel;
Edit5: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Image1: TImage;
Label8: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
3
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
n,R,T,V,p : real;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
n := strtofloat(edit1.Text);
R := strtofloat(edit2.Text);
T := strtofloat(edit3.Text);
V := strtofloat(edit4.Text);
p := (n*R*T)/V;
Edit5.Text:= floattostr(p);
Edit1.SetFocus;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Clear;
Edit2.Clear;
Edit3.Clear;
Edit4.Clear;
Edit5.Clear;
Edit1.SetFocus;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Application.Terminate;
end;
end.
Keterangan :
Layout form program ini sangat sederhana, tetapi memuat bagian input dan output.
Bagian input berisi data yang harus diberikan untuk dapat menghitung harga tekanan dengan
satuan sesuai permintaan program. Output program menampilkan data input yang diketahui
dan harga tekanan hasil hitungan rumus menggunakan format penulisan numerik di-
git di belakang koma. Misal
WriteLn('Jumlah mol = ',n:10:4,' mol');
Akan tampil di monitor
Jumlah mol = 12345.6789 mol 10 angka
Angka terakhir terletak pada 10 angka setelah tanda (=) dengan 4 angka di belakang koma.
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
3
Menghitung harga molaritas dan normalitas larutan dengan rumus :
MolaritasxValensiNormalitas
xMr
xPBxBJ
Molaritas
=
=
100
1000
BJ adalah berat jenis zat, PB adalah persen berat zat dan Mr adalah massa molekul zat yang
akan dihitung molaritas dan normalitas larutannya.
Design Form
Tabel Properties Object Inspector:
Objek Properti Nilai Properti
Label1 Caption MOLARITAS DAN NORMALITAS
Label2 Caption INPUT
Label3 Caption OUTPUT
Label4 Caption Densitas
Label5 Caption % Berat
Label6 Caption Massa Molekul
Label7 Caption Valensi
Label8 Caption Molaritas
Label9 Caption Normalitas
Label10 Caption RUMUS
Edit1 Text (kosong)
Edit2 Text (kosong)
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
3
6.2 MOLARITAS DAN NORMALITAS
Edit3 Text (kosong)
Edit4 Text (kosong)
Edit5 Text (kosong)
Edit6 Text (kosong)
Button1 Caption HITUNG
Button2 Caption ULANG
Button3 Caption KELUAR
Image1 Picture Load : molaritas.jpg
Strecht false
Listing Unit Program
unit molnor;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, jpeg;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit6: TEdit;
Label9: TLabel;
Label10: TLabel;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
BJ,Pb,Mr,M,N : real;
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
3
val : byte;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
BJ := strtofloat(Edit1.Text);
PB := strtofloat(Edit2.Text);
Mr := strtofloat(Edit3.Text);
val := strtoint(Edit4.Text);
M := (BJ*1000*PB)/(Mr*100);
N := val*M;
Edit5.Text := floattostr(M);
Edit6.Text := floattostr(N);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
edit1.Text := ' ';
edit2.Text := ' ';
edit3.Text := ' ';
edit4.Text := ' ';
edit5.Text := ' ';
edit6.Text := ' ';
edit1.SetFocus;
end;
end.
Hasil Running
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
3
Keterangan :
Program ini memuat dua rumus untuk menghitung molaritas dan normalitas. Layout program
sama dengan praktikum_1. Perhatikan penulisan rumus bagian atas dan bagian bawah. Untuk
lebih mantapnya maka bagian atas dan bagian bawah masing-masing diberi kurung.
Untuk menghitung 3 rumus sekaligus dengan input yang diminta. Rumusnya adalah
M
RT
avg
M
RT
mp
M
RT
rms
C
C
C
π
8
2
3
=
=
=
Crms = root-mean-square speed (akar rata-rata kuadrat kecepatan)
Cmp = most probable speed (kecepatan paling boleh jadi)
Cavg = average speed (kecepaatan rata-rata)
R = konstanta gas
T = temperatur dalam Kelvin
M = massa molekul
Design program
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
3
6.3 ROOT MEAN SQUARE
Tabel Properties Object Inspector:
Objek Properti Nilai Properti
Label1 Caption ROOT MEAN SQUARE
Label2 Caption INPUT
Label3 Caption OUTPUT
Label4 Caption Temperatur
Label6 Caption Massa Molekul
Label7 Caption Crms
Label8 Caption Cmp
Label9 Caption Cavg
Label10 Caption RUMUS
Edit1 Text (kosong)
Edit2 Text (kosong)
Edit4 Text (kosong)
Edit5 Text (kosong)
Edit6 Text (kosong)
Button1 Caption HITUNG
Button2 Caption ULANG
Button3 Caption KELUAR
Image1 Picture Load : rootmeansquare.jpg
Strecht false
Listing Unit Editor
unit rootmeansquare;
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
3
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, jpeg;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit6: TEdit;
Label9: TLabel;
Label10: TLabel;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
R = 8.314E+7;
var
Form1: TForm1;
Crms,Cmp,Cavg,T,Mr : real;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
T := strtofloat(Edit1.Text);
Mr := strtofloat(Edit2.Text);
Crms := sqrt((3*R*T)/Mr);
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
3
Cmp := sqrt((2*R*T)/Mr);
Cavg := sqrt((8*R*T)/(pi*Mr));
Edit4.Text := floattostr(Crms);
Edit5.Text := floattostr(Cmp);
Edit6.Text := floattostr(Cavg);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
edit1.Text := ' ';
edit2.Text := ' ';
edit4.Text := ' ';
edit5.Text := ' ';
edit6.Text := ' ';
edit1.SetFocus;
end;
end.
Hasil Running
Keterangan :
Program ini memuat tiga rumus sekaligus dengan satu input. Layout program sama
dengan praktikum_1. Perhatikan satuan yang diminta input sehingga harga R harus mengikuti
satuan yang diminta. Dalam Pascal untuk memasukkan harga π cukup dengan menuliskan pi
sehingga tidak perlu dimasukkan sebagai konstanta. Perhatikan penulisan harga konstanta
dengan bentuk eksponensial : R = 8.314E+7; Penulisan akar kuadrat menggunakan prosedur
sqrt( ).
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
4
Fungsi energi bebas Fo berhubungan dengan fungsi partisi q dengan rumus Fo = −R Ln
(q/No). R adalah konstanta gas dan No adalah bilangan Avogadro dan q dihasilkan dari
perkalian qt, qr, Qv (fungsi partisi translasi, rotasi dan vibrasi)
suatu molekul. Tulislah program untuk menghitung harga Fo air menggunakan data dan rumus
berikut
qt = (0,02562) x (M)3/2
(T)5/2
qr = ½ x (1042,95)3/2
x 1/(A x B x C)1/2
Qv = qv1 qv2 qv3
dimanaqv1 = 1/(1−exp(−hcw1/kT));
qv2 = 1/(1−exp(hcw2/kT));
qv3 = 1/(1−exp(−hcw3/kT));
diketahui M = 18,015; T = 1500; A = 27,8778; B = 14,5092; C = 9,2869;
w1 = 3656,7; w2 = 1594,8 w3 = 3755,8 c = kecepatan cahaya
h = tetapan Planck k = tetapan Boltzmann
Design Form
Tabel Properties Object Inspector:
Objek Properti Nilai Properti
StaticText1 Caption FUNGSI ENERGI BEBAS
GroupBox1 Caption INPUT
GroupBox2 Caption OUTPUT
Label1 Caption Temperatur (T)
Label2 Caption Molaritas (M)
Label3 Caption q
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
4
6.4 FUNGSI ENERGI BEBAS
Label4 Caption qr
Label5 Caption qt
Label6 Caption Qv
Label7 Caption qv3
Label8 Caption qv2
Label9 Caption qv1
Label10 Caption F
Button1 Caption HITUNG
Butoon2 Caption ULANG
Button3 Caption KELUAR
Edit1 Text (kosong)
Edit2 Text (kosong)
Edit3 Text (kosong)
Edit4 Text (kosong)
Edit5 Text (kosong)
Edit6 Text (kosong)
Edit7 Text (kosong)
Edit8 Text (kosong)
Edit9 Text (kosong)
Edit10 Text (kosong)
Listing Unit Editor
unit energibebas;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
StaticText1: TStaticText;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
4
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Const A = 27.8778;
B = 14.5092;
C = 9.2869;
w1= 3656.7;
w2= 1594.8;
w3= 3755.8;
k = 1.38e-23;
h = 6.626e-34;
No= 6.022e23;
cc= 2.99e8;
R = 8.314;
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
4
var
Form1: TForm1;
M,T,F,q,qt,qr,Qv,qv1,qv2,qv3 : real;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
M:= StrtoFloat(edit1.Text);
T:= StrtoFloat(edit1.Text);
qv1 := 1/(1-exp(-(h*cc*w1)/(k*T)));
qv2 := 1/(1-exp( (h*cc*w2)/(k*T)));
qv3 := 1/(1-exp(-(h*cc*w3)/(k*T)));
Qv := qv1*qv2*qv3;
qt := 0.02562*sqrt(M*M*M)*sqrt(T*T*T*T*T);
qr := 0.5*sqrt(1042.95*1042.95*1042.95)*(1/(sqrt(A*B*C)));
q := qt+qr+Qv;
F := -R*ln(q/No);
edit9.Text:=FloatToStr(qv1);
edit8.Text:=FloatToStr(qv2);
edit7.Text:=FloatToStr(qv3);
edit6.Text:=FloatToStr(Qv);
edit5.Text:=FloatToStr(qt);
edit4.Text:=FloatToStr(qr);
edit3.Text:=FloatToStr(q);
edit10.Text:=FloatToStr(F);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
application.Terminate;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
edit1.Text:= ' ' ;
edit2.Text:= ' ' ;
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
4
edit3.Text:= ' ' ;
edit4.Text:= ' ' ;
edit5.Text:= ' ' ;
edit6.Text:= ' ' ;
edit7.Text:= ' ' ;
edit8.Text:= ' ' ;
edit9.Text:= ' ' ;
edit10.Text:= ' ' ;
end;
end.
Hasil Running
Keterangan :
Program dibagi dalam 3 prosedur : data, rumus dan hasil. Masing-masing dibuat dulu,
lalu disusun urutannya dalam program utama. Dengan memanggil nama prosedurnya saja
maka komputer akan menjalankan program sesuai urutan dalam program utama. Perhatikan
pula cara penulisan konstanta di bagian deklarasi.
Menghitung fraksi molekul dalam range kecepatan c sampai c + dc per satuan luas
interval dengan rumus








−






=
RT
Mc
c
ec
RT
M
dc
dn
N
2
2
22
3
2
4
1
π
π
dimana M adalah massa molar molekul, R adalah konstanta gas, c adalah kecepatan cahaya,
T adalah temperatur.
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
4
6.5 DISTRIBUSI PROBABILITAS
Design Form
Tabel Properties Object Inspector:
Objek Properti Nilai Properti
StaticText1 Caption DISTRIBUSI PROBABILITAS
StaticText2 Caption INPUT
StaticText3 Caption OUTPUT
StaticText4 Caption RUMUS
Label1 Caption Temperatur (T)
Label2 Caption Massa molekuler (M)
Label3 Caption Distribusi Probabilitas (Dprob)
Button1 Caption HITUNG
Button2 Caption ULANG
Button3 Caption KELUAR
Image1 Picture Load : Dprob.jpg
Bevel1 Shape bsFrame
Style bsRaised
Bevel2 Shape bsFrame
Style bsRaised
Bevel3 Shape bsTopLine
Style bsLowered
Bevel4 Shape bsTopLine
Style bsLowered
Bevel5 Shape bsLeftLine
Style bsRaised
Bevel6 Shape bsFrame
Style bsRaised
Listing Unit Editor
unit distprob;
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
4
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, jpeg;
type
TForm1 = class(TForm)
Label1: TLabel;
StaticText1: TStaticText;
StaticText2: TStaticText;
StaticText3: TStaticText;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
StaticText4: TStaticText;
Bevel1: TBevel;
Bevel2: TBevel;
Bevel3: TBevel;
Bevel4: TBevel;
Bevel5: TBevel;
Image1: TImage;
Bevel6: TBevel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Const
c = 2.99792458E+8;
R = 8.31441;
var
Form1: TForm1;
M,T : real;
rumus1,rumus2,rumus3,rumus4,Dprob : real;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
4
M:= StrtoFloat(edit1.Text);
T:= StrtoFloat(edit2.Text);
rumus1 := M/(2*pi*R*T);
rumus2 := sqr(rumus1)*rumus1;
rumus3 := sqrt(rumus2);
rumus4 := (M*sqr(c))/(2*R*T);
Dprob := 4*pi*rumus3*sqr(c)*exp(-rumus4);
edit3.Text := floattostr(Dprob);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
edit1.Text := ' ' ;
edit2.Text := ' ' ;
edit3.Text := ' ' ;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;
end.
Hasil Running
Keterangan :
Karena kemungkinan harga fraksi molekul yang dihitung memiliki range di luar range
real maka dalam program ini digunakan tipe data double yang memiliki range
5.0e-324...1.7e308 dengan digit 15-16 dan ukuran byte 8, dapat juga menggunakan tipe data
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
4
extended yang memiliki range 3.4e-4932...1.1e4932 dengan digit 19-20 dan ukuran byte 10.
Untuk dapat menggunakan tipe data itu maka di atas program harus diletakkan pengarah
kompiler {$N+} sebagai kode pemakaian 80x87 Floating Point.
Penulisan rumus dalam Procedure rumus; juga dibuat bagian-bagian untuk
menghindari kesalahan. Prinsipnya adalah untuk memudahkan penulisan rumus dengan betul.
Menjumlah bilangan berurutan dari 1 sampai angka tertentu dengan rumus
∑=
=
n
i
iJumlah
1
Design Form
Program Praktikum_6;
Uses CRT;
Var sumi,n,i : word;
Begin
ClrScr;
Write('Bilangan maksimal = '); readln(n);
sumi := 0;
for i := 1 to n do
Begin
sumi := sumi + i;
WriteLn('i ',i,' = ',sumi:3);
End;
End.
Keterangan :
Program ini menggunakan looping (pengulangan) for .. to .. do untuk menjumlahkan
bilangan berurutan dari 1 sampai n. Penjumlahan tertulis pada persamaan sumi := sumi + i;
urutan angka yang dijumlah diatur oleh looping for i := 1 to n do.
Menghitung kekuatan ionik dengan rumus
∑= 2
)2/1( ii zcI
dimana I adalah kekuatan ionik, ci adalah konsentrasi ion ke-i, dan zi adalah muatan ion ke-i.
Kemudian rumus ini digunakan untuk menghitung koefisien aktivitas menggunakan teori
Debye-Huckel dengan rumus
±
±
±
±
=
−=
−=
γ
γ
γ
γ
ln
2/1
21
2/1
21
)(509,0*303,2ln
)(509,0log
e
Izz
Izz
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
4
6.6 JUMLAH BILANGAN
6.7 KOEFISIEN AKTIVITAS
dimana γ± adalah koefisien aktivitas ionik rata-rata.
Program Praktikum_7;
Uses crt;
Var i,n,z,sumz : integer;
c,absz,sumi,f1,f2,ion,koef : real;
Procedure input;
Begin
ClrScr;
Write('Banyaknya ion = '); ReadLn(n);
end;
Procedure zkali;
Begin
sumz := 1;
for i := 1 to n do
begin
write('Muatan ion ',i,' = '); readln(z);
sumz := sumz*z;
end;
absz := abs(sumz);
end;
Procedure ionic_strength;
Begin
sumi := 0;
for i := 1 to n do
Begin
Write('Konsentrasi ion ',i,' = '); ReadLn(c);
Write('Muatan ion ',i,' = '); ReadLn(z);
WriteLn;
sumi := sumi+c*z*z;
end;
ion := sumi/2;
end;
Procedure koef_aktivitas;
Begin
f1 := -0.509*absz*sqrt(ion);
f2 := f1*2.303;
koef := exp(f2);
writeln;
writeln('Kekuatan ionik = ',ion:10:6);
writeln('Koefisien aktivitas = ',koef:10:6);
end;
{Program utama}
Begin
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
5
ClrScr;
input;
zkali;
WriteLn;
ionic_strength;
koef_aktivitas;
ReadLn;
End.
Keterangan :
Procedure zkali; menghitung perkalian muatan ion ke-i dan harga absolutnya yaitu z1z2.
Looping perkalian ditulis dengan persamaan sumz := sumz*z;
Procedure ionic_strength; menghitung harga ∑ cizi
2
pada looping sumi := sumi+c*z*z; dan
menghitung harga kekuatan ionik pada rumus ion := sumi/2;
Procedure koef_aktivitas; menghitung harga koefisien aktivitas pada rumus
f1 := -0.509*absz*sqrt(ion);
f2 := f1*2.303;
koef := exp(f2);
dimana f1 = log γ± dan f2 = ln γ±, koef adalah koefisien aktivitas. Harga koefisien aktivitas
dapat juga dihitung menggunakan rumus koef = 10f1
.
Menghitung energi rotasi molekul diatomik dengan rumus
I
h
JJJerot 2
2
8
).1.()(
π
+=
J adalah bilangan kuantum rotasi (J = 0, 1, 2, 3, ….)
I adalah momen inersia, I = µ r2
untuk molekul diatomik
h adalah konstanta Planck
degenerasi keadaan energi J adalah 2J + 1.
Rumus fungsi partisi rotasi adalah
∑ +=
∞
=
+
−
0
.28
2)1(
).12(
J
kTI
hJJ
rot eJq π
k adalah konstanta Boltzmann
r adalah jarak diantara atom-atom
µ adalah massa tereduksi, 







+ 21
21.
mm
mm
mi adalah massa atom i (berat atom / konstanta Avogadro)
{$N+}
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
5
6.8 ENERGI ROTASI DAN FUNGSI PARTISI
Program Praktikum_8;
Uses CRT;
Const maksimal = 100;
planck = 6.626076e-34; {Joule-detik}
Boltzmann = 1.38066e-23; {Joule/Kelvin}
Avogadro = 6.02214e+23; {1/mol}
Type
urut = array[0..maksimal] of double;
Var
J,Jmax : integer;
h2,ri,ri2,m1km2,m1tm2,faktor,Inersia,RIkatan,pi2,rumus1,masa1,masa2 : double;
a,k,T : real;
Expon1,Expon2,FPar,Energi : urut;
Procedure input;
Begin
Write('Masa atom 1 dalam gram/mol = '); ReadLn(m1);
Write('Masa atom 2 dalam gram/mol = '); ReadLn(m2);
Write('Panjang ikatan dalam Angstrom = '); ReadLn(R);
Write('Temperatur dalam Kelvin = '); ReadLn(T);
Write('Maximal J = '); ReadLn(Jmax);
end;
Procedure rumus;
Begin
k := Boltzmann;
a := avogadro;
h2 := sqr(planck);
ri := R * 1e-10;
ri2 := sqr(ri);
m1km2 := m1 * m2;
m1tm2 := m1 + m2;
faktor := 1 / (a * 1000);
Inersia := (m1km2/m1tm2) * faktor * ri2;
pi2 := sqr(pi);
rumus1 := h2 / (8 * pi2 * Inersia);
j := 0;
Fpar[j] := 0;
Repeat
Energi[J] := rumus1 * J * (J + 1);
Expon1[j] := exp(-energi[j]/(k*T));
Expon2[j] := ((2*j)+1)*Expon1[j];
Fpar[j] := Fpar[j] + Expon2[j];
j := j + 1;
Until j > Jmax;
end;
Procedure output;
Begin
for J := 0 To Jmax do
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
5
Begin
WriteLn('Energi ',J,' = ',Energi[J], 'F partisi ',j,' = ',Fpar[j]);
end;
end;
{program utama}
Begin
ClrScr;
input;
rumus;
WriteLn;
output;
ReadLn;
End.
Keterangan :
Dalam program ini diberikan tipe data baru untuk mengurutkan atau menderetkan data
yaitu menggunakan
Type urut = array[0..maksimal] of double;
Variabel yang menggunakan tipe data array ditulis dengan kotak […] seperti contoh berikut
Energi[J] := rumus1 * J * (J + 1);
Expon1[j] := exp(-energi[j]/(k*T));
Looping untuk menghitung fungsi partisi rotasi adalah
j := 0;
Fpar[j] := 0;
Repeat
Energi[J] := rumus1 * J * (J + 1);
Expon1[j] := exp(-energi[j]/(k*T));
Expon2[j] := ((2*j)+1)*Expon1[j];
Fpar[j] := Fpar[j] + Expon2[j];
j := j + 1;
Until j > Jmax;
Looping Repeat……Until menghitung energi rotasi dari bilangan kuantum J = 0 sampai batas
looping yaitu Until J > Jmax; Batas looping ini menunjukkan jika J > Jmax maka tidak lagi
menghitung besarnya energi rotasi, maksimal J adalah Jmax. Batas looping dapat juga
diungkapkan dengan cara lain misalnya Until J := Jmax + 1; Maksudnya looping akan
berhenti jika ditemui harga J = Jmax + 1. Penambahan harga J menggunakan rumus J := J +
1; atau dapat juga menggunakan inc(J,1);
Menghitung energi aktivasi berdasarkan data beberapa temperatur dan konstanta laju
reaksi menggunakan rumus
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
5
6.9 ENERGI AKTIVASI
RT
E
eAk
−
= .
k adalah konstanta laju raksi, A adalah faktor Arrhenius, E adalah energi aktivasi dan T
adalah temperatur.
Persamaan Arrhenius dapat diubah dalam bentuk logaritma sebagai berikut
RT
E
Ak
RT
E
Ak
303,2
loglog
atau
lnln
−=
−=
Energi aktivasi reaksi dapat ditentukan jika konstanta laju reaksi diukur pada berbagai
temperatur berbeda. Plotting log k terhadap 1/T akan menghasilkan slope sebesar −E /
2,303R, sehingga harga E = −2,303 x slope.
Program Praktikum_9;
Uses CRT;
Const R = 8.314;
Var T,K,LK,A,sT : array[1..50] of real;
Ea,slope,sumA,rA : real;
jd,i : byte;
Procedure Input;
Begin
Write('Jumlah data = '); ReadLn(jd);
WriteLn;
for i := 1 to jd do
begin
Write('Temperatur ',i:2,' = '); ReadLn(T[i]);
Write('Konstanta ',i:2,' = '); ReadLn(K[i]);
WriteLn;
end;
end;
Procedure Hitung_Ea;
Begin
WriteLn;
WriteLn('T':3,'1/T':13,'Ln K':22);
for i := 1 to jd do
begin
LK[i] := ln(K[i]);
sT[i] := 1/T[i];
WriteLn(T[i]:6:3,sT[i]:13:6,LK[i]:20:4);
end;
slope := (LK[jd]-LK[1])/(sT[1]-sT[jd]);
slope := abs(slope);
Ea := slope*R;
end;
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
5
Procedure Hitung_A;
Begin
sumA := 0;
for i := 1 to jd do
begin
A[i] := K[i]/exp(-Ea/(R*T[i]));
sumA := sumA + A[i];
end;
rA := sumA/jd;
end;
Procedure Hasil;
Begin
WriteLn;
WriteLn('Slope = ',slope:6:3,' Energi Aktivasi = ':15,Ea:10:3);
WriteLn;
WriteLn('Fak Frek = ',rA:15);
end;
{Program Utama}
Begin
Repeat
ClrScr;
Input;
Hitung_Ea;
Hitung_A;
Hasil;
Until ReadKey = #27;
End.
Keterangan :
Harga slope dalam program ini dicari dari selisih data pertama dengan data terakhir.
Mungkin kurang tepat tetapi sebagai contoh hitungan dapat dipakai untuk perkiraan harga.
Dapat juga dicoba menggunakan cara rata-rata seperti yang diterapkan untuk menghitung
harga faktor Arrhenius. Looping for … to … do dapat dipakai untuk menghitung harga 1/T
dan ln k, dan harga faktor Arrhenius.
Dalam program ini dikenalkan cara pengulangan program menggunakan looping
Repeat … Until. Pengu-langan akan dilakukan jika tombol yang ditekan (ReadKey) adalah
selain tombol <Esc>. Jadi jika ditekan tombol <Esc> dengan kode ASCII # 27 maka
program akan selesai.
Satu liter larutan yang mengandung 0,001 mol NaCl dicampur dengan 1 liter larutan
yang mengandung 0,001 mol AgNO3. Bila Ksp AgCl = 1,8 x 10−10
apakah terjadi endapan ?
Program Praktikum_10;
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
5
6.10 KELARUTAN
Uses CRT;
Const KspAgCl = 1.8e-10;
Var a,b,c,d,e,f,g,h : real;
kd,opsi : char;
simpulan : string[20];
Label 01;
Begin
01 :
ClrScr;
WriteLn('Larutan a liter yang mengandung b mol NaCl dicampur dengan ');
WriteLn('c liter larutan yang mengandung d mol AgNO3.');
WriteLn('Apakah terjadi Endapan ?');
WriteLn;
WriteLn('Ksp AgCl = ',KspAgCl:10);
Write('Diketahui a = '); ReadLn(a);
Write(' b = '); ReadLn(b);
Write(' c = '); ReadLn(c);
Write(' d = '); ReadLn(d);
WriteLn('--------------------------------------');
WriteLn;
WriteLn('Jawaban :');
WriteLn(a:6:4,' liter larutan mengandung ',b:8:6,' mol Cl-');
delay(1000);
WriteLn(c:6:4,' liter larutan mengandung ',d:8:6,' mol Ag+');
delay(1000);
e := a + c;
WriteLn('Volume campuran = ',e:6:4,' liter');
WriteLn;
f := b/e;
g := d/e;
WriteLn('[Cl-] = ',b:8:6,' / ',e:6:4,' mol/liter = ',f:8:6,' mol/liter');
delay(1000);
WriteLn('[Ag+] = ',d:8:6,' / ',e:6:4,' mol/liter = ',g:8:6,' mol/liter');
delay(1000);
WriteLn;
h := f*g;
WriteLn('[Ag+][Cl-] = ',f:8:6,' x ',g:8:6,' = ',h:10);
delay(2000);
WriteLn;
if h < KspAgCl then
Begin
kd := '<'; simpulan := 'tidak mengEndap';
End else
Begin
kd := '>'; simpulan := 'mengEndap';
End;
WriteLn('Karena [Ag+][Cl-] ',kd,' Ksp AgCl maka AgCl ',simpulan);
WriteLn('<Esc> Keluar <Enter> Ulang');
opsi := ReadKey;
if opsi = #13 then GoTo 01 else halt;
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
5
ClrScr;
End.
Keterangan :
Dalam program ini dikenalkan teknik menampilkan soal dan jawaban secara bertahap.
Untuk mengatur waktu munculnya jawaban digunakan prosedur delay(x) dimana x adalah
variabel waktu yang bernilai 1/1000 detik. Jadi jika akan menahan tampilan selama 2 detik
maka x diberi harga 2000. Untuk memilih jawaban mengendap atau tidak mengendap
digunakan seleksi dengan statemen if … then … else …. Variabel kd bertipe char yaitu tipe
data yang berisi 1 karakter baik berupa angka atau huruf atau simbol, sedangkan variabel
simpulan bertipe string. Untuk penghematan memori maka panjangnya string dapat dibatasi,
misal sebanyal 20 karakter dengan penulisan string[20]. Teknik pengulangan program
dilakukan dengan prosedur label yang dideklarasikan dengan harga tertentu misalnya 01. Jika
ditekan tombol <enter> dengan kode ASCII #13 maka program akan mengulang mulai dari
nomor label ditempatkan yaitu mulai dari letak harga label 01 pada badan program. Jika yang
ditekan bukan tombol <enter> maka program akan berhenti. Prosedur halt digunakan untuk
keluar dari program.
Persen massa C, H dan O dalam vitamin C ditentukan secara eksperimen dengan
membakar 2,00 mg cuplikan. Massa CO2 dan H2O yang terbentuk berturut-turut 3,00 mg dan
0,816 mg. Tentukan persen massa C, H dan O, rumus empiris vitamin C, dan rumus
molekulnya jika massa molekul relatifnya 180.
Program Praktikum_11;
Uses CRT;
Const ArC = 12; ArH = 1.01; ArO = 16; MrCO2 = 44; MrH2O = 18;
pres = 0.1;
Var mCup,mCO2,mH2O,mC,mH,mO,pC,pH,pO,molC,molH,molO : real;
pmolC,pmolH,pmolO,pmolCi,pmolHi,pmolOi,
dpmolC,dpmolH,dpmolO : real;
koefCm,koefHm,koefOm,koefCe,koefHe,koefOe,i : byte;
rpmolC,rpmolH,rpmolO : byte;
Mr,pembagi,faktor,MasRumEm : real;
Y,lagi : char;
Begin
Repeat
ClrScr;
Write('Berat cuplikan dalam mg = '); ReadLn(mCup);
Write('Berat CO2 yang terbentuk dalam mg = '); ReadLn(mCO2);
Write('Berat H2O yang terbentuk dalam mg = '); ReadLn(mH2O);
Write('Massa Molekul Relatif = '); ReadLn(Mr);
{rumus }
mC := ((1*ArC)/MrCO2)*mCO2;
mH := ((2*ArH)/MrH2O)*mH2O;
pC := (mC/mCup)*100;
pH := (mH/mCup)*100;
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
5
6.11 RUMUS EMPIRIS MOLEKUL
pO := 100 - pC - pH;
molC := pC/ArC;
molH := pH/ArH;
molO := pO/ArO;
if (molC < molH) and (molC < molO) then pembagi := molC;
if (molH < molC) and (molH < molO) then pembagi := molH;
if (molO < molC) and (molO < molH) then pembagi := molO;
pmolC := molC/pembagi;
pmolH := molH/pembagi;
pmolO := molO/pembagi;
i := 1;
Repeat
i := i + 1;
pmolCi := pmolC*i;
pmolHi := pmolH*i;
pmolOi := pmolO*i;
rpmolC := round(pmolCi);
rpmolH := round(pmolHi);
rpmolO := round(pmolOi);
dpmolC := abs(pmolCi - rpmolC);
dpmolH := abs(pmolHi - rpmolH);
dpmolO := abs(pmolOi - rpmolO);
Until (dpmolC <= pres) and (dpmolH <= pres) and (dpmolO <= pres);
koefCe := round(pmolCi);
koefHe := round(pmolHi);
koefOe := round(pmolOi);
MasRumEm := (koefCe*ArC)+(koefHe*ArH)+(koefOe*ArO);
faktor := Mr/MasRumEm;
koefCm := round(faktor*koefCe);
koefHm := round(faktor*koefHe);
koefOm := round(faktor*koefOe);
{Output}
ClrScr;
WriteLn('Berat cuplikan = ',mcup:6:3,' mg');
WriteLn('Berat CO2 yang terbentuk = ',mCO2:6:3,' mg');
WriteLn('Berat H2O yang terbentuk = ',mH2O:6:3,' mg');
WriteLn('Massa Molekul Relatif = ',Mr:6:3);
WriteLn;
WriteLn('Massa C = ',mC:6:3,' mg');
WriteLn('Massa H = ',mH:6:3,' mg');
WriteLn;
WriteLn('Persen massa C = ',pC:6:2,' %');
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
5
WriteLn('Persen Massa H = ',pH:6:2,' %');
WriteLn('Persen Massa O = ',pO:6:2,' %');
WriteLn;
WriteLn('Rumus Empiris = C',pmolC:2:2,' H',pmolH:2:2,' O',pmolO:2:2);
WriteLn(' = C',koefCe,' H',koefHe,' O',koefOe);
WriteLn;
WriteLn('Rumus Molekul = C',koefCm,' H',koefHm,' O',koefOm);
WriteLn;
Write(‘Lagi (y/t) ? ); ReadLn(lagi);
Until UpCase(lagi) <> ‘Y’;
End.
Keterangan :
Mula-mula menghitung massa C dan H (mC, dan mH), lalu menghitung persen C, H
dan O (pC, pH, dan pO). Mol C, H dan O (molC, molH, dan molO) dihitung dari pembagian
persen C, H dan O dengan massa atom masing-masing. Menentukan perbandingan mol
(pmolC,pmolH, dan pmolO) dengan mencari dulu jumlah mol yang paling kecil sebagai
pembaginya dengan menggunakan statemen if … then … sebagai berikut
if (molC < molH) and (molC < molO) then pembagi := molC;
if (molH < molC) and (molH < molO) then pembagi := molH;
if (molO < molC) and (molO < molH) then pembagi := molO;
Koefisien rumus empiris ditentukan dengan menggunakan looping Repeat … Until sebagai
berikut
i := 1;
Repeat
i := i + 1;
pmolCi := pmolC*i;
pmolHi := pmolH*i;
pmolOi := pmolO*i;
rpmolC := round(pmolCi);
rpmolH := round(pmolHi);
rpmolO := round(pmolOi);
dpmolC := abs(pmolCi - rpmolC);
dpmolH := abs(pmolHi - rpmolH);
dpmolO := abs(pmolOi - rpmolO);
Until (dpmolC <= pres) and (dpmolH <= pres) and (dpmolO <= pres);
koefCe := round(pmolCi);
koefHe := round(pmolHi);
koefOe := round(pmolOi);
Selanjutnya menentukan koefisien rumus molekul dengan terlebih dulu menghitung massa
rumus empiris dan faktor pengalinya.
MasRumEm := (koefCe*ArC)+(koefHe*ArH)+(koefOe*ArO);
faktor := Mr/MasRumEm;
koefCm := round(faktor*koefCe);
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
5
koefHm := round(faktor*koefHe);
koefOm := round(faktor*koefOe);
Dalam program ini juga dikenalkan cara mengulang program menggunakan prosedur
UpCase(lagi), Prosedur ini untuk mengubah karakter kecil menjadi besar. Jika ditekan ‘y’
(huruf kecil) maka UpCase akan mengubahnya menjadi huruf besar ‘Y’ sehingga sesuai
dengan persyaratan berakhirnya program. Jika ditekan selain ‘y’ atau ‘Y’ misalnya ‘t' atau ‘T'
maka program akan berulang.
6.12 ENERGI PENGIKAT INTI
Pada reaksi pembentukan inti Helium dari partikel proton dan netron. Reaksi
pembentukan inti Helium sebagai berikut
EHenH +→+ 4
2
1
0
1
1 22
Diketahui massa proton sebesar 1,008142 sma, massa netron sebesar 1,008982 sma dan
massa inti Helium sebesar 4,002776 sma. Hitunglah energi ikatan per atom He dalam satuan
erg , Joule dan MeV !
Program Praktikum_12;
Uses CRT;
Const mprot = 1.008142; {sma}
mnet = 1.008982; {sma}
ccah = 2.99e10; {cm/det}
fgram = 1.66e-24; {faktor pengubah dari sma ke gram}
fJoule= 1e-7; {faktor pengubah dari erg ke Joule}
Mev = 1.603e-6; {erg}
Var E,Ej,Ev,m,jmt1,jmt2,jmp,jmn,dm,dmg : real;
jp,jn : byte;
opsi : char;
Label 01;
Begin
01:
ClrScr;
GoToXY(10,3); Write('Sebelum pembentukan ikatan : ');
GoToXY(10,4); Write('Jumlah proton penyusun = '); Readln(jp);
GoToXY(10,5); Write('Jumlah netron penyusun = '); Readln(jn);
GoToXY(10,7); Write('Setelah pembentukan ikatan : ');
GoToXY(10,8); Write('Massa inti setelah pembentukan ikatan = '); Readln(jmt2);
jmp := jp*mprot; {jumlah massa proton}
jmn := jn*mnet; {jumlah massa netron}
jmt1 := jmp+jmn; {jumlah massa partikel sebelum pembentukan}
dm := jmt1-jmt2; {selisih massa dalam sma}
dmg := dm*fgram; {selisih massa dalam gram}
E := dmg*sqr(ccah); {Energi ikat per atom dalam erg}
Ej := E*fJoule; {Energi ikat per atom dalam Joule}
Ev := E/Mev; {Energi ikat per atom dalam Mev}
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
6
ClrScr;
GoToXY(10,2); Write('Penghitungan energi ikatan : ');
GoToXY(10,4); Write('Jumlah massa proton penyusun = ',jmp:10:6, ' sma');
GoToXY(10,5); Write('Jumlah massa netron penyusun = ',jmn:10:6, ' sma');
GoToXY(10,6); Write('-------------------------------------------- + ');
GoToXY(10,7); Write('Jumlah massa partikel penyusun = ',jmt1:10:6,' sma');
GoToXY(10,8); Write('Massa inti setelah berikatan = ',jmt2:10:6,' sma');
GoToXY(10,9); Write('-------------------------------------------- - ');
GoToXY(10,10); Write('Selisih massa = ',dm:10:6, ' sma');
GoToXY(10,11); Write(' = ',dm:10:6,' * ',fgram:10,' gram');
GoToXY(10,12); Write(' = ',(dm*fgram):10,' gram');
GoToXY(10,14); Write('Energi ikatan per atom = ',E:15,' erg');
GoToXY(10,15); Write(' = ',Ej:15,' Joule');
GoToXY(10,16); Write(' = ',Ev:15,' Mev');
GoToXY(10,22); Write('Ulangi ? Tekan (Y/T) ');
opsi := ReadKey;
Case opsi of
't','T' : halt;
'y','Y' : goto 01;
end;
End.
Keterangan :
Program ini mengenalkan penempatan string pada koordinat XY mode teks dengan
posisi maksimal layar (80,25) menggunakan prosedur GoToXY(X,Y). Pengulangan program
menggunakan seleksi Case … of dan Label. Jika penekanan tombol (opsi := ReadKey) adalah
‘t' atau ‘T' maka program akan keluar (halt) dan jika penekanan tombol adalah ‘y’ atau ‘Y’
maka program akan mengulang mulai posisi Label 01 pada badan program.
Permainan tebakan lambang dan nomor atom dapat dibuat dengan menggunakan tipe
data string berupa deret (array). Semua nomor, lambang, nama, dan berat atom dapat
disimpan sebagai data konstanta pada deklarasi.
Program Praktikum_13;
Uses CRT;
Const
nomer : array[1..112] of string[3] =
('1','2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13',
'14','15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28','29','30',
'31','32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45','46','47',
'48','49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60', '61', '62','63','64',
'65','66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79','80','81',
'82','83', '84', '85', '86', '87', '88', '89', '90', '91', '92', '93', '94', '95', '96','97','98',
'99','100','101','102','103','104','105','106','107','108','109','110','111','112');
Lambang : array[1..112] of string[3] =
('H','He','Li','Be','B', 'C', 'N', 'O', 'F', 'Ne','Na',
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
6
6.13 TEBAKAN LAMBANG DAN NOMOR ATOM
'Mg','Al','Si','P', 'S', 'Cl','Ar','K', 'Ca','Sc','Ti','V', 'Cr','Mn','Fe', 'Co', 'Ni',
'Cu','Zn','Ga','Ge','As','Se','Br','Kr','Rb','Sr','Y', 'Zr','Nb','Mo','Tc', 'Ru',
'Rh','Pd','Ag','Cd','In','Sn','Sb','Te','I', 'Xe','Cs','Ba','La','Ce','Pr', 'Nd', 'Pm',
'Sm','Eu','Gd','Tb','Dy','Ho','Er','Tm','Yb','Lu','Hf','Ta','W', 'Re','Os', 'Ir', 'Pt',
'Au','Hg','Tl','Pb','Bi','Po','At','Rn','Fr','Ra','Ac','Th','Pa','U', 'Np', 'Pu', 'Am',
'Cm','Bk','Cf','Es','Fm','Md','No','Lr','Rf','Ha','Sg','Ns','Hs','Mt','Uun','Uuu','Uub');
Nama : array[1..112] of string[20] =
('Hydrogen','Helium','Lithium','Beryllium','Boron',
'Carbon','Nitrogen','Oxygen','Fluorine','Neon','Sodium','Magnesium','Aluminium',
'Silicon','Phosphorus','Sulfur','Chlorine','Argon','Potassium','Calcium','Scandium',
'Titanium','Vanadium','Chromium','Manganese','Iron','Cobalt','Nickel','Copper','Zinc',
'Gallium','Germanium','Arsenic','Selenium','Bromine','Krypton','Rubidium','Strontium',
'Yttrium','Zirconium','Niobium','Molybdenum','Technetium','Ruthenium','Rhodium',
'Palladium','Silver','Cadmium','Indium','Tin','Antimony','Tellurium','Iodine','Xenon',
'Cesium','Barium','Lanthanum','Cerium','Praseodymium','Neodymium','Promethium','Samariu
m',
'Europium','Gadolinium','Terbium','Dysprosium','Holmium','Erbium','Thulium','Ytterbium',
'Lutetium','Hafnium','Tantalum','Tungsten','Rhenium','Osmium','Iridium','Platinum',
'Gold','Mercury','Thallium','Lead','Bismuth','Polonium','Astatine','Radon','Francium',
'Radium','Actinium','Thorium','Protactinium','Uranium','Neptunium','Plutonium','Americium',
'Curium','Berkelium','Californium','Einsteinium','Fermium','Mendelevium','Nobelium',
'Lawrencium','Rutherfordium','Hahnium','Seaborgium','Neilsbohrium','Hassium','Meitnerium',
'Ununnilium','Unununium','Ununbium');
Berat : array[1..112] of string[5] =
('1.008','4.003','6.939','9.012','10.81','12.01','14.01',
'15.99','18.99','20.18','22.99','24.31','26.98','28.09','30.97','32.06','35.45','39.95',
'39.10','40.08','44.96','47.90','50.94','51.99','54.94','55.85','58.93','58.71','63.54',
'65.37','69.72','72.59','74.92','78.96','79.91','83.80','85.47','87.62','88.91','91.22',
'92.91','95.94',' 99 ','101.1','102.9','106.4','107.9','112.4','114.8','118.7','121.8',
'127.6','126.9','131.3','132.9','137.3','138.9','140.1','140.9','144.2',' 147 ','150.4',
'151.9','157.3','158.9','162.5','164.9','167.3','168.9','174.1','174.9','178.5','180.9',
'183.9','186.2','190.2','192.2','195.1','196.9','200.6','204.4','207.2','208.9',' 210 ',
' 210 ',' 222 ',' 223 ',' 226 ',' 227 ','238.0',' 231 ','238.0',' 237 ',' 242 ',' 243 ',
' 247 ',' 249 ',' 251 ',' 254 ',' 253 ',' 256 ',' 254 ',' 257 ',' 260 ',' 262 ',' 263 ',
' 262 ',' 265 ',' 266 ',' 269 ',' 272 ',' 277 ');
Var a,b,i,ran,skor : byte;
zat,zat2,jawab : string;
opsi,opsi2,opsi3 : char;
Procedure Lambang_atom;
Begin
ClrScr;
GoToXY(12,2); Write('Komputer sudah memberi nomer atom dan berat atom, ');
GoToXY(12,3); Write('Anda diminta untuk mengisi lambang atom pada tanda (-) ');
GoToXY(12,4);
Write('=====================================================');
GoToXY(12,24); Write('Kalau bingung teken <Enter> sazaaaa ....');
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
6
Randomize;
a := Random(60);
a := 2 + a;
if a < 6 then a := 6;
if a > 60 then a := 60;
b := Random(19);
if b < 7 then b := 7;
if b > 19 then b := 19;
ran := random(112);
zat := nomer[ran];
GoToXY(a,b+1); Write(zat);
for i := 1 to 112 do
Begin
if zat = nomer[i] then
Begin
GoToXY(a-1,b-1); Write(berat[i]);
skor := 0;
Repeat
GoToXY(a+3,b); Write('error');
delay(100);
GoToXY(a+3,b); ClrEol;
GoToXY(a+3,b); Write('-');
GoToXY(a+3,b); readln(jawab);
if jawab <> lambang[i] then
Begin
GoToXY(a+3,b); Write(#7);
GoToXY(a+3,b); Write('error');
end;
skor := skor + 1;
if jawab = '' then
Begin
GoToXY(a+3,b); Write(lambang[i],' ');
GoToXY(1,24); ClrEol;
GoToXY(12,24); Write('<Esc> Menu');
GoToXY(50,24); Write('<Enter> Ulang');
Exit;
end;
until jawab = lambang[i];
skor := 11 - skor;
if jawab = lambang[i] then
Begin
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
6
Write(#7);
GoToXY(1,24); ClrEol;
GoToXY(30,22); Write('Benar skor anda ',skor);
GoToXY(12,24); Write('<Esc> Menu');
GoToXY(50,24); Write('<Enter> Ulang');
end;
end;
end;
end;
Procedure nomor_atom;
Begin
ClrScr;
GoToXY(12,2); Write('Komputer sudah memberi Lambang unsur dan berat atom, ');
GoToXY(12,3); Write('Anda diminta untuk menebak nomor atom pada tanda (-) ');
GoToXY(12,4);
Write('=====================================================');
GoToXY(12,24); Write('Kalau bingung teken <Enter> sazaaaa ....');
Randomize;
a := Random(60);
a := 2 + a;
if a < 6 then a := 6;
if a > 60 then a := 60;
b := Random(19);
if b < 7 then b := 7;
if b > 19 then b := 19;
ran := Random(112);
zat := lambang[ran];
zat2:= nama[ran];
GoToXY(a+3,b); Write(zat,' (',zat2,')');
for i := 1 to 112 do
Begin
if zat = lambang[i] then
Begin
GoToXY(a-1,b-1); Write(berat[i]);
skor := 0;
Repeat
GoToXY(a,b+1); Write('error');
delay(100);
GoToXY(a,b+1); ClrEol;
GoToXY(a,b+1); Write('-');
GoToXY(a,b+1); ReadLn(jawab);
if jawab <> nomer[i] then
Begin
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
6
GoToXY(a,b+1); Write(#7);
GoToXY(a,b+1); Write('error');
end;
skor := skor + 1;
if jawab = '' then
Begin
Write(#7);
GoToXY(a,b+1); Write(nomer[i],' ');
GoToXY(1,24); ClrEol;
GoToXY(12,24); Write('<Esc> Menu');
GoToXY(50,24); Write('<Enter> Ulang');
Exit;
end;
until (jawab = nomer[i]);
skor := 11 - skor;
if jawab = nomer[i] then
Begin
Write(#7);
GoToXY(1,24); ClrEol;
GoToXY(30,22); Write('Benar skor anda ',skor);
GoToXY(12,24); Write('<Esc> Menu');
GoToXY(50,24); Write('<Enter> Ulang');
end;
end;
end;
end;
Begin
Repeat
ClrScr;
TextColor(yellow);
TextBackGround(red);
GoToXY(20,5); Write(' MENU TEBAKAN SISTEM PERIODIK ');
GoToXY(20,7); Write(' 1. MENEBAK NOMOR ATOM ');
GoToXY(20,8); Write(' 2. MENEBAK LAMBANG ATOM ');
GoToXY(20,9); Write(' 3. KELUAR ');
GoToXY(20,11); Write(' OPSI : ');
GoToXY(28,11); ReadLn(opsi);
TextBackGround(blue);
Case opsi of
'1' : Repeat
nomor_atom;
opsi2 := ReadKey;
Until opsi2 = #27;
'2' : Repeat
Lambang_atom;
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
6
opsi2 := ReadKey;
Until opsi2 = #27;
'3' : Halt;
End;
Until opsi3 = #27;
End.
Keterangan :
Teknik penempatan string pada posisi (X,Y) dilakukan secara acak menggunakan
fungsi random. Untuk mengawali pembangkit bilangan acak maka sebelumnya dipanggil dulu
prosedur Randomize. Jika pada fungsi random tidak dituliskan range-nya maka akan
dihasilkan bilangan acak dengan range 0 ≤ X < 1, sebaliknya jika dituliskan range-nya maka
harus bertipe Word hasilnya adalah 0 ≤ X < range. Jika range = 0 maka hasilnya adalah 0.
Teknik penempatan acak hanya sekedar untuk daya tarik program.
Untuk menghapus text dikenalkan prosedur ClrEol (Clear End Of Line) yang akan
menghapus mulai posisi X yang ditentukan sampai akhir baris. Untuk menandai salah atau
benarnya jawaban diberi tanda bel menggunakan prosedur Write(#7); yang akan berfungsi
pada mode DOS saja. Dalam program juga dikenalkan penampilan contoh menu program
dengan 3 pilihan. Seleksi pilihan menggunakan prosedur ReadLn(opsi) dimana opsi bertipe
char. Dapat juga prosedur ReadLn(opsi)diganti dengan opsi := ReadKey; yang pada
pengoperasiannya jika pilihan telah ditekan maka program langsung running tanpa terlebih
dahulu menekan tombol <Enter>.
Untuk menambah daya tarik tampilan dilakukan teknik pewarnaan teks dan latar
belakang. Pewarnaan teks menggunakan prosedur TextColor(X); dimana X bertipe Byte
dengan range 0 … 15 sesuai dengan harga konstanta warna yang didefinisikan pada CRT.
Untuk pengaturan latar belakang digunakan prosedur TextBackGround(X); dimana X bertipe
Byte dengan range 0 … 7 sesuai dengan harga konstanta warna yang didefinisikan pada CRT.
Nama warna dapat juga langsung dituliskan menggunakan istilah Inggris seperti yang telah
didefinisikan pada CRT.
Untuk menjalankan pilihan opsi digunakan aturan seleksi Case … of. Setiap pilihan
opsi juga dapat dilakukan pengulangan program menggunakan looping Repeat … Until.
Untuk scanning penekanan tombol digunakan penjebak opsi2 := ReadKey. Pilihan opsi akan
berhenti kalau tombol yang ditekan adalah tombol <Esc> dengan kode ASCII #27, jika
tombol lain, misalnya <Enter> maka pilihan opsi tersebut akan diulang. Pengulangan program
keseluruhan menggunakan teknik yang sama, jika ditekan <Esc> maka program akan
berhenti.
Menghitung harga konstanta laju reaksi (k) berbagai orde reaksi apabila data
konsentrasi awal , waktu dan konsentrasi setiap waktu diketahui. Rumusnya
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
6
6.14 kONSTANTA LAJU REAKSI








−=







 −
=








=
22
11
.2
1
:3Orde
.
1
:2Orde
ln
1
:1Orde
ot
r
to
to
r
t
o
r
CCt
k
CC
CC
t
k
C
C
t
k
Harga kr diperhitungkan dari harga k setiap waktu dan dicari rata-ratanya.
Program Praktikum_14;
Uses CRT;
Const menit = 100;
Var Kt,Ct,T : array[0..menit] of real;
Cawal,Kr : real;
Jdata,i,pilih : byte;
opsi : char;
Label 01;
Procedure input;
Begin
Repeat
ClrScr;
Write('Orde berapa ? '); Read(pilih);
Until pilih < 4;
Write('Konsentrasi awal ? '); ReadLn(Cawal);
WriteLn;
Write('Berapa data masukkan ? '); ReadLn(Jdata);
WriteLn;
i := 1;
While i <= Jdata do
Begin
Write('t ',i,' = '); Read(t[i]);
Write('C ':10,i,' = '); Read(Ct[i]);
inc(i,1);
WriteLn;
End;
End;
Procedure order1;
Begin
Kr := 0;
i := 1;
While i <= Jdata do
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
6
Begin
Kt[i] := (1/t[i])*ln(Cawal/Ct[i]);
Kr := Kr + Kt[i];
inc(i,1);
End;
Kr := Kr/Jdata;
End;
Procedure order2;
Begin
Kr := 0;
i := 1;
Repeat
Kt[i] := (1/t[i])*((Cawal-Ct[i])/(Cawal*Ct[i]));
Kr := Kr + Kt[i];
inc(i,1);
Until i > Jdata;
Kr := Kr/Jdata;
End;
Procedure order3;
Begin
Kr := 0;
for i := Jdata DownTo 1 do
Begin
Kt[i] := (1/(2*t[i]*sqr(Ct[i])))-(1/(2* t[i]*sqr(Cawal)));
Kr := Kr + Kt[i];
End;
Kr := Kr/Jdata;
End;
Procedure output; forward; {memanggil Procedure yang ada di bawah}
Procedure pilihan(pilih : byte);
Begin
Case pilih of
1 : Begin
order1; output;
End;
2 : Begin
order2; output;
End;
3 : Begin
order3; output;
End;
End;
End;
Procedure output;
Begin
ClrScr;
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
6
WriteLn('Konsentrasi awal = ',Cawal:8:4);
WriteLn;
for i := 1 to Jdata do
Begin
WriteLn('t(',i,') = ',t[i]:6:4,'':5,'Ct(',i,') = ',
Ct[i]:8:4,'':5,'Kt(',i,') = ', Kt[i]:10:6);
End;
WriteLn;
WriteLn('K reaksi = ',Kr:10:6);
GoToXY(5,24); Write('<Esc> Keluar <Enter> Ulang');
End;
{Program utama}
Begin
01 :
ClrScr;
input;
pilihan(pilih);
opsi := ReadKey;
if opsi = #13 then GoTo 01 else halt;
ClrScr;
End.
Keterangan :
Program mengenalkan beberapa bentuk looping yaitu While i <= Jdata do, mungkin
bisa diterjemahkan sebagai berikut “selagi i kurang dari atau sama dengan Jdata maka lakukan
…..”. Syarat batasnya adalah i <= Jdata sehingga jika i > Jdata maka program akan berhenti.
Looping lain Repeat …… Until i > Jdata, dan loopong for i := Jdata DownTo 1 do yang
merupakan kebalikan dari looping for… to … do. Untuk memanggil prosedur yang ada di
bawahnya dalam program ini dikenalkan penggunaan prosedur forward . Listing prosedur
Output ada di bawah prosedur Pilihan padahal dalam prosedur Pilihan ada pemanggilan
terhadap prosedur Output, untuk mengatasi digunakan prosedur forward dengan terlebih dulu
menempatkan header prosedur Output.
Procedure output; forward; {memanggil Procedure yang ada di bawah}
Procedure pilihan(pilih : byte);
Begin
Case pilih of
1 : Begin
order1; output;
End;
…………………………;
End;
End;
Procedure output;
Begin
………………………;
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
6
End;
Menghitung orde reaksi dengan memperhatikan macam data input :
1. Konsentrasi reaktan dan kecepatan awalnya
Misalnya ada 2 buah reaktan, untuk menentukan orde reaktan pertama maka konsentrasi
reaktan lain harus konstan, sehingga yang diperhatikan hanya konsentrasi reaktan pertama
dan kecepatan awalnya
Rumus penyelesaianya dapat diturunkan dari rasio konsentrasi dan kecepatan awalnya
sebagai berikut
( ) ( )












=






=





≈
≈
2
1
2
1
2
1
2
1
.
.
c
c
Ln
r
r
Ln
n
r
r
Ln
c
c
Lnn
CLnnRLn
CR n
r adalah kecepatan awal, c adalah konsentrasi reaktan, dan n adalah orde reaktan
2. Konsentrasi reaktan , waktu reaksi, dan konsentrasi produk
Prinsip penyelesaiannya sama dengan penyelesaian macam data input pertama, hanya
sebelumnya harus dicari dulu lajunya yaitu dengan membagi masing-masing konsentrasi
produk dengan waktu reaksinya
[ ]
waktu
produk
r =
Program Praktikum_15;
Uses CRT;
Type
dc = array[1..10,1..10] of real;
di = array[1..40] of byte;
dr = array[1..40] of real;
Var
i,j,jr,pilih,ordeke,data : byte;
ir,rir,C,rc,orde,t,final : dc;
js : di;
order,ordepar : dr;
sum1,sum2,ordetot : real;
Procedure CariOrde;
Var ordepar : dr;
Begin
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
7
6.15 KINETIKA KIMIA
ClrScr;
Repeat
GoToXY(21,3); ClrEol;
GoToXY(5,3); Write('Jumlah reaktan = '); ReadLn(jr);
Until jr > 1;
TextColor(white);
GoToXY(5,4); Write('Macam data input : ');
TextColor(yellow);
GoToXY(5,5); Write('1. Konsentrasi reaktan + initial rate ');
GoToXY(5,6); Write('2. Konsentrasi reaktan + waktu + konsentrasi produk ');
GoToXY(5,7); Write(' Pilihan : '); ReadLn(data);
pilih := 1; ordetot := 0;
Repeat
ClrScr;
TextColor(white);
GoToXY(5,3); Write('Jumlah reaktan = ',jr);
GoToXY(5,4); Write('Mencari orde reaktan ',pilih,' : ');
js[pilih] := 2;
GoToXY(5,5); Write('Jumlah sampel = ',js[pilih]);
if data = 1 then
Begin
TextColor(yellow);
GoToXY(5,7);
Write('Untuk menentukan orde reaktan ',pilih,' maka konsentrasi reaktan
lain');
GoToXY(5,8); Write('harus konstan, sehingga yang diperhatikan hanya
konsentrasi ');
GoToXY(5,9); Write('reaktan ',pilih, ' dan initial rate-nya');
GoToXY(5,11); Write('No.':1,'[reaktan ':10,pilih,']','Initial rate':15);
end;
if data = 2 then
Begin
TextColor(yellow);
GoToXY(5,7);
Write('Untuk menentukan orde reaktan ',pilih,' maka konsentrasi reaktan
lain');
GoToXY(5,8); Write('harus konstan, sehingga yang diperhatikan hanya
konsentrasi ');
GoToXY(5,9); Write('reaktan ',pilih,', waktu setimbang dan konsentrasi
produknya.');
GoToXY(5,11); Write('No.':1,'[reaktan ':10,pilih,']','waktu':15,'[akhir]':15);
end;
TextColor(white);
for j := 1 to js[pilih] do
Begin
GoToXY(5,11+j); Write(j:2);
end;
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
7
for j := 1 to js[pilih] do
Begin
GoToXY(15,11+j); Write('-');
GoToXY(15,11+j); read(C[pilih,j]);
if data = 1 then
Begin
GoToXY(30,11+j); Write('-');
GoToXY(30, 11+j); read(Ir[pilih,j]);
end;
if data = 2 then
Begin
GoToXY(30,11+j); Write('-');
GoToXY(30,11+j); read(t[pilih,j]);
GoToXY(44,11+j); Write('-');
GoToXY(44,11+j); read(final[pilih,j]);
Ir[pilih,j] := abs(final[pilih,j]/t[pilih,j]);
end;
end;
sum1 := 0; sum2 := 0;
for i := 1 to (js[pilih]-1) do
Begin
for j := (i+1) to js[pilih] do
Begin
rc[j,i] := c[pilih,j]/c[pilih,i];
rir[j,i] := Ir[pilih,j]/Ir[pilih,i];
orde[j,i] := (Ln(rir[j,i]))/Ln(rc[j,i]);
sum1 := sum1 + orde[j,i];
end;
sum2 := sum2 + i;
end;
ordepar[pilih] := sum1/sum2;
ordeke := pilih;
order[ordeke] := ordepar[pilih];
ordetot := ordetot + ordepar[pilih];
GoToXY(5,22); Write('Orde reaktan ',pilih,' = ',ordepar[pilih]:4:3);
Delay(1000);
pilih := pilih + 1;
Until pilih > jr;
end;
Procedure out;
Begin
GoToXY(5,19); Write('Hasil total : ');
for pilih := 1 to jr do
Begin
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
7
GoToXY(5,20+pilih); Write('Orde reaktan ',pilih,' = ',order[pilih]:4:3);
end;
GoToXY(5,24); Write('Orde total = ',ordetot:4:3);
end;
Begin
ClrScr;
Repeat
ClrScr;
cariOrde;
out;
Until ReadKey = #27
End.
Keterangan :
Program mengenalkan tipe data array 2 dimensi yaitu
dc = array[1..10,1..10] of real;
Penentuan orde terdapat pada bagian
sum1 := 0; sum2 := 0;
for i := 1 to (js[pilih]-1) do
Begin
for j := (i+1) to js[pilih] do
Begin
rc[j,i] := c[pilih,j]/c[pilih,i];
rir[j,i] := Ir[pilih,j]/Ir[pilih,i];
orde[j,i] := (Ln(rir[j,i]))/Ln(rc[j,i]);
sum1 := sum1 + orde[j,i];
end;
sum2 := sum2 + i;
end;
ordepar[pilih] := sum1/sum2;
ordeke := pilih;
order[ordeke] := ordepar[pilih];
ordetot := ordetot + ordepar[pilih];
ordepar adalah variabel orde masing-masing reaktan, sedangkan ordetot adalah orde total
reaksi.
Penentuan laju pada macam data input kedua adalah
Ir[pilih,j] := abs(final[pilih,j]/t[pilih,j]);
Didukung dengan penempatan string menggunakan procedur GoToXY(X,Y)maka tampilan
tampak lebih interaktif.
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
7
6.16 LAJU EFUSI GAS
Menghitug harga laju efusi suatu gas dengan rumus
κ
κ
κ
κ
1
1.
1
.
2
−






−
−
=
pi
po
M
RT
u
dimana u adalah laju efusi gas, M adalah massa molar, κ adalah Cp/Cv, po dan pi adalah
tekanan luar dan dalam
Program Praktikum_16;
Uses CRT;
Const R = 8.31441;
Var T,M,K,pex,pin,R1,R2,R3,R4,R5,R6,R7 : real;
opsi : char;
Function pangkat(a,b : real) : real;
begin
pangkat := exp(b*ln(a));
end;
Procedure input;
begin
Write('Temperatur dalam K = '); ReadLn(T);
Write('Berat molekular = '); ReadLn(M);
Write('Cp/Cv = '); ReadLn(K);
Write('Tekanan luar = '); ReadLn(pex);
Write('Tekanan dalam = '); ReadLn(pin);
end;
Procedure hitung;
begin
R1 := K/(K-1);
R2 := 1/R1;
R3 := pex/pin;
R4 := 1-R3;
M := M/1000;
R5 := (2*R*T)/M;
R6 := pangkat(R4,R2);
R7 := Sqrt(R5*R1*R6);
end;
Procedure Hasil;
begin
WriteLn;
WriteLn('Laju efusi = ',R7:10:5);
end;
Begin
Repeat
ClrScr; Input; Hitung; Hasil;
opsi := ReadKey;
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
7
Until opsi = #27;
End.
Keterangan :
Dalam program ini dikenalkan pembuatan suatu Function dalam menghitung hasil
perpangkatan suatu variabel.
Turbo Pascal memang tidak menyediakan suatu fungsi atau prosedur terintegrasi khusus
untuk perpangkatan, karena itu harus dibuat sendiri fungsi perpangkatannya. Penggunaannya
tampak pada persamaan R6 := pangkat(R4,R2);
Menyelesaikan operasi matrik dan vektor berupa penjumlahan matrik, selisih,
perkalian skalar matrik, perkalian antar matrik, penentuan matrik transpose, harga determinan,
matrik inversi, dan menyelesaikan persamaan linier.
Program Praktikum_17;
Uses CRT;
Const max = 16;
Type matrik = array[1..max,1..max] of real;
vektor = array[1..max] of real;
Var a,b,c,m : matrik;
i,j,n,k,r,baris,kolom : integer;
opsi : char;
Function det(n:integer; a:matrik): real;
var ii,jj,kk,ll,ff,nxt : integer;
piv,cn,big,temp,term : real;
Begin
ff := 1;
for ii := 1 to n-1 do
Begin
big := 0;
for kk := ii to n do
Begin
term := abs(a[kk,ii]);
if term - big > 0 then
Begin
big := term;
ll := kk;
end;
end;
if ii - ll <> 0 then ff := -ff;
for jj := 1 to n+1 do
Begin
temp := a[ii,jj];
a[ii,jj] := a[ll,jj];
a[ll,jj] := temp;
Diktat Mata Kuliah Kimia Komputasi
Jurusan Kimia FMIPA Unnes
7
6.17 OPERASI MATRIK DAN VEKTOR
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7
Diktat borlanddelphi 7

More Related Content

What's hot (14)

36 JBK Borland Delphi 7
36 JBK Borland Delphi 736 JBK Borland Delphi 7
36 JBK Borland Delphi 7
 
Modul 1 konsep dasar pemrograman delphi
Modul   1 konsep dasar pemrograman delphiModul   1 konsep dasar pemrograman delphi
Modul 1 konsep dasar pemrograman delphi
 
MATERI_DELPHI_XI
MATERI_DELPHI_XIMATERI_DELPHI_XI
MATERI_DELPHI_XI
 
Modul pemrograman-1-revisi
Modul pemrograman-1-revisiModul pemrograman-1-revisi
Modul pemrograman-1-revisi
 
M1t1
M1t1M1t1
M1t1
 
Module Delphi
Module DelphiModule Delphi
Module Delphi
 
Modul praktikum pbw
Modul praktikum pbwModul praktikum pbw
Modul praktikum pbw
 
Modul 1-AP3-Deplhi-Unpar
Modul 1-AP3-Deplhi-UnparModul 1-AP3-Deplhi-Unpar
Modul 1-AP3-Deplhi-Unpar
 
Makalah fisika komputasi
Makalah fisika komputasiMakalah fisika komputasi
Makalah fisika komputasi
 
Dot net
Dot netDot net
Dot net
 
5 adp fungsi & rekursi
5   adp fungsi & rekursi5   adp fungsi & rekursi
5 adp fungsi & rekursi
 
Laporan praktikum modul vi
Laporan praktikum modul viLaporan praktikum modul vi
Laporan praktikum modul vi
 
Jeni Intro1 Bab04 Dasar Dasar Pemrograman
Jeni Intro1 Bab04 Dasar Dasar PemrogramanJeni Intro1 Bab04 Dasar Dasar Pemrograman
Jeni Intro1 Bab04 Dasar Dasar Pemrograman
 
alpro Chapter04
alpro Chapter04alpro Chapter04
alpro Chapter04
 

Similar to Diktat borlanddelphi 7

Delphi part 1.pdf
Delphi part 1.pdfDelphi part 1.pdf
Delphi part 1.pdfJurnal IT
 
Modul1 pengenalan borlanddelphi7
Modul1 pengenalan borlanddelphi7Modul1 pengenalan borlanddelphi7
Modul1 pengenalan borlanddelphi7asa_guskun
 
Struktur bahasa delphi
Struktur bahasa delphiStruktur bahasa delphi
Struktur bahasa delphimistriana
 
Modul Pemrograman Visual
Modul Pemrograman VisualModul Pemrograman Visual
Modul Pemrograman VisualWahyu Widodo
 
Macam Aplikasi dan Fungsinya
Macam Aplikasi dan FungsinyaMacam Aplikasi dan Fungsinya
Macam Aplikasi dan FungsinyaYutta Putri
 
Modul dasar pemrograman
Modul dasar pemrogramanModul dasar pemrograman
Modul dasar pemrogramanlidyanamaria
 
Laporan Praktikum Algoritma Pemrograman Modul I
Laporan Praktikum Algoritma Pemrograman Modul ILaporan Praktikum Algoritma Pemrograman Modul I
Laporan Praktikum Algoritma Pemrograman Modul IShofura Kamal
 
Dasarpemrogramanvisualbasic
DasarpemrogramanvisualbasicDasarpemrogramanvisualbasic
Dasarpemrogramanvisualbasicdhi her
 
Dasarpemrogramanvisualbasic
DasarpemrogramanvisualbasicDasarpemrogramanvisualbasic
Dasarpemrogramanvisualbasicdhi her
 
form dengan FormMDI Delphi 7
form dengan FormMDI Delphi 7form dengan FormMDI Delphi 7
form dengan FormMDI Delphi 7hera wijaya
 
Presentasi delphi
Presentasi delphiPresentasi delphi
Presentasi delphiJauhar Anam
 
Study Jam Mobile 4 - Introduction to Flutter.pdf
Study Jam Mobile 4 - Introduction to Flutter.pdfStudy Jam Mobile 4 - Introduction to Flutter.pdf
Study Jam Mobile 4 - Introduction to Flutter.pdfanjarmath
 

Similar to Diktat borlanddelphi 7 (20)

Modul Delphi ,buat pemula
Modul Delphi ,buat pemulaModul Delphi ,buat pemula
Modul Delphi ,buat pemula
 
modul-delphi-7.pdf
modul-delphi-7.pdfmodul-delphi-7.pdf
modul-delphi-7.pdf
 
Modul delphi 7
Modul delphi 7Modul delphi 7
Modul delphi 7
 
Delphi part 1.pdf
Delphi part 1.pdfDelphi part 1.pdf
Delphi part 1.pdf
 
Modul1 pengenalan borlanddelphi7
Modul1 pengenalan borlanddelphi7Modul1 pengenalan borlanddelphi7
Modul1 pengenalan borlanddelphi7
 
20110323 modul1 vb
20110323 modul1 vb20110323 modul1 vb
20110323 modul1 vb
 
9093 fd01
9093 fd019093 fd01
9093 fd01
 
Struktur bahasa delphi
Struktur bahasa delphiStruktur bahasa delphi
Struktur bahasa delphi
 
Modul Pemrograman Visual
Modul Pemrograman VisualModul Pemrograman Visual
Modul Pemrograman Visual
 
Macam Aplikasi dan Fungsinya
Macam Aplikasi dan FungsinyaMacam Aplikasi dan Fungsinya
Macam Aplikasi dan Fungsinya
 
Modul dasar pemrograman
Modul dasar pemrogramanModul dasar pemrograman
Modul dasar pemrograman
 
Laporan Praktikum Algoritma Pemrograman Modul I
Laporan Praktikum Algoritma Pemrograman Modul ILaporan Praktikum Algoritma Pemrograman Modul I
Laporan Praktikum Algoritma Pemrograman Modul I
 
Dasarpemrogramanvisualbasic
DasarpemrogramanvisualbasicDasarpemrogramanvisualbasic
Dasarpemrogramanvisualbasic
 
Dasarpemrogramanvisualbasic
DasarpemrogramanvisualbasicDasarpemrogramanvisualbasic
Dasarpemrogramanvisualbasic
 
M2t1
M2t1M2t1
M2t1
 
form dengan FormMDI Delphi 7
form dengan FormMDI Delphi 7form dengan FormMDI Delphi 7
form dengan FormMDI Delphi 7
 
Bab 1 pengenalan-adobe-flash
Bab 1 pengenalan-adobe-flashBab 1 pengenalan-adobe-flash
Bab 1 pengenalan-adobe-flash
 
Presentasi delphi
Presentasi delphiPresentasi delphi
Presentasi delphi
 
Study Jam Mobile 4 - Introduction to Flutter.pdf
Study Jam Mobile 4 - Introduction to Flutter.pdfStudy Jam Mobile 4 - Introduction to Flutter.pdf
Study Jam Mobile 4 - Introduction to Flutter.pdf
 
Form Gaji Karyawan
Form Gaji KaryawanForm Gaji Karyawan
Form Gaji Karyawan
 

Recently uploaded

CASE REPORT ACUTE DECOMPENSATED HEART FAILURE 31 Desember 23.pptx
CASE REPORT ACUTE DECOMPENSATED HEART FAILURE 31 Desember 23.pptxCASE REPORT ACUTE DECOMPENSATED HEART FAILURE 31 Desember 23.pptx
CASE REPORT ACUTE DECOMPENSATED HEART FAILURE 31 Desember 23.pptxresidentcardio13usk
 
Power Point materi Mekanisme Seleksi Alam.pptx
Power Point materi Mekanisme Seleksi Alam.pptxPower Point materi Mekanisme Seleksi Alam.pptx
Power Point materi Mekanisme Seleksi Alam.pptxSitiRukmanah5
 
TEMA 9 SUBTEMA 1 PEMBELAJARAN 1 KELAS 6.pptx
TEMA 9 SUBTEMA 1 PEMBELAJARAN 1 KELAS 6.pptxTEMA 9 SUBTEMA 1 PEMBELAJARAN 1 KELAS 6.pptx
TEMA 9 SUBTEMA 1 PEMBELAJARAN 1 KELAS 6.pptxSyabilAfandi
 
Modul ajar IPAS Kls 4 materi wujud benda dan perubahannya
Modul ajar IPAS Kls 4 materi wujud benda dan perubahannyaModul ajar IPAS Kls 4 materi wujud benda dan perubahannya
Modul ajar IPAS Kls 4 materi wujud benda dan perubahannyaAnggrianiTulle
 
Materi Makna alinea pembukaaan UUD .pptx
Materi Makna alinea pembukaaan UUD .pptxMateri Makna alinea pembukaaan UUD .pptx
Materi Makna alinea pembukaaan UUD .pptxIKLASSENJAYA
 
materi+kuliah-ko2-senyawa+aldehid+dan+keton.pdf
materi+kuliah-ko2-senyawa+aldehid+dan+keton.pdfmateri+kuliah-ko2-senyawa+aldehid+dan+keton.pdf
materi+kuliah-ko2-senyawa+aldehid+dan+keton.pdfkaramitha
 
PPT Kelompok 7 Pembelajaran IPA Modul 7.pptx
PPT Kelompok 7 Pembelajaran IPA Modul 7.pptxPPT Kelompok 7 Pembelajaran IPA Modul 7.pptx
PPT Kelompok 7 Pembelajaran IPA Modul 7.pptxSDN1Wayhalom
 

Recently uploaded (7)

CASE REPORT ACUTE DECOMPENSATED HEART FAILURE 31 Desember 23.pptx
CASE REPORT ACUTE DECOMPENSATED HEART FAILURE 31 Desember 23.pptxCASE REPORT ACUTE DECOMPENSATED HEART FAILURE 31 Desember 23.pptx
CASE REPORT ACUTE DECOMPENSATED HEART FAILURE 31 Desember 23.pptx
 
Power Point materi Mekanisme Seleksi Alam.pptx
Power Point materi Mekanisme Seleksi Alam.pptxPower Point materi Mekanisme Seleksi Alam.pptx
Power Point materi Mekanisme Seleksi Alam.pptx
 
TEMA 9 SUBTEMA 1 PEMBELAJARAN 1 KELAS 6.pptx
TEMA 9 SUBTEMA 1 PEMBELAJARAN 1 KELAS 6.pptxTEMA 9 SUBTEMA 1 PEMBELAJARAN 1 KELAS 6.pptx
TEMA 9 SUBTEMA 1 PEMBELAJARAN 1 KELAS 6.pptx
 
Modul ajar IPAS Kls 4 materi wujud benda dan perubahannya
Modul ajar IPAS Kls 4 materi wujud benda dan perubahannyaModul ajar IPAS Kls 4 materi wujud benda dan perubahannya
Modul ajar IPAS Kls 4 materi wujud benda dan perubahannya
 
Materi Makna alinea pembukaaan UUD .pptx
Materi Makna alinea pembukaaan UUD .pptxMateri Makna alinea pembukaaan UUD .pptx
Materi Makna alinea pembukaaan UUD .pptx
 
materi+kuliah-ko2-senyawa+aldehid+dan+keton.pdf
materi+kuliah-ko2-senyawa+aldehid+dan+keton.pdfmateri+kuliah-ko2-senyawa+aldehid+dan+keton.pdf
materi+kuliah-ko2-senyawa+aldehid+dan+keton.pdf
 
PPT Kelompok 7 Pembelajaran IPA Modul 7.pptx
PPT Kelompok 7 Pembelajaran IPA Modul 7.pptxPPT Kelompok 7 Pembelajaran IPA Modul 7.pptx
PPT Kelompok 7 Pembelajaran IPA Modul 7.pptx
 

Diktat borlanddelphi 7

  • 1. Sebelum kita memulai Delphi, kita harus menginstalasi program Delphinya terlebih dahulu. Kita bisa menggunakan Delphi 5, 6, 7 atau 8. Sebenarnya Delphi versi berapapun tidak masalah, karena produk Borland ini selalu menjaga kompatibilitas antar versinya. Untuk menginstalasi Delphi cukup mudah, tinggal ikuti petunjuk yang diberikan pada tampilan di layar. Sesudah Delphi terinstalasi pada komputer, kita bisa memulai mengenal dahulu apa itu Delphi? Kelompok bahasa pemrograman apa? Delphi adalah kompiler / penterjemah bahasa Delphi (awalnya dari Pascal) yang merupakan bahasa tingkat tinggi sekelas dengan Basic, C. Bahasa Pemrograman di Delphi disebut bahasa prosedural artinya bahasa/sintaknya mengikuti urutan tertentu / prosedur. Ada jenis pemrograman non-prosedural seperti pemrograman untuk kecerdasan buatan seperti bahasa Prolog. Delphi termasuk Keluarga Visual sekelas Visual Basic, Visual C, artinya perintah-perintah untuk membuat objek dapat dilakukan secara visual. Pemrogram tinggal memilih objek apa yang ingin dimasukkan kedalam Form/Window, lalu tingkah laku objek tersebut saat menerima event/aksi tinggal dibuat programnya. Delphi merupakan bahasa berorentasi objek, artinya nama objek, properti dan methode/procedure dikemas menjadi satu kemasan (encapsulate). Sebelum mempelajari ketiga struktur pemrograman ada baiknya kenali dahulu tampilan IDE, yang merupakan editor dan tools untuk membuat program Delphi. Pada IDE akan ditampilkan Form baru yang merupakan aplikasi/program Window yang akan dibuat. Aplikasi / program berbasis windows sering disebut dengan jendela (window). Bagaimana membuat aplikasi berbasis windows (berbasis grafik dan bukan berbasis teks seperti pada DOS)? Caranya dengan membuat sebuah form. Pada pemrograman berbasis windows, kita akan diperhadapkan pada satu atau beberapa jendela yang nampak dihadapan kita. Jendela ini dalam Delphi disebut juga dengan form. Pada pemrograman berbasis windows, kita akan diperhadapkan pada satu atau beberapa jendela yang nampak dihadapan kita. Jendela ini dalam Delphi disebut juga dengan form. Delphi adalah sebuah perangkat lunak (bahasa pemrograman) untuk membuat program / aplikasi komputer berbasis windows. Delphi merupakan bahasa pemograman berbasis objek, artinya semua komponen yang ada merupakan objek-objek. Ciri sebuah objek adalah memiliki nama, properti dan method/procedure. Delphi disebut juga visual programming artinya komponen-komponen yang ada tidak hanya berupa teks (yang sebenarnya program kecil) tetapi muncul berupa gambar-gambar. 1.1.1 Membuat Sebuah Form Saat anda pertama kali masuk ke Delphi, anda akan diperhadapkan pada sebuah form kosong yang akan dibuat secara otomatis. Form tersebut diberi nama Form1. Form ini merupakan tempat bekerja untuk membuat antarmuka pengguna. Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 1 PENDAHULUAN : IDE DAN STRUKTUR PROGRAM DELPHI PEMROGRAMAN DELPHI 1.1 PENDAHULUAN
  • 2. Gambar1. Form kosong yang dibuat saat anda masuk Delphi 1.1.2 Mengganti Nama Form dan Menambahkan Judul Biasakan sebelum menjalankan program, sebaiknya ganti nama form dan beri judul sesuai program yang kita buat. Delphi akan secara otomatis memberi nama form1, form2, form3, dst. Nama form tersebut kurang mengandung arti dan akan menyulitkan bila form yang dibuat cukup banyak. Saat membuka Delphi pertama kali, nampak sebuah jendela Object Inspector. Jika tidak muncul pilih menu View | Object Inspector atau tekan tombol F11. Pada Object Inspector ada dua buah halaman (tab) yaitu Properties dan Events. Properties digunakan untuk mengganti properti (kepemilikan) sebuah objek/komponen. Sedangkan Events digunakan untuk membuat procedure yang diaktifkan (trigered) lewat sebuah event. Gambar 2. Jendela Object Inspector untuk mengganti properti caption Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 2 Nama objek Tab events Tab properties Nilai / isi dari properties Properties Caption Nama form Minimize Maximize Close Tempat bekerja
  • 3. ` Semua properti diurutkan berdasarkan alpabetik, dan dapat juga diurutkan berdasarkan kategori. Gantilah judul form dengan Hello melalui properti Caption, sedangkan nama form dengan nama frmHello melalui properti Name. Caption digunakan untuk menyimpan keterangan yang dimunculkan pada form, sedangkan Name digunakan sebagai Nama dari objek tersebut. Anda sekarang sudah membuat aplikasi form kosong dengan tombol standar window : Minimize, Maximize, dan Close. Anda dapat mengubah ukuran form dengan menarik pada bingkai form menggunakan mouse (drag = klik tombol kiri mouse, tahan tombol tersebut lalu geser ke kiri/kanan atau atas/bawah). Anda dapat memindahkan form dengan meletakkan kursor pada form kemudian menggesernya (drag). 1.1.3 Menyimpan Form Pada Delphi ada 3 buah file utama (*.dpr, *.pas dan *.dfm). a) *.dpr adalah file proyek yang dibuat berisi program kecil untuk :  mendefinisikan Unit yang ada dalam file proyek  menginisialisasi data  membangun form  menjalankan aplikasi b) *.pas adalah unit-unit (pascal code file), bisa terdiri satu atau banyak file c) *.dfm adalah file definisi Form (special pseudo code file), bisa terdiri satu atau banyak file Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 3 Catatan : Isi dari properti Name harus diawali alpabet dan tidak menggunakan spasi atau tanda baca. uses Forms, Unit1 in ‘Unit1.pas’ {Form1}; begin Application.Initialize; Application.CreateForm(Tform1, Form1); Application.Run; end. object Form1: Tform1 Left = 200 Top = 108 Width = 696 Height = 480 Caption = ‘Form1’ : Font.Name = ‘MS Sans Serif’ Font.Style = [] PixelsPerInch = 96 TextHeight = 13 object Button1: Tbutton Left = 176 Top = 116 : end
  • 4. Pilih submenu Save Project atau Save Project As pada menu File, dan Delphi akan menanyakan nama file source code untuk unit (*.pas) dan nama file proyeknya (*.dpr). Beri nama file form dengan HELLO.PAS dan project HELLO.DPR. Sesudah disimpan, jalankan program dengan menekan tombol F9 atau pilih menu Run | Run. 1.1.4 Menempatkan Komponen pada Form Karena Delphi merupakan bahasa pemrograman visual, maka komponen-komponen akan nampak pada layar. Anda tinggal menempatkan komponen yang diinginkan pada form. Ada empat cara menempatkan komponen pada form. Misal anda memilih komponen Button pada Components Palette bagian Standard Page. Anda dapat memilih salah satu langkah berikut:  Klik pada kompenen tersebut, pindahkan kursor ke form, sambil menekan tombol kiri mouse (drag komponen dan geser pada form) atau  Pilih komponen (klik komponen yang diinginkan) pada Components Palette kemudian klik pada form dimana komponen itu akan diletakkan.  Klik ganda pada komponen yang diinginkan, maka komponen tersebut akan ditambahkan pada form  Anda dapat menggunakan Copy dan Paste bila ingin membuat komponen yang sama yang sudah ada pada form. Caranya Shift-Klik kiri pada komponen yang ada di form, lalu pilih menu Copy (Ctrl-C) kemudian pilih menu Paste (Ctrl-V). Gambar 3. Kumpulan komponen Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 4 Catatan: Setiap Form (.dfm) harus memiliki sebuah Unit (.pas), tetapi anda dapat memiliki Unit tanpa sebuah Form (hanya kode saja). Jika ingin melihat kode tersebut anda dapat mengklik kanan mouse, lalu pilih VIEW AS TEXT atau tekan tombol Alt- F12. Sebaiknya anda tidak mengubah isi code tersebut, karena akan menyebabkan masalah serius. Tunggu saat anda sudah memahami maksud kode tersebut. Untuk kembali ke bentuk form, pilih VIEW AS FORM atau tekan tombol Alt- F12 kembali. Speedbar Menu utama : File, Edit, Seaarch, View, dll. Component palette bagian Tab Standard komponen Label
  • 5. 1.1.5 Mengatur Tataletak Komponen Pada form ini hanya ada satu button, mungkin ada di bagian tengah form. Anda dapat mengatur letak komponen tersebut dengan menggesernya. Bila anda ingin merapihkan pilih menu View |Alignment Palette, maka muncul sebuah Toolbox Align dengan ikon perapihan (alignment icons). Gambar 4. Form dan Toolbox Alignment Dengan toolbox ini anda dapat merapikan beberapa komponen sekaligus, caranya buat fokus beberapa komponen, lalu klik icon pada toolbox yang diinginkan. Untuk mengetahui arti icon tersebut gerakan mouse pada tombol tersebut, lalu akan muncul penjelasan singkat kegunaan icon tersebut atau lihat Help (tekan F1). Anda bisa mempelajarinya sendiri. Cukup mudah!. Langkah yang penting adalah mengubah nama dan keterangan kompenen button tersebut. Ikuti bagian ini 1.1.6 Mengubah Nilai Properti Ubah nilai properti Caption menjadi Katakan Hello dan nilai properti Name menjadi btnHello. Langkah ini mirip dengan mengubah nama dan keterangan sebuah form. Properti name adalah properti internal dan digunakan untuk memberi nama pada sebuah komponen/objek. Nama ini adalah sebuah variabel yang mengacu pada komponen tersebut. Beberapa aturan penamaan komponen atau variabel atau identifer sebagai berikut  Diawali alpabet, berikutnya boleh angka, garis bawah.  Tidak memakai spasi atau tanda-tanda baca atau operator  Boleh huruf kapital atau kecil, tidak ada perbedaan  Tidak menggunakan kata kunci (reserve word) yang digunakan Delphi  Biasakan nama komponen diawali kelompok komponennya, misal btnHello, frmHello, rgrKelas. Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 5 Setiap komponen sebaiknya diberinama yang memiliki arti dan diawali oleh jenis komponennya. Misal nama dari form Hello adalah “frmHello” atau nama dari button Hello adalah “btnHello”. Tujuannya adalah mengelompokkan komponen-komponen sejenis, karena pada Object Inspector nama komponen diurutkan berdasarkan alpabet.
  • 6. Berikut contoh penamaan yang keliru menggunakan spasi Gambar 5. Pesan kesalahan saat mengubah properti Name. Sesudah anda mengubah properti anda dapat melihat kode programnya (tekan Alt-F12) sebagai berikut : object Form1: Tform1 : Caption = ‘Hello’ : object btnHello: Tbutton Caption = ‘Katakan Hello’ End end 1.1.7 Membuat Method/Procedure lewat Event Saat anda menekan tombol pada sebuah form atau komponen, Windows memberitahukan bahwa aplikasi mengirim pesan yang dibangkitkan oleh event tertentu . Delphi akan menanggapi dengan menerima event atau panggilan tersebut. Hal ini yang dinamakan penanganan event (event-handler method). Delphi mendefinisikan sejumlah event pada setiap komponennya. Daftar event ini berbeda untuk setiap komponen. Event yang paling umum pada komponen Button adalah OnClick. Artinya jika komponen Button tersebut di Klik maka akan melakukan procedure apa. Ada beberapa teknik yang dapat dilakukan untuk menangani event misal OnClick pada komponen button :  Klik ganda pada button tersebut, maka sebuah method/procedure btnHelloClick  Pilih button, kemudian pilih Object Inspector’s combo box (called the Object Selector), pilih Tab Events, dan klik ganda pada area putih disebelah kanan event OnClick  Pilih button, pilih Tab Events, dan masukkan nama method yang dikehendaki, misal btnHelloClick pada area putih di sebelah kanan event OnClick Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 6
  • 7. Gambar 6. Tab Events pada Object Inspector, dan procedure yang dibangkitkan lewat event OnClick. Sekarang anda mengisi procedure tersebut dengan perintah untuk menampilkan pesan sebagai berikut : Perintah ini sangat sederhana, yaitu untuk menampilkan pesan. Fungsi ini mempunyai empat parameter. Untuk rincinya anda dapat melihat bantuan (F1).  Parameter pertama : kalimat yang akan dimunculkan (pesannya)  Parameter kedua : tipe message box seperti mtWarning, mtError, mtInformation, atau mtConfirmation. Coba lihat perbedaannya.  Parameter ketiga : kumpulan tombol yang akan digunakan seperti mbYes, mbNo, mbOK, mbCancel, atau mbHelp.  Parameter keempat : untuk help context atau nomor halaman pada Help, beri angka nol jika anda tidak mempunyai file help. Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 7 Bila anda ingin menghapus procedure atau penanganan event tersebut, anda dapat menghapus pada editor Unit tersebut. Hapus blok procedure tersebut dan hapus pada bagian definisi procedure yang ada diatasnya. procedure Tform1.BtnHelloClick(Sender: Tobject); begin MessageDlg (‘Hello, guys’, mtInformation, [mbOK], 0); end;
  • 8. Gambar 7. Message box 1.1.8 Kompilasi dan Jalankan Program Tekan tombol Run atau pilih menu Run | Run, Delphi does the following: 1. Kompilasi Pascal source code file yang mendefinisikan form-form yang ada (.pas,.dfm) 2. Kompilasi project file (.dpr) 3. Buat executable (.EXE) file 4. Jalankan executable file, biasanya pada mode pencarian kesalahan (debug mode). Perintah-perintah ini akan diproses oleh kompiler secara berurutan. Contoh kita memiliki 3 baris perintah. Kompiler akan memroses mulai dari baris-1, baris-2 kemudian baris-3. Contoh program untuk menampilkan pesan sebanyak 3 kali seperti berikut : Berikut latihan ke-1 untuk tiga buah aplikasi yaitu membuat tombol Hello, saat diklik tombolnya, tombol akan beraksi dengan memunculkan pesan. Ikuti langkahnya sebagai berikut : 1. Buat form frmHello1 seperti yang sudah dijelaskan.  Komponen yang dibutuhkan form dengan nama frmHello1 dan button dengan nama btnHello1. Ubah properti name-nya  Ubah properti caption masing-masing komponen menjadi Membuat program Hello1 dan Katakan Hello  Buat method dari komponen btnHello1 lewat event OnClick, seperti berikut  Jalankan program lihat hasilnya  Coba ganti parameter ke-1, ke-2 dan ke-3  Simpan dengan nama unit uHello1.pas dan project pHello1.dpr pada direktori Latih1 2. Buat aplikasi baru (File-New-Application) dengan form baru frmHello2 mirip form frmHello1 dengan tambahan sebagai berikut. Apa yang terjadi? (properti caption dari komponen tombol diganti saat program berjalan) Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 8 MessageDlg (‘Hello, guys’, mtInformation, [mbOK], 0); MessageDlg (‘Hello, lady’, mtInformation, [mbOK], 0); MessageDlg (‘Hello, everybody’, mtInformation, [mbOK], 0); procedure TfrmHello1.btnHello1Click(Sender: Tobject); begin MessageDlg (‘Hello, guys’, mtInformation, [mbOK], 0); end; 1.2 PERINTAH SEQUENCE / DIPROSES SECARA BERUNTUN
  • 9.  Komponen yang dibutuhkan form dengan nama frmHello2 dan button dengan nama btnHello2. Ubah properti name-nya  Buat method untuk mengubah ukuran formHello2 lewat event OnResize, perhatikan apa yang terjadi bila ukuran form diubah saat program berjalan  Simpan dengan nama unit uHello2.pas dan project pHello2.dpr pada direktori Latih1 3. Buat aplikasi baru (File-New-Application) dengan form baru frmHello3 seperti yang sudah dijelaskan. Objek Properties Value of properties Method lewat event Form1 Name FrmHello3 Button1 Name BtnHello3 (lihat dibawah) Caption &Show Me Label1 Name LblHello3 Font Size 24  Buat method dari komponen btnHello3 lewat event OnClick, seperti berikut  Jalankan program lihat hasilnya  Simpan dengan nama unit uHello3.pas dan project pHello3.dpr pada direktori Latih1 2.1. Menu dan Perintah pada Delphi Ada empat cara untuk memberi perintah pada lingkungan Delphi (Delphi environment):  Gunakan menu Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 9 procedure TfrmHello2.btnHello2Click (Sender: Tobject); begin MessageDlg (‘Hello, guys’, mtInformation, [mbOK], 0); BtnHello2.Caption := ‘Say Hello Again’; end; procedure TfrmHello2.FormResize(Sender: Tobject); begin BtnHello2.Top := frmHello2.ClientHeight div 2 – BtnHello2.Height div 2; BtnHello2.Left := frmHello2.ClientWidth div 2 – BtnHello2.Width div 2; end; procedure Tform1.btnHello3Click(Sender: Tobject); begin if btnHello3.caption =’&Show Me’ then begin lblHello3.caption := ‘Selamat Datang di Delphi 5.0’; btnHello3.caption :=’&Hide Me’; end else begin lblHello3.caption := ‘’; btnHello3.caption :=’&Show Me’; end; end;
  • 10.  Gunakan Short Cut (misal F9, F12 dsb)  Gunakan SpeedBar (atau toolbar).  Gunakan SpeedMenu ( lokal menu yang diaktifkan dengan tombol mouse kanan). Berikut menu utama yang ada pada Delphi (untuk mempelajarinya gunakan Help Delphi): Menu File. Menu ini berhubungan dengan file seperti membuat, menyimpan dan mengakhiri sebuah pekerjaan. Menu Edit .Menu ini berhubungan dengan penyuntingan apa yang dikerjakan seperti Undo , Redo, Cut, Copy, Paste atau dapat dengan tombol Ctrl+Z, Ctrl+X, Ctrl+C, Ctrl+V. Menu Search. Menu ini berhubungan dengan pencarian dan penggantian data. Gambar 8. Jendela Find Text Menu View. Menu ini berhubungan dengan penampilan atau apa yang akan ditampilkan. Menu Project. Menu ini berhubungan dengan proyek yang sedang dibuat, misal unit yang akan ditambahkan ke proyek ini, unit apa yang akan dihapus, dsb. Menu Run. Menu ini berhubungan dengan menjalankan program, mencari kesalahan (debug), dsb. Menu Component. Menu ini berhubungan dengan komponen, misal menambah komponen baru, menghapus komponen yang ada. Menu Database. Menu ini berhubungan dengan Database, Database Form Wizard dan Database Explorer. Menu Tools. Menu ini berhubungan dengan pengaturan/konfigurasi, tool-tool pembantu Delphi. Menu Help. Menu ini berhubungan dengan informasi mengenai Delphi, Help / bantuan 2.2. Component, Property, Method, Event Kode yang akan dilihat, serupa dengan struktur Bahasa Pascal. Delphi adalah bahasa pemrograman berbasis objek, artinya pendekatan pembuatan program melalui objek-objek yang ada. Misalnya objek form, text dsb. Setiap objek akan memiliki properti (atribut) dan method yang diaktifkan / dipicu oleh event. Mari kita lihat penjelasan berikut. Apakah Objek (COMPONENT) itu? Ingat sebuah komponen adalah sebuah objek pada Palette, :  sebuah Objek, adalah sebuah komponen dalam Component Palette,  atau sesuatu yang dibuat melalui kode-kode / bahasa pemrograman Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 1
  • 11. Jadi sebuah objek adalah secara umum kelas dari kumpulan sesuatu. Komponen pasti objek namun tidak selalu merupakan komponen, misal TstringList adalah sebuah objek (kumpulan karakter), dan bukan sebuah komponen. Penjelasan mengenai komponen di Lampiran A. Apakah sebuah PROPERTY itu? Sebuah Property tidak lain adalah sebuah nama/variabel milik sebuah objek/komponen misal Caption, Text yang dapat diubah nilai baik melalui object Inspector atau melalui program. Beberapa istilah/ nama berikut yang mirip, dan sering digunakan:  Procedure adalah kumpulan perintah yang melakukan suatu proses tertentu  Function adalah sama dengan procedure, tetapi proses tersebut dapat mengembalikan suatu hasil / nilai misal hasilnya = 1  Method adalah procedure atau function yang tergabung pada sebuah komponen  Subroutine adalah istilah umum dari semuanya (procedure/function/method) misal pada bahasa Basic. Apakah sebuah METHOD itu? Sebuah method adalah sebuah function/fungsi yang tergabung dalam sebuah objek. Contoh ListBox (dapat berarti sebuah array of strings) yang memiliki Method (Clear) yang membuat Listbox tersebut menjadi kosong. CLEAR adalah sebuah Method pada ListBox tersebut. Apakah sebuah EVENT itu? Sebuah Event adalah sebuah aksi pengguna (User Action) misal Mouse Click, KeyPressed. Setiap Events diawali dengan kata ‘On’. Contoh : Nama event Nama method OnClick .. Button1Click(Sender : Tobject) OnKeyDown .. Button1KeyDown(Sender : Tobject) OnMouseMove .. Button1MouseMove(Sender : Tobject) 2.3. Cara Delphi Bekerja Saat anda menambahkan Components pada Form1 dan merubah nilai properti, Delphi akan membuat (pseudo) code (dalam Unit1.dfm) untuk mendefinikan apa yang anda lakukan. Secara normal, ANDA TIDAK DIHARAPKAN MENGUBAHNYA Unit1.dfm File; Anda hanya bekerja pada Form1 secara Visual. Ini yang dinamakan bahasa pemrograman Visual (Visual Programming) Apakah Delphi itu?  Delphi (IDE) adalah sebuah Visual Interface antara anda (the User) dan Komputer anda (yang berjalan diatas Windows ). Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 1 Begin ListBox1.Clear; // Mengosongkan isi ListBox ListBox1.Items.LoadFromFile(‘c:Data1.txt’); //properti Items (bertipe string) memiliki method untuk LoadFromFile end;
  • 12.  Delphi menterjemahkan Visual Components (Buttons, Panels,..) yang ada pada Form kedalam sebuah kode-kode komputer (pseudo in Unit1.dfm) yang mendefinisikan bagaimana dibentuknya form dan komponennya termasuk juga propertinya. Saat anda mengkompilasi program, apa yang terjadi?  Delphi akan memanggil file .dpr file (file proyek anda)  Delphi meminta program yang ada dalam proyek tersebut dan file dpr memberikan sebagai berikut :  Delphi meminta, Apa yang dilakukan pertama kali ? .dpr file memberikan sebagai berikut: 2.4. Forms, Dialog Boxes, Messages , ... Menampilkan Form atau Window Anda dapat bekerja dengan beberapa form pada sebuah project. Saat anda berada di Form1 untuk menampilkan form yang lain misal Form2 sebagai berikut : Form2.Show; Membuka (Shows) Form2 (tetapi user diijinkan untuk dapat mengklik Form1) Form2.ShowModal; Membuka (Shows) Form2 (tetapi user TIDAK DIIJINKAN mengklik Form1) Menampilkan Pesan (Message) ShowMessage('Ini kotak pesan); Tampilan sederhana sebuah baris/teks; User dapat menekan tombol OK untuk keluar dari kotak pesan (message window). MessageDlg('Msg',mtConfirmation,[mbYes],0); Mirip ShowMessage tapi dapat lebih dari satu tombol pilihan. if MessageDlg ('Please say YES or ',mtConfirmation,[mbYes,mbNo],0) = mrYES then begin Label1.Text:='Tekan tombol YES'; end; Meminta Masukan (Input Box) Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 1 uses Forms, Unit1 in ‘Unit1.pas’ {Form1}; begin Application.Initialize; itializes stuff Application.CreateForm(Tform1, Form1); Application.Run; end. TMsgDlgType = mtWarning,mtError,mtInformation, mtConfirmation, mtCustom TMsgDlgBtn = mbYes,mbNo,mbOK,mbCancel,mbAbort,mbRetry,mbIgnore,mbAll,mbHelp Return values = mrNone, mrYes, mrNo, mrOk, mrCancel, mrAbort, mrRetry, mrIgnore, mrAll InputBox(...); var InputString: string; begin InputString:= InputBox('Masukkan Nama', 'Please Enter your Name',''); end;
  • 13. 3. PERINTAH PENCABANGAN / STRUKTUR PEMILIHAN Pada beberapa kasus terkadang kita menginginkan komputer melakukan suatu aksi tertentu bila suatu kondisi terpenuhi. Keberadaan perintah bersyarat pada suatu program memberikan pencabangan proses seperti ditunjukkan oleh Error! Not a valid link.. Bahasa Pascal menyediakan dua cara penyajian perintah bersyarat, yaitu If…Then…Else dan Case…of. Gambar 3.1 Pencabangan pada program Pada prinsipnya pemilihan aksi dapat dikelompokkan menjadi 3 bagian : 3.1. IF … THEN : Pemilihan 1 kasus Perintah bersyarat If – then digunakan hanya melakukan 1 aksi bila kondisi dipenuhi. Bentuk sintaks dari perintah bersyarat ini adalah: 3.2. IF … THEN … ELSE : Pemilihan 2 kasus Perintah bersyarat If umumnya digunakan untuk melakukan pencabangan sederhana (antara 2 atau 3 cabang). Atau untuk pencabangan yang banyak, dimana kondisi yang menjadi prasyaratnya melibatkan lebih dari satu parameter. Bentuk sintaks dari perintah bersyarat ini adalah: Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 1 Aksi 1 Aksi 2 Kondisi 1 Kondisi 2 Pemilihan 1 pilihan/kasus. Gunakan perintah IF – THEN Pemilihan 2 pilihan/kasus. Gunakan perintah IF – THEN – ELSE Pemilihan N pilihan/kasus. Gunakan Case – of (Catatan sebenarnya dapat menggunakan if—then – else bersarang) If <kondisi_pencabangan> then Begin ... {aksi-1} end; If <kondisi_pencabangan> then Begin ... {aksi-1} end else Begin ... {aksi-2} end;
  • 14. 3.3. IF … THEN … ELSE : Pemilihan N kasus 3.4. CASE … OF … : Pemilihan N kasus Perintah bersyarat Case umumnya digunakan untuk kondisi dengan banyak pencabangan. Syarat pencabangan pada bentuk ini hanya boleh melibatkan satu buah parameter dengan tipe data bukan Real. Pemeriksaan kondisi di sini lebih tepat disebutkan dalam hubungan relasi samadengan (=). Dengan demikian bila parameter bernilai tertentu maka dilakukan suatu aksi terkait, bila bernilai lain maka dilakukan aksi yang lain juga, demikian seterusnya. Latihan ke-2 Buat aplikasi baru dengan nama form frmWelcome, kemudian ubah nama komponen/objek sebagai berikut: Objek Properti Nilai properti Metode lewat event Form1 Name FrmWelcome OnActive Caption Welcome Button1 Name BtnQuit OnClick, isi dengan: application.terminate; Caption &Quit Label1 Name Lblunsur Caption Lambang Unsur Kimia Font Times New Roman, Bold, Size : 18 Label2 Name Lblchoose Caption Pilih Lambang Unsur Label3 Name Lbllambang Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 1 If <kondisi_pencabangan1> then Begin ... {aksi-1} end else If <kondisi_pencabangan2> then Begin ... {aksi-2} end else Begin ... {aksi-3} End; Case <Parameter> Of <nilai_1> : <aksi_1> ; <nilai_2> : <aksi_2> ; ... <nilai_n> : <aksi_n> ; Else <aksi_n+1> ; End;
  • 15. Caption (kosong) Font Times New Roman, Bold, Size =12, Color = clTeal Label4 Name Lblcomment Caption (kosong) Font Times New Roman, Bold-Italic,Size = 24, Color = clTeal listBox1 Name Lbxunsur OnClick  Buat method dari komponen frmWelcome lewat event OnActivate, seperti berikut  Buat method dari komponen lbxCountry lewat event OnClick, seperti berikut  Simpan dengan nama unit uWelcome1.pas dan project pWelcome1.dpr pada direktori Latih3 4. STRUKTUR PENGULANGAN Dalam menyelesaikan masalah, terkadang kita harus melaku suatu proses yang sama lebih dari satu kali. Untuk itu perlu dibuat suatu algoritma pengulangan. Pascal memberikan tiga alternatif pengulangan, yaitu dengan For, While, atau Repeat. Masing-masing memiliki karakteristik, yang akan dipelajari pada modul ini. Ada dua hal yang penting dalam melakukan merancang perintah pengulangan, yaitu:  Inisialisasi awal.  Nilai akhir pengulangan atau kondisi berhenti. 4.1. FOR – TO - DO Pada pengulangan dengan For, inisialisasi awal dan kondisi akhir ditentukan dengan menggunakan suatu variable kendali yang nilainya dibatasi dalam suatu range tertentu. Sintaks untuk perintah ini adalah: Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 1 procedure TForm1.FormActivate(Sender: TObject); begin lbxCountry.Hint := 'Please choose...'; lbxCountry.Items[0]:='Ca'; lbxCountry.Items[1]:= 'C'; lbxCountry.Items[2]:= 'Cu'; lbxCountry.Items[3]:= 'Cd'; end; procedure TForm1.lbxCountryClick(Sender: TObject); begin lblCountry.caption := lbxCountry.Items[lbxCountry.ItemIndex]; case lbxCountry.ItemIndex of 0 : lblComment.caption := 'lambang unsur dari Calsium' ; 1 : lblComment.caption := 'lambang unsur dari Carbon' ; 2 : lblComment.caption := 'lambang unsur dari Cuprum' ; 3 : lblComment.caption := 'lambang unsur dari Cadmium' ; end; end;
  • 16. atau Perbedaan antara to dan downto adalah pada kondisi nilai awal dan akhir. Pada to: nilai awal lebih kecil dari nilai akhir, sedangkan pada downto nilai awal lebih besar dari nilai akhir. Perlu diingat, bahwa variable kendali harus dideklarasikan dengan tipe data integer. Contoh program pengulangan menggunakan For-to-do Hasilnya adalah : 1, 2, 3, 4, 5 Contoh program yang sama jika tapa perintah tanpa pengulangan Hasilnya adalah : 1, 2, 3, 4, 5 4.2. WHILE - DO Pada metoda pengulangan ini aksi hanya akan diproses bila kondisi pengulangan terpenuhi, bentuk sintaks dari pengulangan ini adalah: Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 1 For <variable_kendali> := <nilai_awal> to <nilai_akhir> do Begin … {aksi} End ; For <variable_kendali> := <nilai_awal> downto <nilai_akhir> do Begin … {aksi} End ; procedure TfrmPengulangan.btnPengulanganClick(Sender: TObject); var I : integer; begin lbxHasil.Items.Clear; For I := 1 to 5 do Begin lbxHasil.Items.Add(inttoStr(i)); End; End; procedure TfrmPengulangan.btnPengulanganClick(Sender: TObject); begin lbxHasil.Items.Clear; lbxHasil.Items.Add(inttoStr(1)); lbxHasil.Items.Add(inttoStr(2)); lbxHasil.Items.Add(inttoStr(3)); lbxHasil.Items.Add(inttoStr(4)); lbxHasil.Items.Add(inttoStr(5)); End; While <kondisi_ pengulangan> do Begin … {aksi} End ;
  • 17. Selama kondisi_pengulangan bernilai true maka aksi akan dilakukan, dan baru akan berhenti setelah kondisi pengulangan bernilai false. Karena kondisi pengulangan diperiksa pada bagian awal, maka ada kemungkinan aksi tidak pernah dilakukan, yaitu bila kondisi pengulangan tidak pernah bernilai true. Contoh program pengulangan menggunakan While-do 4.3. REPEAT - UNTIL Metoda pengulangan ini juga melakukan pengulangan berdasarkan pemeriksaan kondisi pengulangan. Hanya saja natur dari pengulangan ini adalah sistem seakan-akan memaksa untuk melakukan pengulangan, sampai di ketahui adanya kondisi berhenti. Bentuk sintaks dari pengulangan ini adalah: Berlawanan dengan While, yang akan memproses aksi hanya bila kondisi_pengulangan bernilai true, pada pengulangan Repeat, sistem akan memproses aksi selama kondisi_berhenti bernilai false. Dengan demikian aksi pasti akan selalu diproses (minimal satu kali). Pada tipe ini, pengulangan dapat terjadi terus-menerus (tidak pernah berhenti), yaitu bila kondisi berhenti tidak pernah bernilai true. Contoh program pengulangan menggunakan Repeat- Until Latihan ke-3 Buat aplikasi bari dengan nama form frmPengulangan, kemudian ubah nama komponen/objek sebagai berikut: Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 1 procedure TfrmPengulangan.btnPengulanganClick(Sender: TObject); var I : integer; begin lbxHasil.Items.Clear; I := 1; While I<=5 DO Begin lbxHasil.Items.Add(inttoStr(i)); I := I + 1; End; End; Repeat … {aksi} Until <kondisi_ berhenti> procedure TfrmPengulangan.btnPengulanganClick(Sender: TObject); var I : integer; begin lbxHasil.Items.Clear; I := 1; Repeat lbxHasil.Items.Add(inttoStr(i)); I := I + 1; Until I > 5; End;
  • 18. Objek Properti Nilai properti Method lewat event Form1 Name FrmPengulangan Caption Pengulangan Button1 Name BtnPengulangan Onclick Caption &Pengulangan Label1 Name LblComment Caption (kosong) Font Times New Roman, Bold-Italic, Size = 12 ListBox1 Name LbxHasil OnClick Font Times New Roman, Bold-Italic, Size = 20, Color = clTeal  Buat method dari komponen btnPengulangan lewat event OnClick, seperti berikut  Buat method dari komponen lbxHasil lewat event OnClick, seperti berikut  Simpan dengan nama unit uPengulangan1.pas dan project pPengulangan1.dpr pada direktori Latih4 Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 1 procedure TfrmPengulangan.btnPengulanganClick(Sender: TObject); var I : integer; begin lbxHasil.Items.Clear; For I := 0 to 20 do Begin lbxHasil.Items.Add(inttoStr(i)); end; end; procedure TfrmPengulangan.lbxHasilClick(Sender: TObject); begin lblComment.caption := 'Dicetak saat I bernilai ' + IntToStr(lbxHasil.ItemIndex); end;
  • 19. Setiap data yang disimpan di memori komputer harus memiliki tipe data. Tipe data yang sederhana sekali adalah dikelompokkan menjadi 2 bagian : 1.Teks : a.Char (terdiri dari 1 huruf /1 angka) b.String (terdiri dari beberapa huruf/angka) 2.Bilangan : a.Integer (bilangan bulat ) b.Real (bilangan pecahan) Di Delphi ada beberapa tipe data varian dari kedua tipe data tersebut, yang membedakan adalah range (rentang nilainya). Lihat lampiran tipe data lebih lengkap. 1.1.Berlatih Tipe Data Float dan String Dengan memahami seperti ini kita akan coba membuat sebuah program (projek)untuk menghitung tekanan gas ideal, rumusnya sebagai berikut : P := (n*R*T)/V ; Tempatkan komponen-komponen berikut pada form kemudian ubah nilai propertiesnya : Objek Properti Nilai properti Method lewat event Label1 Caption Tulis : MENGHITUNG TEKANAN GAS IDEAL Font Tahoma, style : bold, size : 14, effects : underline, color : green Label2 Caption Tulis : mol (n) Font Tahoma, style : bold, size : 12, color : green Label3 Caption Tulis : suhu (T) Font Tahoma, style : bold, size : 12, color : green Label4 Caption Tulis : volume (V) Font Tahoma, style : bold, size : 12, color : green Label5 Caption Tulis : tekanan (P) Font Tahoma, style : bold, size : 12, color : green Button1 Caption Tulis : HITUNG OnClick Font Tahoma, style : bold, size : 12 Button2 Caption Tulis : KELUAR OnClick Font Tahoma, style : bold, size : 12 Form1 Color clMoneyGreen Name Formtekanan Edit1 Text (kosong) Edit2 Text (kosong) Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 1 TIPE DATA DALAM DELPHI 2.1 BERLATIH TIPE DATA DI DELPHI
  • 20. Edit3 Text (kosong) Edit4 Text (kosong) Berikut desain form di Delphi : Gambar12. Desain form tekanan  Membuat even OnClick pada Button1 Catatan :  Pada bagian Var, tambahkan : n,T,V,P : real ;  Pada bagian Const, tambahkan : R = 0.082 ;  Membuat even OnClick pada Button2 Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 2 procedure TForm1.Button1Click(Sender:TObject); begin //Konversi dari String ke Float n :=StrTofloat(Edit1.Text); T :=StrTofloat(Edit2.Text); V :=StrTofloat(Edit3.Text); P := (n*R*T)/V ; //Konversi dari Float ke String Edit4.Text :=floatToStr(P); end; procedure TForm1.Button2Click(Sender:TObject); begin application.terminate; end;
  • 21.  Hasil running program aplikasi Gambar14. Hasil Running Di bawah ini adalah sebagian dari tipe data pada Delphi : 1. Integer Merupakan tipe data bilangan bulat, dengan : Type Range Format Integer –2147483648..2147483647 signed 32-bit Cardinal 0..4294967295 unsigned 32-bit Secara fundamental, tipe integer terdiri dari : Type Range Format Shor int –128..127 signed 8-bit Smallin –32768..32767 signed 16-bit Longin –2147483648..2147483647 signed 32-bit Int64 –263 ..263 –1 signed 64-bit Byte 0..255 unsigned 8-bit Word 0..65535 unsigned 16-bit Longword 0..4294967295 unsigned 32-bit 2. Real Merupakan bilangan pecahan, dengan : Type Significant digits Size in bytes Range Real48 11 –12 2.9 x 10–39 ..1.7 x 10386 Single 7 –8 1.5 x 10–45 ..3.4 x 10384 Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 2
  • 22. Double 15 –16 5.0 x 10–324 ..1.7 x 103088 Extended 19 –20 3.6 x 10–4951 ..1.1 x 10493210 Comp 19 –20 –263 +1 ..263 –18 Currency 19 –20 –922337203685477.5808..922337203685477.58078 Secara Generik, tipe real adalah : Type Significant digits Size in bytes Range Real 15 –16 5.0 x 10–324 ..1.7 x 103088 3. String Merupakan huruf, dengan : Type Maximum lenght Memory required Char 1 characters 1 bytes ShortString 255 characters 2 to 256 bytes AnsiString ~231 characters 4 bytes to 2GB WideString ~230 characters 4 bytes to 2GB 4. Boolean Merupakan tipe variabel logika. Nilai dari variabel dari bertipe Boolean adalah True atau False. Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 2
  • 23. FUNGSI STANDAR ARITMATIKA Dalam aplikasi problem-problem sains sejumlah fungsi matematika sering diperlukan. Beberapa fungsi telah tersedia (integrated) dalam Turbo Pascal dan sebagian lagi diperlukan pemrograman. Beberapa fungsi dalam Delphi dapat adalah sebagai berikut : FUNGSI DESKRIPSI 1. FUNGSI ARITMATIKA 1.1. ABS (X) Digunakan untuk menentukan harga mutlak (absolut) dari argumen X Contoh : Var r : single ; i : integer ; begin r := Abs(-2.3) ; {hasil 2.3} i := Abs(-157) ; {hasil 157} end; 1.2. CEIL (X) Digunakan untuk menghasilkan nilai integer terendah yang lebih besar atau sama dengan argumen X. Contoh : Var i, j : real ; begin i := Abs(-2.8) ; {hasil -2} j := Abs(2.8) ; {hasil 3} end; 1.3. EXP (X) Digunakan untuk menghasilkan nilai eksponen, atau nilai e yang dipangkatkan dengan argumen X, dimana e adalah bilangan dasar logaritma 2.718281828 Contoh : Var e : real ; S : string ; begin e := exp(1.0) ; Str(ln(e):3:2, S) ; end; 1.4. FLOOR (X) Digunakan untuk menghasilkan pembulatan (integer) ke bawah dari suatu bilangan ke kelipatan terdekat yang diberikan. Contoh : Var i, j : integer ; begin Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 2 FUNGSI STANDART & PENULISAN EKSPRESI ARITMATIKA DELPHI
  • 24. i := Floor(-2.8) ; {hasil -3} j := Floor(2.8) ; {hasil 2} end; 1.5. FRAC(X) Digunakan untuk menghasilkan bagian pecahan dari argumen X. Contoh : Var R : real ; begin R := Frac(123.456) ; {hasil 0.456} R := Frac(-123.456) ; {hasil -0.456} end; 1.6. INT(X) Digunakan untuk membulatkan bilangan pecahan dengan pembulatan ke bawah menghasilkan bilangan bulat terdekat. Contoh : Var R : real ; begin R := Int(123.456) ; {hasil 123.0} R := Int(-123.456) ; {hasil -123.0} end; 1.7. LN(X) Digunakan untuk menampilkan logaritma suatu bilangan dengan basis e. Contoh : Var e : real ; S : string ; begin e := Exp(1.0) ; Str(ln(e):3:2,S); S := ’e=’+FloatToStr(e) ; Edit1.Text := S ; end; 1.8. MAX(X,Y) Menentukan nilai tertinggi atau terbesar dari dua bilangan. Contoh : Var S : string ; i : integer ; begin i := Max(10,15); {menghasilkan nilai 15} S := ’Max’ = ’+IntToStr(i); Edit1.Text := S ; end; 1.9. MIN(X,Y) Menentukan nilai terendah atau terkecil dari dua bilangan. Var S : string ; i : integer ; begin i := Min(10,15); {menghasilkan nilai 10} S := ’Min’ = ’+IntToStr(i); Edit1.Text := S ; end; 1.10. PI Digunakan untuk menghasilkan nilai pi (3.1415926535897932385) dalam perhitungan matematika. 1.11. POWER(X,Y) Digunakan untuk menghasilkan nilai hasil pemangkatan suatu bilangan X dengan nilai pemangkat Y. Contoh : Var S : string ; i : extended ; begin i := power(2,3); {hasil 8} S := ’Power’ = ’+FloatToStr(i); Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 2
  • 25. Edit1.Text := S ; end; 1.12. ROUND(X) Digunakan untuk menghitung pembulatan data numerik X yang bertipe real dan menghasilkan suatu nilai yang bertipe integer. Contoh : Var S, T : String ; Begin Str(1.4:2:1,T) ; {hasil 1} S := T +’menjadi’+IntToStr(Round(1.4)) ; Str(1.5:2:1,T) ; {hasil 2} S := T +’menjadi’+IntToStr(Round(1.5)) ; Str(-1.4:2:1,T) ; {hasil -1} S := T +’menjadi’+IntToStr(Round(-1.4)) ; Str(-1.5:2:1,T) ; {hasil -2} S := T +’menjadi’+IntToStr(Round(-1.5)) ; MessageDlg(S, mtInformation,[mbOk],0) ; end; 1.13. SQR(X) Memberikan nilai kuadrat suatu bilangan X. Contoh : var S, Y : string; begin Str(Sqr(5.0):3:1,Y) ; {hasil 25} S := ’5 bernilai kuadrat’ + Y ; Edit1.Text := S; end; 1.14. SQRT(X) Memberikan nilai akar kuadrat suatu bilangan X. Contoh : var S, Y : string; begin Str(Sqrt(2.0):5:4,Y) ; {hasil 1.4142} S := akar kuadrat dari 2 adalah’ + Y ; MessageDlg(S, mtInformation,[mbOk],0) ; end; 1.15. TRUNC(X) Menghilangkan bagian nilai pecahan tanpa memperhatikan pembulatan dari suatu data numerik. Contoh : Var S, T : string ; begin Str(1.4:2:1, T); S := T +’hasil’+IntToStr(Trunc(1.4)) ; Edit1.Text := S ; Str(-1.4:2:1, T); S := T +’hasil’+IntToStr(Trunc(-1.4)) ; Edit1.Text :=Edit1.Text + S ; end; 2. FUNGSI TRIGONOMETRI 2.1. ARCCOS(X) Menghitung nilai kebalikan cosinus dari nilai argumen X. Contoh : var S : string ; begin S := FloatToStr(ArcCos(0.5)) ; Edit1.Text := S ; {hasil 1.0471975511966} end; 2.2. ARCSIN(X) Menghitung nilai kebalikan sinus dari nilai argumen X. Contoh : var Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 2
  • 26. S : string ; begin S := FloatToStr(ArcSin(0.5)) ; Edit1.Text := S ; {hasil 0.523598775598299} end; 2.3. ARCTAN(X) Menghitung nilai kebalikan tangen dari nilai argumen X. Contoh : var S : string ; begin S := FloatToStr(ArcTan(1)) ; Edit1.Text := S ; {hasil 0.785398163397448} end; 2.4. COS(X) Menghasilkan niai cosinus dari suatu sudut. var S : string ; begin S := FloatToStr(Cos(Pi)) ; Edit1.Text := S ; {hasil -1} end; 2.5. SIN(X) Menghasilkan niai sinus dari suatu sudut. var S : string ; begin S := FloatToStr(Sin(90)) ; Edit1.Text := S ; {hasil 0.893996663600558} end; 2.6. TAN(X) Menghasilkan niai tangen dari suatu sudut. var S : string ; begin S := FloatToStr(Tan(45*Pi/180)) ; Edit1.Text := S ; {hasil 1} end; 3. FUNGSI STATISTIK 3.1. MAXINTVALUE(X) Menghasilkan nilai tertinggi yang terdapat di dalam array dengan tipe data integer. Contoh : var S : string ; begin S := FloatToStr(MaxIntValue([10,20,40,30])); Edit1.Text := S ; {hasil 40} end; 3.2. MAXVALUE(X) Menghasilkan nilai tertinggi yang terdapat di dalam array dengan tipe data integer, dan fungsi MaxValue akan menghasilkan data bertipe Double. Contoh : var S : string ; begin S := FloatToStr(MaxValue([10.5,20,40.25,30])); Edit1.Text := S ; {hasil 40.25} end; 3.3. MEAN(X) Menghasilkan nilai rata-rata dari semua nilai dalam suatu array Contoh : var S : string ; begin S := FloatToStr(Mean([10.5,20,40.25,30])); Edit1.Text := S ; {hasil 25.1875} end; Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 2
  • 27. 3.4. MININTVALUE(X) Menghasilkan nilai terendah yang terdapat di dalam array dengan tipe data integer. Contoh : var S : string ; begin S := FloatToStr(MinIntValue([10,20,40,30])); Edit1.Text := S ; {hasil 10} end; 3.5. NORM(X) Menghasilkan norma Euclidean ’L-2’. Contoh : var S : string ; begin S := FloatToStr(Norm([10,20,40,30])); Edit1.Text := S ; {hasil 54.7722557505166} end; 3.6. POPNSTDDEV(X) Menghitung populasi standar deviasi (akar kuadrat varian populasi) dari semua nilai dalam parameter array data. Contoh : var S : string ; begin S := FloatToStr(POPNSTDDEV([10,20,40,30])); Edit1.Text := S ; {hasil 11.1803398874989} end; 3.7. POPNVARIANCE Menghitung varian populasi dari semua nilai dalam parameter array data. Contoh : var S : string ; begin S := FloatToStr(POPNVARIANCE([10,20,40,30])); Edit1.Text := S ; {hasil 125} end; 3.8. STDDEV(X) Menghasilkan sampel standart deviasi (akar kuadrat dari varian sampel) dari semua nilai dalam parameter array data. Contoh : var S : string ; begin S := FloatToStr(StdDev([10,20,40,30])); Edit1.Text := S ; {hasil 12.9099444873581} end; 3.9. SUM(X) Meghasilkan jummlah semua nilai-nilai dari parameter array data. Contoh : var S : string ; begin S := FloatToStr(Sum([10,20,40.25,30])); Edit1.Text := S ; {hasil 100.25} end; 3.10 VARIANCE(X) Menghitung varian sampel dari semua nilai dalam parameter array data, gunakan metode n-1 (tidak bias). Contoh : var S : string ; begin S := FloatToStr(Variance([10,20,40,30])); Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 2
  • 28. Edit1.Text := S ; {hasil 166.6666667} end; Harga x dalam fungsi sinus, cosinus dan arctangen dalam radian karena itu agar dapat memasukkan x dalam satuan derajat harus dilakukan konversi dari derajat ke radian yaitu x = π/180 x Misalnya untuk penulisan sin (x) y = ) /180 sin( π x Untuk perpangkatan ab diturunkan dengan cara berikut x = ab Ln (x) = b*Ln (a), maka e aLnb x )(* = PENULISAN EKSPRESI ARITMATIKA PASCAL UNTUK DELPHI Beberapa hal yang harus diperhatikan dalam penulisan ekspresi aritmatika adalah • Penggunaan operasi aritmatika, memiliki urutan yang sama sebagaimana dalam aljabar yaitu pertama perpangkatan, kedua perkalian atau pembagian, dan ketiga penjumlahan atau pengurangan. • Penggunaan kurung untuk menjamin urutan hitungan dengan benar • Simbol perkalian harus dituliskan • Untuk rumus yang kompleks maka dilakukan dengan pemecahan rumus menjadi beberapa rumus sederhana Beberapa contoh penulisan ekspresi aritmatika adalah EKSPRESI ARITMATIKA EKSPRESI PASCAL A − b a − b ab a * b 2b 2 * b 2c + 3b2 2 * c + 3 * Sqr(b) atau 2 * c + 3 * b * b 7 . dc ba − − (a − b)/(c − d) * 7 atau 7 * (a − b)/(c − d) atau 7/(c − d) * (a − b) 7).( dc ba − − (a − b)/(c − d) / 7 atau (a − b)/((c − d) * 7) atau 1/7/(c − d) * (a − b) X2 Sqr(x) atau x * x X5 Sqr(x) * Sqr(x) * x atau x * x * x * x * x x Sqrt(x) x2 3 x * Sqrt(x) atau Sqrt(x * x * x) atau Sqrt(x * Sqr( x)) Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 2
  • 29. ( )M RT π 8 2 1 Sqrt((8*R*T)/(Pi*M)) RT E E/(R * T) atau E/R/T atau E/T/R atau 1/(T * R) * E e RT Mgz Exp ((M*g*z)/(R*T)) )( )( xCos xSin Sin (x)/Cos (x) Log(x) Ln (x)/Ln (10) atau Ln (x)/2.303 Abs(x) Abs (x) Untuk rumus yang kompleks misalnya       − +      − − = 21 212 1 2 VV VV an nbV nbV nRTLnW Penulisannya adalah W := n*R*T*Ln((V2-n*b)/(V1-n*b)) + a*Sqr(n)*((V1-V2)/(V1*V2)); Penulisan seperti ini memungkinkan banyak kesalahan, karena itu lebih baik jika ditulis secara bertahap sebagai berikut Rumus1 := (V2-n*b)/(V1-n*b); Rumus2 := Ln(Rumus1); Rumus3 := n*R*T*Rumus2; Rumus4 := (V1-V2)/(V1*V2); Rumus5 := a*Sqr(n)*Rumus4; W := Rumus3 + Rumus5; Cara lain Rumus1 := (V2-n*b)/(V1-n*b); Rumus2 := (V1-V2)/(V1*V2); W := n*R*T*Ln(Rumus1) + a*Sqr(n)*Rumus2; Contoh lain rumus untuk menghitung fraksi molekul pada range kecepatan tertentu per satuan luas interval RT Mc ec RT M Fv 2 2 2 2 3 2 4 −      = π π Penulisan ekspresi Pascal untuk rumus di atas dengan cara langsung akan sulit dan lebih banyak kemungkinan salahnya, karena itu sebaiknya ditulis secara bertahap, sebagai contoh R1 := M/(2*Pi*R*T); R2 := Sqrt(R1*R1*R1); R3 := (-M*c*c)/(2*R*T); R4 := Exp(R3); Fv := 4*Pi*R2*Sqr(c)*R4; Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 2
  • 30. Cara lain R1 := M/(2*Pi*R*T); R1 := R1*Sqrt(R1); R2 := (-M*c*c)/(2*R*T); R2 := Exp(R2); Fv := 4*Pi*R1*Sqr(c)*R2; Banyak cara lain untuk menulis rumus di atas, yang penting penulisan rumus dengan ekpresi Pascal tidak boleh menyalahi ekpresi matematikanya. Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 3
  • 31. Menghitung harga tekanan berdasarkan hukum gas ideal jika jumlah mol, temperatur dan volume sistem diketahui. Rumus : V nRT p = R adalah konstanta gas dengan harga 0,082054 L.atm/mol.K. Design Form: Tabel Properties Object Inspector: Objek Properti Nilai Properti Form Caption Hitung Tekanan gas Ideal Color clMoneyGreen Label1 Caption MENGHITUNG TEKANAN GAS IDEAL Font Color: clNavy, Name: Times New Roman, Size: 15, Style: fsBold (True) Label2 Caption INPUT Font Color: clRed, Name: Tahoma, Size: 12, Style: fsBold Label3 Caption Mol Font Style: fsBold (True) Label4 Caption R Font Style: fsBold (True) Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 3 6.1. RUMUS GAS IDEAL APLIKASI SEDERHANA KIMIA KOMPUTASI MENGGUNAKAN DELPHI
  • 32. Label5 Caption Temperatur Font Style: fsBold (True) Label6 Caption Volume Font Style: fsBold (True) Label7 Caption OUTPUT Font Color: clRed, Name: Tahoma, Size: 12, Style: fsBold Label8 Caption RUMUS Font Color: clRed, Name: Tahoma, Size: 12, Style: fsBold Edit1 Color clInactiveCaptionText Text (kosong) Edit2 Color clInactiveCaptionText Text 0.082 Edit3 Color clInactiveCaptionText Text (kosong) Edit4 Color clInactiveCaptionText Text (kosong) Edit5 Color clAqua Listing Unit Program: unit hitP; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Edit1: TEdit; Label3: TLabel; Label4: TLabel; Edit2: TEdit; Label5: TLabel; Edit3: TEdit; Label6: TLabel; Edit4: TEdit; Label7: TLabel; Edit5: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; Image1: TImage; Label8: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 3
  • 33. { Private declarations } public { Public declarations } end; var Form1: TForm1; n,R,T,V,p : real; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin n := strtofloat(edit1.Text); R := strtofloat(edit2.Text); T := strtofloat(edit3.Text); V := strtofloat(edit4.Text); p := (n*R*T)/V; Edit5.Text:= floattostr(p); Edit1.SetFocus; end; procedure TForm1.Button2Click(Sender: TObject); begin Edit1.Clear; Edit2.Clear; Edit3.Clear; Edit4.Clear; Edit5.Clear; Edit1.SetFocus; end; procedure TForm1.Button3Click(Sender: TObject); begin Application.Terminate; end; end. Keterangan : Layout form program ini sangat sederhana, tetapi memuat bagian input dan output. Bagian input berisi data yang harus diberikan untuk dapat menghitung harga tekanan dengan satuan sesuai permintaan program. Output program menampilkan data input yang diketahui dan harga tekanan hasil hitungan rumus menggunakan format penulisan numerik di- git di belakang koma. Misal WriteLn('Jumlah mol = ',n:10:4,' mol'); Akan tampil di monitor Jumlah mol = 12345.6789 mol 10 angka Angka terakhir terletak pada 10 angka setelah tanda (=) dengan 4 angka di belakang koma. Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 3
  • 34. Menghitung harga molaritas dan normalitas larutan dengan rumus : MolaritasxValensiNormalitas xMr xPBxBJ Molaritas = = 100 1000 BJ adalah berat jenis zat, PB adalah persen berat zat dan Mr adalah massa molekul zat yang akan dihitung molaritas dan normalitas larutannya. Design Form Tabel Properties Object Inspector: Objek Properti Nilai Properti Label1 Caption MOLARITAS DAN NORMALITAS Label2 Caption INPUT Label3 Caption OUTPUT Label4 Caption Densitas Label5 Caption % Berat Label6 Caption Massa Molekul Label7 Caption Valensi Label8 Caption Molaritas Label9 Caption Normalitas Label10 Caption RUMUS Edit1 Text (kosong) Edit2 Text (kosong) Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 3 6.2 MOLARITAS DAN NORMALITAS
  • 35. Edit3 Text (kosong) Edit4 Text (kosong) Edit5 Text (kosong) Edit6 Text (kosong) Button1 Caption HITUNG Button2 Caption ULANG Button3 Caption KELUAR Image1 Picture Load : molaritas.jpg Strecht false Listing Unit Program unit molnor; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, jpeg; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; Edit6: TEdit; Label9: TLabel; Label10: TLabel; Image1: TImage; procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; BJ,Pb,Mr,M,N : real; Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 3
  • 36. val : byte; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin BJ := strtofloat(Edit1.Text); PB := strtofloat(Edit2.Text); Mr := strtofloat(Edit3.Text); val := strtoint(Edit4.Text); M := (BJ*1000*PB)/(Mr*100); N := val*M; Edit5.Text := floattostr(M); Edit6.Text := floattostr(N); end; procedure TForm1.Button3Click(Sender: TObject); begin close; end; procedure TForm1.Button2Click(Sender: TObject); begin edit1.Text := ' '; edit2.Text := ' '; edit3.Text := ' '; edit4.Text := ' '; edit5.Text := ' '; edit6.Text := ' '; edit1.SetFocus; end; end. Hasil Running Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 3
  • 37. Keterangan : Program ini memuat dua rumus untuk menghitung molaritas dan normalitas. Layout program sama dengan praktikum_1. Perhatikan penulisan rumus bagian atas dan bagian bawah. Untuk lebih mantapnya maka bagian atas dan bagian bawah masing-masing diberi kurung. Untuk menghitung 3 rumus sekaligus dengan input yang diminta. Rumusnya adalah M RT avg M RT mp M RT rms C C C π 8 2 3 = = = Crms = root-mean-square speed (akar rata-rata kuadrat kecepatan) Cmp = most probable speed (kecepatan paling boleh jadi) Cavg = average speed (kecepaatan rata-rata) R = konstanta gas T = temperatur dalam Kelvin M = massa molekul Design program Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 3 6.3 ROOT MEAN SQUARE
  • 38. Tabel Properties Object Inspector: Objek Properti Nilai Properti Label1 Caption ROOT MEAN SQUARE Label2 Caption INPUT Label3 Caption OUTPUT Label4 Caption Temperatur Label6 Caption Massa Molekul Label7 Caption Crms Label8 Caption Cmp Label9 Caption Cavg Label10 Caption RUMUS Edit1 Text (kosong) Edit2 Text (kosong) Edit4 Text (kosong) Edit5 Text (kosong) Edit6 Text (kosong) Button1 Caption HITUNG Button2 Caption ULANG Button3 Caption KELUAR Image1 Picture Load : rootmeansquare.jpg Strecht false Listing Unit Editor unit rootmeansquare; Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 3
  • 39. interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, jpeg; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Edit1: TEdit; Edit2: TEdit; Edit4: TEdit; Edit5: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; Edit6: TEdit; Label9: TLabel; Label10: TLabel; Image1: TImage; procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; const R = 8.314E+7; var Form1: TForm1; Crms,Cmp,Cavg,T,Mr : real; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin T := strtofloat(Edit1.Text); Mr := strtofloat(Edit2.Text); Crms := sqrt((3*R*T)/Mr); Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 3
  • 40. Cmp := sqrt((2*R*T)/Mr); Cavg := sqrt((8*R*T)/(pi*Mr)); Edit4.Text := floattostr(Crms); Edit5.Text := floattostr(Cmp); Edit6.Text := floattostr(Cavg); end; procedure TForm1.Button3Click(Sender: TObject); begin close; end; procedure TForm1.Button2Click(Sender: TObject); begin edit1.Text := ' '; edit2.Text := ' '; edit4.Text := ' '; edit5.Text := ' '; edit6.Text := ' '; edit1.SetFocus; end; end. Hasil Running Keterangan : Program ini memuat tiga rumus sekaligus dengan satu input. Layout program sama dengan praktikum_1. Perhatikan satuan yang diminta input sehingga harga R harus mengikuti satuan yang diminta. Dalam Pascal untuk memasukkan harga π cukup dengan menuliskan pi sehingga tidak perlu dimasukkan sebagai konstanta. Perhatikan penulisan harga konstanta dengan bentuk eksponensial : R = 8.314E+7; Penulisan akar kuadrat menggunakan prosedur sqrt( ). Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 4
  • 41. Fungsi energi bebas Fo berhubungan dengan fungsi partisi q dengan rumus Fo = −R Ln (q/No). R adalah konstanta gas dan No adalah bilangan Avogadro dan q dihasilkan dari perkalian qt, qr, Qv (fungsi partisi translasi, rotasi dan vibrasi) suatu molekul. Tulislah program untuk menghitung harga Fo air menggunakan data dan rumus berikut qt = (0,02562) x (M)3/2 (T)5/2 qr = ½ x (1042,95)3/2 x 1/(A x B x C)1/2 Qv = qv1 qv2 qv3 dimanaqv1 = 1/(1−exp(−hcw1/kT)); qv2 = 1/(1−exp(hcw2/kT)); qv3 = 1/(1−exp(−hcw3/kT)); diketahui M = 18,015; T = 1500; A = 27,8778; B = 14,5092; C = 9,2869; w1 = 3656,7; w2 = 1594,8 w3 = 3755,8 c = kecepatan cahaya h = tetapan Planck k = tetapan Boltzmann Design Form Tabel Properties Object Inspector: Objek Properti Nilai Properti StaticText1 Caption FUNGSI ENERGI BEBAS GroupBox1 Caption INPUT GroupBox2 Caption OUTPUT Label1 Caption Temperatur (T) Label2 Caption Molaritas (M) Label3 Caption q Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 4 6.4 FUNGSI ENERGI BEBAS
  • 42. Label4 Caption qr Label5 Caption qt Label6 Caption Qv Label7 Caption qv3 Label8 Caption qv2 Label9 Caption qv1 Label10 Caption F Button1 Caption HITUNG Butoon2 Caption ULANG Button3 Caption KELUAR Edit1 Text (kosong) Edit2 Text (kosong) Edit3 Text (kosong) Edit4 Text (kosong) Edit5 Text (kosong) Edit6 Text (kosong) Edit7 Text (kosong) Edit8 Text (kosong) Edit9 Text (kosong) Edit10 Text (kosong) Listing Unit Editor unit energibebas; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) StaticText1: TStaticText; GroupBox1: TGroupBox; GroupBox2: TGroupBox; Label1: TLabel; Label2: TLabel; Edit1: TEdit; Edit2: TEdit; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 4
  • 43. Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Edit7: TEdit; Edit8: TEdit; Edit9: TEdit; Edit10: TEdit; procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; Const A = 27.8778; B = 14.5092; C = 9.2869; w1= 3656.7; w2= 1594.8; w3= 3755.8; k = 1.38e-23; h = 6.626e-34; No= 6.022e23; cc= 2.99e8; R = 8.314; Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 4
  • 44. var Form1: TForm1; M,T,F,q,qt,qr,Qv,qv1,qv2,qv3 : real; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin M:= StrtoFloat(edit1.Text); T:= StrtoFloat(edit1.Text); qv1 := 1/(1-exp(-(h*cc*w1)/(k*T))); qv2 := 1/(1-exp( (h*cc*w2)/(k*T))); qv3 := 1/(1-exp(-(h*cc*w3)/(k*T))); Qv := qv1*qv2*qv3; qt := 0.02562*sqrt(M*M*M)*sqrt(T*T*T*T*T); qr := 0.5*sqrt(1042.95*1042.95*1042.95)*(1/(sqrt(A*B*C))); q := qt+qr+Qv; F := -R*ln(q/No); edit9.Text:=FloatToStr(qv1); edit8.Text:=FloatToStr(qv2); edit7.Text:=FloatToStr(qv3); edit6.Text:=FloatToStr(Qv); edit5.Text:=FloatToStr(qt); edit4.Text:=FloatToStr(qr); edit3.Text:=FloatToStr(q); edit10.Text:=FloatToStr(F); end; procedure TForm1.Button3Click(Sender: TObject); begin application.Terminate; end; procedure TForm1.Button2Click(Sender: TObject); begin edit1.Text:= ' ' ; edit2.Text:= ' ' ; Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 4
  • 45. edit3.Text:= ' ' ; edit4.Text:= ' ' ; edit5.Text:= ' ' ; edit6.Text:= ' ' ; edit7.Text:= ' ' ; edit8.Text:= ' ' ; edit9.Text:= ' ' ; edit10.Text:= ' ' ; end; end. Hasil Running Keterangan : Program dibagi dalam 3 prosedur : data, rumus dan hasil. Masing-masing dibuat dulu, lalu disusun urutannya dalam program utama. Dengan memanggil nama prosedurnya saja maka komputer akan menjalankan program sesuai urutan dalam program utama. Perhatikan pula cara penulisan konstanta di bagian deklarasi. Menghitung fraksi molekul dalam range kecepatan c sampai c + dc per satuan luas interval dengan rumus         −       = RT Mc c ec RT M dc dn N 2 2 22 3 2 4 1 π π dimana M adalah massa molar molekul, R adalah konstanta gas, c adalah kecepatan cahaya, T adalah temperatur. Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 4 6.5 DISTRIBUSI PROBABILITAS
  • 46. Design Form Tabel Properties Object Inspector: Objek Properti Nilai Properti StaticText1 Caption DISTRIBUSI PROBABILITAS StaticText2 Caption INPUT StaticText3 Caption OUTPUT StaticText4 Caption RUMUS Label1 Caption Temperatur (T) Label2 Caption Massa molekuler (M) Label3 Caption Distribusi Probabilitas (Dprob) Button1 Caption HITUNG Button2 Caption ULANG Button3 Caption KELUAR Image1 Picture Load : Dprob.jpg Bevel1 Shape bsFrame Style bsRaised Bevel2 Shape bsFrame Style bsRaised Bevel3 Shape bsTopLine Style bsLowered Bevel4 Shape bsTopLine Style bsLowered Bevel5 Shape bsLeftLine Style bsRaised Bevel6 Shape bsFrame Style bsRaised Listing Unit Editor unit distprob; Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 4
  • 47. interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, jpeg; type TForm1 = class(TForm) Label1: TLabel; StaticText1: TStaticText; StaticText2: TStaticText; StaticText3: TStaticText; Label2: TLabel; Edit1: TEdit; Edit2: TEdit; Label3: TLabel; Edit3: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; StaticText4: TStaticText; Bevel1: TBevel; Bevel2: TBevel; Bevel3: TBevel; Bevel4: TBevel; Bevel5: TBevel; Image1: TImage; Bevel6: TBevel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; Const c = 2.99792458E+8; R = 8.31441; var Form1: TForm1; M,T : real; rumus1,rumus2,rumus3,rumus4,Dprob : real; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 4
  • 48. M:= StrtoFloat(edit1.Text); T:= StrtoFloat(edit2.Text); rumus1 := M/(2*pi*R*T); rumus2 := sqr(rumus1)*rumus1; rumus3 := sqrt(rumus2); rumus4 := (M*sqr(c))/(2*R*T); Dprob := 4*pi*rumus3*sqr(c)*exp(-rumus4); edit3.Text := floattostr(Dprob); end; procedure TForm1.Button2Click(Sender: TObject); begin edit1.Text := ' ' ; edit2.Text := ' ' ; edit3.Text := ' ' ; end; procedure TForm1.Button3Click(Sender: TObject); begin close; end; end. Hasil Running Keterangan : Karena kemungkinan harga fraksi molekul yang dihitung memiliki range di luar range real maka dalam program ini digunakan tipe data double yang memiliki range 5.0e-324...1.7e308 dengan digit 15-16 dan ukuran byte 8, dapat juga menggunakan tipe data Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 4
  • 49. extended yang memiliki range 3.4e-4932...1.1e4932 dengan digit 19-20 dan ukuran byte 10. Untuk dapat menggunakan tipe data itu maka di atas program harus diletakkan pengarah kompiler {$N+} sebagai kode pemakaian 80x87 Floating Point. Penulisan rumus dalam Procedure rumus; juga dibuat bagian-bagian untuk menghindari kesalahan. Prinsipnya adalah untuk memudahkan penulisan rumus dengan betul. Menjumlah bilangan berurutan dari 1 sampai angka tertentu dengan rumus ∑= = n i iJumlah 1 Design Form Program Praktikum_6; Uses CRT; Var sumi,n,i : word; Begin ClrScr; Write('Bilangan maksimal = '); readln(n); sumi := 0; for i := 1 to n do Begin sumi := sumi + i; WriteLn('i ',i,' = ',sumi:3); End; End. Keterangan : Program ini menggunakan looping (pengulangan) for .. to .. do untuk menjumlahkan bilangan berurutan dari 1 sampai n. Penjumlahan tertulis pada persamaan sumi := sumi + i; urutan angka yang dijumlah diatur oleh looping for i := 1 to n do. Menghitung kekuatan ionik dengan rumus ∑= 2 )2/1( ii zcI dimana I adalah kekuatan ionik, ci adalah konsentrasi ion ke-i, dan zi adalah muatan ion ke-i. Kemudian rumus ini digunakan untuk menghitung koefisien aktivitas menggunakan teori Debye-Huckel dengan rumus ± ± ± ± = −= −= γ γ γ γ ln 2/1 21 2/1 21 )(509,0*303,2ln )(509,0log e Izz Izz Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 4 6.6 JUMLAH BILANGAN 6.7 KOEFISIEN AKTIVITAS
  • 50. dimana γ± adalah koefisien aktivitas ionik rata-rata. Program Praktikum_7; Uses crt; Var i,n,z,sumz : integer; c,absz,sumi,f1,f2,ion,koef : real; Procedure input; Begin ClrScr; Write('Banyaknya ion = '); ReadLn(n); end; Procedure zkali; Begin sumz := 1; for i := 1 to n do begin write('Muatan ion ',i,' = '); readln(z); sumz := sumz*z; end; absz := abs(sumz); end; Procedure ionic_strength; Begin sumi := 0; for i := 1 to n do Begin Write('Konsentrasi ion ',i,' = '); ReadLn(c); Write('Muatan ion ',i,' = '); ReadLn(z); WriteLn; sumi := sumi+c*z*z; end; ion := sumi/2; end; Procedure koef_aktivitas; Begin f1 := -0.509*absz*sqrt(ion); f2 := f1*2.303; koef := exp(f2); writeln; writeln('Kekuatan ionik = ',ion:10:6); writeln('Koefisien aktivitas = ',koef:10:6); end; {Program utama} Begin Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 5
  • 51. ClrScr; input; zkali; WriteLn; ionic_strength; koef_aktivitas; ReadLn; End. Keterangan : Procedure zkali; menghitung perkalian muatan ion ke-i dan harga absolutnya yaitu z1z2. Looping perkalian ditulis dengan persamaan sumz := sumz*z; Procedure ionic_strength; menghitung harga ∑ cizi 2 pada looping sumi := sumi+c*z*z; dan menghitung harga kekuatan ionik pada rumus ion := sumi/2; Procedure koef_aktivitas; menghitung harga koefisien aktivitas pada rumus f1 := -0.509*absz*sqrt(ion); f2 := f1*2.303; koef := exp(f2); dimana f1 = log γ± dan f2 = ln γ±, koef adalah koefisien aktivitas. Harga koefisien aktivitas dapat juga dihitung menggunakan rumus koef = 10f1 . Menghitung energi rotasi molekul diatomik dengan rumus I h JJJerot 2 2 8 ).1.()( π += J adalah bilangan kuantum rotasi (J = 0, 1, 2, 3, ….) I adalah momen inersia, I = µ r2 untuk molekul diatomik h adalah konstanta Planck degenerasi keadaan energi J adalah 2J + 1. Rumus fungsi partisi rotasi adalah ∑ += ∞ = + − 0 .28 2)1( ).12( J kTI hJJ rot eJq π k adalah konstanta Boltzmann r adalah jarak diantara atom-atom µ adalah massa tereduksi,         + 21 21. mm mm mi adalah massa atom i (berat atom / konstanta Avogadro) {$N+} Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 5 6.8 ENERGI ROTASI DAN FUNGSI PARTISI
  • 52. Program Praktikum_8; Uses CRT; Const maksimal = 100; planck = 6.626076e-34; {Joule-detik} Boltzmann = 1.38066e-23; {Joule/Kelvin} Avogadro = 6.02214e+23; {1/mol} Type urut = array[0..maksimal] of double; Var J,Jmax : integer; h2,ri,ri2,m1km2,m1tm2,faktor,Inersia,RIkatan,pi2,rumus1,masa1,masa2 : double; a,k,T : real; Expon1,Expon2,FPar,Energi : urut; Procedure input; Begin Write('Masa atom 1 dalam gram/mol = '); ReadLn(m1); Write('Masa atom 2 dalam gram/mol = '); ReadLn(m2); Write('Panjang ikatan dalam Angstrom = '); ReadLn(R); Write('Temperatur dalam Kelvin = '); ReadLn(T); Write('Maximal J = '); ReadLn(Jmax); end; Procedure rumus; Begin k := Boltzmann; a := avogadro; h2 := sqr(planck); ri := R * 1e-10; ri2 := sqr(ri); m1km2 := m1 * m2; m1tm2 := m1 + m2; faktor := 1 / (a * 1000); Inersia := (m1km2/m1tm2) * faktor * ri2; pi2 := sqr(pi); rumus1 := h2 / (8 * pi2 * Inersia); j := 0; Fpar[j] := 0; Repeat Energi[J] := rumus1 * J * (J + 1); Expon1[j] := exp(-energi[j]/(k*T)); Expon2[j] := ((2*j)+1)*Expon1[j]; Fpar[j] := Fpar[j] + Expon2[j]; j := j + 1; Until j > Jmax; end; Procedure output; Begin for J := 0 To Jmax do Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 5
  • 53. Begin WriteLn('Energi ',J,' = ',Energi[J], 'F partisi ',j,' = ',Fpar[j]); end; end; {program utama} Begin ClrScr; input; rumus; WriteLn; output; ReadLn; End. Keterangan : Dalam program ini diberikan tipe data baru untuk mengurutkan atau menderetkan data yaitu menggunakan Type urut = array[0..maksimal] of double; Variabel yang menggunakan tipe data array ditulis dengan kotak […] seperti contoh berikut Energi[J] := rumus1 * J * (J + 1); Expon1[j] := exp(-energi[j]/(k*T)); Looping untuk menghitung fungsi partisi rotasi adalah j := 0; Fpar[j] := 0; Repeat Energi[J] := rumus1 * J * (J + 1); Expon1[j] := exp(-energi[j]/(k*T)); Expon2[j] := ((2*j)+1)*Expon1[j]; Fpar[j] := Fpar[j] + Expon2[j]; j := j + 1; Until j > Jmax; Looping Repeat……Until menghitung energi rotasi dari bilangan kuantum J = 0 sampai batas looping yaitu Until J > Jmax; Batas looping ini menunjukkan jika J > Jmax maka tidak lagi menghitung besarnya energi rotasi, maksimal J adalah Jmax. Batas looping dapat juga diungkapkan dengan cara lain misalnya Until J := Jmax + 1; Maksudnya looping akan berhenti jika ditemui harga J = Jmax + 1. Penambahan harga J menggunakan rumus J := J + 1; atau dapat juga menggunakan inc(J,1); Menghitung energi aktivasi berdasarkan data beberapa temperatur dan konstanta laju reaksi menggunakan rumus Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 5 6.9 ENERGI AKTIVASI
  • 54. RT E eAk − = . k adalah konstanta laju raksi, A adalah faktor Arrhenius, E adalah energi aktivasi dan T adalah temperatur. Persamaan Arrhenius dapat diubah dalam bentuk logaritma sebagai berikut RT E Ak RT E Ak 303,2 loglog atau lnln −= −= Energi aktivasi reaksi dapat ditentukan jika konstanta laju reaksi diukur pada berbagai temperatur berbeda. Plotting log k terhadap 1/T akan menghasilkan slope sebesar −E / 2,303R, sehingga harga E = −2,303 x slope. Program Praktikum_9; Uses CRT; Const R = 8.314; Var T,K,LK,A,sT : array[1..50] of real; Ea,slope,sumA,rA : real; jd,i : byte; Procedure Input; Begin Write('Jumlah data = '); ReadLn(jd); WriteLn; for i := 1 to jd do begin Write('Temperatur ',i:2,' = '); ReadLn(T[i]); Write('Konstanta ',i:2,' = '); ReadLn(K[i]); WriteLn; end; end; Procedure Hitung_Ea; Begin WriteLn; WriteLn('T':3,'1/T':13,'Ln K':22); for i := 1 to jd do begin LK[i] := ln(K[i]); sT[i] := 1/T[i]; WriteLn(T[i]:6:3,sT[i]:13:6,LK[i]:20:4); end; slope := (LK[jd]-LK[1])/(sT[1]-sT[jd]); slope := abs(slope); Ea := slope*R; end; Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 5
  • 55. Procedure Hitung_A; Begin sumA := 0; for i := 1 to jd do begin A[i] := K[i]/exp(-Ea/(R*T[i])); sumA := sumA + A[i]; end; rA := sumA/jd; end; Procedure Hasil; Begin WriteLn; WriteLn('Slope = ',slope:6:3,' Energi Aktivasi = ':15,Ea:10:3); WriteLn; WriteLn('Fak Frek = ',rA:15); end; {Program Utama} Begin Repeat ClrScr; Input; Hitung_Ea; Hitung_A; Hasil; Until ReadKey = #27; End. Keterangan : Harga slope dalam program ini dicari dari selisih data pertama dengan data terakhir. Mungkin kurang tepat tetapi sebagai contoh hitungan dapat dipakai untuk perkiraan harga. Dapat juga dicoba menggunakan cara rata-rata seperti yang diterapkan untuk menghitung harga faktor Arrhenius. Looping for … to … do dapat dipakai untuk menghitung harga 1/T dan ln k, dan harga faktor Arrhenius. Dalam program ini dikenalkan cara pengulangan program menggunakan looping Repeat … Until. Pengu-langan akan dilakukan jika tombol yang ditekan (ReadKey) adalah selain tombol <Esc>. Jadi jika ditekan tombol <Esc> dengan kode ASCII # 27 maka program akan selesai. Satu liter larutan yang mengandung 0,001 mol NaCl dicampur dengan 1 liter larutan yang mengandung 0,001 mol AgNO3. Bila Ksp AgCl = 1,8 x 10−10 apakah terjadi endapan ? Program Praktikum_10; Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 5 6.10 KELARUTAN
  • 56. Uses CRT; Const KspAgCl = 1.8e-10; Var a,b,c,d,e,f,g,h : real; kd,opsi : char; simpulan : string[20]; Label 01; Begin 01 : ClrScr; WriteLn('Larutan a liter yang mengandung b mol NaCl dicampur dengan '); WriteLn('c liter larutan yang mengandung d mol AgNO3.'); WriteLn('Apakah terjadi Endapan ?'); WriteLn; WriteLn('Ksp AgCl = ',KspAgCl:10); Write('Diketahui a = '); ReadLn(a); Write(' b = '); ReadLn(b); Write(' c = '); ReadLn(c); Write(' d = '); ReadLn(d); WriteLn('--------------------------------------'); WriteLn; WriteLn('Jawaban :'); WriteLn(a:6:4,' liter larutan mengandung ',b:8:6,' mol Cl-'); delay(1000); WriteLn(c:6:4,' liter larutan mengandung ',d:8:6,' mol Ag+'); delay(1000); e := a + c; WriteLn('Volume campuran = ',e:6:4,' liter'); WriteLn; f := b/e; g := d/e; WriteLn('[Cl-] = ',b:8:6,' / ',e:6:4,' mol/liter = ',f:8:6,' mol/liter'); delay(1000); WriteLn('[Ag+] = ',d:8:6,' / ',e:6:4,' mol/liter = ',g:8:6,' mol/liter'); delay(1000); WriteLn; h := f*g; WriteLn('[Ag+][Cl-] = ',f:8:6,' x ',g:8:6,' = ',h:10); delay(2000); WriteLn; if h < KspAgCl then Begin kd := '<'; simpulan := 'tidak mengEndap'; End else Begin kd := '>'; simpulan := 'mengEndap'; End; WriteLn('Karena [Ag+][Cl-] ',kd,' Ksp AgCl maka AgCl ',simpulan); WriteLn('<Esc> Keluar <Enter> Ulang'); opsi := ReadKey; if opsi = #13 then GoTo 01 else halt; Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 5
  • 57. ClrScr; End. Keterangan : Dalam program ini dikenalkan teknik menampilkan soal dan jawaban secara bertahap. Untuk mengatur waktu munculnya jawaban digunakan prosedur delay(x) dimana x adalah variabel waktu yang bernilai 1/1000 detik. Jadi jika akan menahan tampilan selama 2 detik maka x diberi harga 2000. Untuk memilih jawaban mengendap atau tidak mengendap digunakan seleksi dengan statemen if … then … else …. Variabel kd bertipe char yaitu tipe data yang berisi 1 karakter baik berupa angka atau huruf atau simbol, sedangkan variabel simpulan bertipe string. Untuk penghematan memori maka panjangnya string dapat dibatasi, misal sebanyal 20 karakter dengan penulisan string[20]. Teknik pengulangan program dilakukan dengan prosedur label yang dideklarasikan dengan harga tertentu misalnya 01. Jika ditekan tombol <enter> dengan kode ASCII #13 maka program akan mengulang mulai dari nomor label ditempatkan yaitu mulai dari letak harga label 01 pada badan program. Jika yang ditekan bukan tombol <enter> maka program akan berhenti. Prosedur halt digunakan untuk keluar dari program. Persen massa C, H dan O dalam vitamin C ditentukan secara eksperimen dengan membakar 2,00 mg cuplikan. Massa CO2 dan H2O yang terbentuk berturut-turut 3,00 mg dan 0,816 mg. Tentukan persen massa C, H dan O, rumus empiris vitamin C, dan rumus molekulnya jika massa molekul relatifnya 180. Program Praktikum_11; Uses CRT; Const ArC = 12; ArH = 1.01; ArO = 16; MrCO2 = 44; MrH2O = 18; pres = 0.1; Var mCup,mCO2,mH2O,mC,mH,mO,pC,pH,pO,molC,molH,molO : real; pmolC,pmolH,pmolO,pmolCi,pmolHi,pmolOi, dpmolC,dpmolH,dpmolO : real; koefCm,koefHm,koefOm,koefCe,koefHe,koefOe,i : byte; rpmolC,rpmolH,rpmolO : byte; Mr,pembagi,faktor,MasRumEm : real; Y,lagi : char; Begin Repeat ClrScr; Write('Berat cuplikan dalam mg = '); ReadLn(mCup); Write('Berat CO2 yang terbentuk dalam mg = '); ReadLn(mCO2); Write('Berat H2O yang terbentuk dalam mg = '); ReadLn(mH2O); Write('Massa Molekul Relatif = '); ReadLn(Mr); {rumus } mC := ((1*ArC)/MrCO2)*mCO2; mH := ((2*ArH)/MrH2O)*mH2O; pC := (mC/mCup)*100; pH := (mH/mCup)*100; Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 5 6.11 RUMUS EMPIRIS MOLEKUL
  • 58. pO := 100 - pC - pH; molC := pC/ArC; molH := pH/ArH; molO := pO/ArO; if (molC < molH) and (molC < molO) then pembagi := molC; if (molH < molC) and (molH < molO) then pembagi := molH; if (molO < molC) and (molO < molH) then pembagi := molO; pmolC := molC/pembagi; pmolH := molH/pembagi; pmolO := molO/pembagi; i := 1; Repeat i := i + 1; pmolCi := pmolC*i; pmolHi := pmolH*i; pmolOi := pmolO*i; rpmolC := round(pmolCi); rpmolH := round(pmolHi); rpmolO := round(pmolOi); dpmolC := abs(pmolCi - rpmolC); dpmolH := abs(pmolHi - rpmolH); dpmolO := abs(pmolOi - rpmolO); Until (dpmolC <= pres) and (dpmolH <= pres) and (dpmolO <= pres); koefCe := round(pmolCi); koefHe := round(pmolHi); koefOe := round(pmolOi); MasRumEm := (koefCe*ArC)+(koefHe*ArH)+(koefOe*ArO); faktor := Mr/MasRumEm; koefCm := round(faktor*koefCe); koefHm := round(faktor*koefHe); koefOm := round(faktor*koefOe); {Output} ClrScr; WriteLn('Berat cuplikan = ',mcup:6:3,' mg'); WriteLn('Berat CO2 yang terbentuk = ',mCO2:6:3,' mg'); WriteLn('Berat H2O yang terbentuk = ',mH2O:6:3,' mg'); WriteLn('Massa Molekul Relatif = ',Mr:6:3); WriteLn; WriteLn('Massa C = ',mC:6:3,' mg'); WriteLn('Massa H = ',mH:6:3,' mg'); WriteLn; WriteLn('Persen massa C = ',pC:6:2,' %'); Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 5
  • 59. WriteLn('Persen Massa H = ',pH:6:2,' %'); WriteLn('Persen Massa O = ',pO:6:2,' %'); WriteLn; WriteLn('Rumus Empiris = C',pmolC:2:2,' H',pmolH:2:2,' O',pmolO:2:2); WriteLn(' = C',koefCe,' H',koefHe,' O',koefOe); WriteLn; WriteLn('Rumus Molekul = C',koefCm,' H',koefHm,' O',koefOm); WriteLn; Write(‘Lagi (y/t) ? ); ReadLn(lagi); Until UpCase(lagi) <> ‘Y’; End. Keterangan : Mula-mula menghitung massa C dan H (mC, dan mH), lalu menghitung persen C, H dan O (pC, pH, dan pO). Mol C, H dan O (molC, molH, dan molO) dihitung dari pembagian persen C, H dan O dengan massa atom masing-masing. Menentukan perbandingan mol (pmolC,pmolH, dan pmolO) dengan mencari dulu jumlah mol yang paling kecil sebagai pembaginya dengan menggunakan statemen if … then … sebagai berikut if (molC < molH) and (molC < molO) then pembagi := molC; if (molH < molC) and (molH < molO) then pembagi := molH; if (molO < molC) and (molO < molH) then pembagi := molO; Koefisien rumus empiris ditentukan dengan menggunakan looping Repeat … Until sebagai berikut i := 1; Repeat i := i + 1; pmolCi := pmolC*i; pmolHi := pmolH*i; pmolOi := pmolO*i; rpmolC := round(pmolCi); rpmolH := round(pmolHi); rpmolO := round(pmolOi); dpmolC := abs(pmolCi - rpmolC); dpmolH := abs(pmolHi - rpmolH); dpmolO := abs(pmolOi - rpmolO); Until (dpmolC <= pres) and (dpmolH <= pres) and (dpmolO <= pres); koefCe := round(pmolCi); koefHe := round(pmolHi); koefOe := round(pmolOi); Selanjutnya menentukan koefisien rumus molekul dengan terlebih dulu menghitung massa rumus empiris dan faktor pengalinya. MasRumEm := (koefCe*ArC)+(koefHe*ArH)+(koefOe*ArO); faktor := Mr/MasRumEm; koefCm := round(faktor*koefCe); Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 5
  • 60. koefHm := round(faktor*koefHe); koefOm := round(faktor*koefOe); Dalam program ini juga dikenalkan cara mengulang program menggunakan prosedur UpCase(lagi), Prosedur ini untuk mengubah karakter kecil menjadi besar. Jika ditekan ‘y’ (huruf kecil) maka UpCase akan mengubahnya menjadi huruf besar ‘Y’ sehingga sesuai dengan persyaratan berakhirnya program. Jika ditekan selain ‘y’ atau ‘Y’ misalnya ‘t' atau ‘T' maka program akan berulang. 6.12 ENERGI PENGIKAT INTI Pada reaksi pembentukan inti Helium dari partikel proton dan netron. Reaksi pembentukan inti Helium sebagai berikut EHenH +→+ 4 2 1 0 1 1 22 Diketahui massa proton sebesar 1,008142 sma, massa netron sebesar 1,008982 sma dan massa inti Helium sebesar 4,002776 sma. Hitunglah energi ikatan per atom He dalam satuan erg , Joule dan MeV ! Program Praktikum_12; Uses CRT; Const mprot = 1.008142; {sma} mnet = 1.008982; {sma} ccah = 2.99e10; {cm/det} fgram = 1.66e-24; {faktor pengubah dari sma ke gram} fJoule= 1e-7; {faktor pengubah dari erg ke Joule} Mev = 1.603e-6; {erg} Var E,Ej,Ev,m,jmt1,jmt2,jmp,jmn,dm,dmg : real; jp,jn : byte; opsi : char; Label 01; Begin 01: ClrScr; GoToXY(10,3); Write('Sebelum pembentukan ikatan : '); GoToXY(10,4); Write('Jumlah proton penyusun = '); Readln(jp); GoToXY(10,5); Write('Jumlah netron penyusun = '); Readln(jn); GoToXY(10,7); Write('Setelah pembentukan ikatan : '); GoToXY(10,8); Write('Massa inti setelah pembentukan ikatan = '); Readln(jmt2); jmp := jp*mprot; {jumlah massa proton} jmn := jn*mnet; {jumlah massa netron} jmt1 := jmp+jmn; {jumlah massa partikel sebelum pembentukan} dm := jmt1-jmt2; {selisih massa dalam sma} dmg := dm*fgram; {selisih massa dalam gram} E := dmg*sqr(ccah); {Energi ikat per atom dalam erg} Ej := E*fJoule; {Energi ikat per atom dalam Joule} Ev := E/Mev; {Energi ikat per atom dalam Mev} Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 6
  • 61. ClrScr; GoToXY(10,2); Write('Penghitungan energi ikatan : '); GoToXY(10,4); Write('Jumlah massa proton penyusun = ',jmp:10:6, ' sma'); GoToXY(10,5); Write('Jumlah massa netron penyusun = ',jmn:10:6, ' sma'); GoToXY(10,6); Write('-------------------------------------------- + '); GoToXY(10,7); Write('Jumlah massa partikel penyusun = ',jmt1:10:6,' sma'); GoToXY(10,8); Write('Massa inti setelah berikatan = ',jmt2:10:6,' sma'); GoToXY(10,9); Write('-------------------------------------------- - '); GoToXY(10,10); Write('Selisih massa = ',dm:10:6, ' sma'); GoToXY(10,11); Write(' = ',dm:10:6,' * ',fgram:10,' gram'); GoToXY(10,12); Write(' = ',(dm*fgram):10,' gram'); GoToXY(10,14); Write('Energi ikatan per atom = ',E:15,' erg'); GoToXY(10,15); Write(' = ',Ej:15,' Joule'); GoToXY(10,16); Write(' = ',Ev:15,' Mev'); GoToXY(10,22); Write('Ulangi ? Tekan (Y/T) '); opsi := ReadKey; Case opsi of 't','T' : halt; 'y','Y' : goto 01; end; End. Keterangan : Program ini mengenalkan penempatan string pada koordinat XY mode teks dengan posisi maksimal layar (80,25) menggunakan prosedur GoToXY(X,Y). Pengulangan program menggunakan seleksi Case … of dan Label. Jika penekanan tombol (opsi := ReadKey) adalah ‘t' atau ‘T' maka program akan keluar (halt) dan jika penekanan tombol adalah ‘y’ atau ‘Y’ maka program akan mengulang mulai posisi Label 01 pada badan program. Permainan tebakan lambang dan nomor atom dapat dibuat dengan menggunakan tipe data string berupa deret (array). Semua nomor, lambang, nama, dan berat atom dapat disimpan sebagai data konstanta pada deklarasi. Program Praktikum_13; Uses CRT; Const nomer : array[1..112] of string[3] = ('1','2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14','15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28','29','30', '31','32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45','46','47', '48','49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60', '61', '62','63','64', '65','66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79','80','81', '82','83', '84', '85', '86', '87', '88', '89', '90', '91', '92', '93', '94', '95', '96','97','98', '99','100','101','102','103','104','105','106','107','108','109','110','111','112'); Lambang : array[1..112] of string[3] = ('H','He','Li','Be','B', 'C', 'N', 'O', 'F', 'Ne','Na', Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 6 6.13 TEBAKAN LAMBANG DAN NOMOR ATOM
  • 62. 'Mg','Al','Si','P', 'S', 'Cl','Ar','K', 'Ca','Sc','Ti','V', 'Cr','Mn','Fe', 'Co', 'Ni', 'Cu','Zn','Ga','Ge','As','Se','Br','Kr','Rb','Sr','Y', 'Zr','Nb','Mo','Tc', 'Ru', 'Rh','Pd','Ag','Cd','In','Sn','Sb','Te','I', 'Xe','Cs','Ba','La','Ce','Pr', 'Nd', 'Pm', 'Sm','Eu','Gd','Tb','Dy','Ho','Er','Tm','Yb','Lu','Hf','Ta','W', 'Re','Os', 'Ir', 'Pt', 'Au','Hg','Tl','Pb','Bi','Po','At','Rn','Fr','Ra','Ac','Th','Pa','U', 'Np', 'Pu', 'Am', 'Cm','Bk','Cf','Es','Fm','Md','No','Lr','Rf','Ha','Sg','Ns','Hs','Mt','Uun','Uuu','Uub'); Nama : array[1..112] of string[20] = ('Hydrogen','Helium','Lithium','Beryllium','Boron', 'Carbon','Nitrogen','Oxygen','Fluorine','Neon','Sodium','Magnesium','Aluminium', 'Silicon','Phosphorus','Sulfur','Chlorine','Argon','Potassium','Calcium','Scandium', 'Titanium','Vanadium','Chromium','Manganese','Iron','Cobalt','Nickel','Copper','Zinc', 'Gallium','Germanium','Arsenic','Selenium','Bromine','Krypton','Rubidium','Strontium', 'Yttrium','Zirconium','Niobium','Molybdenum','Technetium','Ruthenium','Rhodium', 'Palladium','Silver','Cadmium','Indium','Tin','Antimony','Tellurium','Iodine','Xenon', 'Cesium','Barium','Lanthanum','Cerium','Praseodymium','Neodymium','Promethium','Samariu m', 'Europium','Gadolinium','Terbium','Dysprosium','Holmium','Erbium','Thulium','Ytterbium', 'Lutetium','Hafnium','Tantalum','Tungsten','Rhenium','Osmium','Iridium','Platinum', 'Gold','Mercury','Thallium','Lead','Bismuth','Polonium','Astatine','Radon','Francium', 'Radium','Actinium','Thorium','Protactinium','Uranium','Neptunium','Plutonium','Americium', 'Curium','Berkelium','Californium','Einsteinium','Fermium','Mendelevium','Nobelium', 'Lawrencium','Rutherfordium','Hahnium','Seaborgium','Neilsbohrium','Hassium','Meitnerium', 'Ununnilium','Unununium','Ununbium'); Berat : array[1..112] of string[5] = ('1.008','4.003','6.939','9.012','10.81','12.01','14.01', '15.99','18.99','20.18','22.99','24.31','26.98','28.09','30.97','32.06','35.45','39.95', '39.10','40.08','44.96','47.90','50.94','51.99','54.94','55.85','58.93','58.71','63.54', '65.37','69.72','72.59','74.92','78.96','79.91','83.80','85.47','87.62','88.91','91.22', '92.91','95.94',' 99 ','101.1','102.9','106.4','107.9','112.4','114.8','118.7','121.8', '127.6','126.9','131.3','132.9','137.3','138.9','140.1','140.9','144.2',' 147 ','150.4', '151.9','157.3','158.9','162.5','164.9','167.3','168.9','174.1','174.9','178.5','180.9', '183.9','186.2','190.2','192.2','195.1','196.9','200.6','204.4','207.2','208.9',' 210 ', ' 210 ',' 222 ',' 223 ',' 226 ',' 227 ','238.0',' 231 ','238.0',' 237 ',' 242 ',' 243 ', ' 247 ',' 249 ',' 251 ',' 254 ',' 253 ',' 256 ',' 254 ',' 257 ',' 260 ',' 262 ',' 263 ', ' 262 ',' 265 ',' 266 ',' 269 ',' 272 ',' 277 '); Var a,b,i,ran,skor : byte; zat,zat2,jawab : string; opsi,opsi2,opsi3 : char; Procedure Lambang_atom; Begin ClrScr; GoToXY(12,2); Write('Komputer sudah memberi nomer atom dan berat atom, '); GoToXY(12,3); Write('Anda diminta untuk mengisi lambang atom pada tanda (-) '); GoToXY(12,4); Write('====================================================='); GoToXY(12,24); Write('Kalau bingung teken <Enter> sazaaaa ....'); Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 6
  • 63. Randomize; a := Random(60); a := 2 + a; if a < 6 then a := 6; if a > 60 then a := 60; b := Random(19); if b < 7 then b := 7; if b > 19 then b := 19; ran := random(112); zat := nomer[ran]; GoToXY(a,b+1); Write(zat); for i := 1 to 112 do Begin if zat = nomer[i] then Begin GoToXY(a-1,b-1); Write(berat[i]); skor := 0; Repeat GoToXY(a+3,b); Write('error'); delay(100); GoToXY(a+3,b); ClrEol; GoToXY(a+3,b); Write('-'); GoToXY(a+3,b); readln(jawab); if jawab <> lambang[i] then Begin GoToXY(a+3,b); Write(#7); GoToXY(a+3,b); Write('error'); end; skor := skor + 1; if jawab = '' then Begin GoToXY(a+3,b); Write(lambang[i],' '); GoToXY(1,24); ClrEol; GoToXY(12,24); Write('<Esc> Menu'); GoToXY(50,24); Write('<Enter> Ulang'); Exit; end; until jawab = lambang[i]; skor := 11 - skor; if jawab = lambang[i] then Begin Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 6
  • 64. Write(#7); GoToXY(1,24); ClrEol; GoToXY(30,22); Write('Benar skor anda ',skor); GoToXY(12,24); Write('<Esc> Menu'); GoToXY(50,24); Write('<Enter> Ulang'); end; end; end; end; Procedure nomor_atom; Begin ClrScr; GoToXY(12,2); Write('Komputer sudah memberi Lambang unsur dan berat atom, '); GoToXY(12,3); Write('Anda diminta untuk menebak nomor atom pada tanda (-) '); GoToXY(12,4); Write('====================================================='); GoToXY(12,24); Write('Kalau bingung teken <Enter> sazaaaa ....'); Randomize; a := Random(60); a := 2 + a; if a < 6 then a := 6; if a > 60 then a := 60; b := Random(19); if b < 7 then b := 7; if b > 19 then b := 19; ran := Random(112); zat := lambang[ran]; zat2:= nama[ran]; GoToXY(a+3,b); Write(zat,' (',zat2,')'); for i := 1 to 112 do Begin if zat = lambang[i] then Begin GoToXY(a-1,b-1); Write(berat[i]); skor := 0; Repeat GoToXY(a,b+1); Write('error'); delay(100); GoToXY(a,b+1); ClrEol; GoToXY(a,b+1); Write('-'); GoToXY(a,b+1); ReadLn(jawab); if jawab <> nomer[i] then Begin Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 6
  • 65. GoToXY(a,b+1); Write(#7); GoToXY(a,b+1); Write('error'); end; skor := skor + 1; if jawab = '' then Begin Write(#7); GoToXY(a,b+1); Write(nomer[i],' '); GoToXY(1,24); ClrEol; GoToXY(12,24); Write('<Esc> Menu'); GoToXY(50,24); Write('<Enter> Ulang'); Exit; end; until (jawab = nomer[i]); skor := 11 - skor; if jawab = nomer[i] then Begin Write(#7); GoToXY(1,24); ClrEol; GoToXY(30,22); Write('Benar skor anda ',skor); GoToXY(12,24); Write('<Esc> Menu'); GoToXY(50,24); Write('<Enter> Ulang'); end; end; end; end; Begin Repeat ClrScr; TextColor(yellow); TextBackGround(red); GoToXY(20,5); Write(' MENU TEBAKAN SISTEM PERIODIK '); GoToXY(20,7); Write(' 1. MENEBAK NOMOR ATOM '); GoToXY(20,8); Write(' 2. MENEBAK LAMBANG ATOM '); GoToXY(20,9); Write(' 3. KELUAR '); GoToXY(20,11); Write(' OPSI : '); GoToXY(28,11); ReadLn(opsi); TextBackGround(blue); Case opsi of '1' : Repeat nomor_atom; opsi2 := ReadKey; Until opsi2 = #27; '2' : Repeat Lambang_atom; Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 6
  • 66. opsi2 := ReadKey; Until opsi2 = #27; '3' : Halt; End; Until opsi3 = #27; End. Keterangan : Teknik penempatan string pada posisi (X,Y) dilakukan secara acak menggunakan fungsi random. Untuk mengawali pembangkit bilangan acak maka sebelumnya dipanggil dulu prosedur Randomize. Jika pada fungsi random tidak dituliskan range-nya maka akan dihasilkan bilangan acak dengan range 0 ≤ X < 1, sebaliknya jika dituliskan range-nya maka harus bertipe Word hasilnya adalah 0 ≤ X < range. Jika range = 0 maka hasilnya adalah 0. Teknik penempatan acak hanya sekedar untuk daya tarik program. Untuk menghapus text dikenalkan prosedur ClrEol (Clear End Of Line) yang akan menghapus mulai posisi X yang ditentukan sampai akhir baris. Untuk menandai salah atau benarnya jawaban diberi tanda bel menggunakan prosedur Write(#7); yang akan berfungsi pada mode DOS saja. Dalam program juga dikenalkan penampilan contoh menu program dengan 3 pilihan. Seleksi pilihan menggunakan prosedur ReadLn(opsi) dimana opsi bertipe char. Dapat juga prosedur ReadLn(opsi)diganti dengan opsi := ReadKey; yang pada pengoperasiannya jika pilihan telah ditekan maka program langsung running tanpa terlebih dahulu menekan tombol <Enter>. Untuk menambah daya tarik tampilan dilakukan teknik pewarnaan teks dan latar belakang. Pewarnaan teks menggunakan prosedur TextColor(X); dimana X bertipe Byte dengan range 0 … 15 sesuai dengan harga konstanta warna yang didefinisikan pada CRT. Untuk pengaturan latar belakang digunakan prosedur TextBackGround(X); dimana X bertipe Byte dengan range 0 … 7 sesuai dengan harga konstanta warna yang didefinisikan pada CRT. Nama warna dapat juga langsung dituliskan menggunakan istilah Inggris seperti yang telah didefinisikan pada CRT. Untuk menjalankan pilihan opsi digunakan aturan seleksi Case … of. Setiap pilihan opsi juga dapat dilakukan pengulangan program menggunakan looping Repeat … Until. Untuk scanning penekanan tombol digunakan penjebak opsi2 := ReadKey. Pilihan opsi akan berhenti kalau tombol yang ditekan adalah tombol <Esc> dengan kode ASCII #27, jika tombol lain, misalnya <Enter> maka pilihan opsi tersebut akan diulang. Pengulangan program keseluruhan menggunakan teknik yang sama, jika ditekan <Esc> maka program akan berhenti. Menghitung harga konstanta laju reaksi (k) berbagai orde reaksi apabila data konsentrasi awal , waktu dan konsentrasi setiap waktu diketahui. Rumusnya Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 6 6.14 kONSTANTA LAJU REAKSI
  • 67.         −=         − =         = 22 11 .2 1 :3Orde . 1 :2Orde ln 1 :1Orde ot r to to r t o r CCt k CC CC t k C C t k Harga kr diperhitungkan dari harga k setiap waktu dan dicari rata-ratanya. Program Praktikum_14; Uses CRT; Const menit = 100; Var Kt,Ct,T : array[0..menit] of real; Cawal,Kr : real; Jdata,i,pilih : byte; opsi : char; Label 01; Procedure input; Begin Repeat ClrScr; Write('Orde berapa ? '); Read(pilih); Until pilih < 4; Write('Konsentrasi awal ? '); ReadLn(Cawal); WriteLn; Write('Berapa data masukkan ? '); ReadLn(Jdata); WriteLn; i := 1; While i <= Jdata do Begin Write('t ',i,' = '); Read(t[i]); Write('C ':10,i,' = '); Read(Ct[i]); inc(i,1); WriteLn; End; End; Procedure order1; Begin Kr := 0; i := 1; While i <= Jdata do Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 6
  • 68. Begin Kt[i] := (1/t[i])*ln(Cawal/Ct[i]); Kr := Kr + Kt[i]; inc(i,1); End; Kr := Kr/Jdata; End; Procedure order2; Begin Kr := 0; i := 1; Repeat Kt[i] := (1/t[i])*((Cawal-Ct[i])/(Cawal*Ct[i])); Kr := Kr + Kt[i]; inc(i,1); Until i > Jdata; Kr := Kr/Jdata; End; Procedure order3; Begin Kr := 0; for i := Jdata DownTo 1 do Begin Kt[i] := (1/(2*t[i]*sqr(Ct[i])))-(1/(2* t[i]*sqr(Cawal))); Kr := Kr + Kt[i]; End; Kr := Kr/Jdata; End; Procedure output; forward; {memanggil Procedure yang ada di bawah} Procedure pilihan(pilih : byte); Begin Case pilih of 1 : Begin order1; output; End; 2 : Begin order2; output; End; 3 : Begin order3; output; End; End; End; Procedure output; Begin ClrScr; Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 6
  • 69. WriteLn('Konsentrasi awal = ',Cawal:8:4); WriteLn; for i := 1 to Jdata do Begin WriteLn('t(',i,') = ',t[i]:6:4,'':5,'Ct(',i,') = ', Ct[i]:8:4,'':5,'Kt(',i,') = ', Kt[i]:10:6); End; WriteLn; WriteLn('K reaksi = ',Kr:10:6); GoToXY(5,24); Write('<Esc> Keluar <Enter> Ulang'); End; {Program utama} Begin 01 : ClrScr; input; pilihan(pilih); opsi := ReadKey; if opsi = #13 then GoTo 01 else halt; ClrScr; End. Keterangan : Program mengenalkan beberapa bentuk looping yaitu While i <= Jdata do, mungkin bisa diterjemahkan sebagai berikut “selagi i kurang dari atau sama dengan Jdata maka lakukan …..”. Syarat batasnya adalah i <= Jdata sehingga jika i > Jdata maka program akan berhenti. Looping lain Repeat …… Until i > Jdata, dan loopong for i := Jdata DownTo 1 do yang merupakan kebalikan dari looping for… to … do. Untuk memanggil prosedur yang ada di bawahnya dalam program ini dikenalkan penggunaan prosedur forward . Listing prosedur Output ada di bawah prosedur Pilihan padahal dalam prosedur Pilihan ada pemanggilan terhadap prosedur Output, untuk mengatasi digunakan prosedur forward dengan terlebih dulu menempatkan header prosedur Output. Procedure output; forward; {memanggil Procedure yang ada di bawah} Procedure pilihan(pilih : byte); Begin Case pilih of 1 : Begin order1; output; End; …………………………; End; End; Procedure output; Begin ………………………; Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 6
  • 70. End; Menghitung orde reaksi dengan memperhatikan macam data input : 1. Konsentrasi reaktan dan kecepatan awalnya Misalnya ada 2 buah reaktan, untuk menentukan orde reaktan pertama maka konsentrasi reaktan lain harus konstan, sehingga yang diperhatikan hanya konsentrasi reaktan pertama dan kecepatan awalnya Rumus penyelesaianya dapat diturunkan dari rasio konsentrasi dan kecepatan awalnya sebagai berikut ( ) ( )             =       =      ≈ ≈ 2 1 2 1 2 1 2 1 . . c c Ln r r Ln n r r Ln c c Lnn CLnnRLn CR n r adalah kecepatan awal, c adalah konsentrasi reaktan, dan n adalah orde reaktan 2. Konsentrasi reaktan , waktu reaksi, dan konsentrasi produk Prinsip penyelesaiannya sama dengan penyelesaian macam data input pertama, hanya sebelumnya harus dicari dulu lajunya yaitu dengan membagi masing-masing konsentrasi produk dengan waktu reaksinya [ ] waktu produk r = Program Praktikum_15; Uses CRT; Type dc = array[1..10,1..10] of real; di = array[1..40] of byte; dr = array[1..40] of real; Var i,j,jr,pilih,ordeke,data : byte; ir,rir,C,rc,orde,t,final : dc; js : di; order,ordepar : dr; sum1,sum2,ordetot : real; Procedure CariOrde; Var ordepar : dr; Begin Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 7 6.15 KINETIKA KIMIA
  • 71. ClrScr; Repeat GoToXY(21,3); ClrEol; GoToXY(5,3); Write('Jumlah reaktan = '); ReadLn(jr); Until jr > 1; TextColor(white); GoToXY(5,4); Write('Macam data input : '); TextColor(yellow); GoToXY(5,5); Write('1. Konsentrasi reaktan + initial rate '); GoToXY(5,6); Write('2. Konsentrasi reaktan + waktu + konsentrasi produk '); GoToXY(5,7); Write(' Pilihan : '); ReadLn(data); pilih := 1; ordetot := 0; Repeat ClrScr; TextColor(white); GoToXY(5,3); Write('Jumlah reaktan = ',jr); GoToXY(5,4); Write('Mencari orde reaktan ',pilih,' : '); js[pilih] := 2; GoToXY(5,5); Write('Jumlah sampel = ',js[pilih]); if data = 1 then Begin TextColor(yellow); GoToXY(5,7); Write('Untuk menentukan orde reaktan ',pilih,' maka konsentrasi reaktan lain'); GoToXY(5,8); Write('harus konstan, sehingga yang diperhatikan hanya konsentrasi '); GoToXY(5,9); Write('reaktan ',pilih, ' dan initial rate-nya'); GoToXY(5,11); Write('No.':1,'[reaktan ':10,pilih,']','Initial rate':15); end; if data = 2 then Begin TextColor(yellow); GoToXY(5,7); Write('Untuk menentukan orde reaktan ',pilih,' maka konsentrasi reaktan lain'); GoToXY(5,8); Write('harus konstan, sehingga yang diperhatikan hanya konsentrasi '); GoToXY(5,9); Write('reaktan ',pilih,', waktu setimbang dan konsentrasi produknya.'); GoToXY(5,11); Write('No.':1,'[reaktan ':10,pilih,']','waktu':15,'[akhir]':15); end; TextColor(white); for j := 1 to js[pilih] do Begin GoToXY(5,11+j); Write(j:2); end; Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 7
  • 72. for j := 1 to js[pilih] do Begin GoToXY(15,11+j); Write('-'); GoToXY(15,11+j); read(C[pilih,j]); if data = 1 then Begin GoToXY(30,11+j); Write('-'); GoToXY(30, 11+j); read(Ir[pilih,j]); end; if data = 2 then Begin GoToXY(30,11+j); Write('-'); GoToXY(30,11+j); read(t[pilih,j]); GoToXY(44,11+j); Write('-'); GoToXY(44,11+j); read(final[pilih,j]); Ir[pilih,j] := abs(final[pilih,j]/t[pilih,j]); end; end; sum1 := 0; sum2 := 0; for i := 1 to (js[pilih]-1) do Begin for j := (i+1) to js[pilih] do Begin rc[j,i] := c[pilih,j]/c[pilih,i]; rir[j,i] := Ir[pilih,j]/Ir[pilih,i]; orde[j,i] := (Ln(rir[j,i]))/Ln(rc[j,i]); sum1 := sum1 + orde[j,i]; end; sum2 := sum2 + i; end; ordepar[pilih] := sum1/sum2; ordeke := pilih; order[ordeke] := ordepar[pilih]; ordetot := ordetot + ordepar[pilih]; GoToXY(5,22); Write('Orde reaktan ',pilih,' = ',ordepar[pilih]:4:3); Delay(1000); pilih := pilih + 1; Until pilih > jr; end; Procedure out; Begin GoToXY(5,19); Write('Hasil total : '); for pilih := 1 to jr do Begin Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 7
  • 73. GoToXY(5,20+pilih); Write('Orde reaktan ',pilih,' = ',order[pilih]:4:3); end; GoToXY(5,24); Write('Orde total = ',ordetot:4:3); end; Begin ClrScr; Repeat ClrScr; cariOrde; out; Until ReadKey = #27 End. Keterangan : Program mengenalkan tipe data array 2 dimensi yaitu dc = array[1..10,1..10] of real; Penentuan orde terdapat pada bagian sum1 := 0; sum2 := 0; for i := 1 to (js[pilih]-1) do Begin for j := (i+1) to js[pilih] do Begin rc[j,i] := c[pilih,j]/c[pilih,i]; rir[j,i] := Ir[pilih,j]/Ir[pilih,i]; orde[j,i] := (Ln(rir[j,i]))/Ln(rc[j,i]); sum1 := sum1 + orde[j,i]; end; sum2 := sum2 + i; end; ordepar[pilih] := sum1/sum2; ordeke := pilih; order[ordeke] := ordepar[pilih]; ordetot := ordetot + ordepar[pilih]; ordepar adalah variabel orde masing-masing reaktan, sedangkan ordetot adalah orde total reaksi. Penentuan laju pada macam data input kedua adalah Ir[pilih,j] := abs(final[pilih,j]/t[pilih,j]); Didukung dengan penempatan string menggunakan procedur GoToXY(X,Y)maka tampilan tampak lebih interaktif. Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 7 6.16 LAJU EFUSI GAS
  • 74. Menghitug harga laju efusi suatu gas dengan rumus κ κ κ κ 1 1. 1 . 2 −       − − = pi po M RT u dimana u adalah laju efusi gas, M adalah massa molar, κ adalah Cp/Cv, po dan pi adalah tekanan luar dan dalam Program Praktikum_16; Uses CRT; Const R = 8.31441; Var T,M,K,pex,pin,R1,R2,R3,R4,R5,R6,R7 : real; opsi : char; Function pangkat(a,b : real) : real; begin pangkat := exp(b*ln(a)); end; Procedure input; begin Write('Temperatur dalam K = '); ReadLn(T); Write('Berat molekular = '); ReadLn(M); Write('Cp/Cv = '); ReadLn(K); Write('Tekanan luar = '); ReadLn(pex); Write('Tekanan dalam = '); ReadLn(pin); end; Procedure hitung; begin R1 := K/(K-1); R2 := 1/R1; R3 := pex/pin; R4 := 1-R3; M := M/1000; R5 := (2*R*T)/M; R6 := pangkat(R4,R2); R7 := Sqrt(R5*R1*R6); end; Procedure Hasil; begin WriteLn; WriteLn('Laju efusi = ',R7:10:5); end; Begin Repeat ClrScr; Input; Hitung; Hasil; opsi := ReadKey; Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 7
  • 75. Until opsi = #27; End. Keterangan : Dalam program ini dikenalkan pembuatan suatu Function dalam menghitung hasil perpangkatan suatu variabel. Turbo Pascal memang tidak menyediakan suatu fungsi atau prosedur terintegrasi khusus untuk perpangkatan, karena itu harus dibuat sendiri fungsi perpangkatannya. Penggunaannya tampak pada persamaan R6 := pangkat(R4,R2); Menyelesaikan operasi matrik dan vektor berupa penjumlahan matrik, selisih, perkalian skalar matrik, perkalian antar matrik, penentuan matrik transpose, harga determinan, matrik inversi, dan menyelesaikan persamaan linier. Program Praktikum_17; Uses CRT; Const max = 16; Type matrik = array[1..max,1..max] of real; vektor = array[1..max] of real; Var a,b,c,m : matrik; i,j,n,k,r,baris,kolom : integer; opsi : char; Function det(n:integer; a:matrik): real; var ii,jj,kk,ll,ff,nxt : integer; piv,cn,big,temp,term : real; Begin ff := 1; for ii := 1 to n-1 do Begin big := 0; for kk := ii to n do Begin term := abs(a[kk,ii]); if term - big > 0 then Begin big := term; ll := kk; end; end; if ii - ll <> 0 then ff := -ff; for jj := 1 to n+1 do Begin temp := a[ii,jj]; a[ii,jj] := a[ll,jj]; a[ll,jj] := temp; Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 7 6.17 OPERASI MATRIK DAN VEKTOR