Turbo Pascal 7 untuk Kimia

155
Drs. Kasmui, M.Si KIMIA KOMPUTASI Aplikasi Turbo Pascal dalam Kimia LABORATORIUM KIMIA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS NEGERI SEMARANG 2002 Page 1 of 155
  • Upload

    -
  • Category

    Software

  • view

    436
  • download

    73

Transcript of Turbo Pascal 7 untuk Kimia

Page 1: Turbo Pascal 7 untuk Kimia

Drs. Kasmui, M.Si

KIMIA KOMPUTASI

Aplikasi Turbo Pascal dalam Kimia

LABORATORIUM KIMIAFAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS NEGERI SEMARANG2002

Page 1 of 155

Page 2: Turbo Pascal 7 untuk Kimia

KATA PENGANTAR

Alhamdulillahi Robbil ‘Alamin, hanya dengan pertolongan Allah SWTpenyusunan diktat Kimia Komputasi ini dapat diselesaikan dengan baik.Semoga diktat ini dapat memenuhi syarat minimal kebutuhan referensi bagimata kuliah Kimia Komputasi.

Sesungguhnya diktat ini disusun dari koreksi dan pengembangan draftdiktat Kimia Komputasi sebelumnya dengan mempertimbangkan pengalamanperkuliahan selama beberapa tahun dan juga perspektif kebutuhan kimiakomputasi untuk penyelesaian problem-problem kimia. Tentu saja tidaksemua pembahasan problem kimia mendapat porsi yang mencukupi tetapidiktat ini dapat dijadikan dan diarahkan sebagai bahan mentah bagimahasiswa yang berminat dalam bidang kimia komputasi untukmengembangkan kemampuan komputasinya sehingga dapat memecahkanmasalah-masalah komputasi yang dihadapi dalam bidang kimia padaumumnya.

Isi diktat ini dibagi menjadi tiga bagian besar yaitu bagian pertamauntuk materi yang terkait dengan bahasa pemrograman Turbo Pascal meliputiBab 1, 2, 3 dan 5, bagian kedua untuk materi teori metode numerik untukanalisis numerik problem kimia meliputi Bab 4 dan bagian ketiga untukmateri praktikum pemrograman problem kimia menggunakan Turbo Pascal.

Page 2 of 155

Page 3: Turbo Pascal 7 untuk Kimia

DAFTAR ISI

HalamanHALAMAN JUDUL ………………………………………………… iKATA PENGANTAR ………………………………………………. iiDAFTAR ISI ………………………………………………………… iiiDAFTAR PROGRAM PRAKTIKUM ……………………………… vi

BAB 1 REVIEW MENU PASCAL1.1 Sistem Menu Turbo Pascal ………………….. 1

1.1.1 File …………………………………… 11.1.2 Edit …………………………………… 21.1.3 Search ………………………………... 21.1.4 Run …………………………………… 21.1.5 Compile ……………………………… 21.1.6 Debug ………………………………… 21.1.7 Tools ………………………………… 21.1.8 Options ………………………………. 31.1.9 Window ……………………………… 31.1.10 Help …………………………………. 3

1.2 Hotkey atau ShortCut ………………………. 31.3 Perintah Editor ………………………………. 4

1.3.1 Perintah blok …………………………. 41.3.2 Perintah gerakan kursor ……………… 51.3.3 Perintah menyisipkan dan menghapus .. 51.3.4 Serbaneka perintah editor ……………. 5

BAB 2 KOMPONEN DAN STRUKTUR TURBO PASAL … 62.1 Kata Cadangan ………………………………... 62.2 Pengenal ……………………………………… 62.3 Unit Standar Turbo Pascal ………………….. 62.4 Bilangan ………………………………………. 72.5 Komentar …………………………………….. 72.6 Program ………………………………………. 72.7 Uses ………………………………………….. 82.8 Label ………………………………………….. 82.9 Deklarasi konstanta ………………………….. 92.10 Type ………………………………………….. 122.11 Var …………………………………………… 192.12 Operator aritmatika biner ……………………. 192.13 Statement …………………………………….. 212.14 Procedure …………………………………….. 212.15 Forward ……………………………………… 222.16 External ………………………………………. 222.17 Inline …………………………………………. 222.18 GoTo …………………………………………. 23

Page 3 of 155

Page 4: Turbo Pascal 7 untuk Kimia

2.19 If … then … else …………………………….. 232.20 Case ………………………………………….. 242.21 Repeat ... Until ………………………………. 242.22 While …………………………………………. 252.23 For … To … Do …, For … DownTo …Do …. 252.24 With ………………………………………….. 262.25 Function ……………………………………… 262.26 Unit …………………………………………… 27

BAB 3 FUNGSI STANDAR DAN PENULISAN EKSPRESI ARITMATIKA PASCAL …………………………… 283.1 Fungsi Standar Aritmatika …………………… 283.2 Penulisan Ekspresi Aritmatika Pascal ……….. 29

BAB 4 METODE NUMERIK ………………………………. 314.1 Pendahuluan …………………………………. 314.2 Diferensiasi Numerik ………………………... 314.3 Akar Persamaan ……………………………… 33

4.3.1 Metode Newton ……………………... 334.3.2 Metode Secant ………………………. 35

4.4 Integrasi Numerik …………………………… 364.4.1 Metode Euler ………………………… 374.4.2 Metode Simpson ……………………. 37

4.5 Penyelesaian Numerik Persamaan DiferensialOrdiner ……………………………………… 394.5.1 Metode Euler ………………………… 404.5.2 Metode Runge-Kutta orde 4 …………. 414.5.3 Metode Euler dan Runge-Kutta untuk

Persamaan diferensial ………………… 424.6 Sistem Linier ………………………………… 44

4.6.1 Sistem persamaan linier ……………… 444.6.2 Inversi matrik ………………………… 46

BAB 5 PEMROGRAMAN GRAFIK PASCAL …………….. 495.1 Inisialisasi Mode Grafik Pascal ……………… 495.2 Prosedur Grafik Pascal ………………………. 50

5.2.1 Prosedur PutPixel ……………………. 515.2.2 Prosedur MoveTo ………………….… 515.2.3 Prosedur MoveRel ……………………. 515.2.4 Fungsi GetX dan GetY ………………. 515.2.5 Prosedur LineTo ……………………… 515.2.6 Prosedur LineRel ……………………… 515.2.7 Prosedur Line …………………………. 515.2.8 Prosedur SetColor ……………………. 515.2.9 Prosedur SetLineStyle ..………………. 525.2.10 Prosedur Rectangle ……..……………. 525.2.11 Prosedur Circle ….……………………. 525.2.12 Prosedur Arc…… ……………………. 525.2.13 Prosedur Ellipse ………..……………. 52

Page 4 of 155

Page 5: Turbo Pascal 7 untuk Kimia

5.2.14 Prosedur Bar …….……………………. 525.2.15 Prosedur Bar3D ….……………………. 525.2.16 Prosedur SetFill Pattern …..…………. 535.2.17 Prosedur SetFillStyle ……..…………. 535.2.18 Prosedur FloodFill ..…………………. 535.2.19 Prosedur FillEllipse .…………………. 535.2.20 Prosedur PieSlice ……………………. 535.2.21 Prosedur Sector ………………………. 535.2.22 Prosedur OutText ……………………. 545.2.23 Prosedur OutTextXY ..………………. 545.2.24 Prosedur SetTextStyle .………………. 545.2.25 Prosedur SetUserCharSize ………..…. 545.2.26 Fungsi TextHeight …………………... 545.2.27 Fungsi TextWidht ……………………. 545.2.28 Prosedur SetTextJustify ..……………. 545.2.29 Prosedur SetBkBolor …………………. 555.2.30 Prosedur ClearDevice ..………………. 55

5.3 Transformasi Grafik Pascal ………………….. 55BAB 6 MATERI PRAKTIKUM KIMIA KOMPUTASI

MENGGUNAKAN TURBO PASCAL …………….. 566.1 Rumus Gas Ideal …………………………….. 566.2 Molaritas dan Normalitas ……………………. 576.3 Root Mean Square …………………………… 576.4 Fungsi Energi Bebas …………………………. 586.5 Distribusi Probabilitas ………………………. 596.6 Jumlah Bilangan ……………………………… 606.7 Koefisien Aktivitas …………………………… 616.8 Energi Rotasi dan Fungsi Partisi …………….. 626.9 Energi Aktivasi ………………………………. 646.10 Kelarutan …………………………………….. 656.11 Rumus Empiris dan Molekul ………………… 676.12 Energi Pengikat Inti ………………………….. 696.13 Tebakan Lambang dan Nomor Atom ……….. 706.14 Konstanta Laju Reaksi ……………………….. 736.15 Kinetika Kimia ………………………………. 756.16 Laju Efusi Gas ……………………………….. 786.17 Operasi Matrik dan Vektor …………………... 796.18 Membuat File Unit …………………………… 856.19 Jarak Antar Bidang Indeks Miller …………….. 866.20 Keluar Ke Dos ……………………………….. 876.21 Membuat Paket Program …………………….. 886.22 Menentukan Korelasi dan Persamaan Regresi

Linier ………………………………………… 89

Page 5 of 155

Page 6: Turbo Pascal 7 untuk Kimia

DAFTAR PROGRAM PRAKTIKUM

Halaman1. Program Praktikum_1 ………………………………………… 562. Program Praktikum_2 ………………………………………… 573. Program Praktikum_3 ………………………………………… 584. Program Praktikum_4 ………………………………………… 595. Program Praktikum_5 ………………………………………… 606. Program Praktikum_6 ………………………………………… 617. Program Praktikum_7 ………………………………………… 618. Program Praktikum_8 ………………………………………… 639. Program Praktikum_9 ………………………………………… 6410. Program Praktikum_10 ………………………………………… 6611. Program Praktikum_11 ………………………………………… 6712. Program Praktikum_12 ………………………………………… 6913. Program Praktikum_13 ………………………………………… 7014. Program Praktikum_14 ………………………………………… 7315. Program Praktikum_15 ………………………………………… 7616. Program Praktikum_16 ………………………………………… 7817. Program Praktikum_17 ………………………………………… 7918. Program Praktikum_18 ………………………………………… 8519. Program Praktikum_19 ………………………………………… 8620. Program Praktikum_20 ………………………………………… 8721. Program Praktikum_21 ………………………………………… 8822. Program Praktikum_22 ………………………………………… 90

Page 6 of 155

Page 7: Turbo Pascal 7 untuk Kimia

1. REVIEW MENU TURBO PASCAL

1.1 SISTEM MENU TURBO PASCAL

Untuk menjalankan Turbo Pascal maka arahkan direktori ke direktori aktif Turbo Pascal , misalnyadi C:\TP7\, maka ketiklah TURBO atau TPX dan tekanlah <Enter>. Tertulis

C:\TP7\TURBO <Enter>C:\TP7\TPX <Enter>

maka akan terlihat di layar monitor sistem menu Turbo Pascal sebagai berikut

Gambar 1.1 Sistem Menu Turbo Pascal

Ada beberapa cara untuk menggunakan menu Turbo Pascal tersebut yaitu:1. Tekan <F10>, lalu tekan huruf depan menu (warna merah) yang akan dipilih, kemudian gunakan panah

atas atau bawah untuk memilih perintah yang diinginkan dan tekan <Enter> 2. Tekan <F10>, lalu gunakan panah kiri atau kanan untuk memilih menu yang diinginkan dan tekan

<Enter>, kemudian gunakan panah atas atau bawah untuk memilih perintah yang diinginkan dan tekan<Enter>

3. Tekan <Alt>+ <huruf depan menu (warna merah) yang akan dipilih>, misalnya <Alt>+<F> untuk menuFile, kemudian gunakan panah atas atau bawah untuk memilih perintah yang diinginkan dan tekan<Enter>

4. Dapat juga digunakan mouse yaitu dengan mengarahkan kursor ke judul menu yang akan dipilih, tekan(klik) tombol kiri mouse, klik juga perintah menu yang diinginkan

1.1.1 FileBeberapa perintah menu yang penting dalam menu File adalah

1. New, untuk membuka jendela Edit baru atau membuat file program baru2. Open (F3), untuk membuka file program tersimpan 3. Save (F2), untuk menyimpan ke disket/hardisk file program yang sedang diedit4. Save as, untuk menyimpan file program dengan nama file lain atau direktori lain atau drive lain5. Save all, untuk menyimpan semua file program yang dimodifikasi dalam jendela Edit yang dibuka6. Change dir, untuk ganti direktori7. Print, untuk mencetak isi jendela Edit aktif ke printer8. Printer setup, untuk setup printer

Page 7 of 155

Page 8: Turbo Pascal 7 untuk Kimia

9. DOS shell, untuk keluar sementara ke DOS, masul lagi ke Turbo Pascal dengan mengetik ‘EXIT’ dantekan <Enter> dari DOS

10. Exit (Alt+X), untuk keluar dari Turbo Pascal, menghapusnya dari memori dan kembali ke DOS

1.1.2 EditBeberapa perintah menu yang penting dalam menu Edit adalah

1. Undo (Alt+BkSp), untuk membatalkan perubahan yang dilakukan sebelumnya2. Redo, untuk menjalankan kembali perubahan sebelum Undo3. Cut (Shift+del), untuk menghilangkan teks terpilih dan meletakkan kedalam Clipboard (memori)4. Copy (Ctrl+Ins), untuk mengkopi teks terpilih dan meletakkan kedalam Clipboard (memori)5. Paste (Shift+Ins), untuk meletakkan teks terpilih yang tersimpan di Clipboard ke posisi kursor di layar6. Clear (Ctrl+del), untuk menghapus teks terpilih7. Show Clipboard, untuk membuka isi Clipboard

Gambar 1.2 Menu Edit Turbo Pascal

1.1.3 SearchBeberapa perintah menu yang penting dalam menu Search adalah

1. Find, untuk mencari suatu teks2. Replace, untuk mencari suatu teks dan menggantinya dengan teks baru3. Find error, untuk mencari lokasi terjadinya kesalahan waktu program dijalankan (run-time error)4. Find procedure, untuk mencari deklarasi prosedur atau fungsi

1.1.4 RunBeberapa perintah menu yang penting dalam menu Run adalah

1. Run (Ctrl+F9), untuk menjalankan program yang sedang aktif2. Trace into (F7), untuk menjalankan perintah program per langkah3. Go to cursor (F4), untuk menjalankan program sampai posisi kursor yang ditentukan

1.1.5 CompileBeberapa perintah menu yang penting dalam menu Compile adalah

1. Compile (Alt+F9), untuk mengkompilasi program ke disket atau memori2. Make (F9), diantaranya untuk mengkompilasi program yang ada di jendela aktif 3. Information, untuk menunjukkan informasi status file

1.1.6 DebugBeberapa perintah menu yang penting dalam menu Debug adalah

1. Output, untuk membuka layar output

Page 8 of 155

Page 9: Turbo Pascal 7 untuk Kimia

2. User screen (Alt+F5), untuk membuka layar output ukuran penuh3. Evaluate/modify, untuk mengevaluasi suatu variabel atau ekspresi dan display atau modifikasi harga

1.1.7 ToolsPerintah menu dalam menu Tools diantaranya adalah

1. Messages, untuk membuka layar yang berisi pesan2. Grep, untuk memodifikasi, menambah atau menghilangkan suatu program tambahan

1.1.8 OptionsMenu Options berguna untuk mengeset konfigurasi program Turbo Pascal , misalnya

1. Compile, diantaranya untuk mengatur kompiler ‘runtime errors’, ‘debugging’, ‘ numeric processing’ 2. Memory sizes, untuk mengatur ukuran memori3. Directories, untuk mengatur direktori file program Turbo Pascal 4. Environment, diantaranya untuk mengeset lingkungan editor, mouse, warna5. Save, untuk menyimpan semua hasil pengesetan

1.1.9 WindowMenu Window untuk mengatur layar Turbo Pascal, diantaranya

1. Tile, untuk mengatur layar program seperti ubin2. Cascade, untuk mengatur layar program bertumpuk3. Close all, untuk menutup semua layar program yang dibuka4. Zoom (F5), untuk display layar program penuh dan sebaliknya5. Close (Alt+F3), untuk menutup layar program yang aktif

1.1.10 HelpMenu terakhir adalah Help yang berguna untuk mendapatkan bantuan berbagai informasi tentang

program Turbo Pascal. Dalam menu Help diantaranya terdapat berbagai contoh program Turbo Pascal yangsederhana sehingga dapat dicontoh dan dikembangkan menjadi program yang lebih kompleks. Menu Helpdapat dilakukan dengan menekan <F1>, lalu memilih berbagai pilihan yang sudah disediakan.

Dapat juga dipilih dari Help pilihan Index untuk membuka Turbo Help Index, kemudian ketikkanindeks atau apa saja yang kita cari, maka Pascal mencari secara otomatis indeks yang diketikkan. Apabiladitemukan tekan <Enter>, maka kita dapat belajar tentang apa saja dari Pascal dari Menu Help ini.

Gambar 1.3 Menu Help Turbo Pascal

Page 9 of 155

Page 10: Turbo Pascal 7 untuk Kimia

1.2 HOTKEY ATAU SHORTCUTHotkey atau shortcut adalah kombinasi 3 atau 2 tombol yang berguna untuk menjalankan perintah

menu secara cepat/langsung tanpa memilih dulu menunya. Diantaranya adalah

Hot keys Menu / Perintah menu / fungsiAlt + C CompileAlt + D DebugAlt + E EditAlt + F FileAlt + H HelpAlt + O OptinsAlt + R RunAlt + S SearchAlt + W WindowAlt + X Exit (keluar dari Turbo Pascal ke DOS)Alt + S R Membuka Kotak dialog Find dan ReplaceAlt + S F Membuka Kotak dialog Find Alt + F3 Menutup program yang ada di jendela aktif Alt + F5 Melihat layar output program (user screen)Alt + F9 Mengkompilasi program di jendela aktif , pemeriksaan sintakAlt + Back Space Membatalkan perintah yang sebelumnya dilakukan (undo)

Ctrl + Del Menghilangkan teks terpilih dari jendelaCtrl + L Mengulang perintah Find atau Replace terakhirCtrl + F7 Menambahkan variabel pada jendela output untuk melihat hasilCtrl + F9 Menjalankan program yang ada di jendela aktif, diperoleh outputCtrl + Ins Mengkopi bagian yang diblok sebelumnya, disimpan dimemori

Shift + Del Menempatkan teks terpilih kedalam ClipboardShift + Ins Menempatkan teks dari Clipboard ke jendela aktif

F1 Memanggil menu HelpF2 Menyimpan file yang ada di jendela Edit aktif ke disket/hardiskF3 Membuka file tersimpanF4 Menjalankan program, berhenti pada garis kursorF5 Membuka dan menutup jendela aktif lebarF6 Berpindah jendela aktifF7 Menjalankan perintah program per langkahF10 Menghidupkan menu untuk dipilih

1.3 PERINTAH EDITORWindow Edit adalah tempat pengetikan dan pengeditan kode Turbo Pascal.

1.3.1 Perintah Blok

FUNGSI HOTKEY Menandai awal blok Ctrl+K B Menandai akhir blok Ctrl+K K Menandai satu kata Ctrl+K T Mengkopi blok Ctrl+K C Memindah blok Ctrl+K V Menghapus blok Ctrl+K Y Membaca blok dari disket Ctrl+K R

Page 10 of 155

Page 11: Turbo Pascal 7 untuk Kimia

Menyimpan blok ke dikset Ctrl+K W Menampakkan dan menyembunyikan blok Ctrl+K H Mencetak blok Ctrl+K P Menggeser masuk blok Ctrl+K I Menggeser keluar blok Ctrl+K U Pindah ke awal blok Ctrl+Q B Pindah ke akhir blok Ctrl+Q K Menghapus blok Ctrl+Del Keluar ke kotak menu Ctrl+K D Menandai garis Ctrl+K L Mengkopi ke clipboard Ctrl+Ins Memotong ke clipboard Shift+Del Menempelkan ke clipboard Shift+Ins

1.3.2 Perintah Gerakan Cursor

FUNGSI HOTKEY Ke kiri karakter Ctrl+S atau Left arrow Ke kanan karakter Ctrl+D atau Right arrow Ke kiri kata Ctrl+A atau Ctrl+Left arrow Ke kanan kata Ctrl+F atau Ctrl+Right arrow Ke atas satu baris Ctrl+E atau Up arrow Ke bawah satu baris Ctrl+X atau Down arrow Menggulung ke atas Ctrl+W Menggulung ke bawah Ctrl+Z Ke atas satu halaman Ctrl+R atau PgUp Ke bawah satu halaman Ctrl+C atau PgDn

1.3.3 Perintah Menyisipkan & Menghapus

FUNGSI HOTKEY Memasang mode on/off Ctrl+V atau Ins Menyisipkan baris Ctrl+N Menghapus baris Ctrl+Y Menghapus sampai akhir baris Ctrl+Q Y Menghapus karakter kiri Ctrl+H atau Backspace Menghapus karakter Ctrl+G atau Del Menghapus karakter kanan Ctrl+T

1.3.4 Serbaneka Perintah Editor

FUNGSI HOTKEY Kotak Menu F10 Membuka file F3 Menutup window aktif Alt+F3 Menyimpan dan edit Ctrl+K S atau F2 Tab Ctrl+I atau Tab Mode Tab Ctrl+O T Auto inden on/off Ctrl+O I Mengembalikan baris Ctrl+Q L Set tanda tempat (0-9) Ctrl+K n (n = 0..9) Mencari tanda tempat (0-9) Ctrl+Q n (n = 0..9)

Page 11 of 155

Page 12: Turbo Pascal 7 untuk Kimia

Bantuan bahasa Ctrl+F1 Ctrl+awal karakter Ctrl+P Mencari Ctrl+Q F Mencari dan mengganti Ctrl+Q A Mengulang pencarian terakhir Ctrl+L Membatalkan operasi Esc

Page 12 of 155

Page 13: Turbo Pascal 7 untuk Kimia

2. KOMPONEN DAN STRUKTUR PROGRAM TURBO PASCAL

2.1 KATA CADANGAN (Reserved Words)

Kata-kata cadangan (reserved words) memiliki makna tertentu dalam bahasa Turbo Pascal : tidakdapat diredefinisi. Dalam pemakaian reserved, words Turbo Pascal tidak sensitif terhadap besar dan kecilnyahuruf, sehingga besar kecilnya huruf reserved words tidak berpengaruh. Reserved words dalam Turbo Pascaladalah

And asm array beginCase const constructor destructorDiv do downto elseEnd exports file forFunction goto if implementationIn inherited inline interfaceLabel library mod nilNot object of orPacked procedure program recordRepeat set shl shrString then to typeUnit until use varWhile with xor

2.2 PENGENAL (Identifiers)

Pengenal (Identifiers) menunjukkan constant, field dalam record, function, label, procedure,program, type, unit, variable. Panjang Identifier dapat tertentu, tetapi yang signifikan adalah 63 hurufpertama. Karakter pertama suatu identifier harus berupa huruf, sedangkan karakter berikutnya harus berupahuruf, digit, atau setrip bawah (tanpa spasi). Sebagaimana reserved words, identifiers juga tidak sensitifterhadap besar kecilnya huruf. Sedangkan yang disebut Qualified identifiers adalah kombinasi identifiers . Contoh:

(* Identifiers *)WriteLnExitReal2String

(* Qualified identifiers *)System.MemAvail (* unit = System, identifier = MemAvail *)Dos.Exec (* unit = Dos, identifier = Exec *)Crt.Window (* unit = Crt, identifier = Window *)

2.3 UNIT STANDAR TURBO PASCAL

Suatu unit adalah kumpulan constant, tipe data , variable, procedure, dan function. Turbo Pascalmempunyai unit standar sebagai berikut

Crt (unit pendukung untuk mengolah layar)Dos (unit pendukung yang berisi perintah pada DOS)Graph (unit pendukung pengolahan gambar/grafik)

Page 13 of 155

Page 14: Turbo Pascal 7 untuk Kimia

Graph3 (unit pendukung grafik Turbo Pascal versi 3)Overlay (unit bagian program yang membagi pemakaian daerah memori)Printer (unit untuk mendukung pemakaian printer)System (unit terintegrasi dalam sistem Turbo Pascal , dalam pemakain tidak perlu dituliskan pada uses)Turbo3 (unit pendukung Turbo Pascal 3)WinDos (unit pendukung yang berisi perintah DOS pada Turbo Pascal Windows)

Unit-unit standar ini mendukung kerja program yang tersimpan dalam TURBO.TPL (DOS realmode). Setiap unit itu seperti program Pascal yang terpisah. Unit ini harus dipanggil atau diinisialisasi dulusebelum memulai program Pascal .

2.4 BILANGAN (Numbers)

Umumnya notasi desimal digunakan untuk bilangan tipe real dan integer. Bilangan integerheksadesimal menggunakan tanda dollar ($) sebagai awalan. Notasi teknik (E atau e, diikuti oleh eksponen)dibaca sebagai ‘kali 10 pangkat’ dalam tipe real. Format numerik Turbo Pascal menggunakan format numerikbahasa Inggris sehingga perlu diperhatikan penggunaan titik dan koma.

Contohnya:

7E-2 berarti 7 x 10-2

12.25e+6 atau 12.25e6 berarti 12.25 x 10+6.

Bilangan dengan desimal atau eksponen menandai konstanta bertipe real. Bilangan desimal lain menandaikonstanta bertipe integer dengan range antara -2,147,483,648 dan 2,147,483,647.

Bilangan Heksadesimal :Bilangan heksadesimal menandai konstanta bertipe integer dengan range antara $00000000 dan $FFFFFFFF.

2.5 KOMENTAR (Comments)

Bentuk komentar adalah

{ Any text not containing right brace }(* Any text not containing star/right parenthesis *)

