145
Sebelum kita memulai Delphi, kita harus menginstalasi program Delphinya terlebih dahulu. Kita bisa menggunakan Delphi 5, 6, 7 atau 8. Sebenarnya Delphi versi berapapun tidak masalah, karena produk Borland ini selalu menjaga kompatibilitas antar versinya. Untuk menginstalasi Delphi cukup mudah, tinggal ikuti petunjuk yang diberikan pada tampilan di layar. Sesudah Delphi terinstalasi pada komputer, kita bisa memulai mengenal dahulu apa itu Delphi? Kelompok bahasa pemrograman apa? Delphi adalah kompiler / penterjemah bahasa Delphi (awalnya dari Pascal) yang merupakan bahasa tingkat tinggi sekelas dengan Basic, C. Bahasa Pemrograman di Delphi disebut bahasa prosedural artinya bahasa/sintaknya mengikuti urutan tertentu / prosedur. Ada jenis pemrograman non-prosedural seperti pemrograman untuk kecerdasan buatan seperti bahasa Prolog. Delphi termasuk Keluarga Visual sekelas Visual Basic, Visual C, artinya perintah-perintah untuk membuat objek dapat dilakukan secara visual. Pemrogram tinggal memilih objek apa yang ingin dimasukkan kedalam Form/Window, lalu tingkah laku objek tersebut saat menerima event/aksi tinggal dibuat programnya. Delphi merupakan bahasa berorentasi objek, artinya nama objek, properti dan methode/procedure dikemas menjadi satu kemasan (encapsulate). Sebelum mempelajari ketiga struktur pemrograman ada baiknya kenali dahulu tampilan IDE, yang merupakan editor dan tools untuk membuat program Delphi. Pada IDE akan ditampilkan Form baru yang merupakan aplikasi/program Window yang akan dibuat. Aplikasi / program berbasis windows sering disebut dengan jendela (window). Bagaimana membuat aplikasi berbasis windows (berbasis grafik dan bukan berbasis teks seperti pada DOS)? Caranya dengan membuat sebuah form. Pada pemrograman berbasis windows, kita akan diperhadapkan pada satu atau beberapa jendela yang nampak dihadapan kita. Jendela ini dalam Delphi disebut juga dengan form. Pada pemrograman berbasis windows, kita akan diperhadapkan pada satu atau beberapa jendela yang nampak dihadapan kita. Jendela ini dalam Delphi disebut juga dengan form. Delphi adalah sebuah perangkat lunak (bahasa pemrograman) untuk membuat program / aplikasi komputer berbasis windows. Delphi merupakan bahasa pemograman berbasis objek, artinya semua komponen yang ada merupakan objek-objek. Ciri sebuah objek adalah memiliki nama, properti dan method/procedure. Delphi disebut juga visual programming artinya komponen-komponen yang ada tidak hanya berupa teks (yang sebenarnya program kecil) tetapi muncul berupa gambar-gambar. 1.1.1 Membuat Sebuah Form Saat anda pertama kali masuk ke Delphi, anda akan diperhadapkan pada sebuah form kosong yang akan dibuat secara otomatis. Form tersebut diberi nama Form1. Form ini merupakan tempat bekerja untuk membuat antarmuka pengguna. Diktat Mata Kuliah Kimia Komputasi Jurusan Kimia FMIPA Unnes 1 PENDAHULUAN : IDE DAN STRUKTUR PROGRAM DELPHI PEMROGRAMAN DELPHI 1.1 PENDAHULUAN

sebuah data base yang berfungsi da nya semua data saja

Embed Size (px)

DESCRIPTION

assdasd

Citation preview

Page 1: sebuah data base yang berfungsi da nya semua data saja

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

Page 2: sebuah data base yang berfungsi da nya semua data saja

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

Page 3: sebuah data base yang berfungsi da nya semua data saja

