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 KomputasiJurusan Kimia FMIPA Unnes
1
PENDAHULUAN : IDE DAN STRUKTUR PROGRAM DELPHIPEMROGRAMAN 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 KomputasiJurusan Kimia FMIPA Unnes
2
Nama objek
Tab eventsTab 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 KomputasiJurusan 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: Tform1Left = 200Top = 108Width = 696Height = 480Caption = ‘Form1’:Font.Name = ‘MS Sans Serif’Font.Style = []PixelsPerInch = 96TextHeight = 13
object Button1: TbuttonLeft = 176Top = 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 KomputasiJurusan 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- F12kembali.
Speedbar
Menu utama : File, Edit, Seaarch, View, dll.
Component palettebagian 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 KomputasiJurusan 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 KomputasiJurusan 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 KomputasiJurusan 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 KomputasiJurusan 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 eventForm1 Name FrmHello3Button1 Name BtnHello3 (lihat dibawah)
Caption &Show MeLabel1 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 KomputasiJurusan 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’ thenbeginlblHello3.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 KomputasiJurusan 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 KomputasiJurusan Kimia FMIPA Unnes
1
BeginListBox1.Clear; // Mengosongkan isi ListBoxListBox1.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 KomputasiJurusan Kimia FMIPA Unnes
1
uses Forms,
Unit1 in ‘Unit1.pas’ {Form1};
beginApplication.Initialize; itializes stuffApplication.CreateForm(Tform1, Form1);Application.Run;
end.
TMsgDlgType = mtWarning,mtError,mtInformation, mtConfirmation, mtCustomTMsgDlgBtn= mbYes,mbNo,mbOK,mbCancel,mbAbort,mbRetry,mbIgnore,mbAll,mbHelpReturn values= mrNone, mrYes, mrNo, mrOk, mrCancel, mrAbort, mrRetry, mrIgnore, mrAll
InputBox(...);varInputString: 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 KomputasiJurusan Kimia FMIPA Unnes
1
Aksi 1 Aksi 2
Kondisi 1 Kondisi 2
Pemilihan 1 pilihan/kasus. Gunakan perintah IF – THENPemilihan 2 pilihan/kasus. Gunakan perintah IF – THEN – ELSEPemilihan 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> thenBegin
... {aksi-1}endelseBegin... {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 eventForm1 Name FrmWelcome OnActive
Caption WelcomeButton1 Name BtnQuit OnClick, isi dengan:
application.terminate;Caption &Quit
Label1 Name LblunsurCaption Lambang Unsur KimiaFont Times New Roman, Bold, Size : 18
Label2 Name LblchooseCaption Pilih Lambang Unsur
Label3 Name Lbllambang
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
If <kondisi_pencabangan1> thenBegin
... {aksi-1}endelse
If <kondisi_pencabangan2> thenBegin
... {aksi-2}endelseBegin
... {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 = clTealLabel4 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 KomputasiJurusan Kimia FMIPA Unnes
1
procedure TForm1.FormActivate(Sender: TObject);beginlbxCountry.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);beginlblCountry.caption := lbxCountry.Items[lbxCountry.ItemIndex]; case lbxCountry.ItemIndex of0 : 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 KomputasiJurusan Kimia FMIPA Unnes
1
For <variable_kendali> := <nilai_awal> to <nilai_akhir> doBegin…{aksi}
End ;
For <variable_kendali> := <nilai_awal> downto <nilai_akhir> doBegin… {aksi}End ;
procedure TfrmPengulangan.btnPengulanganClick(Sender: TObject);var I : integer;begin
lbxHasil.Items.Clear;For I := 1 to 5 doBegin
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> doBegin
… {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 KomputasiJurusan Kimia FMIPA Unnes
1
procedure TfrmPengulangan.btnPengulanganClick(Sender: TObject);var I : integer;begin
lbxHasil.Items.Clear;I := 1;While I<=5 DOBegin
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 eventForm1 Name FrmPengulangan
Caption PengulanganButton1 Name BtnPengulangan Onclick
Caption &PengulanganLabel1 Name LblComment
Caption (kosong)Font Times New Roman, Bold-Italic,
Size = 12ListBox1 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 KomputasiJurusan Kimia FMIPA Unnes
1
procedure TfrmPengulangan.btnPengulanganClick(Sender: TObject);var I : integer;begin
lbxHasil.Items.Clear;For I := 0 to 20 doBeginlbxHasil.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 eventLabel1 Caption Tulis : MENGHITUNG TEKANAN
GAS IDEALFont Tahoma, style : bold, size : 14, effects :
underline, color : greenLabel2 Caption Tulis : mol (n)
Font Tahoma, style : bold, size : 12, color : green
Label3 Caption Tulis : suhu (T)Font Tahoma, style : bold, size : 12, color :
greenLabel4 Caption Tulis : volume (V)
Font Tahoma, style : bold, size : 12, color : green
Label5 Caption Tulis : tekanan (P)Font Tahoma, style : bold, size : 12, color :
greenButton1 Caption Tulis : HITUNG OnClick
Font Tahoma, style : bold, size : 12Button2 Caption Tulis : KELUAR OnClick
Font Tahoma, style : bold, size : 12 Form1 Color clMoneyGreen
Name FormtekananEdit1 Text (kosong)Edit2 Text (kosong)
Diktat Mata Kuliah Kimia KomputasiJurusan 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 KomputasiJurusan Kimia FMIPA Unnes
2
procedure TForm1.Button1Click(Sender:TObject);begin//Konversi dari String ke Floatn :=StrTofloat(Edit1.Text);T :=StrTofloat(Edit2.Text);V :=StrTofloat(Edit3.Text);P := (n*R*T)/V ;//Konversi dari Float ke StringEdit4.Text :=floatToStr(P);end;
procedure TForm1.Button2Click(Sender:TObject);beginapplication.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 FormatInteger –2147483648..2147483647 signed 32-bitCardinal 0..4294967295 unsigned 32-bit
Secara fundamental, tipe integer terdiri dari :
Type Range FormatShor int –128..127 signed 8-bitSmallin –32768..32767 signed 16-bitLongin –2147483648..2147483647 signed 32-bitInt64 –263..263 –1 signed 64-bitByte 0..255 unsigned 8-bitWord 0..65535 unsigned 16-bitLongword 0..4294967295 unsigned 32-bit
2. Real Merupakan bilangan pecahan, dengan :
TypeSignificant
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 KomputasiJurusan 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 –18Currency 19 –20 –922337203685477.5808..922337203685477.58078
Secara Generik, tipe real adalah :
TypeSignificant 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 requiredChar 1 characters 1 bytesShortString 255 characters 2 to 256 bytesAnsiString ~231 characters 4 bytes to 2GBWideString ~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 KomputasiJurusan 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 DESKRIPSI1. FUNGSI ARITMATIKA
1.1. ABS (X) Digunakan untuk menentukan harga mutlak (absolut) dari argumen XContoh :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.718281828Contoh :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 KomputasiJurusan 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.
VarS : 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 KomputasiJurusan 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
TRIGONOMETRI2.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 KomputasiJurusan 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.
varS : string ;
beginS := FloatToStr(Cos(Pi)) ;Edit1.Text := S ; {hasil -1}
end;2.5. SIN(X) Menghasilkan niai sinus dari suatu sudut.
varS : string ;
beginS := FloatToStr(Sin(90)) ;Edit1.Text := S ; {hasil 0.893996663600558}
end;2.6. TAN(X) Menghasilkan niai tangen dari suatu sudut.
varS : string ;
beginS := 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 KomputasiJurusan 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 KomputasiJurusan 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
eaLnb
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 PASCALA − b a − bab a * b2b 2 * b2c + 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) atau7/(c − d) * (a − b)
7).( dc
ba
−− (a − b)/(c − d) / 7 atau
(a − b)/((c − d) * 7) atau1/7/(c − d) * (a − b)
X2 Sqr(x) ataux * x
X5 Sqr(x) * Sqr(x) * x ataux * x * x * x * x
x Sqrt(x)
x 2
3 x * Sqrt(x) atauSqrt(x * x * x) atauSqrt(x * Sqr( x))
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
2
( )M
RT
π8 2
1Sqrt((8*R*T)/(Pi*M))
RTE
E/(R * T) atauE/R/T atauE/T/R atau1/(T * R) * E
e RTMgz
Exp ((M*g*z)/(R*T))
)(
)(
xCos
xSinSin (x)/Cos (x)
Log(x) Ln (x)/Ln (10) atauLn (x)/2.303
Abs(x) Abs (x)
Untuk rumus yang kompleks misalnya
−+
−−=
21
212
1
2VV
VVan
nbV
nbVnRTLnW
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
RTMc
ecRT
MFv 2
22
23
24
−
=π
π
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 KomputasiJurusan 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 KomputasiJurusan Kimia FMIPA Unnes
3
Menghitung harga tekanan berdasarkan hukum gas ideal jika jumlah mol, temperatur dan volume sistem diketahui.Rumus :
V
nRTp =
R adalah konstanta gas dengan harga 0,082054 L.atm/mol.K.
Design Form:
Tabel Properties Object Inspector:
Objek Properti Nilai PropertiForm Caption Hitung Tekanan gas Ideal
Color clMoneyGreenLabel1 Caption MENGHITUNG TEKANAN GAS IDEAL
Font Color: clNavy, Name: Times New Roman, Size: 15, Style: fsBold (True)
Label2 Caption INPUTFont Color: clRed, Name: Tahoma, Size: 12,
Style: fsBoldLabel3 Caption Mol
Font Style: fsBold (True)Label4 Caption R
Font Style: fsBold (True)
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
3
6.1. RUMUS GAS IDEAL
APLIKASI SEDERHANA KIMIA KOMPUTASI MENGGUNAKAN DELPHI
Label5 Caption TemperaturFont Style: fsBold (True)
Label6 Caption VolumeFont Style: fsBold (True)
Label7 Caption OUTPUTFont Color: clRed, Name: Tahoma, Size: 12,
Style: fsBoldLabel8 Caption RUMUS
Font Color: clRed, Name: Tahoma, Size: 12, Style: fsBold
Edit1 Color clInactiveCaptionTextText (kosong)
Edit2 Color clInactiveCaptionTextText 0.082
Edit3 Color clInactiveCaptionTextText (kosong)
Edit4 Color clInactiveCaptionTextText (kosong)
Edit5 Color clAqua
Listing Unit Program:
unit hitP;interfaceuses
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 KomputasiJurusan 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 KomputasiJurusan Kimia FMIPA Unnes
3
Menghitung harga molaritas dan normalitas larutan dengan rumus :
MolaritasxValensiNormalitas
xMr
xPBxBJMolaritas
=
=
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 PropertiLabel1 Caption MOLARITAS DAN NORMALITASLabel2 Caption INPUTLabel3 Caption OUTPUTLabel4 Caption DensitasLabel5 Caption % BeratLabel6 Caption Massa MolekulLabel7 Caption ValensiLabel8 Caption MolaritasLabel9 Caption NormalitasLabel10 Caption RUMUSEdit1 Text (kosong)Edit2 Text (kosong)
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
3
6.2 MOLARITAS DAN NORMALITAS
Edit3 Text (kosong)Edit4 Text (kosong)Edit5 Text (kosong)Edit6 Text (kosong)Button1 Caption HITUNGButton2 Caption ULANGButton3 Caption KELUARImage1 Picture Load : molaritas.jpg
Strecht false
Listing Unit Program
unit molnor;interfaceuses
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 KomputasiJurusan 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 KomputasiJurusan 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
MRT
avg
MRT
mp
MRT
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 gasT = temperatur dalam KelvinM = massa molekul
Design program
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
3
6.3 ROOT MEAN SQUARE
Tabel Properties Object Inspector:
Objek Properti Nilai PropertiLabel1 Caption ROOT MEAN SQUARELabel2 Caption INPUTLabel3 Caption OUTPUTLabel4 Caption TemperaturLabel6 Caption Massa MolekulLabel7 Caption CrmsLabel8 Caption CmpLabel9 Caption CavgLabel10 Caption RUMUSEdit1 Text (kosong)Edit2 Text (kosong)Edit4 Text (kosong)Edit5 Text (kosong)Edit6 Text (kosong)Button1 Caption HITUNGButton2 Caption ULANGButton3 Caption KELUARImage1 Picture Load : rootmeansquare.jpg
Strecht falseListing Unit Editor
unit rootmeansquare;
Diktat Mata Kuliah Kimia KomputasiJurusan 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;
constR = 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 KomputasiJurusan 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 KomputasiJurusan 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 PropertiStaticText1 Caption FUNGSI ENERGI BEBASGroupBox1 Caption INPUTGroupBox2 Caption OUTPUTLabel1 Caption Temperatur (T)Label2 Caption Molaritas (M)Label3 Caption q
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
4
6.4 FUNGSI ENERGI BEBAS
Label4 Caption qrLabel5 Caption qtLabel6 Caption QvLabel7 Caption qv3Label8 Caption qv2Label9 Caption qv1Label10 Caption FButton1 Caption HITUNGButoon2 Caption ULANGButton3 Caption KELUAREdit1 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 KomputasiJurusan 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 KomputasiJurusan 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 KomputasiJurusan 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 ecRT
M
dc
dn
N
2
2
22
3
24
1
ππ
dimana M adalah massa molar molekul, R adalah konstanta gas, c adalah kecepatan cahaya, T adalah temperatur.
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
4
6.5 DISTRIBUSI PROBABILITAS
Design Form
Tabel Properties Object Inspector:
Objek Properti Nilai PropertiStaticText1 Caption DISTRIBUSI PROBABILITASStaticText2 Caption INPUTStaticText3 Caption OUTPUTStaticText4 Caption RUMUSLabel1 Caption Temperatur (T)Label2 Caption Massa molekuler (M)Label3 Caption Distribusi Probabilitas (Dprob)Button1 Caption HITUNGButton2 Caption ULANGButton3 Caption KELUARImage1 Picture Load : Dprob.jpgBevel1 Shape bsFrame
Style bsRaisedBevel2 Shape bsFrame
Style bsRaisedBevel3 Shape bsTopLine
Style bsLoweredBevel4 Shape bsTopLine
Style bsLoweredBevel5 Shape bsLeftLine
Style bsRaisedBevel6 Shape bsFrame
Style bsRaised
Listing Unit Editor
unit distprob;
Diktat Mata Kuliah Kimia KomputasiJurusan 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 KomputasiJurusan 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 KomputasiJurusan 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
iiJumlah
1
Design Form
Program Praktikum_6;Uses CRT;Var sumi,n,i : word;
BeginClrScr;Write('Bilangan maksimal = '); readln(n);sumi := 0;for i := 1 to n doBegin
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/121
2/121
)(509,0*303,2ln
)(509,0log
e
Izz
Izz
Diktat Mata Kuliah Kimia KomputasiJurusan 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 KomputasiJurusan 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
hJJJerot 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 KomputasiJurusan 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 KomputasiJurusan 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 KomputasiJurusan 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
EAk
RT
EAk
303,2loglog
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 dobegin 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 dobegin 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 KomputasiJurusan Kimia FMIPA Unnes
5
Procedure Hitung_A; Begin
sumA := 0;for i := 1 to jd dobegin 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 KomputasiJurusan 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 KomputasiJurusan 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 KomputasiJurusan 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 KomputasiJurusan 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 KomputasiJurusan 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 +→+ 42
10
11 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 KomputasiJurusan 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 KomputasiJurusan 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','Samarium', '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 KomputasiJurusan 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 KomputasiJurusan 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 KomputasiJurusan 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 KomputasiJurusan 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 KomputasiJurusan Kimia FMIPA Unnes
6
6.14 kONSTANTA LAJU REAKSI
−=
−=
=
22
11
.2
1
:3 Orde
.
1
:2 Orde
ln1
:1 Orde
otr
to
tor
t
or
CCtk
CC
CC
tk
C
C
tk
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 KomputasiJurusan 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 KomputasiJurusan 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 KomputasiJurusan 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 awalnyaRumus penyelesaianya dapat diturunkan dari rasio konsentrasi dan kecepatan awalnya sebagai berikut
( ) ( )
=
=
≈≈
2
1
2
1
2
1
2
1.
.
c
cLn
r
rLn
n
r
rLn
c
cLnn
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
produkr =
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 KomputasiJurusan 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 KomputasiJurusan 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 KomputasiJurusan 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 = #27End.
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 KomputasiJurusan Kimia FMIPA Unnes
7
6.16 LAJU EFUSI GAS
Menghitug harga laju efusi suatu gas dengan rumus
κκ
κκ
1
1.1
.2
−
−
−=
pi
po
M
RTu
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 KomputasiJurusan 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 KomputasiJurusan Kimia FMIPA Unnes
7
6.17 OPERASI MATRIK DAN VEKTOR
end; piv := a[ii,ii]; nxt := ii + 1; for jj := nxt to n do Begin cn := a[jj,ii]/piv; for kk := ii to n+1 do a[jj,kk] := a[jj,kk] - cn*a[ii,kk]; end; end; temp := 1; for ii := 1 to n do temp := temp*a[ii,ii]; det := temp*ff; end;
Procedure changecol(baris,kolom,target:integer; var m:matrik; newcol:vektor); var i : integer; Begin for i := 1 to baris do m[i,target] := newcol[i]; end;
Procedure solve(n:integer; a:matrik; c:vektor; var x: vektor); var k : integer; d : real;
Procedure swap(n,k:integer; var a:matrik; var c : vektor); var e : real; j : integer; Begin for j := 1 to n do Begin e := c[j]; c[j] := a[j,k]; a[j,k] := e; end; end;
Begin d := det(n,a); for k := 1 to n do Begin swap(n,k,a,c); x[k] := det(n,a)/d; swap(n,k,a,c); end; end;
Procedure invert(n : integer; a : matrik; var b : matrik); var i,tmp : vektor; j : integer; Begin
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
7
if det(n,a) = 0 then Begin WriteLn('invert : singular matrik'); ReadLn; end else Begin for j := 1 to n do Begin i[j] := 1; solve(n,a,i,tmp); changecol(n,n,j,b,tmp); i[j] := 0; end; end; end;
Procedure jumlah(baris,kolom:integer; x,y :matrik; var z : matrik); var i,j : integer; Begin for i := 1 to baris do for j := 1 to kolom do z[i,j] := x[i,j]+y[i,j]; end;
Procedure selisih(baris,kolom:integer; x,y :matrik; var z : matrik); var i,j : integer; Begin for i := 1 to baris do for j := 1 to kolom do z[i,j] := x[i,j]-y[i,j]; end;
Procedure transpose(baris,kolom:integer; mat : matrik; var matt : matrik); var i,j : integer; Begin for i := 1 to baris do for j := 1 to kolom do matt[j,i] := mat[i,j]; end;
Procedure kali_skalar(baris,kolom:integer; konst : real; x:matrik; var z : matrik); var i,j : integer; Begin for i := 1 to baris do for j := 1 to kolom do z[i,j] := konst*x[i,j]; end;
Procedure kali_matrik(n,m,k: integer; x,y: matrik; var z: matrik); var i,j,h : integer; Begin for i := 1 to n do for j := 1 to k do
Begin z[i,j] := 0;
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
7
for h := 1 to m do z[i,j] := z[i,j] + x[i,h]*y[h,j]; end;
end;
Procedure readmat(baris,kolom : integer; var m : matrik); var i,j : integer; Begin for i := 1 to baris do Begin for j := 1 to kolom do Begin GoToXY((j*10),i+2); ReadLn(m[i,j]); end; end; end;
Procedure Writemat(baris,kolom:integer; var m:matrik); var i,j : integer; Begin for i := 1 to baris do Begin for j := 1 to kolom do Begin GoToXY((j*10),i+2); WriteLn(m[i,j]:10:4); end; WriteLn; end; end;
Procedure readvec(n : integer; var v : vektor); var i : integer; Begin GoToXY(70,2); Write('Vektor'); for i := 1 to n do Begin GoToXY(70,i+2); Read(v[i]); end; end;
Procedure inversi; Begin ClrScr; GoToXY(1,1); Write('Orde matrik : '); Read(n); baris := n; kolom := n; readmat(n,n,a);
ClrScr; invert(n,a,b); GoToXY(1,1); Write('Matrik inversi :'); writemat(n,n,b);
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
7
end;
Procedure determinan; var dtm : real; Begin ClrScr; Write('Orde matrik : '); ReadLn(n); baris := n; kolom := n; readmat(n,n,a);
ClrScr; WriteLn('matrik asal :'); writemat(n,n,a);
dtm := det(n,a); WriteLn('Determinan matrik = ',dtm:10:4); end;
Procedure dua_matrik(var X,Y : matrik); Begin ClrScr; Write('Orde matrik : '); ReadLn(n); baris := n; kolom := n;
GoToXY(10,2); Write('Matrik Pertama : '); for i := 1 to baris do Begin for j := 1 to kolom do Begin GoToXY((j*10),i+2); ReadLn(X[i,j]); end; end;
GoToXY(10,baris+5); Write('Matrik Kedua : '); for i := 1 to baris do Begin for j := 1 to kolom do Begin GoToXY((j*10),i+(baris+5)); ReadLn(Y[i,j]); end; end; end;
Procedure penjumlahan; var X,Y,Z : matrik; Begin dua_matrik(x,y); jumlah(n,n,x,y,z);
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
7
ClrScr; Writeln('Hasil Penjumlahan :'); writemat(n,n,z); end;
Procedure pengurangan; var X,Y,Z : matrik; Begin dua_matrik(x,y); selisih(n,n,x,y,z);
ClrScr; Writeln('Hasil Selisih :'); writemat(n,n,z); end;
Procedure perkalian; var X,Y,Z : matrik; Begin dua_matrik(x,y); kali_matrik(n,n,n,x,y,z);
ClrScr; Writeln('Hasil Perkalian :'); writemat(n,n,z); end;
Procedure transpose_matrik; Begin ClrScr; Write('Orde matrik : '); ReadLn(n); baris := n; kolom := n; readmat(n,n,a);
ClrScr; WriteLn('Matrik Transpose :'); transpose(n,n,a,b); writemat(n,n,b); end;
Procedure perkalian_skalar; var konst : real; Begin ClrScr; Write('Orde matrik : '); ReadLn(n); baris := n; kolom := n; readmat(n,n,a);
GoToXY(1,baris+5); Write('Konstanta : '); Read(konst);
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
8
kali_skalar(n,n,konst,a,b);
ClrScr; WriteLn('Hasil perkalian skalar :'); writemat(n,n,b); end;
Procedure linier; var den : real; v : vektor; m,z : matrik; Begin ClrScr; Write('Orde matrik : '); ReadLn(n); baris := n; kolom := n; readmat(n,n,m); readvec(n,v); den := det(n,m); WriteLn; WriteLn('Penyelesaian persamaan linier :'); WriteLn; for i := 1 to n do Begin z := m; changecol(n,n,i,z,v); WriteLn('x',i:1,' = ',det(n,z)/den:10:4); end end;
Procedure Pilihan; Begin ClrScr; TextColor(yellow); WriteLn(' MENU MATRIK '); WriteLn; WriteLn(' 1. Penjumlahan Matrik '); WriteLn(' 2. Selisih Matrik '); WriteLn(' 3. Perkalian Matrik '); WriteLn(' 4. Perkalian Skalar Matrik '); WriteLn(' 5. Inversi Matrik '); WriteLn(' 6. Determinan '); WriteLn(' 7. Transpose '); WriteLn(' 8. Persamaan Linier '); WriteLn(' 9. Keluar '); WriteLn; Write (' Pilihan : '); opsi := ReadKey; Case opsi of '1' : Penjumlahan; '2' : Pengurangan;
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
8
'3' : Perkalian; '4' : Perkalian_skalar; '5' : Inversi; '6' : Determinan; '7' : Transpose_matrik; '8' : Linier; '9' : Halt; end; end;
Begin Repeat Pilihan; GoToXY(10,25); Write('<Esc> Keluar <Enter> Menu'); Until ReadKey = #27;End.
Keterangan :Program ini memberikan contoh penggunaan deret 2 dimensi untuk data matrik. Salah
satu penggunaan operasi matrik dan vektor adalah penyelesaian permasalahan kesetaraan persamaan reaksi pada pembakaran metana yang mengha-silkan CO2 dan H2O.
CH4 + O2 → CO2 + H2O
Penyelesaiannya menggunakan menu Persamaan Linier. Matrik yang dapat dibentuk dari
persamaan ini adalah
2004
1220
0101
Dalam persamaan reaksi ada 4 suku yang menunjukkan 4 zat berbeda (2 reaktan dan 2 produk). Baris pertama untuk banyaknya atom C : suku pertama sebanyak 1 buah , suku kedua sebanyak 0 buah, suku ketiga sebanyak 1 buah dan suku keempat sebanyak 0 buah. Baris kedua untuk menunjukkan banyaknya atom O, dan baris ketiga untuk banyaknya atom H. Matrik hanya memiliki 3 baris karena dalam persamaan reaksi hanya terdapat 3 jenis atom yaitu C, O dan H. Tiga kolom pertama adalah bentuk matrik 3 x 3, sedangkan kolom keempat adalah vektornya. Hasil penyelesaiannya diperoleh vektor : 0,5; 1,0; 0,5. Tiga komponen vektor ini adalah koefisien dari 3 suku pertama dalam persamaan reaksi, sedangkan koefisien suku terakhir dapat langsung dihitung dengan lebih mudah, diberikan harga 1,0. Sehingga diperoleh persamaan reaksi
½ CH4 + 1 O2 → ½ CO2 + 1 H2O
atau dibulatkan menjadi
1 CH4 + 2 O2 → 1 CO2 + 2 H2O
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
8
Suatu fungsi atau prosedur dalam suatu program hanya dapat digunakan oleh program tersebut, tidak dapat digunakan oleh program lain dalam file lain. Problem ini tidak efisien jika diterapkan untuk program besar atau panjang karena harus mengetik ulang dan cara ini boros memori. Untuk mengantisipasiny Pascal menyediakan bentuk pemrograman modular berupa file unit yang dapat digunakan untuk membuat librari (pustaka) dan membagi program besar menjadi modul-modul yang secara logika berkaitan. Perhatikan kembali pembahasan sub-bab 2.26 dan bab 3 untuk membuat file unit berikut ini.
{$N+}Unit Math; {Praktikum 18}InterfaceUses CRT;Var hasil : extended; i : integer;
Function pangkat(a : real; b : real) : extended;Function sina(a : real) : real;Function cosa(a : real) : real;Function tana(a : real) : real;Function loga(a : real) : real;Procedure garis_datar (x1,x2,y,jgar : integer);Procedure garis_tegak (y1,y2,x,jgar : integer);
implementation
Function pangkat;Begin Hasil := exp(b*ln(a)); pangkat := hasil;End;
Function sina;Begin Hasil := sin(a/(180/pi)); sina := hasil;End;
Function cosa;Begin Hasil := cos(a/(180/pi)); cosa := hasil;End;
Function tana;Begin Hasil := sina(a)/cosa(a); tana := hasil;End;
Function loga;
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
8
6.18 MEMBUAT FILE UNIT
Begin Hasil := Ln(a)/Ln(10); loga := hasil;End;
Procedure garis_datar;Begin for i := x1 to x2 do Begin GoToXY(i,y); Write(char(jgar)); End;End;
Procedure garis_tegak;Begin for i := y1 to y2 do Begin GoToXY(x,i); Write(char(jgar)); End;End;
End.
Keterangan :Nama unit harus sama dengan nama filenya. Jika nama unit Math maka nama file
programnya harus Math. Unit ini dapat dipakai oleh file lain dengan menyebutkan nama unit dalam klausul Uses. Source Code unit ini adalah math.pas maka agar dapat menjadi math.tpu (Turbo Pascal Unit) harus dikompilasi dulu dengan alamat ke disket/hardisk dengan perintah sebagai berikut :
• Untuk Turbo Pascal 5 : Tekan <Alt> <C>Arahkan Destination ke Disk (bukan Memori) dengan menekan <D>Tekan <Alt> <F9>
• Untuk Turbo Pascal 7 : Langsung tekan <Alt> <F9>
Contoh jenis garis pada Char(jgar) sebagai berikut : kode ASCII 205 untuk garis tunggal datar dan kode ASCII 186 untuk garis tunggal tegak/vertikal
GaCl3 memiliki sistem triklinik. Konstanta kristalnya sebagai berikut α = 119,50 β = 90,80 γ = 118,60; a = 6,94 angstrom, b = 6,84 angstrom, c = 6,82 angstrom. Tulis program untuk menghitung jarak antar bidang indeks Miller (dhkl) menggunakan rumus berikut
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
8
6.19 JARAK ANTAR BIDANG INDEKS MILLER
( )
( ) ( ) ( )2/1
1
cos.cos.cos22cos2cos2cos1coscos.cos2
coscos.cos2
cos.cos.cos22sin
2
22sin
2
22sin
2
2
=
+−−−+−+−
++++=
Phkl
ca
lh
bc
kl
ab
hk
c
l
b
k
a
hP
d
γβαγβαβγααγβ
γβαγβα
Hitunglah harga jarak antar bidang indeks Miller untuk bidang 100 dan 110 !
{$N+}Program Praktikum_19;Uses CRT, math;Var a,b,c,alpha,betha,gamma : real; h,k,l : byte; sr1,sr2,r1,r2,r3,r4,r5,r6,r7,r8,dhkl : real; opsi : char;Label 10;
Procedure input; Begin GoToXY(1,1); Write('MENGHITUNG JARAK ANTAR BIDANG INDEKS MILLER'); garis_datar(1,79,2,205); GoToXY(1,3); Write('Alpha = Betha = Gamma = '); garis_datar(1,79,4,205); GoToXY(1,5); Write('a = b = c = '); garis_datar(1,79,6,205); GoToXY(1,7); Write('h = k = l = '); garis_datar(1,79,8,205); GoToXY(1,9); Write('dhkl = ');
GoToXY(9,3); Read(alpha); GoToXY(27,3); Read(betha); GoToXY(44,3); Read(gamma);
GoToXY(9,5); Read(a); GoToXY(27,5); Read(b); GoToXY(44,5); Read(c);
GoToXY(9,7); Read(h); GoToXY(27,7); Read(k); GoToXY(44,7); Read(l); end;
Procedure Rumus; Begin
if h = 1 then sr1 := pangkat(h,2) else sr1 := 0; r1 := (sr1/pangkat(a,2))*Sqr(sina(alpha));
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
8
if k = 1 then sr1 := pangkat(k,2) else sr1 := 0; r2 := (sr1/pangkat(b,2))*Sqr(sina(betha));
if l = 1 then sr1 := pangkat(l,2) else sr1 := 0; r3 := (sr1/pangkat(c,2))*Sqr(sina(gamma)); r4 := ((2*h*k)/(a*b))*(cosa(alpha)*cosa(betha)*cosa(gamma)); r5 := ((2*k*l)/(b*c))*(cosa(betha)*cosa(gamma)-cosa(alpha)); r6 := ((2*l*h)/(c*a))*(cosa(gamma)*cosa(alpha)-cosa(betha)); r7 := (1-Sqr(cosa(alpha))-Sqr(cosa(betha))-Sqr(cosa(gamma))+ (2*cosa(alpha)*cosa(betha)*cosa(gamma))); r8 := r1 + r2 + r3 + r4 + r5 + r6 + r7; dhkl := Sqrt(1/r8); end;
Procedure hasil; Begin GoToXY(1,9); Write('dhkl = ',dhkl:6:4); garis_datar(1,79,10,205); end;
Begin ClrScr; 10: input; rumus; hasil; opsi := readkey; if opsi = #13 then goTo 10 else halt;End.
Keterangan :Program ini menggunakan unit math dalam operasinya, yaitu fungsi pangkat, sinus,
cosinus dan membuat garis dengan jenis garis tunggal datar. Perhatikan teknik mengulang program tanpa menghilangkan variabel yang akan diisi, sehingga tampak bentuk tampilan interaktif.
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
8
Membuat Program Pelatihan Multimedia
Buatlah proyek baru dengan cara :
1. tempatkan sebuah label pada form dengan memilih icon pada component
palette standart.
2. tempatkan button 1,2,3 dengan memilih icon pada component palette
standart.
3. tempatkan status bar dengan mengklik icon dari conponent paletteWin32.
4. tempatkan image dengan mengklik icon dari component palette additional
kemudian atur ukurannya.
5. tempatkan RichEdit dari component palette Win32. kemudian drag pada
foam dan atur besarnya.
6. pada component palette standart pilih icon kemudian drag pada form.
Gabungkan image dengan panel
kemudian lakukan langkah berikut :
1 1 Mengubah Properti pada form
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
8
Membuat Program Pelatihan Multimedia
Form memiliki sejumlah karakteristik atau sifat sperti tinggi,lebar, nama,warna yang
disebut properti. Property suatu foam atau komponen lain dapat diubah melalui Objek
Inspektor pada halaman yang berjudul properties, contoh:
properties IsiCaption Digunakan untuk amemberi nama
foam,missal Latihan MultimediaColor Digunakan untuk memberi warna
foam, missal clBtnFace
1 1 Memempatkan komponen-komponen pada form
komponen Properties isiLabel 1 Caption
Color
Font
Digunakan untuk memberi nama label misal
Ikatan Kimia
Memberi warna label
Digunakan untuk mengatur jenis ,ukuran dan
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
8
warna hurufButton 1 Caption
Cursor
Visible
Enable
Hint
Ketik : TEXT
Pilih HandPoint
Digunakan untuk menampilkan Button ,pilih
True
Digunakan untuk mengaktifkan Button,pilih
True
Digunakan untuk memunculkan pesan pada
status bar ,ketik mau baca textButton 2 Caption
Cursor
Hint
Visible
Enable
Ketik : GAMBAR
Pilih HandPoint
Ketik : mau lihat gambar
Pilih : True
Pilih : True Button 3 Caption
Cursor
Hint
Visible
Enable
Ketik :VIDEO
Pilih HandPoint
Ketik : mau lihat video
Pilih : True
Pilih : True Button 4 Caption
Cursor
Hint
Visible
Enable
Ketik : KELUAR
Pilih HandPoint
Ketik : keluar ah…..
Pilih : True
Pilih : True Image Picture Digunakan untuk memilih gambar yang akan
dimunculkan klik load untuk mencari
kemudian klik ok
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
8
Stretch
Pilih : true agar gambar sesuai dengan ukuran
imageStatusbar AutoHint
Visible
Enable
Pilih : True
Pilih : True
Pilih : TrueRichEdit 1 Color
Lines
Scroollbars
Pilih : clAqua
Klik tanda sebelah kanannya lalu hapus
tulisan RichEdit1 kemudian klik OK
Pilih : ssBothPanel1 Caption Hapus tulisan Panel1
Setelah menempatkan dan mengatur property masing-masing komponen maka
tampilan akan menjadi seperti berikut :
Menampilkan text melalui Button text
Klik dua kali dengan cepat button text pada form Delphi, maka akan muncul tampilan
unit sebagai berikut:
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
9
Diantara tulisan begin dan end; tuliskan kode kejadian sebagai berikut :
Panel1.visible:=false;
Image1.visible:=false;
RichEdit1.visible:=true;
RichEdit1.line.LoadFromFile(‘nama file text yang akan dtampilkanr.rtf’);
Save All kemudian jalankan form.
Catatan : - sebelumnya buatlah file text dengan format rtf menggunakan Microsof
World kemudian simpan pada directory yang sama tempa anda menyimpan form
Menampilkan gambar melalui button gambar
klik dua kali dengan cepat button gambar sehingga muncul unit kerja anda seperti
gambar diatas, lalu ketikkan kode kejadian Sebagai berikut :
RichEdit1.Visible:=False;
Panel1.Visible:=True;
Image1.Visible:=true:
Image1.Picture.LoadFromFile(‘nama file gambar .jpg’);
Save All kemudian jalankan form.
Catatan : temptkan file gambar yang akan dibuka pada directory penyimpanan form
saudara.beberapa file gambar yang dapat diterjemahka Delphi antara lain jpg,bmp,dll
Menampilkan Video melalui button video
Sebelumnya tambahkan pada Uses Shell API,Mplayer kemudianTempatkan
komponen MediaPlayer1 dari Component Palette System dengan memilih icon sehingga
pada form akan muncul tampilan seperti berikut:
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
9
atur propertinya sebagai berikut :
Auto Open Pilih FalseColored Button Pilih FalseVIsible Pili FalseVisible Button Pilih False untuk semua Button
Klik dua kali pada Button video kemudian ketikkan kode kejadian sebagai berikut :
Image1.Visibl:=false;
RichEdit1.Visible :=False;
Panel1.Visible:=false;
MediaPlayer1.FilenName:=’nama file yang akan dibuka.mpg’;
MediaaPlayer1.Open ;
Panel1.Show;
MediaPlayr1.Display:=panel1;
With Panel1 do
Media Player1.DisplayRect:=Rect(2,2,Width,Height);
If MediaPlayer1,DeviceID=0 then
Begin
MessageDlg(‘belum ada file yang dibuka’,mtInformation,[mbOK],0);
Exit;
End;
MediaPlayer1.Play;
End;
Save All kemudian jalankan form.
File film selain mpg, yang dapat dibaca oleh Delphi adalah AVI,
Mengahiri program
Klik dua kali dengan cepat button keluar ,kmudian tuliskan kode kejadian sebagai
berikut:
If MesageDlg(‘yakinkah anda akan keluar?’,mt Confirmation,mbOKCancel,0) =
mrOk than
Application.Trminate;
End;
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
9
Membuat Program Soal Interaktif
Buatlah proyek baru dengan membuka Form Delphi baru, kemudian tepatkan
Komponen-komponen sebagai berikut:
Setelah menempatkan komponen tersebut kemudian aturlah Properti melalui objek
Inspector sebagai berikut :
Button 1 Caption
Name
Enable
Kalkulator
Btnkalkulator
trueButton 2 Caption
Name
Enable
A
BtnA
FalseButton 3 Caption B
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
9
Name
Enable
BtnB
FalseButton 4 Caption
Name
Enable
C
BtnC
FalseButton 5 Caption
Name
Enable
mulai
Btnmulai
FalseButton 6 Caption
Name
Enable
Maju>
Btnmaju
FalseButton 7 Caption
Name
Enable
keluar
Btnkeluar
FalseLabel 1 Caption
name
Keterangan 1
Labelketerangan1Label2 Caption
name
Keterangan 2
Labelketerangan2Label 3 Caption
name
60
LabelwaktuRichEdit Lines
Scroolbar
Hilangkan tulisan RichEdit
Pilih ssBoth
Timer Enable
Interval
Name
Pilih False
1000 (Menyatakan 1 Detik)
Timer1
Dapat juga ditambahkan bevel untuk memberi bingkai komonen-komponen form.
Menampilkan soal melalui RichEdit dengan bantuan button mulai
Sebelumnya kita harus menempatkan file soal yang hendak ditampilkan seperti ulasan
sebelumnya tentang menampilkan text menggunakan button text.
Beri nama file-file tersebut dengan nama 11.rtf,12.rtf,13.rtf dan seterusnya sampai 20.rtf.
Dengan mangklik dua kali dengan cepat pada button mulai kemudian ketikkan kode kejadian
sebagai berikut :
BtnA.Enable:=true;
BtnB.Enable:=true;
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
9
BtnC.Enable:=true;
Btnmaju.Enable:=true;
Btnmulai.Enable:=true;
RichEdit1.Visibl:= true;
FileName:=’11.rtf’;
RichEdit1.Lines.LoadFromFile(Filename);
Js:= 1;
Jss:=InToStr (js);
Labelketerangan1.Caption:=’jumlah Soal;’+jss;
Jb:=0;
Jbs:=IntToStr(jb);
Labelketerangan2.Caption:=jumlah benar:’+jbs;
Timer1.Enable:=true;
Form!.Visible:=false;
X:=0;
End;
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
9
Menampilkan Soal Berikutnya Menggunakan Button Maju
Klik dua kali button maju dengan cepat kemudian tuliskan kode kejadian sebagai
berikut :
BtnA.Enable:=true;
BtnB.Enable:=true;
BtnC.Enable:=true;
RichEdit1.Visible:=true;
Js:=js+1;
filename:=copy(filename,1,);
Fni:=StrToInt(filename);
Fni:=fni+1;
If fni <20 then fni :=11;
Fns:=IntToStr(fni);
Filename:=fns+’.rtf’;
RichEdit1.Visible:=true;
RichEdit1.Lines.loadFromFile(filename);
Jss:=IntToStr(js);
Labelketerangan2.Caption:=’jumlah soal:’+jss;
Beberapa variable eperti js,jss,jb,jbs harus ditambahkan terlebih dahulu dalam Uses.
Mengeluarkan button kalkulator menggunakan button kalkulator
sebelumnya carilah file yang bernama cal.exe kemudian copy dan tempatkan pada
tem[pat penyimpanan form.kemudian kli dua kali dan tuliskan kode kejadian sebagai berikut :
ShellExecute(Handle,’Open’,’Calc.exe’,nil,nil,SW_SHOW);
End;
Mengaktifkan Buton
Sebelum menuliskan kode kejadian kita perlu mementukan option untuk soal yang
jawabannya benar setlah itu baru kita tuliskan kode kejadian sebagai berikut :
BtnA.Enable:=false;
BtnB.Enable:=false;
BtnC.Enable:=false;
If filename=’11.rtf’then
Begin
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
9
Labelketerangan2.Caption :=’benar’;
Jb:=jb+1;
Jbs:=IntToStr(jb);
Labelketerangan2.caption :=’jumlah benar:’+jbs;
End;
Pernyataan ini berlaku untuk semua file dengan jwaban A.untuk kejadia B dan C sama
tingal mnyesuaikanfile soal mana yangoption jawabannya sesuai dengan button tersebut.
Mengatur lamanya waktu mengerjakan soal menggunakan timer
X:=X+2;
Xs:=IntToStr(60-X);
Labelwaktu.Caption :=Xs;
Xb:=StrToInt(Xs);
If Xb=0 then
Begin
Btnmulai.Enable:=true;
Btnmaju.Enable:=false;
X:=-1;
Labelketerangan2.Caption:=’jumlah benar:’;
Labelketerangan1.Caption :=’jumlah Soal:’;
RichEdit1.Clear;
Timer1.Enable:=false;
Labelwaktu.Caption;=’60’;
Jb:=0;
Js:=0;
End;
Mengahiri aplikasi melalui Button keluar
Untuk mengahiri aplikasi,kliok dua kali button keluar kemudian tukiska kode kejadian
sebagai berikut :
Application .terminate;
End;
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
9
PROGRAM 1 GRAFIK ARRAY
Tempatkan komponen-komponen pada form seperti di bawah ini:
Kemudian ubahlah propertinya sebagai berikut:
Objek Properti Nilai propertiChart1 Series1 Pilih : Line
Titles Ketik : PANJANG GELOMBANG MAKSIMALBagian foot, ketik : PANJANG GELOMBANG
Axis Bagian title, ketik : ADSORBANSIPanel Aktifkan gradient, pilih warna yang disukai
Chart2 Series2 Pilih : AreaTitles Ketik : GRAFIK
Bagian foot, ketik : XAxis Bagian title, ketik : Y
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
9
PEMROGRAMAN GRAFIK DELPHI
Panel Aktifkan gradient, pilih warna yang disukaiLabel1 Caption Ketik : Lamda ke-
Font Tahoma, style : bold, size : 12, color : blackLabel2 Caption Ketik : Adsorbansi
Font Tahoma, style : bold, size : 12, color : blackEdit1 Text (kosong)Edit2 Text (kosong)Button1 Caption Ketik : GrafikButton2 Caption Ketik : SelesaiMemo1 Lines (kosong)
Kemudian tuliskan kode kejadian pada tiap komponen seperti berikut :
unit garray;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart;
type TForm1 = class(TForm) Chart1: TChart; Series1: TLineSeries; Memo1: TMemo; Button1: TButton; Label1: TLabel; Edit1: TEdit; Edit2: TEdit; Button2: TButton; Label2: TLabel; Chart2: TChart; Series2: TAreaSeries; procedure Button2Click(Sender: TObject); procedure Memo1Change(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; Data : array of real ;
implementation
{$R *.DFM}
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
9
procedure TForm1.Button2Click(Sender: TObject);begin application.terminate;end;
procedure TForm1.Memo1Change(Sender: TObject);begin if edit1.text='11' then memo1.ScrollBars:=ssVertical;end;
procedure TForm1.Button1Click(Sender: TObject);begin if edit2.Text ='' then messagedlg('Data belum diisi',mtError,[mbok],0) else begin setlength(data,strtoint(edit1.text)+1); data[strtoint(edit1.text)] := strtofloat(edit2.text); series1.Add(strtofloat(edit2.text),'',clred); series2.Add(strtofloat(edit2.text),'',clBLUE); memo1.lines.add(edit1.text+' --> '+edit2.text); edit1.text :=inttostr(strtoint(edit1.text)+1); edit2.Text := floattostr(strtofloat(edit2.text)); edit2.text :=''; edit2.SetFocus; end;end;end.
Hasil Running
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
PROGRAM 2 GRAFIK FUNGSI
Tempatkan komponen-komponen pada form seperti berikut :
Ubah properti masing-masing komponen sebagaimana berikut ini:
Objek Properti Nilai propertiChart1 Series2 Pilih : Line
Titles Ketik : GRAFIK FUNGSIBagian foot, ketik : X
Axis Bagian title, ketik : Y
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
Panel Aktifkan gradient, pilih warna yang disukaiLabel1 Caption Ketik : PILIHAN FUNGSI
Font Tahoma, style : Bold, size : 16, color : BlueLabel2 Caption Ketik : Y = 2x2 + 3x + 5
Font Tahoma, style : Bold, size : 12, color : BlueLabel3 Caption Ketik : Y = sin x
Font Tahoma, style : Bold, size : 12, color : BlueLabel4 Caption Ketik : Y = cos x – 2 sin x
Font Tahoma, style : Bold, size : 12, color : BlueLabel5 Caption Ketik : Batas
Font Tahoma, style : Bold, size : 12, color : BlueLabel6 Caption Ketik : Skala x
Font Tahoma, style : Bold, size : 12, color : BlueLabel7, 8, 9 Caption :
Font Tahoma, style : Bold, size : 12, color : BlueRadiobutton1, 2, 3 Caption (kosong)Button1 Caption GrafikButton2 Caption Selesai
Menuliskan kode kejadian pada masing-masing komponen
unit gfungsi;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, StdCtrls, Chart, DBChart, Db,
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
DBTables;
type TForm1 = class(TForm) Chart1: TChart; Button2: TButton; Edit1: TEdit; Label1: TLabel; Button1: TButton; Label2: TLabel; Label3: TLabel; RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; Edit2: TEdit; Edit3: TEdit; Label5: TLabel; Label6: TLabel; Label9: TLabel; series1: TFastLineSeries; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure RadioButton1Click(Sender: TObject); procedure RadioButton2Click(Sender: TObject); procedure RadioButton3Click(Sender: TObject);
private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button2Click(Sender: TObject);begin application.terminate;end;
procedure TForm1.Button1Click(Sender: TObject);var i : integer;
function FX(x : integer):real; begin
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
FX:=2*x*x+3*x+5; end;
function ft(t:integer): real; begin ft := cos(t)*sin(t); end;
begin series1.Clear; series1.XValues.Multiplier:=strtoint(edit2.text)/strtoint(edit3.text);
for i := 1 to strtoint(edit1.text) do if radiobutton1.Checked then series1.add(FX(i)) else
if radiobutton2.checked then series1.add(sin(pi/180*i)) else
if radiobutton3.checked then series1.add(-2*sin(pi/180*i)+cos(pi/180*i))end;
procedure TForm1.RadioButton1Click(Sender: TObject);begin radiobutton1.checked:=true; radiobutton2.checked:=false; radiobutton3.checked:=false;end;
procedure TForm1.RadioButton2Click(Sender: TObject);begin radiobutton2.checked:=true; radiobutton1.checked:=false; radiobutton3.checked:=false;end;
procedure TForm1.RadioButton3Click(Sender: TObject);begin radiobutton3.checked:=true; radiobutton2.checked:=false; radiobutton1.checked:=false;end;
end.
Hasil Running
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
PENDAHULUAN
Sejalan dengan semakin kompleksnya aplikasi sains dan teknologi dalam kehidupan sehari-hari maka semakin rumit pula penyelesaian problem-problem penghitungan kimia. Untuk problem sederhana mungkin dapat diselesaikan dengan pendekatan analitik. Pendekatan analitik memang memberikan hasil eksak, tetapi memerlukan kemampuan yang tinggi dalam memanipulasi matematik sehingga hanya digunakan untuk menyelesaikan sebagian kecil problem kimia.
Alternatif pendekatan penyelesaian lain adalah menggunakan metode numerik. Metode numerik hanya memberikan penyelesaian pendekatan (approximation), tetapi tidak memerlukan kemampuan memanipulasi matematik yang terlalu tinggi, dan dapat digunakan untuk menyelesaikan lebih banyak problem kimia daripada metode analitik.
Contoh untuk diferensiasi atau integrasi persamaan
2xy =
dengan mudah dapat diselesaikan secara analitik menjadi
∫ ∫ ==
==
33
12
22
)(
xdxxydx
xdx
xd
dx
dy
Kasus lain untuk persamaan
x
xy
51
2 3
+=
tidak dapat dengan cepat diselesaikan secara analitik, diperlukan teknik manipulasi matematik yang lebih tinggi. Tetapi persamaan ini dengan mudah dan cepat dapat diselesaikan secara analisis numerik.
Berkembangnya program-program komputasi menggunakan komputer semakin menempatkan metode numerik pada posisi yang strategis dalam penyelesaian problem-problem kimia. Kecepatan dan ketepatan pendekatan penyelesaian komputasi semakin dapat diperbaiki dan dimodifikasi sehingga mendekati feasibilitas metode analitik.
DIFERENSIASI NUMERIK
Tujuan membentuk derivativ adalah untuk menghitung slope (kemiringan).
Misalnya diketahui
y = f(x)
dengan cara forward maka persamaan untuk slope garis tangent pada titik [x,f(x)] adalah
x
xfxxf
xdx
xfdxxf
dx
xdf
dx
dyxf
∆
∆
∆
−+→
=−+=== )()(
0lim
)()()()('
Derivativ kedua adalah slope dari slope, yaitu
x
xfxxfxdx
xfdxxf
dx
xfd
dx
dyxf
∆
∆
∆
−+→
=−+=== )(')('0
lim)(')(')('
)(''2
2
atau
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
ANALISIS NUMERIK UNTUK PROBLEM KIMIA
22
2
22
2
)()(*2)*2(
0lim
)(')(''
)()(*2)*2()(')(''
x
xfxxfxxf
xdx
xfd
dx
dyxf
dx
xfdxxfdxxf
dx
xfd
dx
dyxf
∆
∆∆
∆
++−+→
===
++−+===
dengan cara backward maka persamaan untuk slope garis tangent pada titik [x,f(x)] adalah
x
xxfxfxdx
dxxfxf
dx
xdf
dx
dyxf
∆
∆
∆
−−→
=−−=== )()(0
lim)()()(
)('
Derivativ kedua adalah slope dari slope, yaitu
x
xxfxfxdx
dxxfxf
dx
xfd
dx
dyxf
∆
∆
∆
−−→
=−−=== )(')('0
lim)(')(')('
)(''2
2
dengan cara central maka persamaan untuk slope garis tangent pada titik [x,f(x)] adalah
x
xxfxxfxdx
dxxfdxxf
dx
xdf
dx
dyxf
∆
∆∆
∆
−−+→
=−−+===*2
)()(0
lim*2
)()()()('
Derivativ kedua adalah slope dari slope, yaitu
x
xxfxxfxdx
dxxfdxxf
dx
xfd
dx
dyxf
∆
∆∆
∆
−−+→
=−−+===*2
)(')('0
lim*2
)(')(')(')(''
2
2
Contoh problem kimia
Menghitung harga ∆S dan ∆Cp pada kesetimbangan elektrokimia dengan rumus
pT
EnFTC
pT
EnFS
p
∂
∂=∆
∂∂=∆
2
2
dimana n adalah bilangan muatan, F adalah konstanta Faraday, dan E adalah fungsi temperatur, misalnya
E = 0,23659 – 4,8564 x 10-4 t – 3,4205 x 10-6 t2 + 5,869 x 10-9 t3
Jawaban
Jika diketahui n = 1, F = 86485, dipakai dt = 0,1 dan temperatur pada 250 C maka hitungan secara numerik
menghasilkan
nilai (∂E/∂T)p Forward = -6.4595860067 x 10-04 nilai (∂2E/∂T2)p Forward =
-5.9571220845 x 10-06
nilai (∂E/∂T)p Backward = -6.4536253376 x 10-04 nilai (∂2E/∂T2)p Backward =
-5.9641934058 x 10-06
nilai (∂E/∂T)p Central = -6.4566056722 x 10-04 nilai (∂2E/∂T2)p Central =
-5.9606634295 x 10-06
kemudian dengan cara Central dihasilkan
∆S = -62.2966∆Cp = -171.3842
Sedangkan secara analitik menghasilkan harga yang hampir sama yaitu
∆S = -62.297
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
∆Cp = -171.4 (Alberty, 1987 : 259).
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
PROGRAM 3 DIFERENSIASI NUMERIK DAN GRAFIK FUNGSI
Tempatkan komponen-komponen berikut ini pada form :
Objek Properti Nilai propertiStaticText1 Caption DIFERENSIASI NUMERIKStaticText2 Caption InputStaticText3 Caption OutputLabel1 Caption T CelcLabel2 Caption E(t)Label3 Caption dEfLabel4 Caption d2EfLabel5 Caption dEbLabel6 Caption d2EbLabel7 Caption dEcLabel8 Caption d2EcLabel9 Caption dSLabel10 Caption dCpEdit1 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)Button1 Caption HitungButton2 Caption UlangButton3 Caption GrafikButton4 Caption Keluar
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
RadioButton1 Caption GarisRadioButton2 Caption BarChart1 Series1 Pilih : Line
Titles Ketik : GRAFIK FUNGSIBagian foot, ketik : X
Axis Bagian title, ketik : YPanel Aktifkan gradient, pilih warna yang disukai
Tuliskan kode kejadian komponen pada jendela unit editor :
unit uderiv;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series;
type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Edit7: TEdit; Edit8: TEdit; Edit9: TEdit; Edit10: TEdit; StaticText1: TStaticText; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Chart1: TChart; Series1: TLineSeries; RadioButton1: TRadioButton; RadioButton2: TRadioButton; Series2: TAreaSeries; StaticText2: TStaticText;
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
StaticText3: TStaticText; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure RadioButton1Click(Sender: TObject); procedure RadioButton2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
Const n = 1; F = 96485; dt = 0.1;Var tc,Tk,dS,dCp : real; Form1: TForm1; i : integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
Function E(tc:real):real; begin E := 0.23659-4.8564e-4*tc-3.4205e-6*tc*tc+5.869e-9*tc*tc*tc; end;
Function dEf(tc:real):real; begin dEf := (E(tc+dt)-E(tc))/dt; end;
Function d2Ef(tc:real):real; begin d2Ef := (dEf(tc+dt)-dEf(tc))/dt; end;
Function dEb(tc:real):real; begin dEb := (E(tc)-E(tc-dt))/dt; end;
Function d2Eb(tc:real):real; begin d2Eb := (dEb(tc)-dEb(tc-dt))/dt; end;
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
Function dEc(tc:real):real; begin dEc := (E(tc+dt)-E(tc-dt))/(2*dt); end;
Function d2Ec(tc:real):real; begin d2Ec := (dEc(tc+dt)-dEc(tc-dt))/(2*dt); end;
begin if edit1.Text =' ' then messagedlg('Data belum diisi',mtError,[mbok],0) else begin
tc := strtofloat(edit1.Text); dS := n*F*dEc(tc);
Tk := tc + 273;dCp := n*F*Tk*d2Ec(tc);
edit2.Text := floattostr(E(tc)); edit3.Text := floattostr(dEf(tc)); edit4.Text := floattostr(d2Ef(tc)); edit5.Text := floattostr(dEb(tc)); edit6.Text := floattostr(d2Eb(tc)); edit7.Text := floattostr(dEc(tc)); edit8.Text := floattostr(d2Ec(tc)); edit9.Text := floattostr(dS); edit10.Text := floattostr(dCp); edit1.SetFocus;
end;end;
procedure TForm1.Button2Click(Sender: TObject);begin edit1.Text := ' '; edit2.Text := ' '; edit3.Text := ' '; edit4.Text := ' '; edit5.Text := ' '; edit6.Text := ' '; edit7.Text := ' '; edit8.Text := ' '; edit9.Text := ' '; edit10.Text := ' '; edit1.SetFocus;end;
procedure TForm1.Button4Click(Sender: TObject);begin if messageDlg ('Yakin akan keluar?',mtConfirmation,mbOkCancel,0) = mrOk then Application.Terminate;
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
end;
procedure TForm1.Button3Click(Sender: TObject);var i : integer;
Function Ei(i:integer):real; begin Ei := 0.23659-4.8564e-4*i-3.4205e-6*i*i+5.869e-9*i*i*i; end;
begin series1.Clear; series2.Clear; if edit1.Text =' ' then messagedlg('Data belum diisi',mtError,[mbok],0) else begin for i := 1 to 2*strtoint(edit1.text) do if radiobutton1.Checked then begin series1.add(Ei(i)) end else if radiobutton2.Checked then begin series2.add(Ei(i)); end; end;end;procedure TForm1.RadioButton1Click(Sender: TObject);begin radiobutton1.checked:=true; radiobutton2.checked:=false;end;
procedure TForm1.RadioButton2Click(Sender: TObject);begin radiobutton2.checked:=true; radiobutton1.checked:=false;end;
end.
Hasil Running :
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
AKAR PERSAMAAN
Suatu persamaan linier sederhana atau persamaan kuadratik dapat dengan mudah
diselesaikan secara analitik. Begitu pula persamaan aljabar derajat 3 atau 4 mungkin dapat
diselesaikan secara analitik, hanya saja diperlukan rumus yang kompleks. Untuk
persamaan yang kompleks lebih disukai penyelesaiannya menggunakan metode numerik.
Persamaan berikut tidak dapat diselesaikan dengan mudah secara analitik
0119354 23456 =+−−+−+ xxxxxxbegitu pula persamaan berikut ini
xx sin2 =Beberapa tipe persamaan di bawah ini dapat diselesaikan menggunakan metode numerik
Persamaan aljabar 011783 247 =+−−+ xxxxPersamaan transendental 2210 xex =Fungsi implisit 32222 )( xzzxe zx +=+−
Untuk penyelesaian maka tiga tipe persamaan tersebut ditransformasi dalam bentuk ternormalisasi
0)(
010)(
0)(
32222
22
)( =−−=
=−=
=
+− xzzxexf
exxf
xf
zx
x
Ungkapan fungsi implisit dianggap sebagai suatu fungsi f(x); z ditentukan sebagai suatu parameter dengan harga yang ditentukan. Kemudian ungkapan tersebut hanyalah suatu fungsi terhadap x. Fungsi dapat memiliki satu atau lebih harga nol atau tidak sama sekali.Problem umum diperlakukan dengan transformasi sederhana untuk menentukan akar-akar fungsi y = f(x).
Metode NewtonMetode Newton (beberapa buku menyebut metode Newton-Raphson) untuk penentuan akar mungkin metode yang paling dikenal dalam mencari harga nol suatu fungsi. Agar lebih mudah dipahami metode ini dapat dijelaskan dengan gambar berikut.
f(x) Y
f(xi)
f(xi+1)akar f(xi+2)
f(xi+3)
Xi+3 Xi+2 Xi+1 Xi X
Gambar 1 Ekstrapolasi metode Newton dengan tangent lokal untuk mencari estimasi akar fungsi berikutnya
Diasumsikan titik nol berharga Xi sebagai titik awal. Pertama, harga fungsi yang bersesuaian f(xi) dihitung. Kemudian harga tangent pada posisi tersebut sampai grafik fungsi dihitung dan titik interseksi tangent
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
ini dengan sumbu x ditentukan. Titik interseksi ini ditentukan sebagai harga x baru yaitu Xi+1 dalam mencari harga nol dan penghitungan diulangi dengan akar estimasi baru ini seperti hitungan sebelumnya.
Derivatif df(xi) / dx pada posisi xi sama dengan tangent di xi sampai grafik fungsi. Jika segitiga antara f(xi), xi dan xi+1 diperhatikan maka diperoleh
1
' )()()(
+−==
ii
iii xx
xfxfx
dx
df
Suatu hasil transformasi sederhana dalam instruksi untuk prosedur iterasi metode Newton adalah
)(
)(
)(
)(
'1
'1
i
iii
i
iii
xf
xfxx
xf
xfxx
−=
=−
+
+
Rumus menunjukkan bahwa untuk setiap iterasi harga fungsi f(xi) dan f’(xi) diperlukan.Agar lebih jelas algortima metode Newton perhatikan diagram alir berikut
Gambar 2 Diagram alir untuk metode Newton
Metode Secant
Pada intinya metode Secant untuk menyelesaikan f (x) mencoba mengatasi kelemahan metode Newton dengan menggantikan garis singgung (tangent) f ‘(x) kurva y = f (x) pada (xr, f (x)) dengan garis potong (secant) melalui titik pada kurva di xi-1 dan xi. Karena itu derivativ digantikan dengan rasio selisih tertentu ∆y/∆x yang seringnya lebih mudah untuk dihitung. Rasio ∆y/∆x didefinisikan sebagai
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
apakah|X
baru - X | < ε
X = Xbaru
Output akar f (x)
Stop
no
yes
input harga awal x
menghitung f(x) dan f’(x)
Xbaru
= X –[f(x)/ f’(x)]
Start
ix
ixx
ixf
ixfy
−−
=∆
−−
=∆
1
1)()(
dan estimasi xi+1 baru dihitung dari bentuk modifikasi persamaan metode Newton sebagai berikut
y
xxfxx iii ∆
∆−=+ )(1
)(
)(
)(
)()(
)()(
)()(
1
1
1
11
11
11
ii
xfi
xf
iiii
ii
xfi
xf
iiii
ixf
ixf
iiiii
xfxx
xx
xfxx
xx
xxxfxx
−
−
−−
−
−−
−
−−
−=
−−=
−−=
+
+
+
Salah satu kelemahannya adalah membutuhkan 2 titik awal yaitu (xo,f(xo)) dan (x1,f(x1)) untuk memberi titik awal rasio ∆y/∆x.
Contoh problem kimia
1. Hitunglah volume spesifik dari pemanasan uap pada 100 atm dan 350 0C menggunakan persamaan keadaan Van der Waals
RTbVV
ap =−+ ))((
2
dimana
)./3(8
2)./(2)3(64
2227
molkgmcpcRT
b
molkgatmmcpcTR
a
=
=
R = 8.314 (Joule/mol.K) Tc = 647,3 pc = 218,0 T = 623,0 p = 100
Jawaban
Penyusunan kembali persamaan dalam bentuk polinomial0)()( 23 =−++−= abaVVRTbppVVf
Turunan pertama dari persamaan ini0)(23)(' 2 =++−= aVRTbppVVf
untuk mengurangi iterasi, perkiraan awal dibuat menggunakan hukum gas ideal
pRTV =0 = 51,7962
f (51,796) = 100 (51,796)3 − (3,0858 x 100 + 8,314 x 623) x (51,796)2 + 56047,7975 x 51,796 − 172952,8399
f ‘ (51,796) = 3 x 100 (51,796)2 − 2 x (3,0858 x 100 + 8,314 x 623) x 51,796 + 56047,7975Dengan menggunakan metode Newton (Newton-Raphson) perkiraan selanjutnya didasarkan pada slope fungsi ini yang diilustrasikan sebagai
)(')(
1 nVfnVf
nn VV −=+
Hasil akhir diperoleh volume spesifik sebesar 42,7063 m3/kg
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
2. Suatu elektrolit lemah K2A berdisosiasi menjadi 3 ionK2A === 2K+ + A2-
Konstanta kesetimbangannya Kc dapat dituliskan sebagai berikut
αα
−= 1
234 0ccK
Hitung derajat disosiasi α jika diketahui Kc = 0.01 dan co = 0,001 !
Jawaban
Penyusunan ulang persamaan
0324)(
0)1(234)(
1
234
0
0
0
=−+=
=−−=
−=
cKcKcf
cKcf
ccK
ααα
αααα
α
Turunan pertama dari persamaan ini
012)(' 220 =+= cKcf αα
Perkiraan awal (αo) dapat diambil harga nol, kemudian harga f (α) dan f’ (α) dihitung dan dimasukkan dalam rumus iterasi Newton (Newton-Raphson)
)(')(
1 nfnf
nn αααα −=+
Hasil akhir dengan ketelitian 0,000001 diperoleh harga derajat disosiasi sebesar 0,9996004792.
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
PROGRAM 4 AKAR PERSAMAAN NUMERIK DAN GRAFIK FUNGSI
Tempatkan komponen-komponen pada form dan ubahlah propertiesnya sebagai berikut :
Objek Properti Nilai propertiStaticText1 Caption AKAR PERSAMAANStaticText2 Caption InputStaticText3 Caption Output Label1 Caption T kritisLabel2 Caption P kritisLabel3 Caption TekananLabel4 Caption Temperatur Label5 Caption V estimasiLabel6 Caption AwalLabel7 Caption AkhirEdit1 Text (kosong)Edit2 Text (kosong)Edit3 Text (kosong)Edit4 Text (kosong)Edit5 Text (kosong)Button1 Caption, Name HitungButton2 Caption, Name GrafikButton3 Caption, Name UlangButton4 Caption, Name Keluar
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
Memo1 Lines (kosong)Memo2 Lines (kosong)Chart1 Series1 Pilih : Area
Titles Ketik : AKAR PERSAMAANBagian foot, ketik : X
Axis Bagian title, ketik : YPanel Aktifkan gradient, pilih warna yang
disukai
unit uakar;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series;
type TForm1 = class(TForm) StaticText1: TStaticText; StaticText2: TStaticText; StaticText3: TStaticText; StaticText4: TStaticText; StaticText5: TStaticText; StaticText6: TStaticText; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; StaticText7: TStaticText; StaticText8: TStaticText; Edit5: TEdit; Memo1: TMemo; Chart1: TChart; Hitung: TButton; Grafik: TButton; Keluar: TButton; Memo2: TMemo; StaticText9: TStaticText; StaticText10: TStaticText; Ulang: TButton; Series1: TAreaSeries; procedure HitungClick(Sender: TObject); procedure KeluarClick(Sender: TObject); procedure GrafikClick(Sender: TObject); procedure UlangClick(Sender: TObject); private { Private declarations } public
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
{ Public declarations } end;
Const dx = 0.001; presisi = 1e-5; {epsilon} R = 8.314;
Var p, T, pc, Tc, a, b, awal, akhir,Va,Vb : extended; n : integer;
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.HitungClick(Sender: TObject); function f(x : extended) : extended; begin f :=(p*x*x*x)-((b*p+R*T)*x*x)+(a*x)-(a*b);
end;
Function df(x : extended) : extended;begin df := (f(x+dx) - f(x-dx))/(2*dx);end;
Procedure Hitung_abVa; begin a := (27*sqr(R)*sqr(Tc))/(64*pc); b := (R*Tc)/(8*pc); Va := (R*T)/p; end;
Procedure Newton(var Va,Vb : extended); begin Vb := Va - (f(Va)/df(Va)); awal := Va; akhir := Vb; Va := Vb; end;
begin if edit1.Text =' ' then messagedlg('Data belum diisi',mtError,[mbok],0) else begin Tc := strtofloat(edit1.Text); pc := strtofloat(edit2.Text); p := strtofloat(edit3.Text); T := strtofloat(edit4.Text);
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
Hitung_abVa; edit5.Text := floattostr(Va); n := 1; repeat Newton(Va,Vb);
Memo1.Lines.Add(floattostr(awal)); Memo2.Lines.Add(floattostr(akhir)); inc(n,1); until abs(akhir-awal) < presisi; edit1.SetFocus; end; edit1.SetFocus;end;
procedure TForm1.KeluarClick(Sender: TObject);begin Application.Terminate;end;
procedure TForm1.GrafikClick(Sender: TObject);var n : integer; function fn(n : integer) : extended; begin fn :=(p*n*n*n)-((b*p+R*T)*n*n)+(a*n)-(a*b);
end;begin series1.Clear;
if edit1.Text ='' then messagedlg('Data belum diisi',mtError,[mbok],0) else begin for n := -100 to 100 do begin series1.add(fn(n)); end; end; edit1.SetFocus;end;
procedure TForm1.UlangClick(Sender: TObject);begin edit1.Text := ' '; edit2.Text := ' '; edit3.Text := ' '; edit4.Text := ' '; edit5.Text := ' '; memo1.Clear; memo2.Clear; edit1.SetFocus;
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
end;
end.
Hasil Running
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
INTEGRASI NUMERIK
Dalam kimia sering dihadapkan pada problem suatu fungsi f (x) yang merepresentasikan laju perubahan suatu kuantitas terhadap suatu variabel.
Suatu bentuk fungsi
dxxdFxf )()( =
yang merupakan proses kerja balik dari derivativ f (x) menjadi fungsi F (x) dikenal sebagai integrasi.
Untuk suatu bentuk fungsi sederhana mungkin dapat diselesaikan dengan cara analitik, tetapi fakta empirik maupun teroretik dalam problem bidang kimia, khususnya kimia fisika teoretis, seringkali tidak memiliki integral analitik. Karena itu alternatif terbaik adalah menggunakan cara integrasi numerik.
Secara prinsip grafik menghitung integrasi suatu fungsi berarti menghitung luas di bawah kurva fungsi f (x) diantara titik awal sampai titik akhir. Konsekuensi dari prinsip sederhana ini maka banyak cara untuk menghitung luas di bawah kurva. Untuk selanjutnya akan dibahas beberapa cara integrasi yang dikenal.
Metode Euler (Aturan Trapezoid)Prinsip metode integrasi Euler adalah menghitung luas di bawah kurva dengan rumus
trapesium
f(X4) f(X3)
f(X2) f(x)
f(X1) f(Xo)
Xo X1 X2 X3 X4
Gambar 4.3 Grafik fungsi metode Euler
Sebagai contoh pada batas X0 sampai X4 dibagi menjadi 4 bagian yang besarnya sama, ∆X.
Tampak pada grafik
∆X = X1 – X0 = X2 – X1 = X3 – X2 = X4 – X3
Pada grafik terlihat ada luas bagian atas (La) dan luas bagian bawah (Lb), masing-masing
dihitung secara terpisah.
xxfxxfxxfxxfL
xxfxxfxxfxxfL
a
ob
∆+∆+∆+∆=∆+∆+∆+∆=
).().().().(...................
).().().().(
4321
321
Harga luas yang benar didekati dengan menghitung rata-rata La dan Lb.
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
xxfxfxfL
LLuas
xfoxf
aLbL
∆
++++=
=≈ +
.)()()(2
)4(3212
)(
2)(
atau
( ).)()(2)(2)(2)( 43212xfxfxfxfxfL o
x ++++= ∆
Rumus untuk n bagian
( ).)()(2.....)(2)(2)(2)( 13212 nnox xfxfxfxfxfxfL ++++++= −
∆
Metode Simpson (Aturan Parabola)Prinsip
metode integrasi Euler adalah menghitung luas suatu trapezoid sebagai suatu penaksiran integral atas suatu subinterval. Dalam metode Simpson dua subinterval digabung, dan luas tidak ditaksir dengan 2 trapezoid tetapi dengan luas di bawah parabola.
f (x)
Xo X1 X2 X3 X4 X5X6X7 X8X9 Xn
Gambar 4.4 Grafik fungsi integral antara Xo dan Xn menggunakan metode Simpson
Dalam contoh ini interval integrasi (Xo, Xn) dibagi menjadi 10 subinterval. Panjang ∆X
subinterval adalah
noxnx
x−
=∆ n = jumlah subinterval
Dalam kasus kurva dalam interval (Xo, X2) adalah grafik parabola, maka luas di bawah kurva
dapat diungkapkan sebagai berikut
))()(4)(( 213xfxfxfL o
x ++= ∆
Jumlahkan semua subinterval maka diperoleh rumus berikut
))()(4)(2)(4)(2)(4)(2)(4)(2)(4)(( 109876543213xfxfxfxfxfxfxfxfxfxfxfL o
x ++++++++++= ∆
Jika integral tertentu dengan interval (Xo, Xn) untuk suatu fungsi yang berubah-ubah tajam maka metode Simpson memerlukan interval yang dibagi menjadi 2n subinterval sehingga diperoleh rumus
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
∑∑ +++===
−∆ n
ii
n
iinon
xn xfxfxfxfL
12
112262 )()(4)()(
Contoh problem kimia 1. Kapasitas panas molar pada volume konstan untuk O2 (g) diberikan sebagai berikut
273 10.55,4210.61,1323,17 TTCv−− −+= (J/K-1 mol-1)
Berapakah perubahan energi dalam jika satu mol oksigen dipanaskan dari 298 K sampai 500 K ?
Jawaban
Secara analitik :
4437500298 =∫=∆ dTCU v (J/mol)
Secara numerik menggunakan metode Euler :
∆U = 4439 (J/mol)
Secara numerik menggunakan metode Simpson :
∆U = 4437,6413 (J/mol)
Tampak hitungan menggunakan metode Simpson lebih mendekati hitungan eksak secara analitik daripada hitungan menggunakan metode Euler.
2. Periksalah harga fungsi error untuk x = 0 sampai x = 1 dengan interval 0,1 dengan menggunakan metode Euler dan Simpson. Bandingkan dengan harga pada tabel di buku teks (Castellan, 1983 : 65) !Rumus :
∫= −xx dxexerf
0
22)(
π
Jawaban
Contoh hasil komputasi metode Euler :
x Jumlah iterasi
Step Harga erf(x) Erf(x) tabel
0,1 16000 0,00000625 0,1124698982 0,1120,2 32000 0,00000625 0,2227093651 0,2230,3 32000 0,000009375 0,3286364275 0,329
Contoh hasil komputasi metode Simpson :
x Jumlah iterasi
Step Harga erf(x) Erf(x) tabel
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
0,1 4 0,025 0,1124629189 0,1120,2 4 0,025 0,2227026774 0,2230,3 4 0,075 0,3286273768 0,329
Perhatikan ! Sangat tajam sekali perbedaan kecepatan dan ketepatan metode Euler dengan Simpson.
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
PROGRAM 5 INTEGRASI NUMERIK
Tempatkan komponen-komponen pada form seperti berikut ini kemudian ubah nilai propertinya.
Objek Properti Nilai propertiStaticText1 Caption INTEGRASI NUMERIKStaticText2 Caption BATAS AWALStaticText3 Caption BATAS AKLHIRStaticText4 Caption JUMLAH ITERASIStaticText5 Caption BAGIANStaticText6 Caption HASILButton1 Caption HITUNGButton2 Caption GRAFIKButton3 Caption ULANG Button4 Caption KELUAREdit1 Text (kosong)Edit2 Text (kosong)Edit3 Text (kosong)Memo1 Lines (kosong)Memo2 Lines (kosong)Chart Series1 Pilih : Area
Titles Ketik : GRAFIK INTEGRASI NUMERIKBagian foot, ketik : X
Axis Bagian title, ketik : YPanel Aktifkan gradient, pilih warna yang
disukai
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
Tuliskan kode kejadian untuk masing-masing komponen seperti berikut pada jendela unit editor :
unit uintegrasi;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series, Buttons;
type TForm1 = class(TForm) StaticText1: TStaticText; StaticText2: TStaticText; StaticText3: TStaticText; StaticText4: TStaticText; StaticText5: TStaticText; StaticText6: TStaticText; Memo1: TMemo; Memo2: TMemo; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Chart1: TChart; Series1: TLineSeries; Hitung: TBitBtn; Grafik: TBitBtn; Ulang: TButton; Keluar: TButton; procedure HitungClick(Sender: TObject); procedure UlangClick(Sender: TObject); procedure GrafikClick(Sender: TObject); procedure KeluarClick(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; t0, tf, h, sum : real; N : integer;
implementation
{$R *.dfm}
procedure TForm1.HitungClick(Sender: TObject);
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
function y(x : real):real; begin y := 17.23 + 13.61E-3*x - 42.55E-7*x*x; end;
procedure Integrasi_Euler; var h, x : real; i : integer;
begin sum := 0; h := (tf-t0)/N; x := t0; sum := sum + y(x)/2;
for i := 1 to N-1 do begin x := t0 + i*h; sum := sum + y(x); end;
x := tf; sum := sum + y(x)/2; sum := sum*h;
Memo1.Lines.Add(Inttostr(N)); Memo2.Lines.Add(floattostr(sum));
end;
begin Memo1.Clear; Memo2.Clear; Series1.Clear; Edit1.SetFocus;
t0:= strtofloat(edit1.Text); tf:= strtofloat(edit2.Text); N:= strtoint(edit3.Text); Integrasi_Euler; Edit1.SetFocus;end;
procedure TForm1.UlangClick(Sender: TObject);begin Memo1.Clear; Memo2.Clear; Series1.Clear; Edit1.Clear; Edit2.Clear; Edit3.Clear; Edit1.SetFocus;
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
end;
procedure TForm1.GrafikClick(Sender: TObject);var i : integer;
function yi(i : integer) : extended; begin yi := 17.23 + 13.61E-3*i - 42.55E-7*i*i;
end;
begin series1.Clear;
if edit1.Text ='' then messagedlg('Data belum diisi',mtError,[mbok],0) else begin for i := 0 to N do begin series1.add(yi(i)); end; end; edit1.SetFocus;end;
procedure TForm1.KeluarClick(Sender: TObject);begin Application.Terminate;end;
end.
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
4.5PENYELESAIAN NUMERIK PERSAMAAN DIFERENSIAL ORDINER
Banyak penomena eksperimental dalam kimia dapat digambarkan dengan persamaan diferensial. Contohnya dalam aliran aliran panas, ekspansi suatu gas, kristalisasi suatu padatan dan tentunya reaksi kimia. Persamaan diferensialnya berbentuk
),...,,,,( )1()2()1()( −== nnndx
ynd yyyyxfy
Dalam problem kinetika kimia misalnya reaksi order pertama konsekutif
k1 k2
A B C
Untuk penyelesainnya maka diubah dalam bentuk persamaan diferensial
][
][][
][
2][
21][
1][
Bk
BkAk
Ak
dtCd
dtBd
dtAd
=
−=
−=
Persamaan diferensial dapat diselesaikan secara analitik sebagai berikut
−+=
−=
=
−−−
−−−
−
)(1][][
)(][
][][
21
12)21(
1
21)12(
][1
1
tktkkko
tktkkkoAk
tko
ekekAC
eeB
eAA
Untuk mendapatkan penyelesaian seperti ini memerlukan kemampuan manipulasi matematika yang tinggi. Penyelesaian secara analitik sangat sulit dipakai untuk memecahkan problem reaksi kimia yang kompleks, padahal faktanya sebagian besar reaksi kimia merupakan reaksi kompleks. Karena itulah sangat baik dipakai metode numerik untuk menyelesaikan persamaan diferensial yang kompleks.
4.5.1 Metode EulerPerhatik
an suatu persamaan diferensial ).( yxfdx
dy = dan harga awal y (a) = ya. Dalam bentuk
umum sisi sebelah kanan persamaan diferensial adalah fungsi 2 variabel yaitu variabel bebas x dan variabel tergantung y. Untuk menyelesaikan persamaan diferensial ini berarti harus dicari suatu fungsi y = g(x) yang memenuhi persamaan diferensial dan kondisi awal sekaligus
Sebagai contoh :
yxdx
dy.= dengan harga awal y(0) = 1
Penyelesaiannya adalah : y = g(x) = 2
2
1x
e
Apabila dikehendaki penyelesaian untuk x = 1 maka dengan menggunakan fungsi g(x) untuk menghitung g(1) akan diperoleh y = 1,648721. Hasil ini diperoleh menggunakan suatu fungsi analitik karena persamaan diferensial di atas termasuk sederhana. Untuk penyelesaian persamaan diferensial komplek maka umumnya menggunakan metode numerik.
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
Langkah pertama untuk memahami metode numerik Euler adalah penaksiran persamaan diferensial dengan suatu persamaan perbedaan
dari
).(' yxfdx
dyy ==
diperole
h
),( yxfxy ≈∆
∆
dengan susun ulang persamaan diferensial di atas maka diperoleh rumus
xyxfy ∆≈∆ ).,(
Dalam bentuk iterasi diubah menjadi
),(.1 iiii yxfhyy +=+
dimana h = ∆x = ukuran step. Hitungan numerik berawal pada xo dimana y = yo dan berlanjut secara bertahap seperti contoh di bawah ini
harga awal yo xo
step 1
y1 = yo + ∆x . f (xo,yo) x1 = xo + ∆x
step 2
y2 = y1 + ∆x . f (x1,y1) x2 = x1 + ∆x
step 3
y3 = y2 + ∆x . f (x2,y2) x3 = x2 + ∆x
dan seterusnya.
Kesalahan hitung akan semakin kecil apabila harga ∆x semakin kecil. Dalam berbagai teks diperoleh bukti bahwa kesalahan hitung proporsional dengan ukuran step kesalahan ∼ ∆xSeperti halnya prosedur Euler dalam integrasi maka tidak ada kriteria terprogram untuk terminasi program dan perulangan tanpa batas digunakan untuk menghitung lagi dan lagi sampai didapat hasil yang lebih tepat melalui penambahan yang kecil.
Metode Euler menentukan penaksiran yi+1 ke xi+1 dengan menggunakan garis slope f (xi,yi) dari titik (xi,yi) hal ini dapat mengarah kepada kesalahan yang besar jika ukuran step relatif terlalu besar. Satu cara untuk memperbaiki metode Euler sederhana adalah menemukan cara terbaik
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
untuk memilih arah darimana suatu penyelesaian penaksiran bergerak dari suatu titik (xi,yi). Suatu metode satu tahap mempunyai bentuk
);,(1 hyxhyy
yy
xx
iiii
o
o
Φ+===
+
Fungsi Φ(xi,yi;h) memprediksi arah dimana penyelesaian berawal pada titik (xi,yi).Sebagai
ganti penaksiran Euler sederhana ),(.1 iiii yxfhyy +=+ sebagai penaksiran ke xi+1 maka kita dapat meletakkan satu titik lain dekat lintasan xi dan menentukan estimasi slope Φ menjadi rata-rata slope pada (xi,yi) dan (xi+1,yi+1). Dengan cara ini diperoleh metode Euler Modifikasi
+=
+==
==
++
+
221
1
112
1
),(
),(
mmii
ii
ii
o
o
hyy
hmyxfm
yxfm
yy
xx
atau
( )211 2mm
hyy ii ++=+
Dalam Euler Modifikasi ada 2 step yaitu step prediktor dan korektorStep
prediktor : yi+1 = yi + h.m1
Step korektor :
( )211 2mm
hyy ii ++=+
Jika prosedur prediktor-korektor sederhana ini digunakan maka kesalahan hitungan akan berkurang dengan berkurangnya ukuran step h, perbaikan ini tidak hanya proporisonal terhadap h tetapi juga kesalahan adalah fungsi h3.
kesalahan ∼ h3
4.5.2 Metode Runge-Kutta Orde 4Metode numerik Runge-Kutta Orde 4 (RK4), disebut juga Runge-Kutta-Nystroem
(RKN), sering dipakai untuk menyelesaikan problem-problem sains, akan dijelaskan di sini tanpa bukti-bukti matematika. Metode RK4 ini reliabel, baik dan tidak terlalu sulit untuk diprogram. Metode RK4 ini termasuk self-starting (dapat memulai sendiri tanpa bantuan metode lain), dan manfaat lain, berguna untuk untuk memulai metode numerik lain yang lebih komples dan canggih.
Metode RK4 mirip dengan metode Euler tetapi dengan besar kesalahan yang makin
kecil
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
kesalaha
n ∼ h4
Algoritma (alur pikir) RK4 membutuhkan 4 besaran yaitu m1, m2, m3, dan m4. Perhatikan suatu persamaan dife-rensial berikut
),(' yxfydx
dy ==
Penghitungan titik penyelesaian selanjutnya (xi+1,yi+1), dimulai dengan (xi,yi) dikerjakan
menggunakan skema berikut
)432221.(6
1
)3,(.4
)2
2,
2(.3
)2
1,
2(.2
),(.1
1
1
mmmmyy
hxx
myhxfhm
my
hxfhm
my
hxfhm
yxfhm
ii
ii
ii
ii
ii
ii
++++=
+=++=
++=
++=
=
+
+
Contoh problem kimia
1. Konstanta dekomposisi kd suatu zat A selama suatu dekomposisi radiolitik diasumsikan proporsional dengan intensi-tas radiasi D ( kd = koD). Persamaan diferensialnya
].[.].[][ ADkoAkddtAd −=−=
Intensitas radiasi D berkurang sesuai dengan hukum waktu eksponensial
D = Do.e−kt
Harga parameternya diasumsikan
k = 0,001 s−1
Do.ko = 0,001 s−1
Jika harga ini digunakan akan diperoleh persamaan diferensial berikut
].[.001,0 .001,0][ Ae tdtAd −−=
Persamaan diferensial ini dapat diselesaikan menggunakan metode Euler atau Runge-Kutta Orde 4. Hasil hitungan
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
menggunakan 2 metode itu pada keadaan to = 0, takhir = 1, jumlah iterasi = 100, dan
[A]o = 0,1 sebagai berikut
Euler : 0,0999000989Euler Modifikasi : 0,0999000999Runge-Kutta : 0,0999000999
Penyelesaian analitik problem ini sebagai berikut
( )( )
−−
−
=
=
−=
−
−
ktekDoko
ktkDoko
oA
e
ktkDoko
A
A
oA
eA
oA
1..
.
10
][
1.
.
][
10][
][
1.][
][log
Hasil hitungan secara analitik adalah 0,09977012120851. Jika dibandingkan dengan hasil
metode Euler maka diperoleh selisih sebesar 0,000129977691487, atau % kesalahan
sebesar 0,1302771710741 %.
4.5.3 Metode Euler dan Runge-Kutta Untuk Sistem Persamaan
Diferensial
Mekanisme reaksi sederhana berikut diasumsikan untuk aksi enzim
k1E + S → ES
k2E + S → ES
k3ES
→ P + E
Berdasarkan mekanisme reaksi tersebut dapat diturunkan suatu sistem persamaan diferensial sebagai berikut
].[3].[2]].[.[1][
].[3].[2]].[.[1][
ESkESkSEkdt
ESd
ESkESkSEkdt
Ed
−−+=
++−=
].[3][
].[2]].[.[1][
ESkdt
Pd
ESkSEkdt
Sd
+=
+−=
Jika sistem ini diperlakukan secara analitik maka akan diperoleh kinetika Michaelis-Menten.Contoh lain sistem persamaan diferensial adalah problem kinetika kimia misalnya
reaksi order pertama konsekutifk1 k2
A B C
Untuk penyelesainnya maka diubah dalam bentuk persamaan diferensial
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
][
][][
][
2][
21][
1][
Bk
BkAk
Ak
dtCd
dtBd
dtAd
=
−=
−=
Sistem persamaan diferensial ini dapat diselesaikan menggunakan metode Euler, Euler
Modifikasi maupun Runge-Kutta orde 4.
Contoh
mekanisme reaksi lain yang lebih kompleks adalah
k1=1A M + M
k2=10A + M B + C
k3=4C M + D
k4=20M + M E + C
Dari mekanisme ini dapat diturunkan sistem persamaan diferensial sebagai berikut
]][[20
][4
]][[20][4]][[10
]][[10
]][[40][4]][[10][2
]][[10][
][
][
][
][
][
][
MM
C
MMCMA
MA
MMCMAA
MAA
dtEd
dtDd
dtCd
dtBd
dtMd
dtAd
+=
+=
+−+=
+=
−+−+=
−−=
Banyaknya fungsi yang dimiliki oleh metode numerik dalam program komputer adalah sebanyak persamaan diferensial yang terbentuk dari mekanisme reaksi.
Untuk suatu sistem mekanisme reaksi yang sederhana atau agak kompleks mungkin dapat diselesaikan dengan metode numerik Euler dan modifikasinya ataupun Runge-Kutta orde 4, tetapi untuk suatu sistem yang sangat kompleks, yang melibatkan banyak tahapan dasar dalam mekanisme reaksinya, dan harga konstanta laju reaksi yang sangat besar, biasa disebut sebagai “stiff equations” (persamaan kaku), maka metode numerik biasa tidak dapat digunakan untuk menyelesaikan secara efektif dan efisien, bahkan mungkin akan menghasilkan penyimpangan yang besar. Untuk kasus persamaan diferensial yang kompleksitasnya sangat tinggi maka digunakan metode numerik khusus untuk “stiff equations”. Dikenal istilah “metode khusus untuk kasus khusus”.
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
PROGRAM 6PENYELESAIAN SISTEM PERSAMAAN DIFERENSIAL
Tempatkan komponen-komponen pada form berikut :
Objek Properti Nilai propertiSpeedbutton1 Caption REAKSI KONSEKUTIF: A ---> B ---> CSpeedbutton2 Caption KONSENTRASI AWALSpeedbutton3 Caption KONSTANTA LAJU REAKSISpeedbutton4 Caption SUMBU XSpeedbutton5 Caption ZATSpeedbutton6 Caption HITUNGSpeedbutton7 Caption KELUARLabel1 Caption ZAT ALabel2 Caption ZAT BLabel3 Caption ZAT CLabel4 Caption k-1Label5 Caption k-2Edit1 Text (kosong)Edit2 Text (kosong)Edit3 Text (kosong)Edit4 Text (kosong)Edit5 Text (kosong)Edit6 Text (kosong)Edit7 Text (kosong)Panel1 Caption (kosong)Chart1 Series1 Pilih : Line
Titles Ketik : GRAFIK INTEGRASI NUMERIKBagian foot, ketik : X
Axis Bagian title, ketik : YPanel Aktifkan gradient, pilih warna yang disukai
Panel2 Caption (kosong)Memo1 Lines (kosong)
Scroolbars ssBothMemo2 Lines (kosong)
Scroolbars ssBothGroupBox1 Caption DisplayRadiobutton1 Caption GrafikRadiobutton2 Caption DigitalRadiobutton3 Caption EULERRadiobutton4 Caption RUNGE-KUTTA4Bevel1 Shape bsBoxBevel2 Shape bsTopLineBevel3 Shape bsBox
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
Tuliskan kode kejadian pada unit editor seperti dibawah ini :
unit Ueuler2;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, StdCtrls, ExtCtrls, TeEngine, Series, TeeProcs, Chart;
type TForm1 = class(TForm) SpeedButton1: TSpeedButton; Label1: TLabel; Edit1: TEdit; Label2: TLabel; Edit2: TEdit; Label3: TLabel; Edit3: TEdit; SpeedButton2: TSpeedButton; SpeedButton3: TSpeedButton; Label4: TLabel; Edit4: TEdit; Label5: TLabel; Edit5: TEdit; SpeedButton4: TSpeedButton; Edit6: TEdit; SpeedButton5: TSpeedButton; Edit7: TEdit; Panel1: TPanel; Chart1: TChart; Series1: TLineSeries; Panel2: TPanel; Memo1: TMemo; Memo2: TMemo; GroupBox1: TGroupBox; RadioButton1: TRadioButton; RadioButton2: TRadioButton; Bevel1: TBevel; SpeedButton6: TSpeedButton; SpeedButton7: TSpeedButton; Bevel2: TBevel; RadioButton3: TRadioButton; RadioButton4: TRadioButton; Bevel3: TBevel; procedure SpeedButton6Click(Sender: TObject); procedure SpeedButton7Click(Sender: TObject); private { Private declarations }
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
public { Public declarations } end;
Const dim=3; plot=1e-10;
Type mat=array[1..dim] of real;
Var i,j,N,zat : integer; t,h,t0,tf,k1,k2,k3,k4,k5 : real; y,y0,yt,yEuler,m1,m2,m3,m4 : mat;
var Form1: TForm1;implementation
{$R *.dfm}
procedure TForm1.SpeedButton6Click(Sender: TObject);
Function fx(i:integer; t: real; y: mat): real; Begin Case i of 1: fx := -k1*y[1]; 2: fx := +k1*y[1]-k2*y[2]; 3: fx := +k2*y[2]; end; end;
Procedure Euler; var i: integer; Begin for i:= 1 to dim do m1[i]:= fx(i,t,y); for i:= 1 to dim do yEuler[i]:= y[i]+ (h*m1[i]); for i:= 1 to dim do m2[i]:= fx(i,t+h,yEuler); for i:= 1 to dim do y[i]:= y[i]+ 0.5*h*(m1[i]+m2[i]); for i:= 1 to dim do yt[i]:= y[i]+ j*plot;
if radiobutton1.Checked = true then begin Panel2.Visible := false; Panel1.Visible := true; Memo1.Visible := false; Memo2.Visible := false; Chart1.Visible := true; series1.Add(yt[zat]); end; if radiobutton2.Checked = true then begin
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
Panel1.Visible := false; Panel2.Visible := true; Series1.Clear; Chart1.Visible := false; Memo1.Visible := true; Memo2.Visible := true;
if j <= N/2 then Memo1.Lines.Add(' '+inttostr(j)+'-->'+floattostr(yt[zat])) else Memo2.Lines.Add(' '+inttostr(j)+'-->'+floattostr(yt[zat])) end; t:= t0 + j*h; end;
Procedure RungeKutta4; var i: integer; Begin for i:= 1 to dim do m1[i]:= fx(i,t,y); for i:= 1 to dim do yEuler[i]:= y[i]+ (h*m1[i]/2); for i:= 1 to dim do m2[i]:= fx(i,t+h/2,yEuler); for i:= 1 to dim do yEuler[i]:= y[i]+ (h*m2[i]/2); for i:= 1 to dim do m3[i]:= fx(i,t+h/2,yEuler); for i:= 1 to dim do yEuler[i]:= y[i]+ (h*m3[i]); for i:= 1 to dim do m4[i]:= fx(i,t+h,yEuler); for i:= 1 to dim do y[i]:= y[i]+ (h/6)*(m1[i]+2*m2[i]+2*m3[i]+m4[i]); for i:= 1 to dim do yt[i]:= y[i]+ j*plot;
if radiobutton1.Checked = true then begin Panel2.Visible := false; Panel1.Visible := true; Memo1.Visible := false; Memo2.Visible := false; Chart1.Visible := true; series1.Add(yt[zat]); end; if radiobutton2.Checked = true then begin Panel1.Visible := false; Panel2.Visible := true; Series1.Clear; Chart1.Visible := false; Memo1.Visible := true; Memo2.Visible := true;
if j <= N/2 then Memo1.Lines.Add(' '+inttostr(j)+'-->'+floattostr(yt[zat])) else Memo2.Lines.Add(' '+inttostr(j)+'-->'+floattostr(yt[zat]))
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
end; t:= t0 + j*h; end;
begin series1.Clear; Memo1.Clear; memo2.Clear; Edit7.SetFocus; zat:= strtoint(edit7.Text); N:= strtoint(edit6.Text);
t0:= 1; tf:= N; t := t0;
y0[1]:= strtofloat(Edit1.Text); y0[2]:= strtofloat(Edit2.Text); y0[3]:= strtofloat(Edit3.Text);
k1 := StrToFloat(Edit4.Text); k2 := StrToFloat(Edit5.Text);
y:= y0; h:= (tf-t0)/N;
for j := 1 to N do Begin if radiobutton3.Checked = true then Euler; if radiobutton4.Checked = true then RungeKutta4; end; Edit7.SetFocus;end;
procedure TForm1.SpeedButton7Click(Sender: TObject);begin Close;end;end.
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
Hasil Running untuk metode Euler dalam bentuk grafik
Hasil Running untuk metode Euler dalam bentuk digital
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1
Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes
1