Komentar ini diabaikan oleh kompiler. Suatu komentar yang mengandung tanda dollar ($) setelah tanda buka{ or (* adalah suatu perintah kompiler (compiler directive). Suatu mnemonik perintah kompiler mengikutikarakter $.

2.6 PROGRAM (Reserved Word)

Layout umum program Turbo Pascal adalah

Program ... ; { Program heading } uses ... ; { Uses clause } label ... ; { Labels } const ... ; { Constants } type ... ; { Types } var ... ; { Variables} procedure ... ; { Procedures } function ... ; { Functions } begin statement; { Statements }

..……………….; end.

Page 14 of 155

Page 15: Turbo Pascal 7 untuk Kimia

Bagian kepala program menunjukkan nama program dan parameternya, sekedar informasi dan tidak memiliki arti bagi program itu sendiri

Bagian klausul uses menunjukkan daftar unit-unit yang dipakai oleh program Bagian deklarasi label, constant, variable, procedure, dan function dapat ditulis

dengan urutan tertentu dan dapat dipakai secara berulang Bagian statemen menunjukkan statemen yang dieksekusi ketika program berjalan

Contoh penulisan nama program yang benar:

Program Ideal; Program Gas_Ideal; Program van_der_Waals; Program GasIdeal; Program Praktikum_1; Program Contoh1 (output); Program Contoh2 (input,output);

Contoh penulisan nama program yang salah:

Program 5; Program Gas-Ideal; Program van der Waals; Program Praktikum 1; Program Contoh 1 (output); Program Contoh 2 (input,output);

Catatan: Nama program tidak harus sama dengan nama file; panjang nama program dapat lebih dari 8 huruf,sedangkan panjang nama file Pascal maksimal 8 huruf.

2.7 USES (Reserved Word)

Setiap identifier dalam klausul uses menunjukkan nama suatu unit yang digunakan oleh programatau unit yang bersangkutan.

Sintaks:

uses identifier, ... identifier;

Catatan:Untuk menempatkan suatu unit tertentu dalam klausul uses, Kompiler Turbo Pascal terlebih dahulumemeriksa unit-unit yang tersimpan dalam TP.TPL pada waktu mengawali program. Jika kompiler tidakmenemukannya dalam unit yang tersimpan (resident unit) maka kompiler akan mencarinya pada disket.Kompiler mencari unit dengan nama NamaUnit.TPW atau NamaUnit.TPU. Ekstensi TPW adalah untuk unit-unit Windows sedangkan ekstensi TPU adalah untuk unit-unit DOS. Kompiler memeriksa unit-unit dalamdirektori Turbo Pascal dan dalam direktori tertentu yaitu dalam Options|Directories|UnitDirectories.

Contoh Windows :

program MyProgram; uses WinDos, WinCrt; { program sekarang dapat memakai} { rutin-rutin dalam WinDos and WinCrt }

Contoh DOS :

Page 15 of 155

Page 16: Turbo Pascal 7 untuk Kimia

program MyProgram; uses Dos, Crt, Graph; { program sekarang dapat memakai} { rutin-rutin dalam Dos, Crt dan Graph }

2.8 LABEL (Reserved Word)

Bagian deklarasi Label mendeklarasikan label-label yang menandai statemen yang salingberhubungan.

Sintaks:

label identifier, ... identifier;

label 01,02,03;

Catatan:Setiap label harus menandai hanya satu statemen. Dalam penambahan pada suatu identifiers digit antara 0dan 9999 dapat dipakai sebagai suatu label. Pemanggilan identifier yang telah dideklarasikan pada bagiandeklarasi label dapat menggunakan reserved words goto misalnya goto 01;.

2.9 DEKLARASI KONSTANTA (CONST: Reserved Word)

Deklarasi suatu konstanta (Const)mendefinisikan suatu harga konstanta dengan blok yangmengandung deklarasi. Suatu identifier konstanta tidak dapat dimasukkan dalam deklarasi itu sendiri.

Sintaks:

const identifier = expression; ... identifier = expression;

Catatan :Ekspresi yang digunakan dalam deklarasi konstanta harus ditulis sesuai aturan sehingga Pascal dapatmengevaluasinya pada waktu mengkompilasi. Turbo Pascal membolehkan ekspresi konstanta sebagai suatuekstensi Turbo Pascal. Deklarasi konstanta bertipe biasanya digunakan untuk mendeklarasikan variabel yangterinisialisasi. Tidak seperti konstanta yang tidak bertipe, deklarasi konstanta bertipe menunjukkan tipe danharga konstanta. Konstanta bertipe dapat dimodifikasi seperti variabel.

Contoh:

const MaxData = 1024 * 64 - 16;

NumChars = Ord('Z') - Ord('A') + 1;Message = 'Hello world...';Planck = 6.6262E-34; {J.s}Rgas = 8.314; {J/K.mol} const identifier: type = harga;

identifier: type = harga;

2.9.1 Konstanta Bertipe

Konstanta bertipe mirip dengan variabel yang terinisialisasi (variabel yang harganya didefinisikanpada blok). Lain halnya dengan konstanta tak bertipe, deklarasi konstanta bertipe menunjukkan tipe dan

Page 16 of 155

Page 17: Turbo Pascal 7 untuk Kimia

harga konstanta sekaligus. Konstanta bertipe dapat digunakan secara tepat seperti dengan tipe yang sama, dandapat muncul pada sisi kiri dalam suatu statemen pengerjaan.

Catatan: Konstanta bertipe diinisialisasi hanya sekali pada waktu mengawali program. Untuk setiap masukan padasuatu procedure atau function, konstanta bertipe yang dideklarasikan secara lokal tidak diinisialisasi lagi.Dalam penambahan ekspresi konstanta normal, harga konstanta bertipe dapat dikhususkan sebagai konstantaekspresi alamat.

Contoh:

(* Deklarasi Konstanta Bertipe *)type Point = record X, Y: real end;const Minimum: Integer = 0; Maximum: Integer = 9999; Factorial: array[1..7] of Integer = (1, 2, 6, 24, 120, 720, 5040); HexDigits: set of Char = ['0'..'9', 'A'..'Z', 'a'..'z']; Origin: Point = (X: 0.0; Y: 0.0);

2.9.2 Konstanta Bertipe Sederhana

Deklarasi konstanta bertipe sederhana menentukan harga konstanta. Harga konstanta bertipe dapatditentukan menggunakan konstanta ekspresi alamat. Sebab konstanta bertipe sebenarnya suatu variabeldengan harga konstanta, tidak dapat ditukar dengan konstanta biasa.

Contoh:

const Maximum: Integer = 9999; Factor: Real = -0.1; Breakchar: Char = #3;

2.9.3 Konstanta Bertipe String

Deklarasi konstanta string menentukan panjang string maksimal dan harga awalnya:

Contoh:

constHeading: string[7] = 'Section';

NewLine: string[2] = #13#10; TrueStr: string[5] = 'Yes';

FalseStr: string[5] = 'No';

2.9.4 Konstanta Bertipe Array

Deklarasi konstanta bertipe array menentukan harga komponen-komponen. Konstanta bertipe arraydapat menjadi suatu tipe kecuali suatu tipe file.

Contoh:

type Status = (Active, Passive, Waiting); StatusMap = array[Status] of string[7]; const StatStr: StatusMap = ('Active', 'Passive', 'Waiting');

{ Ini adalah komponen StatStr:

Page 17 of 155

Page 18: Turbo Pascal 7 untuk Kimia

StatStr[Active] = 'Active' StatStr[Passive] = 'Passive' StatStr[Waiting] = 'Waiting' }

Array KarakterPaket konstanta bertipe string (array karakter) dapat ditentukan sebagai karakter single dan string.

Contoh:

const Digits: array[0..9] of Char = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');

dapat diekspresikan lebih baik sebagai berikut:

const Digits: array[0..9] of Char = '0123456789';

Array karakter berawal nolSuatu array karakter berawal nol adalah array dengan elemen pertama adalah angka 0 dan elemen

terakhir adalah angka integer positif bukan nol.

Contoh:

array[0..X] of Char

Ketika memasang Sintaks Extended (dengan suatu perintah kompiler {$N+} ), array karakter berawal noldapat diinisialisasi dengan suatu string yang lebih pendek daripada panjang array yang dideklarasikan.

Contoh:

const FileName = array[0..79] of Char = 'TEST.PAS';

Jika string lebih pendek daripada panjang array, maka karakter sisanya diset sebagai NULL (0) dan arrayakan mengandung string berakhir nol secara efektif.

Konstanta array multidimensiKonstanta array multidimensi didefinisikan dengan menentukan konstanta setiap dimensi dalam

sekumpulan tanda kurung terpisah, dipisahkan dengan tanda koma. Konstanta paling dalam bersesuaiandengan dimensi yang paling kanan.

Contoh:

type Cube = array[0..1, 0..1, 0..1] of Integer; const Maze: Cube = (((0, 1), (2, 3)), ((4, 5), (6, 7)));

memberikan harga Maze array terinisialisasi sebagai berikut

Maze[0, 0, 0] = 0 Maze[0, 0, 1] = 1 Maze[0, 1, 0] = 2 Maze[0, 1, 1] = 3 Maze[1, 0, 0] = 4

Page 18 of 155

Page 19: Turbo Pascal 7 untuk Kimia

Maze[1, 0, 1] = 5 Maze[1, 1, 0] = 6 Maze[1, 1, 1] = 7

2.9.5 Konstanta Bertipe SetDeklarasi konstanta bertipe set menentukan harga set menggunakan suatu ekspresi konstanta.

Contoh:

type Digits = set of 0..9; Letters = set of 'A'..'Z'; const EvenDigits: Digits = [0, 2, 4, 6, 8]; Vowels: Letters = ['A', 'E', 'I', 'O', 'U', 'Y']; HexDigits: set of '0'..'z' = ['0'..'9', 'A'..'F', 'a'...f'];

2.10 TYPE (Reserved Word)

Suatu deklarasi type menentukan suatu identifier yang menandai suatu type.

Sintaks:

type identifier = AnyType; ... identifier = AnyType;

AnyType adalah suatu identifier type dari tipe berikut

array file object record ordinal pointer string set real

Jika mendeklarasikan suatu variabel, maka harus menentukan tipenya. Suatu tipe variabelmendefinisikan kumpulan harga yang mungkin dan operasinya yang dapat dilakukan padanya. Suatudeklarasi type menentukan identifier yang menandai suatu tipe. Ketika suatu identifier terjadi pada sisi kirideklarasi type, maka ini adalah identifier type untuk blok dimana terdapat deklarasi type. Suatu tipe skupidentifier tidak termasuk didalamnya, kecuali tipe pointer. Ada 6 kelompok type:

1. Type Sederhana mendefinisikan sekumpulan harga tertentu 1. Type Ordinal 2. Type Integer3. Type Boolean 4. Type Char 5. Type Enumerated 6. Type Subrange 7. Type Real

2. Type String adalah sederet karakter dengan panjang yang dinamis dan ukuran yang tertentu .3. Type Terstructur memiliki harga lebih dari satu

1. Type Array 2. Type Record 3. Type Object 4. Type Set 5. Type File

4. Type Pointer mendefinisikan sekumpulan harga yang menjelaskan variabel dinamis suatu tipe tertentu. 5. Type Procedural membolehkan procedure and function diterapkan sebagai objek

Page 19 of 155

Page 20: Turbo Pascal 7 untuk Kimia

6. Type Object adalah struktur dengan sejumlah komponen.

2.10.1 Tipe Ordinal

Turbo Pascal memiliki 10 tipe ordinal: Lima diantaranya adalah tipe integer :

Type Range Size Shortint -128..127 8-bit Integer -32768..32767 16-bit Longint -2147483648..2147483647 32-bit Byte 0..255 8-bit Word 0..65535 16-bit

Lima tipe lainnya adalah tipe boolean (Boolean, WordBool, LongBool, ByteBool) dan Char. Dua kelompoklain yang bertipe ordinal adalah tipe enumerated and subrange. Fungsi standar ini dapat digunakan dengansemua tipe ordinal :

Ord Pred Succ

2.10.2 Tipe Integer

Turbo Pascal memiliki 5 tipe Integer. Setiap tipe menandai subset keseluruhan bilangan:

Type Range Format Shortint -128..127 8-bit Integer -32768..32767 16-bit Longint -2147483648..2147483647 32-bit Byte 0..255 8-bit Word 0..65535 16-bit

Semua tipe Integer adalah tipe ordinal.

2.10.3 Tipe Real

Tipe real memiliki sekumpulan harga yang merupakan subset bilangan real. Turbo Pascal memilikilima tipe bilangan real. Masing-masing memiliki range and presisi tertentu

Type Range Digits Bytesreal 2.9e-39..1.7e38 11-12 6single 1.5e-45..3.4e38 7-8 4double 5.0e-324..1.7e308 15-16 8extended 3.4e-4932..1.1e4932 19-20 10comp -9.2e18..9.2e18 19-20 8

Catatan: Tipe comp adalah integer 64-bit, harga integral dengan range (-2 63 + 1) sampai (2 63 - 1). Turbo Pascalmendukung dua model ‘floating-point code’: - Software floating point, {$N-} - 80x87 floating point, {$N+}Perintah kompiler $N harus digunakan untuk bertukar antar dua model tersebut. Dalam keadaan $N+,perintah kompiler $E mengontrol penggunaan software emulasi 8087 dalam program final.

2.10.4 Tipe Boolean

Ada 4 tipe boolean: Boolean, WordBool, LongBool, and ByteBool.

Sintaks:

Page 20 of 155

Page 21: Turbo Pascal 7 untuk Kimia

type Boolean = (False, True); WordBool = (False, True); LongBool = (False, True); ByteBool = (False, True);

Catatan:Ukuran tipe-tipe tersebut - Boolean adalah Byte-sized (8 bits) - WordBool adalah Word-sized (16 bits) - LongBool adalah Longint-sized (32 bits) - ByteBool adalah Byte-sized (8 bits)

Karena boolean adalah tipe ordinal enumerated maka aplikasi hubungannya adalah

False < True Ord(False) = 0 Ord(True) = 1 Succ(False) = True Pred(True) = False

Boolean adalah tipe yang lebih disukai dan menggunakan sedikit memori. ByteBool, WordBool, danLongBool memiliki kompatibilitas dengan Windows. Dalam ekspresi operator hubungan berikutmenghasilkan tipe Boolean.

= <> > < >= <= IN

Untuk kompatibilitas dengan Windows, booleans dapat mengasumsikan harga ordinal lain selain 0 dan 1.Suatu ekspresi boolean dianggap False jika harga ordinalnya adalah 0, dan True jika harga ordinalnya tidak 0.Operator boolean not, and, or, dan xor bekerja dengan menguji 0 (False) atau tidak 0 (True), tetapi hasilnyaselalu berharga ordinal 0 dan 1.

2.10.5 Tipe Char

Variabel tipe ordinal Char digunakan untuk menyimpan karakter ASCII. Konstanta Karakter ditulisdiantara tanda petik tunggal :

'A', '3', or '*'

Fungsi Chr mengubah suatu harga Integer menjadi suatu karakter sesuai dengan harga ASCII. Fungsi Ordmengembalikannya sebagai karakter harga ASCII.

2.10.6 Tipe Enumerated

Tipe Enumerated mendefinisikan sekumpulan harga dengan urutan tertentu dengan mengumpulkanidentifiers yang menandai harga-harga ini.

Sintaks:

type name = (identifier, identifier, ..., identifier );

Catatan:Identifiers dalam definisi tipe menjadi konstanta tipe enumerated. Konstanta pertama memiliki urutan 0,kedua sebagai urutan 1 dan seterusnya. Tipe Enumerated adalah suatu subklas tipe ordinal.

Contoh:

type

Page 21 of 155

Page 22: Turbo Pascal 7 untuk Kimia

Suit = (Club, Diamond, Heart, Spade);

Pada contoh ini

Ord(Club) = 0 Ord(Diamond) = 1 Ord(Heart) = 2 dan seterusnya.

2.10.7 Tipe String (string: reserved word)

Variabel tipe string adalah sekumpulan karakter dengan panjang dinamis, dan ukuran maksimalkonstanta antara 1 dan 255.

Sintaks:

string [ konstanta ] atau string

Catatan:Tipe string yang dideklarasikan tanpa suatu ukuran maksimal berarti berukuran 255.

Contoh:

- 'Turbo' - 'That''s all'

Operator berikut dapat digunakan bersama dengan tipe string

+ = <> < > <= >=

Panjang fungsi standar kembali pada panjang string dinamis.

Contoh:

{ Definisi tipe String } const LineLen = 79; type Name = string[25]; Line = string[LineLen];

2.10.8 Tipe Terstruktur

Tipe terstruktur memiliki harga lebih dari satu, yaitu

tipe array tipe file tipe object tipe record tipe set

Jika tipe komponen terstruktur maka akan memiliki level struktur yang tertentu. Ukuran maksimal suatu tipe terstruktur Borland Pascal adalah 65.520 bytes.

Array (reserved word)Mendefinisikan suatu tipe array

Page 22 of 155

Page 23: Turbo Pascal 7 untuk Kimia

Sintaks:

array [tipe-indeks] of tipe-elemen

Catatan:Untuk beberapa tipe indeks harus dipisahkan dengan tanda koma. Tipe elemen dapat berupa suatu tipe, tetapi tipe indeks harus berupa tipe ordinal.

Contoh:

type IntList = array[1..100] of Integer; CharData = array['A'..'Z'] of Byte; Matrix = array[0..9, 0..9] of real;

Record (reserved word)Suatu record mengandung sejumlah komponen atau fields yang dapat berupa tipe berbeda.

Sintaks:

record fields; fields; fields end;

atau

record fields; case tag: type of case: ( fields ); ... case: ( fields ) end;

Catatan:Setiap daftar field adalah daftar identifier yang dipisahkan koma diikuti dengan kolon dan suatu tipe.

Contoh:

{ Definisi Tipe Record } type Class = (Num, Dat, Str); Date = record D, M, Y: Integer; end; Facts = record Name: string[10]; case Kind: Class of Num: (N: real); Dat: (D: Date); Str: (S: string); end;

Tipe Object (object: reserved word)Suatu tipe object adalah suatu struktur data yang mengandung sejumlah komponen tertentu.

Page 23 of 155

Page 24: Turbo Pascal 7 untuk Kimia

Sintaks:

object Field; Field; Method; Method; end;

Catatan:Objects mengandung suatu identifier, kolon dan tipe data. Object mengandung header method. Setiapkomponen baik sebagai field (mengandung data dengan tipe tertentu) atau method yang melakukan operasipada object. Deklarasi suatu field menentukan suatu identifiers yang memberi nama field dan tipe datanya.Deklarasi method menentukan procedure, function, constructor, atau destructor heading.

Field = FieldName(s): type; Method = procedure MethodName(<parameter(s)>:type); atau = function MethodName(<parameter(s)>:type):type; atau = constructor MethodName(<parameter(s)>: type [;<parameter(s)>: type]); [virtual]; atau = destructor MethodName[(<parameters>: type)];[virtual];

Suatu tipe object dapat menurunkan komponen dari tipe object lain.

Set (reserved word)Sintaks:

set of type

Catatan:Tipe dasar suatu set harus berupa suatu tipe ordinal dengan tidak lebih dari 256 harga yang mungkin. Batasatas dan bawah harga ordinal harus diantara 0 dan 255. Sekumpulan constructor, yang menandaisuatu hargatipe set dibentuk dengan menuliskan ekspresi dalam kurung. Setiap ekspresi menandai suatu harga set.Notation [ ] menandai set kosong yang kompatibel dengan seluruh tipe set.

Contoh:

{ Tipe Set } type Day = (Sun, Mon, Tue, Wed, Thu, Fri, Sat); CharSet = set of Char; Digits = set of 0..9; Days = set of Day;

{ Constructors Set }

['0'..'9', 'A'..'Z', 'a'..'z', '_'] [1, 5, I + 1 .. J - 1] [Mon..Fri]

File (reserved word)

Suatu tipe file mengandung suatu rangkain linier komponen dari tipe komponen yang dapat berupa tipeapapun kecuali tipe file.

Sintaks:

file of tipe atau

Page 24 of 155

Page 25: Turbo Pascal 7 untuk Kimia

file

Contoh:

(* Deklarasi tipe File *) type Person = record FirstName: string[15]; LastName : string[25]; Address : string[35]; end; PersonFile = file of Person; NumberFile = file of Integer; SwapFile = file;

Tipe Pointer Suatu variabel tipe pointer mengandung alamat memory variabel dinamis suatu tipe dasar tertentu.

Memberi suatu harga pada variabel pointer dengan cara: - prosedur New atau GetMem - operator @ - fungsi Ptr reserved word nil menandai suatu konstanta pointer yang tidak menunjuk suatu apapun

Pointer:Menandai suatu pointer (suatu pointer yang tidak menunjuk pada suatu tipe tertentu).

PChar:Menandai suatu pointer pada string berakhiran null.

Sintaks:

type PChar = ^Char;

Borland Pascal untuk Windows mendukung sejumlah aturan Sintaks extended (dikontrol dengan kompilerdirective $X) untuk memfasilitasi pengaturan string menggunakan tipe PChar.

Contoh:

{ Deklarasi Tipe Pointer } type BytePtr = ^Byte; WordPtr = ^Word; IdentPtr = ^IdentRec; IdentRec = record

Ident: string[15]; RefCount: Word; Next: IdentPtr; end;

Tipe Procedural Pascal Standar menyatakan procedure dan function secara tegas sebagai bagian program yang dapat

dieksekusi melalui procedure or function. Sintaks untuk deklarasi tipe prosedural adalah identik denganheader procedure atau function, kecuali bahwa sintaks mengabaikan setelah keyword procedure atau function.

Contoh:

type

Page 25 of 155

Page 26: Turbo Pascal 7 untuk Kimia

Proc = procedure; SwapProc = procedure(var X, Y: Integer); StrProc = procedure(S: string); MathFunc = function(X: Real): Real; DeviceFunc = function(var F: text): Integer; MaxFunc = function(A, B: Real; F: MathFunc): Real;

Nama parameter dalam deklarasi tipe prosedural untuk tidak mempengaruhi arti deklarasi. Harga hasil suatufunction harus sebagai suatu string, Real, Integer, Char, Boolean, Pointer, atau suatu user-definedenumeration.

Tipe Object (object: reserved word)Suatu tipe object adalah suatu struktur data yang mengandung suatu sejumlah komponen tertentu.

Sintaks:

object Field; Field; ... Method; Method; end;

Catatan:Objects mengandung suatu identifier, suatu kolon dan tipe data . Object mengandung header method. Setiapkomponen baik sebagai field yang mengandung data dengan tipe tertentu atau suatu method melakukan suatuoperasi pada object. Deklarasi suatu field menentukan suatu identifier yang memberi nama field, dan tipedatanya. Deklarasi suatu method menentukan suatu procedure, function, constructor, atau heading destructor.

Field = FieldName(s): type; Method = procedure MethodName(<parameter(s)>:type); atau = function MethodName(<parameter(s)>:type):type; atau = constructor MethodName(<parameter(s)>: type [;<parameter(s)>: type]); [virtual]; atau = destructor MethodName[(<parameters>: type)];[virtual];

Suatu tipe object dapat menurunkan komponen dari tipe object yang lain.

2.11 VAR (Reserved Word)Suatu deklarasi variabel (var) menggabungkan suatu identifier dan tipe dengan suatu lokasi dalam

memori dimana harga tipe itu dapat disimpan.

Sintaks:

var identifier, ... identifier: type; ... identifier, ... identifier: type;

Catatan:Suatu klausul absolut dapat digunakan untuk menentukan suatu alamat memori absolut. Reserved words varjuga digunakan untuk deklarasi parameter variabel.

Contoh:

{ Deklarasi Variable } var

Page 26 of 155

Page 27: Turbo Pascal 7 untuk Kimia

X, Y, Z: real; I, J, K: Integer; Done, Error: Boolean; Vector: array[1..10] of real; Name: string[15]; InFile, OutFile: Text; Letters: set of 'A'..'Z';

Deklarasi Variabel Suatu deklarasi variabel mengandung suatu daftar identifier yang menandai variabels baru (var) dan

tipenya.

Contoh:

var X, Y, Z; Real; I, J, K: Integer; Digit: 0..9; C: Color; Done,Error: Boolean Operator: (Plus, Minus, Times); Hue1, Hue2: set of Color; Today: Date; Matrix: array[1..10, 1..10] of Real;

Tipe variabel dapat berupa identifier tipe yang sebelumnya telah dideklarasikan- dalam bagian deklarasi tipe dalam blok yang sama atau- dalam blok tertutup atau- dalam suatu unit

2.12 OPERATOR ARITMETIKA BINER

Operator Operasi + penambahan - pengurangan * perkalian

/ pembagian div pembagian integer (Contoh : 10 div 3 = 3) mod sisa pembagian (Contoh : 10 mod 3 = 1/3)

Catatan:Operator + juga digunakan sebagai suatu operator string atau set.Operator +, -, dan * juga digunakan sebagai operator set.

2.12.1 Operator Boolean

Operator Operasi not negasi and and logika or or logika xor xor logika

2.12.2 Operator Relasional

Operator Operasi = sama dengan <> tidak sama dengan

Page 27 of 155

Page 28: Turbo Pascal 7 untuk Kimia

< kurang dari > lebih dari <= kurang dari atau sama dengan >= lebih dari atau sama dengan in anggota dari

Addition / penambahan (...+...)

Menambahkan ekspresi pertama dengan ekspresi kedua atau sebaliknya.

Sintaks :

Ekspresi 1 + Ekspresi 2

Operator assignment ( := )

Sintaks: variabel := ekspresi

Contoh: X := Y; Done := (I > 0) and (I < 100) A[I] := A[I] + 1;

AND Sintaks : Ekspresi 1 AND Ekspresi 2

XOR

Sintaks : Ekspresi 1 XOR Ekspresi 2

Negation / negasi (NOT)

Sintaks : NOT Ekspresi

OR Sintaks : Ekspresi 1 OR Ekspresi 2

Operator Modulus (...MOD...)

Sintaks : Ekspresi 1 MOD Ekspresi 2

2.13 STATEMENT

Statemen adalah salah satu dari berikut ini

assignment (:=) begin..end case..of..else..end for..to/downto..do goto if..then..else

Page 28 of 155

Page 29: Turbo Pascal 7 untuk Kimia

inline(...) procedure call repeat..until while..do with..do

Statemen Assignment

Operator assignment adalah :=.

Contoh:

X := Y + Z; Done := (I >= 1) and (I < 100); Hue1 := [Blue, Succ(C)]; I := Sqr(J) - I * K;

2.14 PROCEDURE (reserved word)

Procedure adalah suatu bagian program yang melakukan operasi tertentu, sering didasarkan padasekumpulan parameter.

Sintaks:

procedure identifier;atau procedure identifier ( parameters );

Catatan:Heading procedure menentukan identifier procedure. Suatu procedure diaktifkan dengan suatu statemenprocedure.Heading procedure diikuti dengan :- suatu bagi deklarasi yang mendeklarasikan objek lokal.- statemen diantara begin dan end, yang menentukan apa yang akan dieksekusi jika procedure dipanggil.

Contoh:

{ Deklarasi Procedure } procedure WrStr(X, Y: integer; S: string); var SaveX, SaveY: Integer; begin SaveX := WhereX; SaveY := WhereY; GotoXY(X, Y); Write(S); GotoXY(SaveX, SaveY); end;

2.15 FORWARD (procedure directive)

Dengan suatu deklarasi forward, kita dapat membuat suatu procedure atau function dengan tanpaspesifikasi bagian statemennya. Dari titik deklarasi forward, procedure dan function lain dapat dipanggil.

Contoh:

Page 29 of 155

Page 30: Turbo Pascal 7 untuk Kimia

(*Procedure Forwarded *) procedure Flip(N: Integer); forward;

procedure Flop(N: Integer); begin WriteLn('Flop'); if N > 0 then Flip(N - 1); end;

procedure Flip; begin WriteLn('Flip'); if N > 0 then Flop(N - 1); end;

2.16 EXTERNAL (procedure directive)

Dengan deklarasi External dapat dilakukan interfacing dengan procedure dan function terkompilasilain yang ditulis dalam bahasa assembly. Kode external dihubungkan dengan unit atau program Pascalmelalui pengarah kompiler $L namafile

Contoh:

function GetMode: Word; external; procedure SetMode(Mode: Word); external; $L CURSOR.OBJ

function GlobalAlloc(Flags: Word; Bytes: Longint): THandle; far; external 'KERNEL' index 15;

2.17 INLINE (reserved word)

Statemen dan pengarah Inline membolehkan menyisipkan instruksi kode mesin kedalam kodeprogram atau unit.

Sintaks:

inline ( data / data / ... data )

Catatan:Jika digunakan sebagai statemen, elemen data inline disisipkan langsung dalam kode. Jika digunakan sebagaipengarah dalam deklarasi procedure atau function, elemen data inline disisipkan dalam masing-masing kodesetiap kali procedure atau function dipanggil. Elemen inline menurunkan 1 byte kode jika berupa suatuconstant dengan range 0 and 255; sebaliknya menurunkan satu word. Digunakan operator < dan > untukmengesampingkan seleksi ukuran otomatis.

< berarti selalu menurunkan suatu byte > berarti selalu menurunkan suatu word

Contoh:

(* "inline" statement *) procedure FillWord(var Dest; Count: Word; Data: Word); begin inline( $C4/$7E/<Dest/ (* LES DI,Dest[BP] *) $8B/$4E/<Count/ (* MOV CX,Count[BP]*) $8B/$46/<Data/ (* MOV AX,Data[BP] *) $FC/ (* CLD *)

Page 30 of 155

Page 31: Turbo Pascal 7 untuk Kimia

$F3/$AB); (* REP STOSW *) end;

2.18 GOTO (reserved word)

Statemen goto mentransfers eksekusi program ke suatu statemen didahului dengan label dalamstatemen.

Sintaks:

goto Label

Catatan:Suatu label harus dalam blok yang sama dengan statemen goto; hal yang mustahil untuk keluar dari suatuprocedure atau function.

Contoh:

label 1, 2; goto 1 . . . 1: WriteLn ('Abnormal program termination'); 2: WriteLn ('Normal program termination');

2.19 IF...THEN...ELSE (reserved words)

If, then, dan else menentukan kondisi di bawah suatu statemen yang dieksekusi.

Sintaks:

if expr then statementatau if expr then statement else statement

Catatan:Jika ekspresi setelah if adalah True, maka statemen setelah then akan dieksekusi. Sebaliknya jika adabagian else maka statemen setelah else akan dieksekusi.

Contoh:

(* "if" statements *) if (I > Min) dan (I < Max) then I := 0;

if I < 0 then begin WriteLn(‘negatif’); end else begin WriteLn(‘positif’); end;

2.20 CASE (reserved word)

Page 31 of 155

Page 32: Turbo Pascal 7 untuk Kimia

Statemen case mengandung suatu ekspresi (selektor) dan suatu daftar statemen, masing-masingdiawali dengan suatu case.

Sintaks:

case expression of case: statement; ... case: statement; end

atau

case expression of case: statement; ... case: statement; else statement end

Catatan:Suatu case mengandung satu atau lebih constant atau range, dipisahkan dengan koma. Bagian lain adalahtambahan.

Contoh:

case Ch of 'A'..'Z', 'a'..'z': WriteLn('Letter'); '0'..'9': WriteLn('Digit'); '+', '-', '*', '/': WriteLn('Operator'); else WriteLn('Special character'); end;

2.21 REPEAT...UNTIL (reserved words)

Statemen diantara repeat and until dieksekusi dengan syarat akhir ditulis setelah until.

Sintaks:

repeat statement; statement; ... statement until expression

Contoh:

{ Repeat Statements } repeat Ch := GetChar until Ch <> ' ';

repeat Write('Enter harga: '); ReadLn(I); until (I >= 0) and (I <= '9');

Page 32 of 155

Page 33: Turbo Pascal 7 untuk Kimia

2.22 WHILE (reserved word)

Suatu statemen while mengandung suatu ekspresi yang mengontrol eksekusi pengulangan statementunggal atau gabungan

Sintaks:

while expression do statement

Catatan:Statemen setelah do dieksekusi secara berulang sepanjang ekspresi Boolean bernilai True. Ekspresidievaluasi sebelum dieksekusi sehingga jika ekspresi itu bernilai False pada awalnya maka statemen tidakdieksekusi.

Contoh:

{ "while" statements } while Ch = ' ' do Ch := GetChar;

while not Eof(InFile) do begin ReadLn(InFile, Line); WriteLn(OutFile, Line); Inc(LineCount); end;

2.23 FOR...TO…DO, FOR...DOWNTO…DO (reserved words)

Statemen for menyebabkan statemen setelah do dieksekusi sekali untuk setiap harga dalam rangedari pertama sampai terakhir.

Sintaks:

for var := first to last do statement atau for var := first downto last do statement

Catatan:Variabel kontrol dan harga awal dan akhir harus bertipe ordinal.

to:Dengan to, harga variabel kontrol bertambah 1 setiap looping.

downto:Dengan downto, harga variabel kontrol berkurang 1 untuk setiap looping.

Contoh:

(* for ... to, for ... downto *) for I := 1 to ParamCount do WriteLn(ParamStr(I);

for I := 1 to 10 do begin for J := 1 to 10 do begin

Page 33 of 155

Page 34: Turbo Pascal 7 untuk Kimia

X := 0; for K := 1 to 10 do X := X + Mat1[I, K] * Mat2[K, J]; Mat[I, J] := X; end; end;

2.24 WITH (reserved word)

Statemen with adalah metode cepat untuk mereferensi field suatu record.

Sintaks:

with var, var, ... var do statement

Catatan:Dalam statemen setelah do, field satu atau lebih variabel dapat diakses hanya menggunakan record identifierfieldnya.

Contoh:

{ "with" statement } with Date[I] do begin month := 1; year := year + 1; end;

Hal ini sama dengan : Date[I].month := 1; Date[I].year := Date[I].year + 1;

2.25 FUNCTION (reserved word)

Suatu function adalah suatu bagian yang menghitung dan menghasilkan suatu harga.

Sintaks:

function ident : type; atau function ident (parameters) : type;

Catatan:Bagian depan function menentukan identifier function, parameter formal parameter (jika ada), dan tipe hasilfunction. Tipe hasil yang valid adalah ordinal, real, string, dan pointer. Suatu function diaktifkan olehevaluasi pemanggilan function dalam suatu ekspresi.

Bagian depan function diikuti dengan : - suatu bagian deklarasi yang mendeklarasikan objek lokal - bagian statemen, yang menentukan statemen yang dieksekusi jika fungsi dipanggil

Bagian statemen harus mengandung paling tidak satu statemen yang menentukan suatu harga identifierfungsi, harga fungsi adalah harga akhir yang ditentukan. Sebagai pengganti deklarasi dan statemen, deklarasifungsi dapat menentukan suatu forward, external, atau pengarah inline. Contoh:

(* Function declaration *)

Page 34 of 155

Page 35: Turbo Pascal 7 untuk Kimia

function UpCaseStr(S: string): string; var I: Integer; begin for I := 1 to Length(S) do if (S[I] >= 'a') and (S[I] <= 'z') then Dec(S[I], 32); UpCaseStr := S; end;

2.26 UNIT (reserved word)

Unit adalah basis pemrograman modular dalam Borland Pascal. Unit digunakan untuk membuatlibrari dan membagi program besar menjadi modul-modul yang secara logika berkaitan.

Sintaks:

unit identifier; { Heading }

interface { Public symbols }: uses { Uses clause } const { Constants } type { Types } var { Variables } procedure { Procedures } function { Functions }

implementation { Private symbols }: uses { Uses clause } label { Labels } const { Constants } type { Types } var { Variables } procedure { Procedures} function { Functions } begin { Initialization } statement; { Statements } statement; end; end.

Bagian-bagian unit adalah 1. Unit heading

Unit heading menentukan nama unit yang akan digunakan dalam klausul uses.2. Bagian interface

Bagian interface mendeklarasikan constant, type, variable, procedure, dan function yang umum. Padabagian interface hanya tercantum bagian header procedure and function. Badan procedure dan functionada di bagian implementasi.

3. Bagian implementation Bagian implementation mendefinisikan badan procedure and function.

4. Bagian initialization Bagian initialization mengandung :- reserved word end (tanpa kode inisialisasi),- suatu bagian statemen yang dieksekusi untuk menyiapkan unit

Page 35 of 155

Page 36: Turbo Pascal 7 untuk Kimia

3. FUNGSI STANDAR DAN PENULISAN EKPRESI ARITMATIKA PASCAL

3.1 FUNGSI STANDAR ARITMATIKA

Dalam aplikasi problem-problem sains sejumlah fungsi matematika sering diperlukan. Beberapafungsi telah tersedia (integrated) dalam Turbo Pascal dan sebagian lagi diperlukan pemrograman.

Sebagian fungsi standar yang sudah tersedia dalam Turbo Pascal adalah sebagai berikut

FUNGSI DESKRIPSISin (x) Sinus x; x adalah sudut dalam radianCos (x) Cosinus x; x adalah sudut dalam radianArcTan (x) Arctangent x; x adalah sudut dalam radianExp (x) Exponential x; e pangkat x; e adalah basis LnLn (x) Logaritma natural xPi Harga (3,1415926535897932385)Abs (x) Absolut xSqr (x) x kuadrat Sqrt (x) Akar kuadrat x

Harga x dalam fungsi sinus, cosinus dan arctangen dalam radian karena itu agar dapat memasukkanx dalam satuan derajat harus dilakukan konversi dari derajat ke radian yaitu

x = /180

x

Misalnya untuk penulisan sin (x)

y = )/180

sin(

x

Beberapa fungsi aritmatika yang tidak tersedia dalam Turbo Pascal yang dapat diturunkan darifungsi standar dalam Turbo Pascal sebagai berikut

FUNGSI DESKRIPSITangen (x) Tangen x; Sin (x)/Cos (x); x adalah sudut dalam radianSecant (x) 1/Cos (x) ; x adalah sudut dalam radianCosecant (x) 1/Sin (x) ; x adalah sudut dalam radianArcsin (x) Invers Sinus x; Arctan (x/sqrt(1-sqr(x)));x dalam radianArccos (x) Invers Cosinus x; Arctan (sqrt(1-sqr(x))/x) ;x dalam radianLog (x) Logaritma basis 10; Ln (x)/Ln (10)ab a pangkat b; exp (b*Ln(a))

Untuk perpangkatan ab diturunkan dengan cara berikut

x = ab

Ln (x) = b*Ln (a), maka

eaLnb

x)(*

Page 36 of 155

Page 37: Turbo Pascal 7 untuk Kimia

3.2 PENULISAN EKSPRESI ARITMATIKA PASCAL

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

sederhanaBeberapa 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 . dcba

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

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

Page 37 of 155

Page 38: Turbo Pascal 7 untuk Kimia

21

212

1

2

VV

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 bertahapsebagai 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 luasinterval

RTMc

ecRT

MFv 2

22

23

24

Penulisan ekspresi Pascal untuk rumus di atas dengan cara langsung akan sulit dan lebih banyakkemungkinan 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;

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 Pascaltidak boleh menyalahi ekpresi matematikanya.

Page 38 of 155

Page 39: Turbo Pascal 7 untuk Kimia

4. METODE NUMERIK(ANALISIS NUMERIK UNTUK PROBLEM KIMIA)

4.1 PENDAHULUANSejalan dengan semakin kompleksnya aplikasi sains dan teknologi dalam kehidupan sehari-hari

maka semakin rumit pula penyelesaian problem-problem penghitungan kimia. Untuk problem sederhanamungkin dapat diselesaikan dengan pendekatan analitik. Pendekatan analitik memang memberikan hasileksak, tetapi memerlukan kemampuan yang tinggi dalam memanipulasi matematik, sehingga hanyadigunakan untuk menyelesaikan sebagian kecil problem kimia.

Alternatif pendekatan penyelesaian lain adalah menggunakan metode numerik. Metode numerikhanya memberikan penyelesaian pendekatan (approximation), tetapi tidak memerlukan kemampuanmemanipulasi matematik yang terlalu tinggi, dan dapat digunakan untuk menyelesaikan lebih banyakproblem 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 lebihtinggi. Tetapi persamaan ini dengan mudah dan cepat dapat diselesaikan secara analisis numerik.

Berkembangnya program-program komputasi menggunakan komputer semakin menempatkan metodenumerik pada posisi yang strategis dalam penyelesaian problem-problem kimia. Kecepatan dan ketepatanpendekatan penyelesaian komputasi semakin dapat diperbaiki dan dimodifikasi sehingga mendekati fisibilitasmetode analitik.

4.2 DIFERENSIASI NUMERIKTujuan 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

)(')('

0lim

)(')(')(')(''

2

2

atau

22

2

22

2

)()(*2)*2(

0lim

)(')(''

)()(*2)*2()(')(''

x

xfxxfxxf

xdx

xfd

dx

dyxf

dx

xfdxxfdxxf

dx

xfd

dx

dyxf

Page 39 of 155

Page 40: Turbo Pascal 7 untuk Kimia

dengan cara backward maka persamaan untuk slope garis tangent pada titik [x,f(x)] adalah

x

xxfxfxdx

dxxfxf

dx

xdf

dx

dyxf

)()(

0lim

)()()()('

Derivativ kedua adalah slope dari slope, yaitu

x

xxfxfxdx

dxxfxf

dx

xfd

dx

dyxf

)(')('

0lim

)(')(')(')(''

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.4595 x 10-04 nilai (2E/T2)p Forward = -5.9571 x 10-06

nilai (E/T)p Backward = -6.4536 x 10-04 nilai (2E/T2)p Backward = -5.9641 x 10-06

nilai (E/T)p Central = -6.4566 x 10-04 nilai (2E/T2)p Central = -5.9606 x 10-06

kemudian dengan cara Central dihasilkan

S = -62.2966Cp = -171.3842

Sedangkan secara analitik menghasilkan harga yang hampir sama yaitu

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

4.3 AKAR PERSAMAANSuatu 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, hanyasaja diperlukan rumus yang kompleks. Untuk persamaan yang kompleks lebih disukai penyelesaiannyamenggunakan metode numerik.

Persamaan berikut tidak dapat diselesaikan dengan mudah secara analitik

Page 40 of 155

Page 41: Turbo Pascal 7 untuk Kimia

0119354 23456 xxxxxx

begitu 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 parameterdengan harga yang ditentukan. Kemudian ungkapan tersebut hanyalah suatu fungsi terhadap x. Fungsi dapatmemiliki satu atau lebih harga nol atau tidak sama sekali. Problem umum diperlakukan dengan transformasisederhana untuk menentukan akar-akar fungsi y = f(x).

4.3.1 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 dipahamimetode ini dapat dijelaskan dengan gambar berikut

f(x) Y

f(xi)

f(xi+1)f(xi+2)

akar

Xi+2 Xi+1 Xi X

Gambar 4.1 Ekstrapolasi metode Newton dengan tangent lokal untuk mencari estimasi akar fungsiberikutnya

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 interseksitangent ini dengan sumbu x ditentukan. Titik interseksi ini ditentukan sebagai harga x baru yaitu Xi+1 dalammencari 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 segitigaantara f(xi), xi dan xi+1 diperhatikan maka diperoleh

1

' )()()(

ii

iii xx

xfxfx

dx

df

Page 41 of 155

kasmui
Rectangle
Page 42: Turbo Pascal 7 untuk Kimia

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 4.2 Diagram alir untuk metode Newton

4.3.2 Metode SecantPada 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

Page 42 of 155

apakah

Xbaru

- 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

kasmui
Rectangle
kasmui
Rectangle
kasmui
Rectangle
kasmui
Rectangle
kasmui
Rectangle
kasmui
Rectangle
kasmui
Rectangle
Page 43: Turbo Pascal 7 untuk Kimia

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 titikawal rasio y/x.

Contoh problem kimia

1. Hitunglah volume spesifik dari pemanasan uap pada 100 atm dan 350 0C menggunakan persamaa keadaanVan 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 polinomial

0)()( 23 abaVVRTbppVVf

Turunan pertama dari persamaan ini

0)(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,086 x 100 + 8,314 x 623) x (51,796)2 + 56047,798 x 51,796 172952,839

f ‘ (51,796) = 3 x 100 (51,796)2 2 x (3,0858 x 100 + 8,314 x 623) x 51,796 + 56047,7975

Page 43 of 155

Page 44: Turbo Pascal 7 untuk Kimia

Dengan 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

2. Suatu elektrolit lemah K2A berdisosiasi menjadi 3 ion

K2A === 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.

4.4 INTEGRASI NUMERIKDalam 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 tidakmemiliki integral analitik. Karena itu alternatif terbaik adalah menggunakan cara integrasi numerik.

Secara prinsip grafik menghitung integrasi suatu fungsi berarti menghitung luas di bawah kurvafungsi f (x) diantara titik awal sampai titik akhir. Konsekuensi dari prinsip sederhana ini maka banyak carauntuk menghitung luas di bawah kurva. Untuk selanjutnya akan dibahas beberapa cara integrasi yang dikenal.

4.4.1 Metode Euler (Aturan Trapezoid)Prinsip metode integrasi Euler adalah menghitung luas di bawah kurva dengan rumus trapesium

Page 44 of 155

Page 45: Turbo Pascal 7 untuk Kimia

f(X4) f(X3)

f(X2) f(X1) f(x)

f(Xo) f(X1)

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.

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

4.4.2 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 ditaksirdengan 2 trapezoid tetapi dengan luas di bawah parabola.

f (x)

Xo X1 X2 X3 X4 X5 X6 X7 X8 X9 Xn

Gambar 4.4 Grafik fungsi integral antara Xo dan Xn menggunakan metode Simpson

Page 45 of 155

Page 46: Turbo Pascal 7 untuk Kimia

Dalam contoh ini interval integrasi (Xo, Xn) dibagi menjadi 10 subinterval. Panjang X subinterval adalah

noxnx

x

n = jumlah subinterval

Untuk 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 metodeSimpson memerlukan interval yang dibagi menjadi 2n subinterval sehingga diperoleh rumus

n

ii

n

iinon

xn xfxfxfxfL

12

112262 )()(4)()(

Contoh problem kimia

1. Kapasitas panas molar pada volume konstan untuk O2 (g) diberikan sebagai berikut273 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 daripadahitungan 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 :

x

x dxexerf0

22)(

Jawaban

Contoh hasil komputasi metode Euler :

Page 46 of 155

Page 47: Turbo Pascal 7 untuk Kimia

x Jumlah iterasi Step Harga erf(x) Erf(x) tabel0,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) tabel0,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.

4.5 PENYELESAIAN NUMERIK PERSAMAAN DIFERENSIAL ORDINER

Banyak fenomena 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 yangtinggi. Penyelesaian secara analitik sangat sulit dipakai untuk memecahkan problem reaksi kimia yangkompleks, padahal faktanya sebagian besar reaksi kimia merupakan reaksi kompleks. Karena itulah sangatbaik dipakai metode numerik untuk menyelesaikan persamaan diferensial yang kompleks.

4.5.1 Metode Euler

Perhatikan 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 variabeltergantung y. Untuk menyelesaikan persamaan diferensial ini berarti harus dicari suatu fungsi y = g(x) yangmemenuhi persamaan diferensial dan kondisi awal sekaligus

Page 47 of 155

Page 48: Turbo Pascal 7 untuk Kimia

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 menghitungg(1) akan diperoleh y = 1,648721. Hasil ini diperoleh menggunakan suatu fungsi analitik karena persamaandiferensial di atas termasuk sederhana. Untuk penyelesaian persamaan diferensial komplek maka umumnyamenggunakan metode numerik.

Langkah pertama untuk memahami metode numerik Euler adalah penaksiran persamaan diferensialdengan suatu persamaan perbedaan

dari ).(' yxfdx

dyy

diperoleh ),( 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 bertahapseperti 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 buktibahwa kesalahan hitung proporsional dengan ukuran step

kesalahan x

Seperti halnya prosedur Euler dalam integrasi maka tidak ada kriteria terprogram untuk terminasiprogram dan perulangan tanpa batas digunakan untuk menghitung lagi dan lagi sampai didapat hasil yanglebih 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 carauntuk memperbaiki metode Euler sederhana adalah menemukan cara terbaik untuk memilih arah darimanasuatu 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

Page 48 of 155

Page 49: Turbo Pascal 7 untuk Kimia

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 korektor

Step prediktor : yi+1 = yi + h.m1

Step korektor : 211 2mm

hyy ii

Jika prosedur prediktor-korektor sederhana ini digunakan maka kesalahan hitungan akan berkurang denganberkurangnya ukuran step h, perbaikan ini tidak hanya proporisonal terhadap h tetapi juga kesalahan adalahfungsi 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 metodenumerik lain yang lebih komples dan canggih.

Metode RK4 mirip dengan metode Euler tetapi dengan besar kesalahan yang makin kecil

kesalahan h4

Algoritma (alur pikir) RK4 membutuhkan 4 besaran yaitu m1, m2, m3, dan m4. Perhatikan suatupersamaan diferensial 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 proporsionaldengan intensitas radiasi D ( kd = koD). Persamaan diferensialnya

Page 49 of 155

Page 50: Turbo Pascal 7 untuk Kimia

].[.].[][ ADkoAkddtAd

Intensitas radiasi D berkurang sesuai dengan hukum waktu eksponensial

D = Do.ekt

Harga parameternya diasumsikan

k = 0,001 s1

Do.ko = 0,001 s1

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. Hasilhitungan 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

oA

ktekDoko

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

Contoh sistem persamaan diferensial adalah problem kinetika kimia untuk reaksi orde pertamakonsekutif

k1 k2

A B C

Untuk penyelesainnya maka diubah dalam bentuk persamaan diferensial

][

][][

][

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.

Mekanisme reaksi sederhana berikut diasumsikan untuk aksi enzim

k1E + S ES

k2ES E + S

Page 50 of 155

Page 51: Turbo Pascal 7 untuk Kimia

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 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 persamaandiferensial yang terbentuk dari mekanisme reaksi.

Untuk suatu sistem mekanisme reaksi yang sederhana atau agak kompleks mungkin dapatdiselesaikan dengan metode numerik Euler dan modifikasinya ataupun Runge-Kutta orde 4, tetapi untuksuatu sistem yang sangat kompleks, yang melibatkan banyak tahapan dasar dalam mekanisme reaksinya, danharga konstanta laju reaksi yang sangat besar, biasa disebut sebagai “stiff equations” (persamaan kaku), makametode numerik biasa tidak dapat digunakan untuk menyelesaikan secara efektif dan efisien, bahkanmungkin akan menghasilkan penyimpangan yang besar. Untuk kasus persamaan diferensial yangkompleksitasnya sangat tinggi maka digunakan metode numerik khusus untuk “stiff equations”. Dikenalistilah “metode khusus untuk kasus khusus”.

4.6 SISTEM LINIER

Ketergantungan linier sering terjadi dalam saintek. Seringnya suatu perilaku ideal diungkapkanmenggunakan bahasa matematika sebagai perilaku ideal. Contoh konkritnya adalaha) ketergantungan pada konsentrasi fungsi termodinamika dalam campuran idealb) analisa campuran dengan kromatografi gasc) laju reaksi sistem reaksi orde pertama terhadap konsentrasi d) tekanan uap dan parsial sebagai fungsi komposisi zat cair (dalam sistem ideal)