` 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

Page 4: sebuah data base yang berfungsi da nya semua data saja

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

Page 5: sebuah data base yang berfungsi da nya semua data saja

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.

Page 6: sebuah data base yang berfungsi da nya semua data saja

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

Page 7: sebuah data base yang berfungsi da nya semua data saja

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;

Page 8: sebuah data base yang berfungsi da nya semua data saja

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

Page 9: sebuah data base yang berfungsi da nya semua data saja

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;

Page 10: sebuah data base yang berfungsi da nya semua data saja

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

Page 11: sebuah data base yang berfungsi da nya semua data saja

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;

Page 12: sebuah data base yang berfungsi da nya semua data saja

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;

Page 13: sebuah data base yang berfungsi da nya semua data saja

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;

Page 14: sebuah data base yang berfungsi da nya semua data saja

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;

Page 15: sebuah data base yang berfungsi da nya semua data saja

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;

Page 16: sebuah data base yang berfungsi da nya semua data saja

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 ;

Page 17: sebuah data base yang berfungsi da nya semua data saja

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;

Page 18: sebuah data base yang berfungsi da nya semua data saja

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;

Page 19: sebuah data base yang berfungsi da nya semua data saja

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

Page 20: sebuah data base yang berfungsi da nya semua data saja

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;

Page 21: sebuah data base yang berfungsi da nya semua data saja

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

Page 22: sebuah data base yang berfungsi da nya semua data saja

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

Page 23: sebuah data base yang berfungsi da nya semua data saja

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

Page 24: sebuah data base yang berfungsi da nya semua data saja

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

Page 25: sebuah data base yang berfungsi da nya semua data saja

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

Page 26: sebuah data base yang berfungsi da nya semua data saja

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

Page 27: sebuah data base yang berfungsi da nya semua data saja

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

Page 28: sebuah data base yang berfungsi da nya semua data saja

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

Page 29: sebuah data base yang berfungsi da nya semua data saja

( )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

Page 30: sebuah data base yang berfungsi da nya semua data saja

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

Page 31: sebuah data base yang berfungsi da nya semua data saja

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

Page 32: sebuah data base yang berfungsi da nya semua data saja

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

Page 33: sebuah data base yang berfungsi da nya semua data saja

{ 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

Page 34: sebuah data base yang berfungsi da nya semua data saja

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

Page 35: sebuah data base yang berfungsi da nya semua data saja

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

Page 36: sebuah data base yang berfungsi da nya semua data saja

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

Page 37: sebuah data base yang berfungsi da nya semua data saja

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

Page 38: sebuah data base yang berfungsi da nya semua data saja

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

Page 39: sebuah data base yang berfungsi da nya semua data saja

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

Page 40: sebuah data base yang berfungsi da nya semua data saja

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

Page 41: sebuah data base yang berfungsi da nya semua data saja

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

Page 42: sebuah data base yang berfungsi da nya semua data saja

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

Page 43: sebuah data base yang berfungsi da nya semua data saja

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

Page 44: sebuah data base yang berfungsi da nya semua data saja

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

Page 45: sebuah data base yang berfungsi da nya semua data saja

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

Page 46: sebuah data base yang berfungsi da nya semua data saja

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

Page 47: sebuah data base yang berfungsi da nya semua data saja

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

Page 48: sebuah data base yang berfungsi da nya semua data saja

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

Page 49: sebuah data base yang berfungsi da nya semua data saja

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

Page 50: sebuah data base yang berfungsi da nya semua data saja

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

Page 51: sebuah data base yang berfungsi da nya semua data saja

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

Page 52: sebuah data base yang berfungsi da nya semua data saja

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

Page 53: sebuah data base yang berfungsi da nya semua data saja

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

Page 54: sebuah data base yang berfungsi da nya semua data saja

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

Page 55: sebuah data base yang berfungsi da nya semua data saja

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

Page 56: sebuah data base yang berfungsi da nya semua data saja

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

Page 57: sebuah data base yang berfungsi da nya semua data saja

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

Page 58: sebuah data base yang berfungsi da nya semua data saja

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

Page 59: sebuah data base yang berfungsi da nya semua data saja

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

Page 60: sebuah data base yang berfungsi da nya semua data saja

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

Page 61: sebuah data base yang berfungsi da nya semua data saja

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

Page 62: sebuah data base yang berfungsi da nya semua data saja

'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

Page 63: sebuah data base yang berfungsi da nya semua data saja

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

Page 64: sebuah data base yang berfungsi da nya semua data saja

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

Page 65: sebuah data base yang berfungsi da nya semua data saja

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

Page 66: sebuah data base yang berfungsi da nya semua data saja

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

Page 67: sebuah data base yang berfungsi da nya semua data saja

−=

−=

=

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

Page 68: sebuah data base yang berfungsi da nya semua data saja

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

Page 69: sebuah data base yang berfungsi da nya semua data saja

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

Page 70: sebuah data base yang berfungsi da nya semua data saja

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

Page 71: sebuah data base yang berfungsi da nya semua data saja

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

Page 72: sebuah data base yang berfungsi da nya semua data saja

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

Page 73: sebuah data base yang berfungsi da nya semua data saja

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

Page 74: sebuah data base yang berfungsi da nya semua data saja

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

Page 75: sebuah data base yang berfungsi da nya semua data saja

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

Page 76: sebuah data base yang berfungsi da nya semua data saja

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

Page 77: sebuah data base yang berfungsi da nya semua data saja

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

Page 78: sebuah data base yang berfungsi da nya semua data saja

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

Page 79: sebuah data base yang berfungsi da nya semua data saja

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

Page 80: sebuah data base yang berfungsi da nya semua data saja

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

Page 81: sebuah data base yang berfungsi da nya semua data saja

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

Page 82: sebuah data base yang berfungsi da nya semua data saja

'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

Page 83: sebuah data base yang berfungsi da nya semua data saja

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

Page 84: sebuah data base yang berfungsi da nya semua data saja

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

Page 85: sebuah data base yang berfungsi da nya semua data saja

( )

( ) ( ) ( )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

Page 86: sebuah data base yang berfungsi da nya semua data saja

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

Page 87: sebuah data base yang berfungsi da nya semua data saja

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

Page 88: sebuah data base yang berfungsi da nya semua data saja

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

Page 89: sebuah data base yang berfungsi da nya semua data saja

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

Page 90: sebuah data base yang berfungsi da nya semua data saja

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

Page 91: sebuah data base yang berfungsi da nya semua data saja

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

Page 92: sebuah data base yang berfungsi da nya semua data saja

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

Page 93: sebuah data base yang berfungsi da nya semua data saja

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

Page 94: sebuah data base yang berfungsi da nya semua data saja

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

Page 95: sebuah data base yang berfungsi da nya semua data saja

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

Page 96: sebuah data base yang berfungsi da nya semua data saja

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

Page 97: sebuah data base yang berfungsi da nya semua data saja

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

Page 98: sebuah data base yang berfungsi da nya semua data saja

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

Page 99: sebuah data base yang berfungsi da nya semua data saja

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

Page 100: sebuah data base yang berfungsi da nya semua data saja

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

Page 101: sebuah data base yang berfungsi da nya semua data saja

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

Page 102: sebuah data base yang berfungsi da nya semua data saja

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

Page 103: sebuah data base yang berfungsi da nya semua data saja

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

Page 104: sebuah data base yang berfungsi da nya semua data saja

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

Page 105: sebuah data base yang berfungsi da nya semua data saja

Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes

1

Page 106: sebuah data base yang berfungsi da nya semua data saja

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

Page 107: sebuah data base yang berfungsi da nya semua data saja

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

Page 108: sebuah data base yang berfungsi da nya semua data saja

∆Cp = -171.4 (Alberty, 1987 : 259).

Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes

1

Page 109: sebuah data base yang berfungsi da nya semua data saja

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

Page 110: sebuah data base yang berfungsi da nya semua data saja

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

Page 111: sebuah data base yang berfungsi da nya semua data saja

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

Page 112: sebuah data base yang berfungsi da nya semua data saja

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

Page 113: sebuah data base yang berfungsi da nya semua data saja

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

Page 114: sebuah data base yang berfungsi da nya semua data saja

Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes

1

Page 115: sebuah data base yang berfungsi da nya semua data saja

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

Page 116: sebuah data base yang berfungsi da nya semua data saja

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

Page 117: sebuah data base yang berfungsi da nya semua data saja

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

Page 118: sebuah data base yang berfungsi da nya semua data saja

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

Page 119: sebuah data base yang berfungsi da nya semua data saja

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

Page 120: sebuah data base yang berfungsi da nya semua data saja

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

Page 121: sebuah data base yang berfungsi da nya semua data saja

{ 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

Page 122: sebuah data base yang berfungsi da nya semua data saja

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

Page 123: sebuah data base yang berfungsi da nya semua data saja

end;

end.

Hasil Running

Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes

1

Page 124: sebuah data base yang berfungsi da nya semua data saja

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

Page 125: sebuah data base yang berfungsi da nya semua data saja

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

Page 126: sebuah data base yang berfungsi da nya semua data saja

∑∑ +++===

−∆ 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

Page 127: sebuah data base yang berfungsi da nya semua data saja

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

Page 128: sebuah data base yang berfungsi da nya semua data saja

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

Page 129: sebuah data base yang berfungsi da nya semua data saja

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

Page 130: sebuah data base yang berfungsi da nya semua data saja

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

Page 131: sebuah data base yang berfungsi da nya semua data saja

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

Page 132: sebuah data base yang berfungsi da nya semua data saja

Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes

1

Page 133: sebuah data base yang berfungsi da nya semua data saja

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

Page 134: sebuah data base yang berfungsi da nya semua data saja

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

Page 135: sebuah data base yang berfungsi da nya semua data saja

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

Page 136: sebuah data base yang berfungsi da nya semua data saja

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

Page 137: sebuah data base yang berfungsi da nya semua data saja

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

Page 138: sebuah data base yang berfungsi da nya semua data saja

][

][][

][

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

Page 139: sebuah data base yang berfungsi da nya semua data saja

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

Page 140: sebuah data base yang berfungsi da nya semua data saja

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

Page 141: sebuah data base yang berfungsi da nya semua data saja

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

Page 142: sebuah data base yang berfungsi da nya semua data saja

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

Page 143: sebuah data base yang berfungsi da nya semua data saja

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

Page 144: sebuah data base yang berfungsi da nya semua data saja

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

Page 145: sebuah data base yang berfungsi da nya semua data saja

Diktat Mata Kuliah Kimia KomputasiJurusan Kimia FMIPA Unnes

1