Page 51 of 155

Page 52: Turbo Pascal 7 untuk Kimia

e) metode LCAO dalam kimia kuantumf) ketergantungan fluks pada potensial dalam termodinamika irreversibel ( relasi Onsager)

Seringnya perilaku nonlinier dilinierkan dengan pembagian range menjadi interval-interval yangdengannya perilaku linier diasumsikan. Contohnya a) perilaku nonlinier ketergantungan temperatur dari laju reaksi, dipilih interval yang sangat kecil.b) perilaku real termodinamika sering dapat didekatkan dengan ketergantungan linier jika daerah validitas

dibatasi c) hukum batas Raoult dan Henry untuk konsentrasi kecil

Pelinieran dengan pembagian dalam daerah validitas adalah prinsip umum yang tidak hanyadigunakan dalam saintek tetapi juga dalam matematika misalnya derivativ adalah suatu pendekatan linierlokal.

4.6.1 Sistem Persamaan LinierMetode Gauss-Jordan akan didiskusikan di sini, tetapi untuk pemahaman yang lebih baik, suatu

sistem persamaan linier sebaiknya dipecahkan ‘by hand’. Tiga persamaan berikut mengandung 3 besaran takdikenal

4x + 3y + z = 132x y z = 37x + y 3z = 0

Sistem persamaan ini dapat juga ditulis dengan menghilangkan simbol x,y,z dan = sehingga disebut matrikkoefisien dikembangkan

0317

3112

13134

4

1x

Dalam suatu sistem persamaan setiap persamaan dapat dibagi dengan suatu besaran tanpa perubahan vektorpenyelesaian. Agar koefisien pertama persamaan pertama menjadi satu, maka persamaan pertama dibagi 4.

0317

3112

4

13

4

1

4

31

1-ke baris . 7 3-ke baris

1-ke baris . 2 2-ke baris

Sebagai persamaan yang lain dapat juga dikalikan dengan suatu harga dan persamaan tersebut dapatditambahkan atau dikurangkan satu sama lain, koefisien lain dalam kolom pertama dapat dikonvesi menjadinol. Karena itu baris pertama dikalikan 2 dan mengurangkannya dari baris ke-2. Dengan cara yang sama barispertama dikalikan 7 dan mengurangkanya dari baris ke-3.

5

2.

4

91

4

19

4

170

2

19

2

3

2

50

4

13

4

1

4

31

Page 52 of 155

Page 53: Turbo Pascal 7 untuk Kimia

Sekarang elemen diagonal selanjutnya seharusnya dikonversi menjadi 1. Karena itu persamaan kedua dibagidengan elemen diagonal (5/2).

2-ke baris.4

17 3-ke baris

2-bariske.4

3 1-ke baris

4

91

4

19

4

170

5

19

5

310

4

13

4

1

4

31

Konversikan koefisien dalam kolom yang sama menjadi nol. Karena itu persamaan kedua x (3/4)dikurangkan dari persamaan pertama, dan (17/4) dari persamaan kedua ditambahkan kepada persamaanketiga.

11

5x

4

33

5

1100

5

19

5

310

5

2

5

101

Elemen diagonal ketiga menjadi 1 dengan pembagian persamaan ketiga oleh elemen diagonal ketiga

3-ke baris .5

3 2-ke baris

3-ke baris .5

1 1-ke baris

3100

5

19

5

310

5

2

5

101

Koefisien kolom ketiga dikonversi menjadi nol dengan menambahkan atau mengurangkan bagian persamaan ketiga

3100

2010

1001

Sekarang simbol yang disembunyikan dapat ditambahkan lagi pada himpunan persamaan , dan diperoleh

3100

2010

1001

zyx

zyx

zyx

Hasilnya adalah

x = 1 y = 2 z = 3

Page 53 of 155

Page 54: Turbo Pascal 7 untuk Kimia

Contoh problem kimia Penentuan komposisi campuran dengan analisis unsur :

Perhatikan campuran 2 hidrokarbon yang mengandung m1 mol Cp1Hq1, massa molar M1, dan m2mol Cp2Hq2 , massa molar M2 dimana p1, q1, p2, dan q2 adalah koefisien stoikiometrik. Rumus jumlah totalmol karbon, mC dan hidrogen mH sebagai berikut

p1m1 + p2m2 = mC

q1m1 + q2m2 = mH

Massa w1 senyawa Cp1Hq1 didefinisikan dengan w1 = m1M1 dapat dimasukkan kedalam persamaan

p1m1 = (p1/M1)w1

dengan cara yang sama dilakukan untuk yang lain akhirnya akan dihasilkan

(p1/M1)w1 + (p2/M2)w2 = wC/MC

(q1/M1)w1 + (q2/M2)w2 = wH/MH

dimana MC dan MH adalah massa atom relatif karbon dan hidrogen. Rumus ini dapat diubah menjadi

(p1/M1)x1 + (p2/M2)x2 = xC/MC

(q1/M1)x1 + (q2/M2)x2 = xH/MH

dimana x adalah fraksi massa, contoh x1 = w1/(w1+w2). Dalam bentuk matrik diperoleh persamaan

)(

) (

/

/

2

1

2/21/1

2/21/1

H

C

Mx

Mx

x

x

MqMq

MpMp

HH

CC

Prosedur yang sama dapat dengan mudah diaplikasikan pada senyawa yang mengandung 2 atomlebih, misalnya campuran 4 senyawa dengan rumus umum CpHqNrOs,

OO

NN

HH

CC

Mx

Mx

Mx

Mx

x

x

x

x

MsMsMsMs

MrMrMrMr

MqMqMqMq

MpMpMpMp

/

/

/

/

4

3

2

1

4/43/32/21/1

4/43/32/21/1

4/43/32/21/1

4/43/32/21/1

4.6.2 Inversi MatrikMeskipun dalam penyelesaian problem linier selalu memilih suatu penyelesaian menggunakan

sistem persamaan linier, tetapi penting dan bermanfaat juga untuk menghitung inversi matrik. Metode Gauss-Jordan yang digunakan untuk menginversi matrik disebut inversi Gauss-Jordan. Program keduanya sangatmirip. Matrik koefisien dikembangkan dalam program Gauss-Jordan berdimensi n x (n + 1), dikembangkanmenjadi matrik n x 2n untuk inversi.

Prosedur inversi matrik Gauss-Jordan sebagai berikut

4x + 3y + z = 1 0 12x y z = 0 1 07x + y 3z = 0 0 1

Bentuk persamaan ini diubah menjadi bentuk matrik sebagai berikut

Page 54 of 155

Page 55: Turbo Pascal 7 untuk Kimia

1-ke baris.4

7 3-ke baris

1-ke baris.2

1 2-ke baris

4

1x

1

0

0

0

1

0

0317

0112

1134

Baris pertama dibagi 4 dan elemen lainnya ai,1 kolom pertama dibuat menjadi nol dengan penjumlahan danpengurangan yang sesuai. Diperoleh

2-ke baris.10

17 3-ke baris

5

2

2-ke baris.10

3 2-ke baris

104

7

4

19

4

170

012

1

2

3

2

20

004

1

4

1

4

31

x

Elemen diagonal kedua menjadi 1 setelah perkalian persamaan kedua dengan –2/5 . Lagi, elemen atas danbawah dibuat menjadi nol dengan penjumlahan atau pengurangan yang sesuai

11

5

3-ke baris.11

3 2-ke baris

3-ke baris.11

1 1-ke baris

110

17

10

9

5

1100

05

2

5

1

5

310

010

3

10

1

5

101

x

Elemen diagonal ketiga menjadi 1, dan elemen lain kolom 3 menjadi nol dengan operasi baris matrik yangsesuai

11

5

22

17

22

9100

11

3

22

19

22

1010

11

1

11

5

11

2001

Tiga kolom terakhir matrik ini adalah inversi matrik asli.

Contoh problem kimia Perhatikan suatu sistem reaksi kimia dimana 2 reaksi berjalan pada waktu yang sama. Setelah waktu

reaksi tertentu reaksi dikarakterisasi dengan 2 konversi U1 dan U2 sebagai berikut

U1 = 10 + 1.c1 2.c2 + 2.pH + 0,5.(T300)U2 = 10 + 1.c1 1.c2 + 1.2.pH + 0,9.(T300)

Page 55 of 155

Page 56: Turbo Pascal 7 untuk Kimia

c1 adalah konsentrasi zat 1, dan c2 adalah konsentrasi zat 2 dalam mol/l. Menggunakan kondisi reaksi c1 = 2M dan c2 = 2 M, pada temperatur 340 K dan pH 4 diperoleh konversi U1 = 36 % dan U2 = 51,8 %.Problemnya adalah mencari kondisi sehingga kedua konversi akan bertambah 1 %.

Jika variasi hasil dengan variasi parameter diperhatikan akan diperoleh 2 persamaan yang hampirsama, tetapi semua besaran digantikan dengan variasi besaran

U1 = 1. c1 2. c2 + 2. pH + 0,5. TU2 = 1. c1 1. c2 + 1.2. pH + 0,9. T

Disusun dalam bentuk matrik diperoleh

T

pH

c

c

U

U 2

1

.9,02,111

5,0221

2

1

atau dalam suatu notasi singkat dimana S adalah matrik sensitivitas

U = S . k

variasi parameter k yang akan dihitung harus sekecil mungkin. Dalam notasi matrik penyelesaiannya adalah

k = ST . (S . ST )1 .U

Page 56 of 155

Page 57: Turbo Pascal 7 untuk Kimia

5. PEMROGRAMAN GRAFIK TURBO PASCAL(INISIALISASI, PROSEDUR, DAN TRANSFORMASI GRAFIK)

5.1 INISIALISASI MODE GRAFIK PASCAL

Mode grafik Pascal berbeda dengan mode teks. Kalau dalam mode teks resolusi maksimal hanya(80,25), sedangkan dalam mode grafik Pascal misalnya mode grafik VGAHi bisa sampai resolusi (640 x480).

Mode grafik Pascal dapat dilakukan jika ada fasilitas sebagai berikut 1. File Graph.TPU

File Graph.TPU menyediakan berbagai fasilitas atau rutin standar grafik yang dapat dipergunakan untukkeperluan pembuatan grafik.

2. File Driver grafikFile ini berekstensi .BGI misalnya EGAVGA.BGI yang merupakan penggerak/driver EGAVGA. File lainyang dimiliki Pascal adalah ATT.BGI, CGA.BGI, HERC.BGI, IBM8514.BGI, PC3270.BGI, danVESA16.BGI.

3. File Font grafikFile ini berekstensi .CHR, menyediakan model huruf standar yang dimiliki Pascal. File Font yangdimiliki Pascal adalah Bold.chr, Euro.chr, Goth.chr, Lcom.chr, Litt.chr, Sans.chr, Scr.chr, Simp.chr,Trip.chr, dan Tscr.chr.

Contoh layout program grafik sederhana Pascal sebagai berikut

Program Grafik_Sederhana;Uses Graph;Var GraphDriver, GraphMode : Integer;Begin

GraphDriver := detect;Initgraph(GraphDriver,GraphMode,’’);If GraphResult <> grOk then Halt(1);

Cicle(GetmaxX div 2, GetmaxY div 2, GetmaxY div 4);

ReadLn;CloseGraph;

End.

Langkah pertama yang harus dilakukan jika mau bekerja dalam mode grafik adalah memanggil unitGraph dalam klausul Uses sebagai berikut

Uses Graph;

Untuk memilih mode grafik terlebih dahulu melakukan inisialisasi terhadap sistem grafik. Hal inidikerjakan melalui pemanggilan prosedur InitGraph

InitGraph(GraphDriver, GraphMode,’’);

GraphDriver adalah variabel yang digunakan untuk menentukan penggerak/driver grafik sesuaidengan adapter grafik monitor. Contoh driver grafik Pascal adalah CGA, EGA, dan VGA.

GraphMode adalah variabel untuk menentukan mode grafik. Mode grafik yang dipilih harus sesuaidengan driver grafik. Contoh mode grafik adalah CGAHi dengan resolusi (640x200), EGAHi denganrresolusi (640x350), dan VGAHi dengan resolusi (640x480).

String diantara tanda petik 2 (‘ ’) dituliskan untuk menentukan letak file driver grafik yangberekstensi .BGI. Dapat diisi dengan string kosong (‘ ‘) jika driver grafik terletak pada direktori kerja(current directory).

Contoh berikut digunakan pada sistem komputer yang menggunakan adapter grafik VGA

Page 57 of 155

Page 58: Turbo Pascal 7 untuk Kimia

GraphDriver := VGA;GraphMode := VGAHiInitGraph(GraphDriver, GraphMode, ‘C:\TP7\BGI’);

Pascal juga menyediakan pendeteksian otomatis driver atau mode grafik sehingga programer tidakperlu memilih sendiri. Penulisannya sebagai berikut

GraphDriver := Detect;InitGraph(GraphDriver, GraphMode, ‘C:\TP7\BGI’);

Hal penting yang perlu dilakukan setelah memanggil InitGraph adalah memastikan bahwaprosedur tersebut berhasil menjalankan tugasnya dengan memanggil fungsi GraphResult. Fungsi inimemberikan nilai bertipe integer.

If GraphResult <> grOk then Halt(1); {berhenti}

Dapat juga dalam bentuk lain

If GraphResult <> grOk thenBegin

WriteLn(‘Mode grafis tidak berhasil dibuka !’);Halt(1); {berhenti}

End;

Untuk mengakhiri mode grafik dilakukan dengan memanggil prosedur CloseGraph.

5.2 PROSEDUR GRAFIK PASCALElemen dasar dalam mode teks adalah karakter, tetapi elemen dasar mode grafik adalah piksel

(picture elemen) yang berupa sebuah titik yang memiliki koordinat tertentu.Sistem koordinat piksel berupa koordinat kartesian, tersusun atas posisi baris dan kolom. Posisi kiri

atas layar mempunyai koordinat (0,0).

(0,0) (maxX,0)

(0,maxY) (maxX, maxY)

Gambar 5.1 Koordinat layar mode grafik

Banyaknya baris dan kolom mode grafik tergantung pada mode grafik yang digunakan, misal untukmode VGAHi maka jumlah baris sebanyak 480 dan jumlah kolom 640. Semakin banyak piksel yangmenyusun suatu mode grafik maka dikatakan semakin tinggi resolusinya. Untuk mengetahui banyaknyakolom dan baris dapat menggunakan fungsi GetMaxX dan GetMaxY.

5.2.1 Prosedur PutPixelProsedur ini untuk menggambar sebuah titik (piksel) pada titik tertentu. Bentuk deklarasinya adalah

Page 58 of 155

Page 59: Turbo Pascal 7 untuk Kimia

Procedure PutPixel(x,y : Integer; warna : Word);

misalnya

PutPixel(x,y,blue);

menggambar sebuah titik pada baris y dan kolom x dengan warna biru. Nilai warna yang dapat digunakanberkisar antara 0 sampai GetMaxColor. GetMaxColor adalah fungsi untuk mendapatkan nilai warnatertinggi pada mode grafik sekarang.

5.2.2 Prosedur MoveToUntuk meletakkan penunjuk sekarang ke kolom x, baris y. Bentuk deklarasinya adalah

Procedure MoveTo(x,y : Integer);

5.2.3 Prosedur MoveRelUntuk meletakkan penunjuk sekarang ke kolom x+dx, baris y+dy, dengan (x,y) adalah posisi awal

dari penunjuk sekarang. Bentuk deklarasinya adalah

Procedure MoveRel(dx, dy : Integer);

5.2.4 Fungsi GetX dan GetYFungsi ini untuk mengetahui posisi kolom dan baris penunjuk sekarang. Contoh penggunaannya

sebagai berikut

MoveTo(0,0);MoveRel(5,6);PutPixel(GetX, GetY, GetMaxColor);

Prosedur PutPixel akan menggambarkan piksel pada posisi (0+5, 0+6) dengan warna terbesar pada modegrafik sekarang.

5.2.5 Prosedur LineToUntuk menggambarkan garis pada posisi penunjuk sekarang ke koordinat (x, y). Sesudah garis

dibuat penunjuk sekarang berada pada (x,y). Bentuk deklarasinya

Procedure LineTo(x,y : Integer);

5.2.6 Prosedur LineRelUntuk menggambar garis dari posisi penunjuk sekarang ke koordinat (x+dx, y+dy), dengan (x, y)

adalah posisi semula dari penunjuk sekarang. Sesudah garis dibuat, penunjuk sekarang terletak pada (x+dx,y+dy). Bentuk deklarasinya sebagai berikut

Procedure LineRel(dx, dy : Integer);

5.2.7 Prosedur LineUntuk menggambar garis dari posisi (x1, y1) ke (x2, y2). Bentuk deklarasinya sebagai berikut

Procedure Line(x1,y1,x2,y2 : Integer);

Berbeda dengan LineTo dan LineRel, Line tidak mengubah penunjuk sekarang.

5.2.8 Prosedur SetColorUntuk mengatur warna gambar. Bentuk deklarasinya sebagai berikut

Page 59 of 155

Page 60: Turbo Pascal 7 untuk Kimia

Procedure SetColor(warna : Word);

Warna dapat diisi dengan nilai 0 sampai dengan GetMaxColor. GetMaxColor akan memberikan nilaiyang berbeda tergantung pada driver dan mode grafik yang dipakai.

5.2.9 Prosedur SetLineStyleUntuk mengatur ketebalan dan bentuk garis. Bentuk deklarasinya adalah

Procedure SetLineStyle(Bentuk : Word; Pola : Word; Ketebalan : Word)

Bentuk akan menentukan bentuk garis yang akan dibuat

Ketebalan menentukan ketebalan garis.

Pola menentukan bentuk pola garis.

5.2.10Prosedur RectangleUntuk membuat kotak. Bentuk deklarasinya sebagai berikut

Procedure Rectangle(x1, y1, x2, y2 : Integer);

(x1, y1) mendefinisikan pojok kiri atas

(x2, y2) mendefinisikan pojok kanan bawah

5.2.11Prosedur CircleUntuk membuat lingkaran. Bentuk deklarasinya adalah

Procedure Circle(x, y : Integer; radius : Word);

(x, y) menentukan letak pusat lingkaran

radius menyatakan besarnya jari-jari lingkaran

5.2.12Prosedur ArcUntuk membuaat busur lingkaran. Bentuk deklarasinya adalah

Procedure Arc(x, y : Integer; SdtAwal, SdtAkhir, radius : Word);

(x, y) menentukan titik pusat busur

SdtAwal merupakan sudut awal penggambaran busur

SdtAkhir merupakan sudut akhir penggambaran busur

Radius menyatakan jari-jari busur

5.2.13Prosedur EllipseUntuk menggambar busur elips. Bentuk deklarasinya adalah

Procedure ellipse(x,y:Integer;SdtAwal,SdtAkhir:Word;radiusX, radiusY: Word);

5.2.14Prosedur BarUntuk menggambar batang yang pojok kiri atasnya (x1, y1) dan pojok kanan bawahnya adalah (x2,

y2).

Procedure Bar(x1, y1, x2, y2 : Integer);

Page 60 of 155

Page 61: Turbo Pascal 7 untuk Kimia

5.2.15Prosedur Bar3DUntuk menggambar batang berdimensi 3 yang pojok kiri atasnya (x1, y1) dan pojok kanan

bawahnya adalah (x2, y2) dengan kedalaman tertentu. Bentuk deklarasinya adalah

Procedure Bar3D(x1, y1, x2, y2 : Integer; Depth : Word; Top : Word);

Depth adalah kedalaman batang 3 dimensi Top untuk menentukan perlu tidaknya menggambar puncak batang.

5.2.16Prosedur SetFillPatternUntuk menentukan pola arsiran gambar. Bentuk deklarasinya adalah

Procedure SetFillPattern(Pola : FillPatternType; Warna : Word);

Pola menyatakan pola untuk mengarsir

Warna menyatakan warna untuk mengarsir

5.2.17Prosedur SetFillStyleUntuk memilih pola arsir yang tersedia. Bentuk deklarasinya adalah

Procedure SetFillStyle(Pola : Word; Warna : Word);

Pola menyatakan pola untuk mengarsir

Warna menyatakan warna untuk mengarsir

5.2.18Prosedur FloodFillUntuk mengecat suatu area gambar yang tepi-tepinya dilengkapi garis pembatas. Bentu deklarasinya

adalah

Procedure FloodFill(x, y : Integer; pinggir : Word);

(x, y) digunakan sebagai titik awal untuk mengecat

Pinggir menyatakan warna batas pengecatan

5.2.19Prosedur FillEllipseUntuk mengarsir elips. Bentuk deklarasinya adalah

Procedure FillEllipse(x, y : Integer; radX, radY : Word);

(x, y) menyatakan titik pusat elips

radX dan radY menyatakan jari-jari arah horisontal dan vertikal

5.2.20Prosedur PieSliceUntuk menggambar potongan kue. Bentuk deklarasinya adalah

Procedure PieSlice(x, y : Integer; SdtAwal, SdtAkhir, radius : Word);

(x, y) menentukan titik pusat potongan kue

SdtAwal merupakan sudut awal penggambaran potongan kue

SdtAkhir merupakan sudut akhir penggambaran potongan kue

Radius menyatakan jari-jari potongan kue

Page 61 of 155

Page 62: Turbo Pascal 7 untuk Kimia

5.2.21Prosedur SectorUntuk membuat sektor semacam potongan kue dengan jari-jari horizontal dan vertikal yang dapat

ditentukan. Bentuk deklarasinya adalah

Procedure Sector(x,y:Integer;SdtAwal,SdtAkhir,radiusX,radiusY: Word);

RadiusX untuk menentukan jari-jari horizontal sedangkan radiusY menentukan jari-jari vertikal.

5.2.22Prosedur OutTextUntuk menampilkan string yang menjadi argumennya pada posisi penunjuk sekarang. Bentuk

deklarasinya adalah

Procedure OutText(teks : String);

5.2.23Prosedur OutTextXYUntuk menampilkan string yang menjadi argumennya pada posisi (x, y). Bentuk deklarasinya adalah

Procedure OutTextXY(x, y : Integer; teks : String);

Jika ingin menampilkan bilangan dalam mode grafik, misalnya 57, maka bilangan tersebut harus diubah dulumenjadi string dengan menggunakan prosedur Str. Misalnya

Str(57,st);OutText(stimulus);

5.2.24Prosedur SetTextStyleUntuk memilih jenis dan ukuran font (huruf). Bentuk deklarasinya adalah

Procedure SetTextStyle(Font : Word; Arah : Word; Ukuran : Word);

Font menyatakan jenis font (model huruf)

Arah menyatakan arah penulisan teks.

Ukuran untuk mengatur ukuran karakter. Nilai 1 sampai 10 dapat digunakan.

5.2.25Prosedur SetUserCharSizeUntuk mengatur sendiri ukuran font sebatas pada angka-angka yang ditentukan ( 1 10). Bentuk

deklarasinya adalah

Procedure SetUserCharSize(Mx, Dx, My, Dy : Word);

Mx/Dx merupakan faktor yang digunakan untuk menentukan lebar font

My/Dy merupakan faktor yang digunakan untuk menentukan tinggi font

5.2.26Fungsi TextHeightUntuk memperoleh informasi ukuran tinggi teks dalam satuan piksel. Dapat dipakai untuk mengatur

jarak antar teks. Bentuk deklarasinya adalah

Function TextHeight(teks : String) : Word;

Page 62 of 155

Page 63: Turbo Pascal 7 untuk Kimia

5.2.27Fungsi TextWidthUntuk memperoleh informasi ukuran lebar teks dalam satuan piksel. Dapat dipakai untuk mengatur

jarak antar teks. Bentuk deklarasinya adalah

Function TextWidth(teks : String) : Word;

5.2.28Prosedur SetTextJustifyUntuk mengatur penempatan teks secara relatif terhadap koordinat. Bentuk deklarasinya adalah

Procedure SetTextJustify(horis, vert : Word);

Horis menentukan letak teks terhadap kolom x pada koordinat (x, y).

Vert menyatakan letak teks terhadap baris y pada koordinat (x, y).

5.2.29Prosedur SetBkColorUntuk mengubah warna latar belakang pada mode grafik. Bentuk deklarasinya adalah

Procedure SetBkColor(warna : Word);

5.2.30Prosedur ClearDeviceUntuk menghapus layar mode grafik, seperti ClrScr pada mode teks. Bentuk deklarasinya adalah

Procedure ClearDevice;

5.3 TRANSFORMASI GRAFIK PASCALSistem koordinat Kartesian memiliki titik asal yang terletak di sudut kiri bawah. Sedangkan pada

sistem koordinat monitor Pascal titik asal terletak di sudut kiri atas. Jadi ada 2 jenis bidang yang berbedayaitu bidang gambar yang sesungguhnya disebut semesta dan bidang gambar pada monitor yang disebutjendela. Selanjutnya koordinat titik di semesta dinyatakan oleh (x, y) dan koordinat titik di jendela dinyatakanoleh (X, Y).

(xmin,ymax) (xmax,ymax) (Xmin,Ymin) (Xmax,Ymin)

SEMESTA JENDELA (x,y) (X,Y)

(xmin,ymin) (xmax,ymin) (Xmin,Ymax) max,Ymax)

Gambar 5.2 Sistem koordinat Kartesian dan monitor Pascal

Bentuk transformasi sistem koordinat monitor menjadi sistem koordinat Kartesian adalahtransformasi linier sebagai berikut

X = A + B . x Y = C + D . y

A, B, C , dan D adalah konstanta yang akan ditentukan. Dari gambar 5.2 tampak bahwa titik (Xmin,Ymin)sesuai dengan titik (xmin,ymax) dan titik (Xmax,Ymax) sesuai dengan titik (xmax,ymin) sehinggadiperoleh persamaan sebagai berikut

Xmax = A + B . xmax Ymax = C + D . ymin

Page 63 of 155

Page 64: Turbo Pascal 7 untuk Kimia

Xmin = A + B . xmin Ymin = C + D . ymax

(XmaxXmin) = B . (xmaxxmin ) (Ymax Ymin) = D . (yminymax)

(XmaxXmin) (Ymax Ymin) (Ymax Ymin)B = --------------------- D = ---------------------- = --------------------- (xmaxxmin ) (yminymax) (ymaxymin)

A = Xmin B . xmin C = Ymax D . ymin

(Xmax Xmin) (Ymax Ymin)X = Xmin ---------------------- . (xmin x) Y = Ymax ---------------------- . (ymin y)

(xmax xmin ) (ymax ymin)

Page 64 of 155

Page 65: Turbo Pascal 7 untuk Kimia

Page 65 of 155

Page 66: Turbo Pascal 7 untuk Kimia

6. PROGRAM KIMIA KOMPUTASIMENGGUNAKAN TURBO PASCAL(CONTOH SOAL, PROGRAM DAN KETERANGAN PROGRAM)

6.1 RUMUS GAS IDEALMenghitung harga tekanan berdasarkan hukum gas ideal jika jumlah mol, temperatur dan volume

sistem diketahui.Rumus :

V

nRTp

R adala`h konstanta gas dengan harga 0,082054 L.atm/mol.K.

Program Praktikum_1 (input,output); {nama judul}Uses CRT;Const R = 0.082054; {liter.atm/deg.mol}Var n,T,V,p : real;Begin ClrScr; {clear screen}

{input}

Write('Berapa molnya ? '); ReadLn(n); Write('Berapa suhunya dalam Kelvin ? '); ReadLn(T); Write('Berapa volumenya dalam liter ? '); ReadLn(V);

p := (n*R*T)/V; {Rumus gas ideal}

{ output }

WriteLn; {memberi baris kosong untuk pemisah} ClrScr; {clear screen} WriteLn('Output program gas ideal : '); WriteLn; WriteLn('Jumlah mol = ',n:10:4,' mol'); {menampilkan input} WriteLn('Besar suhu = ',T:10:4,' K'); {dalam layar kembali} WriteLn('Besar volume = ',V:10:4,' liter'); WriteLn; {memberi baris kosong untuk pemisah} WriteLn('Besar Tekanannya adalah ',p:10:4,' atm'); {output dari rumus} ReadLn; {untuk menahan tampilan sampai <Enter> ditekan}End.

Keterangan :Layout program ini sangat sederhana, tetapi memuat bagian input dan output program. Input

program berisi data yang harus diberikan untuk dapat menghitung harga tekanan dengan satuan sesuaipermintaan program. Output program menampilkan data input yang diketahui dan harga tekanan hasilhitungan 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.

Page 66 of 155

Page 67: Turbo Pascal 7 untuk Kimia

6.2 MOLARITAS DAN NORMALITASMenghitung harga molaritas dan normalitas larutan dengan rumus :

MolaritasValensiNormalitasMr

PBBJMolaritas

.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.

Program Praktikum_2 (input,output); {nama judul}Uses CRT;Var BJ,Pb,Mr,M,N : real; val : byte;Begin

ClrScr; {clear screen} Write('Berapa berat jenisnya ? '); ReadLn(BJ); Write('Berapa persen beratnya ? '); ReadLn(PB); Write('Berapa massa molekulnya ? '); ReadLn(Mr); Write('Berapa valensi zat ? '); ReadLn(val);

M := (BJ*1000*PB)/(Mr*100); {Rumus molaritas} N := val*M; {Rumus normalitas}

WriteLn; {memberi baris kosong untuk pemisah} ClrScr; {clear screen} WriteLn('Output program Normalitas : '); WriteLn; WriteLn('Besar berat jenis = ',BJ:10:4,' kg/L'); {menampilkan input} WriteLn('Besar % beratnya = ',PB:10:4,' %'); {dalam layar kembali} WriteLn('Besar Mr zat = ',Mr:10:4,' gr/mol'); WriteLn('Besar valensinya = ',val:10); WriteLn; {memberi baris kosong untuk pemisah} WriteLn('Besar Molaritasnya = ',M:10:4,' Molar'); {output dari rumus} WriteLn('Besar Normalitasnya = ',N:10:4,' Normal'); {output dari rumus} ReadLn; {menahan tampilan dari monitor}

End.

Keterangan :Program ini memuat dua rumus untuk menghitung molaritas dan normalitas. Layout program sama denganpraktikum_1. Perhatikan penulisan rumus bagian atas dan bagian bawah. Untuk lebih mantapnya makabagian atas dan bagian bawah masing-masing diberi kurung.

6.3 ROOT MEAN SQUAREUntuk 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

Page 67 of 155

Page 68: Turbo Pascal 7 untuk Kimia

Program Praktikum_3 (input,output); {nama judul}Uses CRT;Const

R = 8.314E+7; {ergs/mol.deg}Var

Crms,Cmp,Cavg,T,M : real;Begin

ClrScr; {clear screen}

{input}

Write('Temperatur dalam K ? '); ReadLn(T); Write('Massa molekul relatif ? '); ReadLn(M);

Crms := sqrt((3*R*T)/M); Cmp := sqrt((2*R*T)/M); Cavg := sqrt((8*R*T)/(pi*M));

{ output }

WriteLn; {baris kosong pemisah} ClrScr; {clear screen} WriteLn('Output program Crms, Cmp, Cavg : '); WriteLn; WriteLn('Temperatur = ',T:10:4,' K'); WriteLn('Massa molekul = ',M:10:4,' gr/mol'); WriteLn; WriteLn('C root-mean-square = ',Crms:10:4,' cm/sec'); WriteLn('C average = ',Cavg:10:4,' cm/sec'); WriteLn('C most probable = ',Cmp:10:4,' cm/sec'); ReadLn; {menahan tampilan}

End.

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 dimasukkansebagai konstanta. Perhatikan penulisan harga konstanta dengan bentuk eksponensial : R = 8.314E+7;Penulisan akar kuadrat menggunakan prosedur sqrt( ).

6.4 FUNGSI ENERGI BEBASFungsi 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 (fungsipartisi 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

dimana qv1 = 1/(1exp(hcw1/kT));

qv2 = 1/(1exp(hcw2/kT));

qv3 = 1/(1exp(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

Program Praktikum_4;Uses CRT;Const A = 27.8778;

B = 14.5092;

Page 68 of 155

Page 69: Turbo Pascal 7 untuk Kimia

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;

Var M,T,F,q,qt,qr,Qv,qv1,qv2,qv3 : real;

Procedure Data; Begin

ClrScr; Write('M = '); readln(M); Write('T = '); readln(T);

End;

Procedure Rumus; begin

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

End;

Procedure hasil; begin

WriteLn('qv1 = ',qv1:10:4); WriteLn('qv2 = ',qv2:10:4); WriteLn('qv3 = ',qv3:10:4); WriteLn('Qv = ',Qv:10:4); WriteLn('qt = ',qt:10:4); WriteLn('qr = ',qr:10:4); WriteLn('q = ',q:10:4); WriteLn('F = ',f:10:4);

End;

(Program Utama)

BeginData;WriteLn;Rumus;Hasil;ReadLn;

End.

Keterangan :

Program dibagi dalam 3 prosedur : data, rumus dan hasil. Masing-masing dibuat dulu, lalu disusunurutannya dalam program utama. Dengan memanggil nama prosedurnya saja maka komputer akanmenjalankan program sesuai urutan dalam program utama. Perhatikan pula cara penulisan konstanta dibagian deklarasi.

6.5 DISTRIBUSI PROBABILITAS

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

Page 69 of 155

Page 70: Turbo Pascal 7 untuk Kimia

dimana M adalah massa molar molekul, R adalah konstanta gas, c adalah kecepatan cahaya, T adalah temperatur

{$N+}Program Praktikum_5;Uses CRT;Const c = 2.99792458E+8; R = 8.31441;

Var M,T : real; rumus1,rumus2,rumus3,rumus4,Dprob : double;

Procedure rumus; Begin 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); End;

Procedure input; Begin Write('Harga Temperatur dalam Kelvin : '); ReadLn(T); Write('Harga Massa Molekuler dalam kg/mol : '); ReadLn(M); End;

Procedure output; Begin WriteLn('Harga Temperatur = ',T:10:4,' K'); WriteLn('Harga Massa Molekuler = ',M:10:4,' kg/mol'); WriteLn; WriteLn('Harga Fraksi molekul = ',Dprob); End;

Begin ClrScr; input; ClrScr; rumus; output; ReadLn;End.

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-16dan ukuran byte 8, dapat juga menggunakan tipe data 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 atasprogram harus diletakkan pengarah kompiler {$N+} sebagai kode pemakaian 80x87 Floating Point.

Penulisan rumus dalam Procedure rumus; juga dibuat bagian-bagian untuk menghindarikesalahan. Prinsipnya adalah untuk memudahkan penulisan rumus dengan betul.

6.6 JUMLAH BILANGAN

Menjumlah bilangan berurutan dari 1 sampai angka tertentu dengan rumus

n

iiJumlah

1

Program Praktikum_6;Uses CRT;Var sumi,n,i : word;

BeginClrScr;

Page 70 of 155

Page 71: Turbo Pascal 7 untuk Kimia

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.

6.7 KOEFISIEN AKTIVITAS

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. Kemudianrumus ini diguna-kan untuk menghitung koefisien aktivitas menggunakan teori Debye-Huckel dengan rumus

ln

2/121

2/121

)(509,0*303,2ln

)(509,0log

e

Izz

Izz

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

Page 71 of 155

Page 72: Turbo Pascal 7 untuk Kimia

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 ClrScr; input; zkali; WriteLn; ionic_strength; koef_aktivitas; ReadLn;End.

Keterangan :Procedure zkali; menghitung perkalian muatan ion ke-i dan harga absolutnya yaitu z1z2. Loopingperkalian 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.

6.8 ENERGI ROTASI DAN FUNGSI PARTISI

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)

Page 72 of 155

Page 73: Turbo Pascal 7 untuk Kimia

{$N+}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(masa1); Write('Masa atom 2 dalam gram/mol = '); ReadLn(masa2); Write('Panjang ikatan dalam Angstrom = '); ReadLn(RIkatan); Write('Temperatur dalam Kelvin = '); ReadLn(T); Write('Maximal J = '); ReadLn(Jmax); end;

Procedure rumus; Begin k := Boltzmann; a := avogadro; h2 := sqr(planck); ri := RIkatan * 1e-10; ri2 := sqr(ri); m1km2 := masa1 * masa2; m1tm2 := masa1 + masa2; 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 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;

Page 73 of 155

Page 74: Turbo Pascal 7 untuk Kimia

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 loopingyaitu Until J > Jmax; Batas looping ini menunjukkan jika J > Jmax maka tidak lagi menghitungbesarnya energi rotasi, maksimal J adalah Jmax. Batas looping dapat juga diungkapkan dengan cara lainmisalnya 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);

6.9 ENERGI AKTIVASIMenghitung energi aktivasi berdasarkan data beberapa temperatur dan konstanta laju reaksi

menggunakan rumus

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

Page 74 of 155

Page 75: Turbo Pascal 7 untuk Kimia

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;

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. Mungkinkurang tepat tetapi sebagai contoh hitungan dapat dipakai untuk perkiraan harga. Dapat juga dicobamenggunakan 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.

6.10 KELARUTANSatu 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 1010 apakah terjadi endapan ?

Program Praktikum_10;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 ');

Page 75 of 155

Page 76: Turbo Pascal 7 untuk Kimia

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; 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 yangbernilai 1/1000 detik. Jadi jika akan menahan tampilan selama 2 detik maka x diberi harga 2000. Untukmemilih 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 hurufatau simbol, sedangkan variabel simpulan bertipe string. Untuk penghematan memori makapanjangnya string dapat dibatasi, misal sebanyal 20 karakter dengan penulisan string[20]. Teknikpengulangan program dilakukan dengan prosedur label yang dideklarasikan dengan harga tertentumisalnya 01. Jika ditekan tombol <enter> dengan kode ASCII #13 maka program akan mengulang mulaidari nomor label ditempatkan yaitu mulai dari letak harga label 01 pada badan program. Jika yangditekan bukan tombol <enter> maka program akan berhenti. Prosedur halt digunakan untuk keluar dariprogram.

6.11 RUMUS EMPIRIS DAN MOLEKULPersen 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 massaC, 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;

Page 76 of 155

Page 77: Turbo Pascal 7 untuk Kimia

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; 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,' %'); WriteLn('Persen Massa H = ',pH:6:2,' %'); WriteLn('Persen Massa O = ',pO:6:2,' %'); WriteLn;

Page 77 of 155

Page 78: Turbo Pascal 7 untuk Kimia

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 Odengan massa atom masing-masing. Menentukan perbandingan mol (pmolC,pmolH, dan pmolO) denganmencari 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 danfaktor pengalinya.

MasRumEm := (koefCe*ArC)+(koefHe*ArH)+(koefOe*ArO); faktor := Mr/MasRumEm; koefCm := round(faktor*koefCe); 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 akanmengubahnya menjadi huruf besar ‘Y’ sehingga sesuai dengan persyaratan berakhirnya program. Jika ditekanselain ‘y’ atau ‘Y’ misalnya ‘t' atau ‘T' maka program akan berulang.

6.12 ENERGI PENGIKAT INTIPada 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 danmassa inti Helium sebesar 4,002776 sma. Hitunglah energi ikatan per atom He dalamsatuan erg , Joule dan MeV !

Page 78 of 155

Page 79: Turbo Pascal 7 untuk Kimia

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}

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 programakan keluar (halt) dan jika penekanan tombol adalah ‘y’ atau ‘Y’ maka program akan mengulang mulaiposisi Label 01 pada badan program.

6.13 TEBAKAN LAMBANG DAN NOMOR ATOMPermainan 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 konstantapada deklarasi.

Program Praktikum_13;

Page 79 of 155

Page 80: Turbo Pascal 7 untuk Kimia

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', '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;

Page 80 of 155

Page 81: Turbo Pascal 7 untuk Kimia

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 ....');

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

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 ....');

Page 81 of 155

Page 82: Turbo Pascal 7 untuk Kimia

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

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

Page 82 of 155

Page 83: Turbo Pascal 7 untuk Kimia

TextBackGround(blue); Case opsi of '1' : Repeat nomor_atom; opsi2 := ReadKey; Until opsi2 = #27; '2' : Repeat Lambang_atom; 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 prosedurRandomize. Jika pada fungsi random tidak dituliskan range-nya maka akan dihasilkan bilangan acakdengan 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 tarikprogram.

Untuk menghapus text dikenalkan prosedur ClrEol (Clear End Of Line) yang akan menghapusmulai posisi X yang ditentukan sampai akhir baris. Untuk menandai salah atau benarnya jawaban diberi tandabel menggunakan prosedur Write(#7); yang akan berfungsi pada mode DOS saja. Dalam program jugadikenalkan penampilan contoh menu program dengan 3 pilihan. Seleksi pilihan menggunakan prosedurReadLn(opsi) dimana opsi bertipe char. Dapat juga prosedur ReadLn(opsi)diganti denganopsi := ReadKey; yang pada pengoperasiannya jika pilihan telah ditekan maka program langsungrunning 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 … 15sesuai dengan harga konstanta warna yang didefinisikan pada CRT. Untuk pengaturan latar belakangdigunakan prosedur TextBackGround(X); dimana X bertipe Byte dengan range 0 … 7 sesuai denganharga konstanta warna yang didefinisikan pada CRT. Nama warna dapat juga langsung dituliskanmenggunakan istilah Inggris seperti yang telah didefinisikan pada CRT.

Untuk menjalankan pilihan opsi digunakan aturan seleksi Case … of. Setiap pilihan opsijuga dapat dilakukan pengulangan program menggunakan looping Repeat … Until. Untuk scanningpenekanan tombol digunakan penjebak opsi2 := ReadKey. Pilihan opsi akan berhenti kalau tombolyang ditekan adalah tombol <Esc> dengan kode ASCII #27, jika tombol lain, misalnya <Enter> maka pilihanopsi tersebut akan diulang. Pengulangan program keseluruhan menggunakan teknik yang sama, jika ditekan<Esc> maka program akan berhenti.

6.14 KONSTANTA LAJU REAKSIMenghitung harga konstanta laju reaksi (k) berbagai orde reaksi apabila data konsentrasi awal ,

waktu dan konsentrasi setiap waktu diketahui. Rumusnya

22

11

.2

1

:3 Orde

.

1

:2 Orde

ln1

:1 Orde

otr

to

tor

t

or

CCtk

CC

CC

tk

C

C

tk

Page 83 of 155

Page 84: Turbo Pascal 7 untuk Kimia

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

Page 84 of 155

Page 85: Turbo Pascal 7 untuk Kimia

Case pilih of 1 : Begin order1; output; End; 2 : Begin order2; output; End; 3 : Begin order3; output; End; End; End;

Procedure output; Begin ClrScr; 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 …..”. Syaratbatasnya 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 kebalikandari looping for… to … do. Untuk memanggil prosedur yang ada di bawahnya dalam program inidikenalkan penggunaan prosedur forward . Listing prosedur Output ada di bawah prosedur Pilihan padahaldalam prosedur Pilihan ada pemanggilan terhadap prosedur Output, untuk mengatasi digunakan prosedurforward 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 ………………………; End;

6.15 KINETIKA KIMIAMenghitung orde reaksi dengan memperhatikan macam data input :

Page 85 of 155

Page 86: Turbo Pascal 7 untuk Kimia

1. Konsentrasi reaktan dan kecepatan awalnyaMisalnya 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 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

Page 86 of 155

Page 87: Turbo Pascal 7 untuk Kimia

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;

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;

Page 87 of 155

Page 88: Turbo Pascal 7 untuk Kimia

Procedure out; Begin GoToXY(5,19); Write('Hasil total : '); for pilih := 1 to jr do Begin 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.

6.16 LAJU EFUSI GASIMenghitug 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 dandalam

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;

Page 88 of 155

Page 89: Turbo Pascal 7 untuk Kimia

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

6.17 OPERASI MATRIK DAN VEKTORMenyelesaikan operasi matrik dan vektor berupa penjumlahan matrik, selisih, perkalian skalar

matrik, perkalian antar matrik, penentuan matrik transpose, harga determinan, matrik inversi, danmenyelesaikan 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

Page 89 of 155

Page 90: Turbo Pascal 7 untuk Kimia

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

Page 90 of 155

Page 91: Turbo Pascal 7 untuk Kimia

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; 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

Page 91 of 155

Page 92: Turbo Pascal 7 untuk Kimia

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

ClrScr; Writeln('Hasil Penjumlahan :'); writemat(n,n,z); end;

Procedure pengurangan; var X,Y,Z : matrik;

Page 92 of 155

Page 93: Turbo Pascal 7 untuk Kimia

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

Page 93 of 155

Page 94: Turbo Pascal 7 untuk Kimia

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; '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 padapembakaran 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). Barispertama untuk banyaknya atom C : suku pertama sebanyak 1 buah , suku kedua sebanyak 0 buah, suku ketigasebanyak 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 reaksihanya terdapat 3 jenis atom yaitu C, O dan H. Tiga kolom pertama adalah bentuk matrik 3 x 3, sedangkankolom keempat adalah vektornya. Hasil penyelesaiannya diperoleh vektor : 0,5; 1,0; 0,5. Tiga komponenvektor ini adalah koefisien dari 3 suku pertama dalam persamaan reaksi, sedangkan koefisien suku terakhirdapat 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

Page 94 of 155

Page 95: Turbo Pascal 7 untuk Kimia

6.18 MEMBUAT FILE UNITSuatu 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 untukprogram besar atau panjang karena harus mengetik ulang dan cara ini boros memori. Untuk mengantisipasinyPascal menyediakan bentuk pemrograman modular berupa file unit yang dapat digunakan untuk membuatlibrari (pustaka) dan membagi program besar menjadi modul-modul yang secara logika berkaitan. Perhatikankembali 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;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.

Page 95 of 155

Page 96: Turbo Pascal 7 untuk Kimia

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) harusdikompilasi 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 dankode ASCII 186 untuk garis tunggal tegak/vertikal

6.19 JARAK ANTAR BIDANG INDEKS MILLERGaCl3 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

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

Page 96 of 155

Page 97: Turbo Pascal 7 untuk Kimia

end;

Procedure Rumus; Begin

if h = 1 then sr1 := pangkat(h,2) else sr1 := 0; r1 := (sr1/pangkat(a,2))*Sqr(sina(alpha));

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 menghilangkanvariabel yang akan diisi, sehingga tampak bentuk tampilan interaktif.

6.20 KELUAR KE DOSFile program yang sudah dikompilasi akan berubah menjadi file berekstensi .EXE, misalnya

Prakt_19.Pas akan berubah menjadi Prakt_19.EXE. Program dapat dijalankan melalui mode DOS denganmenyebutkan nama filenya. Agar tidak keluar dari lingkungan Turbo Pascal, telah disediakan perintah untukkeluar menuju lingkungan DOS yaitu dengan memilih perintah DOS shell pada menu utama File. Kita dapatjuga menjalankan file EXE melalui program Turbo Pascal dengan menggunakan prosedur Exec (‘Namaprogram’, ‘direktori lengkap’).

{$M $4000,0,0 } { 16K stack, no heap }Program Praktikum_20;Uses CRT,DOS;Var NamaProgram, Direktori: string;Begin ClrScr; Write('Nama program dengan ekstensinya : '); ReadLn(NamaProgram); Write('Direktori ',NamaProgram, ': ':15); ReadLn(direktori); SwapVectors; Exec(NamaProgram, Direktori); SwapVectors; if DosError <> 0 then WriteLn('Kesalahan #', DosError) else WriteLn('Exec sukses. ','Kode keluar = ',DosExitCode);End.

Page 97 of 155

Page 98: Turbo Pascal 7 untuk Kimia

Keterangan :Program yang menjalankan prosedur exec harus mengatur stack , minimum heap dan maksimum

heap. Kalau tidak maka akan terjadi kesalahan dengan kode 8 (memori tidak cukup). Contoh penulisannyadapat dilakukan dengan menambahkan baris berikut di awal kode programnya :

{$M 4000, 0, 0}Tanda $4000 menyatakan ukuran stack yang dipakai program dan 0, 0 secara berturut-turut menyatakanjumlah minimum dan maksimum heap yang disediakan.

Dalam program di atas direktori dari program executable harus dituliskan secara lengkap. Sebagaicontoh program yang terletak di direktori C:\TP7 maka harus ditulis seperti itu dan nama programnya harusdisertai ekstensi exe-nya, contohnya Prakt_19.exe.

6.21 MEMBUAT PAKET PROGRAMProsedur Exec dapat digunakan juga untuk membuat program yang lebih besar yaitu sebagai paket

program dengan memanggil beberapa program executable dari satu file program

{$M 4000,0,0}Program Praktikum_21;Uses CRT,dos;Var i,b : integer; opsi,pilih : char;

Function Hbesar(kal : string) : string; begin for b := 1 to length(kal) do kal[b] := UpCase(kal[b]); Hbesar := kal; end;

Procedure programer(xx:byte); begin i := 0;

Repeat TextBackGround(black); TextColor(i); GoToXY(35,23); Write(Hbesar('programer:')); GoToXY(32,24); Write('Drs. Kasmui, M.Si'); GoToXY(28,25); Write(Hbesar('jurusan kimia fmipa unnes')); TextBackGround(cyan); TextColor(i+6); GoToXY(37,xx); Write('-'); delay(300); inc(i,1); Until KeyPressed;

end;

Begin Repeat TextBackGround(black); ClrScr;

TextBackGround(brown); TextColor(yellow); GoToXY(20,2); WriteLn(' PILIHAN FILE TURBO PASCAL : '); TextBackGround(blue); TextColor(white); GoToXY(20,4); WriteLn(' 1. Molaritas/Normalitas '); GoToXY(20,5); WriteLn(' 2. Energi Aktivasi '); GoToXY(20,6); WriteLn(' 3. Tebakan Lambang dan Nomor Atom '); GoToXY(20,7); WriteLn(' 4. Kinetika Kimia '); GoToXY(20,8); WriteLn(' 5. [Keluar] ');

TextColor(red); GoToXY(20,4); WriteLn(' 1.'); GoToXY(20,5); WriteLn(' 2.'); GoToXY(20,6); WriteLn(' 3.'); GoToXY(20,7); WriteLn(' 4.'); GoToXY(20,8); WriteLn(' 5.');

Page 98 of 155

Page 99: Turbo Pascal 7 untuk Kimia

TextColor(yellow); GoToXY(20,10); WriteLn(' Pilihanku : ');

programer(10); TextBackGround(black); TextColor(yellow); GoToXY(20,10); pilih := readkey;

Case pilih of '1' : Exec('Prakt_2.exe',''); '2' : Exec('Prakt_9.exe',''); '3' : Exec('Prakt_13.exe',''); '4' : Exec('Prakt_15.exe',''); '5' : Exit; end; Until pilih in ['1','2','3','4','5'];End.

Keterangan :Program ini merupakan paket program yang menyatukan beberapa program dari file terpisah.

Ditampilkan dengan variasi menu agar lebih menarik. Dikenalkan juga kegunaan lain UpCase untukmembesarkan beberapa karakter / huruf sekaligus dengan menggunakan fungsi length untuk menghitungsecara otomatis panjang string. Direktori file-file tersebut tidak dituliskan karena sama dengan direktoriprogram pemanggilnya sehingga cukup ditulis 2 tanda petik (‘ ‘).

6.22 MENENTUKAN KORELASI DAN PERSAMAAN REGRESI LINIER

Dalam praktikum kimia tertentu sering dihadapkan pasangan data antara data variabel bebas danvariabel terikat (data X dan data Y). Pasangan data ini biasanya digunakan seperti pada penentuan kalibrasi,menghitung kemiringan kurva atau slop, menghitung titik potong kurva dengan sumbu Y atau intersepataupun dalam menghitung korelasi.

Rumus yang digunakan untuk menghitung korelasi (Product-Moment) adalah

2222

2

YYnXXn

YXXYnr

Sedangkan rumus untuk menentukan persamaan regresi adalah

22

.

XXn

YXXYnb

XbaY

n

XbYa

Program Praktikum_22;Uses CRT;Type vector = array[1..100] of real;Var x,y : vector; sl,ic,a,b,ss,dsl,dic,dev : real; cnt,ndp,i : integer; sum1,sum2,sum3,sum4,sum5,sum6, x2y,rsquared,r,dif1,dif2,den, meanx,meany : real; metu,opsi,opsi2,opsi3,opsi4 : char;Label 10,20;

Page 99 of 155

Page 100: Turbo Pascal 7 untuk Kimia

Procedure tampilan(st:string);begin ClrScr; TextBackGround(brown); TextColor(white); for i := 1 to 76 do Write(' '); GoToXY(1,1); Write(st); GoToXY(45,1); Write('<<<<< Basic Statistics 1.1 >>>>>'); GoToXY(1,2); TextBackGround(black); Write('============================================================================');end;

Procedure tutup;const tulis2 = '<Esc>-Keluar'; tulis1 = '<Enter>-Menu Utama';begin TextBackGround(cyan); for i := 1 to 79 do begin GoToXY(i,25); Write(' '); end; TextColor(white); GoToXY(79-length(tulis1),25); Write(tulis1); GoToXY(2,25); Write(tulis2); opsi2:= ReadKey; TextBackGround(black);end;

Procedure input;type kata = string[10]; freal = file of real; fint = file of integer; fkata = file of kata;var nama : kata; fk : fkata; fi : fint; frx,fry : freal;

begin ClrScr; tampilan('Menyimpan data baru'); GoToXY(15,3); Write('NAMA FILE : '); ReadLn(nama); WriteLn; Assign(fk,nama); Assign(fi,nama+'.dat'); Assign(frx,nama+'xi.dat'); Assign(fry,nama+'yi.dat');

ReWrite(fk); ReWrite(fi); ReWrite(frx); ReWrite(fry);

Write(fk,nama); GoToXY(15,4); Write('Banyaknya data sampel = '); ReadLn(ndp); Write(fi,ndp); WriteLn; for cnt := 1 to ndp do begin Write('x(':16,cnt,') = '); ReadLn(x[cnt]);

if x[1] = 0 then x[1] := 0.0000001; Write(frx,x[cnt]); Write('y(':16,cnt,') = '); ReadLn(y[cnt]); Write(fry,y[cnt]); WriteLn;

end; Close(fk); Close(fi); Close(frx); Close(fry);end;

Page 100 of 155

Page 101: Turbo Pascal 7 untuk Kimia

Procedure load;type kata = string[10]; freal = file of real; fint = file of integer; fkata = file of kata;var nama : kata; fk : fkata; fi : fint; frx,fry : freal; ada : boolean; metu : char;label 01;

begin 01: ClrScr; tampilan('Ambil data tersimpan'); TextBackGround(black); TextColor(yellow); GoToXY(25,3); Write('NAMA FILE : '); ReadLn(nama);

{$I-} Assign(fk,nama); Assign(fi,nama+'.dat'); Assign(frx,nama+'xi.dat'); Assign(fry,nama+'yi.dat');

Reset(fk); Reset(fi); Reset(frx); Reset(fry);

{$I+} ada := (IOResult = 0); if ada then begin Read(fk,nama);

Read(fi,ndp); for cnt := 1 to ndp do begin Read(frx,x[cnt]); if x[1] = 0 then x[1] := 0.0000001; end; for cnt := 1 to ndp do begin Read(fry,y[cnt]); end;

end; if not ada then begin ClrScr;

TextColor(lightred); Write(#7); GoToXY(20,5); Write('FILE TIDAK ADA ! '); GoToXY(20,7); Write('Tekan <Esc> Keluar atau <Enter> Ulang'); metu := ReadKey; if metu = #27 then halt else GoTo 01;

end; Close(fk); Close(fi); Close(frx); Close(fry);end;

Procedure calc;begin sum1 := ndp; sum2 := 0; sum3 := 0; sum4 := 0; sum5 := 0; sum6 := 0; for cnt := 1 to ndp do begin sum2 := sum2 + x[cnt];

sum3 := sum3 + y[cnt]; sum4 := sum4 + sqr(x[cnt]); sum5 := sum5 + x[cnt]*y[cnt]; sum6 := sum6 + sqr(y[cnt]);

Page 101 of 155

Page 102: Turbo Pascal 7 untuk Kimia

end; meanx := sum2/ndp; meany := sum3/ndp;end;

Procedure sum;begin ClrScr; TextColor(white); tampilan('Ringkasan hitungan data '); GoToXY(20,3); WriteLn(' data = ',sum1:10:0); GoToXY(20,4); WriteLn(' X = ',sum2:10:4); GoToXY(20,5); WriteLn(' Y = ',sum3:10:4); GoToXY(20,7); WriteLn('Mean X = ',meanx:10:4); GoToXY(20,8); WriteLn('Mean Y = ',meany:10:4); GoToXY(20,9); WriteLn(' X2 = ',sum4:10:4); GoToXY(20,10);WriteLn(' Y2 = ',sum6:10:4); GoToXY(20,11);WriteLn(' XY = ',sum5:10:4); GoToXY(20,13);WriteLn(' X2Y = ',x2y:10:4);end;

Procedure regresi;var answer : char;

function sqsum : real; var ts : real; cnt : integer;

begin ts := 0;

for cnt := 1 to ndp do ts := ts + sqr(y[cnt] - ic - sl*x[cnt]); sqsum := ts;

end; {sqsum}

begin den := sum1*sum4-sqr(sum2);

dif1 := sum3*sum4-sum5*sum2; dif2 := sum1*sum5-sum2*sum3; ic := dif1/den; a := ic; sl := dif2/den; b := sl; ss := sqsum; dev := sqrt(ss/(ndp-2)); dic := dev*sqrt(sum4/den); dsl := dev*sqrt(sum1/den);

end;

Procedure korelasi;begin ClrScr; r := ((ndp*sum5)-(sum2*sum3))/ sqrt(((ndp*sum4)-sqr(sum2))*((ndp*sum6)-sqr(sum3))); rsquared := sqr(r); TextBackGround(black); TextColor(white); tampilan('Korelasi Product-Moment'); GoToXY(5,5); Write('Harga koef korelasi (r) = ',r:8:4); GoToXY(5,6); Write('Harga koef determinasi (r2) = ', rsquared:8:4,' (pengaruhnya sebesar ',100*rsquared:8:2,' %)'); TextColor(yellow); GoToXY(5,8); Write('Interpretasi harga r : '); TextColor(white); if r > 0 then begin if (r > 0) and (r < 0.2) then begin

GoToXY(5,9); Write('1. Korelasi positif/langsung sangat rendah'); end;

if (r >= 0.2) and (r < 0.4) then begin GoToXY(5,9); Write('1. Korelasi positif/langsung rendah');

Page 102 of 155

Page 103: Turbo Pascal 7 untuk Kimia

end;

if (r >= 0.4) and (r < 0.6) then begin GoToXY(5,9); Write('1. Korelasi positif/langsung agak rendah'); end;

if (r >= 0.6) and (r < 0.8) then begin GoToXY(5,9); Write('1. Korelasi positif/langsung cukup'); end;

if (r >= 0.8) and (r <= 1) then begin GoToXY(5,9); Write('1. Korelasi positif/langsung tinggi'); end;

end;

if r = 0 then begin GoToXY(5,9); Write('1. Tidak terdapat hubungan linier'); end;

if r < 0 then begin if (r < 0) and (r > -0.2) then

begin GoToXY(5,9); Write('1. Korelasi negatif/tak langsung sangat rendah'); end;

if (r <= -0.2) and (r > -0.4) then begin GoToXY(5,9); Write('1. Korelasi negatif/tak langsung rendah'); end;

if (r <= -0.4) and (r > -0.6) then begin GoToXY(5,9); Write('1. Korelasi negatif/tak langsung agak rendah'); end;

if (r <= -0.6) and (r > -0.8) then begin GoToXY(5,9); Write('1. Korelasi negatif/tak langsung cukup'); end;

if (r <= -0.8) and (r >= -1) then begin GoToXY(5,9); Write('1. Korelasi negatif/tak langsung tinggi'); end;

end;end;

Procedure menu1;begin ClrScr; tampilan('REGRESI LINIER/NONLINIER'); TextBackGround(brown); TextColor(yellow); GoToXY(30,3); Write(' ASAL DATA '); TextBackGround(blue); TextColor(white); GoToXY(30,5); Write(' '); GoToXY(30,6); Write(' 1. Data baru '); GoToXY(30,7); Write(' 2. Ambil data '); GoToXY(30,8); Write(' 3. Menu Utama '); GoToXY(30,9); Write(' '); TextColor(yellow); GoToXY(30,6); Write(' 1'); GoToXY(30,7); Write(' 2'); GoToXY(30,8); Write(' 3'); TextBackGround(cyan); TextColor(yellow); GoToXY(30,11); Write(' Pilihan : '); GoToXY(43,11); opsi := ReadKey; TextBackGround(black); case opsi of

Page 103 of 155

Page 104: Turbo Pascal 7 untuk Kimia

'1' : begin input; calc; end; '2' : begin load; calc; end; '3' : exit; end;end;

Procedure Menu_Utama;Begin ClrScr; TextBackGround(black); tampilan('REGRESI KORELASI'); TextBackGround(brown); TextColor(yellow); GoToXY(25,3); Write(' PILIHAN '); TextBackGround(blue); TextColor(white); GoToXY(25,5); Write(' '); GoToXY(25,6); Write(' 1. Deskripsi Data '); GoToXY(25,7); Write(' 2. Persamaan Regressi Linier '); GoToXY(25,8); Write(' 3. Korelasi '); GoToXY(25,9); Write(' 4. Keluar '); GoToXY(25,10); Write(' '); TextBackGround(red); TextColor(yellow); GoToXY(25,12); Write(' Pilihanku : '); GoToXY(48,12); opsi4 := ReadKey; TextBackGround(black); TextColor(white);

end;

begin 10: textbackground(black); Menu_Utama; textbackground(black); case opsi4 of '1': begin ClrScr; menu1; if opsi = '3' then GoTo 10; sum; end;

'2': begin ClrScr; menu1; if opsi = '3' then GoTo 10; regresi;

tampilan('Persamaan garis regresi linier'); GoToXY(15,5); Write('Y = ',ic:12:8,' + ',sl:12:8,' * X');

WriteLn; GoToXY(15,6); Write('Slope (b) = ',sl:10:8,' +/- ',dsl:10:8); GoToXY(15,7); Write('Intercept (a) = ',ic:10:8,' +/- ',dic:10:8);

end; '3': begin ClrScr; menu1; if opsi = '3' then GoTo 10; korelasi; end; '4': Halt; end; tutup; if opsi2 = #13 then GoTo 10 else halt;end.

Keterangan :

Page 104 of 155

Page 105: Turbo Pascal 7 untuk Kimia

Dalam program menghitung harga korelasi dan koefisien persamaan regresi sangat penting datayang dimasukkan disimpan dalam media disk bukan hanya dalam memori komputer sehingga dapat diambilkembali tanpa mengetik ulang. Cara ini sangat membantu untuk pasangan data yang banyak.

Untuk merekan data dalam disket perlu dipersiapkan file yang akan dibuat. File data tersebutdideklarasikan dulu dalam bentuk

type kata = string[10]; freal = file of real; fint = file of integer; fkata = file of kata; var nama : kata; fk : fkata; fi : fint; frx,fry : freal;

Bagian prosedur perekaman data yang penting adalah

Assign(fk,nama); Assign(fi,nama+'.dat'); Assign(frx,nama+'xi.dat'); Assign(fry,nama+'yi.dat');

ReWrite(fk); ReWrite(fi); ReWrite(frx); ReWrite(fry);

Write(fk,nama); GoToXY(15,4); Write('Banyaknya data sampel = '); ReadLn(ndp); Write(fi,ndp); WriteLn; for cnt := 1 to ndp do begin Write('x(':16,cnt,') = '); ReadLn(x[cnt]);

if x[1] = 0 then x[1] := 0.0000001; Write(frx,x[cnt]); Write('y(':16,cnt,') = '); ReadLn(y[cnt]); Write(fry,y[cnt]); WriteLn;

end; Close(fk); Close(fi); Close(frx); Close(fry);

Keterangan :Assign digunakan untuk mengaitkan variabel file dengan nama fileRewrite untuk membuat fileWrite untuk merekam data Close untuk menutup file

Sedangkan bagian prosedur pengambilan data kembali yang penting adalah

{$I-} Assign(fk,nama); Assign(fi,nama+'.dat'); Assign(frx,nama+'xi.dat'); Assign(fry,nama+'yi.dat');

Reset(fk); Reset(fi); Reset(frx); Reset(fry);

{$I+} ada := (IOResult = 0); if ada then begin Read(fk,nama);

Read(fi,ndp);

Page 105 of 155

Page 106: Turbo Pascal 7 untuk Kimia

for cnt := 1 to ndp do begin Read(frx,x[cnt]); if x[1] = 0 then x[1] := 0.0000001; end; for cnt := 1 to ndp do begin Read(fry,y[cnt]); end;

end; if not ada then begin ClrScr;

TextColor(lightred); Write(#7); GoToXY(20,5); Write('FILE TIDAK ADA ! '); GoToXY(20,7); Write('Tekan <Esc> Keluar atau <Enter> Ulang'); metu := ReadKey; if metu = #27 then halt else GoTo 01;

end; Close(fk); Close(fi); Close(frx); Close(fry);

Keterangan :

Assign digunakan untuk mengaitkan variabel file dengan nama fileReset untuk membuka file yang sudah adaRead untuk membaca file yang dibukaClose untuk menutup fileTanda {$I-} dan {$I+} digunakan untuk menangani kesalahan input-output (I/O), misalnya disket penuh dan file yang dicari tidak ada.

Page 106 of 155

Page 107: Turbo Pascal 7 untuk Kimia

7. PEMROGRAMAN NUMERIK TURBO PASCAL UNTUK KIMIA (CONTOH SOAL, PROGRAM DAN KETERANGAN PROGRAM)

7.1 PERUBAHAN ENTROPI SISTEM

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

Program Numerik_1;Uses CRT;Const n = 1; F = 96485; dt = 0.1;Var tc,Tk,dS,dCp : real;

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 dE_f(tc:real):real; begin dE_f := (E(tc+dt)-E(tc))/dt; end;

Function d2E_f(tc:real):real; begin d2E_f := (dE_f(tc+dt)-dE_f(tc))/dt; end;

Function dE_b(tc:real):real; begin dE_b := (E(tc)-E(tc-dt))/dt; end;

Function d2E_b(tc:real):real; begin d2E_b := (dE_b(tc)-dE_b(tc-dt))/dt; end;

Function dE_c(tc:real):real; begin dE_c := (E(tc+dt)-E(tc-dt))/(2*dt); end;

Function d2E_c(tc:real):real; begin

Page 107 of 155

Page 108: Turbo Pascal 7 untuk Kimia

d2E_c := (dE_c(tc+dt)-dE_c(tc-dt))/(2*dt); end;

Procedure Input; begin Write('Berapa harga t Celcius = ');ReadLn(tc); end;

Procedure Output; begin ClrScr; WriteLn; WriteLn('t = ',tc:8:3); WriteLn('dt = ',dt:8:3); WriteLn; WriteLn('nilai dE_Forward = ',dE_f(tc)); WriteLn('nilai d2E_Forward = ',d2E_f(tc)); WriteLn; WriteLn('nilai dE_Backward = ',dE_b(tc)); WriteLn('nilai d2E_Backward = ',d2E_b(tc)); WriteLn; WriteLn('nilai dE_Central = ',dE_c(tc)); WriteLn('nilai d2E_Central = ',d2E_c(tc)); end;

Procedure dSdCp; begin dS := n*F*dE_c(tc); Tk := tc + 273; dCp := n*F*Tk*d2E_c(tc); WriteLn; WriteLn('dS = ',dS:8:4); WriteLn('dCp = ',dCp:8:4); end;Begin clrscr; input; WriteLn; Output; dSdCp; ReadLn;End.

Keterangan :

Secara analitik diperoleh harga yang hampir sama yaitu

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

7.2 VOLUME SPESIFIK VAN DER WAALS

Hitunglah volume spesifik dari pemanasan uap pada 100 atm dan 350 0C menggunakan persamaan keadaanVan der Waals

RTbVV

ap ))((

2

dimana

Page 108 of 155

Page 109: Turbo Pascal 7 untuk Kimia

)./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

Program Numerik_2;Uses CRT;Const dx = 0.001; presisi = 1e-15; R = 8.314;Var x,p,T,pc,Tc,a,b, awal,akhir,Vest,Va,Vb,Vc : real; n : integer; opsi : char;Label ulang;

function f(x : real) : real; begin f :=(p*x*x*x)-((b*p+R*T)*x*x)+(a*x)-(a*b); end;

Function df(x : real) : real; begin df := (f(x+dx) - f(x-dx))/(2*dx); end;

Procedure Input; begin WriteLn('Data awal :'); Write('T kritis = '); ReadLn(Tc); Write('p kritis = '); ReadLn(pc); Write('Tekanan = '); ReadLn(p); Write('Temperatur = '); ReadLn(T); end;

Procedure Hitung_KabVo; begin a := (27*sqr(R)*sqr(Tc))/(64*pc); b := (R*Tc)/(8*pc); Va := (R*T)/p; Vest := Va; end;

Procedure Newton(var a,b : real); begin Vb := Va - (f(Va)/df(Va));

awal := Va; akhir := Vb; Va := Vb;

end;

Begin Ulang: ClrScr; Input; Hitung_KabVo; WriteLn('Volume awal = ',Vest:8:4); WriteLn; WriteLn('i':5,'V[n+1]':20,'V[n]':20);

n := 1; repeat

Page 109 of 155

kasmui
Rectangle
kasmui
Rectangle
kasmui
Rectangle
kasmui
Rectangle
kasmui
Rectangle
kasmui
Rectangle
kasmui
Rectangle
kasmui
Rectangle
kasmui
Rectangle
kasmui
Rectangle
kasmui
Rectangle
kasmui
Rectangle
kasmui
Rectangle
kasmui
Rectangle
kasmui
Rectangle
kasmui
Rectangle
Page 110: Turbo Pascal 7 untuk Kimia

Newton(Va,Vb);WriteLn(n:5,akhir:20:10,awal:20:10);inc(n,1);

until abs(akhir-awal) < presisi; opsi := ReadKey; if opsi = #27 then Halt else GoTo Ulang;End.

Keterangan:

7.3 DERAJAT DISOSIASI

Suatu elektrolit lemah K2A berdisosiasi menjadi 3 ion

K2A === 2K+ + A2-

Konstanta kesetimbangannya Kc dapat dituliskan sebagai berikut

1

234 0ccK

Hitung derajat disosiasi jika diketahui Kc = 0.01 dan co = 0,001 !

Program Numerik_3;Uses CRT;Const dx = 1e-10;Label ulang;Var a,b,c,Co,Kc : real; i : integer; opsi : char;

Function f(x : real) : real; begin f := 4*Sqr(Co)*x*x*x + Kc*x - Kc; end;

Procedure Data; begin Co := 0.001; Kc := 0.01; Write('Titik awal : '); ReadLn(a); Write('Titik akhir : '); readLn(b); WriteLn; end;

Procedure Secant(var a,b,c : real); begin

c := b-(b-a)/(f(b)-f(a))*f(b);a := b;b := c;

end;

Begin Ulang: ClrScr; Data; WriteLn('i':5,'y[n+1]':15,'y[n]':15); WriteLn; i := 2; repeat Secant(a,b,c);

WriteLn(i:5,c:15:10,a:15:10);

Page 110 of 155

kasmui
Rectangle
kasmui
Rectangle
Page 111: Turbo Pascal 7 untuk Kimia

inc(i,2); until abs(f(b)-f(a)) < dx; WriteLn; WriteLn('Jadi akarnya adalah ',c:15:10); opsi := ReadKey; if opsi = #27 then Halt else GoTo Ulang;End.

Keterangan :

7.4 GABUNGAN METODE SECANT DAN NEWTON-RAPHSON

Program Numerik_4;Uses CRT;Const dV = 0.001; presisi = 1e-15; R = 8.314;

Var V,d2,p,T,pc,Tc,a, b,Va,Vb,Vc : real; Vi : array[0..10000] of real; n : integer; opsi,opsi2 : char;Label satu,dua;

function fV(V : real) : real; begin fV :=(p*V*V*V)-((b*p+R*T)*V*V)+(a*V)-(a*b); end;

function dfV(V : real) : real; begin dfV := (fV(V+dV)-fV(V))/dV;

end;

function d2fV(V : real) : real; begin d2fV := (dfV(V+dV)-dfV(V))/dV; end;

Procedure hitam; begin TextBackGround(black); TextColor(white); end;

Procedure TInput;

begin TextBackGround(blue); TextColor(white); GotoXY(5,3); Write('Data awal : '); TextColor(lightred); GotoXY(5,3); Write('D'); TextBackGround(blue); TextColor(white); GotoXY(5,5); Write('T kritis = '); GotoXY(5,6); Write('p kritis = '); GotoXY(5,7); Write('Tekanan = '); GotoXY(5,8); Write('Temperatur = '); end;

Page 111 of 155

Page 112: Turbo Pascal 7 untuk Kimia

Procedure Input; begin TextBackGround(blue); TextColor(white); GotoXY(5,3); Write('Data awal :'); TextColor(lightred); GotoXY(5,3); Write('D'); TextBackGround(blue); TextColor(white); GotoXY(5,5); Write('T kritis = '); ReadLn(Tc); GotoXY(5,6); Write('p kritis = '); ReadLn(pc); GotoXY(5,7); Write('Tekanan = '); ReadLn(p); GotoXY(5,8); Write('Temperatur = '); ReadLn(T); end;

Procedure Ruang_Hasil; var i,rc : byte; begin Randomize; rc := random(255); TextBackGround(rc); TextColor(white); for i := 1 to 16 do begin GotoXY(30,2+i); Write(' '); GotoXY(35,4); Write('Metode'); GotoXY(35,10); Write('Iterasi :'); GotoXY(35,13); Write('Volume spesivik VDW = '); end; end;

Procedure Hitung_KabVo; begin a := (27*sqr(R)*sqr(Tc))/(64*pc); b := (R*Tc)/(8*pc); Vi[0] := (R*T)/p; end;

Procedure Secant; Var Va,Vb,Vc : real;

Procedure Iterasi(var a,b,c : real); Begin

Vc := Vb-(Vb-Va)/(fV(Vb)-fV(Va))*fV(Vb);Va := Vb;Vb := Vc;

end; begin Hitung_KabVo; Ruang_Hasil; GotoXY(35,4); ClrEol; GotoXY(35,4); Write('Metode Secant:');

GotoXY(35,6); Write('Titik awal : '); ReadLn(Va); Repeat

GotoXY(35,7); Write('Titik akhir : '); ReadLn(Vb); Until Vb <> Va; writeln; GotoXY(35,10); Write('Iterasi :'); GotoXY(35,11); ClrEol;

n := 2; repeat Iterasi(Va,Vb,Vc);

GotoXY(35,11); Write(n:1,Vc:20:10,Vb:18:10);inc(n,2);

until abs(fV(Vb)-fV(Va)) < dV; GotoXY(35,13); ClrEol; GotoXY(35,13); Write('Volume spesivik VDW = ',Vc:19:10); end;

Page 112 of 155

Page 113: Turbo Pascal 7 untuk Kimia

Procedure Newton_Raphson; begin Hitung_KabVo; Ruang_Hasil; GotoXY(35,4); ClrEol; GotoXY(35,4); Write('Metode Newton-Raphson :'); GotoXY(35,6); ClrEol;

GotoXY(35,7); ClrEol; GotoXY(35,10); Write('Iterasi :'); GotoXY(35,11); ClrEol; n := 0; Repeat n := n + 1; V := Vi[n-1]; d2 := dfV(V)-d2fV(V)*fV(V)/(2*dfV(V)); Vi[n] := V-(fV(V)/d2); GotoXY(35,11); Write(n:1,V:20:10,Vi[n]:20:10); Until abs(Vi[n]-V) <= presisi; GotoXY(35,13); ClrEol; GotoXY(35,13); Write('Volume spesifik VDW = ',Vi[n]:19:10); end;

Procedure TMetode; begin TextBackGround(black); TextBackGround(blue); TextColor(yellow); GoToXY(5,10); Write(' Metode : '); TextColor(lightred); GoToXY(5,10); Write(' M'); TextBackGround(blue); TextColor(white); GoToXY(5,12); Write(' '); GoToXY(5,13); Write(' 1. Secant '); GoToXY(5,14); Write(' 2. Newton-Raphson'); GoToXY(5,15); Write(' 3. Input Awal '); GoToXY(5,16); Write(' 4. Exit '); GoToXY(5,17); Write(' '); end;

Procedure Pilihan_Metode; begin TextBackGround(black); TextBackGround(blue); TextColor(yellow); GoToXY(5,10); Write(' Metode : '); TextColor(lightred); GoToXY(5,10); Write(' M'); TextBackGround(blue); TextColor(white); GoToXY(5,12); Write(' '); GoToXY(5,13); Write(' 1. Secant '); GoToXY(5,14); Write(' 2. Newton-Raphson'); GoToXY(5,15); Write(' 3. Input Awal '); GoToXY(5,16); Write(' 4. Exit '); GoToXY(5,17); Write(' '); TextColor(lightred); GoToXY(5,13); Write(' 1'); GoToXY(5,14); Write(' 2'); GoToXY(5,15); Write(' 3'); GoToXY(5,16); Write(' 4'); TextBackGround(blue); TextColor(yellow); GoToXY(5,19); Write(' Pilihan : '); GoToXY(18,19); opsi := ReadKey; TextBackGround(black); case opsi of '1' : begin Secant;

Page 113 of 155

Page 114: Turbo Pascal 7 untuk Kimia

end; '2' : begin Newton_Raphson; end; '3' : exit; '4' : Halt; end; end;

Begin hitam; satu: ClrScr; Tinput; TMetode; Ruang_Hasil; input; dua: Pilihan_Metode; if opsi = '3' then goTo satu; opsi2 := ReadKey; Case UpCase(opsi2) of 'M' : GoTo dua; 'D' : GoTo satu; #27 : Halt; else GoTo dua; end;End.

Keterangan :

7.5 PERUBAHAN ENERGI DALAM

Kapasitas panas molar pada volume konstan untuk O2 (g) diberikan sebagai berikut273 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 ?

Program Numerik_5;Uses crt;Label ulang;Var t0,tf,h,sum : real; N : integer; opsi : char;

procedure input; begin

WriteLn; Write('Titik awal : '); ReadLn(t0); Write('Titik akhir : '); ReadLn(tf); Write('Jumlah iterasi : '); ReadLn(N);

end;

function y(x : real):real; begin y := 17.23 + 13.61E-3*x - 42.55E-7*x*x; end;

Page 114 of 155

Page 115: Turbo Pascal 7 untuk Kimia

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;

WriteLn(N:5,sum:20:8); end;

Begin Ulang: ClrScr; input; WriteLn; WriteLn('Bagian':5,'Hasil':19); WriteLn; Integrasi_Euler; opsi := ReadKey; if opsi = #13 then GoTo Ulang else Halt;end.

Keterangan :

7.6 FUNGSI ERROR

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 :

x

x dxexerf0

22)(

{$N+}Program Numerik_6;Uses CRT;Label ulang;Var a,b,h,subi,x,error : Extended; i,ii,akhir,N : integer; opsi : char;

Function f(x : real) : real; begin f := exp(-x*x); end;

Procedure Data_awal; begin

Page 115 of 155

Page 116: Turbo Pascal 7 untuk Kimia

Write('Banyaknya bagian : '); ReadLn(N); Write('Batas bawah : '); ReadLn(a); Write('Batas atas : '); ReadLn(b); end;

Procedure Integrasi_Simpson; begin h := (b-a)/N; {panjang subinterval}

subi := f(a); {subinterval pertama, f(xo)}

i := 1; Repeat x := a + (i*h); subi := subi + 4*f(x); {luas total subinterval gasal} inc(i,2); until (i > N-1);

i := 2; Repeat x := a + (i*h); subi := subi + 2*f(x); {luas total subinterval genap} inc(i,2); until (i > N-2);

subi := subi + f(b); {f(b) adalan subinterval akhir} subi := subi * (h/3); {Hasil total integrasi}

error := (2/sqrt(pi))*subi; {rumus error function} WriteLn; Writeln(N:5,subi:15:10,error:15:10,h:15:10); end;

Begin Ulang: ClrScr; Data_awal; WriteLn; Writeln('N':5,'Hsl Integrasi':15,'Erf(x)':15,'h':15); WriteLn; Integrasi_Simpson; opsi := ReadKey; if opsi = #13 then GoTo Ulang else Halt;End.

Keterangan :

7.7 INTEGRASI UNTUK FUNGSI POLINOMIAL

{$N+}Program Numerik_7;Uses CRT;Label satu,dua;Var t0,tf,h,subi,x : Real; a,b,c,d,e,p,q,r,s,t : Real; koef,eksp : array[1..5] of real; js,i,ii,akhir,N : integer; opsi2,opsi : char;

Page 116 of 155

Page 117: Turbo Pascal 7 untuk Kimia

Function pangkat (x1 : real; x2 : real) : extended; begin pangkat := exp (x2*ln (x1) ); end;

Procedure Data_awal; begin TextBackGround(black); TextColor(white); GotoXY(1,1); Write('Data awal : '); TextColor(lightred); GotoXY(1,1); Write('D'); WriteLn; TextColor(white); Write('Banyaknya suku Pers Polinomial (maks 5) : '); ReadLn(js); WriteLn; WriteLn('Masukkan harga koefisien setiap sukunya : '); WriteLn;

for i := 1 to js do begin Write('Koef suku (',i,') = '); ReadLn(koef[i]); end;

WriteLn; WriteLn('Masukkan harga pangkat setiap sukunya : '); WriteLn;

for i := 1 to js do begin Write('Pangkat suku (',i,') = '); ReadLn(eksp[i]); end;

for i := 1 to 5 do begin if i > js then begin koef[i] := 0; eksp[i] := 0; end else begin a := koef[1]; b := koef[2]; c := koef[3]; d := koef[4]; e := koef[5];

p := eksp[1]; q := eksp[2]; r := eksp[3]; s := eksp[4]; t := eksp[5]; end; end;

WriteLn; Write('Batas bawah : '); ReadLn(t0);

Write('Batas atas : '); ReadLn(tf); Write('Banyaknya bagian : '); ReadLn(N); end;

Function f(x : real) : real; begin f := a*pangkat(x,p)+b*pangkat(x,q)+c*pangkat(x,r)+d*pangkat(x,s)+ e*pangkat(x,t); end;

procedure Integrasi_Euler;

Page 117 of 155

Page 118: Turbo Pascal 7 untuk Kimia

var h,x : real; i : integer; begin subi := 0;

h := (tf-t0)/N; x := t0; subi := subi + f(x)/2;

for i := 1 to N-1 do begin x := t0 + i*h; subi := subi + f(x);

h := (tf-t0)/N; end;

x := tf; subi := subi + f(x)/2; subi := subi*h;

if subi < 1e5 then begin GoToXY(50,14); Write(N:1,subi:15:6,h:10:6); end else begin GoToXY(50,14); Write(N:1,subi:15,h:10:6); end; end;

Procedure Integrasi_Simpson; begin h := (tf-t0)/N; {panjang subinterval}

subi := f(t0); {subinterval pertama, f(xo)}

akhir := round(N/2); for i := 1 to akhir do begin

ii := i + (i-1); {urutan bilangan ganjil} x := t0 + (ii*h); subi := subi + 4*f(x); {luas total subinterval ganjil} end;

if (N Mod 2) = 0 then akhir := Round(N/2) + 1 else akhir := Round(N/2); for i := 2 to akhir do

begin ii := i + (i-2); {urutan bilangan genap} x := t0 + (ii*h); subi := subi + 2*f(x); {luas total subinterval genap} end;

subi := subi + f(tf); {f(b) adalan subinterval akhir} subi := subi * (h/3); {Hasil total integrasi}

WriteLn; if subi < 1e5 then begin GoToXY(50,14); Write(N:1,subi:15:6,h:10:6); end else begin GoToXY(50,14); Write(N:1,subi:15,h:10:6); end; end;

Procedure Pilihan_Metode; begin TextBackGround(black); TextBackGround(blue); TextColor(yellow); GoToXY(50,3); Write(' Metode : ');

Page 118 of 155

Page 119: Turbo Pascal 7 untuk Kimia

TextColor(lightred); GoToXY(50,3); Write(' M'); TextBackGround(blue); TextColor(white); GoToXY(50,5); Write(' '); GoToXY(50,6); Write(' 1. Euler '); GoToXY(50,7); Write(' 2. Simpson '); GoToXY(50,8); Write(' 3. Data Awal '); GoToXY(50,9); Write(' 4. Exit '); GoToXY(50,10); Write(' '); TextColor(lightred); GoToXY(50,6); Write(' 1'); GoToXY(50,7); Write(' 2'); GoToXY(50,8); Write(' 3'); GoToXY(50,9); Write(' 4'); TextBackGround(black); opsi := ReadKey; case opsi of '1' : begin WriteLn; GoToXY(50,12); Write('N':1,'Hsl Integrasi':17,'h':10); Integrasi_Euler; end; '2' : begin WriteLn; GoToXY(50,12); Write('N':1,'Hsl Integrasi':17,'h':10); Integrasi_Simpson; end; '3' : exit; '4' : Halt; end; end;

Begin satu: ClrScr; Data_awal; dua: Pilihan_Metode; if opsi = '3' then goTo satu; opsi2 := ReadKey; Case UpCase(opsi2) of 'M' : GoTo dua; 'D' : GoTo satu; #27 : Halt; else GoTo dua; end;End.

Keterangan :

7.8 SISTEM PERSAMAAN DIFERENSIAL : EULER

Konstanta dekomposisi kd suatu zat A selama suatu dekomposisi radiolitik diasumsikan proporsional denganintensitas radiasi D ( kd = koD). Persamaan diferensialnya

].[.].[][ ADkoAkddtAd

Intensitas radiasi D berkurang sesuai dengan hukum waktu eksponensial

D = Do.ekt

Page 119 of 155

Page 120: Turbo Pascal 7 untuk Kimia

Harga parameternya diasumsikan

= 0,001 s1

Do.ko = 0,001 s1

Jika harga ini digunakan akan diperoleh persamaan diferensial berikut

].[.001,0 .001,0][ Ae tdtAd

Selesaikan persamaan diferensial tersebut !

Program Numerik_8;Uses CRT;Label Awal;Var i,N : integer; x,x0,t,h,t0,tf,m : real; opsi : Char;

Procedure Input; begin Write('Titik awal : '); readLn(t0); Write('Titik akhir : '); readLn(tf); Write('Jumlah iterasi : '); readLn(N); Write('Variabel awal : '); readLn(x0); WriteLn; end;

Procedure Output(t,x : real); begin Write(i:7,t:20:4,' '); Write(x:25:10,' ');

WriteLn; end;

Procedure SPD_Euler_1;

Function f(t,x : real) : real; begin f := -0.001*exp(-0.001*t)*x; end;

begin t := t0; x := x0; h := (tf-t0)/N;

for i := 1 to N do begin m := f(t,x);

x := x + (h*m); t := t0 + i*h; output(t,x);

end; end;

Begin Awal: ClrScr; Input; SPD_Euler_1; opsi := ReadKey; if opsi = #13 then GoTo Awal else Halt;End.

Page 120 of 155

Page 121: Turbo Pascal 7 untuk Kimia

Keterangan :

7.9 SISTEM PERSAMAAN DIFERENSIAL : MODIFIED EULER

Program Numerik_9;Uses CRT;Label Awal;Var i,N : integer; x,x0,t,h,t0,tf,m1,m2 : real; opsi : Char;

Procedure Input; begin Write('Titik awal : '); readLn(t0); Write('Titik akhir : '); readLn(tf); Write('Jumlah iterasi : '); readLn(N); Write('Variabel awal : '); readLn(x0); WriteLn; end;

Function f(t,x : real) : real; begin f := exp(-Sqr(x)); end;

Procedure Output(t,x : real); begin Write(i:7,t:20:4,' '); Write(x:25:10,' ');

WriteLn; end;

Procedure SPD_Modified_Euler; begin t := t0; x := x0; h := (tf-t0)/N; for i := 1 to N do begin m1 := f(t,x);

m2 := f(t+h,x+h*m1); x := x + (h/2)*(m1+m2); t := t0 + i*h; output(t,x);

end; end;

Begin Awal: ClrScr; Input; Write('i':7,'t':20,' '); WriteLn('X':25,' '); WriteLn; SPD_Modified_Euler; opsi := ReadKey; if opsi = #13 then GoTo Awal else Halt;

Page 121 of 155

Page 122: Turbo Pascal 7 untuk Kimia

End.

Keterangan:

7.10 SISTEM PERSAMAAN DIFERENSIAL : RUNGE-KUTTA 4

Program Numerik_10;Uses CRT;Label Awal;Var i,N : integer; x,x0,t,h,t0,tf,m1,m2,m3,m4 : real; opsi : Char;

Procedure Input; begin Write('Titik awal : '); readLn(t0); Write('Titik akhir : '); readLn(tf); Write('Jumlah iterasi : '); readLn(N); Write('Variabel awal : '); readLn(x0); WriteLn; end;

Function f(t,x : real) : real; begin f := -0.001*exp(-0.001*t)*x; end;

Procedure Output(t,x : real); begin Write(i:7,t:20:4,' '); Write(x:25:10,' ');

WriteLn; end;

Procedure SPD_Runge_Kutta_4; begin t := t0; x := x0; h := (tf-t0)/N;

for i := 1 to N do begin m1 := f(t,x);

m2 := f(t+h/2,x+(h*m1/2));m3 := f(t+h/2,x+(h*m2/2));m4 := f(t+h,x+h*m3);x := x + (h/6)*(m1+2*m2+2*m3+m4);t := t0 + i*h;output(t,x);

end; end;

Begin Awal: ClrScr; Input; SPD_Runge_Kutta_4; opsi := ReadKey; if opsi = #13 then GoTo Awal else Halt;

Page 122 of 155

Page 123: Turbo Pascal 7 untuk Kimia

End.

Keterangan:

7.11 SISTEM PERSAMAAN DIFERENSIAL SIMULTAN : EULER

Program Numerik_11;Uses CRT;Const dim = 3;Type mat = array[1..dim] of real;Label Awal;Var i,j,N : integer; t,h,t0,tf : real; y,y0,m : mat; opsi : Char;

Procedure Input; begin Write('Titik awal : '); readLn(t0); Write('Titik akhir : '); readLn(tf); Write('Jumlah iterasi : '); readLn(N); for i := 1 to dim do begin Write('Variabel awal ',i,' : '); readLn(y0[i]); end; WriteLn; end;

Function f(i : integer; t : real; y : mat) : real; begin Case i of 1: f := -0.05*y[1]; 2: f := 0.05*y[1]-0.01*y[2];

3: f := 0.01*y[2]; end; end;

Procedure Output(i: integer;t : real;y : mat); begin Write(j:5,t:15:4,' '); Write(y[1]:15:6,' ',y[2]:15:6,' ',y[3]:15:6);

WriteLn; end;

Procedure SPD_Euler_1; begin t := t0; y := y0; h := (tf-t0)/N;

for j := 1 to N do begin for i := 1 to dim do m[i] := f(i,t,y);

for i := 1 to dim do y[i] := y[i] + (h*m[i]);t := t0 + j*h;

output(j,t,y); end; end;

Page 123 of 155

Page 124: Turbo Pascal 7 untuk Kimia

Begin Awal: ClrScr; Input; Write('Iter':5,'t':15,' '); WriteLn('y[1]':15,' ','y[2]':15,' ','y[3]':15); WriteLn; SPD_Euler_1; opsi := ReadKey; if opsi = #13 then GoTo Awal else Halt;End.

Keterangan :

7.12 SISTEM PERSAMAAN DIFERENSIAL SIMULTAN : MODIFIED EULER (1)

Program Numerik_12;Uses CRT;Const dim = 3;Type mat = array[1..dim] of real;Label Awal;Var i,j,N : integer; t,h,t0,tf : real; y,y0,yEuler,m1,m2 : mat; opsi : Char;

Procedure Input; begin Write('Titik awal : '); readLn(t0); Write('Titik akhir : '); readLn(tf); Write('Jumlah iterasi : '); readLn(N); for i := 1 to dim do begin Write('Variabel awal ',i,' : '); readLn(y0[i]); end; WriteLn; end;

Function f(i : integer; t : real; y : mat) : real; begin Case i of 1: f := -0.05*y[1];

2: f := 0.05*y[1]-0.01*y[2];3: f := 0.01*y[2];

end; end;

Procedure Output(i: integer;t : real;y : mat); begin Write(j:5,t:15:4,' '); Write(y[1]:15:6,' ',y[2]:15:6,' ',y[3]:15:6);

WriteLn; end;

Procedure SPD_Modified_Euler; begin t := t0;

Page 124 of 155

Page 125: Turbo Pascal 7 untuk Kimia

y := y0; h := (tf-t0)/N;

for j := 1 to N do begin for i := 1 to dim do m1[i] := f(i,t,y); for i := 1 to dim do yEuler[i] := y[i] + (h*m1[i]); for i := 1 to dim do m2[i] := f(i,t+h,yEuler);

for i := 1 to dim do y[i] := y[i] + 0.5*h*(m1[i]+m2[i]);t := t0 + j*h;output(j,t,y);

end; end;

Begin Awal: ClrScr; Input; Write('Iter':5,'t':15,' '); WriteLn('y[1]':15,' ','y[2]':15,' ','y[3]':15); WriteLn; SPD_Modified_Euler; opsi := ReadKey; if opsi = #13 then GoTo Awal else Halt;End.

Keterangan :

7.13 SISTEM PERSAMAAN DIFERENSIAL SIMULTAN : MODIFIED EULER (2)

Program Numerik_13;Uses CRT;Const dim = 6;Type mat = array[1..dim] of real;Label Awal;Var i,j,N : integer; t,h,t0,tf : real; y,y0,yEuler,m1,m2 : mat; opsi : Char;

Procedure Input; begin Write('Titik awal : '); readLn(t0); Write('Titik akhir : '); readLn(tf); Write('Jumlah iterasi : '); readLn(N); for i := 1 to dim do begin Write('Variabel awal ',i,' : '); readLn(y0[i]); end; WriteLn; end;

Function f(i : integer; t : real; y : mat) : real; begin Case i of 1: f := -y[1]-10*y[1]*y[2];

Page 125 of 155

Page 126: Turbo Pascal 7 untuk Kimia

2: f := 2*y[1]-10*y[1]*y[2]+4*y[4]-40*Sqr(y[2]);3: f := 10*y[1]*y[2];

4: f := 10*y[1]*y[2]-4*y[4]+20*Sqr(y[2]); 5: f := 4*y[4]; 6: f := 20*Sqr(y[2]); end; end;

Procedure Output(t : real;y : mat); begin Write(t:5:2,' '); Write(y[1]:10:4,' ',y[2]:10:4,' ',y[3]:10:4); Write(y[4]:10:4,' ',y[5]:10:4,' ',y[6]:10:4);

WriteLn; end;

Procedure SPD_Modified_Euler; begin t := t0; y := y0; h := (tf-t0)/N;

for j := 1 to N do begin for i := 1 to dim do m1[i] := f(i,t,y); for i := 1 to dim do yEuler[i] := y[i] + (h*m1[i]); for i := 1 to dim do m2[i] := f(i,t+h,yEuler);

for i := 1 to dim do y[i] := y[i] + 0.5*h*(m1[i]+m2[i]);t := t0 + j*h;output(t,y);

end; end;

Begin Awal: ClrScr; Input; Write('t':5,' '); Write('y[1]':10,' ','y[2]':10,' ','y[3]':10); WriteLn('y[4]':10,' ','y[5]':10,' ','y[6]':10); WriteLn; SPD_Modified_Euler; opsi := ReadKey; if opsi = #13 then GoTo Awal else Halt;End.

Keterangan :

7.14 SISTEM PERSAMAAN DIFERENSIAL SIMULTAN : RUNGE-KUTTA 4

Program Numerik_14;Uses CRT;Const dim = 6;Type mat = array[1..dim] of real;Label Awal;Var i,j,N : integer; t,h,t0,tf : real;

Page 126 of 155

Page 127: Turbo Pascal 7 untuk Kimia

y,y0,m1,m2,m3,m4,R1,R2,R3,R4 : mat; opsi : Char;

Procedure Input; begin Write('Titik awal : '); readLn(t0); Write('Titik akhir : '); readLn(tf); Write('Jumlah iterasi : '); readLn(N); for i := 1 to dim do begin Write('Variabel awal ',i,' : '); readLn(y0[i]); end; WriteLn; end;

Function f(i : integer; t : real; y : mat) : real; begin

Case i of1: f := -y[1]-10*y[1]*y[2];2: f := 2*y[1]-10*y[1]*y[2]+4*y[4]-40*Sqr(y[2]);3: f := 10*y[1]*y[2];4: f := 10*y[1]*y[2]-4*y[4]+20*Sqr(y[2]);5: f := 4*y[4];6: f := 20*Sqr(y[2]);end;

end;

Procedure Output(t : real;y : mat); begin Write(t:5:4,' '); Write(y[1]:10:4,' ',y[2]:10:4,' ',y[3]:10:4); Write(y[4]:10:4,' ',y[5]:10:4,' ',y[6]:10:4);

WriteLn; end;

Procedure SPD_Runge_Kutta_4; begin t := t0; y := y0; h := (tf-t0)/N;

for j := 1 to N do begin

for i := 1 to dim do m1[i] := f(i,t,y);for i := 1 to dim do R1[i] := y[i]+(h*m1[i]/2);for i := 1 to dim do m2[i] := f(i,t+(h/2),R1);for i := 1 to dim do R2[i] := y[i]+(h*m2[i]/2);for i := 1 to dim do m3[i] := f(i,t+h/2,R2);for i := 1 to dim do R3[i] := y[i]+(h*m3[i]); for i := 1 to dim do m4[i] := f(i,t+h,R3);for i := 1 to dim do Y[i] := Y[i] + (h/6)*

(m1[i]+2*m2[i]+2*m3[i]+m4[i]); t := t0 + j*h;

output(t,y); end; end;

Begin Awal: ClrScr; Input; Write('t':5,' '); Write('y[1]':10,' ','y[2]':10,' ','y[3]':10); WriteLn('y[4]':10,' ','y[5]':10,' ','y[6]':10); WriteLn; SPD_Runge_Kutta_4; opsi := ReadKey; if opsi = #13 then GoTo Awal else Halt;End.

Page 127 of 155

Page 128: Turbo Pascal 7 untuk Kimia

Keterangan :

7.15 PENYELESAIAN SISTEM PERSAMAAN LINIER : GAUSS JORDAN

Program Numerik_15;Uses CRT;Var mat : array[1..20,1..21] of real; flag : boolean; dim : integer; opsi : char;Label 01;

Procedure Input; var row,col: integer; begin ClrScr; WriteLn; Write('Jumlah persamaan = '); ReadLn(dim); WriteLn; WriteLn('Input matrik koeffisien dikembangkan :'); for row := 1 to dim do Begin GoToXY(1,row+5); Write('Baris ',row,':'); for col := 1 to dim do Begin GoToXY((col*10),row+5); Write('-'); GoToXY((col*10),row+5); ReadLn(mat[row,col]); end; GoToXY(dim*10+10,row+5); Write('-'); GoToXY(dim*10+10,row+5); Read(mat[row,dim+1]); end; end;

Procedure Hitung_Gauss_Jordan; var row,col,i,hlp : integer;

Procedure Tukar; var cnt : integer; zw : real; begin for cnt := 1 to dim+1 do begin zw := mat[row,cnt]; mat[row,cnt] := mat[hlp,cnt]; mat[hlp,cnt] := zw; end; end;

Procedure normalisasi; var cnt : integer; fac : real;

Page 128 of 155

Page 129: Turbo Pascal 7 untuk Kimia

begin fac := 1/mat[row,row]; for cnt := 1 to dim+1 do mat[row,cnt] := fac*mat[row,cnt]; end;

Procedure substraksi; var cnt : integer; fac : real; begin fac := -mat[col,row]; for cnt := 1 to dim+1 do mat[col,cnt] := mat[col,cnt] + fac*mat[row,cnt]; end;

Begin i := 1; for row := 1 to dim do

begin hlp := row; repeat if (mat[hlp,row] <> 0) then begin tukar; normalisasi; for col := 1 to dim do if (col <> row) then substraksi; hlp := dim; end else i := hlp; hlp := hlp + 1; until (hlp >= dim);

if (i = dim) then begin WriteLn('No solution !'); ReadLn; exit; end; end; end;

Procedure hasil; var row : integer; begin WriteLn; Writeln('Hasil penyelesaian sistem persamaan linier :'); WriteLn; for row := 1 to dim do WriteLn('X(',row,') = ',mat[row,dim+1]:8:4); end;

Begin 01: ClrScr; input; Hitung_Gauss_Jordan; hasil;

Page 129 of 155

Page 130: Turbo Pascal 7 untuk Kimia

opsi := ReadKey; if opsi = #13 then goto 01 else Halt;End.

Keterangan :

7.16 MATRIKS INVERS GAUSS JORDAN

Program Numerik_16;Uses CRT;Var mat,omat,imat,cmat : array[1..20,1..21] of real; dim : integer; opsi : char;Label 01;

Procedure Input; var row,col: integer; begin ClrScr; WriteLn; Write('Jumlah persamaan = '); ReadLn(dim); WriteLn; WriteLn('Input matrik koeffisien dikembangkan :'); for row := 1 to dim do Begin GoToXY(1,row+5); Write('Baris ',row,':'); for col := 1 to dim do Begin GoToXY((col*10),row+5); Write('-'); GoToXY((col*10),row+5); ReadLn(mat[row,col]); end; end; end;

Procedure Invers_Gauss_Jordan; var row,col,i,hlp : integer;

Procedure Tukar; var cnt : integer; zw : real; begin for cnt := 1 to dim do begin zw := omat[row,cnt]; omat[row,cnt] := omat[hlp,cnt]; omat[hlp,cnt] := zw; zw := imat[row,cnt]; imat[row,cnt] := imat[hlp,cnt]; imat[hlp,cnt] := zw; end; end;

Page 130 of 155

Page 131: Turbo Pascal 7 untuk Kimia

Procedure normalisasi; var cnt : integer; fac : real; begin fac := 1/omat[row,row]; for cnt := 1 to dim do begin omat[row,cnt] := fac*omat[row,cnt]; imat[row,cnt] := fac*imat[row,cnt]; end; end;

Procedure substraksi; var cnt : integer; fac : real; begin fac := -omat[col,row]; for cnt := 1 to dim do begin omat[col,cnt] := omat[col,cnt] + fac*omat[row,cnt]; imat[col,cnt] := imat[col,cnt] + fac*imat[row,cnt]; end; end;

Procedure Kontrol; var rcnt,ccnt,hcnt : integer; begin for rcnt := 1 to dim do begin for ccnt := 1 to dim do begin cmat[rcnt,ccnt] := 0; for hcnt := 1 to dim do cmat[rcnt,ccnt] := cmat[rcnt,ccnt]+ mat[rcnt,hcnt]*imat[hcnt,ccnt] end; end; end;

Begin for row := 1 to dim do begin for col := 1 to dim do begin omat[row,col] := mat[row,col]; if (col = row) then imat[row,col] := 1 else imat[row,col] := 0; end; end; i := 1; for row := 1 to dim do begin hlp := row; repeat if (omat[hlp,row] <> 0) then begin tukar;

Page 131 of 155

Page 132: Turbo Pascal 7 untuk Kimia

normalisasi; for col := 1 to dim do if (col <> row) then substraksi; hlp := dim; end else i := hlp; hlp := hlp + 1;

until (hlp >= dim);

if (i = dim) then begin WriteLn('No solution !'); ReadLn; exit; end; end; Kontrol; end;

Procedure hasil; var col,row : integer; begin ClrScr; Writeln; WriteLn('Matrik :'); for row := 1 to dim do begin for col := 1 to dim do Write(mat[row,col]:8:4); WriteLn; end; WriteLn; WriteLn('Matrik Inversi :'); for row := 1 to dim do begin for col := 1 to dim do Write(imat[row,col]:8:4); WriteLn; end; WriteLn; WriteLn('Matrik Kontrol :'); for row := 1 to dim do begin for col := 1 to dim do Write(cmat[row,col]:8:4); WriteLn; end; end;

Begin 01: ClrScr; input; Invers_Gauss_Jordan; hasil; opsi := ReadKey; if opsi = #13 then goto 01 else Halt;End.

Page 132 of 155

Page 133: Turbo Pascal 7 untuk Kimia

Keterangan :

Page 133 of 155

Page 134: Turbo Pascal 7 untuk Kimia

SOAL-SOAL:

1. Reaksi dekomposisi paralel orde 1

tktk

tk

tk

k

k

ee

e

e

kkdt

d

kdt

d

kdt

d

2o

1oo

2o

1o

21

1

1

2

1

1B][1A][[C][C]

.B][][B

.]A[][A

adalah aanalitikny Solusi

]B[]A[C

]B[B

]A[A

adalah lnyadiferensiapersamaan Bentuk

CB

CA

2. Mekanisme reaksi konsekutif orde campuran

DC

CBA

2

1

k

k

3. Mekanisme reaksi konsekutif reversible orde campuran

DC

CBA

2

1

3

k

k

k

4. Mekanisme dekomposisi ozon

2

23

21

33

2OOO

MOOMO

k

k

k

5. Mekanisme dekomposisi N2O5

24

3

223

32

321

252

2NONONO

ONONONONO

MNONOMON

k

k

k

k

6. Mekanisme pirolisis etana menjadi etuna

625

52

5224

62

423

52

5242

623

31

62

HCHCH

HCHHCH

HHCHC

HCCHHCCH

2CHHC

k

k

k

k

k

7. Suatu mekanisme reaksi

Page 134 of 155

Page 135: Turbo Pascal 7 untuk Kimia

33

422

21

22

SONOSONO

2NOO2NO

k

k

k

k

8. Suatu model mekanisme Oregonator

4,25,0

.YZ

QXX

Z2XXB

PYX

XYA

5

4

3

2

1

f

fk

k

k

k

k

A, dan B adalah reaktan, X, Y, dan Z adalah intermediet, sedangkan P, dan Q adalahproduk. Buatlah program menggunakan metode Euler dan Runge-Kutta orde 4 denganmemvariasikan harga konstanta laju reaksi dan harga konsentrasi reaktan sehinggadiperoleh suatu hasil konsentrasi yang berosilasi (naik turun).

9. Buatlah program untuk menghitung harga panas molar spesifik (Cv) menurut rumus Debye dengan menggunakan metoda Simpson atau lainnya dengan rumus berikut :

z

x

xdx

e

ex

z

RCv 0 2

4

31

.9

dimana

z = T

= temperatur Debye sebesar 600 KT = temperatur KelvinR = 8,3144 J/K.molx = z

Hitunglah harga Cv untuk rentang temperatur T dari 373 K sampai 393 K dengan interval 1 derajat menggunakan looping !

10. Suatu asam lemah HA berdisosiasi dalam air sesuai persamaan reaksi berikut

HA === H+ + A-

H2O === H+ + OH-

Pada keadaan kesetimbangan dapat diturunkan konsentrasi asam total HA sebagai berikut

HpH

H

KwH

Ka

KwHHA

log

2

Page 135 of 155

Page 136: Turbo Pascal 7 untuk Kimia

Buatlah program untuk menyelesaikan akar persamaan tersebut dalam menghitung konsentrasi H menggunakan metoda Newton dan hitung harga pH asam lemah tersebut !Diketahui :[HA] = 0,1 mol/LiterKa = 1,85 x 10-5

Kw = 1 x 10-14

11. Menentukan harga pH suatu larutan buffer pada penambahan asam kuat dengan persamaan reaksi

HA === H+ + A-

H2O === H+ + OH-

GA === G+ + A-

Pada keadaan kesetimbangan dapat diturunkan konsentrasi asam total HA sebagai berikut

Ka

HCl

H

Kw

Ka

GAH

Ka

HHA

][

][

][1].[

][][

2

Buatlah program untuk menyelesaikan akar persamaan tersebut dalam menghitung konsentrasi H menggunakan metoda Newton dan hitung harga pH asam lemah tersebut !Diketahui :[HA] = 1 mol/LiterKa = 1,85 x 10-5

Kw = 1 x 10-14

[HCl] = 0,1 mol/Liter[GA] = 0,1 mol/Liter

12. Menggunakan rumus termodinamika

pT

GS

dan kontribusi vibrasi pada energi Gibbs untuk molekul diatomik dalam suatu gas sempurna

fckT

hx

eRTG x

.

dimana

1ln

k = 1,38066 x 10-23 J/K

Page 136 of 155

Page 137: Turbo Pascal 7 untuk Kimia

h = 6,62617 x 10-34 J.sc = 2,9979 x 108 m/sf = 2,3307 x 105 m-1

Hitunglah harga S menggunakan metoda numerik dan bandingkan harga S jika diselesaikansecara analitik dengan rumus

x

x ee

xRS 1ln

1

13. Jika energi internal akibat vibrasi adalah

1

..

ev

bkhR

E

fc

xTk

h

b.

..

maka tentukan nilai Cv, dimana

v

vv T

EC

diketahui

R = 8,314 J mol-1K-1

h = 6,62 x 10-34 J.skb = 1,381 x 10-23 J K-1

c = 2,9979 x 108 m/sf = 2,3307 x 105 m-1

Page 137 of 155

Page 138: Turbo Pascal 7 untuk Kimia

8. PEMROGRAMAN GRAFIK TURBO PASCAL UNTUK KIMIA

(CONTOH SOAL, PROGRAM DAN KETERANGAN PROGRAM)

8.1 GAMBAR SEDERHANA : GAMBAR 1

Program gambar_1;Uses CRT,Graph;Var i,j,x1,x2,x3,y1,y2,y3 : integer; color : word; opsi : char;

Procedure Buka_grafik;var GraphDriver,GraphMode,ErrorCode : integer;begin GraphDriver := Detect; InitGraph(GraphDriver,GraphMode,''); ErrorCode := GraphResult; if ErrorCode <> GrOk then Halt;end;

procedure Status(pesan : string);begin SetTextStyle(smallfont, HorizDir, 6); SetTextJustify(CenterText, TopText); SetLineStyle(SolidLn, 0, NormWidth); SetFillStyle(EmptyFill, 0); Bar(0, 19*GetMaxY div 20, getmaxX, GetMaxY); Rectangle(0, 19*GetMaxY div 20, getmaxX, GetMaxY); OutTextXY(getmaxX div 2, 20*GetMaxY div 21, pesan);end;

procedure tunggu;const Esc = #27;var Ch : char;begin SetColor(white); Status('Esc keluar atau press a key...'); Repeat Until KeyPressed; Ch := ReadKey; if ch = #0 then ch := ReadKey; if Ch = Esc then Halt(0) else ClearDevice;end;

procedure judul(Header : string);begin SetColor(lightred); SetTextStyle(SansserifFont, HorizDir, 2); SetTextJustify(CenterText, TopText); OutTextXY(GetMaxX div 2, 2, Header); SetColor(white);end;

procedure tulisan(x,y : integer; header : string; warna,besar : word);begin SetColor(warna); SetTextStyle(SansserifFont, HorizDir, besar); SetTextJustify(leftText, TopText); OutTextXY(x, y, Header);end;

procedure about;const nama : array[1..23] of string = ('C','O','M','P','U','T','A','T','I','O','N','A','L',

Page 138 of 155

Page 139: Turbo Pascal 7 untuk Kimia

' ','C','H','E','M','I','S','T','R','Y');var nama2 : string; j,x,i : integer;

begin for i := 1 to 4 do begin Rectangle(i,i,GetMaxX-i,GetMaxY-i); end; Repeat Randomize;

i := random(500); if i = 7 then i := 10; SetBkColor(7); SetColor(i); SetUserCharSize(2,2,1,1); SetTextStyle(TriplexFont,HorizDir,UserCharSize); x := 30; for j := 1 to 23 do begin OutTextXY(70+20*j,x,nama[j]);

delay(15); end; SetColor(blue); SetUserCharSize(1,2,1,3); SetTextStyle(DefaultFont,HorizDir,UserCharSize); OutTextXY(260,150,'O L E H :'); SetColor(i+blink); SetUserCharSize(2,2,1,1); SetTextStyle(DefaultFont,HorizDir,UserCharSize); nama2 := 'DRS. KASMUI, M.Si'; OutTextXY(228,195,nama2); SetColor(blue); SetUserCharSize(1,2,1,4); SetTextStyle(DefaultFont,HorizDir,UserCharSize); OutTextXY(110,245,'L A B O R A T O R I U M K I M I A F I S I K A '); SetUserCharSize(1,2,1,4);

SetTextStyle(DefaultFont,HorizDir,UserCharSize); OutTextXY(200,265,'J U R U S A N K I M I A '); OutTextXY(60,285,'F M I P A U N I V E R S I T A S N E G E R I S E M A R A NG'); SetUserCharSize(1,2,1,5); SetColor(yellow); SetTextStyle(DefaultFont,HorizDir,UserCharSize); OutTextXY(170,450,'<Esc> Keluar <Enter> Masuk '); inc(i); Until KeyPressed; SetBkColor(black); tunggu;end;

procedure orbital;begin judul('Gambar Orbital'); SetTextStyle(SmallFont, HorizDir, 5); SetTextJustify(leftText, TopText); SetBkColor(black); SetColor(cyan); OutTextXY(120,275,'ORBITAL px');

{Orbital px} SetColor(yellow); SetFillStyle(1, yellow); Ellipse(150,140,0,360,30,20); FloodFill(150,140,yellow); Ellipse(150,140,0,360,30,20); FloodFill(150,140,yellow);

SetColor(yellow); Line(150,60,150,270); OutTextXY(155,60,'Z'); Line(1,140,280,140); OutTextXY(285,140,'X'); Line(1,230,280,60); OutTextXY(290,60,'Y');

{Ikatan sigma} OutTextXY(450,275,'IKATAN SIGMA');

Page 139 of 155

Page 140: Turbo Pascal 7 untuk Kimia

SetColor(green); SetFillStyle(1, green); Ellipse(500,140,0,360,30,25); FloodFill(500,140,green); Ellipse(440,140,0,360,30,20); FloodFill(440,140,green); Ellipse(560,140,0,360,30,20); FloodFill(560,140,green);

Line(500,60,500,270); OutTextXY(505,60,'Z'); Line(345,140,630,140); OutTextXY(635,140,'X'); Line(345,230,630,60); OutTextXY(635,60,'Y');

{Orbital dzý} SetTextStyle(SmallFont, HorizDir, 6); OutTextXY(GetMaxX div 2 + 20,375,'Orbital dzý'); SetColor(white); Line(GetMaxX div 2,180,GetMaxX div 2,480); Line(140,330,500,330);

{lengkung bawah} SetColor(blue); Ellipse(GetMaxX div 2,390,120,60,15,50); Line(GetMaxX div 2,330,(GetMaxX div 2)-7,346); Line(GetMaxX div 2,330,(GetMaxX div 2)+7,346); SetFillStyle(1,blue); FloodFill(GetMaxX div 2 + 1,391,blue);

{lengkung tengah} SetColor(red); Ellipse(GetMaxX div 2,330,0,360,20,10); Ellipse(GetMaxX div 2,330,0,360,12,5); SetFillStyle(1,red); FloodFill(GetMaxX div 2 + 1,336,red);

{lengkung atas} SetColor(blue); Ellipse(GetMaxX div 2,270,300,240,15,50); Line(GetMaxX div 2,330,(GetMaxX div 2)-7,314); Line(GetMaxX div 2,330,(GetMaxX div 2)+7,314); SetFillStyle(1,blue); FloodFill(GetMaxX div 2,269,blue); tunggu;end;

procedure Tulisan_jalan;begin Repeat judul('AKULAH ...');

Status('Esc keluar atau press a key ...'); randomize; for i := 0 to 390 do begin bar(10,150,630,200);

tulisan(i,160,'KIMIA KOMPUTASI',i,4);tulisan(i-1,160,'KIMIA KOMPUTASI',black,4);PutPixel(random(650),random(440), random(i));

end; for i := 400 DownTo 10 do begin bar(10,150,630,200);

tulisan(i,160,'KIMIA KOMPUTASI',i,4);tulisan(i+1,160,'KIMIA KOMPUTASI',black,4);PutPixel(random(650),random(440), random(i));

end; Until KeyPressed; SetColor(white); tunggu;end;

procedure Atom_Rutherford;const dx = 0.05; r = 100;var theta,phi,xl,yl : real;begin judul('Model Atom Rutherford'); Status('Esc keluar atau press a key ...');

SetColor(yellow); SetFillStyle(1, yellow); Circle(GetMaxX div 2 - 20,GetMaxY div 2 + 9,5); FloodFill(GetMaxX div 2 - 20,GetMaxY div 2 + 5,yellow);

Page 140 of 155

Page 141: Turbo Pascal 7 untuk Kimia

theta := pi/2; phi := 0; Repeat phi := phi + dx;

xl := 300+r*cos(phi)*sin(theta); yl := 250+r*sin(phi)*sin(theta); PutPixel(trunc(xl),trunc(yl),white); delay(10); PutPixel(trunc(xl),trunc(yl),black); sound(trunc(xl*5));

Until KeyPressed; nosound; tunggu;end;

procedure Kelemahan_Rutherford;const dx = 0.05;var theta,phi,xl,yl,r : real;begin judul('Kelemahan teori Rutherford '); Status('Esc keluar atau press a key ...');

SetColor(yellow); SetFillStyle(1, yellow); Circle(GetMaxX div 2 - 20,GetMaxY div 2 + 9,5); FloodFill(GetMaxX div 2 - 20,GetMaxY div 2 + 5,yellow);

theta := pi/2; phi := 0; i := 0; Repeat r := 100 - (i*0.1); SetColor(white);

phi := phi + dx; xl := 300-r*cos(phi)*sin(theta); yl := 250-r*sin(phi)*sin(theta); PutPixel(trunc(xl),trunc(yl),white); delay(10); sound(trunc(xl*5));

inc(i,1); Until r < 1; SetColor(cyan); OutTextXY(GetMaxX div 2,375,'Akhirnya ...'); nosound; tunggu;end;

procedure Elektron_melingkar;const dx = 0.03; r = 100;var theta,phi,x1,y1,x2,y2,x3,y3 : real;begin judul('Elektron melingkari inti'); Status('Esc keluar atau press a key ...');

SetColor(yellow); SetFillStyle(1, yellow); Circle(GetMaxX div 2 - 20,GetMaxY div 2 + 25,5); FloodFill(GetMaxX div 2 - 20,GetMaxY div 2 + 25,yellow);

theta := pi/2; phi := 0; Repeat phi := phi + dx;

{lengkung datar} x1 := 300+r*2*cos(phi)*sin(theta); y1 := 250+r*sin(phi)*sin(theta);

{lingkaran} x2 := 300+r*cos(phi)*sin(theta);

y2 := 250+r*sin(phi)*sin(theta);

{Lengkung tegak}

Page 141 of 155

Page 142: Turbo Pascal 7 untuk Kimia

x3 := 300+r*cos(phi)*sin(theta); y3 := 250+r*2*sin(phi)*sin(theta);

{membuat obyek} SetColor(white); OutTextXY(trunc(x1),trunc(y1),'e');

OutTextXY(trunc(x2),trunc(y2),'-'); OutTextXY(trunc(x3),trunc(y3),'o');

{lintasan tidak terhapus} SetColor(yellow);

OutTextXY(trunc(x1),trunc(y1),'.'); OutTextXY(trunc(x2),trunc(y2),'.'); OutTextXY(trunc(x3),trunc(y3),'.');

{penghapus obyek} delay(30); SetColor(black); OutTextXY(trunc(x1),trunc(y1),'e');

OutTextXY(trunc(x2),trunc(y2),'-'); OutTextXY(trunc(x3),trunc(y3),'o');

sound(trunc(x1*3)); Until KeyPressed; nosound; SetColor(white); Status('Esc keluar atau press a key ...'); tunggu;end;

procedure habis;begin judul('Program selesai ...'); Status('Press Esc to exit or press a key to Repeat...');end;

Begin Repeat buka_grafik;

about; orbital; tulisan_jalan;

Atom_Rutherford; Kelemahan_Rutherford; Elektron_melingkar; habis; opsi := ReadKey;

Until opsi = #27; CloseGraph;end.

8.2 TRANSFORMASI GRAFIK : UNIT GAMBAR

Unit Gambar;InterfaceUses CRT,Graph;Const x_min = 0; y_min = 0; x_max = 640; y_max = 480;

Procedure Buka_grafik;Procedure Kerangka(warna1,warna2,warna3 : integer; SumbuY,SumbuX : string);Procedure Transformasi(x_min,y_min,x_max,y_max,x_Pascal,y_Pascal : real;

var x_Cartes,y_Cartes : real);Procedure Sumbu_koordinat(x_min,y_min,x_max,y_max : real);Procedure Skala(x_min,y_min,x_max,y_max : real);Procedure plot(x,y : real; warna : word);Procedure Tutup(pesan_kiri,pesan_tengah,pesan_kanan : string);

Implementation

Procedure Buka_grafik;var GraphDriver,GraphMode,ErorCode : integer;begin GraphDriver := detect; InitGraph(GraphDriver,GraphMode,'');

Page 142 of 155

Page 143: Turbo Pascal 7 untuk Kimia

ErorCode := GraphResult; if ErorCode <> GrOk then Halt;end;

Procedure Kerangka(warna1,warna2,warna3 : integer; SumbuY,SumbuX : string);begin {Kotak data} SetFillStyle(1,warna1); FloodFill(1,GetMaxY div 10,white); Rectangle(0,0,GetMaxX div 4,19*GetMaxY div 20);

{Kotak grafik} SetFillStyle(1,warna2); FloodFill(GetMaxX-1,GetMaxY div 10,white); Rectangle(GetMaxX div 4,0,GetMaxX,19*GetMaxY div 20);

{Kotak menu} SetFillStyle(1,warna3); FloodFill(1,GetMaxY-1,white); Rectangle(0,19*GetMaxY div 20,GetMaxX,GetMaxY);

{Label sumbu X dan Y} SetTextStyle(SmallFont,HorizDir,5); SetTextJustify(CenterText,CenterText); SetColor(white); Outtextxy((GetMaxX div 4)+(6*GetMaxX div 64), GetMaxY div 40 ,SumbuY); Outtextxy(19*GetMaxX div 20,18*GetMaxY div 20,SumbuX);end;

Procedure Transformasi(x_min,y_min,x_max,y_max,x_Pascal,y_Pascal : real;var x_Cartes,y_Cartes : real);var xmin,xmax,ymin,ymax : integer;begin xmin := (GetMaxX div 4)+(6*GetMaxX div 64); xmax := GetMaxX - (3*GetMaxX div 64); ymin := GetMaxY div 20; ymax := 16*GetMaxY div 20;

x_Cartes := (xmin*x_max-xmax*x_min)/(x_max-x_min) + x_Pascal*(xmax-xmin)/(x_max-x_min);

y_Cartes := (ymax*y_max-ymin*y_min)/(y_max-y_min) - y_Pascal*(ymax-ymin)/(y_max-y_min);end;

Procedure Sumbu_koordinat(x_min,y_min,x_max,y_max : real);var x1,y1,x2,y2 : real;begin transformasi(x_min,y_min,x_max,y_max,x_min,0,x1,y1); transformasi(x_min,y_min,x_max,y_max,x_max,0,x2,y2); Line(trunc(x1),trunc(y1),trunc(x2),trunc(y2));

transformasi(x_min,y_min,x_max,y_max,0,y_min,x1,y1); transformasi(x_min,y_min,x_max,y_max,0,y_max,x2,y2); Line(trunc(x1),trunc(y1),trunc(x2),trunc(y2));end;

Procedure Skala(x_min,y_min,x_max,y_max : real);var del,del_1,x1,y1,x2,y2 : real; n : integer; dtx : string[7];

begin transformasi(x_min,y_min,x_max,y_max,x_min,y_min,x1,y1); transformasi(x_min,y_min,x_max,y_max,x_min,y_max,x2,y2); Line(trunc(x1),trunc(y1),trunc(x2),trunc(y2));

SetTextStyle(SmallFont,HorizDir,4); SetTextJustify(CenterText,CenterText);

del := (y_max-y_min)/10; del_1 := (y2-y1)/10; for n := 1 to 11 do begin if n = 11 then

begin

Page 143 of 155

Page 144: Turbo Pascal 7 untuk Kimia

SetColor(white); str(y_min + del*(n-1):5:4,dtx);

OutTextXY((GetMaxX div 4)+(3*GetMaxX div 64), trunc(y1 + del_1*(n-1)),dtx); OutTextXY((GetMaxX div 4)+(6*GetMaxX div 64), trunc(y1 + del_1*(n-1)),'-'); end else begin

str(y_min + del*(n-1):5:4,dtx); OutTextXY((GetMaxX div 4)+(3*GetMaxX div 64), trunc(y1 + del_1*(n-1)),dtx);

if n <> 1 then OutTextXY((GetMaxX div 4)+(6*GetMaxX div 64), trunc(y1 + del_1*(n-1)),'-');

{garis-garis grafik sumbu y} if n <> 1 then SetLineStyle(DottedLn, 0, NormWidth); Line((GetMaxX div 4 + 6*GetMaxX div 64), trunc(y1 + del_1*(n-1)), (GetMaxX-3*GetMaxX div 64),trunc(y1 + del_1*(n-1)));

end; end;

transformasi(x_min,y_min,x_max,y_max,x_max,y_min,x2,y2); Line(trunc(x1),trunc(y1),trunc(x2),trunc(y2));

SetTextStyle(SmallFont,HorizDir,4); del := (x_max-x_min)/10; del_1 := (x2-x1)/10; for n := 1 to 11 do begin if n = 11 then

begin str(x_min + del*(n-1):1:2,dtx); SetColor(white); OutTextXY(trunc(x1 + del_1*(n-1)),16*GetMaxY div 20,'!'); OutTextXY(trunc(x1 + del_1*(n-1)),17*GetMaxY div 20,dtx); end else begin str(x_min + del*(n-1):1:2,dtx); OutTextXY(trunc(x1 + del_1*(n-1)),17*GetMaxY div 20,dtx);

if n <> 1 then OutTextXY(trunc(x1 + del_1*(n-1)),16*GetMaxY div 20,'!');

{garis-garis grafik sumbu x} SetLineStyle(DottedLn, 0, NormWidth); Line(trunc(x1 + del_1*(n-1)), 16*GetMaxY div 20, trunc(x1 + del_1*(n-1)),GetMaxY div 20);

end; end;end;

Procedure plot(x,y : real; warna : word);var x1,y1 : real;begin

transformasi(x_min,y_min,x_max,y_max,x,y,x1,y1);PutPixel(trunc(x1),trunc(y1),warna);

end;

Procedure Tutup(pesan_kiri,pesan_tengah,pesan_kanan : string);begin SetColor(white); SetTextStyle(SmallFont,HorizDir,5); SetTextJustify(CenterText,RightText); OutTextXY(GetMaxX div 10, 21*GetMaxY div 22,pesan_kiri); OutTextXY(GetMaxX div 2, 21*GetMaxY div 22,pesan_tengah); OutTextXY(9*GetMaxX div 10, 21*GetMaxY div 22,pesan_kanan);end;

End.

Page 144 of 155

Page 145: Turbo Pascal 7 untuk Kimia

8.3 FUNGSI PERSAMAAN : GAMBAR 2

Program Gambar_2;Uses CRT,Graph,gambar;Const delx = 0.001;Var akar,x,y,xa,a,b,c,x1,y1,xmin,xmax,ymin,ymax : real; str1,str2,str3 : string[5];Label 01;

Begin 01: ClrScr; Write(' Besar a = '); ReadLn(a); Write(' Besar b = '); ReadLn(b); Write(' Besar c = '); ReadLn(c);

{batas bidang grafik} xmin := -15; ymin := -25; xmax := 25; ymax := 30;

buka_grafik; kerangka(2,1,3,'Y','X'); sumbu_koordinat(xmin,ymin,xmax,ymax); skala(xmin,ymin,xmax,ymax);

{isi bidang data} OutTextXY(2*getmaxx div 30,GetMaxY div 20,'DATA :'); str(a:5:3,str1); OutTextXY(2*GetMaxX div 30,3*GetMaxY div 20,'a = '+str1); str(b:5:3,str2); OutTextXY(2*GetMaxX div 30,4*GetMaxY div 20,'b = '+str2); str(c:5:3,str3); OutTextXY(2*GetMaxX div 30,5*GetMaxY div 20,'c = '+str3);

{grafik} x := xmin; repeat begin y := (x-a)*(x-b)*(x-c);

if (y <= ymax) and (y >= ymin) thenbegin transformasi(xmin,ymin,xmax,ymax,x,y,x1,y1); PutPixel(trunc(x1),trunc(y1), yellow);end;x := x + delx;

end; until x >= xmax;

tutup('<Esc> Exit','','<Enter> Ulang'); if ReadKey = #27 then begin CloseGraph; end else begin CloseGraph;

goto 01; end;End.

8.4 DENSITAS PROBABILITAS : GAMBAR 3

Program Gambar_3;Uses CRT,Graph,gambar;Const delx = 0.001; M = 0.032; R = 8.314;Var vx,fvx,T,x1,y1,xmin,xmax,ymin,ymax : real; dtx : string[5];Label 01;

Page 145 of 155

Page 146: Turbo Pascal 7 untuk Kimia

Begin 01: ClrScr; Write('Harga Temperatur = '); ReadLn(T);

xmin := -1; ymin := 0; xmax := 1; ymax := 0.0050;

buka_grafik; kerangka(2,1,3,'f(Vx)','Vx'); sumbu_koordinat(xmin,ymin,xmax,ymax); skala(xmin,ymin,xmax,ymax);

SetTextStyle(SmallFont,HorizDir,5); SetTextJustify(LeftText,CenterText); OutTextXY(2*GetMaxX div 80,GetMaxY div 20,'DATA :'); SetTextStyle(SmallFont,HorizDir,4); OutTextXY(2*GetMaxX div 80, GetMaxY div 6,'Densitas Probabilitas:'); str(T:5:5,dtx); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+3*GetMaxY div 25,'T = '+dtx+' K');

vx := xmin; Repeat fvx := sqrt(M/(2*pi*R*T))*exp(-(M*sqr(vx)/2*R*T));

if (fvx<= ymax) and (fvx >= ymin) then begin transformasi(xmin,ymin,xmax,ymax,vx,fvx,x1,y1);

PutPixel(trunc(x1),trunc(y1), yellow); end;

delay(1); vx := vx + delx;

Until vx >= xmax;

tutup('<Esc> Exit','','<Enter> Ulang'); if ReadKey = #27 then begin CloseGraph; end else begin CloseGraph;

goto 01; end;End.

8.5 PENYELESAIAN ANALITIK REAKSI SERI : GAMBAR 4

Program Gambar_4;Uses CRT,Graph,gambar;Var x,y,ya,yb,yc,k1,k2,a0,x1,y1,x2,y2,x3,y3, delx,h,xmin,xmax,ymin,ymax : real; dtx,dtx1,dtx2,dtx3 : string[10];Label 01;

Begin 01 : Clrscr;

{input data} Write('Konsentrasi awal zat A = '); ReadLn(a0); Write('Harga k1 = '); ReadLn(k1); Write('Harga k2 = '); ReadLn(k2); Write('Harga step = '); ReadLn(delx); Write('Sumbu X maksimal = '); ReadLn(xmax); Write('Sumbu Y maksimal = '); ReadLn(ymax);

{batas bidang grafik} xmin := 0; ymin := 0;

{mulai mode grafik} buka_grafik;

Page 146 of 155

Page 147: Turbo Pascal 7 untuk Kimia

kerangka(2,1,3,'Konsentrasi','Waktu'); sumbu_koordinat(xmin,ymin,xmax,ymax); skala(xmin,ymin,xmax,ymax);

SetTextStyle(SmallFont,HorizDir,5); SetTextJustify(LeftText,CenterText); OutTextXY(2*GetMaxX div 80,GetMaxY div 20,'DATA :'); SetTextStyle(SmallFont,HorizDir,4); OutTextXY(2*GetMaxX div 80, GetMaxY div 6,'Reaksi Konsekutif'); OutTextXY(2*GetMaxX div 80, GetMaxY div 6+2*GetMaxY div 25, 'Kondisi Awal : '); str(a0:5:5,dtx); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+3*GetMaxY div 25,'[A] = '+dtx); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+4*GetMaxY div 25,'[B] = 0'); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+5*GetMaxY div 25,'[C] = 0');

h := delx; str(h:5:2,dtx); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+6*GetMaxY div 25,'Step = '+dtx); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+17*GetMaxY div 25-5, 'dengan Metode Analitik');

OutTextXY(2*GetMaxX div 80,GetMaxY div 6+9*GetMaxY div 25, 'Kondisi Propagasi :'); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+10*GetMaxY div 25,'[A] = '); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+11*GetMaxY div 25,'[B] = '); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+12*GetMaxY div 25,'[C] = ');

x := xmin; Repeat begin {persamaan analitik reaksi konsekutif}

ya := a0*exp(-(k1*x));yb := (k1*a0/(k2-k1))*(exp(-(k1*x))-exp(-(k2*x)));yc := a0*(1+(1/(k1-k2))*(k2*exp(-(k1*x))-k1*exp(-(k2*x))));

if (ya<= ymax) and (ya >= ymin) thenbegin transformasi(xmin,ymin,xmax,ymax,x,ya,x1,y1); PutPixel(trunc(x1),trunc(y1), green);

transformasi(xmin,ymin,xmax,ymax,x,yb,x2,y2); PutPixel(trunc(x2),trunc(y2), brown);

transformasi(xmin,ymin,xmax,ymax,x,yc,x3,y3); PutPixel(trunc(x3),trunc(y3), white);end;

{menampakkan angka} SetColor(white); str(ya:8:8,dtx1); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+10*GetMaxY div 25,dtx1); str(yb:8:8,dtx2); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+11*GetMaxY div 25,dtx2); str(yc:8:8,dtx3); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+12*GetMaxY div 25,dtx3); delay(2);

{menghapus angka} SetColor(green); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+10*GetMaxY div 25,dtx1); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+11*GetMaxY div 25,dtx2); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+12*GetMaxY div 25,dtx3);

x := x + delx; end;

until x >= xmax;

{menampakkan angka terakhir} SetColor(white);

OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+10*GetMaxY div 25,dtx1); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+11*GetMaxY div 25,dtx2); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+12*GetMaxY div 25,dtx3);

Page 147 of 155

Page 148: Turbo Pascal 7 untuk Kimia

tutup('<Esc> Exit','','<Enter> Ulang'); if ReadKey = #27 then begin CloseGraph; end else begin CloseGraph;

goto 01; end;End.

8.6 PENYELESAIAN NUMERIK REAKSI SERI MENGGUNAKAN METODE EULER : GAMBAR 5

program Gambar_5;Uses Crt,graph,gambar;Const dim = 3; plot = 0;Type euler = Array[1..dim] Of real ;Label 01;Var i,j : Integer ; Y,Y1,Yg,E,m1,m2,yawal : euler ; x,x1,h,xmin,xmax,ymin,ymax, yawal1,yawal2,yawal3 : real ; dtx,dtx1,dtx2,dtx3 : string[10];Const k1 = 0.05; k2 = 0.01;

{*********** Definition of a set of equation **********}

Function f(i:integer; x:real; Y:euler): real; Begin

case i of 1: f := -k1*y[1]; 2: f := k1*y[1]-k2*y[2]; 3: f := k2*y[2]; end ;

end;

{*********** Definition of a set of equation **********}

Procedure data;begin ClrScr; Write(' t awal = '); ReadLn(xmin); Write(' t akhir = '); ReadLn(xmax); Write(' Step (h) = '); ReadLn(h); Write(' y max = '); ReadLn(ymax); Write(' y min = '); ReadLn(ymin); Write(' y awal 1 = '); ReadLn(yawal1); yawal[1] := yawal1; Write(' y awal 2 = '); ReadLn(yawal2); yawal[2] := yawal2; Write(' y awal 3 = '); ReadLn(yawal3); yawal[3] := yawal3;end;

Procedure Goutput;begin buka_grafik; Kerangka(2,1,3,'Konsentrasi','Waktu'); sumbu_koordinat(xmin,ymin,xmax,ymax); skala(xmin,ymin,xmax,ymax);

SetTextStyle(SmallFont,HorizDir,5); SetTextJustify(LeftText,CenterText); OutTextXY(2*GetMaxX div 80,GetMaxY div 20,'DATA :'); SetTextStyle(SmallFont,HorizDir,4); OutTextXY(2*GetMaxX div 80, GetMaxY div 6,'Reaksi Konsekutif'); OutTextXY(2*GetMaxX div 80, GetMaxY div 6+2*GetMaxY div 25,

Page 148 of 155

Page 149: Turbo Pascal 7 untuk Kimia

'Kondisi Awal : '); str(yawal1:5:2,dtx); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+3*GetMaxY div 25,'Y[1] = '+dtx); str(yawal2:5:2,dtx); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+4*GetMaxY div 25,'Y[2] = '+dtx); str(yawal3:5:2,dtx); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+5*GetMaxY div 25,'Y[3] = '+dtx); str(h:5:2,dtx); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+6*GetMaxY div 25,'Step = '+dtx); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+17*GetMaxY div 25-5, 'dengan Metode Euler');

x := xmin; y := yawal; for j := trunc(xmin) to trunc(xmax) do begin for i := 1 to dim do m1[i] := f(i,x,Y);

for i := 1 to dim do E[i] := Y[i] + h*m1[i]; for i := 1 to dim do m2[i] := f(i,x+h,E); for i := 1 to dim do Y[i] := Y[i] + 0.5*h*(m1[i]+m2[i]); for i := 1 to dim do Yg[i] := Y[i] + j*plot;

for i := 1 to dim do begin if (Yg[i] <= ymax) and (Yg[i] >= ymin) then begin transformasi(xmin,ymin,xmax,ymax,j,Yg[i],x1,y1[i]); PutPixel(trunc(x1),trunc(y1[i]),i+4); end end;

SetColor(white); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+9*GetMaxY div 25, 'Kondisi Propagasi :'); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+10*GetMaxY div 25,'Y[1] = '); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+11*GetMaxY div 25,'Y[2] = '); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+12*GetMaxY div 25,'Y[3] = '); str(Y[1]:5:8,dtx1); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+10*GetMaxY div 25,dtx1); str(Y[2]:5:8,dtx2); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+11*GetMaxY div 25,dtx2); str(Y[3]:5:8,dtx3); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+12*GetMaxY div 25,dtx3); delay(10); SetColor(green); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+10*GetMaxY div 25,dtx1); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+11*GetMaxY div 25,dtx2); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+12*GetMaxY div 25,dtx3);

x := x + j*h; end; SetColor(white); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+10*GetMaxY div 25,dtx1); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+11*GetMaxY div 25,dtx2); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+12*GetMaxY div 25,dtx3);end;

Begin 01: data; Goutput; tutup('<Esc> Exit','','<Enter> Ulang'); if ReadKey = #27 then begin CloseGraph; end else begin CloseGraph;

goto 01; end;End.

Page 149 of 155

Page 150: Turbo Pascal 7 untuk Kimia

8.7 PENYELESAIAN NUMERIK REAKSI SERI MENGGUNAKAN METODE RUNGE-KUTTA : GAMBAR 6

Program Gambar_6;Uses Crt,graph,gambar;Const dim = 3; plot = 0;Type rk4 = Array[1..dim] Of real ;Label 01;Var i,j : Integer ; Y,Y1,Yg,E1,E2,E3,E4,m1,m2,m3,m4,yawal : rk4 ; x,x1,h,xmin,xmax,ymin,ymax,yawal1, yawal2,yawal3 : real ; dtx,dtx1,dtx2,dtx3 : string[10];Const k1 = 0.05; k2 = 0.01;

{*********** Definition of a set of equation **********}

Function f(i:integer; x:real; Y:rk4): real; Begin case i of

1: f := -k1*y[1];

2: f := k1*y[1]-k2*y[2]; 3: f := k2*y[2]; end ;

end;

{*********** Definition of a set of equation **********}

Procedure data;begin ClrScr; Write(' t awal = '); ReadLn(xmin); Write(' t akhir = '); ReadLn(xmax); Write(' Step (h) = '); ReadLn(h); Write(' y max = '); ReadLn(ymax); Write(' y min = '); ReadLn(ymin); Write(' y awal 1 = '); ReadLn(yawal1); yawal[1] := yawal1; Write(' y awal 2 = '); ReadLn(yawal2); yawal[2] := yawal2; Write(' y awal 3 = '); ReadLn(yawal3); yawal[3] := yawal3;end;

Procedure Goutput;begin buka_grafik; Kerangka(2,1,3,'Konsentrasi','Waktu'); sumbu_koordinat(xmin,ymin,xmax,ymax); skala(xmin,ymin,xmax,ymax);

SetTextStyle(SmallFont,HorizDir,5); SetTextJustify(LeftText,CenterText); OutTextXY(2*GetMaxX div 80,GetMaxY div 20,'DATA :'); SetTextStyle(SmallFont,HorizDir,4); OutTextXY(2*GetMaxX div 80, GetMaxY div 6,'Reaksi Konsekutif'); OutTextXY(2*GetMaxX div 80, GetMaxY div 6+2*GetMaxY div 25, 'Kondisi Awal : ');

str(yawal1:5:2,dtx); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+3*GetMaxY div 25,'Y[1] = '+dtx); str(yawal2:5:2,dtx); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+4*GetMaxY div 25,'Y[2] = '+dtx); str(yawal3:5:2,dtx); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+5*GetMaxY div 25,'Y[3] = '+dtx); str(h:5:2,dtx); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+6*GetMaxY div 25,'Step = '+dtx); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+17*GetMaxY div 25-5, 'metode Runge-Kutta ');

Page 150 of 155

Page 151: Turbo Pascal 7 untuk Kimia

x := xmin; y := yawal; for j := trunc(xmin) to trunc(xmax) do begin for i := 1 to dim do m1[i] := f(i,x,y); for i := 1 to dim do E1[i] := Y[i] + (h*m1[i]/2);

for i := 1 to dim do m2[i] := f(i,x+h/2, E1); for i := 1 to dim do E2[i] := Y[i] + (h*m2[i]/2);

for i := 1 to dim do m3[i] := f(i,x+h/2, E2); for i := 1 to dim do E3[i] := Y[i] + (h*m3[i]);

for i := 1 to dim do m4[i] := f(i,x+h,E3); 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 Yg[i] := Y[i] + j*plot;

for i := 1 to dim do begin if (Yg[i] <= ymax) and (Yg[i] >= ymin) then begin transformasi(xmin,ymin,xmax,ymax,j,Yg[i],x1,y1[i]); putpixel(trunc(x1),trunc(y1[i]),i+4); end end;

SetColor(white); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+9*GetMaxY div 25, 'Kondisi Propagasi :'); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+10*GetMaxY div 25,'Y[1] = '); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+11*GetMaxY div 25,'Y[2] = '); OutTextXY(2*GetMaxX div 80,GetMaxY div 6+12*GetMaxY div 25,'Y[3] = '); str(Y[1]:5:8,dtx1); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+10*GetMaxY div 25,dtx1); str(Y[2]:5:8,dtx2); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+11*GetMaxY div 25,dtx2); str(Y[3]:5:8,dtx3); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+12*GetMaxY div 25,dtx3); delay(10); SetColor(green); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+10*GetMaxY div 25,dtx1); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+11*GetMaxY div 25,dtx2); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+12*GetMaxY div 25,dtx3);

x := x + j*h; end; SetColor(white); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+10*GetMaxY div 25,dtx1); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+11*GetMaxY div 25,dtx2); OutTextXY(2*GetMaxX div 80+45,GetMaxY div 6+12*GetMaxY div 25,dtx3);end;

Begin 01: data; Goutput; tutup('<Esc> Exit','','<Enter> Ulang'); if ReadKey = #27 then begin CloseGraph; end else begin CloseGraph;

goto 01; end;End.

8.8 FUNGSI GELOMBANG RADIAL : GAMBAR 7

Program Gambar_7;Uses CRT,Graph,math,gambar;Const delx = 0.01;

Page 151 of 155

Page 152: Turbo Pascal 7 untuk Kimia

a0 = 0.529177; {angstrom}Var akar,x,y,xa,n,l,Z,r,sigma,x1,y1,xmin,xmax,ymin,ymax : real; str1,str2,str3 : string[5];Label 01;

Begin 01: ClrScr; n := 3; l := 1; Write(' Besar Z = '); ReadLn(Z);

{batas bidang grafik} xmin := 0; ymin := -0.3; xmax := 25; ymax := 0.5;

buka_grafik; kerangka(2,1,3,'Psi(r)','r'); sumbu_koordinat(xmin,ymin,xmax,ymax); skala(xmin,ymin,xmax,ymax);

{isi bidang data} SetTextStyle(SmallFont,HorizDir,4); SetTextJustify(LeftText,CenterText); OutTextXY(GetmaxX div 60, GetMaxY div 20,'DATA :'); OutTextXY(GetMaxX div 60,6*GetMaxY div 40,'Fungsi Gelombang Radial:'); OutTextXY(GetMaxX div 60,7*GetMaxY div 40,'Orbital 3p'); str(n:3:0,str1); OutTextXY(GetMaxX div 60,5*GetMaxY div 20,'n = '+str1); str(l:3:0,str2); OutTextXY(GetMaxX div 60,6*GetMaxY div 20,'l = '+str2); str(Z:3:0,str3); OutTextXY(GetMaxX div 60,7*GetMaxY div 20,'Z = '+str3);

{grafik} x := xmin; r := x; repeat sigma := (2*Z*r)/(n*a0); y := (1/(9*Sqrt(6)))*pangkat(Z/a0,3/2)*(4-sigma)*sigma*exp(-sigma/2);

if (y <= ymax) and (y >= ymin) then begin transformasi(xmin,ymin,xmax,ymax,r,y,x1,y1);

PutPixel(trunc(x1),trunc(y1), yellow); end;

r := r + delx; until r >= xmax;

tutup('<Esc> Exit','','<Enter> Ulang'); if ReadKey = #27 then begin CloseGraph; end else begin CloseGraph;

goto 01; end;End.

8.9 ANIMASI GAMBAR : GAMBAR 8

Program Gambar_8;Uses CRT,Graph;Const dx = 0.01;Var Bola : pointer; x1,y1,x2,y2,i,X,Y,r,ukuran, DriverGrafik, ModeGrafik : integer; rl,xr,yr,phi,theta : real; opsi : char;

Page 152 of 155

Page 153: Turbo Pascal 7 untuk Kimia

Begin DriverGrafik := detect; InitGraph(DriverGrafik, ModeGrafik, '');

{menggambar bola} X := 320; Y := 240; r := 10; SetColor(blue); Circle(X,Y,r); SetFillStyle(1,blue); FloodFill(X,Y,blue);

{simpan gambar bola di buffer} x1 := X - r; y1 := Y - r; x2 := X + r; y2 := Y + r;

Ukuran := ImageSize(x1,y1,x2,y2); GetMem(bola, Ukuran);

GetImage(x1,y1,x2,y2,bola^); PutImage(X1,Y1, bola^, XORput); {hapus bola}

{Gerakan gambar bola} theta := pi/2; phi := 0; i := 0; Repeat PutImage(X,Y,bola^,XORPut); {gambar bola} Delay(1); PutImage(X,Y,bola^,XORPut); {hapus bola}

rl := round(200 - (i*0.1)); phi := phi + dx; xr := 320-(rl*cos(phi)*sin(theta)); yr := 240-(rl*sin(phi)*sin(theta));

X := trunc(xr); Y := trunc(yr); inc(i,1) Until i > 3500; PutImage(X,Y,bola^,XORPut); {gambar bola} ReadLn; FreeMem(bola, Ukuran); CloseGraph;End.

8.10 ANIMASI PENEMBAKAN INTI ATOM DENGAN NETRON : GAMBAR 9

Program Gambar_9;Uses CRT,Graph;Var netron,netron1,netron2 : pointer; i,x1,y1,x2,y2,X,Y,r,Xi,Yi,ri,xi1,yi1,xi2,yi2, ukuran,DriverGrafik, ModeGrafik : integer; opsi : char;Label ulang;

Procedure Inti; begin SetColor(red); Xi := GetMaxX div 2; Yi := GetMaxY div 2; for i := 1 to 30 do begin Circle(Xi,Yi,i); end; SetColor(Black); OutTextXY(GetMaxX div 2 - 17, GetMaxY div 2,'INTI'); end;

Page 153 of 155

Page 154: Turbo Pascal 7 untuk Kimia

Begin DriverGrafik := detect; InitGraph(DriverGrafik, ModeGrafik, '');

ulang: SetColor(Lightred); OutTextXY(150, 20,'Penembakan Inti Atom dengan netron');

Inti;

{menggambar neutron} SetColor(lightblue); X := 10; Y := GetMaxY div 2; r := 5; Circle(X,Y,r); SetFillStyle(1,lightblue); FloodFill(X,Y,lightblue);

{simpan gambar neutron di buffer} x1 := X - r; y1 := Y - r; x2 := X + r; y2 := Y + r;

ukuran := ImageSize(x1,y1,x2,y2); GetMem(netron, ukuran); GetMem(netron1, ukuran); GetMem(netron2, ukuran);

GetImage(x1,y1,x2,y2,netron^); GetImage(x1,y1,x2,y2,netron1^); GetImage(x1,y1,x2,y2,netron2^);

PutImage(X1,Y1, netron^, XORput); {hapus gambar} PutImage(X1,Y1, netron1^, XORput); {hapus gambar} PutImage(X1,Y1, netron2^, XORput); {hapus gambar}

SetColor(yellow); OutTextXY(1, GetMaxY div 2 + 20,'Sumber netron'); Rectangle(x1-1,y1-1,x2+10,y2+10);

{gerakan netron menumbuk inti} i := 0; Repeat PutImage(X,Y,netron^,XORPut); {gambar netron} Delay(50); PutImage(X,Y,netron^,XORPut); {hapus netron} X := X + i; Y := GetMaxY div 2; Sound(30*i); inc(i,1) Until i = 25; NoSound;

Sound(1500); SetColor(black); {menghapus gambar inti} Xi := GetMaxX div 2; Yi := GetMaxY div 2; for i := 1 to 30 do begin delay(8); Circle(Xi,Yi,i); end; NoSound;

SetColor(black); OutTextXY(GetMaxX div 2 - 17, GetMaxY div 2,'INTI');

{gerakan pecahan neutron hasil fisi} X := GetMaxX div 2; Y := GetMaxY div 2; i := 0;

Page 154 of 155

Page 155: Turbo Pascal 7 untuk Kimia

Repeat PutImage(X,Y-10*i,netron1^,XORPut); {gambar netron1} PutImage(X,Y+10*i,netron2^,XORPut); {gambar netron2} Delay(50); PutImage(X,Y-10*i,netron1^,XORPut); {hapus netron1} PutImage(X,Y+10*i,netron2^,XORPut); {hapus netron2} X := X + i; Y := GetMaxY div 2; Sound(30*i); inc(i,1) Until i = 25; NoSound; Inti; opsi := ReadKey; if opsi = #13 then GoTo ulang else FreeMem(netron, ukuran); CloseGraph;End.

Page 155 of 155