PERANCANGAN PROGRAM APLIKASI PENGOLAHAN DATA PERCOBAAN MENGGUNAKAN METODE PEMBANDING ORTOGONAL
SKRIPSI
Oleh LUWI DARMAWAN
0300478582
UNIVERSITAS BINA NUSANTARA JAKARTA 2004
PERANCANGAN PROGRAM APLIKASI PENGOLAHAN DATA PERCOBAAN MENGGUNAKAN METODE PEMBANDING ORTOGONAL
SKRIPSI diajukan sebagai salah satu syarat untuk memperoleh gelar kesarjanaan pada Program Studi Ganda Teknik Informatika - Statistik Jenjang Pendidikan Strata 1
Oleh LUWI DARMAWAN
0300478582
UNIVERSITAS BINA NUSANTARA JAKARTA 2004 i
Kupersembahkan untuk Kedua orang tuaku, kakakku dan adikku serta seseorang yang sangat ku cintai
ii
PERANCANGAN PROGRAM APLIKASI PENGOLAHAN DATA PERCOBAAN MENGGUNAKAN METODE PEMBANDING ORTOGONAL
SKRIPSI
Oleh
Luwi Darmawan NIM: 0300478582
disetujui oleh Pembimbing
Ir. Abdul Hamang, MS D0527
Drs. Agus Prahono, M.Eng.Sc D0208
UNIVERSITAS BINA NUSANTARA JAKARTA 2004 iii
iv
UNIVERSITAS BINA NUSANTARA Program Studi Ganda Teknik Informatika – Statistik Skripsi Sarjana Program Ganda Semester ganjil 2003/2004 PERANCANGAN PROGRAM APLIKASI PENGOLAHAN DATA PERCOBAAN MENGGUNAKAN METODE PEMBANDING ORTOGONAL Luwi Darmawan NIM : 0300478582 ABSTRAK Balai Penelitian Bioteknologi dan Sumber Daya Genetik Pertanian adalah salah satu balai yang sering melakukan pengolahan data percobaan pertanian. Salah satu percobaan pertanian yang sering dilakukan di balai ini adalah percobaan faktorial dengan rancangan dasarnya yaitu rancangan acak kelompok (RAK) dengan uji lanjut menggunakan metode pembanding ortogonal. Proses pengolahan data yang menggunakan percobaan tersebut di balai ini menggunakan suatu program yang bernama MSTAT. Permasalahan yang muncul adalah kurangnya efisiensi dan efektifitas pengolahan data percobaan yang disebabkan adanya kelemahan program MSTAT pada tahap menginput data dan pada tahap menghasilkan output, sehingga dibutuhkan suatu program baru yang merupakan pengembangan dari program MSTAT yang dapat mengatasi kelemahan tersebut. Tujuan dari penulisan skripsi ini adalah membuat suatu perancangan program yang penulis beri nama RANCOB yang dapat mengatasi kelemahan program MSTAT sehingga proses pengolahan data percobaan menjadi lebih efisien dan efektif. Program yang dibuat juga dilengkapi dengan fasilitas program seperti tampilan dan hasil output yang disesuaikan dengan kebutuhan balai. Model perancangan yang digunakan untuk merancang program ini adalah Waterfall Model, dimana dilakukan tahapan rekayasa sistem, analisis kebutuhan pengembangan program, disain, pengkodean, pengujian dan pemeliharaan. Hasil yang diperoleh dari perancangan program aplikasi percobaan ini adalah bahwa program yang dirancang dapat mempermudah proses pengolahan data percobaan dan dapat memberikan hasil output program yang baik. Kata Kunci : perancangan, program, pengolahan data percobaan, metode pembanding ortogonal.
v
KATA PENGANTAR
Alhamdulillah, tiada kata yang pantas terucap selain mengucap syukur kehadirat Allah SWT, atas limpahan ni’mat dan karunia-Nya yang tiada terkira, yang juga selalu dirasakan oleh penulis, sehingga penulis mendapat kekuatan dan pertolongan-Nya dalam menyelesaikan skripsi ini tepat pada waktunya. Skripsi yang berjudul “Perancangan Program Aplikasi Pengolahan Data Percobaan Menggunakan Metode Pembanding Ortogonal” ini merupakan tugas akhir yang harus diselesaikan oleh penulis sebagai salah satu syarat untuk memperoleh gelar Sarjana pada Program Studi Ganda Teknik Informatika – Statistik Universitas Bina Nusantara. Dalam proses penulisan dan penyusunan skripsi ini, penulis mendapatkan bantuan, dukungan dan kerjasama yang luar biasa dari berbagai pihak, oleh karena itu maka pada kesempatan ini penulis ingin mengucapkan terima kasih yang sebesarbesarnya kepada : 1. Ibu Dr. Ir. Th. Widia S, MM., selaku Rektor Universitas Bina Nusantara. 2. Bapak Prof Dr. Gerardus Polla, M.App Sc., selaku Dekan Fakultas MIPA. 3. Bapak Wikaria Gazali, S.Si., M.T., selaku Ketua Jurusan Statistika. 4. Bapak Drs. Ngarap I. Manik, M.Kom., selaku Sekretaris Jurusan Statistika. 5. Bapak Ir. Abdul Hamang, M.S. selaku dosen pembimbing I, atas bantuan, bimbingan dan arahan yang berharga kepada penulis, sehingga penulis dapat menyelesaikan tugas ini tepat pada waktunya. 6. Bapak Drs. Agus Prahono, M.Eng.Sc., selaku dosen pembimbing II, atas kesabaran, bimbingan, dan arahannya yang berharga kepada penulis, sehingga penulis dapat terus termotivasi menyelesaikan skripsi ini tepat pada waktunya. 7. Bapak Dr. Budihardjo Soegiarto selaku Pgs. Kepala Balai Penelitian Bioteknologi dan Sumber Daya Genetik Pertanian, atas kerja sama dan bantuan yang diberikan kepada penulis.
vi
8. Ibu Ir. Ida N. Orbani selaku Kabag Humas Balai Penelitian Bioteknologi dan Sumber Daya Genetik Pertanian, atas kerja sama dan bantuan yang diberikan kepada penulis. 9. Bapak Ir. Sutoro, M.S. selaku staf peneliti balai dan staf pengajar Binus, yang telah membantu penulis dalam mendapatkan data-data dan informasi yang diperlukan dalam penyusunan skripsi ini. 10. Seluruh staf pengajar Binus yang pernah mengajar dan memberikan ilmu pengetahuan yang sangat berharga kepada penulis. 11. Ayah dan Ibuku tercinta, atas kasih sayang, kesabaran, dukungan, perhatian dan pengertian yang luar biasa kepada penulis sehingga penulis akhirnya menyelesaikan skripsi ini dengan baik. 12. Kakak dan adikku yang sangat ku sayangi, yang selalu mendukung dan menyemangati penulis. 13. Teman setiaku, Yunita Hafrida, atas cinta, perhatian, dan dukungan yang luar biasa kepada penulis. 14. Teman-temanku, Indra, Sanny, Willy, Agus C, Ivan dan Dyah serta seluruh TISTAT99. 15. Teman-teman dari STAT99 dan TI-MAT 99 serta adik-adik kelasku. 16. Serta pihak-pihak lain yang tidak bisa penulis sebutkan satu persatu. Penulis menyadari bahwa skripsi ini masih jauh dari sempurna, oleh karena itu segala masukan, saran dan kritik sangat penulis harapkan. Akhirnya penulis berharap agar skripsi ini dapat berguna dan dapat menjadi masukkan bagi setiap pihak yang menggunakannya. Jakarta, 23 Januari 2004
Luwi Darmawan NIM : 0300478582
vii
DAFTAR ISI Halaman JUDUL DALAM
..............................................................................................
LEMBAR PERSETUJUAN PEMBIMBING
......……....................................
iii
..................................………………………….
iv
.......................................................................................................
v
LEMBAR PENGESAHAN ABSTRAK
KATA PENGANTAR DAFTAR ISI
i
......................................................................................
vi
.....................................................................................................
viii
DAFTAR TABEL
.............................................................................................
DAFTAR GAMBAR DAFTAR LAMPIRAN
xi
........................................................................................
xii
....................................................................................
xiv
BAB 1 PENDAHULUAN
...............................................................................
1
1.1 Latar Belakang ...............................................................................
1
1.2 Ruang Lingkup ................................................................................
3
1.3 Perumusan Masalah
......................................................................
4
1.4 Tujuan dan Manfaat
.....................................................................
4
1.4.1
Tujuan
..............................................................................
4
1.4.2
Manfaat
..............................................................................
5
....................................................................................
6
1.5 Metodologi
1.6 Sistematika Penulisan
....................................................................
7
...........................................................................
8
.............................................................................
8
Konsep Dasar Rekayasa Piranti Lunak ............................
8
BAB 2 LANDASAN TEORI 2.1 Kerangka Teori 2.1.1
viii
2.1.1.1 Pengertian Rekayasa Piranti Lunak ...................
8
2.1.1.2 Paradigma Rekayasa Piranti Lunak ....................
8
Interaksi Manusia dan Komputer ......................................
10
2.1.2.1 Program Interaktif ................................................
11
2.1.2.2 Pedoman untuk Merancang User Interface .........
11
2.1.2.2.1 Delapan Aturan Emas .........................
11
2.1.2.2.2 Pedoman Merancang Tampilan Data ...
12
2.1.2.2.3 Teori Waktu Respons ..........................
13
2.1.3
Teori State Transition Diagram (STD) .............................
14
2.1.4
Perancangan Percobaan ....................................................
15
2.1.4.1 Definisi Perancangan Percobaan ........................
15
2.1.4.2 Manfaat Perancangan Percobaan .........................
15
2.1.2
2.1.5
Percobaan Faktorial dengan Rancangan Dasar Rancangan Acak Kelompok (RAK)
2.1.6
..................................................
16
Uji Beda Rata-rata Grup Perlakuan (Uji Kontras) ...........
22
2.1.6.1 Metode Pembanding Ortogonal .......................
23
2.1.6.2 Metode Polinomial Ortogonal ..........................
25
2.1.6.2.1 Perlakuan dengan Selang Sama ..........
27
2.1.6.2.2 Perlakuan dengan Selang Tidak Sama.. 29 2.2 Kerangka Berfikir BAB 3 PERANCANGAN
.........................................................................
30
...............................................................................
32
3.1 Gambaran Umum Instansi
......................................................
32
3.1.1 Sejarah Singkat Instansi ....................................................
32
3.1.2 Struktur Organisasi ...........................................................
33
ix
3.2 Objek Penelitian
........................................................................
33
3.2.1 Gambaran Umum Program MSTAT ..................................
33
3.2.2 Kebutuhan Pengembangan ................................................
35
3.3 Gambaran Umum Rancangan
................................................
36
3.4 Struktur Menu ...............................................................................
37
3.5 State Transition Diagram (STD)
...............................................
38
.......................................................................
42
3.6 Rancangan Layar
3.7 Modul-modul Perancangan
..........................................................
48
BAB 4 IMPLEMENTASI DAN EVALUASI .................................................. 60 4.1 Spesifikasi Perancangan
...……………………………………..
60
4.1.1 Spesifikasi Perangkat Lunak .................................................
60
4.1.2 Spesifikasi Perangkat Keras ..................................................
60
4.2 Implementasi Rancangan
.............................................................
61
4.3 Evaluasi Rancangan ......................................................................
73
4.3.1 Evaluasi Program berdasarkan Teori Interaksi Manusia dan Komputer ........................................................................
74
BAB 5 SIMPULAN DAN SARAN ..................................................................
79
5.1 Simpulan 5.2 Saran DAFTAR PUSTAKA
.....................................................................................
79
.......................................................................................... 79 ......................................................................................
DAFTAR RIWAYAT HIDUP LAMPIRAN-LAMPIRAN
81
....................................................................... 82
...............................................................................
x
83
DAFTAR TABEL Halaman Tabel 2.1 Analisis ragam percobaan faktorial dengan rancangan dasar RAK …… 22 Tabel 4.1 Tabel perbandingan program MSTAT dengan RANCOB ………...….. 74 Tabel L1 Data Pengamatan Hasil Gabah ............................................................... L1
xi
DAFTAR GAMBAR Halaman Gambar 2.1
Waterfall Model .................................................................................. 9
Gambar 3.1
Menu Pembuka MSTAT .................................................................. 34
Gambar 3.2
Menu Utama MSTAT ....................................................................... 34
Gambar 3.3
Struktur Menu Utama ....................................................................... 37
Gambar 3.4
Struktur Menu Data .......................................................................... 37
Gambar 3.5
Struktur Menu Edit ........................................................................... 37
Gambar 3.6
Struktur Menu Tampilkan ................................................................ 38
Gambar 3.7
Struktur Menu Bantuan ................................................................... 38
Gambar 3.8
STD Menu Utama ............................................................................. 38
Gambar 3.9
STD Menu Data ................................................................................ 39
Gambar 3.10
STD Menu Edit ................................................................................. 39
Gambar 3.11
STD Menu Tampilkan ...................................................................... 39
Gambar 3.12 STD Menu Bantuan .......................................................................... 40 Gambar 3.13
STD Submenu Disain ....................................................................... 40
Gambar 3.14
STD Submenu Input ......................................................................... 41
Gambar 3.15
STD Submenu Output ...................................................................... 41
Gambar 3.16
STD Submenu Uji Lanjut ............................................................... 42
Gambar 3.17
Rancangan Layar Menu Pembuka (Splashscreen) ........................... 43
Gambar 3.18
Rancangan Menu Utama ................................................................. 43
Gambar 3.19
Rancangan Layar Submenu Disain Faktor Pertama ....................... 44
Gambar 3.20
Rancangan Layar Submenu Disain Faktor Kedua ......................... 44
xii
Gambar 3.21
Rancangan Layar Submenu Input ................................................... 45
Gambar 3.22
Rancangan Layar Submenu Output ................................................ 46
Gambar 3.23
Rancangan Layar Submenu Uji Lanjut .......................................... 47
Gambar 3.24
Rancangan Layar Submenu Tentang Program ................................ 47
Gambar 4.1
Layar Menu Pembuka (Splashscreen) ............................................ 61
Gambar 4.2
Layar Menu Utama .......................................................................... 62
Gambar 4.3
Layar Submenu Disain Faktor Pertama ........................................... 63
Gambar 4.4
Layar Submenu Disain Faktor Kedua ............................................ 64
Gambar 4.5
Layar Informasi Kesalahan Input Data Submenu Disain ............... 65
Gambar 4.6
Layar Submenu Input ..................................................................... 66
Gambar 4.7
Layar Submenu Input dengan Informasi Kesalahan Input ............. 67
Gambar 4.8
Layar Submenu Output ................................................................. 68
Gambar 4.9
Grafik Permukaan Respon .............................................................. 68
Gambar 4.10
Layar Print Preview Submenu Output ........................................... 69
Gambar 4.11
Layar Submenu Uji Lanjut untuk Faktor Kuantitatif ..................... 70
Gambar 4.12
Layar Submenu Uji Lanjut untuk Faktor Kualitatif
Gambar 4.13
Layar Submenu Tentang Program .................................................. 71
Gambar 4.14
Layar Bantuan Bagian “Contents” ................................................. 72
Gambar 4.15
Layar Bantuan Bagian Informasi .................................................. 73
Gambar L1
Struktur Organisasi Balai ............................................................... L2
xiii
..................... 71
DAFTAR LAMPIRAN Halaman Lampiran 1 Data Penelitian .................................................................................
L1
Lampiran 2 Struktur Organisasi ...........................................................................
L2
Lampiran 3 Listing Program ................................................................................
L3
Lampiran 4 Surat Keterangan Survei .................................................................. L113
xiv
BAB 1 PENDAHULUAN
1.1 Latar Belakang Arus globalisasi dan teknologi saat ini berkembang demikian cepat di seluruh dunia. Teknologi-teknologi baru di berbagai bidang banyak bermunculan dan dengan cepat dapat diserap oleh manusia. Perkembangan teknologi perangkat lunak juga ikut mengalami peningkatan yang pesat seiring dengan majunya teknologi saat ini. Salah satu teknologi perangkat lunak yang mengalami kemajuan pesat adalah teknologi perangkat lunak dalam bidang pengolahan data. Pengolahan data memegang peranan yang penting dalam keberhasilan suatu percobaan, hal tersebut ditunjang oleh ketepatan dan keakuratan analisis data serta perangkat lunak yang digunakan. Salah satu bidang percobaan yang membutuhkan pengolahan data dengan tingkat ketelitian yang tinggi adalah percobaan di bidang pertanian. Balai Penelitian Bioteknologi dan Sumber Daya Genetik Pertanian yang berlokasi di Bogor adalah suatu Instansi dibawah Departemen Pertanian yang bertugas meneliti, mengembangkan dan mengkoleksi plasma nutfah (gen) tanaman pangan yang ada di Indonesia. Balai ini rutin mengadakan percobaan pertanian baik di laboratorium maupun langsung di kebun uji coba. Data percobaan pertanian yang telah dilakukan kemudian dicatat dan diolah dengan rumus statistik oleh program komputer untuk didapatkan hasil penelitian.
1
2 Salah satu percobaan pertanian yang sering dilakukan di balai ini adalah percobaan faktorial dengan rancangan dasarnya yaitu rancangan acak kelompok (RAK) dengan uji lanjut menggunakan pembanding ortogonal. Proses pengolahan data yang menggunakan percobaan tersebut di balai ini menggunakan suatu program yang bernama MSTAT yang dibuat oleh Michigan State University. Namun permasalahan yang muncul adalah kurangnya efisiensi dan efektifitas pengolahan data percobaan yang disebabkan adanya kelemahan program MSTAT pada tahap menginput data dan pada tahap menghasilkan output, sehingga dibutuhkan suatu program baru yang merupakan pengembangan dari program MSTAT yang dapat mengatasi kelemahan tersebut. Pada tahap menginput data program MSTAT masih membutuhkan input koefisien polinomial ortogonal dari pengguna, tidak dapat mengopi data yang telah ada dari program Microsoft Excel, dan data yang telah diinput hanya bisa disimpan ke disket. Pada tahap menghasilkan output, program ini tidak menghasilkan output grafik permukaan respon dari polinomial ortogonal dan data output program ini hanya bisa disimpan di dalam disket. Penulis tertarik untuk merancang suatu program pengolahan data percobaan yang dapat
berjalan di lingkungan windows yang dapat mengatasi kelemahan program
MSTAT dan dilengkapi dengan fasilitas program yang disesuaikan dengan kebutuhan balai. Oleh karena itu, penulis ingin menulis skripsi yang berjudul “PERANCANGAN PROGRAM APLIKASI PENGOLAHAN DATA PERCOBAAN MENGGUNAKAN METODE PEMBANDING ORTOGONAL”.
3 1.2 Ruang Lingkup Dalam penulisan skripsi ini, penulis akan melakukan perancangan suatu program aplikasi yang dapat mengolah data-data percobaan pertanian menggunakan analisis ragam dan metode pembanding ortogonal. Karena materi yang dicakup cukup luas, maka penulis akan membatasi ruang lingkup pembahasan dan perancangan sebagai berikut : 1. Dalam penulisan skripsi ini, penulis mengambil studi kasus di Balai Penelitian Bioteknologi dan Sumber Daya Genetik Pertanian Bogor. 2. Data percobaan yang digunakan merupakan data sekunder yang diperoleh dari balai tersebut. 3. Model percobaan yang akan dibahas adalah percobaan faktorial 2 faktor dengan rancangan dasar yaitu rancangan acak kelompok (RAK). Sedangkan metode pembanding ortogonal yang dibahas adalah polinomial ortogonal sampai dengan derajat dua. 4. Asumsi yang dibutuhkan dalam analisis ragam ini adalah galat percobaan menyebar normal, Galat percobaan memiliki ragam yang homogen, Galat percobaan saling bebas, serta pengaruh perlakuan dan lingkungan aditif. 5. Karena terbatasnya waktu penulisan maka penulis membatasi perancangan program dengan tidak menampilkan pengujian asumsi analisis ragam dan pengolahan data percobaan untuk kasus data hilang. 6. Kemampuan
MSTAT
yang
akan
dikembangkan,
dibatasi
hanya
mengembangkan proses pengolahan data percobaan faktorial dengan rancangan dasar RAK dan uji lanjut dengan pembanding ortogonal dan polinomial ortogonal.
4 1.3 Perumusan Masalah Adapun perumusan masalah dalam penulisan skripsi ini adalah : Kurangnya efisiensi dan efektifitas pengolahan data percobaan yang disebabkan adanya kelemahan program MSTAT pada tahap menginput data dan pada tahap menghasilkan output.
1.4 Tujuan dan Manfaat 1.4.1
Tujuan
Adapun tujuan dari perancangan ini adalah : a. Tujuan Umum : Merancang suatu program yang dapat mengatasi kelemahan program MSTAT sehingga proses pengolahan data percobaan menjadi lebih efisien dan efektif. b. Tujuan Khusus : 1. Merancang suatu program aplikasi pengolahan data percobaan yang dapat mengolah data-data percobaan faktorial 2 faktor dengan rancangan dasar rancangan acak kelompok dan dengan uji lanjut menggunakan pembanding ortogonal. 2. Merancang suatu program aplikasi pengolahan data percobaan yang dapat menampilkan grafik permukaan respon dari polinomial ortogonal. 3. Merancang suatu program aplikasi pengolahan data percobaan yang tidak memerlukan input koefisien polinomial ortogonal dari pengguna. 4. Merancang suatu program aplikasi pengolahan data percobaan yang dapat mengopi data percobaan yang telah ada dari program Microsoft Excel.
5 5. Merancang suatu program aplikasi pengolahan data percobaan yang dapat menyimpan data dan output program pada media harddisk dan media penyimpanan lainnya. 6. Merancang suatu program yang memiliki user interface yang baik, dan mampu memberikan kemudahan bagi pengguna dalam mengoperasikan program dengan membuat struktur menu yang baik.
1.4.2
Manfaat
Adapun manfaat yang dapat diperoleh dari perancangan ini adalah : a. Bagi Mahasiswa : 1. Dapat menjadi suatu sarana untuk lebih memahami mata kuliah Metode Perancangan Percobaan. 2. Dapat menjadi masukkan bagi mahasiswa untuk dapat mengembangkan dan meningkatkan program ini lebih baik lagi. b. Bagi Balai Penelitian : 1. Dapat mengolah data-data percobaan faktorial 2 faktor dengan rancangan dasar rancangan acak kelompok dan dengan uji lanjut menggunakan pembanding ortogonal. 2. Dapat mengetahui fungsi respon dari suatu percobaan dengan melihat grafik permukaan respon dari program aplikasi ini. 3. Dapat memudahkan pengguna dalam proses input data dengan tidak diperlukannya lagi untuk menginput koefisien polinomial ortogonal. 4. Dapat mengopi data percobaan yang telah ada dari program Microsoft Excel.
6 5. Dapat menyimpan data dan output program pada media harddisk dan media penyimpanan lainnya. 6. Dapat menjadi masukkan bagi balai penelitian untuk dapat mengembangkan program ini dengan rancangan-rancangan percobaan yang lain.
1.5 Metodologi Adapun metodologi yang digunakan didalam menulis skripsi ini meliputi 2 (dua) bagian pokok yaitu metode pengumpulan data dan metode perancangan. 1. Metode Pengumpulan Data a. Data primer didapatkan melalui wawancara dengan pihak peneliti di balai, untuk mengetahui kebutuhan pengembangan program sebelum dilakukan perancangan program aplikasi pengolahan data percobaan ini. b. Data sekunder didapatkan dari balai dengan menggunakan data percobaan yang telah dilakukan pada balai ini. 2. Metode Perancangan Dalam penyusunan skripsi ini, metode perancangan yang digunakan adalah menggunakan metode perancangan terstruktur melalui tahapan : 1. Perancangan Struktur Menu 2. Perancangan State Transition Diagram (STD) 3. Perancangan Layar 4. Perancangan Modul
7 1.6 Sistematika Penulisan Penulisan skripsi ini disusun atas 5 (lima), dan berikut ini adalah gambaran umum dari masing-masing bab tersebut : BAB 1 PENDAHULUAN Bab ini menjelaskan tentang latar belakang, ruang lingkup, perumusan masalah, tujuan dan manfaat, metodologi serta sistematika penulisan. BAB 2 LANDASAN TEORI Bab ini menjelaskan tentang teori-teori yang menunjang penulisan skripsi ini, serta kerangka berfikir. BAB 3 PERANCANGAN Bab ini menjelaskan tentang gambaran umum instansi, objek penelitian, gambaran umum rancangan, struktur menu, state transition diagram, rancangan layar dan modul-modul perancangan. BAB 4 IMPLEMENTASI DAN EVALUASI Bab ini menjelaskan tentang spesifikasi perancangan, implementasi rancangan dan evaluasi rancangan. BAB 5 SIMPULAN DAN SARAN Bab ini menjelaskan tentang simpulan dan saran.
BAB 2 LANDASAN TEORI
2.1 Kerangka Teori 2.1.1
Konsep Dasar Rekayasa Piranti Lunak
2.1.1.1 Pengertian Rekayasa Piranti Lunak Pengertian rekayasa piranti lunak pertama kali diperkenalkan oleh Fritz Bauer pada suatu konferensi. Beliau mengatakan rekayasa piranti lunak adalah penetapan dan penggunaan prinsip-prinsip rekayasa dalam usaha mendapatkan piranti lunak yang ekonomis, yaitu piranti lunak yang terpercaya dan bekerja efisien pada mesin atau komputer (Pressman, 1992, p19).
2.1.1.2 Paradigma Rekayasa Piranti Lunak Terdapat lima paradigma (model proses) dalam merekayasa suatu piranti lunak, yaitu The Classic Life Cycle atau sering juga disebut Waterfall Model, Prototyping Model, Fourth Generation Techniqeus (4GT), Spiral Model, dan Combine Model. Pada penulisan skripsi ini, penulis mempergunakan Waterfall Model. Menurut Pressman (1992, p20-21), ada enam tahap dalam Waterfall Model, seperti gambar 2.1 berikut adalah penjabarannya :
8
9
Gambar 2.1 Waterfall Model
a. Rekayasa sistem (System Engineering) Karena perangkat lunak merupakan bagian dari sebuah sistem yang lebih besar, maka aktivitas ini dimulai dengan penetapan kebutuhan dari semua elemen sistem. Gambaran sistem ini penting jika perangkat lunak harus berinteraksi dengan elemen-elemen lain, seperti hardware, manusia dan database. b. Analisis kebutuhan perangkat lunak (Software Requirement Analysis) Analisis yang dilakukan pada tahap ini adalah untuk mengetahui kebutuhan piranti lunak, sumber informasi piranti lunak, fungsi-fungsi yang dibutuhkan, kemampuan piranti lunak dan antarmuka piranti lunak tersebut. c. Perancangan (Design) Perancangan piranti lunak dititikberatkan pada empat atribut program, yaitu struktur data, arsitektur piranti lunak, rincian prosedur dan karakter
10 antarmuka. Proses perancangan menerjemahkan kebutuhan ke dalam sebuah representasi perangkat lunak yang dapat dinilai kualitasnya sebelum dilakukan pengkodean. d. Pengkodean (Coding) Aktivitas yang dilakukan adalah memindahkan hasil perancangan menjadi suatu bentuk yang dapat dimengerti oleh mesin, yaitu dengan membuat program. e. Pengujian (Testing) Tahap pengujian perlu dilakukan agar output yang dihasilkan oleh program sesuai dengan yang diharapkan. Pengujian dilakukan secara menyeluruh hingga semua perintah dan fungsi telah diuji. f. Pemeliharaan (Maintenance) Karena kebutuhan pemakai selalu akan meningkat, maka piranti lunak yang telah selesai dibuat perlu dipelihara agar dapat mengantisipasi kebutuhan pemakai terhadap fungsi-fungsi baru yang dapat timbul karena munculnya sistem operasi baru dan perangkat keras baru.
2.1.2
Interaksi Manusia dan Komputer
Saat ini orang sangat menyenangi suatu sistem atau program yang interaktif, karena itu penggunaan komputer telah berkembang pesat sebagai suatu program yang interaktif yang membuat orang tertarik untuk menggunakannya. Program yang interaktif ini perlu dirancang dengan baik sehingga pengguna dapat merasa senang dan juga dapat ikut berinteraksi dengan baik dalam menggunakannya.
11 2.1.2.1 Program Interaktif Suatu program yang interaktif dan baik harus bersifat user frendly. Shneiderman (1998, p15) menjelaskan lima kriteria yang harus dipenuhi oleh suatu program yang user friendly yaitu : 1. Waktu belajar yang tidak lama. 2. Kecepatan penyajian informasi yang tepat. 3. Tingkat kesalahan pemakaian rendah. 4. Penghafalan sesudah melampaui jangka waktu. 5. Kepuasan pribadi. Suatu program yang interaktif dapat dengan mudah dibuat dan dirancang dengan suatu perangkat bantu pengembang sistem antarmuka, seperti Visual Basic, Borland Delphi dan sebagainya. Keuntungan penggunaan perangkat bantu untuk mengembangkan antarmuka menurut Santosa (1997, p7) yaitu : 1.
Antarmuka yang dihasilkan menjadi lebih baik.
2.
Program antar mukanya menjadi mudah ditulis dan lebih ekonomis untuk dipelihara.
2.1.2.2 Pedoman untuk Merancang User Interface Terdapat beberapa pedoman yang dianjurkan dalam merancang suatu program guna mendapatkan suatu program yang user friendly. 2.1.2.2.1
Delapan Aturan Emas
Menurut Shneiderman (1998, p74-75) untuk merancang sistem interaksi manusia dan komputer yang baik, harus memperhatikan delapan aturan utama dibawah ini, yaitu :
12 1. Strive for concistency (Bertahan untuk konsisten). 2. Enable Frequent user to use shortcuts (Memperbolehkan pengguna sering memakai shortcut). 3. Offer informative feed back (Memberikan umpan balik yang informatif). 4. Design dialogs to yield closure (Pengorganisasian yang baik sehingga pengguna mengetahui kapan awal dan akhir dari suatu aksi). 5. Offer simple error handling (Penanganan kesalahan yang sederhana). 6. Permit easy reversal of actions (Mengizinkan pembalikan aksi (undo) dengan mudah). 7. Support Internal Locus of control (Pemakai menguasai sistem atau inisiator, bukan responden). 8. Reduce short term memory load (Mengurangi baban ingatan jangka pendek, dimana manusia hanya dapat mengingat 7 + 2 satuan informasi sehingga perancangannya harus sederhana).
2.1.2.2.2
Pedoman Merancang Tampilan Data
Beberapa pedoman yang disarankan untuk digunakan dalam merancang tampilan data yang baik menurut Smith dan Mosier yang dikutip oleh Shneiderman (1998, p80) yaitu : 1. Konsistensi tampilan data, istilah, singkatan, format dan sebagainya harus standar.
13 2. Beban ingatan yang sesedikit mungkin bagi pengguna. Pengguna tidak perlu mengingat informasi dari layar yang satu ke layar yang lain. 3. Kompatibilitas tampilan data dengan pemasukan data. Format tampilan informasi perlu berhubungan erat dengan tampilan pemasukan data. 4. Fleksibilitas kendali pengguna terhadap data. Pemakai harus dapat memperoleh informasi dari tampilan dalam bentuk yang paling memudahkan.
2.1.2.2.3
Teori Waktu Respons
Waktu respons dalam sistem komputer menurut Sneiderman (1998, p352) adalah jumlah detik dari saat pemakai memulai aktifitas (misalnya dengan menekan tombol enter atau tombol mouse) sampai komputer menampilkan hasilnya di display atau printer. Beberapa pedoman yang disarankan mengenai kecepatan waktu respons pada suatu program menurut Sneiderman (1998, p367), yaitu : 1. Pemakai lebih menyukai waktu respons yang lebih pendek. 2. Waktu respons yang lebih panjang (lebih dari 15 detik) mengganggu. 3. Waktu respons yang lebih pendek menyebabkan waktu pengguna berfikir lebih pendek. 4. Langkah yang lebih cepat dapat meningkatkan produktivitas, tetapi juga dapat meningkatkan tingkat kesalahan. 5. Waktu respons harus sesuai dengan tugasnya :
14 a. Untuk mengetik, menggerakkan kursor, memilih dengan mouse : 50 – 150 milidetik. b. Tugas sederhana yang sering : < 1 detik. c. Tugas biasa : 2 – 4 detik. d. Tugas kompleks : 8 – 12 detik. 6. Pemakai harus diberi tahu mengenai penundaan yang panjang.
2.1.3
Teori State Transition Diagram (STD)
State Transition diagram merupakan sebuah modelling tool yang digunakan untuk mendeskripsikan sistem yang memiliki ketergantungan terhadap waktu. STD merupakan suatu kumpulan keadaan atau atribut yang mencirikan suatu keadaan pada waktu tertentu. Komponen-komponen utama STD adalah : 1. State, disimbolkan dengan State merepresentasikan reaksi yang ditampilkan ketika suatu tindakan dilakukan. Ada dua jenis state yaitu : state awal dan state akhir. State akhir dapat berupa beberapa state, sedangkan state awal tidak boleh lebih dari satu. 2. Arrow, disimbolkan dengan Arrow sering disebut juga dengan transisi state yang diberi label dengan ekspresi aturan, label tersebut menunjukkan kejadian yang menyebabkan transisi terjadi.
15 3. Condition dan Action, disimbolkan dengan Condition Action State 1
State 2
Untuk melengkapi STD diperlukan 2 hal lagi yaitu condition dan action. Condition adalah suatu event pada lingkungan eksternal yang dapat dideteksi oleh sistem, sedangkan Action adalah yang dilakukan oleh sistem bila terjadi perubahan state atau merupakan reaksi terhadap kondisi. Aksi akan menghasilkan keluaran atau tampilan.
2.1.4
Perancangan Percobaan 2.1.4.1 Definisi Perancangan Percobaan Definisi perancangan percobaan menurut Nazir (1988, p267) adalah semua proses yang diperlukan dalam merencanakan dan melaksanakan percobaan. Perancangan percobaan bukan hanya memberikan proses perencanaan saja, tetapi juga mencakup langkah-langkah yang berurutan yang menyeluruh dan komplit yang dibuat lebih dahulu. 2.1.4.2 Manfaat Perancangan Percobaan Menurut Nazir (1988, p268), manfaat dari perancangan percobaan adalah untuk memperoleh suatu keterangan yang maksimum mengenai cara membuat percobaan dan bagaimana proses perencanaan serta pelaksanaan percobaan akan dilakukan.
16 2.1.5
Percobaan Faktorial dengan Rancangan Dasar Rancangan Acak Kelompok (RAK) Pengertian percobaan faktorial menurut Steel dan Torrie (1981, p404)
adalah percobaan yang perlakuannya terdiri atas semua kemungkinan kombinasi taraf dari beberapa faktor. Menurut Runyon (1985, p199), percobaan faktorial adalah percobaan yang terdapat dua atau lebih taraf dalam setiap kondisi perlakuan. Sedangkan menurut Gomez K.A dan Gomez A (1995, p92), percobaan faktorial adalah suatu percobaan di mana perlakuan di dalamnya terdiri dari semua kemungkinan kombinasi taraf terpilih untuk dua faktor atau lebih. Lebih lanjut, istilah faktorial menggambarkan suatu cara khusus di mana perlakuan dibentuk dan tidak menunjukkan penggunaan rancangan percobaan yang digunakan (Gomez K.A dan Gomez A., 1995, p93) Menurut Gaspersz (1991, p181), pengertian percobaan faktorial adalah suatu percobaan mengenai sekumpulan perlakuan yang terdiri atas semua kombinasi yang mungkin dari taraf beberapa faktor. Lebih lanjut menurut Gaspersz (1991, p180) pada percobaan faktorial ini, kita hanya mengamati pengaruh faktor tunggal terhadap respon tertentu dan dalam percobaan ini kita tetap menggunakan salah satu rancangan dasar yaitu RAK, RAL, atau lainnya. Lebih lanjut Gaspersz (1991,p226) mengatakan, “Percobaan faktorial dengan rancangan dasar RAK tidak lain adalah menggunakan RAK sebagai rancangan percobaannya, sedangkan faktor yang dicobakan lebih dari satu faktor.” Menurut Montgomery (2001,p175), Percobaan faktorial memiliki beberapa keuntungan, percobaan ini lebih efisien dibandingkan dengan percobaan faktor
17 tunggal, percobaan faktorial ini juga penting untuk mencegah kesimpulan yang salah ketika terjadi interaksi. Setiap rancangan acak kelompok untuk percobaan faktor tunggal dapat digunakan untuk percobaan faktorial. Prosedur untuk pengacakan dan penataan setiap rancangan dapat langsung digunakan dengan cara mengabaikan komposisi faktor dari percobaan faktorial dan pertimbangkan semua perlakuan seolah-olah mereka tidak berhubungan. Untuk sidik ragam perhitungan yang dibicarakan dalam setiap rancangan juga langsung dapat digunakan. Akan tetapi, diperlukan langkahlangkah perhitungan tambahan untuk memilah jumlah kuadrat perlakuan sesuai dengan pengaruh utama untuk setiap faktor individu dan interaksinya (Gomez K.A dan Gomez A,1995,p94). Berikut adalah langkah-langkah analisis ragam suatu percobaan dua faktor dalam RAK : 1. Model umum dari analisis ragam percobaan dua faktor dalam RAK, adalah :
Yijk = u + Kk + Ai + Bj + ( AB)ij + ∈ ijk ;
i = 1,2,...,a j = 1,2,...,b k = 1,2,...,r
dimana : Yijk
= nilai pengamatan (respons) dari kelompok ke-k, yang memperoleh taraf ke-i dari faktor A, dan taraf ke-j dari faktor B
u
= nilai rata-rata yang sesungguhnya
Kk
= pengaruh aditif dari kelompok ke-k
Ai
= pengaruh aditif dari taraf ke-i faktor A
18 = pengaruh aditif dari taraf ke-j faktor B
Bj
(AB)ij = pengaruh interaksi dari taraf ke-i faktor A dan taraf ke-j faktor B
∈ ijk = pengaruh galat percobaan pada kelompok ke-k yang memperoleh taraf ke-i faktor A dan taraf ke-j faktor B.
2. Asumsi Asumsi yang dibutuhkan dalam analisis ragam ini adalah (1) Galat percobaan menyebar normal; (2) Galat percobaan memiliki ragam yang homogen; (3) Galat percobaan saling bebas; dan (4) pengaruh perlakuan dan lingkungan aditif.
3. Hipotesis Hipotesis yang diuji dalam penelitian adalah : a. H0 : (AB) ij = 0, yang berarti tidak ada pengaruh interaksi antara faktor A dan B terhadap respon yang diamati. H1 : minimal ada satu (AB) ij ≠ 0, artinya ada pengaruh interaksi antara faktor A dan B terhadap respon yang diamati. b. H0 : Ai = 0, yang berarti tidak ada pengaruh faktor A terhadap respon yang diamati. H1 : minimal ada satu Ai ≠ 0, artinya ada pengaruh faktor A terhadap respon yang diamati.
19 c. H0 : Bj = 0, yang berarti tidak ada pengaruh faktor B terhadap respon yang diamati. H1 : minimal ada satu Bi ≠ 0, artinya ada pengaruh faktor B terhadap respon yang diamati.
4. Prosedur analisis ragam Prosedur analisis ragam untuk percobaan faktorial yang terdiri dari 2 faktor (A dan B) dengan menggunakan rancangan dasar RAK dapat dijabarkan melalui tahap-tahap berikut :
Tahap 1. Menghitung faktor koreksi (FK), jumlah kuadrat total (JKT), jumlah kuadrat kelompok (JKK), jumlah kuadrat perlakuan (JKP), dan jumlah kuadrat galat (JKG). Jika r, a, dan b masing-masing melambangkan banyaknya kelompok , banyaknya taraf faktor A, dan banyaknya taraf faktor B, maka :
FK =
Y..2 ( total umum) 2 = rab banyak pengamatan
JKT =
∑Y
2 ijk
..................................(1)
− FK
............................ (2)
i , j ,k
JKT = jumlah kuadrat nilai pengamatan – faktor koreksi
JKK =
∑Y
2 .. k
k
ab
− FK = ∑
(total kelompok )2 ab
− FK
............................(3)
20
∑Y
2 ij .
JKP =
i, j
r
− FK = ∑
(total perlakuan )2 r
− FK
........................... (4) ......................…. (5)
JKG = JKT – JKK – JKP
Tahap 2. Menghitung derajat bebas (db) masing-masing melalui : db kelompok = r – 1
....................................(6)
db perlakuan = ab – 1
....................................(7)
db galat = (r – 1)(ab – 1)
....................................(8)
db total = rab – 1
....................................(9)
Tahap 3. Menghitung ketiga komponen faktorial dari jumlah kuadrat perlakuan sebagai berikut :
∑ (a )
2
i
JK (A) =
i
rb
∑ (b )
− FK =
∑
2
j
JK (B) =
j
ra
− FK =
∑
(total taraf faktor A )2 - FK rb
(total taraf faktor B)2 - FK
JK (A x B) = JKP – JK (A) – JK (B)
ra
........(10)
........(11)
...................(12)
Tahap 4. Menghitung derajat bebas (db) untuk pengaruh utama dan interaksi faktor A dan faktor B, sebagai berikut : db faktor A = a – 1
...................................(13)
db faktor B = b – 1
...................................(14)
db interaksi A x B = (a – 1)(b – 1)
...................................(15)
21
Tahap 5. Menghitung kuadrat tengah (KT) masing-masing melalui pembagian antara JK dan derajat bebasnya, yaitu :
KT (A) =
JK ( A) a −1
................................(16)
KT (B) =
JK ( B ) b −1
................................(17)
JK( AxB) (a − 1)(b − 1)
................................(18)
JK galat (r − 1)(ab − 1)
................................(19)
KT (A x B) =
KT Galat =
Tahap 6. Menghitung nilai F untuk masing-masing dari ketiga komponen faktorial, sebagai berikut : F (A) =
KT ( A) KTGalat
..................................(20)
F (B) =
KT ( B) KTGalat
..................................(21)
F (A x B) =
KT ( AxB) KTGalat
..................................(22)
Tahap 7. Bandingkan setiap nilai F hitung dengan nilai F tabel, dengan f1 = db KT pembilang dan f2 = db KT penyebut, pada taraf nyata yang tertera. 1. Apabila F hitung < F tabel (α = 0. 05) maka F hitung tidak nyata (tn). 2. Apabila F tabel
(α = 0. 05)
< F hitung < F tabel
(α = 0. 01)
maka F hitung
nyata (*). 3. Apabila F hitung < F tabel (α = 0. 01) maka F hitung sangat nyata (**).
22 Tahap 8. Kesimpulan 1. Tolak H0 jika F hitung nyata atau sangat nyata, yang berarti tidak ada pengaruh perlakuan faktor yang diuji terhadap respon yang diamati. 2. Terima H1 jika F hitung tidak nyata, yang berarti ada pengaruh perlakuan faktor yang diuji terhadap respon yang diamati.
Tahap 9. Menghitung koefisien keragaman (kk) sebagai berikut : KT Galat
kk =
rataan umum
x 100
..................................(23)
Tahap 10. Masukkan semua nilai yang diperoleh dari tahap 1 sampai tahap 8 ke dalam tabel 2.1 berikut : Tabel 2.1 Analisis ragam percobaan faktorial dengan rancangan dasar RAK Sumber
Derajat
Jumlah
Kuadrat
F
F Tabel
Keragaman
Bebas
Kuadrat
Tengah
Hitung
5%
Kelompok
r–1
JKK
KTK
Perlakuan
ab – 1
JKP
KTP
A
a–1
JK (A)
KT(A)
F (A)
B
b–1
JK (B)
KT(B)
F (B)
(a-1)(b-1)
JK (AxB)
KT(AxB)
F (AxB)
Galat
(r-1)(ab-1)
JKG
KTG
Total
rab –1
JKT
-
AxB
2.1.6
1%
Uji Beda Rata-rata Grup Perlakuan (Uji Kontras)
Pada uji beda rata-rata grup perlakuan atau uji kontras ini, yang akan dibahas adalah (1) bagaimana membedakan pengaruh grup-grup perlakuan dan pengaruh
23 perlakuan-perlakuan dalam suatu grup perlakuan tertentu menurut metode pembanding ortogonal, dan (2) tentang bagaimana membedakan kecenderungan pengaruh-pengaruh perlakuan dalam percobaan faktor faktorial menurut metode polinomial ortogonal.
2.1.6.1 Metode Pembanding Ortogonal
Metode pembanding ortogonal ini sebaiknya hanya digunakan terhadap perlakuan-perlakuan yang dapat dikontraskan atau perlakuanperlakuan yang masing-masing kelompoknya mempunyai ciri yang kontras. Ciri kontras ini umumnya hanya dijumpai pada faktor kualitas. Dalam metode pembanding ortogonal, prosedur analisis statistik dilakukan dalam 2 tahap, yaitu : Tahap 1, Analisis Jumlah Kuadrat (JK) utama seperti halnya dalam uji Anova menurut rancangan percobaan yang digunakan. Tahap 2, Analisis JK perlakuan rincian, yang merupakan lanjutan dari JK perlakuan pada JK utama (tahap 1) sesuai dengan rencana pengujian sebelum percobaan. Berikut adalah penjelasan prosedur statistik dalam tahap 2 : Kontras berderajat bebas (db) tunggal merupakan fungsi linier (L) dari jumlah-jumlah perlakuan : t
L=
∑c T i =1
i i
= c1T1 + c2T2 + ... + ciTi
........................(24)
24 Menurut Gomez dan Gomez (1995, p223), JK kontras linier JK(L) ber-db tunggal dihitung sebagai berikut : JK(L) =
L2 r (∑ C 2 )
..............................(25)
Dua kontras db tunggal dikatakan ortogonal apabila jumlah hasil kali dari koefisiennya sama dengan nol, yaitu dua kontras dengan masing-masing mempunyai db tunggal : L1 = c11T1 + c12T2 + ... + c1tTt L2 = c21T1 + c22T2 + ... + c2tTt Dikatakan ortogonal apabila memenuhi ketentuan berikut ini : t
∑c i =1
c = c11c21 + c12c22 + ... + c1tc2t = 0
1i 2 i
...............................(26)
Suatu grup dari p kontras db tunggal, dimana p>2 dikatakan ortogonal bersama (mutually orthogonal) apabila setiap pasang dan semua pasangan dari kontras dalam grup adalah ortogonal. Bagi suatu percobaan dengan t perlakuan, jumlah maksimum kontras ortogonal bersama dengan db tunggal yang dapat disusun adalah (t – 1) atau sebesar db JK Perlakuan. Setiap grup perlakuan dari (t –1) kontras ortogonal bersama dengan db tunggal, jumlah dari JK-nya sama dengan JK perlakuan, yaitu : JK(L1) + JK(L2) + JK(L3) + ... + JK(Lt-1) = JK Perlakuan .....(27) Menurut kontras berderajat bebas tunggal ini pengujian dapat dilakuakn terhadap semua tipe perbandingan grup yang direncanakan sebelum percobaan.
25 Menurut Hanafiah (2001, p71), pengujian metode pembanding ortogonal ini dilakukan dalam dua tahap, yaitu : 1. Uji beda antar grup. Pada tahap ini perlakuan-perlakuan dikelompokkan menjadi beberapa grup perlakuan. 2. Uji beda dalam grup. Pada tahap ini, uji nyata hanya dilakukan terhadap perlakuanperlakuan yang terdapat dalam suatu grup perlakuan tertentu.
2.1.6.2 Metode Polinomial Ortogonal
Dalam perlakuan kuantitatif, seperti kepadatan tanaman atau kadar pemupukkan yang digunakan, terdapat kontinuitas dari satu taraf perlakuan ke perlakuan lainnya dan banyaknya kemungkinan taraf perlakuan yang dapat dicobakan dalam satu pengujian adalah tidak terbatas (Gomesz K.A. dan Gomesz A.A, 1995,p231). Meskipun taraf perlakuan yang dapat diujikan dalam suatu pengujian jumlahnya terbatas, tetapi minat peneliti biasanya mencakup keseluruhan wilayah perlakuan. Akibatnya jenis pembandingan rataan yang terarah kepada perlakuan tertentu yang diujikan tidaklah tepat. Pendekatan yang lebih tepat adalah mempelajari hubungan fungsi antara respons dan perlakuan yang mencakup seluruh wilayah taraf perlakuan yang diujikan. Meskipun pembandingan arah dapat dibuat untuk setiap hubungan fungsi yang diminta, yang paling sederhana dan umum digunakan adalah
26 berdasar polinomial. Suatu derajat polinomial ke-n menjelaskan hubungan antara peubah tidak bebas Y dan peubah bebas X disajikan sebagai :
Y = α + β 1 X + β 2 X 2 + ... + β n X n
.........................(24)
sedangkan α adalah intersep dan βi (i = 1,...,n) adalah koefisien regresi sebagian yang berhubungan dengan derajat polinomial ke-i. Cara pembandingan arah berdasarkan polinomial, biasanya lebih dikenal sebagai metode polinomial ortogonal, yakni mencari derajat polinomial terendah yang dapat disajikan secara memadai antara peubah tidak bebas Y (biasanya ditunjukkan dengan respon tanaman atau respon bukan tanaman). Gomesz dan Gomesz (1995,p232) menjabarkan caranya perhitungannya sebagai berikut : 1. Penyusunan suatu gugus kontras ortogonal bersama derajat bebas tunggal dengan kontras pertama menunjukkan derajat polinomial pertama (linier), kontras kedua menunjukkan derajat polinomial kedua (kuadratik) dan seterusnya. Banyaknya polinomial yang dapat dipelajari akan tergantung kepada banyaknya
pengamatan
berpasangan
(n)
atau
umumnya
banyaknya perlakuan yang diujikan (t). Kenyataannya, derajat polinomial tertinggi yang dapat dipelajari sama dengan (n– 1) atau (t – 1). 2. Penghitungan JK dan pengujian beda nyata untuk setiap kontras.
27 3. Pemilihan derajat polinomial tertentu yang paling baik dalam menguraikan hubungan antara perlakuan dan responnya. Berikut ini digambarkan
metode polinomial ortogonal untuk dua kasus,
yang satu mempunyai perlakuan-perlakuan dengan selang yang sama, dan yang kedua mempunyai perlakuan dengan selang yang tidak sama.
2.1.6.2.1
Perlakuan dengan Selang Sama
Langkah-langkah yang terdapat dalam penggunaan metode polinomial ortogonal untuk membandingkan arah di antara rataan perlakuan dengan selang yang sama adalah :
Langkah 1. Dari tabel pada lampiran, diperoleh gugus dari (t-1) kontras derajat bebas tunggal yang menunjukkan polinomial ortogonal, di mana t adalah jumlah perlakuan yang diujikan.
Langkah 2. Menghitung JK untuk setiap kontras derajat bebas tunggal atau setiap polinomial ortogonal yang diperoleh dari langkah 1, dengan rumus sebagai berikut :
∑L JK ( L) = r (∑ c ) 2
2
.................. (27)
Langkah 3. Menghitung nilai F untuk setiap derajat polinomial dengan membagi setiap JK yang dihitung dalam langkah 2 dengan kuadrat tengah galat dari analisis ragam.
28 Fi =
JK i KT Galat
.................... (28)
dimana i adalah derajat polinomial Langkah 4. Membandingkan tiap nilai F hitung dengan nilai F tabel dengan f1 = 1 dan f2 = derajat bebas galat pada taraf nyatanya yang disarankan.
Langkah 5. Gabungkan JK dari seluruh polinomial yang paling sedikit dua derajat lebih tinggi daripada polinomial tertinggi yang berbeda nyata. Nilai JK gabungan ini biasanya disebut sebagai JK sisa. Derajat bebas sisa sama dengan banyaknya JK
yang
digabungkan KT sisa =
F=
JK sisa db sisa
KT sisa KT galat
........................... (29)
........................... (30)
Nilai F hitung dapat dibandingkan dengan nilai F tabel dengan f1 = derajat bebas sisa dan f2= derajat bebas galat pada taraf nyata yang disarankan. Jika F hitung > F tabel maka tolak Ho dan Jika F hitung < F tabel maka terima Ho.
Langkah 6. Masukkan nilai yang diperoleh dari langkah 2 sampai 5 ke dalam tabel analisis ragam.
29 2.1.6.2.2
Perlakuan dengan Selang Tidak Sama
Dalam metode polinomial ortogonal, perbedaan antara kasus dengan selang yang sama dan selang yang tidak sama hanyalah dalam memperoleh gugus kontras ortogonal bersama derajat bebas tunggal yang tepat. Untuk setiap kasus, koefisien kontras harus diperoleh dari selang perlakuan yang tidak sama, bukan langsung dari tabel koefisien kontras baku. Akan tetapi, sekali koefisien kontras didapatkan, cara perhitungannya sama untuk kedua kasus. Untuk selanjutnya pembahasan akan ditujukan untuk memperoleh koefisien polinomial ortogonal untuk kasus yang selangnya tidak sama. Gomesz dan Gomesz (1995,p236-240) memberikan langkahlangkah untuk mendapatkan tiga gugus koefisien polinomial ortogonal, yaitu sebagai berikut :
Langkah 1. Sandikanlah perlakuan dengan menggunakan bilangan cacah yang terkecil.
Langkah 2. Hitung ketiga gugus koefisien polinomial ortogonal, untuk derajat polinomial pertama (linier), kedua (kuadratik), sebagai berikut : Li = a + X i
...............................(31)
Qi = b + cX i + X i2
...............................(32)
30 untuk Li,Qi (i= 1, ...,t) adalah koefisien dari perlakuan berturut-turut untuk linier dan kuadratik. t adalah banyaknya perlakuan dan a, b dan c adalah parameter yang diperlukan untuk menduga keenam persamaan berikut : t
t
i =1
i =1
∑ Li = ta + ∑ X i = 0 t
∑Q i =1
i
t
t
i =1
i =1
................................(33)
=tb + c∑ X i + ∑ X i2 = 0
................................(34)
Dua persamaan diatas diperoleh dari ketentuan kontras derajat bebas tunggal yang jumlah koefisiennya harus sama dengan nol. Penyelesaian yang umum bagi kedua parameter tersebut adalah: a=−
∑X
..................................(35)
t
(∑ X )(∑ X ) − (∑ X ) b= t (∑ X ) − (∑ X )
........................(36)
(∑ X )(∑ X ) − t (∑ X ) c= t (∑ X ) − (∑ X )
........................(37)
2 2
3
2
2
2
2
3
2
Nilai parameter a, b dan c yang dihitung, kemudian digunakan dalam persamaan langkah 2 untuk menghitung Li, Qi untuk setiap taraf.
2.2 Kerangka Berfikir
Pengolahan data percobaan membutuhkan suatu alat bantu program yang dapat mengolah data-data percobaan dengan tepat dan memberikan kemudahan dalam proses
31 input data dan proses menghasilkan output. Masalah kelemahan program MSTAT pada tahap menginput data dan pada tahap menghasilkan output dapat diatasi dengan merancang suatu program baru yang merupakan pengembangan dari program MSTAT. Program aplikasi yang penulis beri nama RANCOB ini, dapat mengolah datadata percobaan faktorial 2 faktor dengan uji lanjut menggunakan metode pembanding ortogonal. Program aplikasi ini juga dapat mengatasi kelemahan program MSTAT, serta dilengkapi dengan fasilitas program seperti tampilan dan laporan yang disesuaikan dengan kebutuhan balai.
BAB 3 PERANCANGAN
3.1 Gambaran Umum Instansi 3.1.1
Sejarah Singkat Instansi Balai Penelitian Bioteknologi dan Sumber Daya Genetik Pertanian adalah
suatu instansi dibawah Badan Penelitian dan Pengembangan (BALITBANG) Departemen
Pertanian.
Balai
yang
dahulunya
bernama
Balai
Penelitian
Bioteknologi Tanaman Pangan ini pada tahun 2002 berganti nama menjadi Balai Penelitian Bioteknologi dan Sumber Daya Genetik Pertanian. Balai ini berlokasi di jalan Tentara Pelajar 3A, Cimanggu Bogor. Tugas dari balai ini adalah untuk mengadakan penelitian, pengembangan dan pengumpulan gen atau plasma nutfah tanaman-tanaman pertanian yang ada di seluruh Indonesia. Balai ini menempati luas areal sebesar 10 hektar termasuk didalamnya terdapat kebun percobaan, rumah kaca dan laboratorium-laboratorium tempat diadakannya penelitian pertanian. Adapun visi dari balai ini sampai tahun 2010 adalah menjadikan bioteknologi dan sumberdaya genetik pertanian sebagai pendukung utama dalam mewujudkan ketahanan pangan, sistem dan usaha agribisnis berdaya saing, berkerakyatan, berkelanjutan, dan desentralistis. Sedangkan misi dari balai ini adalah secara spesifik mengembangkan pemanfaatan dan pengelolaan sumberdaya genetik (plasma nutfah) pertanian, diagnostik hama/penyakit, pengelolaan spesies database hama dan musuh alami; pemeliharaan awetan koleksi serangga penting
32
33 pertanian
untuk
referensi
dan
mengembangkan
bioinformatika
untuk
mendesiminasikan hasil penelitian bioteknologi dan sumber daya genetika pertanian dan informasi biodiversitas lainnya.
3.1.2
Struktur Organisasi
Struktur Organisasi dapat dilihat di lampiran L2.
3.2 Objek Penelitian Dalam perancangan program ini yang menjadi objek penelitian adalah program MSTAT. Suatu program yang dikembangkan oleh Michigan State University, dikembangkan pada tahun 1986 oleh Dr. Russell D. Freed dan Dr. Scott P. Eisensmith dari Crop and Soil Sciences Departement, Michigan State University. Program ini berjalan di lingkungan Disk Operating System (DOS) dan bahasa pemrograman yang digunakan adalah Basic.
3.2.1
Gambaran Umum Program MSTAT
Program MSTAT merupakan program yang berjalan di lingkungan Disk Operating System (DOS), sehingga tampilan menu program ini masih sangat sederhana, seperti dapat dilihat pada gambar 3.1. Pada gambar 3.1 ditampilkan menu pembuka program MSTAT.
34
Gambar 3.1 Menu Pembuka MSTAT
Pada gambar 3.2 ditampilkan layar menu utama MSTAT yang terdiri dari berbagai macam fitur. Salah satunya adalah fasilitas pengolahan data faktorial dan fasilitas pengolahan metode pembanding ortogonal.
Gambar 3.2 Menu Utama MSTAT
35 Program ini terdiri dari berbagai macam fasilitas pengolahan data namun yang digunakan oleh balai adalah hanya pada fasilitas pengolahan data faktorial dan fasilitas pengolahan metode pembanding ortogonal.
3.2.2
Kebutuhan Pengembangan
Karena program MSTAT memiliki kelemahan dalam proses input dan pada proses menghasilkan output maka dibutuhkan suatu pengembangan program yang memiliki kemampuan sebagai berikut : -
Tidak membutuhkan input koefisien polinomial ortogonal dari pengguna, sehingga pengguna tidak akan melakukan kesalahan dalam proses input koefisien polinomial ortogonal, sehingga hasil output program menjadi valid.
-
Dapat mengopi data yang telah ada dari program lain, seperti dari program Microsoft Excel. Apabila seorang pengguna memiliki data percobaan yang disimpan dalam program Microsoft Excel atau program spreadsheet lain, maka pengguna dapat langsung mengopi data tersebut untuk diolah. Pengguna tidak perlu mengetik ulang data-data percobaan tersebut, hal ini tentunya sangat menghemat waktu terlebih apabila data-data percobaan tersebut cukup besar.
-
Struktur menu program yang dikelompokkan kedalam sub-sub menu, sehingga memudahkan pengguna untuk mengoperasikan program ini.
-
Data yang telah diinput dan output program dapat disimpan ke semua media penyimpanan, tidak terbatas pada disket..
-
Dapat menghasilkan output grafik permukaan respon dari polinomial ortogonal. Grafik ini sesungguhnya cukup penting bagi pengguna yang ingin mempelajari fungsi respon suatu faktor percobaan.
36 3.3 Gambaran Umum Perancangan Program aplikasi yang dirancang ini akan menerapkan Single Document Interface (SDI), dimana dalam SDI program akan terdiri dari dua komponen utama yaitu halaman induk (parent) dan satu halaman anak (child). Halaman induk adalah halaman utama yang akan mengendalikan halaman anak. Halaman induk dapat membuat (create) halaman anak dan dapat pula menutupnya (destroy) pada saat program berjalan (runtime). Halaman induk memiliki menu yang disusun dalam bentuk menu pull-down maupun tombol-tombol. Masing-masing menu memiliki sub menu yang berisi fungsi yang dapat mengontrol dan mengakses halaman induk dan halaman anak. Pada saat halaman induk membuat halaman anak baru maka halaman anak yang dibuat akan tampil satu halaman bersama halaman induk, sehingga akan memudahkan pengguna mengakses kedua halaman tersebut tanpa perlu berpindah-pindah halaman. Model program aplikasi yang dirancang akan digambarkan dengan menggunakan state transition diagram (STD) dilengkapi dengan rancangan layar dan modul-modul perancangan. Program Aplikasi ini penulis beri nama RANCOB, kependekan dari perancangan percobaan.
37 3.4 Struktur Menu 3.4.1
Struktur Menu Utama
Gambar 3.3 Struktur Menu Utama
3.4.2 Struktur Menu Data
Gambar 3.4 Struktur Menu Data
3.4.3
Struktur Menu Edit
Gambar 3.5 Struktur Menu Edit
38 3.4.4
Struktur Menu Tampilkan
Gambar 3.6 Struktur Menu Tampilkan
3.4.5
Struktur Menu Bantuan
Gambar 3.7 Struktur Menu Bantuan
3.5 State Transition Diagram (STD) 3.5.1
STD Menu Utama
Gambar 3.8 STD Menu Utama
39 3.5.2
STD Menu Data
Gambar 3.9 STD Menu Data
3.5.3
STD Menu Edit
Gambar 3.10 STD Menu Edit
3.5.4
STD Menu Tampilkan
Gambar 3.11 STD Menu Tampilkan
40 3.5.5
STD Menu Bantuan
Gambar 3.12 STD Menu Bantuan
3.5.6
STD Submenu Disain
Gambar 3.13 STD Submenu Disain
41 3.5.7
STD Submenu Input
Gambar 3.14 STD Submenu Input
3.5.8
STD Submenu Output
Gambar 3.15 STD Submenu Output
42 3.5.9
STD Submenu Uji Lanjut
Gambar 3.16 STD Submenu Uji Lanjut
3.6 Rancangan Layar Dalam merancang layar yang akan ditampilkan dalam program aplikasi ini, penulis memperhatikan faktor-faktor yang mendukung program aplikasi ini, seperti kemudahan bagi pengguna, konsisten, sederhana dan adanya fasilitas bantuan. Pada tahap pengkodean, penulis akan menggunakan piranti Borland Delphi versi 6.0 sebagai perangkat pembuat, karena piranti lunak ini memiliki tampilan dengan modus grafik dan antarmuka pemakai yang bersifat interaktif, maka diharapkan dapat meningkatkan minat dan ketertarikan pemakai.
43 3.6.1
Rancangan Layar Menu Pembuka (Splashscreen)
Gambar 3.17 Rancangan Layar Menu Pembuka (Splashscreen)
3.6.2
Rancangan Layar Menu Utama (Halaman Induk)
Gambar 3.18 Rancangan Layar Menu Utama
44 3.6.3
Rancangan Layar Submenu Disain Faktor Pertama
Gambar 3.19 Rancangan Layar Submenu Disain Faktor Pertama
3.6.4
Rancangan Layar Submenu Disain Faktor Kedua
Gambar 3.20 Rancangan Layar Submenu Disain Faktor Kedua
45 3.6.5
Rancangan Layar Submenu Input
Gambar 3.21 Rancangan Layar Submenu Input
46 3.6.6
Rancangan Layar Submenu Output
Gambar 3.22 Rancangan Layar Submenu Output
47 3.6.7
Rancangan Layar Submenu Uji Lanjut
Gambar 3.23 Rancangan Layar Submenu Uji Lanjut
3.6.8
Rancangan Layar Submenu Tentang Program
Gambar 3.24 Rancangan Layar Submenu Tentang Program
48 3.7 Modul-modul Perancangan 3.7.1
Modul Induk (Parent) Modul Induk adalah modul utama yang mengendalikan modul-modul anak dan
modul-modul dibawahnya. Modul ini juga berperan dalam proses pembuatan data baru, pengambilan data dan penyimpanan data. Pseudocode dari modul Induk akan dijabarkan sebagai berikut :
MODULE : Parent; PROCEDURE : Create New File IF ChildCount<>0 THEN CloseFile(child); ENDIF CreateChild(child); ENDPROCEDURE
PROCEDURE : Open File Receive File(Data); Reset File(Data); WHILE Not EOF(Data) DO Read(Data,Text); IF Text = Valid THEN Display(Text); ENDIF ENDWHILE
49 Close File(Data); ENDPROCEDURE
PROCEDURE: Save File IF ChildCount<>0 THEN Receive File(Data); Rewrite File(Data); While Not EOF(Source) DO Writeln(Data,Source); ENDWHILE Close File(Data); ELSE Display(‘Belum ada file yang dibuka’); ENDIF ENDPROCEDURE ENDMODULE
3.7.2
Modul Anak (Child) Modul Anak (child) adalah modul yang pengoperasiannya dikendalikan oleh
modul parent. Modul ini sendiri mengendalikan operasi disain, input, output dan uji lanjut. Berikut adalah pseudocode dari modul anak :
MODULE : Child; PROCEDURE : Disain
50 IF terjadi kesalahan THEN Display(ErrorText); ELSE IF Terdapat data pada grid THEN IF Ask('Terdapat data, Hapus data?') =Yes THEN For b=1 TO MaxRow DO For c=1 TO MaxCol DO ClearSel; ENDFOR ENDFOR DisainSel(Data); ELSE DisainSel(Data); ENDIF ELSE DisainSel(Data); ENDIF ENDIF ENDPROCEDURE
PROCEDURE : Input CekSel; IF Sel=Valid THEN Proses(Data);
51 Display(Halaman Output,Data); Display(Halaman UjiLanjut,Data); Goto(Output); ENDIF ENDPROCEDURE
PROCEDURE : Output IF CekExecute(Proses(Data))=True THEN Display(Halaman Output,Data); PrintPreview(Halaman Output,Data); Print(Halaman Output,Data); ENDIF ENDPROCEDURE
PROCEDURE : Uji Lanjut IF Faktor=Kuantitatif THEN ProsesPolinomialOrtogonal(Data); Goto(Output); ELSE ProsesPembandingOrtogonal(Data); Goto(Output); ENDIF ENDPROCEDURE ENDMODULE
52
3.7.3
Modul Rancangan Acak Kelompok (RAK) Modul RAK ini merupakan modul yang mengolah rancangan acak kelompok
untuk data yang telah diinput oleh pengguna. Modul ini akan diakses oleh modul acak (child) untuk mengolah data RAK. Modul ini terdiri dari beberapa procedure dan function. Berikut adalah pseudocode dari modul ini :
MODULE : RAK PROCEDURE : IsiData(bar,kol,r1,a1,b1:integer;c:real); data[bar][kol] Å c; r Å r1; a Å a1; b Å b1; ENDPROCEDURE
PROCEDURE : SetBarKol(b,k:integer); Baris Å b; Kolom Å k; Dec Å -3; ENDPROCEDURE
FUNCTION : HitFK:real; Count Å 0; FOR i=1 TO baris DO
53 FOR j=1 TO kolom DO Count Å count + data[i][j]; ENDFOR ENDFOR Count Å (sqr(count))/(r*a*b); Result Å Roundto((count),dec); ENDFUNCTION
FUNCTION : HitJKT:real; Count Å 0; FOR i=1 TO baris DO FOR j:=1 TO kolom DO Count Å Count + sqr(data[i][j]); ENDFOR ENDFOR Count Å Count-HitFK; Result Å Roundto((count),dec); ENDFUNCTION
FUNCTION : HitJKK:real; Hit Å 0; FOR j=1 TO kolom DO Count Å 0; FOR i=1 TO baris DO
54 Count Å Count+data[i][j]; ENDFOR Hit Å Hit + ((sqr(count))/(a*b)); ENDFOR Hit Å Hit - HitFK; Result Å Roundto((hit),dec); ENDFUNCTION
FUNCTION : HitJKP:real; Hit Å 0; FOR i=1 TO baris DO Count Å 0; FOR j=1 TO kolom DO Count Å Count+data[i][j]; ENDFOR Hit Å Hit + ((sqr(count))/r); ENDFOR Hit Å Hit - HitFK; ResultÅRoundto((hit),dec); ENDFUNCTION
FUNCTION : HitJKG:real; Result Å Roundto((HitJKT-HitJKK-HitJKP),dec); ENDFUNCTION
55
FUNCTION : HitJKA:real; Hit Å 0; FOR k=0 TO a-1 DO Count Å 0; FOR i=((k*b)+1) TO ((k*b)+b) DO FOR j=1 TO kolom DO Count Å Count+data[i][j]; ENDFOR ENDFOR Hit Å Hit + ((sqr(count))/(r*b)); ENDFOR Hit Å Hit - HitFK; Result Å Roundto((hit),dec); ENDFUNCTION
FUNCTION : HitJKB:real; Hit Å 0; FOR k=0 TO b-1 DO Count Å 0; FOR i=0 TO a-1 DO FOR j=1 TO kolom DO Count Å Count + data[(i*b)+1+k][j]; ENDFOR
56 ENDFOR Hit Å Hit + ((sqr(count))/(r*a)); ENDFOR Hit Å Hit-HitFK; Result Å Roundto((hit),dec); ENDFUNCTION ENDMODULE
3.7.4
Modul Polinomial Ortogonal Modul ini adalah modul yang mengolah data dengan polinomial ortogonal.
Modul ini diakses oleh modul anak (Child) dan terdiri dari beberapa procedure dan function. Berikut adalah pseudocode dari modul ini : MODULE : PolinomialOrtogonal PROCEDURE : isikoef(bar,kol:integer;a:real); koef[bar][kol] Å a; ENDPROCEDURE
FUNCTION : GetJumFak(NmFak,NoPerlak:integer):real; IF Nmfak=1 THEN begin Count Å ((NoPerlak-1)*b)+1; Tamp Å 0; FOR i=1 TO b DO FOR j=1 TO kolom DO Tamp Å tamp+data[count][j];
57 ENDFOR inc(count); ENDFOR Result Å tamp; ELSE Tamp Å 0; FOR i:=1 TO a DO FOR j:=1 TO kolom DO Tamp Å Tamp + data[NoPerlak+((i-1)*b)][j]; ENDFOR ENDFOR Result Å tamp; ENDIF ENDFUNCTION
FUNCTION : HitJKFU(NmFak,D:integer):real; Tamp Å 0; tamp2 Å 0; IF NmFak=1 THEN FOR j:=1 TO a DO Tamp Å Tamp + koef[D][j]*GetJumFak(1,j); ENDFOR Tamp Å sqr(tamp); FOR j:=1 TO a DO
58 Tamp2 Å Tamp2 + sqr(koef[D][j]); ENDFOR Tamp Å Tamp/(r*b*tamp2); Result Å tamp; ELSE FOR j=1 TO b DO Tamp Å Tamp + koef[D][j]*GetJumFak(2,j); ENDFOR Tamp Å sqr(tamp); FOR j=1 TO b Do Tamp2 Å Tamp2 + sqr(koef[D][j]); ENDFOR Tamp Å Tamp/(r*a*tamp2); Result Å Tamp; ENDIF ENDFUNCTION ENDMODULE
3.7.5
Modul Koefisien Modul koefisien adalah modul yang dapat memberikan nilai koefisien polinomial
ortogonal baik untuk selang yang sama maupun untuk selang yang tidak sama. Modul ini diakses oleh modul anak (child).
59 3.7.6
Modul Tabel F Modul Tabel F adalah modul yang dapat memberikan nilai tabel F baik untuk
alpha (α) = 0.05 maupun untuk alpha (α) = 0.01. Modul ini diakses oleh modul anak (child).
3.7.7
Modul Laporan (Report) Modul laporan (Report) merupakan modul yang menampilkan hasil output dari
program aplikasi ini. Modul ini juga dapat mencetak hasil output melalui printer. Modul ini diakses oleh modul anak (child).
3.7.8
Modul Tentang Program Modul ini menginformasikan kepada pengguna tentang informasi seputar
program aplikasi ini, seperti nama program, penulis, judul skripsi dan lain-lain. Modul ini hanya menampilkan layar tunggal yang dapat ditutup dengan menekan tombol Enter atau Escape (ESC), atau dapat pula dengan mengklik label “Tutup” pada program.
BAB 4 IMPLEMENTASI DAN EVALUASI
4.1 Spesifikasi Perancangan 4.1.1
Spesifikasi Perangkat Lunak Adapun spesifikasi perangkat lunak (software) yang digunakan pada saat
merancang program aplikasi ini adalah : 1. Sistem operasi Windows 98 SE. 2. Borland Delphi 6.0 sebagai bahasa pemrograman. 3. Macromedia Fireworks MX sebagai pengolah gambar. 4. Help & Manual 3.0 sebagai pengolah file bantuan (Help). Sedangkan spesifikasi perangkat lunak minimum untuk dapat menjalankan program aplikasi ini yaitu : 1. Sistem operasi Windows 95. 2. Borland Delphi 6.0
4.1.2
Spesifikasi Perangkat Keras Adapun spesifikasi perangkat keras (hardware) yang digunakan pada saat
merancang program aplikasi ini adalah : 1. Processor dengan kecepatan 1.2 GHz. 2. Memory 128 Mb. 3. Video Card dengan memori 64 Mb.
60
61 Sedangkan
spesifikasi
perangkat
keras
minimum
untuk
dapat
menjalankan program aplikasi ini yaitu : 1. Processor dengan kecepatan 233 Mhz 2. Memory 32 Mb. 3. Video Card dengan memori 8 Mb. 4. Kapasitas Harddisk kosong sebesar 3 Mb.
4.2 Implementasi Rancangan Dalam perancangan program aplikasi ini, penulis mengambil satu data percobaan pertanian untuk diproses sehingga kita nantinya dapat melihat cara kerja, tampilan dan output program. Dibawah ini penulis akan menjabarkan implementasi rancangan yang menggunakan data percobaan tersebut tahap demi tahap. Pertama-tama kita dapat menjalankan program aplikasi ini dengan menjalankan “Rancob.exe” dari direktori dimana aplikasi tersebut berada, atau dapat pula dengan menjalankan perintah run : ”E:\Program\Rancob.exe” pada Windows. 4.2.1
Layar Menu Pembuka (Splashscreen)
Gambar 4.1 Layar Menu Pembuka (Splashscreen)
62 Layar pertama yang muncul ketika kita menjalankan rancob.exe adalah layar menu pembuka atau splashscreen. Layar ini akan ditampilkan sampai semua modul telah dimuat ke dalam program.
4.2.2
Layar Menu Utama Menu utama atau menu induk sesuai dengan namanya berfungsi sebagai induk
(parent) yang menampung file anak (child) yang akan dibuat atau dibuka, sehingga nantinya halaman
menu utama dan halaman anak akan muncul dalam satu layar
bersama.
Gambar 4.2 Layar Menu Utama
Layar menu utama ini terdiri dari 5 komponen utama yakni, menu bar, tool bar, status bar, panel judul dan panel tombol navigasi. Menu bar berisi menu-menu dari
63 program ini dengan bentuk pull-down menu. Tool bar berisi ikon-ikon yang merupakan shortcut suatu proses. Status bar berisi jam, tanggal dan informasi singkat tentang komponen yang ditunjuk oleh kursor. Panel judul menampilkan nama instansi dan nama program. Panel judul ini dapat disembunyikan dengan cara menghilangkan tanda cek pada menu tampilkan | Panel Judul. Untuk membuat suatu data baru maka pengguna dapat mengklik menu “Data” kemudian mengklik submenu “Baru”. Maka program aplikasi akan menampilkan layar submenu disain.
4.2.3
Implementasi Submenu Disain
Gambar 4.3 Layar Submenu Disain Faktor Pertama
64 Pada layar ini pengguna dapat mengisi judul percobaan, jumlah ulangan dan mengisi sejumlah informasi pada tab “Faktor Pertama” dan tab “Faktor Kedua”. Pada gambar 4.3 ditampilkan layar submenu disain faktor pertama. Pada gambar tersebut pengguna dapat mengisi nama faktor, lambang, tipe taraf, jumlah taraf, dan menginput taraf sesuai dengan tipe tarafnya. Pada gambar 4.3 tipe taraf yang terpilih adalah kualitatif sehingga input taraf yang pengguna harus masukkan juga harus kualitatif. Pada gambar 4.4 ditampilkan layar submenu disain faktor kedua. Pada faktor kedua pengguna dapat memasukkan informasi seperti pada faktor pertama. Pada gambar 4.4 tipe taraf yang terpilih adalah kuantitatif sehingga input taraf yang pengguna harus masukkan juga harus kuantitatif.
Gambar 4.4 Layar Submenu Disain Faktor Kedua
65 Apabila sudah terisi lengkap dan benar, pengguna dapat melanjutkan dengan menekan tombol “OK”. Apabila informasi yang diisi telah valid maka program akan menampilkan layar berikutnya yaitu layar submenu input (Gambar 4.6). Namun apabila ternyata informasi yang diisi pada halaman disain belum valid maka akan muncul layar informasi seperti terlihat pada gambar 4.5 berikut :
Gambar 4.5 Layar Informasi Kesalahan Input Data Submenu Disain
Pengguna dapat memperbaiki input yang salah, kemudian apabila telah diperbaiki maka pengguna dapat menekan kembali tombol “OK” pada Submenu disain untuk melanjutkan ke tahap selanjutnya.
66 4.2.4
Implementasi Submenu Input
Gambar 4.6 Layar Submenu Input
Pada gambar 4.6, program menampilkan layar Submenu input dimana pada halaman ini pengguna dapat memasukkan data percobaan. Layar halaman ini juga menampilkan tool bar edit, dimana pengguna bisa mengedit data yang dimasukkan atau mengambil data dari file program lain seperti data dari Microsoft Excel. Pengguna dapat menekan tombol “OK” apabila sudah terisi dengan lengkap dan benar. Kemudian setelah tombol “OK” ditekan, program akan mengecek apakah nilai data yang dimasukkan telah valid atau tidak. Bila valid maka program akan menampilkan halaman selanjutnya yaitu halaman output. Namun apabila tidak valid
67 maka pada halaman input akan muncul panel informasi kesalahan input, seperti digambarkan pada gambar 4.7.
Gambar 4.7 Layar Submenu Input dengan Infomasi Kesalahan Input
4.2.5
Implementasi Submenu Output Pada layar ini pengguna disajikan informasi output hasil pengolahan data.
Pengguna dapat melihat hasil cetakan (Print Preview) dengan menekan tombol “Lihat Hasil Cetak” pada pojok kanan atas. Layar Print Preview dapat dilihat seperti gambar 4.9 dibawah. Pada layar Print Preview pengguna dapat mencetak output hasil pengolahan data dengan menekan ikon printer pada layar Print Preview.
68
Gambar 4.8 Layar Submenu Output
Gambar 4.9 Grafik permukaan Respon
69
Gambar 4.10 Layar Print Preview Submenu Output
Untuk menutup layar Print Preview, pengguna cukup menekan tombol “Close” maka program akan kembali ke layar Submenu output.
4.2.6
Implementasi Submenu Uji Lanjut Pada gambar 4.10 pengguna dapat memilih faktor mana yang akan diproses uji
lanjutnya, apakah faktor pertama atau faktor kedua. Setelah memilih pengguna dapat menekan tombol “OK”. Selanjutnya apabila faktor yang dipilih adalah faktor kuantitatif maka program otomatis akan menghitung uji lanjutnya menggunakan polinomial ortogonal dan program langsung akan menampilkan hasil uji lanjut polinomial ortogonal pada halaman output.
70
Gambar 4.11 Layar Submenu Uji Lanjut untuk Faktor Kuantitatif
Apabila faktor yang terpilih adalah faktor kualitatif maka program akan meminta pengguna untuk memasukkan data-data pembandingan kualitatif, seperti gambar 4.11.
71
Gambar 4.12 Layar Submenu Uji Lanjut untuk Faktor Kualitatif 4.2.7
Layar Submenu Tentang Program
Gambar 4.13 Layar Submenu Tentang Program
72 Pada layar tentang program, program aplikasi akan menampilkan layar yang berisi informasi tentang program ini. Informasi tersebut berupa beberapa baris teks yang digulung (Scroll Text). Untuk menutup layar ini dan kembali ke layar semula maka pengguna dapat mengklik tulisan “Tutup” atau dengan menekan tombol ESC (escape) pada keyboard.
4.2.8
Layar Bantuan
Gambar 4.14 Layar Bantuan Bagian “Contents”
73
Gambar 4.15 Layar Bantuan Bagian Informasi
4.3 Evaluasi Rancangan Secara umum hampir semua perancangan dari program aplikasi ini sudah sesuai dengan rancangan awal. Hanya ada sedikit perubahan pada tahap implementasi yaitu pada disain gambar. Panel judul, tombol navigasi dan judul-judul submenu menggunakan gambar sebagai visualisasi, untuk mempermudah pengguna. Penggunaan program ini tidak terlalu sulit, karena penulis membuat proses pengolahan datanya dibagi menjadi tahap-tahap yang mudah. Tahap disain memudahkan pengguna untuk membuat disain rancangan dan menempatkan informasi pada rancangan. Tahap input juga memudahkan pengguna untuk mengisi data percobaan, dilengkapi dengan fasilitas edit dan cetak data. Tahap output, program menghasilkan output yang cukup informatif ditambah dengan fasilitas cetak output. Tahap uji lanjut, pengguna tidak perlu memasukkan koefisien polinomial ortogonal untuk faktor kuantitatif.
74 Keseluruhan program menerapkan rancangan SDI (Single Document Interface) dimana program terdiri dari halaman induk (parent) dan halaman anak (child), sehingga pengguna dapat mudah bernavigasi tanpa harus berpindah halaman, karena halaman induk dan halaman anak berada dalam satu layar. Setelah program aplikasi RANCOB dibuat, terdapat peningkatan terhadap kemampuan pengolahan data percobaan dibandingkan dengan program terdahulu. Berikut akan digambarkan perbandingan antara program MSTAT dengan program aplikasi RANCOB yang penulis buat :
Tabel 4.1 Tabel perbandingan program MSTAT dengan RANCOB KEMAMPUAN 1. Dapat melakukan proses disain rancangan 2. Dapat mengambil data dari program Spreadsheet 3. Input koefisien Polinomial Ortogonal 4. Struktur Menu dikelompokkan ke dalam sub-sub menu 5. Media penyimpanan data 6. Output grafik permukaan respon 7. Media penyimpanan output
4.3.1
PROGRAM MSTAT RANCOB Tidak Ya Tidak Ya Ya Tidak Tidak Ya Hanya Disket Semua Media Tidak Ya Hanya Disket Semua Media
Evaluasi Program berdasarkan Teori Interaksi Manusia dan Komputer Terdapat beberapa pedoman yang dianjurkan dalam merancang suatu sistem
guna mendapatkan sistem atau program yang user friendly, berikut ini adalah hasil evaluasinya : 4.3.1.1 Delapan Aturan Emas Digunakan untuk merancang sistem dengan interaksi manusia dan komputer yang baik, yaitu : 1. Bertahan untuk konsistensi.
75 Hal ini dapat terlihat bahwa hampir seluruh tampilan layar yang ada dalam program aplikasi bersifat konsisten, baik dari segi warna, bentuk, tampilan layar, dan bentuk huruf yang digunakan. 2. Memperbolehkan pengguna untuk sering menggunakan shortcut. Program aplikasi ini, memungkinkan
pengguna dapat
menggunakan fasilitas shortcut, sehingga mempercepat pemilihan menu yang diinginkan pengguna. 3. Memberi umpan balik yang informatif. Pada program aplikasi ini pengguna dapat merasakan umpan balik yang informatif dan ini ditandai dengan terpenuhinya kebutuhan pengguna akan informasi yang dicarinya. Misalkan pengguna mengklik sebuah tombol, maka tombol akan memberikan reaksi atas aksi dari pengguna tersebut yaitu dengan menampilkan informasi atau melakukan proses pengolahan data. 4. Pengorganisasian yang baik sehingga pengguna mengetahui kapan awal dan akhir dari suatu aksi Pada program aplikasi ini, pengguna dapat mengetahui tahap akhir dari suatu aksi jika layar tersebut sudah menampilkan hasil output. 5. Penanganan kesalahan yang sederhana. Program aplikasi ini dirancang untuk dapat menangani kesalahan yang dilakukan pengguna saat menginput data. Program akan menampilkan layar peringatan dan informasi kesalahan yang
76 terjadi. Pengguna dapat memperbaiki kesalahan tanpa harus mengulang atau memperbaiki data yang tidak salah. 6. Mengizinkan pembalikan aksi (Undo) dengan mudah. Setiap terjadi kesalahan input data, maka pengguna dapat kembali memperbaiki kesalahan input data dengan mudah. Namun dalam program aplikasi ini tidak terdapat tombol Undo. 7. Mendukung internal locus of control (pemakai menguasai sistem atau inisiator, bukan responden). Seluruh kendali program ini dikendalikan oleh pengguna, disini pengguna yang memutuskan dan menentukan proses apa yang akan dilakukan. Pengguna dapat memilih membuat data baru, membuka data yang sudah ada atau menutup data, semua dikendalikan oleh pengguna. 8. Mengurangi beban ingatan jangka pendek. Karena program aplikasi ini cukup sederhana dengan penyajian yang mudah dan konsisten, maka beban ingatan jangka pendek pada saat pengguna menggunakan aplikasi ini menjadi minimal.
4.3.1.2 Waktu Respons Waktu respons adalah jumlah detik dari saat pemakai memulai aktifitas (contohnya penekanan tombol enter dan tombol mouse) sampai komputer menampilkan hasilnya, dan sesuai dengan kaidah IMK bahwa untuk tugas biasa, waktu respon yang baik adalah 2-4 detik. Berdasarkan hasil perhitungan yang penulis lakukan dengan menggunakan stopwatch dengan menggunakan
77 spesifikasi perangkat keras pada waktu perancangan, maka rata-rata waktu respons untuk setiap proses pada program aplikasi ini adalah sebagai berikut: 1. Proses loading awal (mulai dari pengguna menjalankan Rancob.exe sampai muncul halaman utama) : 3,57 detik. 2. Proses membuka data baru : 0,78 detik 3. Proses membuka data yang sudah ada (mulai dari pengguna menekan Open di Open Dialog sampai data ditampilkan : 0.93 detik. 4. Proses menutup data : 0,35 detik. 5. Proses pengolahan data rancangan acak kelompok : 0,18 detik. 6. Proses pengolahan data polinomial ortogonal : 0,27 detik. 7. Proses pengolahan data pembanding ortogonal : 0,22 detik. Maka dapat disimpulkan bahwa rata-rata waktu respons untuk setiap proses adalah : 0,9 detik Sedangkan untuk hasil perhitungan yang penulis lakukan dengan menggunakan spesifikasi perangkat keras minimum yang disarankan, maka ratarata waktu respons untuk setiap proses adalah : 1. Proses loading awal (mulai dari pengguna menjalankan Rancob.exe sampai muncul halaman utama) : 5,97 detik. 2. Proses membuka data baru : 1,78 detik. 3. Proses membuka data yang sudah ada (mulai dari pengguna menekan Open di Open Dialog sampai data ditampilkan : 2.33 detik. 4. Proses menutup data : 0,45 detik. 5. Proses pengolahan data rancangan acak kelompok : 0,72 detik 6. Proses pengolahan data polinomial ortogonal : 1,23 detik.
78 7. Proses pengolahan data pembanding ortogonal : 1,14 detik. Maka dapat disimpulkan bahwa rata-rata waktu respons untuk setiap perpindahan adalah : 1,94 detik.
Maka berdasarkan evaluasi menurut teori Interaksi Manusia dan Komputer, yakni 8 Aturan Emas dan Waktu Respons program, perancangan program aplikasi ini telah sesuai dengan teori Interaksi Manusia dan Komputer.
BAB 5 SIMPULAN DAN SARAN
5.1 Simpulan Berdasarkan hasil perancangan program aplikasi pengolahan data percobaan pertanian, dapat ditarik suatu kesimpulan sebagai berikut : 1. Perancangan telah menghasilkan suatu aplikasi yang dapat mengolah data-data percobaan faktorial dengan rancangan dasar rancangan acak kelompok (RAK) dan dengan uji lanjut menggunakan metode pembanding ortogonal. 2. Tahap-tahap pengolahan data dalam program aplikasi ini dibagi menjadi beberapa tahap, yaitu tahap disain data, tahap input data, tahap menghasilkan output dan tahap uji lanjut. Setiap tahap dirancang dengan sederhana sehingga memudahkan pengguna untuk menggunakan program aplikasi ini. 3. Program aplikasi ini dapat menampilkan grafik permukaan respon dari polinomial ortogonal, tidak memerlukan input koefisien polinomial ortogonal dari pengguna, dan program aplikasi ini dapat mengopi data percoban yang telah ada di program Microsoft Excel.
5.2 Saran Adapun saran yang penulis dapat berikan berdasarkan hasil perancangan program aplikasi pengolahan data percobaan pertanian ini, adalah sebagai berikut :
79
80 1. Program aplikasi ini dapat dikembangkan dengan menambahkan proses pengujian asumsi analisis ragam pada program dan menambah jenis rancangan percobaan yang dapat dipakai. 2. Program aplikasi ini juga dapat dikembangkan menjadi program yang berbasis web, sehingga bila data percobaan telah didapat di sejumlah kebun pertanian, maka melalui internet data dapat diinput dan dikirim langsung ke pusat pengolahan data. 3. Program aplikasi ini dapat dikembangkan dengan menambahkan modul penanganan data percobaan untuk kasus data hilang. 4. Output program juga dapat dikembangkan sehingga dapat mengirim output program yang berupa tabel-tabel anova dan gambar grafik permukaan respon ke Microsoft Word.
DAFTAR PUSTAKA
Gaspersz, Vincent. (1991). Metode Perancangan Percobaan. Armico, Bandung. Gomez, Kwancai A dan Gomez, Arturo A. (1995). Prosedur Statistik untuk Penelitian Pertanian. Universitas Indonesia Press, Jakarta. Hanafiah, Kemas Ali. (2001). Rancangan Percobaan Teori dan Aplikasi. Rajawali Press, Jakarta. Montgomery, Douglas C. (2001). Design and Analysis of Experiments. John Wiley & Son, New York. Nazir, Mohamad. (1988). Metode Penelitian. Ghalia Indonesia, Jakarta. Pressman, Roger S. (1992). Software Engineering : A practitioner Approach, Third Edition. McGrow-Hill, Singapore. Runyon, Richard P. (1985). Fundamental of Statistics in The Biological, Medical, and Health Sciences. Duxbury Press, Boston. Santosa, P. Insap. (1997). Interaksi Manusia dan Komputer, Penerbit Andi, Yogyakarta. Shneiderman, Ben. (1998). Designing The User Interface : Strategy for Effective Human Computer Interaction, Third Edition. Addison-Wesley Inc, California. Steel, Robert G.D dan Torrie, James H. (1981) Prinsip dan Prosedur Statistika : Suatu Pendekatan Biometrik. Gramedia, Jakarta.
81
DAFTAR RIWAYAT HIDUP
Nama
: Luwi Darmawan
Tempat, Tanggal Lahir : Jakarta, 28 Maret 1981 Agama
: Islam
Alamat
: Jalan Johar Baru V RT 010/05 No.1 Kel. Johar Baru , Kec Johar Baru Jakarta Pusat 10560
No Telepon
: (021) 4214374
Pendidikan Formal Tahun 1987 – 1993
: SD Negeri Johar Baru 32 Jakarta
Tahun 1993 – 1996
: SMP Negeri 28 Jakarta
Tahun 1996 – 1999
: SMU Negeri 68 Jakarta
Tahun 1999 – Sekarang : Program Studi Ganda Teknik Informatika – Statistik Universitas Bina Nusantara Jakarta Pendidikan Non-Formal Tahun 1999
: Kursus Bahasa Inggris, LPSM KAMPSGLOB Jakarta
Tahun 2000
: Kursus Teknisi Komputer, Yayasan ITT Jakarta
82
L 3 program Mdiapp; uses Forms, MAIN in 'MAIN.PAS' {MainForm}, CHILDWIN in 'CHILDWIN.PAS' {Child}, about in 'about.pas' {AboutBox}, RAK in 'RAK.pas', Report in 'Report.pas' {FRep}, TabelF in 'TabelF.pas', Koefisien in 'Koefisien.pas', PolOrt in 'PolOrt.pas', Splash in 'Splash.pas' {Splashscreen},sysutils; {$R *.RES} begin Splashscreen := TSplashscreen.Create(Application); Splashscreen.Show; Application.Initialize; Splashscreen.Update; Application.Title := 'Program Rancob Ver 1.0'; Application.HelpFile := 'C:\My Documents\Rancob\Rancob.hlp'; Application.CreateForm(TMainForm, MainForm); Application.CreateForm(TAboutBox, AboutBox); Application.CreateForm(TFRep, FRep); SplashScreen.Hide; SplashScreen.Free; Application.Run; end. Unit Main; interface uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Menus, StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, ComCtrls, StdActns, ActnList, ToolWin, ImgList, jpeg,Childwin,StrUtils, CustomizeDlg; type TMainForm = class(TForm) MainMenu1: TMainMenu; File1: TMenuItem; FileNewItem: TMenuItem; FileOpenItem: TMenuItem; Help1: TMenuItem; N1: TMenuItem; FileExitItem: TMenuItem; HelpAboutItem: TMenuItem; OpenDialog: TOpenDialog; FileSaveItem: TMenuItem; ActionList1: TActionList; FileNew1: TAction; FileSave1: TAction; FileExit1: TAction; FileOpen1: TAction;
L 4 FileSaveAs1: TAction; WindowCascade1: TWindowCascade; WindowTileHorizontal1: TWindowTileHorizontal; WindowArrangeAll1: TWindowArrange; WindowMinimizeAll1: TWindowMinimizeAll; HelpAbout1: TAction; FileClose1: TWindowClose; WindowTileVertical1: TWindowTileVertical; ToolBar2: TToolBar; ToolButton1: TToolButton; ToolButton2: TToolButton; ToolButton9: TToolButton; ImageList1: TImageList; Panel2: TPanel; Panel1: TPanel; Image1: TImage; SaveDialog1: TSaveDialog; View1: TMenuItem; LogoHeader1: TMenuItem; PanelKiri1: TMenuItem; EditCut1: TEditCut; EditCopy1: TEditCopy; EditPaste1: TEditPaste; EditSelectAll1: TEditSelectAll; EditUndo1: TEditUndo; EditDelete1: TEditDelete; ToolButton14: TToolButton; EditRedo1: TAction; Bantuan1: TMenuItem; FileCloseItem: TMenuItem; ToolButton3: TToolButton; Disain: TAction; ToolButton4: TToolButton; ToolButton5: TToolButton; ToolButton6: TToolButton; Input: TAction; Output: TAction; UjiLanjut: TAction; ToolButton7: TToolButton; ToolButton10: TToolButton; Bantuan: TAction; N2: TMenuItem; Disain1: TMenuItem; Input1: TMenuItem; Output1: TMenuItem; UjiLanjut1: TMenuItem; ScrollBox1: TScrollBox;
L 5 Bevel1: TBevel; Image2: TImage; Image3: TImage; Edit1: TMenuItem; Cut1: TMenuItem; Copy1: TMenuItem; Paste1: TMenuItem; Delete1: TMenuItem; PrintData: TAction; fbDisain: TBitBtn; fbInput: TBitBtn; fbOutput: TBitBtn; fbUjiLanjut: TBitBtn; fbBantuan: TBitBtn; StatusBar1: TStatusBar; Timer1: TTimer; procedure FileNew1Execute(Sender: TObject); procedure FileOpen1Execute(Sender: TObject); procedure HelpAbout1Execute(Sender: TObject); procedure FileExit1Execute(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FileSave1Execute(Sender: TObject); procedure LogoHeader1Click(Sender: TObject); procedure PanelKiri1Click(Sender: TObject); procedure ToolButton3Click(Sender: TObject); procedure FileCloseItemClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure DisainExecute(Sender: TObject); procedure InputExecute(Sender: TObject); procedure OutputExecute(Sender: TObject); procedure UjiLanjutExecute(Sender: TObject); procedure EditCut1Execute(Sender: TObject); procedure EditCopy1Execute(Sender: TObject); procedure EditPaste1Execute(Sender: TObject); procedure EditDelete1Execute(Sender: TObject); procedure BantuanExecute(Sender: TObject); procedure fbDisainClick(Sender: TObject); procedure fbInputClick(Sender: TObject); procedure fbOutputClick(Sender: TObject); procedure fbUjiLanjutClick(Sender: TObject); procedure fbBantuanClick(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } procedure CreateMDIChild(const Name: string); procedure OpenMDIChild(const Name: string); public
L 6 { Public declarations } procedure SaveMDIChild(); end; var Child:TMDIChild; MainForm: TMainForm; count1:integer; path:string; implementation {$R *.dfm} uses Report,about; procedure TMainForm.CreateMDIChild(const Name: string); begin Child := TMDIChild.Create(Application); Child.Caption := Name; Child.Edit1.Text:='Percobaan '+ inttostr(count1); Child.Edit3.Text:='Faktor I'; Child.Edit4.Text:='Faktor II'; Child.label12.Caption:='Nama Percobaan : Percobaan '+ inttostr(count1); end; procedure TMainForm.OpenMDIChild(const Name: string); var i,j,k:integer; teks,tamp1,tamp2,tamp3:string; cekExec:boolean; data:textfile; begin //membuka jendela file MDI child yang sudah ada cekExec:=false; Child := TMDIChild.Create(Application); Child.Caption := Name; assignfile(data,Name); reset(data); while not EOF(data) do begin readln(data,teks); if leftStr(teks,5)='#NAMA' then begin Child.Edit1.text:=RightStr(teks,length(teks)-6); Child.Label12.Caption:='Data Percobaan : '+RightStr(teks,length(teks)-6); end; if leftStr(teks,5)='#ULNG' then Child.ComboBox6.Text:=RightStr(teks,length(teks)-6); if leftStr(teks,5)='#NAF1' then Child.Edit3.Text:=RightStr(teks,length(teks)-6); if leftStr(teks,5)='#LAM1' then Child.ComboBox3.Text:=RightStr(teks,length(teks)-6); if leftStr(teks,5)='#SAT1' then
L 7 begin if midstr(teks,7,1)<>'-' then Child.SatuanF1.Text:=RightStr(teks,length(teks)-6); end; if leftStr(teks,5)='#TIP1' then begin if RightStr(teks,5)='Jenis' then Child.JenisI.Checked:=True else Child.TarafI.Checked:=true; end; if leftStr(teks,5)='#JUP1' then Child.ComboBox4.Text:=RightStr(teks,length(teks)-6); if leftStr(teks,6)='#LIS1-' then begin Child.ListBox2.Items.Insert(strtoint(MidStr(teks,7,1)),RightStr(teks,length(teks)8)); end; if leftStr(teks,5)='#NAF2' then Child.Edit4.Text:=RightStr(teks,length(teks)-6); if leftStr(teks,5)='#LAM2' then Child.ComboBox1.Text:=RightStr(teks,length(teks)-6); if leftStr(teks,5)='#SAT2' then begin if midstr(teks,7,1)<>'-' then Child.SatuanF2.Text:=RightStr(teks,length(teks)-6); end; if leftStr(teks,5)='#TIP2' then begin if RightStr(teks,5)='Jenis' then Child.JenisII.Checked:=True else Child.TarafII.Checked:=true; end; if leftStr(teks,5)='#JUP2' then Child.ComboBox2.Text:=RightStr(teks,length(teks)-6); if leftStr(teks,6)='#LIS2-' then begin Child.ListBox1.Items.Insert(strtoint(MidStr(teks,7,1)),RightStr(teks,length(teks)8)); end; if leftStr(teks,2)='#D' then Begin tamp1:=''; tamp2:=''; tamp3:=''; for i:=4 to length(teks) do begin if teks[i]<>',' then tamp1:=tamp1+teks[i] else break; end; for j:=i+1 to length(teks) do
L 8 begin if teks[j]<>']' then tamp2:=tamp2+teks[j] else break; end; for k:=j+2 to length(teks) do begin if teks[k]<>'#' then tamp3:=tamp3+teks[k] else break; end; if tamp3<>'' then begin Child.Book1.EntryRC[strtoint(tamp1),strtoint(tamp2)]:=tamp3;//strtofloat(tamp3); end else Child.Book1.EntryRC[strtoint(tamp1),strtoint(tamp2)]:=''; end; if leftStr(teks,4)='#ROW' then begin tamp1:=''; tamp2:=''; for i:=5 to length(teks) do begin if teks[i]<>' ' then tamp1:=tamp1+teks[i] else break; end; for j:=i+1 to length(teks) do begin if teks[j]<>'#' then tamp2:=tamp2+teks[j] else break; end; Child.Book1.RowText[strtoint(tamp1)]:=tamp2; end; if leftStr(teks,4)='#COL' then begin tamp1:=''; tamp2:=''; for i:=5 to length(teks) do begin if teks[i]<>' ' then tamp1:=tamp1+teks[i] else break; end; for j:=i+1 to length(teks) do begin if teks[j]<>'#' then tamp2:=tamp2+teks[j] else break;
L 9 end; Child.Book1.ColText[strtoint(tamp1)]:=tamp2; Child.Book1.ColWidth[strtoint(MidStr(teks,5,1))]:=3000; end; if leftStr(teks,5)='#EXEC' then begin if MidStr(teks,7,1)='y' then begin child.Disainbtn.Enabled:=false; cekExec:=true; Child.pcChild.Pages[2].TabVisible:=true; Child.pcChild.Pages[3].TabVisible:=true; child.BitBtn4.Enabled:=true; end else begin Child.pcChild.Pages[2].TabVisible:=false; Child.pcChild.Pages[3].TabVisible:=false; child.BitBtn4.Enabled:=false; end; end; end; closefile(data); Child.Book1.MaxRow:=(strtoint(Child.ComboBox4.Text))*(strtoint(Child.ComboBox2.Te xt)); Child.Book1.MaxCol:=strtoint(Child.ComboBox6.text); Child.Book1.Enabled:=true; child.book1.SheetName[1]:=child.edit1.Text; fbDisain.Enabled:=true; fbInput.Enabled:=true; Disain.Enabled:=true; Input.Enabled:=true; Filesave1.Enabled:=true; if cekExec=true then begin child.Hitung; fbOutput.Enabled:=true; fbUjiLanjut.Enabled:=true; Output.Enabled:=true; UjiLanjut.Enabled:=true; EditCopy1.Enabled:=true; EditCut1.Enabled:=true; EditPaste1.Enabled:=true; EditDelete1.Enabled:=true; end else begin fbOutput.Enabled:=false; fbUjiLanjut.Enabled:=false;
L 10 Output.Enabled:=false; UjiLanjut.Enabled:=false; end; end; procedure TMainForm.SaveMDIChild(); var data:Textfile; tipe:string; i,j:integer; begin //menyimpan file if leftStr(Child.caption,6)='NONAME' then begin if SaveDialog1.Execute then begin if RightStr(lowercase(SaveDialog1.FileName),4)<>'.rcb' then begin SaveDialog1.FileName:=SaveDialog1.FileName+'.rcb'; end; Child.caption:=SaveDialog1.FileName; path:=SaveDialog1.FileName; assignfile(data,SaveDialog1.FileName); rewrite(data); writeln(data,'#NAMA '+ Child.Edit1.Text); writeln(data,'#ULNG '+ Child.Combobox6.text); writeln(data,'#NAF1 '+ Child.Edit3.Text); writeln(data,'#LAM1 '+ Child.Combobox3.text); if Child.TarafI.checked then begin tipe:='Taraf'; writeln(data,'#SAT1 '+ Child.SatuanF1.text); end else begin tipe:='Jenis'; writeln(data,'#SAT1 -'); end; writeln(data,'#TIP1 '+tipe); writeln(data,'#JUP1 '+Child.Combobox4.text); for i:=0 to child.ListBox2.Count-1 do begin writeln(data,'#LIS1-'+inttostr(i)+' '+ child.ListBox2.Items.Strings[i]); end; writeln(data,'#NAF2 '+ Child.Edit4.Text); writeln(data,'#LAM2 '+ Child.Combobox1.text); if Child.TarafII.checked then begin tipe:='Taraf'; writeln(data,'#SAT2 '+ Child.SatuanF2.text); end else
L 11 begin tipe:='Jenis'; writeln(data,'#SAT2 -'); end; writeln(data,'#TIP2 '+tipe); writeln(data,'#JUP2 '+Child.Combobox2.text); for i:=0 to child.ListBox1.Count-1 do begin writeln(data,'#LIS2-'+inttostr(i)+' '+ Child.ListBox1.Items.Strings[i]); end; for i:=1 to Child.Book1.MaxRow do for j:=1 to Child.Book1.MaxCol do begin writeln(data,'#D['+inttostr(i)+','+inttostr(j)+'] '+ child.Book1.EntryRC[i,j]+'#'); end; for i:=1 to Child.Book1.MaxRow do //menulis di Row Header Book1 writeln(data,'#ROW'+inttostr(i)+' '+ Child.Book1.RowText[i]+'#'); for i:=1 to Child.Book1.MaxCol do //menulis di Row Header Book1 writeln(data,'#COL'+inttostr(i)+' '+ Child.Book1.ColText[i]+'#'); if child.CekExecute=true then tipe:='ya' else tipe:='tidak'; writeln(data,'#EXEC '+tipe); if child.CekDesign=true then tipe:='ya' else tipe:='tidak'; writeln(data,'#ISGN '+tipe); closefile(data); end; end else begin assignfile(data,child.Caption); rewrite(data); writeln(data,'#NAMA '+ Child.Edit1.Text); writeln(data,'#ULNG '+ Child.Combobox6.text); writeln(data,'#NAF1 '+ Child.Edit3.Text); writeln(data,'#LAM1 '+ Child.Combobox3.text); if Child.TarafI.checked then begin tipe:='Taraf'; writeln(data,'#SAT1 '+ Child.SatuanF1.text); end else begin tipe:='Jenis'; writeln(data,'#SAT1 -'); end; writeln(data,'#TIP1 '+tipe); writeln(data,'#JUP1 '+Child.Combobox4.text);
L 12 for i:=0 to child.ListBox2.Count-1 do begin writeln(data,'#LIS1-'+inttostr(i)+' '+ child.ListBox2.Items.Strings[i]); end; writeln(data,'#NAF2 '+ Child.Edit4.Text); writeln(data,'#LAM2 '+ Child.Combobox1.text); if Child.TarafII.checked then begin tipe:='Taraf'; writeln(data,'#SAT2 '+ Child.SatuanF2.text); end else begin tipe:='Jenis'; writeln(data,'#SAT2 -'); end; writeln(data,'#TIP2 '+tipe); writeln(data,'#JUP2 '+Child.Combobox2.text); for i:=0 to child.ListBox1.Count-1 do begin writeln(data,'#LIS2-'+inttostr(i)+' '+ Child.ListBox1.Items.Strings[i]); end; for i:=1 to Child.Book1.MaxRow do for j:=1 to Child.Book1.MaxCol do begin writeln(data,'#D['+inttostr(i)+','+inttostr(j)+'] '+ child.Book1.EntryRC[i,j]+'#'); end; for i:=1 to Child.Book1.MaxRow do //menulis di Row Header Book1 writeln(data,'#ROW'+inttostr(i)+' '+ Child.Book1.RowText[i]+'#'); for i:=1 to Child.Book1.MaxCol do //menulis di Row Header Book1 writeln(data,'#COL'+inttostr(i)+' '+ Child.Book1.ColText[i]+'#'); if child.CekExecute=true then tipe:='ya' else tipe:='tidak'; writeln(data,'#EXEC '+tipe); if child.CekDesign=true then tipe:='ya' else tipe:='tidak'; writeln(data,'#ISGN '+tipe); closefile(data); end; end; procedure TMainForm.FileNew1Execute(Sender: TObject); begin count1:=count1+1; if MDIChildcount<>0 then ActiveMDIChild.Close; CreateMDIChild('NONAME' + IntToStr(count1)); child.book1.SheetName[1]:='Data Percobaan'; fbDisain.Enabled:=true; fbInput.Enabled:=true;
L 13 fbOutput.Enabled:=false; fbUjiLanjut.Enabled:=false; Disain.Enabled:=true; Input.Enabled:=true; Output.Enabled:=false; UjiLanjut.Enabled:=false; Filesave1.Enabled:=true; Child.pcChild.ActivePageIndex:=0; end; procedure TMainForm.FileOpen1Execute(Sender: TObject); begin if OpenDialog.Execute then begin if MDIChildcount>0 then activeMDIChild.Close; OpenMDIChild(OpenDialog.FileName); end; end; procedure TMainForm.HelpAbout1Execute(Sender: TObject); begin AboutBox.ShowModal; end; procedure TMainForm.FileExit1Execute(Sender: TObject); begin if MDIChildcount>0 then ActiveMDIChild.Close; Application.Terminate; end; procedure TMainForm.FormCreate(Sender: TObject); begin fbDisain.Enabled:=false; fbInput.Enabled:=false; fbOutput.Enabled:=false; fbUjiLanjut.Enabled:=false; Disain.Enabled:=false; Input.Enabled:=false; Output.Enabled:=false; UjiLanjut.Enabled:=false; Filesave1.Enabled:=false; EditCopy1.Enabled:=false; EditCut1.Enabled:=false; EditPaste1.Enabled:=false; EditDelete1.Enabled:=false; statusbar1.Panels[1].Text:='Jam : '+Timetostr(now); statusbar1.Panels[2].Text:='Tanggal : '+Datetostr(now); end; procedure TMainForm.FileSave1Execute(Sender: TObject); begin if MDIChildcount<>0 then
L 14 SaveMDIChild() else MessageDlg('Belum Ada File yang Dibuka !', mtWarning, [mbOK], 0); end; procedure TMainForm.LogoHeader1Click(Sender: TObject); begin if LogoHeader1.Checked=false then begin panel1.Show; LogoHeader1.Checked:=true; end else begin panel1.Hide; LogoHeader1.Checked:=false; end; end; procedure TMainForm.PanelKiri1Click(Sender: TObject); begin if PanelKiri1.Checked=false then begin panel2.Show; PanelKiri1.Checked:=true; end else begin panel2.Hide; PanelKiri1.Checked:=false; end; end; procedure TMainForm.ToolButton3Click(Sender: TObject); begin if MDIChildcount<>0 then FRep.QuickRep1.PreviewModal else MessageDlg('Belum ada file yang dibuka !', mtWarning, [mbOK], 0); end; procedure TMainForm.FileCloseItemClick(Sender: TObject); begin activeMDIChild.Close; end; procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); begin if MDIChildcount>0 then ActiveMDIChild.Close; end; procedure TMainForm.DisainExecute(Sender: TObject);
L 15 begin if MDIChildcount<>0 then Child.pcChild.ActivePageIndex:=0 else MessageDlg('Belum Ada File yang Dibuka !',mtWarning, [mbOK], 0); end; procedure TMainForm.InputExecute(Sender: TObject); begin if MDIChildcount<>0 then Child.pcChild.ActivePageIndex:=1 else MessageDlg('Belum Ada File yang Dibuka !',mtWarning, [mbOK], 0); end; procedure TMainForm.OutputExecute(Sender: TObject); begin if MDIChildcount<>0 then begin if child.CekExecute then //jika pernah dianalisis child.pcChild.ActivePageIndex:=2 else //analisis ragam form (Output form) muncul MessageDlg('Input Data Belum Valid !',mtWarning, [mbOK], 0); end else MessageDlg('Belum Ada File yang Dibuka !',mtWarning, [mbOK], 0); end; procedure TMainForm.UjiLanjutExecute(Sender: TObject); begin if MDIChildcount<>0 then begin if child.CekExecute then //jika pernah dianalisis child.pcChild.ActivePageIndex:=3 else //polimomial ortogonal form muncul MessageDlg('Input Data Belum Valid !',mtWarning, [mbOK], 0); end else MessageDlg('Belum Ada File yang Dibuka !',mtWarning, [mbOK], 0); end; procedure TMainForm.EditCut1Execute(Sender: TObject); begin if MDIChildcount<>0 then begin child.Book1.EditCut; end; end; procedure TMainForm.EditCopy1Execute(Sender: TObject); begin if MDIChildcount<>0 then begin Child.Book1.ClearClipboard; child.Book1.EditCopy; end; end;
L 16 procedure TMainForm.EditPaste1Execute(Sender: TObject); begin if MDIChildcount<>0 then begin child.Book1.EditPaste; end; end; procedure TMainForm.EditDelete1Execute(Sender: TObject); begin if MDIChildcount<>0 then begin child.Book1.EditDelete(0); end; end; procedure TMainForm.BantuanExecute(Sender: TObject); begin Application.HelpFile := 'C:\My Documents\Rancob\Rancob.hlp'; Application.HelpCommand(HELP_FINDER, 0); end; procedure TMainForm.fbDisainClick(Sender: TObject); begin if MDIChildcount<>0 then Child.pcChild.ActivePageIndex:=0 else MessageDlg('Belum Ada File yang Dibuka !',mtWarning, [mbOK], 0); end; procedure TMainForm.fbInputClick(Sender: TObject); begin if MDIChildcount<>0 then Child.pcChild.ActivePageIndex:=1 else MessageDlg('Belum Ada File yang Dibuka !',mtWarning, [mbOK], 0); end; procedure TMainForm.fbOutputClick(Sender: TObject); begin if MDIChildcount<>0 then begin if child.CekExecute then //jika pernah dianalisis child.pcChild.ActivePageIndex:=2 else //analisis ragam form (Output form) muncul MessageDlg('Input Data Belum Valid !',mtWarning, [mbOK], 0); end else MessageDlg('Belum Ada File yang Dibuka !',mtWarning, [mbOK], 0); end; procedure TMainForm.fbUjiLanjutClick(Sender: TObject); begin if MDIChildcount<>0 then begin if child.CekExecute then //jika pernah dianalisis child.pcChild.ActivePageIndex:=3 else //polimomial ortogonal form muncul
L 17 MessageDlg('Input Data Belum Valid !',mtWarning, [mbOK], 0); end else MessageDlg('Belum Ada File yang Dibuka !',mtWarning, [mbOK], 0); end; procedure TMainForm.fbBantuanClick(Sender: TObject); begin Application.HelpFile := 'C:\My Documents\Rancob\Rancob.hlp'; Application.HelpCommand(HELP_FINDER, 0); end; procedure TMainForm.Timer1Timer(Sender: TObject); begin statusbar1.Panels[1].Text:='Jam : '+Timetostr(now); end; end. Unit CHILDWIN; interface uses Windows, Messages, Classes,Sysutils,Graphics,Dialogs, Forms, Controls, StdCtrls, Grids, AxCtrls, OleCtrls, VCF1, ExtCtrls, jpeg, ActnList, ComCtrls,ToolWin, ctnMan, ActnCtrls, ActnMenus, Buttons,RAK, QuickRpt,QRCtrls,DBChart,Report,StrUtils, VCFI, Chart, Math, Menus, TeEngine, Series, TeeProcs; type TMDIChild = class(TForm) pcChild: TPageControl; Input: TTabSheet; Panel1: TPanel; Image1: TImage; Disain: TTabSheet; Panel2: TPanel; Output: TTabSheet; Panel4: TPanel; ScrollBox1: TScrollBox; ScrollBox2: TScrollBox; Image3: TImage; Image2: TImage; Label6: TLabel; Edit1: TEdit; PageControl1: TPageControl; TabSheet1: TTabSheet; GroupBox2: TGroupBox; Label5: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Edit3: TEdit; ComboBox3: TComboBox;
L 18 TarafI: TRadioButton; JenisI: TRadioButton; ComboBox4: TComboBox; ListBox2: TListBox; TabSheet2: TTabSheet; Label1: TLabel; Edit2: TEdit; Button3: TButton; GroupBox1: TGroupBox; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label10: TLabel; Label11: TLabel; Edit4: TEdit; ComboBox1: TComboBox; TarafII: TRadioButton; JenisII: TRadioButton; ComboBox2: TComboBox; ListBox1: TListBox; Edit5: TEdit; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; Button10: TButton; Label13: TLabel; ComboBox6: TComboBox; Panel3: TPanel; Label12: TLabel; Panel5: TPanel; Memo1: TMemo; Button1: TButton; InputBtn: TBitBtn; DisainBtn: TBitBtn; BitBtn3: TBitBtn; GroupBox3: TGroupBox; SatuanF1: TEdit; Label67: TLabel; GroupBox4: TGroupBox; Label68: TLabel; SatuanF2: TEdit; Label71: TLabel; Label72: TLabel; Label73: TLabel;
L 19 Label74: TLabel; Label75: TLabel; Label76: TLabel; Label77: TLabel; Label78: TLabel; Label79: TLabel; Label80: TLabel; Label82: TLabel; Label83: TLabel; Label84: TLabel; Label85: TLabel; Label86: TLabel; UjiLanjut: TTabSheet; Panel6: TPanel; Image5: TImage; StringGrid2: TStringGrid; Panel7: TPanel; Bevel3: TBevel; LabelPol: TLabel; GroupBox5: TGroupBox; FaktorI: TRadioButton; FaktorII: TRadioButton; BitBtn4: TBitBtn; Panel8: TPanel; Shape17: TShape; Label96: TLabel; Label95: TLabel; Label87: TLabel; Label88: TLabel; Label89: TLabel; Shape14: TShape; Label90: TLabel; Label91: TLabel; Label94: TLabel; Label93: TLabel; Label92: TLabel; Shape15: TShape; Shape16: TShape; Label116: TLabel; Label103: TLabel; Label102: TLabel; Shape24: TShape; Shape23: TShape; Shape22: TShape; Shape21: TShape; Shape20: TShape; Shape19: TShape;
L 20 Shape18: TShape; Panel9: TPanel; Image4: TImage; Memo2: TMemo; Label16: TLabel; Bevel1: TBevel; Panel10: TPanel; Label14: TLabel; Label15: TLabel; Shape1: TShape; Label18: TLabel; Label17: TLabel; Label19: TLabel; Label20: TLabel; Label21: TLabel; Label22: TLabel; Label23: TLabel; Label24: TLabel; Label62: TLabel; Label57: TLabel; Label52: TLabel; Label46: TLabel; Label39: TLabel; Label32: TLabel; Label25: TLabel; Shape4: TShape; Label26: TLabel; Label27: TLabel; Label28: TLabel; Label29: TLabel; Label30: TLabel; Label33: TLabel; Label34: TLabel; Label35: TLabel; Label36: TLabel; Label37: TLabel; Label31: TLabel; Label38: TLabel; Label45: TLabel; Label44: TLabel; Label43: TLabel; Label42: TLabel; Label41: TLabel; Label40: TLabel; Label47: TLabel; Label48: TLabel; Label49: TLabel;
L 21 Label50: TLabel; Label51: TLabel; Label56: TLabel; Label55: TLabel; Label54: TLabel; Label53: TLabel; Label58: TLabel; Label59: TLabel; Label60: TLabel; Label61: TLabel; Label66: TLabel; Label65: TLabel; Label64: TLabel; Label63: TLabel; Shape3: TShape; Shape13: TShape; Label69: TLabel; Label70: TLabel; Bevel2: TBevel; Shape9: TShape; Shape8: TShape; Shape7: TShape; Shape5: TShape; Shape2: TShape; Shape12: TShape; Shape11: TShape; Shape10: TShape; Book1: TF1Book; mmDB: TMemo; mmSK: TMemo; mmJK: TMemo; mmKT: TMemo; mmFH: TMemo; mmFT5: TMemo; mmFT1: TMemo; Shape6: TShape; Panel11: TPanel; Shape25: TShape; Label81: TLabel; Label97: TLabel; Chart: TChart; Series1: TLineSeries; ScrollBox3: TScrollBox; GroupBox6: TGroupBox; ListBox3: TListBox; GugusPertama: TButton; GugusKedua: TButton;
L 22 Label98: TLabel; Button14: TButton; ListBox4: TListBox; BitBtn5: TBitBtn; Label99: TLabel; Button12: TButton; Button13: TButton; Button15: TButton; ListBox5: TListBox; ListBox6: TListBox; Label100: TLabel; Panel12: TPanel; Shape26: TShape; Label101: TLabel; Label104: TLabel; Shape27: TShape; Shape28: TShape; Shape29: TShape; Label105: TLabel; Label106: TLabel; Label107: TLabel; Label108: TLabel; Label109: TLabel; Label110: TLabel; Label111: TLabel; mmSK2: TMemo; mmDB2: TMemo; mmJK2: TMemo; mmKT2: TMemo; mmFH2: TMemo; mmFT52: TMemo; mmFT12: TMemo; Label112: TLabel; Label113: TLabel; Label114: TLabel; Label115: TLabel; Shape30: TShape; Shape31: TShape; Shape32: TShape; Shape33: TShape; Shape34: TShape; Shape35: TShape; Shape36: TShape; Label117: TLabel; Label118: TLabel; Bevel4: TBevel; Shape37: TShape;
L 23 Shape38: TShape; Label119: TLabel; Shape39: TShape; Shape40: TShape; Shape41: TShape; Label120: TLabel; Shape42: TShape; Shape43: TShape; Label121: TLabel; Shape44: TShape; Shape45: TShape; Shape46: TShape; Shape47: TShape; Shape48: TShape; Shape49: TShape; Label122: TLabel; Shape50: TShape; Label123: TLabel; Label124: TLabel; Memo3: TMemo; Memo4: TMemo; Memo5: TMemo; Memo6: TMemo; Shape51: TShape; ToolBar1: TToolBar; ToolButton1: TToolButton; ToolButton2: TToolButton; ToolButton3: TToolButton; ToolButton4: TToolButton; Label125: TLabel; Label126: TLabel; PrintOutputBtn: TBitBtn; CetakDataBtn: TBitBtn; Book2: TF1Book; Shape52: TShape; Shape53: TShape; Label127: TLabel; timecount: TLabel; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure TarafIIClick(Sender: TObject); procedure JenisIIClick(Sender: TObject); procedure TarafIClick(Sender: TObject); procedure JenisIClick(Sender: TObject); procedure ComboBox3Change(Sender: TObject); procedure ComboBox1Change(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Edit5Change(Sender: TObject);
L 24 procedure Edit2Change(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure ListBox2Click(Sender: TObject); procedure ListBox1Click(Sender: TObject); procedure Button10Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure CekSel(); procedure HitungRAK(); procedure InputBtnClick(Sender: TObject); procedure DisainBtnClick(Sender: TObject); procedure SaveChild(); function CekExecute:boolean; function CekIsiSG:boolean; procedure Hitung; procedure DesignSel; procedure ComboBox6KeyPress(Sender: TObject; var Key: Char); procedure ComboBox3KeyPress(Sender: TObject; var Key: Char); procedure ComboBox4KeyPress(Sender: TObject; var Key: Char); procedure ComboBox2KeyPress(Sender: TObject; var Key: Char); procedure ComboBox1KeyPress(Sender: TObject; var Key: Char); procedure Edit1Change(Sender: TObject); procedure Edit3Change(Sender: TObject); procedure ComboBox6Change(Sender: TObject); procedure ComboBox4Change(Sender: TObject); procedure BitBtn3Click(Sender: TObject); procedure BitBtn4Click(Sender: TObject); function CekSelang(k:integer):string; procedure FaktorIClick(Sender: TObject); procedure FaktorIIClick(Sender: TObject); function CekAngka(a:integer):boolean; function CekUrutan(a:integer):Boolean; function CekDesign:boolean; procedure Button1Click(Sender: TObject); procedure Book1Click(Sender: TObject; nRow, nCol: Integer); procedure PolinomOrtogonal(F:integer); procedure CetakmmSK(F:string;a,p:integer); procedure CetakmmDB(F:string;a,p:integer); procedure CetakmmJK(F:string;a,p:integer); procedure CetakmmKT(p:integer); function GetDBInt(F:integer):string; procedure CetakmmFH(F:string;a,p:integer); procedure CetakmmFT(F:string;a,p:integer);
L 25 procedure SetPerlakuan(F:integer); procedure ClearPolOrtReport; procedure ListBox3Click(Sender: TObject); procedure GugusPertamaClick(Sender: TObject); procedure GugusKeduaClick(Sender: TObject); procedure Button14Click(Sender: TObject); procedure Button13Click(Sender: TObject); procedure Button12Click(Sender: TObject); procedure Button15Click(Sender: TObject); procedure ListBox5Click(Sender: TObject); procedure ListBox6Click(Sender: TObject); procedure ListBox4Click(Sender: TObject); procedure ClearSG2(i:integer); procedure GetKoefPO(a:integer); procedure BitBtn5Click(Sender: TObject); function CekKoefPO:boolean; procedure PembandingKuantitatif(F:integer); procedure ClearPemOrtReport; procedure SetKurva(a1,a2:string); procedure PrintOutputBtnClick(Sender: TObject); procedure CetakDataBtnClick(Sender: TObject); procedure HitWaktu; private { Private declarations } public { Public declarations } WAwal,WAkhir:TDatetime; end; implementation uses MAIN,TabelF,Koefisien,PolOrt; var tamp1,tamp2:string; CekValid,CekExec,CekDisainOK,CekPolOrt,CekPemOrt:Boolean; DataVar:array[1..8] of string[2]; JumlahVar,Count1,jum,waktu:integer; {$R *.dfm} function TMDIChild.CekDesign:boolean; begin//Mengecek apakah BitBtn2 pernah diklik dan valid Result:=CekDisainOK; end; function TMDIChild.CekExecute:boolean; begin //mengecek apakah bitbtn1 pernah diklik dan valid result:=CekExec; end; function TMDIChild.CekIsiSG:boolean; var i,j:integer;
L 26 CekIsi:boolean; begin //mengecek apakah stringgrid1 ada isinya CekIsi:=false; for i:=1 to Book1.MaxRow do for j:=1 to Book1.MaxCol do begin if Book1.EntryRC[i,j]<>'' then CekIsi:=true; end; Result:=CekIsi; end; procedure TMDIChild.HitWaktu; var Lama:real; SLama:string; begin//menghitung waktu proses Lama:=(time-WAwal)*100000; Str(lama:14:5,SLama); timecount.Caption:=SLama + ' Sec'; WAwal:=0; Wakhir:=0; end; procedure TMDIChild.SetPerlakuan(F:integer); var i:integer; begin//Menset Default perlakuan pada Faktor I dan II if F=1 then begin if TarafI.checked=true then begin Combobox4.Clear; for i:=3 to 6 do begin Combobox4.Items.Append(inttostr(i)); end; Combobox4.Text:='3'; end else if JenisI.Checked=true then begin Combobox4.Clear; for i:=3 to 8 do begin Combobox4.Items.Append(inttostr(i)); end; Combobox4.Text:='3'; end; end else begin if TarafII.checked=true then begin
L 27 Combobox2.Clear; for i:=3 to 6 do begin Combobox2.Items.Append(inttostr(i)); end; Combobox2.Text:='3'; end else if JenisII.Checked=true then begin Combobox2.Clear; for i:=3 to 8 do begin Combobox2.Items.Append(inttostr(i)); end; Combobox2.Text:='3'; end; end; end; procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction); begin if MessageDlg('Simpan File '+child.Caption +#13+'sebelum ditutup ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin SaveChild(); end; CekValid:=true; Book1.ClearClipboard; Mainform.EditCopy1.Enabled:=false; Mainform.EditCut1.Enabled:=false; Mainform.EditPaste1.Enabled:=false; Mainform.EditDelete1.Enabled:=false; MainForm.fbDisain.Enabled:=false; MainForm.fbInput.Enabled:=false; MainForm.fbOutput.Enabled:=false; MainForm.fbUjiLanjut.Enabled:=false; MainForm.Disain.Enabled:=false; MainForm.Input.Enabled:=false; MainForm.Output.Enabled:=false; MainForm.UjiLanjut.Enabled:=false; MainForm.Filesave1.Enabled:=false; Action := caFree; end; procedure TMDIChild.SaveChild(); begin //menyimpan file sebelum file ditutup MainForm.SaveMDIChild(); end; procedure TMDIChild.TarafIIClick(Sender: TObject);
L 28 begin SetPerlakuan(2); label11.Caption:='Input Taraf Kuantitatif'; groupbox4.Visible:=true; end; procedure TMDIChild.JenisIIClick(Sender: TObject); begin SetPerlakuan(2); label11.Caption:='Input Taraf Kualitatif'; Groupbox4.Visible:=false; end; procedure TMDIChild.TarafIClick(Sender: TObject); begin SetPerlakuan(1); label1.Caption:='Input Taraf Kuantitatif'; Groupbox3.Visible:=true; end; procedure TMDIChild.JenisIClick(Sender: TObject); begin SetPerlakuan(1); label1.Caption:='Input Taraf Kualitatif'; Groupbox3.Visible:=false; end; procedure TMDIChild.ComboBox3Change(Sender: TObject); var i:integer; begin DisainBtn.Enabled:=true; tamp1:=combobox3.Text; combobox1.Clear; combobox1.Text:=tamp2; if combobox3.Text <> '' then begin for i:=65 to 90 do begin if chr(i) <> combobox3.Text then begin combobox1.Items.Append(chr(i)); end; end; end; end; procedure TMDIChild.ComboBox1Change(Sender: TObject); var i:integer; begin tamp2:=combobox1.Text; combobox3.Clear; combobox3.Text:=tamp1;
L 29 if combobox1.Text <> '' then begin for i:=65 to 90 do begin if chr(i) <> combobox1.Text then begin combobox3.Items.Append(chr(i)); end; end; end; end; procedure TMDIChild.FormCreate(Sender: TObject); begin waktu:=0; tamp1:=''; tamp2:=''; Panel5.Hide; CekValid:=True; CekPolOrt:=false; CekPemOrt:=false; CekExec:=false; CekDisainOK:=false; BitBtn4.Enabled:=false; SetPerlakuan(1); SetPerlakuan(2); WAwal:=0; WAkhir:=0; DisainBtn.Anchors:=[akRight]; InputBtn.Anchors:=[akRight]; bitbtn3.Anchors:=[akRight]; combobox6.Text:='3'; combobox3.Text:='A'; combobox4.Text:='3'; combobox1.Text:='B'; combobox2.Text:='3'; pcChild.Pages[2].TabVisible:=false; pcChild.Pages[3].TabVisible:=false; end; procedure TMDIChild.Edit5Change(Sender: TObject); begin button4.Enabled:=true; end; procedure TMDIChild.Edit2Change(Sender: TObject); begin button3.Enabled:=true; end;
L 30 procedure TMDIChild.Button3Click(Sender: TObject); begin if edit2.Text <> '' then begin listbox2.Items.Append(edit2.Text); edit2.Text:=''; button3.Enabled:=false; end; end; procedure TMDIChild.Button4Click(Sender: TObject); begin if edit5.Text <> '' then begin listbox1.Items.Append(edit5.Text); edit5.Text:=''; button4.Enabled:=false; end; end; procedure TMDIChild.ListBox2Click(Sender: TObject); begin DisainBtn.Enabled:=true; button8.Enabled:=true; button9.Enabled:=true; button10.Enabled:=true; end; procedure TMDIChild.ListBox1Click(Sender: TObject); begin DisainBtn.Enabled:=true; button5.Enabled:=true; button6.Enabled:=true; button7.Enabled:=true; end; procedure TMDIChild.Button10Click(Sender: TObject); var i:integer; begin if listbox2.Count<>0 then begin i:=listbox2.ItemIndex; listbox2.DeleteSelected; if i>0 then listbox2.ItemIndex:=i-1 else listbox2.ItemIndex:=0; end; end; procedure TMDIChild.Button7Click(Sender: TObject); var i:integer; begin if listbox1.Count<>0 then
L 31 begin i:=listbox1.ItemIndex; listbox1.DeleteSelected; if i>0 then listbox1.ItemIndex:=i-1 else listbox1.ItemIndex:=0; end; end; procedure TMDIChild.Button5Click(Sender: TObject); var i:integer; begin if listbox1.ItemIndex <> 0 then begin i:=listbox1.ItemIndex; listbox1.Items.Move(listbox1.ItemIndex,listbox1.ItemIndex-1); listbox1.ItemIndex:=i-1; end; end; procedure TMDIChild.Button6Click(Sender: TObject); var i:integer; begin if listbox1.ItemIndex <> listbox1.Items.Count-1 then begin i:=listbox1.ItemIndex; listbox1.Items.Move(listbox1.ItemIndex,listbox1.ItemIndex+1); listbox1.ItemIndex:=i+1; end; end; procedure TMDIChild.Button9Click(Sender: TObject); var i:integer; begin if listbox2.ItemIndex <> listbox2.Items.Count-1 then begin i:=listbox2.ItemIndex; listbox2.Items.Move(listbox2.ItemIndex,listbox2.ItemIndex+1); listbox2.ItemIndex:=i+1; end; end; procedure TMDIChild.Button8Click(Sender: TObject); var i:integer; begin if listbox2.ItemIndex <> 0 then begin i:=listbox2.ItemIndex; listbox2.Items.Move(listbox2.ItemIndex,listbox2.ItemIndex-1); listbox2.ItemIndex:=i-1; end; end;
L 32 procedure TMDIChild.HitungRAK(); var b,k:integer; begin Rak.setbarkol(Book1.MaxRow,Book1.MaxCol); PolOrt.setbarkol(Book1.MaxRow,Book1.MaxCol); for b:=1 to Book1.MaxRow do for k:=1 to Book1.MaxCol do begin Rak.isidata(b,k,strtoint(combobox6.text),strtoint(combobox4.text), strtoint(combobox2.text),strtofloat(Book1.EntryRC[b,k])); PolOrt.isidata(b,k,strtoint(combobox6.text),strtoint(combobox4.text), strtoint(combobox2.text),strtofloat(Book1.EntryRC[b,k])); end; end; procedure TMDIChild.CekSel(); var i,j:integer; cek1:boolean; tamp,selkiri,selatas:string; begin CekValid:=True; cek1:=false; for i:=1 to book1.MaxRow do for j:=1 to book1.MaxCol do begin if Book1.EntryRC[i,j]='' then begin selkiri:=book1.RowText[i]; selatas:=book1.ColText[j]; memo1.Lines.Append('[Peringatan!] Sel '+selkiri+selatas+'Kosong'); cek1:=true; CekValid:=false; end else begin try tamp:= floattostr(strtofloat(Book1.EntryRC[i,j])/2); except on EZeroDivide do Begin if Book1.EntryRC[i,j]<> '' then begin selkiri:=book1.RowText[i]; selatas:=book1.ColText[j]; memo1.Lines.Append('[Peringatan!] Sel '+selkiri+selatas+'Berisi Nilai Tidak Valid '); cek1:=true; CekValid:=false; end; end;
L 33 on EConvertError do Begin if Book1.EntryRC[i,j]<> '' then Begin selkiri:=book1.RowText[i]; selatas:=book1.ColText[j]; memo1.Lines.Append('[Peringatan!] Sel '+selkiri+selatas+'Berisi Nilai Tidak Valid '); cek1:=true; CekValid:=false; end; end; end; end; end; if cek1=true then begin panel5.Show; memo1.ReadOnly:=true; end; end; procedure TMDIChild.ClearPolOrtReport; begin//menghapus Data pada Report PolOrt FRep.QRmmSK.Lines.Clear; FRep.QRmmDB.Lines.Clear; FRep.QRmmJK.Lines.Clear; FRep.QRmmKT.Lines.Clear; FRep.QRmmFH.Lines.Clear; FRep.QRmmFT5.Lines.Clear; FRep.QRmmFT1.Lines.Clear; FRep.QRLabel57.Caption:='rab-1'; FRep.QRLabel58.Caption:='JKT'; FRep.QRLabel68.Caption:='Koefisien keragaman = 0%'; end; procedure TMDIChild.ClearPemOrtReport; begin//menghapus Data pada Report PemOrt FRep.QRmmSK2.Lines.Clear; FRep.QRmmDB2.Lines.Clear; FRep.QRmmJK2.Lines.Clear; FRep.QRmmKT2.Lines.Clear; FRep.QRmmFH2.Lines.Clear; FRep.QRmmFT52.Lines.Clear; FRep.QRmmFT12.Lines.Clear; FRep.QRLabel66.Caption:='rab-1'; FRep.QRLabel67.Caption:='JKT'; FRep.QRLabel72.Caption:='Koefisien keragaman = 0%';
L 34 end; procedure TMDIChild.Hitung; begin//menghitung data memo1.Clear; CekSel(); if CekValid=true then begin CekExec:=true; //cek apakah sudah menampilkan hasil output ClearPolOrtReport; WAwal:=Time; HitungRAK(); Panel12.hide; Panel11.hide; Panel8.hide; Panel10.Show; Mainform.fbOutput.Enabled:=true; Mainform.fbUjiLanjut.Enabled:=true; Mainform.Output.Enabled:=true; Mainform.UjiLanjut.Enabled:=true; FaktorI.Caption:=Edit3.Text; FaktorII.Caption:=Edit4.Text; pcChild.Pages[2].TabVisible:=true; pcChild.Pages[3].TabVisible:=true; BitBtn4.Enabled:=true; FRep.QRLabel2.Caption:=edit1.Text; FRep.QRLabel13.Caption:=inttostr(dbKelompok); FRep.QRLabel14.Caption:=inttostr(dbPerlakuan); FRep.QRLabel15.Caption:=inttostr(dbPerlakuanA); FRep.QRLabel16.Caption:=inttostr(dbPerlakuanB); FRep.QRLabel17.Caption:=inttostr(dbPerlakuanAxB); FRep.QRLabel18.Caption:=inttostr(dbGalat); FRep.QRLabel19.Caption:=inttostr(dbTotal); FRep.QRLabel21.Caption:=format('%10.4f',[HitJKK]); FRep.QRLabel20.Caption:=format('%10.4f',[HitJKP]); FRep.QRLabel22.Caption:=format('%10.4f',[HitJKA]); FRep.QRLabel23.Caption:=format('%10.4f',[HitJKB]); FRep.QRLabel24.Caption:=format('%10.4f',[HitJKAxB]); FRep.QRLabel25.Caption:=format('%10.4f',[HitJKG]); FRep.QRLabel26.Caption:=format('%10.4f',[HitJKT]); FRep.QRLabel27.Caption:=format('%10.4f',[HitKTK]); FRep.QRLabel28.Caption:=format('%10.4f',[HitKTP]); FRep.QRLabel29.Caption:=format('%10.4f',[HitKTA]); FRep.QRLabel30.Caption:=format('%10.4f',[HitKTB]); FRep.QRLabel31.Caption:=format('%10.4f',[HitKTAxB]); FRep.QRLabel32.Caption:=format('%10.4f',[HitKTG]); FRep.QRLabel37.Caption:=format('%10.2f',[HitFKelompok])+CekNyata(HitFKelompo k,GetFTable(5,dbKelompok,dbGalat),GetFTable(1,dbKelompok,dbGalat));
L 35 FRep.QRLabel36.Caption:=format('%10.2f',[HitFPerlakuan])+CekNyata(HitFPerlakuan ,GetFTable(5,dbPerlakuan,dbGalat),GetFTable(1,dbPerlakuan,dbGalat)); FRep.QRLabel33.Caption:=format('%10.2f',[HitFA])+CekNyata(HitFA,GetFTable(5,db PerlakuanA,dbGalat),GetFTable(1,dbPerlakuanA,dbGalat)); FRep.QRLabel34.Caption:=format('%10.2f',[HitFB])+CekNyata(HitFB,GetFTable(5,db PerlakuanB,dbGalat),GetFTable(1,dbPerlakuanB,dbGalat)); FRep.QRLabel35.Caption:=format('%10.2f',[HitFAxB])+CekNyata(HitFAxB,GetFTable(5, dbPerlakuanAxB,dbGalat),GetFTable(1,dbPerlakuanAxB,dbGalat)); FRep.QRLabel38.Caption:=format('%6.2f',[GetFTable(5,dbKelompok,dbGalat)]); FRep.QRLabel39.Caption:=format('%6.2f',[GetFTable(5,dbPerlakuan,dbGalat)]); FRep.QRLabel40.Caption:=format('%6.2f',[GetFTable(5,dbPerlakuanA,dbGalat)]); FRep.QRLabel41.Caption:=format('%6.2f',[GetFTable(5,dbPerlakuanB,dbGalat)]); FRep.QRLabel42.Caption:=format('%6.2f',[GetFTable(5,dbPerlakuanAxB,dbGalat)]); FRep.QRLabel43.Caption:=format('%6.2f',[GetFTable(1,dbKelompok,dbGalat)]); FRep.QRLabel44.Caption:=format('%6.2f',[GetFTable(1,dbPerlakuan,dbGalat)]); FRep.QRLabel45.Caption:=format('%6.2f',[GetFTable(1,dbPerlakuanA,dbGalat)]); FRep.QRLabel46.Caption:=format('%6.2f',[GetFTable(1,dbPerlakuanB,dbGalat)]); FRep.QRLabel47.Caption:=format('%6.2f',[GetFTable(1,dbPerlakuanAxB,dbGalat)]); FRep.QRLabel50.Caption:='Koefisien keragaman = '+format('%6.2f',[KoefKeragaman])+'%'; Label15.Caption:=Edit1.Text; Label125.Caption:=Edit1.Text; label126.caption:=Edit1.Text; FRep.QRLabel75.Caption:=Edit1.Text; FRep.QRLabel76.Caption:=Edit1.Text; Label27.Caption:=Edit3.Text+' ('+combobox3.Text+')'; Label28.Caption:=Edit4.Text+' ('+combobox1.Text+')'; Label29.Caption:='('+combobox3.Text+' x '+combobox1.Text+')'; Label32.Caption:=floattostr(dbKelompok); Label33.Caption:=floattostr(dbPerlakuan); Label34.Caption:=floattostr(dbPerlakuanA); Label35.Caption:=floattostr(dbPerlakuanB); Label36.Caption:=floattostr(dbPerlakuanAxB); Label37.Caption:=floattostr(dbGalat); Label38.Caption:=floattostr(dbTotal); Label39.Caption:=format('%8.4f',[HitJKK]); Label40.Caption:=format('%8.4f',[HitJKP]); Label41.Caption:=format('%8.4f',[HitJKA]); Label42.Caption:=format('%8.4f',[HitJKB]); Label43.Caption:=format('%8.4f',[HitJKAxB]); Label44.Caption:=format('%8.4f',[HitJKG]); Label45.Caption:=format('%8.4f',[HitJKT]); Label46.Caption:=format('%8.4f',[HitKTK]); Label47.Caption:=format('%8.4f',[HitKTP]); Label48.Caption:=format('%8.4f',[HitKTA]); Label49.Caption:=format('%8.4f',[HitKTB]); Label50.Caption:=format('%8.4f',[HitKTAxB]);
L 36 Label51.Caption:=format('%8.4f',[HitKTG]); Label52.Caption:=format('%8.2f',[HitFKelompok])+CekNyata(HitFKelompok,GetFTable( 5,dbKelompok,dbGalat),GetFTable(1,dbKelompok,dbGalat)); Label53.Caption:=format('%8.2f',[HitFPerlakuan])+CekNyata(HitFPerlakuan,GetFTable(5, dbPerlakuan,dbGalat),GetFTable(1,dbPerlakuan,dbGalat)); Label54.Caption:=format('%8.2f',[HitFA])+CekNyata(HitFA,GetFTable(5,dbPerlakuanA,d bGalat),GetFTable(1,dbPerlakuanA,dbGalat)); Label55.Caption:=format('%8.2f',[HitFB])+CekNyata(HitFB,GetFTable(5,dbPerlakuanB,d bGalat),GetFTable(1,dbPerlakuanB,dbGalat)); Label56.Caption:=format('%8.2f',[HitFAxB])+CekNyata(HitFAxB,GetFTable(5,dbPerlaku anAxB,dbGalat),GetFTable(1,dbPerlakuanAxB,dbGalat)); Label57.Caption:=format('%6.2f',[GetFTable(5,dbKelompok,dbGalat)]); Label58.Caption:=format('%6.2f',[GetFTable(5,dbPerlakuan,dbGalat)]); Label59.Caption:=format('%6.2f',[GetFTable(5,dbPerlakuanA,dbGalat)]); Label60.Caption:=format('%6.2f',[GetFTable(5,dbPerlakuanB,dbGalat)]); Label61.Caption:=format('%6.2f',[GetFTable(5,dbPerlakuanAxB,dbGalat)]); Label62.Caption:=format('%6.2f',[GetFTable(1,dbKelompok,dbGalat)]); Label63.Caption:=format('%6.2f',[GetFTable(1,dbPerlakuan,dbGalat)]); Label64.Caption:=format('%6.2f',[GetFTable(1,dbPerlakuanA,dbGalat)]); Label65.Caption:=format('%6.2f',[GetFTable(1,dbPerlakuanB,dbGalat)]); Label66.Caption:=format('%6.2f',[GetFTable(1,dbPerlakuanAxB,dbGalat)]); Label69.Caption:='Koefisien keragaman = '+format('%6.2f',[KoefKeragaman])+'%'; Panel5.Hide; WAkhir:=time; HitWaktu; PcChild.ActivePageIndex:=2; end; end; procedure TMDIChild.InputBtnClick(Sender: TObject); begin Hitung; StringGrid2.ColCount:=1; StringGrid2.RowCount:=1; StringGrid2.FixedCols:=0; StringGrid2.FixedRows:=0; end; procedure TMDIChild.Designsel; var i,j,c:integer; begin //mendesign Form Input Book1.MaxCol:=strtoint(combobox6.text); Book1.MaxRow:=strtoint(combobox4.Text)*strtoint(combobox2.Text); for i:=1 to strtoint(combobox6.Text) do begin Book1.ColText[i]:=' Ulangan '+inttostr(i)+' '; Book1.ColWidth[i]:=3000; end; c:=1;
L 37 for i:=1 to strtoint(combobox4.Text) do for j:=1 to strtoint(combobox2.Text) do begin Book1.RowText[c]:=combobox3.Text+inttostr(i)+combobox1.Text+inttostr(j); inc(c); end; PcChild.ActivePageIndex:=1; end; function TMDIChild.CekAngka(a:integer):boolean; var Cek1:boolean; i:integer; tes:real; begin//mengecek Angka jika Taraf yang terpilih maka Angka harus numerik Cek1:=true; if a=1 then begin if TarafI.Checked then begin for i:=0 to Listbox2.Count-1 do begin try tes:=strtofloat(Listbox2.Items.Strings[i])/2; except On EConvertError do Cek1:=false; end; end; end; end else begin if TarafII.Checked then begin for i:=0 to Listbox1.Count-1 do begin try tes:=strtofloat(Listbox1.Items.Strings[i])/2; except On EConvertError do Cek1:=false; end; end; end; end; Result:=Cek1; end; function TMDIChild.CekUrutan(a:integer):Boolean; var Cek2:boolean; i:integer; begin //mengecek urutan taraf, urutannya harus dari kecil ke besar Cek2:=true; if a=1 then begin
L 38 if CekAngka(1)=True then begin if TarafI.Checked then begin for i:=1 to Listbox2.Count-1 do begin if strtofloat(Listbox2.Items.Strings[i])<strtofloat(Listbox2.Items.Strings[i-1]) then Cek2:=false; end; end; end; end else begin if CekAngka(2)=True then begin if TarafII.Checked then begin for i:=1 to Listbox1.Count-1 do begin if strtofloat(Listbox1.Items.Strings[i])<strtofloat(Listbox1.Items.Strings[i-1]) then Cek2:=false; end; end; end; end; Result:=Cek2; end; procedure TMDIChild.DisainBtnClick(Sender: TObject); var i,j:integer; pesan:string; begin GroupBox6.Hide; pesan:=''; if edit1.Text = '' then pesan:=pesan+' - Nama Percobaan belum terisi '+#13; if combobox6.Text = '' then pesan:=pesan+' - Jumlah ulangan belum terisi '+#13; if (strtoint(combobox6.Text)>10) or (strtoint(combobox6.Text)<2) then pesan:=pesan+' - Jumlah Ulangan harus antara 2-10 '+#13; if edit3.Text = '' then pesan:=pesan+' - Nama Faktor I belum terisi '+#13; if edit4.Text = '' then pesan:=pesan+' - Nama Faktor II belum terisi '+#13; if combobox3.Text = '' then pesan:=pesan+' - Lambang Faktor I belum terisi '+#13; if combobox1.Text = '' then pesan:=pesan+' - Lambang Faktor II belum terisi '+#13;
L 39 if combobox4.Text = '' then pesan:=pesan+' - Jumlah Perlakuan Faktor I belum terisi '+#13; if combobox2.Text = '' then pesan:=pesan+' - Jumlah Perlakuan Faktor II belum terisi '+#13; if ListBox2.Items.Count< strtoint(combobox4.Text) then pesan:=pesan+' - Nama-nama Jenis/taraf Faktor I belum terisi lengkap '+#13 else if ListBox2.Items.Count> strtoint(combobox4.Text) then pesan:=pesan+' - Nama-nama Jenis/taraf Faktor I melebihi maks '+combobox4.Text+#13; if CekAngka(1)=false then pesan:=pesan+' - Nama Taraf-taraf Faktor I tidak valid'+#13+' karena nama Taraf harus Numerik'+#13; if CekUrutan(1)=false then pesan:=pesan+' - Urutan Angka Taraf faktor I tidak valid'+#13+' karena angka Taraf harus diurutkan menaik'#13; if ListBox1.Items.Count< strtoint(Combobox2.Text) then pesan:=pesan+' - Nama-nama Jenis/taraf Faktor II belum terisi lengkap '+#13 else if ListBox1.Items.Count> strtoint(Combobox2.Text) then pesan:=pesan+' - Nama-nama Jenis/taraf Faktor II melebihi maks '+Combobox2.Text+#13; if CekAngka(2)=false then pesan:=pesan+' - Nama Taraf-taraf Faktor II tidak valid'+#13+' karena nama Taraf harus Numerik'+#13; if CekUrutan(2)=false then pesan:=pesan+' - Urutan Angka Taraf faktor II tidak valid'+#13+' karena angka Taraf harus diurutkan menaik'#13; if TarafI.Checked then if SatuanF1.Text='' then pesan:=pesan+' - Nama Satuan Taraf Faktor I belum terisi '+#13; if TarafII.Checked then if SatuanF2.Text='' then pesan:=pesan+' - Nama Satuan Taraf Faktor II belum terisi '+#13; if pesan<>'' then begin pesan:=' Terdapat kesalahan input :'+#13+#13+pesan; MessageDlg(pesan, mtInformation, [mbOk], 0); end else Begin CekDisainOK:=true; book1.SheetName[1]:=edit1.Text; InputBtn.Enabled:=true; MainForm.EditCopy1.Enabled:=true; MainForm.EditCut1.Enabled:=true; MainForm.EditPaste1.Enabled:=true; MainForm.EditDelete1.Enabled:=true;
L 40 Book1.Enabled:=true; if Cekisisg=true then begin if MessageDlg('Terdapat data pada Form Input. Hapus data ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin //Mendesign dengan menghapus semua data for i:=1 to book1.MaxRow do for j:=1 to book1.MaxCol do begin Book1.EntryRC[i,j]:=''; end; DesignSel; end else begin //Mendesign tanpa menghapus data DesignSel; end; end else begin //jika pada form input tidak ada data atau masih baru DesignSel; for i:=1 to book1.MaxRow do for j:=1 to book1.MaxCol do begin Book1.EntryRC[i,j]:=''; end; end; end; end; procedure TMDIChild.ComboBox6KeyPress(Sender: TObject; var Key: Char); begin if not (((Key>=#48)and(Key<=#57)) or (Key =#8) or (Key=#27) or (Key=#13)) then Key:=#0; end; procedure TMDIChild.ComboBox3KeyPress(Sender: TObject; var Key: Char); begin if not (((Key>=#65)and(Key<=#90)) or ((Key>=#97)and(Key<=#122))or (Key =#8) or (Key=#27) or (Key=#13)) then Key:=#0; if (Key>=#97)and(Key<=#122) then Key:=chr(ord(Key)-32); end; procedure TMDIChild.ComboBox4KeyPress(Sender: TObject; var Key: Char); begin if not (((Key>=#48)and(Key<=#57)) or (Key =#8) or (Key=#27) or (Key=#13)) then Key:=#0; end; procedure TMDIChild.ComboBox2KeyPress(Sender: TObject; var Key: Char);
L 41 begin if not (((Key>=#48)and(Key<=#57)) or (Key =#8) or (Key=#27) or (Key=#13)) then Key:=#0; end; procedure TMDIChild.ComboBox1KeyPress(Sender: TObject; var Key: Char); begin if not (((Key>=#65)and(Key<=#90)) or ((Key>=#97)and(Key<=#122))or (Key =#8) or (Key=#27) or (Key=#13)) then Key:=#0; if (Key>=#97)and(Key<=#122) then Key:=chr(ord(Key)-32); end; procedure TMDIChild.Edit1Change(Sender: TObject); begin DisainBtn.Enabled:=true; end; procedure TMDIChild.Edit3Change(Sender: TObject); begin DisainBtn.Enabled:=true; end; procedure TMDIChild.ComboBox6Change(Sender: TObject); begin DisainBtn.Enabled:=true; end; procedure TMDIChild.ComboBox4Change(Sender: TObject); begin DisainBtn.Enabled:=true; end; procedure TMDIChild.BitBtn3Click(Sender: TObject); var i:integer; begin FRep.QuickRep1.Prepare; FRep.PageHeaderBand1.Enabled:=true; if Panel10.Visible=true then begin FRep.BandPemOrt.Enabled:=False; FRep.BandGrafPolOrt.Enabled:=false; FRep.BandPolOrt.Enabled:=false; FRep.BandAnova.Enabled:=true; end else begin FRep.BandAnova.Enabled:=false; if Panel8.Visible=true then begin ClearPolOrtReport; FRep.BandPolOrt.Enabled:=true; FRep.BandGrafPolOrt.Enabled:=true;
L 42 for i:=0 to mmSK.Lines.Count-1 do begin FRep.QRmmSK.Lines.Append(mmSK.Lines.Strings[i]); FRep.QRmmDB.Lines.Append(mmDB.Lines.Strings[i]); FRep.QRmmJK.Lines.Append(mmJK.Lines.Strings[i]); FRep.QRmmKT.Lines.Append(mmKT.Lines.Strings[i]); end; for i:=0 to mmFH.Lines.Count-1 do begin FRep.QRmmFH.Lines.Append(mmFH.Lines.Strings[i]); FRep.QRmmFT5.Lines.Append(mmFT5.Lines.Strings[i]); FRep.QRmmFT1.Lines.Append(mmFT1.Lines.Strings[i]); end; FRep.QRlabel57.Caption:=Label103.Caption; FRep.QRlabel58.Caption:=Label116.Caption; FRep.QRLabel68.Caption:=label118.Caption; end else begin FRep.BandPolOrt.Enabled:=false; FRep.BandGrafPolOrt.Enabled:=false; end; if Panel12.Visible=true then begin ClearPemOrtReport; FRep.BandPemOrt.Enabled:=true; Frep.QRLabel72.Caption:=Label124.Caption; for i:=0 to mmSK2.Lines.Count-1 do begin FRep.QRmmSK2.Lines.Append(mmSK2.Lines.Strings[i]); FRep.QRmmDB2.Lines.Append(mmDB2.Lines.Strings[i]); FRep.QRmmJK2.Lines.Append(mmJK2.Lines.Strings[i]); FRep.QRmmKT2.Lines.Append(mmKT2.Lines.Strings[i]); end; for i:=0 to mmFH2.Lines.Count-1 do begin FRep.QRmmFH2.Lines.Append(mmFH2.Lines.Strings[i]); FRep.QRmmFT52.Lines.Append(mmFT52.Lines.Strings[i]); FRep.QRmmFT12.Lines.Append(mmFT12.Lines.Strings[i]); end; FRep.QRlabel66.Caption:=Label113.Caption; FRep.QRlabel67.Caption:=Label114.Caption; end else begin FRep.BandPemOrt.Enabled:=false; end; end; FRep.QRLabel8.Caption:=label27.Caption;
L 43 FRep.QRLabel9.Caption:=label28.Caption; FRep.QRLabel10.Caption:=label29.Caption; FRep.QuickRep1.PreviewModal; FRep.QuickRep1.QRPrinter.Free; FRep.QuickRep1.QRPrinter:=nil; end; function TMDIChild.CekSelang(k:integer):string; var i:integer; selang,tamp:real; Cek1:boolean; begin //mengecek selang taraf faktor Cek1:=false; if k=1 then //jika k adalah faktor I begin //kita akan mencek selang listbox2 selang:=strtofloat(listbox2.Items.Strings[1])-strtofloat(listbox2.Items.Strings[0]);; for i:=1 to strtoint(combobox4.Text)-1 do begin tamp:=strtofloat(listbox2.Items.Strings[i])-strtofloat(listbox2.Items.Strings[i-1]); if tamp<>selang then Cek1:=true; end; if Cek1=true then Result:='tidak sama' else Result:='sama'; end else begin //jika k adalah faktor II selang:=strtofloat(listbox1.Items.Strings[1])-strtofloat(listbox1.Items.Strings[0]);; for i:=1 to strtoint(combobox2.Text)-1 do begin tamp:=strtofloat(listbox1.Items.Strings[i])-strtofloat(listbox1.Items.Strings[i-1]); if tamp<>selang then Cek1:=true; end; if Cek1=true then Result:='tidak sama' else Result:='sama'; end; end; procedure TMDIChild.CetakmmSK(F:string;a,p:integer); begin//mencetak Output di memo mmSK if F='A' then begin case a of 1:begin if p=1 then begin mmSK.Lines.Append('Ulangan'); mmSK.Lines.Append('Perlakuan'); mmSK.Lines.Append(#32+#32+#32+Label27.Caption);
L 44 end else begin mmSK2.Lines.Append('Ulangan'); mmSK2.Lines.Append('Perlakuan'); mmSK2.Lines.Append(#32+#32+#32+Label27.Caption); end; end; 2:begin if p=1 then begin mmSK.Lines.Append(#32+#32+#32+Label28.Caption); mmSK.Lines.Append(#32+#32+#32+Label29.Caption); end else begin mmSK2.Lines.Append(#32+#32+#32+Label28.Caption); mmSK2.Lines.Append(#32+#32+#32+Label29.Caption); end; end; 3:begin if p=1 then mmSK.Lines.Append(Label30.Caption) else mmSK2.Lines.Append(Label30.Caption); end; end; end else begin case a of 1:begin if p=1 then begin mmSK.Lines.Append('Ulangan'); mmSK.Lines.Append('Perlakuan'); mmSK.Lines.Append(#32+#32+#32+Label27.Caption); mmSK.Lines.Append(#32+#32+#32+Label28.Caption); end else begin mmSK2.Lines.Append('Ulangan'); mmSK2.Lines.Append('Perlakuan'); mmSK2.Lines.Append(#32+#32+#32+Label27.Caption); mmSK2.Lines.Append(#32+#32+#32+Label28.Caption); end; end; 2:begin if p=1 then mmSK.Lines.Append(#32+#32+#32+Label29.Caption) else mmSK2.Lines.Append(#32+#32+#32+Label29.Caption); end;
L 45 3:begin if p=1 then mmSK.Lines.Append(Label30.Caption) else mmSK2.Lines.Append(Label30.Caption); end; end; end; end; procedure TMDIChild.CetakmmDB(F:string;a,p:integer); begin//mencetak Output di memo mmDB if F='A' then begin case a of 1:begin if p=1 then begin mmDB.Lines.Append(Label32.caption); mmDB.Lines.Append(Label33.caption); mmDB.Lines.Append(Label34.Caption); end else begin mmDB2.Lines.Append(Label32.caption); mmDB2.Lines.Append(Label33.caption); mmDB2.Lines.Append(Label34.Caption); end; end; 2:begin if p=1 then begin mmDB.Lines.Append(Label35.Caption); mmDB.Lines.Append(Label36.Caption); end else begin mmDB2.Lines.Append(Label35.Caption); mmDB2.Lines.Append(Label36.Caption); end; end; 3:begin if p=1 then mmDB.Lines.Append(Label37.Caption) else mmDB2.Lines.Append(Label37.Caption); end; end; end else begin case a of 1:begin
L 46 if p=1 then begin mmDB.Lines.Append(Label32.caption); mmDB.Lines.Append(Label33.caption); mmDB.Lines.Append(Label34.Caption); mmDB.Lines.Append(Label35.Caption); end else begin mmDB2.Lines.Append(Label32.caption); mmDB2.Lines.Append(Label33.caption); mmDB2.Lines.Append(Label34.Caption); mmDB2.Lines.Append(Label35.Caption); end; end; 2:begin if p=1 then mmDB.Lines.Append(Label36.Caption) else mmDB2.Lines.Append(Label36.Caption); end; 3:begin if p=1 then mmDB.Lines.Append(Label37.Caption) else mmDB2.Lines.Append(Label37.Caption); end; end; end; end; procedure TMDIChild.CetakmmJK(F:string;a,p:integer); begin//mencetak Output di memo mmJK if F='A' then begin case a of 1:begin if p=1 then begin mmJK.Lines.Append(Label39.caption); mmJK.Lines.Append(Label40.caption); mmJK.Lines.Append(Label41.Caption); end else begin mmJK2.Lines.Append(Label39.caption); mmJK2.Lines.Append(Label40.caption); mmJK2.Lines.Append(Label41.Caption); end; end; 2:begin if p=1 then
L 47 begin mmJK.Lines.Append(Label42.Caption); mmJK.Lines.Append(Label43.Caption); end else begin mmJK2.Lines.Append(Label42.Caption); mmJK2.Lines.Append(Label43.Caption); end; end; 3:begin if p=1 then mmJK.Lines.Append(Label44.Caption) else mmJK2.Lines.Append(Label44.Caption); end; end; end else begin case a of 1:begin if p=1 then begin mmJK.Lines.Append(Label39.caption); mmJK.Lines.Append(Label40.caption); mmJK.Lines.Append(Label41.Caption); mmJK.Lines.Append(Label42.Caption); end else begin mmJK2.Lines.Append(Label39.caption); mmJK2.Lines.Append(Label40.caption); mmJK2.Lines.Append(Label41.Caption); mmJK2.Lines.Append(Label42.Caption); end; end; 2:begin if p=1 then mmJK.Lines.Append(Label43.Caption) else mmJK2.Lines.Append(Label43.Caption); end; 3:begin if p=1 then mmJK.Lines.Append(Label44.Caption) else mmJK2.Lines.Append(Label44.Caption); end; end; end; end; procedure TMDIChild.CetakmmFH(F:string;a,p:integer);
L 48 begin//mencetak Output di memo mmFH if F='A' then begin case a of 1:begin if p=1 then begin mmFH.Lines.Append(Label52.caption); mmFH.Lines.Append(Label53.caption); mmFH.Lines.Append(Label54.Caption); end else begin mmFH2.Lines.Append(Label52.caption); mmFH2.Lines.Append(Label53.caption); mmFH2.Lines.Append(Label54.Caption); end; end; 2:begin if p=1 then begin mmFH.Lines.Append(Label55.Caption); mmFH.Lines.Append(Label56.Caption); end else begin mmFH2.Lines.Append(Label55.Caption); mmFH2.Lines.Append(Label56.Caption); end; end; end; end else begin case a of 1:begin if p=1 then begin mmFH.Lines.Append(Label52.caption); mmFH.Lines.Append(Label53.caption); mmFH.Lines.Append(Label54.Caption); mmFH.Lines.Append(Label55.Caption); end else begin mmFH2.Lines.Append(Label52.caption); mmFH2.Lines.Append(Label53.caption); mmFH2.Lines.Append(Label54.Caption); mmFH2.Lines.Append(Label55.Caption); end; end;
L 49 2:begin if p=1 then mmFH.Lines.Append(Label56.Caption) else mmFH2.Lines.Append(Label56.Caption); end; end; end; end; procedure TMDIChild.CetakmmFT(F:string;a,p:integer); begin//mencetak Output di memo mmFT5 dan mmFT1 if F='A' then begin case a of 1:begin if p=1 then begin mmFT5.Lines.Append(Label57.caption); mmFT5.Lines.Append(Label58.caption); mmFT5.Lines.Append(Label59.Caption); mmFT1.Lines.Append(Label62.caption); mmFT1.Lines.Append(Label63.caption); mmFT1.Lines.Append(Label64.Caption); end else begin mmFT52.Lines.Append(Label57.caption); mmFT52.Lines.Append(Label58.caption); mmFT52.Lines.Append(Label59.Caption); mmFT12.Lines.Append(Label62.caption); mmFT12.Lines.Append(Label63.caption); mmFT12.Lines.Append(Label64.Caption); end; end; 2:begin if p=1 then begin mmFT5.Lines.Append(Label60.Caption); mmFT5.Lines.Append(Label61.Caption); mmFT1.Lines.Append(Label65.Caption); mmFT1.Lines.Append(Label66.Caption); end else begin mmFT52.Lines.Append(Label60.Caption); mmFT52.Lines.Append(Label61.Caption); mmFT12.Lines.Append(Label65.Caption); mmFT12.Lines.Append(Label66.Caption); end; end;
L 50 end; end else begin case a of 1:begin if p=1 then begin mmFT5.Lines.Append(Label57.caption); mmFT5.Lines.Append(Label58.caption); mmFT5.Lines.Append(Label59.Caption); mmFT5.Lines.Append(Label60.Caption); mmFT1.Lines.Append(Label62.caption); mmFT1.Lines.Append(Label63.caption); mmFT1.Lines.Append(Label64.Caption); mmFT1.Lines.Append(Label65.Caption); end else begin mmFT52.Lines.Append(Label57.caption); mmFT52.Lines.Append(Label58.caption); mmFT52.Lines.Append(Label59.Caption); mmFT52.Lines.Append(Label60.Caption); mmFT12.Lines.Append(Label62.caption); mmFT12.Lines.Append(Label63.caption); mmFT12.Lines.Append(Label64.Caption); mmFT12.Lines.Append(Label65.Caption); end; end; 2:begin if p=1 then begin mmFT5.Lines.Append(Label61.Caption); mmFT1.Lines.Append(Label66.Caption); end else begin mmFT52.Lines.Append(Label61.Caption); mmFT12.Lines.Append(Label66.Caption); end; end; end; end; end;
L 51 function TMDIChild.GetDBInt(F:integer):string; var count,i:integer; tamp:real; begin//mencari db interaksi masing2 derajat count:=0; if F=1 then begin for i:=1 to strtoint(combobox4.Text)-1 do count:=count+1; tamp:=((strtoint(combobox4.Text)-1)*(strtoint(combobox2.Text)-1))/count; Result:=floattostr(tamp); end else begin for i:=1 to strtoint(combobox2.Text)-1 do count:=count+1; tamp:=((strtoint(combobox4.Text)-1)*(strtoint(combobox2.Text)-1))/count; Result:=floattostr(tamp); end; end; procedure TMDIChild.SetKurva(a1,a2:string); var X:integer; Y:real; begin//Menset kurva permukaan respon chart.Series[0].Clear; FRep.QRChart.Chart.Series[0].Clear; if a2<>'tn' then begin for X:=1 to 500 do begin Y:=VarB+(varC*X)+power(X,2); Chart.Series[0].AddXY(X,Y,'',clRed); FRep.QRChart.Chart.Series[0].AddXY(X,Y,'',clBlack); end; end else if a1<>'tn' then begin for X:=1 to 500 do begin Y:=VarA+X; Chart.Series[0].AddXY(X,Y,'',clRed); FRep.QRChart.Chart.Series[0].AddXY(X,Y,'',clblack); end; end; end; procedure TMDIChild.PolinomOrtogonal(F:integer); var i,j,buff:integer; str1,cn,b1,b2:string; tamp,buff2:real; begin//menghitung polinomial ortogonal mmSK.Lines.Clear; mmDB.Lines.Clear; mmJK.Lines.Clear; mmKT.Lines.Clear; mmFH.Lines.Clear;
L 52 mmFT5.Lines.Clear; mmFT1.Lines.Clear; for i:=1 to stringgrid2.RowCount-1 do for j:=1 to stringgrid2.ColCount-1 do begin //mengisi data koefisien polort ke unit polort PolOrt.isikoef(i,j,strtofloat(stringgrid2.Cells[j,i])); end; if F=1 then //jika Polinomial ortogonalnya adalah faktor I begin CetakmmSK('A',1,1); CetakmmDB('A',1,1); CetakmmJK('A',1,1); CetakmmFH('A',1,1); CetakmmFT('A',1,1); //------------------if (strtoint(combobox4.Text)-1)<3 then begin for i:=1 to 2 do begin case i of 1:str1:='Linier'; 2:str1:='Kuadratik'; end; mmSK.Lines.Append(#32+#32+#32+#32+#32+#32+str1); mmDB.Lines.Append('1'); mmJK.Lines.Append(format('%10.4f',[HitJKFU(1,i)])); tamp:=HitJKFU(1,i)/HitKTG; cn:=CekNyata(tamp,GetFTable(5,1,dbGalat),GetFTable(1,1,dbGalat)); mmFH.Lines.Append(format('%6.2f',[tamp])+cn); mmFT5.Lines.Append(format('%6.2f',[GetFTable(5,1,dbGalat)])); mmFT1.Lines.Append(format('%6.2f',[GetFTable(1,1,dbGalat)])); //-----case i of 1:b1:=cn; 2:b2:=cn; end; end; SetKurva(b1,b2); end else begin for i:=1 to 3 do begin case i of 1:str1:='Linier'; 2:str1:='Kuadratik'; 3:str1:='Sisa'; end; mmSK.Lines.Append(#32+#32+#32+#32+#32+#32+str1); if i<3 then begin
L 53 mmDB.Lines.Append('1'); mmJK.Lines.Append(format('%10.4f',[HitJKFU(1,i)])); tamp:=HitJKFU(1,i)/HitKTG; cn:=CekNyata(tamp,GetFTable(5,1,dbGalat),GetFTable(1,1,dbGalat)); mmFH.Lines.Append(format('%6.2f',[tamp])+cn); mmFT5.Lines.Append(format('%6.2f',[GetFTable(5,1,dbGalat)])); mmFT1.Lines.Append(format('%6.2f',[GetFTable(1,1,dbGalat)])); end else begin buff:=dbPerlakuanA-2; mmDB.Lines.Append(inttostr(buff)); buff2:=HitJKA-HitJKFU(1,1)-HitJKFU(1,2); mmJK.Lines.Append(format('%10.4f',[buff2])); tamp:=(buff2/buff)/HitKTG; cn:=CekNyata(tamp,GetFTable(5,buff,dbGalat),GetFTable(1,buff,dbGalat)); mmFH.Lines.Append(format('%6.2f',[tamp])+cn); mmFT5.Lines.Append(format('%6.2f',[GetFTable(5,buff,dbGalat)])); mmFT1.Lines.Append(format('%6.2f',[GetFTable(1,buff,dbGalat)])); end; case i of 1:b1:=cn; 2:b2:=cn; end; end; SetKurva(b1,b2); end; CetakmmSK('A',2,1); CetakmmDB('A',2,1); CetakmmJK('A',2,1); CetakmmFH('A',2,1); CetakmmFT('A',2,1); if (strtoint(combobox4.Text)-1)<3 then begin for i:=1 to 2 do begin case i of 1:str1:='linier'; 2:str1:='kuadratik'; end; mmSK.Lines.Append(#32+#32+#32+#32+#32+#32+ combobox3.Text+str1+' x '+combobox1.Text); mmDB.Lines.Append(GetDBInt(1)); mmJK.Lines.Append(format('%10.4f',[HitJKFInteraksi(1,i)])); tamp:=(HitJKFInteraksi(1,i)/strtoint(GetDBInt(1)))/HitKTG; cn:=CekNyata(tamp,GetFTable(5,strtoint(GetDBInt(1)),dbGalat),GetFTable(1,strtoint(Get DBInt(1)),dbGalat)); mmFH.Lines.Append(format('%6.2f',[tamp])+cn); mmFT5.Lines.Append(format('%6.2f',[GetFTable(5,strtoint(GetDBInt(1)),dbGalat)]));
L 54 mmFT1.Lines.Append(format('%6.2f',[GetFTable(1,strtoint(GetDBInt(1)),dbGalat)])); end; end else begin for i:=1 to 3 do begin case i of 1:str1:='linier'; 2:str1:='kuadratik'; 3:str1:='sisa'; end; mmSK.Lines.Append(#32+#32+#32+#32+#32+#32+ combobox3.Text+str1+' x '+combobox1.Text); if i<3 then begin mmDB.Lines.Append(GetDBInt(1)); mmJK.Lines.Append(format('%10.4f',[HitJKFInteraksi(1,i)])); tamp:=(HitJKFInteraksi(1,i)/strtoint(GetDBInt(1)))/HitKTG; cn:=CekNyata(tamp,GetFTable(5,strtoint(GetDBInt(1)),dbGalat),GetFTable(1,strtoint(Get DBInt(1)),dbGalat)); mmFH.Lines.Append(format('%6.2f',[tamp])+cn); mmFT5.Lines.Append(format('%6.2f',[GetFTable(5,strtoint(GetDBInt(1)),dbGalat)])); mmFT1.Lines.Append(format('%6.2f',[GetFTable(1,strtoint(GetDBInt(1)),dbGalat)])); end else begin buff:=dbPerlakuanAxB-(strtoint(GetDBInt(1))*2); mmDB.Lines.Append(inttostr(buff)); buff2:=HitJKAxB-HitJKFInteraksi(1,1)-HitJKFInteraksi(1,2); mmJK.Lines.Append(format('%10.4f',[buff2])); tamp:=(buff2/buff)/HitKTG; cn:=CekNyata(tamp,GetFTable(5,buff,dbGalat),GetFTable(1,buff,dbGalat)); mmFH.Lines.Append(format('%6.2f',[tamp])+cn); mmFT5.Lines.Append(format('%6.2f',[GetFTable(5,buff,dbGalat)])); mmFT1.Lines.Append(format('%6.2f',[GetFTable(1,buff,dbGalat)])); end; end; end; CetakmmSK('A',3,1); CetakmmDB('A',3,1); CetakmmJK('A',3,1); end else //jika Polinomial ortogonalnya adalah faktor II begin CetakmmSK('B',1,1); CetakmmDB('B',1,1); CetakmmJK('B',1,1); CetakmmFH('B',1,1); CetakmmFT('B',1,1); if (strtoint(combobox2.Text)-1)<3 then begin for i:=1 to 2 do
L 55 begin case i of 1:str1:='Linier'; 2:str1:='Kuadratik'; end; mmSK.Lines.Append(#32+#32+#32+#32+#32+#32+str1); mmDB.Lines.Append('1'); mmJK.Lines.Append(format('%10.4f',[HitJKFU(2,i)])); tamp:=HitJKFU(2,i)/HitKTG; cn:=CekNyata(tamp,GetFTable(5,1,dbGalat),GetFTable(1,1,dbGalat)); mmFH.Lines.Append(format('%6.2f',[tamp])+cn); mmFT5.Lines.Append(format('%6.2f',[GetFTable(5,1,dbGalat)])); mmFT1.Lines.Append(format('%6.2f',[GetFTable(1,1,dbGalat)])); case i of 1:b1:=cn; 2:b2:=cn; end; end; SetKurva(b1,b2); end else begin for i:=1 to 3 do begin case i of 1:str1:='Linier'; 2:str1:='Kuadratik'; 3:str1:='Sisa'; end; mmSK.Lines.Append(#32+#32+#32+#32+#32+#32+str1); if i<3 then begin mmDB.Lines.Append('1'); mmJK.Lines.Append(format('%10.4f',[HitJKFU(2,i)])); tamp:=HitJKFU(2,i)/HitKTG; cn:=CekNyata(tamp,GetFTable(5,1,dbGalat),GetFTable(1,1,dbGalat)); mmFH.Lines.Append(format('%6.2f',[tamp])+cn); mmFT5.Lines.Append(format('%6.2f',[GetFTable(5,1,dbGalat)])); mmFT1.Lines.Append(format('%6.2f',[GetFTable(1,1,dbGalat)])); end else begin buff:=dbPerlakuanB-2; mmDB.Lines.Append(inttostr(buff)); buff2:=HitJKB-HitJKFU(2,1)-HitJKFU(2,2); mmJK.Lines.Append(format('%10.4f',[buff2])); tamp:=(buff2/buff)/HitKTG; cn:=CekNyata(tamp,GetFTable(5,buff,dbGalat),GetFTable(1,buff,dbGalat)); mmFH.Lines.Append(format('%6.2f',[tamp])+cn);
L 56 mmFT5.Lines.Append(format('%6.2f',[GetFTable(5,buff,dbGalat)])); mmFT1.Lines.Append(format('%6.2f',[GetFTable(1,buff,dbGalat)])); end; case i of 1:b1:=cn; 2:b2:=cn; end; end; SetKurva(b1,b2); end; CetakmmSK('B',2,1); CetakmmDB('B',2,1); CetakmmJK('B',2,1); CetakmmFH('B',2,1); CetakmmFT('B',2,1); if (strtoint(combobox2.Text)-1)<3 then begin for i:=1 to 2 do begin case i of 1:str1:='linier'; 2:str1:='kuadratik'; end; mmSK.Lines.Append(#32+#32+#32+#32+#32+#32+ combobox3.Text+' x '+combobox1.Text+str1); mmDB.Lines.Append(GetDBInt(2)); mmJK.Lines.Append(format('%10.4f',[HitJKFInteraksi(2,i)])); tamp:=(HitJKFInteraksi(2,i)/strtoint(GetDBInt(2)))/HitKTG; cn:=CekNyata(tamp,GetFTable(5,strtoint(GetDBInt(2)),dbGalat),GetFTable(1,strtoint(Get DBInt(2)),dbGalat)); mmFH.Lines.Append(format('%6.2f',[tamp])+cn); mmFT5.Lines.Append(format('%6.2f',[GetFTable(5,strtoint(GetDBInt(2)),dbGalat)])); mmFT1.Lines.Append(format('%6.2f',[GetFTable(1,strtoint(GetDBInt(2)),dbGalat)])); end; end else begin for i:=1 to 3 do begin case i of 1:str1:='linier'; 2:str1:='kuadratik'; 3:str1:='sisa'; end; mmSK.Lines.Append(#32+#32+#32+#32+#32+#32+ combobox3.Text+' x '+combobox1.Text+str1); if i<3 then begin
L 57 mmDB.Lines.Append(GetDBInt(2)); mmJK.Lines.Append(format('%10.4f',[HitJKFInteraksi(2,i)])); tamp:=(HitJKFInteraksi(2,i)/strtoint(GetDBInt(2)))/HitKTG; cn:=CekNyata(tamp,GetFTable(5,strtoint(GetDBInt(2)),dbGalat),GetFTable(1,strtoint(Get DBInt(2)),dbGalat)); mmFH.Lines.Append(format('%6.2f',[tamp])+cn); mmFT5.Lines.Append(format('%6.2f',[GetFTable(5,strtoint(GetDBInt(2)),dbGalat)])); mmFT1.Lines.Append(format('%6.2f',[GetFTable(1,strtoint(GetDBInt(2)),dbGalat)])); end else begin buff:=dbPerlakuanAxB-(strtoint(GetDBInt(2))*2); mmDB.Lines.Append(inttostr(buff)); buff2:=HitJKAxB-HitJKFInteraksi(2,1)-HitJKFInteraksi(2,2); mmJK.Lines.Append(format('%10.4f',[buff2])); tamp:=(buff2/buff)/HitKTG; cn:=CekNyata(tamp,GetFTable(5,buff,dbGalat),GetFTable(1,buff,dbGalat)); mmFH.Lines.Append(format('%6.2f',[tamp])+cn); mmFT5.Lines.Append(format('%6.2f',[GetFTable(5,buff,dbGalat)])); mmFT1.Lines.Append(format('%6.2f',[GetFTable(1,buff,dbGalat)])); end; end; end; CetakmmSK('B',3,1); CetakmmDB('B',3,1); CetakmmJK('B',3,1); end; CetakmmKT(1); Label102.Caption:=label31.Caption; Label103.Caption:=Label38.Caption; Label116.Caption:=Label45.Caption; Label118.Caption:=label69.Caption; end; procedure TMDIChild.BitBtn4Click(Sender: TObject); var i,j:integer; begin Count1:=1; label100.Caption:='Masukkan Pembanding ke-1 :'; bitbtn5.Enabled:=false; ClearPolOrtReport; LabelPol.Visible:=true; if FaktorI.Checked then //cek jika edit6 adalah faktorI begin if tarafI.Checked then begin WAwal:=time; CekPolOrt:=true;
L 58 Panel10.Hide; FRep.BandAnova.Enabled:=false; Panel8.Show; Panel11.Show; Groupbox6.Visible:=false; Label99.Caption:='POLINOMIAL ORTOGONAL'; LabelPol.Caption:='Polinomial Ortogonal dengan selang '+CekSelang(1); Stringgrid2.Enabled:=true; StringGrid2.ColCount:=strtoint(combobox4.Text)+1; StringGrid2.RowCount:=strtoint(combobox4.Text); StringGrid2.FixedCols:=1; StringGrid2.FixedRows:=1; StringGrid2.Cells[0,1]:=' Linier'; StringGrid2.Cells[0,2]:=' Kuadratik'; StringGrid2.Cells[0,3]:=' Kubik'; StringGrid2.Cells[0,4]:=' Kuartik'; StringGrid2.Cells[0,5]:=' Kuintik'; for i:=1 to strtoint(combobox4.Text) do StringGrid2.Cells[i,0]:=' '+combobox3.Text+inttostr(i); if leftstr(CekSelang(1),1)='s' then //jika selangnya sama maka masukkan begin //koefisien polortogonal dari unit Koefisien for i:=1 to strtoint(combobox4.Text) do for j:=1 to strtoint(combobox4.Text)-1 do Stringgrid2.Cells[i,j]:=inttostr(GetKoef(strtoint(combobox4.Text),j,i)); end; if leftstr(CekSelang(1),1)='t' then //jika selangnya tidak sama maka masukkan begin //koefisien polortogonal dari unit Koefisien SetT(strtoint(combobox4.Text)); for i:=1 to strtoint(combobox4.Text) do SetX(i,strtofloat(Listbox2.Items.Strings[i-1])); SetTamp; for i:=1 to strtoint(combobox4.Text) do for j:=1 to strtoint(combobox4.Text)-1 do Stringgrid2.Cells[i,j]:=floattostr(GetKoefTS(j,i)); end; PolinomOrtogonal(1); WAkhir:=time; HitWaktu; end else begin Groupbox6.Visible:=true; Listbox3.Clear; listbox5.Clear; listbox6.Clear; listbox4.Clear; //CekPolOrt:=false; Label99.Caption:='PEMBANDING ORTOGONAL'; LabelPol.Caption:='Perbandingan antar grup perlakuan'; Listbox3.Clear;
L 59 for i:=1 to strtoint(Combobox4.Text) do begin Listbox3.Items.Append(Combobox3.Text+inttostr(i)); DataVar[i]:=Combobox3.Text+inttostr(i); end; JumlahVar:=strtoint(Combobox4.Text); ClearSG2(1); end; end; if FaktorII.Checked then //cek jika edit6 adalah faktorII begin if tarafII.Checked then begin WAwal:=time; CekPolOrt:=true; Panel10.Hide; FRep.BandAnova.Enabled:=false; Panel8.Show; Panel11.Show; Groupbox6.Visible:=false; Label99.Caption:='POLINOMIAL ORTOGONAL'; LabelPol.Caption:='Polinomial Ortogonal dengan selang '+CekSelang(2); Stringgrid2.Enabled:=true; StringGrid2.ColCount:=strtoint(combobox2.Text)+1; StringGrid2.RowCount:=strtoint(combobox2.Text); StringGrid2.FixedCols:=1; StringGrid2.FixedRows:=1; StringGrid2.Cells[0,1]:=' Linier'; StringGrid2.Cells[0,2]:=' Kuadratik'; StringGrid2.Cells[0,3]:=' Kubik'; StringGrid2.Cells[0,4]:=' Kuartik'; StringGrid2.Cells[0,5]:=' Kuintik'; for i:=1 to strtoint(combobox2.Text) do StringGrid2.Cells[i,0]:=' '+combobox1.Text+inttostr(i); if leftstr(CekSelang(2),1)='s' then //-->jika selangnya sama maka masukkan begin //koefisien polortogonal dari unit Koefisien for i:=1 to strtoint(combobox2.Text) do for j:=1 to strtoint(combobox2.Text)-1 do Stringgrid2.Cells[i,j]:=inttostr(GetKoef(strtoint(combobox2.Text),j,i)); end; if leftstr(CekSelang(2),1)='t' then //-->jika selangnya tidak sama maka masukkan begin //koefisien polortogonal dari unit Koefisien SetT(strtoint(combobox2.Text));//--> menset T for i:=1 to strtoint(combobox2.Text) do SetX(i,strtofloat(Listbox1.Items.Strings[i-1])); SetTamp; for i:=1 to strtoint(combobox2.Text) do for j:=1 to strtoint(combobox2.Text)-1 do
L 60 Stringgrid2.Cells[i,j]:=floattostr(GetKoefTS(j,i)); end; PolinomOrtogonal(2); WAkhir:=time; HitWaktu; end else begin Groupbox6.Visible:=true; Listbox3.Clear; listbox5.Clear; listbox6.Clear; listbox4.Clear; //CekPolOrt:=false; Label99.Caption:='PEMBANDING ORTOGONAL'; LabelPol.Caption:='Perbandingan antar grup perlakuan'; Listbox3.Clear; for i:=1 to strtoint(Combobox2.Text) do begin Listbox3.Items.Append(Combobox1.Text+inttostr(i)); DataVar[i]:=Combobox1.Text+inttostr(i); end; JumlahVar:=strtoint(Combobox2.Text); ClearSG2(1); end; end; end; procedure TMDIChild.CetakmmKT(p:integer); var i:integer; tamp:real; begin//mencetak Kuadrat tengah ke mmKT if p=1 then begin for i:=0 to mmJK.Lines.Count-1 do begin tamp:=strtofloat(mmJK.Lines.Strings[i])/strtofloat(mmDB.Lines.Strings[i]); mmKT.Lines.Append(format('%8.4f',[tamp])); end; end else begin for i:=0 to mmJK2.Lines.Count-1 do begin tamp:=strtofloat(mmJK2.Lines.Strings[i])/strtofloat(mmDB2.Lines.Strings[i]); mmKT2.Lines.Append(format('%8.4f',[tamp])); end; end; end; procedure TMDIChild.FaktorIClick(Sender: TObject); begin
L 61 Labelpol.Visible:=false; if FaktorI.Checked then begin StringGrid2.ColCount:=1; StringGrid2.RowCount:=1; StringGrid2.FixedCols:=0; StringGrid2.FixedRows:=0; if JenisI.Checked then ClearSG2(1); end; end; procedure TMDIChild.FaktorIIClick(Sender: TObject); begin Labelpol.Visible:=false; if FaktorII.Checked then begin StringGrid2.ColCount:=1; StringGrid2.RowCount:=1; StringGrid2.FixedCols:=0; StringGrid2.FixedRows:=0; if JenisII.Checked then ClearSG2(1); end; end; procedure TMDIChild.Button1Click(Sender: TObject); begin Panel5.Hide; end; procedure TMDIChild.Book1Click(Sender: TObject; nRow, nCol: Integer); begin Book1.ShowEditBar:=true; Book1.Refresh; end; procedure TMDIChild.ListBox3Click(Sender: TObject); begin GugusPertama.Enabled:=true; GugusKedua.Enabled:=true; Button12.Enabled:=false; Button15.Enabled:=false; Button13.Enabled:=false; listbox5.ClearSelection; listbox6.ClearSelection; listbox4.ClearSelection; end; procedure TMDIChild.GugusPertamaClick(Sender: TObject); begin listbox3.CopySelection(listbox5); listbox3.DeleteSelected; GugusPertama.Enabled:=false;
L 62 GugusKedua.Enabled:=false; Button12.Enabled:=false; Button15.Enabled:=false; Button13.Enabled:=false; listbox5.ClearSelection; listbox6.ClearSelection; listbox4.ClearSelection; if (listbox5.Items.Count<>0) and (listbox6.Items.Count<>0) then begin button14.Enabled:=true; end; end; procedure TMDIChild.GugusKeduaClick(Sender: TObject); begin listbox3.CopySelection(listbox6); listbox3.DeleteSelected; GugusPertama.Enabled:=false; GugusKedua.Enabled:=false; Button12.Enabled:=false; Button15.Enabled:=false; Button13.Enabled:=false; listbox5.ClearSelection; listbox6.ClearSelection; listbox4.ClearSelection; if (listbox5.Items.Count<>0) and (listbox6.Items.Count<>0) then begin button14.Enabled:=true; end; end; procedure TMDIChild.ClearSG2(i:integer); var b,k:integer; begin//menghapus cell-cell stringgrid2 case i of 1:begin Stringgrid2.Enabled:=true; for b:=1 to 10 do StringGrid2.Cells[0,b]:=''; for k:=1 to 10 do StringGrid2.Cells[k,0]:=''; for b:=1 to 10 do for k:=1 to 10 do begin StringGrid2.Cells[k,b]:='0'; end; Stringgrid2.ColCount:=2; Stringgrid2.RowCount:=2; StringGrid2.FixedCols:=1;
L 63 StringGrid2.FixedRows:=1; end; 2:begin StringGrid2.ColCount:=strtoint(combobox4.Text)+1; StringGrid2.RowCount:=strtoint(combobox4.Text); for i:=1 to strtoint(combobox4.Text) do StringGrid2.Cells[i,0]:=' '+combobox3.Text+inttostr(i); end; 3:begin StringGrid2.ColCount:=strtoint(combobox2.Text)+1; StringGrid2.RowCount:=strtoint(combobox2.Text); for i:=1 to strtoint(combobox2.Text) do StringGrid2.Cells[i,0]:=' '+combobox1.Text+inttostr(i); end; end; end; procedure TMDIChild.GetKoefPO(a:integer); var t1:string; i,JG1,JG2:integer; begin//Mencari koefisien Pembanding Ortogonal (utk) t1:=''; JG1:=listbox5.Items.Count; JG2:=listbox6.Items.Count; for i:=1 to JG1 do begin t1:=listbox5.Items.Strings[i-1]; t1:=RightStr(t1,1); stringgrid2.Cells[strtoint(t1),a]:=inttostr(JG2); end; for i:=1 to JG2 do begin t1:=listbox6.Items.Strings[i-1]; t1:=RightStr(t1,1); stringgrid2.Cells[strtoint(t1),a]:='-'+inttostr(JG1); end; end; procedure TMDIChild.Button14Click(Sender: TObject); var i:integer; tamp1,tamp2:string; begin tamp1:=''; tamp2:=''; for i:=1 to listbox5.Items.Count do begin if i=1 then tamp1:=listbox5.Items.Strings[i-1] else tamp1:=tamp1+','+listbox5.Items.Strings[i-1]; end;
L 64 for i:=1 to listbox6.Items.Count do begin if i=1 then tamp2:=listbox6.Items.Strings[i-1] else tamp2:=tamp2+','+listbox6.Items.Strings[i-1]; end; Listbox4.Items.Append('('+tamp1+' vs '+tamp2+')'); //--------> Masukkan koefisien PolOrt untuk pembandingan kuantitatif if FaktorI.Checked then begin if JenisI.Checked then begin ClearSG2(2); GetKoefPO(count1); count1:=count1+1; Label100.Caption:='Masukkan Pembanding ke-'+inttostr(count1)+' :'; jum:=strtoint(combobox4.Text); end; end else begin if JenisII.Checked then begin ClearSG2(3); GetKoefPO(count1); count1:=count1+1; Label100.Caption:='Masukkan Pembanding ke-'+inttostr(count1)+' :'; jum:=strtoint(combobox2.Text); end; end; if Listbox4.Count<jum-1 then begin Listbox3.Clear; for i:=1 to JumlahVar do begin Listbox3.Items.Append(DataVar[i]); end; end else begin Listbox3.Clear; label100.Caption:=''; BitBtn5.Enabled:=true; end; GugusPertama.Enabled:=false; GugusKedua.Enabled:=false; Listbox5.Clear; Listbox6.Clear;
L 65 button12.Enabled:=false; button15.Enabled:=false; Button13.Enabled:=false; listbox4.ClearSelection; Button14.Enabled:=false; end; procedure TMDIChild.Button13Click(Sender: TObject); var i,j:integer; begin for i:=listbox4.ItemIndex+1 to stringgrid2.RowCount do for j:=1 to stringgrid2.ColCount do begin if i<>stringgrid2.RowCount then begin stringgrid2.Cells[j,i]:=stringgrid2.Cells[j,i+1]; end else begin stringgrid2.Cells[j,i]:='0'; end; end; Listbox4.DeleteSelected; Button13.Enabled:=false; if Listbox4.Count<jum-1 then begin Bitbtn5.Enabled:=false; Listbox3.Clear; for i:=1 to JumlahVar do begin Listbox3.Items.Append(DataVar[i]); end; end; listbox5.Items.Clear; listbox6.Items.Clear; Count1:=Count1-1; Label100.Caption:='Masukkan Pembanding ke-'+inttostr(count1)+' :'; end; procedure TMDIChild.Button12Click(Sender: TObject); begin listbox5.CopySelection(listbox3); Listbox5.DeleteSelected; Button12.Enabled:=false; end; procedure TMDIChild.Button15Click(Sender: TObject); begin listbox6.CopySelection(listbox3); Listbox6.DeleteSelected; Button15.Enabled:=false;
L 66 end; procedure TMDIChild.ListBox5Click(Sender: TObject); begin Button12.Enabled:=true; Button15.Enabled:=false; Button13.Enabled:=false; listbox6.ClearSelection; listbox4.ClearSelection; end; procedure TMDIChild.ListBox6Click(Sender: TObject); begin Button15.Enabled:=true; Button12.Enabled:=false; Button13.Enabled:=false; listbox5.ClearSelection; listbox4.ClearSelection; end; procedure TMDIChild.ListBox4Click(Sender: TObject); begin Button13.Enabled:=true; Button12.Enabled:=false; Button15.Enabled:=false; end; function TMDIChild.CekKoefPO:boolean; var i,j:integer; tamp,tamp2:integer; cek1:boolean; begin//Mengecek Apakah Koefisien Pembandingan kualitatif valid cek1:=true; tamp2:=0; for i:=1 to stringgrid2.RowCount-1 do begin tamp:=0; for j:=1 to stringgrid2.ColCount do begin tamp:=tamp+ (strtoint(stringgrid2.Cells[j,i])*strtoint(stringgrid2.Cells[j,i+1])); end; tamp2:=tamp2+tamp; end; if tamp2<>0 then cek1:=false; tamp2:=0; for j:=1 to stringgrid2.ColCount do begin tamp:=strtoint(stringgrid2.Cells[j,1]); for i:=2 to stringgrid2.RowCount do begin tamp:=tamp+ tamp*strtoint(stringgrid2.Cells[j,i]) end; tamp2:=tamp2+tamp;
L 67 end; if tamp2<>0 then cek1:=false; Result:=cek1; end; procedure TMDIChild.PembandingKuantitatif(F:integer); var i,j:integer; tamp:real; begin//pembanding kuantitatif WAwal:=time; mmSK2.Lines.Clear; mmDB2.Lines.Clear; mmJK2.Lines.Clear; mmKT2.Lines.Clear; mmFH2.Lines.Clear; mmFT52.Lines.Clear; mmFT12.Lines.Clear; for i:=1 to stringgrid2.RowCount-1 do for j:=1 to stringgrid2.ColCount-1 do begin //mengisi data koefisien polort ke unit polort PolOrt.isikoef(i,j,strtofloat(stringgrid2.Cells[j,i])); end; if F=1 then begin CetakmmSK('A',1,2); CetakmmDB('A',1,2); CetakmmJK('A',1,2); CetakmmFH('A',1,2); CetakmmFT('A',1,2); for i:=1 to strtoint(combobox4.Text)-1 do begin mmSK2.Lines.Append(#32+#32+#32+#32+#32+listbox4.Items.Strings[i-1]); mmDB2.Lines.Append('1'); mmJK2.Lines.Append(format('%10.4f',[HitJKFU(1,i)])); tamp:=HitJKFU(1,i)/HitKTG; mmFH2.Lines.Append(format('%6.2f',[tamp])+CekNyata(tamp,GetFTable(5,1,dbGalat),Ge tFTable(1,1,dbGalat))); mmFT52.Lines.Append(format('%6.2f',[GetFTable(5,1,dbGalat)])); mmFT12.Lines.Append(format('%6.2f',[GetFTable(1,1,dbGalat)])); end; CetakmmSK('A',2,2); CetakmmDB('A',2,2); CetakmmJK('A',2,2); CetakmmFH('A',2,2); CetakmmFT('A',2,2); for i:=1 to strtoint(combobox4.Text)-1 do begin mmSK2.Lines.Append(#32+#32+#32+#32+#32+listbox4.Items.Strings[i-1]+' x '+combobox1.Text); mmDB2.Lines.Append(GetDBInt(1)); mmJK2.Lines.Append(format('%10.4f',[HitJKFInteraksi(1,i)])); tamp:=(HitJKFInteraksi(1,i)/strtoint(GetDBInt(1)))/HitKTG; mmFH2.Lines.Append(format('%6.2f',[tamp])+CekNyata(tamp,GetFTable(5,strtoint(GetD BInt(1)),dbGalat),GetFTable(1,strtoint(GetDBInt(1)),dbGalat))); mmFT52.Lines.Append(format('%6.2f',[GetFTable(5,strtoint(GetDBInt(1)),dbGalat)])); mmFT12.Lines.Append(format('%6.2f',[GetFTable(1,strtoint(GetDBInt(1)),dbGalat)])); end; CetakmmSK('A',3,2); CetakmmDB('A',3,2); CetakmmJK('A',3,2);
L 68 end else begin WAwal:=time; CetakmmSK('B',1,2); CetakmmDB('B',1,2); CetakmmJK('B',1,2); CetakmmFH('B',1,2); CetakmmFT('B',1,2); for i:=1 to strtoint(combobox2.Text)-1 do begin mmSK2.Lines.Append(#32+#32+#32+#32+#32+listbox4.Items.Strings[i-1]); mmDB2.Lines.Append('1'); mmJK2.Lines.Append(format('%10.4f',[HitJKFU(2,i)])); tamp:=HitJKFU(2,i)/HitKTG; mmFH2.Lines.Append(format('%6.2f',[tamp])+CekNyata(tamp,GetFTable(5,1,dbGalat),Ge tFTable(1,1,dbGalat))); mmFT52.Lines.Append(format('%6.2f',[GetFTable(5,1,dbGalat)])); mmFT12.Lines.Append(format('%6.2f',[GetFTable(1,1,dbGalat)])); end; CetakmmSK('B',2,2); CetakmmDB('B',2,2); CetakmmJK('B',2,2); CetakmmFH('B',2,2); CetakmmFT('B',2,2); for i:=1 to strtoint(combobox2.Text)-1 do begin mmSK2.Lines.Append(#32+#32+#32+#32+#32+ combobox3.Text+' x '+listbox4.Items.Strings[i-1]); mmDB2.Lines.Append(GetDBInt(2)); mmJK2.Lines.Append(format('%10.4f',[HitJKFInteraksi(2,i)])); tamp:=(HitJKFInteraksi(2,i)/strtoint(GetDBInt(2)))/HitKTG; mmFH2.Lines.Append(format('%6.2f',[tamp])+CekNyata(tamp,GetFTable(5,strtoint(GetD BInt(2)),dbGalat),GetFTable(1,strtoint(GetDBInt(2)),dbGalat))); mmFT52.Lines.Append(format('%6.2f',[GetFTable(5,strtoint(GetDBInt(2)),dbGalat)])); mmFT12.Lines.Append(format('%6.2f',[GetFTable(1,strtoint(GetDBInt(2)),dbGalat)])); end; CetakmmSK('B',3,2); CetakmmDB('B',3,2); CetakmmJK('B',3,2); end; CetakmmKT(2); label112.Caption:=label31.caption; label113.Caption:=label38.caption; label114.Caption:=label45.caption; label124.Caption:=label69.Caption; WAkhir:=time; HitWaktu; end; procedure TMDIChild.BitBtn5Click(Sender: TObject); begin//Menghitung analisis ragam untuk pembandingan kualitatif if CekKoefPO=false then begin MessageDlg('Terdapat Pembandingan yang tidak Valid !',mtWarning, [mbOK], 0) end else
L 69 begin panel10.Hide; panel12.Show; CekPemOrt:=true; if faktorI.Checked then PembandingKuantitatif(1) else PembandingKuantitatif(2); bitbtn5.Enabled:=false; end; end; procedure TMDIChild.PrintOutputBtnClick(Sender: TObject); var i:integer; begin FRep.QuickRep1.Prepare; FRep.PageHeaderBand1.Enabled:=true; if Panel10.Visible=true then begin FRep.BandPemOrt.Enabled:=False; FRep.BandGrafPolOrt.Enabled:=false; FRep.BandPolOrt.Enabled:=false; FRep.BandAnova.Enabled:=true; end else begin FRep.BandAnova.Enabled:=false; if Panel8.Visible=true then begin ClearPolOrtReport; FRep.BandPolOrt.Enabled:=true; FRep.BandGrafPolOrt.Enabled:=true; for i:=0 to mmSK.Lines.Count-1 do begin FRep.QRmmSK.Lines.Append(mmSK.Lines.Strings[i]); FRep.QRmmDB.Lines.Append(mmDB.Lines.Strings[i]); FRep.QRmmJK.Lines.Append(mmJK.Lines.Strings[i]); FRep.QRmmKT.Lines.Append(mmKT.Lines.Strings[i]); end; for i:=0 to mmFH.Lines.Count-1 do begin FRep.QRmmFH.Lines.Append(mmFH.Lines.Strings[i]); FRep.QRmmFT5.Lines.Append(mmFT5.Lines.Strings[i]); FRep.QRmmFT1.Lines.Append(mmFT1.Lines.Strings[i]); end; FRep.QRlabel57.Caption:=Label103.Caption; FRep.QRlabel58.Caption:=Label116.Caption; FRep.QRLabel68.Caption:=label118.Caption; end else begin
L 70 FRep.BandPolOrt.Enabled:=false; FRep.BandGrafPolOrt.Enabled:=false; end; if Panel12.Visible=true then begin ClearPemOrtReport; FRep.BandPemOrt.Enabled:=true; Frep.QRLabel72.Caption:=Label124.Caption; for i:=0 to mmSK2.Lines.Count-1 do begin FRep.QRmmSK2.Lines.Append(mmSK2.Lines.Strings[i]); FRep.QRmmDB2.Lines.Append(mmDB2.Lines.Strings[i]); FRep.QRmmJK2.Lines.Append(mmJK2.Lines.Strings[i]); FRep.QRmmKT2.Lines.Append(mmKT2.Lines.Strings[i]); end; for i:=0 to mmFH2.Lines.Count-1 do begin FRep.QRmmFH2.Lines.Append(mmFH2.Lines.Strings[i]); FRep.QRmmFT52.Lines.Append(mmFT52.Lines.Strings[i]); FRep.QRmmFT12.Lines.Append(mmFT12.Lines.Strings[i]); end; FRep.QRlabel66.Caption:=Label113.Caption; FRep.QRlabel67.Caption:=Label114.Caption; end else begin FRep.BandPemOrt.Enabled:=false; end; end; FRep.QRLabel8.Caption:=label27.Caption; FRep.QRLabel9.Caption:=label28.Caption; FRep.QRLabel10.Caption:=label29.Caption; FRep.QuickRep1.Print; end; procedure TMDIChild.CetakDataBtnClick(Sender: TObject); var b,k,c:integer; begin Book2.SheetName[1]:=Book1.SheetName[1]; Book2.MaxCol:=Book1.MaxCol+1; Book2.MaxRow:=Book1.MaxRow+1; for k:=1 to strtoint(combobox6.Text) do begin Book2.EntryRC[1,k+1]:=' Ulangan '+inttostr(k)+' '; Book2.ColWidth[k+1]:=3000; end; c:=2; for b:=1 to strtoint(combobox4.Text) do for k:=1 to strtoint(combobox2.Text) do
L 71 begin Book2.EntryRC[c,1]:=combobox3.Text+inttostr(b)+combobox1.Text+inttostr(k); inc(c); end; for b:=1 to Book1.MaxRow do for k:=1 to Book1.MaxCol do begin book2.EntryRC[b+1,k+1]:=book1.EntryRC[b,k]; end; Book2.FilePrint(True); end; end. Unit RAK; interface uses SysUtils,QDialogs,Math; procedure isidata(bar,kol,r1,a1,b1:integer;c:real); procedure setbarkol(b,k:integer); function HitFK:real; function HitJKT:real; function HitJKK:real; function HitJKP:real; function HitJKG:real; function dbKelompok:integer; function dbPerlakuan:integer; function dbPerlakuanA:integer; function dbPerlakuanB:integer; function dbPerlakuanAxB:integer; function dbGalat:integer; function dbTotal:integer; function HitJKA:real; function HitJKB:real; function HitJKAxB:real; function HitKTK:real; function HitKTP:real; function HitKTA:real; function HitKTB:real; function HitKTAxB:real; function HitKTG:real; function HitFA:real; function HitFB:real; function HitFAxB:real; function HitFKelompok:real; function HitFPerlakuan:real; function KoefKeragaman:real; function CekNyata(a,b,c:real):string; implementation
L 72 var baris,kolom,r,a,b:integer; data:array [1..110,1..10] of real; dec:integer; procedure isidata(bar,kol,r1,a1,b1:integer;c:real); begin //isi data dari stringgrid1 ke array data[bar][kol]:=c; r:=r1; a:=a1; b:=b1; end; procedure setbarkol(b,k:integer); begin // set baris dan kolom baris:=b; kolom:=k; dec:=-3; end; function HitFK:real; var i,j:integer; count:real; begin //menghitung Faktor Koreksi count:=0; for i:=1 to baris do for j:=1 to kolom do begin count:=count + data[i][j]; end; count:=(sqr(count))/(r*a*b); result:=Roundto((count),dec); end; function HitJKT:real; var i,j:integer; count:real; begin //Menghitung JKT count:=0; for i:=1 to baris do for j:=1 to kolom do begin count:=count+sqr(data[i][j]); end; count:=count-HitFK; result:=Roundto((count),dec); end; function HitJKK:real; var i,j:integer; count,hit:real; begin //Menghitung JKK hit:=0; for j:=1 to kolom do begin
L 73 count:=0; for i:=1 to baris do begin count:=count+data[i][j]; end; hit:=hit+((sqr(count))/(a*b)); end; hit:=hit-HitFK; result:=Roundto((hit),dec); end; function HitJKP:real; var i,j:integer; count,hit:real; begin //Menghitung JKP hit:=0; for i:=1 to baris do begin count:=0; for j:=1 to kolom do begin count:=count+data[i][j]; end; hit:=hit+((sqr(count))/r); end; hit:=hit-HitFK; result:=Roundto((hit),dec); end; function HitJKG:real; begin //Menghitung JKG result:=Roundto((HitJKT-HitJKK-HitJKP),dec); end; function dbKelompok:integer; begin //Mencari db Kelompok result:=r-1; end; function dbPerlakuan:integer; begin //Mencari db Perlakuan result:=(a*b)-1; end; function dbGalat:integer; begin //Mencari db Galat result:=(r-1)*((a*b)-1); end; function dbTotal:integer; begin //Mencari db Total result:=(r*a*b)-1; end;
L 74 function dbPerlakuanA:integer; begin //Mencari db Perlakuan A result:=a-1; end; function dbPerlakuanB:integer; begin // Mencari db Perlakuan B result:=b-1; end; function dbPerlakuanAxB:integer; begin // Mencari db Perlakuan AxB result:=(a-1)*(b-1); end; function HitJKA:real; var i,j,k:integer; count,hit:real; begin //Mencari Pengaruh Utama Faktor I hit:=0; for k:=0 to a-1 do begin count:=0; for i:=((k*b)+1) to ((k*b)+b) do begin for j:=1 to kolom do begin count:=count+data[i][j]; end; end; hit:=hit+((sqr(count))/(r*b)); end; hit:=hit-HitFK; result:=Roundto((hit),dec); end; function HitJKB:real; var i,j,k:integer; count,hit:real; begin //Mencari Pengaruh Utama Faktor II hit:=0; for k:=0 to b-1 do begin count:=0; for i:=0 to a-1 do begin for j:=1 to kolom do begin count:=count+data[(i*b)+1+k][j]; end; end; hit:=hit+((sqr(count))/(r*a)); end;
L 75 hit:=hit-HitFK; result:=Roundto((hit),dec); end; function HitJKAxB:real; begin //Mencari Pengaruh Interaksi Faktor I & II result:=Roundto((HitJKP-HitJKA-HitJKB),dec); end; function HitKTA:real; begin //Menghitung KTA result:=Roundto((HitJKA/(a-1)),dec); end; function HitKTB:real; begin //Menghitung KTB result:=Roundto((HitJKB/(b-1)),dec); end; function HitKTAxB:real; begin //Menghitung KTAxB result:=Roundto((HitJKAxB/((a-1)*(b-1))),dec); end; function HitKTG:real; begin //Menghitung KTAxB result:=Roundto((HitJKG/((r-1)*((a*b)-1))),dec); end; function HitKTK:real; begin //Menghitung KTK result:=Roundto((HitJKK/dbKelompok),dec); end; function HitKTP:real; begin //Menghitung KTP result:=Roundto((HitJKP/dbPerlakuan),dec); end; function HitFA:real; begin //Menghitung F(A) result:=Roundto((HitKTA/HitKTG),-2); end; function HitFB:real; begin //Menghitung F(B) result:=Roundto((HitKTB/HitKTG),-2); end; function HitFAxB:real; begin //Menghitung F(AxB) result:=Roundto((HitKTAxB/HitKTG),-2); end; function HitFKelompok:real; begin //menghitung F Kelompok result:=Roundto((hitKTK/HitKTG),-2); end;
L 76 function HitFPerlakuan:real; begin //menghitung F Perlakuan result:=Roundto((hitKTP/HitKTG),-2); end; function KoefKeragaman:real; var i,j:integer; tamp:real; begin//menghitung koefisien keragaman tamp:=0; for i:=1 to baris do begin for j:=1 to kolom do begin tamp:=tamp+data[i][j]; end; end; tamp:=tamp/(r*a*b); result:=Roundto((sqrt(HitKTG)/tamp)*100,-2); end; function CekNyata(a,b,c:real):string; var tamp:string; begin//Mencek apakah F hitung nyata atau tidak nyata (tn) tamp:=''; if a>c then tamp:='**' else if ((a
b)) then tamp:='*' else if a
L 77 begin//isi data dari stringgrid1 ke array dalam Polinomial Ortogonal data[bar][kol]:=c; r:=r1; a:=a1; b:=b1; end; procedure setbarkol(b2,k2:integer); begin // set baris dan kolom baris:=b2; kolom:=k2; dec:=-3; end; procedure isikoef(bar,kol:integer;a:real); begin//isi data koefisien polOrt ke array koef[bar][kol]:=a; end; function GetJumFak(NmFak,NoPerlak:integer):real; var i,j,count:integer; tamp:real; begin//mengambil Jumlah faktor A atau Fak B untuk tiap2 Perlakuan if Nmfak=1 then//jika Nama Faktor adalah Faktor I maka : begin count:=((NoPerlak-1)*b)+1; tamp:=0; for i:=1 to b do begin for j:=1 to kolom do begin tamp:=tamp+data[count][j]; end; inc(count); end; Result:=tamp; end else//jika Nama Faktor adalah Faktor II maka : begin tamp:=0; for i:=1 to a do begin for j:=1 to kolom do begin tamp:=tamp+data[NoPerlak+((i-1)*b)][j]; end; end; Result:=tamp; end; end; function HitJKFU(NmFak,D:integer):real; var j:integer; tamp,tamp2:real;
L 78 begin//Menghitung JK Faktor Utama (JKFU) tamp:=0; tamp2:=0; if NmFak=1 then //jika Nama Faktor adalah Faktor I maka : begin for j:=1 to a do begin tamp:=tamp + koef[D][j]*GetJumFak(1,j); end; tamp:=sqr(tamp); for j:=1 to a do begin tamp2:=tamp2 + sqr(koef[D][j]); end; tamp:=tamp/(r*b*tamp2); Result:=tamp; end else //jika Nama Faktor adalah Faktor II maka : begin for j:=1 to b do begin tamp:=tamp + koef[D][j]*GetJumFak(2,j); end; tamp:=sqr(tamp); for j:=1 to b do begin tamp2:=tamp2 + sqr(koef[D][j]); end; tamp:=tamp/(r*a*tamp2); Result:=tamp; end; end; procedure isiHasilAxB(F:integer); var i,j,l:integer; tamp:real; begin//mengisi matrik hasilkali faktorI dgn FaktorII if F=1 then begin for i:=1 to b do for j:=1 to a do begin tamp:=0; for l:=1 to kolom do tamp:=tamp+data[(i+((j-1)*b)),l]; HasilAxB[i,j]:=tamp; end; end else begin for i:=1 to a do
L 79 for j:=1 to b do begin tamp:=0; for l:=1 to kolom do tamp:=tamp+data[(i-1)*b+j,l]; HasilAxB[i,j]:=tamp; end; end; end; function HitJKFInteraksi(NmFak,D:integer):real; var i,j,k:integer; tamp,tamp2,tamp3:real; begin//Menghitung JK Faktor Interaksi tamp3:=0; if NmFak=1 then begin isiHasilAxB(1); for i:=1 to b do begin tamp:=0; tamp2:=0; for j:=1 to a do begin tamp:=tamp+(Koef[D,j]*HasilAxB[i,j]); end; for k:=1 to a do begin tamp2:=tamp2 + sqr(koef[D][k]); end; tamp:=sqr(tamp)/(r*tamp2); tamp3:=tamp3+tamp; end; result:=tamp3-HitJKFU(1,D); end else begin isiHasilAxB(2); for i:=1 to a do begin tamp:=0; tamp2:=0; for j:=1 to b do begin tamp:=tamp+(Koef[D,j]*HasilAxB[i,j]); end; for k:=1 to b do begin tamp2:=tamp2 + sqr(koef[D][k]); end;
L 80 tamp:=sqr(tamp)/(r*tamp2); tamp3:=tamp3+tamp; end; result:=tamp3-HitJKFU(2,D); end; end; end. Unit Koefisien; interface uses SysUtils,Math,QDialogs; Procedure SetX(i:integer;n:real); Procedure SetT(i:integer); function GetKoef(Derajat,bar,kol:integer):integer; function GetKoefTS(bar,kol:integer):real; function VarA:real; function VarB:real; function VarC:real; function VarD:real; function VarE:real; function VarF:real; function SK(p:integer):real; procedure SetTamp; procedure AngkaBulat; function CekAKecil(D:integer):real; implementation var X:array[1..6] of real; T:integer; tamp:array[1..5,1..6] of real; simp:array[1..5,1..6]of real; Procedure SetX(i:integer;n:real); begin//Menset Nilai X X[i]:=n; end; Procedure SetT(i:integer); begin//Menset Nilai T T:=i; end; function GetKoef(Derajat,bar,kol:integer):integer; var tamp:array [1..5,1..6] of integer; hasil:integer; begin//Mengambil koefisien untuk taraf dengan selang sama hasil:=0; case Derajat of 3:begin
L 81 tamp[1,1]:=-1;tamp[1,2]:=0;tamp[1,3]:=1;tamp[1,4]:=0;tamp[1,5]:=0;tamp[1,6]:=0; tamp[2,1]:=1;tamp[2,2]:=-2;tamp[2,3]:=1;tamp[2,4]:=0;tamp[2,5]:=0;tamp[2,6]:=0; tamp[3,1]:=0;tamp[3,2]:=0;tamp[3,3]:=0;tamp[3,4]:=0;tamp[3,5]:=0;tamp[3,6]:=0; tamp[4,1]:=0;tamp[4,2]:=0;tamp[4,3]:=0;tamp[4,4]:=0;tamp[4,5]:=0;tamp[4,6]:=0; tamp[5,1]:=0;tamp[5,2]:=0;tamp[5,3]:=0;tamp[5,4]:=0;tamp[5,5]:=0;tamp[5,6]:=0; hasil:=tamp[bar,kol]; end; 4:begin tamp[1,1]:=-3;tamp[1,2]:=-1;tamp[1,3]:=1;tamp[1,4]:=3;tamp[1,5]:=0;tamp[1,6]:=0; tamp[2,1]:=1;tamp[2,2]:=-1;tamp[2,3]:=-1;tamp[2,4]:=1;tamp[2,5]:=0;tamp[2,6]:=0; tamp[3,1]:=-1;tamp[3,2]:=3;tamp[3,3]:=-3;tamp[3,4]:=1;tamp[3,5]:=0;tamp[3,6]:=0; tamp[4,1]:=0;tamp[4,2]:=0;tamp[4,3]:=0;tamp[4,4]:=0;tamp[4,5]:=0;tamp[4,6]:=0; tamp[5,1]:=0;tamp[5,2]:=0;tamp[5,3]:=0;tamp[5,4]:=0;tamp[5,5]:=0;tamp[5,6]:=0; hasil:=tamp[bar,kol]; end; 5:begin tamp[1,1]:=-2;tamp[1,2]:=-1;tamp[1,3]:=0;tamp[1,4]:=1;tamp[1,5]:=2;tamp[1,6]:=0; tamp[2,1]:=2;tamp[2,2]:=-1;tamp[2,3]:=-2;tamp[2,4]:=-1;tamp[2,5]:=2;tamp[2,6]:=0; tamp[3,1]:=-1;tamp[3,2]:=2;tamp[3,3]:=0;tamp[3,4]:=-2;tamp[3,5]:=1;tamp[3,6]:=0; tamp[4,1]:=1;tamp[4,2]:=-4;tamp[4,3]:=6;tamp[4,4]:=-4;tamp[4,5]:=1;tamp[4,6]:=0; tamp[5,1]:=0;tamp[5,2]:=0;tamp[5,3]:=0;tamp[5,4]:=0;tamp[5,5]:=0;tamp[5,6]:=0; hasil:=tamp[bar,kol]; end; 6:begin tamp[1,1]:=-5;tamp[1,2]:=-3;tamp[1,3]:=-1;tamp[1,4]:=1;tamp[1,5]:=3;tamp[1,6]:=5; tamp[2,1]:=5;tamp[2,2]:=-1;tamp[2,3]:=-4;tamp[2,4]:=-4;tamp[2,5]:=-1;tamp[2,6]:=5; tamp[3,1]:=-5;tamp[3,2]:=7;tamp[3,3]:=4;tamp[3,4]:=-4;tamp[3,5]:=-7;tamp[3,6]:=5; tamp[4,1]:=1;tamp[4,2]:=-3;tamp[4,3]:=2;tamp[4,4]:=2;tamp[4,5]:=-3;tamp[4,6]:=1; tamp[5,1]:=-1;tamp[5,2]:=5;tamp[5,3]:=-10;tamp[5,4]:=10;tamp[5,5]:=-5;tamp[5,6]:=1; hasil:=tamp[bar,kol]; end; end; result:=hasil; end; function SK(p:integer):real; var i:integer; tamp1:real; begin//fungsi sigma kuadrat (SK) tamp1:=0; for i:=1 to t do begin tamp1:=tamp1+power(X[i],p); end; Result:=tamp1; end; function VarA:real; var tamp1:real; begin//Mencari koefisien A
L 82 tamp1:=-SK(1)/t; Result:=tamp1; end; function VarB:real; var tamp1:real; begin//Mencari koefisien B tamp1:=((SK(1)*SK(3))-(power(SK(2),2)))/((t*SK(2))-(power(SK(1),2))); Result:=tamp1; end; function VarC:real; var tamp1:real; begin//Mencari koefisien C tamp1:=((SK(1)*SK(2))-(t*SK(3)))/((t*SK(2))-(power(SK(1),2))); Result:=tamp1; end; function VarF:real; var tamp1,tamp2:real; begin//Mencari koefisien F tamp1:=(SK(5)*((power(SK(1),2))-(t*SK(2))))+(SK(4)*((t*SK(3))(SK(1)*SK(2))))+(SK(3)*((power(SK(2),2))-(SK(1)*SK(3)))); tamp2:=(SK(4)*((t*SK(2))-(power(SK(1),2))))+(SK(3)*((SK(1)*SK(2))(t*SK(3))))+(SK(2)*((SK(1)*SK(3))-(power(SK(2),2)))); tamp1:=tamp1/tamp2; Result:=tamp1; end; function VarE:real; var tamp1:real; begin//Mencari koefisien E tamp1:=((VarF*((SK(1)*SK(2))-(t*SK(3))))+((SK(1)*SK(3))-(t*SK(4))))/((t*SK(2))(power(SK(1),2))); Result:=tamp1; end; function VarD:real; var tamp1:real; begin//Mencari koefisien D tamp1:=-((VarE*SK(1))+(VarF*SK(2))+(SK(3)))/t; Result:=tamp1; end; function CekAKecil(D:integer):real; var i:integer; kecil:real; begin//Mencari angka terkecil kecil:=abs(simp[D,1]); for i:=2 to t do begin if abs(simp[D,i])
L 83 end; end; Result:=kecil; end; procedure AngkaBulat; var i,j,k,count:integer; r:real; awal,tamp2:array[1..3,1..4]of real; CekR:boolean; begin//membuat angka koefisien menjadi bulat r:=0; for i:=1 to t-1 do for j:=1 to t do begin tamp[i,j]:=simp[i,j]/CekAKecil(i); awal[i,j]:=tamp[i,j]; tamp2[i,j]:=tamp[i,j]; end; for i:=1 to t-1 do begin CekR:=True; count:=2; repeat for j:=1 to t do begin r:=tamp[i,j]-trunc(tamp[i,j]); if r>0 then CekR:=False; end; if CekR=False then begin for k:=1 to t do begin tamp2[i,k]:=awal[i,k]*count; tamp[i,k]:=Round(Roundto(awal[i,k]*count,-5)); CekR:=true; end; count:=count+1; end; until r=0; end; end; procedure SetTamp; var i,j:integer; begin//menset tamp case t of 3..6:begin for j:=1 to t do begin simp[1,j]:=VarA+X[j];
L 84 simp[2,j]:=VarB+(varC*X[j])+power(X[j],2); end; //AngkaBulat; for i:=1 to t-1 do for j:=1 to t do begin tamp[i,j]:=0; end; for j:=1 to t do begin tamp[1,j]:=simp[1,j]/CekAKecil(1); tamp[2,j]:=simp[2,j]/CekAKecil(2); end; end; end; end; function GetKoefTS(bar,kol:integer):real; begin//Mengambil koefisien untuk taraf dengan selang tidak sama Result:=Tamp[bar,kol]; end; end. Unit Report; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, QRCtrls, QuickRpt, jpeg, ExtCtrls, QRExport, QRPrntr, TeEngine, Series, TeeProcs, Chart, QRTEE, Math, DbChart, StdCtrls; type TFRep = class(TForm) ScrollBox2: TScrollBox; QuickRep1: TQuickRep; PageHeaderBand1: TQRBand; QRLabel49: TQRLabel; QRSysData3: TQRSysData; BandAnova: TQRChildBand; BandPolOrt: TQRChildBand; BandGrafPolOrt: TQRChildBand; BandPemOrt: TQRChildBand; QRLabel1: TQRLabel; QRLabel2: TQRLabel; QRShape18: TQRShape; QRMemo2: TQRMemo; QRMemo3: TQRMemo; QRMemo4: TQRMemo;
L 85 QRMemo5: TQRMemo; QRMemo6: TQRMemo; QRLabel4: TQRLabel; QRLabel5: TQRLabel; QRLabel6: TQRLabel; QRLabel7: TQRLabel; QRLabel8: TQRLabel; QRLabel9: TQRLabel; QRLabel10: TQRLabel; QRLabel11: TQRLabel; QRLabel12: TQRLabel; QRLabel50: TQRLabel; QRLabel51: TQRLabel; QRLabel13: TQRLabel; QRLabel14: TQRLabel; QRLabel15: TQRLabel; QRLabel16: TQRLabel; QRLabel17: TQRLabel; QRLabel18: TQRLabel; QRLabel19: TQRLabel; QRLabel26: TQRLabel; QRLabel25: TQRLabel; QRLabel24: TQRLabel; QRLabel23: TQRLabel; QRLabel22: TQRLabel; QRLabel20: TQRLabel; QRLabel21: TQRLabel; QRLabel27: TQRLabel; QRLabel28: TQRLabel; QRLabel29: TQRLabel; QRLabel30: TQRLabel; QRLabel31: TQRLabel; QRLabel32: TQRLabel; QRLabel35: TQRLabel; QRLabel34: TQRLabel; QRLabel33: TQRLabel; QRLabel36: TQRLabel; QRLabel37: TQRLabel; QRLabel38: TQRLabel; QRLabel39: TQRLabel; QRLabel40: TQRLabel; QRLabel41: TQRLabel; QRLabel42: TQRLabel; QRLabel47: TQRLabel; QRLabel46: TQRLabel; QRLabel45: TQRLabel; QRLabel44: TQRLabel;
L 86 QRLabel43: TQRLabel; QRShape11: TQRShape; QRShape2: TQRShape; QRShape6: TQRShape; QRShape1: TQRShape; QRShape10: TQRShape; QRShape4: TQRShape; QRShape3: TQRShape; QRShape5: TQRShape; QRShape9: TQRShape; QRShape7: TQRShape; QRShape8: TQRShape; QRLabel52: TQRLabel; QRLabel53: TQRLabel; QRShape25: TQRShape; QRMemo12: TQRMemo; QRMemo13: TQRMemo; QRMemo14: TQRMemo; QRMemo15: TQRMemo; QRMemo16: TQRMemo; QRLabel63: TQRLabel; QRLabel64: TQRLabel; QRShape19: TQRShape; QRmmSK: TQRMemo; QRmmDB: TQRMemo; QRShape27: TQRShape; QRmmJK: TQRMemo; QRmmKT: TQRMemo; QRmmFH: TQRMemo; QRmmFT5: TQRMemo; QRmmFT1: TQRMemo; QRLabel65: TQRLabel; QRLabel57: TQRLabel; QRLabel58: TQRLabel; QRLabel68: TQRLabel; QRLabel60: TQRLabel; QRShape12: TQRShape; QRShape20: TQRShape; QRShape13: TQRShape; QRShape14: TQRShape; QRShape16: TQRShape; QRShape15: TQRShape; QRShape17: TQRShape; QRShape21: TQRShape; QRShape26: TQRShape; QRLabel3: TQRLabel; QRLabel56: TQRLabel;
L 87 QRChart: TQRChart; QRDBChart2: TQRDBChart; LineSeries1: TLineSeries; QRShape37: TQRShape; QRShape38: TQRShape; QRShape39: TQRShape; QRShape40: TQRShape; QRLabel69: TQRLabel; QRShape41: TQRShape; QRShape42: TQRShape; QRLabel70: TQRLabel; QRShape43: TQRShape; QRShape44: TQRShape; QRShape45: TQRShape; QRShape46: TQRShape; QRLabel71: TQRLabel; QRShape49: TQRShape; QRShape22: TQRShape; QRLabel54: TQRLabel; QRLabel55: TQRLabel; QRMemo7: TQRMemo; QRMemo8: TQRMemo; QRMemo9: TQRMemo; QRMemo10: TQRMemo; QRMemo11: TQRMemo; QRLabel61: TQRLabel; QRLabel59: TQRLabel; QRShape24: TQRShape; QRmmSK2: TQRMemo; QRmmDB2: TQRMemo; QRmmJK2: TQRMemo; QRmmKT2: TQRMemo; QRmmFH2: TQRMemo; QRmmFT52: TQRMemo; QRmmFT12: TQRMemo; QRLabel62: TQRLabel; QRLabel66: TQRLabel; QRLabel67: TQRLabel; QRShape30: TQRShape; QRShape29: TQRShape; QRShape36: TQRShape; QRShape32: TQRShape; QRShape33: TQRShape; QRShape34: TQRShape; QRShape35: TQRShape; QRShape28: TQRShape; QRShape31: TQRShape;
L 88 QRShape47: TQRShape; QRShape48: TQRShape; QRShape50: TQRShape; QRLabel72: TQRLabel; QRLabel73: TQRLabel; QRLabel74: TQRLabel; QRImage1: TQRImage; QRMemo1: TQRMemo; QRLabel48: TQRLabel; QRShape23: TQRShape; BandAA: TQRBand; QRShape51: TQRShape; QRLabel75: TQRLabel; QRLabel76: TQRLabel; procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; var FRep: TFRep; implementation {$R *.dfm} procedure TFRep.FormClose(Sender: TObject; var Action: TCloseAction); begin QRmmSK.Lines.Clear; QRmmDB.Lines.Clear; QRmmJK.Lines.Clear; QRmmKT.Lines.Clear; QRmmFH.Lines.Clear; QRmmFT5.Lines.Clear; QRmmFT1.Lines.Clear; QRLabel57.Caption:=''; QRLabel58.Caption:=''; end; end. Unit Splash; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, jpeg, ExtCtrls, StdCtrls; type TSplashscreen = class(TForm) Image1: TImage;
L 89 Label1: TLabel; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Splashscreen: TSplashscreen; count:integer; implementation {$R *.dfm} procedure TSplashscreen.FormCreate(Sender: TObject); begin SetWindowLong(Handle, GWL_STYLE,GetWindowLong(Handle, GWL_STYLE) and not WS_CAPTION); ClientHeight := Height - 45; end; end. Unit TabelF; interface procedure buat5P; procedure buat1P; function GetFTable(P:integer;f1,f2:integer):real; implementation var d5,d1:array[1..52,1..24] of real; i:integer; procedure buat5P; begin// i:=1; //1 d5[1,1]:=161;d5[1,2]:=200;d5[1,3]:=216;d5[1,4]:=225;d5[1,5]:=230;d5[1,6]:=234; d5[1,7]:=237;d5[1,8]:=239;d5[1,9]:=241;d5[1,10]:=242;d5[1,11]:=243;d5[1,12]:=244; d5[1,13]:=245;d5[1,14]:=246;d5[1,15]:=248;d5[1,16]:=249;d5[1,17]:=250;d5[1,18]:=251; d5[1,19]:=252;d5[1,20]:=253;d5[1,21]:=253;d5[1,22]:=254;d5[1,23]:=254;d5[1,24]:=254; i:=i+1; d5[2,1]:=18.51;d5[2,2]:=19;d5[2,3]:=19.16;d5[2,4]:=19.25;d5[2,5]:=19.30;d5[2,6]:=19.33; d5[2,7]:=19.36;d5[2,8]:=19.37;d5[2,9]:=19.38;d5[2,10]:=19.39;d5[2,11]:=19.40;d5[2,12]:= 19.41; d5[2,13]:=19.42;d5[2,14]:=19.43;d5[2,15]:=19.44;d5[2,16]:=19.45;d5[2,17]:=19.46;d5[2,1 8]:=19.47; d5[2,19]:=19.47;d5[2,20]:=19.48;d5[2,21]:=19.49;d5[2,22]:=19.49;d5[2,23]:=19.50;d5[2,2 4]:=19.50; i:=i+1; d5[3,1]:=10.13;d5[3,2]:=9.56;d5[3,3]:=9.28;d5[3,4]:=9.12;d5[3,5]:=9.01;d5[3,6]:=8.94;
L 90 d5[3,7]:=8.86;d5[3,8]:=8.84;d5[3,9]:=8.81;d5[3,10]:=8.78;d5[3,11]:=8.76;d5[3,12]:=8.74; d5[3,13]:=8.71;d5[3,14]:=8.69;d5[3,15]:=8.66;d5[3,16]:=8.64;d5[3,17]:=8.62;d5[3,18]:=8. 60; d5[3,19]:=8.58;d5[3,20]:=8.57;d5[3,21]:=8.56;d5[3,22]:=8.54;d5[3,23]:=8.54;d5[3,24]:=8. 53; i:=i+1; d5[4,1]:=7.71;d5[4,2]:=6.94;d5[4,3]:=6.59;d5[4,4]:=6.39;d5[4,5]:=6.26;d5[4,6]:=6.16; d5[4,7]:=6.09;d5[4,8]:=6.04;d5[4,9]:=6;d5[4,10]:=5.96;d5[4,11]:=5.93;d5[4,12]:=5.91; d5[4,13]:=5.87;d5[4,14]:=5.84;d5[4,15]:=5.8;d5[4,16]:=5.77;d5[4,17]:=5.74;d5[4,18]:=5.7 1; d5[4,19]:=5.7;d5[4,20]:=5.68;d5[4,21]:=5.66;d5[4,22]:=5.65;d5[4,23]:=5.64;d5[4,24]:=5.6 3; i:=i+1; d5[5,1]:=6.61;d5[5,2]:=5.79;d5[5,3]:=5.41;d5[5,4]:=5.19;d5[5,5]:=5.05;d5[5,6]:=4.95; d5[5,7]:=4.88;d5[5,8]:=4.82;d5[5,9]:=4.78;d5[5,10]:=4.74;d5[5,11]:=4.7;d5[5,12]:=4.68; d5[5,13]:=4.64;d5[5,14]:=4.6;d5[5,15]:=4.56;d5[5,16]:=4.53;d5[5,17]:=4.5;d5[5,18]:=4.46; d5[5,19]:=4.44;d5[5,20]:=4.42;d5[5,21]:=4.4;d5[5,22]:=4.38;d5[5,23]:=4.37;d5[5,24]:=4.3 6; i:=i+1; d5[6,1]:=5.99;d5[6,2]:=5.14;d5[6,3]:=4.76;d5[6,4]:=4.53;d5[6,5]:=4.39;d5[6,6]:=4.28; d5[6,7]:=4.21;d5[6,8]:=4.15;d5[6,9]:=4.10;d5[6,10]:=4.06;d5[6,11]:=4.03;d5[6,12]:=4.00; d5[6,13]:=3.96;d5[6,14]:=3.92;d5[6,15]:=3.87;d5[6,16]:=3.84;d5[6,17]:=3.81;d5[6,18]:=3. 77; d5[6,19]:=3.75;d5[6,20]:=3.72;d5[6,21]:=3.71;d5[6,22]:=3.69;d5[6,23]:=3.68;d5[6,24]:=3. 67; i:=i+1; d5[7,1]:=5.59;d5[7,2]:=4.74;d5[7,3]:=4.35;d5[7,4]:=4.12;d5[7,5]:=3.97;d5[7,6]:=3.87; d5[7,7]:=3.79;d5[7,8]:=3.73;d5[7,9]:=3.68;d5[7,10]:=3.63;d5[7,11]:=3.60;d5[7,12]:=3.57; d5[7,13]:=3.52;d5[7,14]:=3.49;d5[7,15]:=3.44;d5[7,16]:=3.41;d5[7,17]:=3.38;d5[7,18]:=3. 34; d5[7,19]:=3.32;d5[7,20]:=3.29;d5[7,21]:=3.28;d5[7,22]:=3.25;d5[7,23]:=3.24;d5[7,24]:=3. 23; i:=i+1; d5[8,1]:=5.32;d5[8,2]:=4.46;d5[8,3]:=4.07;d5[8,4]:=3.84;d5[8,5]:=3.69;d5[8,6]:=3.58; d5[8,7]:=3.50;d5[8,8]:=3.44;d5[8,9]:=3.39;d5[8,10]:=3.34;d5[8,11]:=3.31;d5[8,12]:=3.28; d5[8,13]:=3.23;d5[8,14]:=3.20;d5[8,15]:=3.15;d5[8,16]:=3.12;d5[8,17]:=3.08;d5[8,18]:=3. 05; d5[8,19]:=3.03;d5[8,20]:=3.00;d5[8,21]:=2.96;d5[8,22]:=2.96;d5[8,23]:=2.94;d5[8,24]:=2. 93; i:=i+1; d5[9,1]:=5.12;d5[9,2]:=4.26;d5[9,3]:=3.86;d5[9,4]:=3.63;d5[9,5]:=3.48;d5[9,6]:=3.37; d5[9,7]:=3.29;d5[9,8]:=3.23;d5[9,9]:=3.18;d5[9,10]:=3.13;d5[9,11]:=3.10;d5[9,12]:=3.07; d5[9,13]:=3.02;d5[9,14]:=2.96;d5[9,15]:=2.93;d5[9,16]:=2.90;d5[9,17]:=2.86;d5[9,18]:=2. 82; d5[9,19]:=2.80;d5[9,20]:=2.77;d5[9,21]:=2.76;d5[9,22]:=2.73;d5[9,23]:=2.72;d5[9,24]:=2. 71;
L 91 i:=i+1; d5[10,1]:=4.96;d5[10,2]:=4.10;d5[10,3]:=3.71;d5[10,4]:=3.48;d5[10,5]:=3.33;d5[10,6]:=3. 22; d5[10,7]:=3.14;d5[10,8]:=3.07;d5[10,9]:=3.02;d5[10,10]:=2.97;d5[10,11]:=2.94;d5[10,12]: =2.91; d5[10,13]:=2.86;d5[10,14]:=2.82;d5[10,15]:=2.77;d5[10,16]:=2.74;d5[10,17]:=2.70;d5[10, 18]:=2.67; d5[10,19]:=2.64;d5[10,20]:=2.61;d5[10,21]:=2.59;d5[10,22]:=2.56;d5[10,23]:=2.55;d5[10, 24]:=2.54; i:=i+1; d5[11,1]:=4.84;d5[11,2]:=3.98;d5[11,3]:=3.59;d5[11,4]:=3.36;d5[11,5]:=3.20;d5[11,6]:=3. 09; d5[11,7]:=3.01;d5[11,8]:=2.95;d5[11,9]:=2.90;d5[11,10]:=2.86;d5[11,11]:=2.82;d5[11,12]: =2.79; d5[11,13]:=2.74;d5[11,14]:=2.70;d5[11,15]:=2.65;d5[11,16]:=2.61;d5[11,17]:=2.57;d5[11, 18]:=2.53; d5[11,19]:=2.50;d5[11,20]:=2.47;d5[11,21]:=2.45;d5[11,22]:=2.42;d5[11,23]:=2.41;d5[11, 24]:=2.40; i:=i+1; d5[12,1]:=4.75;d5[12,2]:=3.88;d5[12,3]:=3.49;d5[12,4]:=3.26;d5[12,5]:=3.11;d5[12,6]:=3. 00; d5[12,7]:=2.92;d5[12,8]:=2.85;d5[12,9]:=2.80;d5[12,10]:=2.76;d5[12,11]:=2.72;d5[12,12]: =2.69; d5[12,13]:=2.64;d5[12,14]:=2.60;d5[12,15]:=2.54;d5[12,16]:=2.50;d5[12,17]:=2.46;d5[12, 18]:=2.42; d5[12,19]:=2.40;d5[12,20]:=2.36;d5[12,21]:=2.35;d5[12,22]:=2.32;d5[12,23]:=2.31;d5[12, 24]:=2.30; i:=i+1; d5[13,1]:=4.67;d5[13,2]:=3.80;d5[13,3]:=3.41;d5[13,4]:=3.18;d5[13,5]:=3.02;d5[13,6]:=2. 92; d5[13,7]:=2.84;d5[13,8]:=2.77;d5[13,9]:=2.72;d5[13,10]:=2.67;d5[13,11]:=2.63;d5[13,12]: =2.60; d5[13,13]:=2.55;d5[13,14]:=2.51;d5[13,15]:=2.51;d5[13,16]:=2.46;d5[13,17]:=2.42;d5[13, 18]:=2.38; d5[13,19]:=2.34;d5[13,20]:=2.32;d5[13,21]:=2.28;d5[13,22]:=2.26;d5[13,23]:=2.24;d5[13, 24]:=2.22; i:=i+1; d5[14,1]:=4.60;d5[14,2]:=3.74;d5[14,3]:=3.34;d5[14,4]:=3.11;d5[14,5]:=2.96;d5[14,6]:=2. 85; d5[14,7]:=2.77;d5[14,8]:=2.70;d5[14,9]:=2.65;d5[14,10]:=2.60;d5[14,11]:=2.56;d5[14,12]: =2.53; d5[14,13]:=2.48;d5[14,14]:=2.44;d5[14,15]:=2.39;d5[14,16]:=2.35;d5[14,17]:=2.31;d5[14, 18]:=2.27; d5[14,19]:=2.24;d5[14,20]:=2.21;d5[14,21]:=2.19;d5[14,22]:=2.16;d5[14,23]:=2.14;d5[14, 24]:=2.13; i:=i+1;
L 92 d5[15,1]:=4.54;d5[15,2]:=3.68;d5[15,3]:=3.29;d5[15,4]:=3.06;d5[15,5]:=2.90;d5[15,6]:=2. 79; d5[15,7]:=2.70;d5[15,8]:=2.64;d5[15,9]:=2.59;d5[15,10]:=2.55;d5[15,11]:=2.51;d5[15,12]: =2.48; d5[15,13]:=2.43;d5[15,14]:=2.39;d5[15,15]:=2.33;d5[15,16]:=2.29;d5[15,17]:=2.25;d5[15, 18]:=2.21; d5[15,19]:=2.18;d5[15,20]:=2.15;d5[15,21]:=2.12;d5[15,22]:=2.10;d5[15,23]:=2.08;d5[15, 24]:=2.07; i:=i+1; d5[16,1]:=4.49;d5[16,2]:=3.63;d5[16,3]:=3.24;d5[16,4]:=3.01;d5[16,5]:=2.85;d5[16,6]:=2. 74; d5[16,7]:=2.66;d5[16,8]:=2.59;d5[16,9]:=2.54;d5[16,10]:=2.49;d5[16,11]:=2.45;d5[16,12]: =2.42; d5[16,13]:=2.37;d5[16,14]:=2.33;d5[16,15]:=2.28;d5[16,16]:=2.24;d5[16,17]:=2.20;d5[16, 18]:=2.16; d5[16,19]:=2.13;d5[16,20]:=2.09;d5[16,21]:=2.07;d5[16,22]:=2.04;d5[16,23]:=2.02;d5[16, 24]:=2.01; i:=i+1; d5[17,1]:=4.45;d5[17,2]:=3.59;d5[17,3]:=3.20;d5[17,4]:=2.96;d5[17,5]:=2.81;d5[17,6]:=2. 70; d5[17,7]:=2.62;d5[17,8]:=2.55;d5[17,9]:=2.50;d5[17,10]:=2.45;d5[17,11]:=2.41;d5[17,12]: =2.38; d5[17,13]:=2.33;d5[17,14]:=2.29;d5[17,15]:=2.23;d5[17,16]:=2.19;d5[17,17]:=2.15;d5[17, 18]:=2.11; d5[17,19]:=2.08;d5[17,20]:=2.04;d5[17,21]:=2.02;d5[17,22]:=1.99;d5[17,23]:=1.97;d5[17, 24]:=1.96; i:=i+1; //18 d5[i,1]:=4.41;d5[i,2]:=3.55;d5[i,3]:=3.16;d5[i,4]:=2.93;d5[i,5]:=2.77;d5[i,6]:=3.66; d5[i,7]:=2.58;d5[i,8]:=2.51;d5[i,9]:=2.46;d5[i,10]:=2.41;d5[i,11]:=2.37;d5[i,12]:=2.34; d5[i,13]:=2.29;d5[i,14]:=2.25;d5[i,15]:=2.19;d5[i,16]:=2.15;d5[i,17]:=2.11;d5[i,18]:=2.07; d5[i,19]:=2.04;d5[i,20]:=2.00;d5[i,21]:=1.98;d5[i,22]:=1.95;d5[i,23]:=1.93;d5[i,24]:=1.92; i:=i+1; //19 d5[i,1]:=4.38;d5[i,2]:=3.52;d5[i,3]:=3.13;d5[i,4]:=2.90;d5[i,5]:=2.74;d5[i,6]:=2.63; d5[i,7]:=2.55;d5[i,8]:=2.48;d5[i,9]:=2.43;d5[i,10]:=2.38;d5[i,11]:=2.34;d5[i,12]:=2.31; d5[i,13]:=2.26;d5[i,14]:=2.21;d5[i,15]:=2.15;d5[i,16]:=2.11;d5[i,17]:=2.07;d5[i,18]:=2.02; d5[i,19]:=2.00;d5[i,20]:=1.96;d5[i,21]:=1.94;d5[i,22]:=1.91;d5[i,23]:=1.90;d5[i,24]:=1.88; i:=i+1; //20 d5[i,1]:=4.35;d5[i,2]:=3.49;d5[i,3]:=3.10;d5[i,4]:=2.87;d5[i,5]:=2.71;d5[i,6]:=2.60; d5[i,7]:=2.52;d5[i,8]:=2.45;d5[i,9]:=2.40;d5[i,10]:=2.35;d5[i,11]:=2.31;d5[i,12]:=2.28; d5[i,13]:=2.23;d5[i,14]:=2.18;d5[i,15]:=2.12;d5[i,16]:=2.08;d5[i,17]:=2.04;d5[i,18]:=1.99; d5[i,19]:=1.96;d5[i,20]:=1.92;d5[i,21]:=1.90;d5[i,22]:=1.87;d5[i,23]:=1.85;d5[i,24]:=1.84; i:=i+1; //21 d5[i,1]:=4.32;d5[i,2]:=3.47;d5[i,3]:=3.07;d5[i,4]:=2.84;d5[i,5]:=2.68;d5[i,6]:=2.57; d5[i,7]:=2.49;d5[i,8]:=2.42;d5[i,9]:=2.37;d5[i,10]:=2.32;d5[i,11]:=2.28;d5[i,12]:=2.25; d5[i,13]:=2.20;d5[i,14]:=2.15;d5[i,15]:=2.09;d5[i,16]:=2.05;d5[i,17]:=2.00;d5[i,18]:=1.96; d5[i,19]:=1.93;d5[i,20]:=1.89;d5[i,21]:=1.87;d5[i,22]:=1.84;d5[i,23]:=1.82;d5[i,24]:=1.81; i:=i+1; //22
L 93 d5[i,1]:=4.30;d5[i,2]:=3.44;d5[i,3]:=3.05;d5[i,4]:=2.82;d5[i,5]:=2.66;d5[i,6]:=2.55; d5[i,7]:=2.47;d5[i,8]:=2.40;d5[i,9]:=2.35;d5[i,10]:=2.30;d5[i,11]:=2.26;d5[i,12]:=2.23; d5[i,13]:=2.18;d5[i,14]:=2.13;d5[i,15]:=2.07;d5[i,16]:=2.03;d5[i,17]:=1.98;d5[i,18]:=1.93; d5[i,19]:=1.91;d5[i,20]:=1.87;d5[i,21]:=1.84;d5[i,22]:=1.81;d5[i,23]:=1.80;d5[i,24]:=1.78; i:=i+1; //23 d5[i,1]:=4.28;d5[i,2]:=3.42;d5[i,3]:=3.03;d5[i,4]:=2.80;d5[i,5]:=2.64;d5[i,6]:=2.53; d5[i,7]:=2.45;d5[i,8]:=2.38;d5[i,9]:=2.32;d5[i,10]:=2.28;d5[i,11]:=2.24;d5[i,12]:=2.20; d5[i,13]:=2.14;d5[i,14]:=2.10;d5[i,15]:=2.04;d5[i,16]:=2.00;d5[i,17]:=1.96;d5[i,18]:=1.91; d5[i,19]:=1.88;d5[i,20]:=1.84;d5[i,21]:=1.82;d5[i,22]:=1.79;d5[i,23]:=1.77;d5[i,24]:=1.76; i:=i+1; //24 d5[i,1]:=4.26;d5[i,2]:=3.40;d5[i,3]:=3.01;d5[i,4]:=2.78;d5[i,5]:=2.62;d5[i,6]:=2.51; d5[i,7]:=2.43;d5[i,8]:=2.36;d5[i,9]:=2.30;d5[i,10]:=2.26;d5[i,11]:=2.22;d5[i,12]:=2.18; d5[i,13]:=2.13;d5[i,14]:=2.09;d5[i,15]:=2.02;d5[i,16]:=1.98;d5[i,17]:=1.94;d5[i,18]:=1.89; d5[i,19]:=1.86;d5[i,20]:=1.82;d5[i,21]:=1.80;d5[i,22]:=1.76;d5[i,23]:=1.74;d5[i,24]:=1.73; i:=i+1; //25 d5[i,1]:=4.24;d5[i,2]:=3.38;d5[i,3]:=2.99;d5[i,4]:=2.76;d5[i,5]:=2.60;d5[i,6]:=2.49; d5[i,7]:=2.41;d5[i,8]:=2.34;d5[i,9]:=2.28;d5[i,10]:=2.24;d5[i,11]:=2.20;d5[i,12]:=2.16; d5[i,13]:=2.11;d5[i,14]:=2.06;d5[i,15]:=2.00;d5[i,16]:=1.96;d5[i,17]:=1.92;d5[i,18]:=1.87; d5[i,19]:=1.84;d5[i,20]:=1.80;d5[i,21]:=1.77;d5[i,22]:=1.74;d5[i,23]:=1.72;d5[i,24]:=1.71; i:=i+1; //26 d5[i,1]:=4.22;d5[i,2]:=3.37;d5[i,3]:=2.98;d5[i,4]:=2.74;d5[i,5]:=2.59;d5[i,6]:=2.47; d5[i,7]:=2.39;d5[i,8]:=2.32;d5[i,9]:=2.27;d5[i,10]:=2.22;d5[i,11]:=2.18;d5[i,12]:=2.15; d5[i,13]:=2.10;d5[i,14]:=2.05;d5[i,15]:=1.99;d5[i,16]:=1.95;d5[i,17]:=1.90;d5[i,18]:=1.85; d5[i,19]:=1.82;d5[i,20]:=1.78;d5[i,21]:=1.76;d5[i,22]:=1.72;d5[i,23]:=1.70;d5[i,24]:=1.69; i:=i+1; //27 d5[i,1]:=4.21;d5[i,2]:=3.35;d5[i,3]:=2.96;d5[i,4]:=2.73;d5[i,5]:=2.57;d5[i,6]:=2.46; d5[i,7]:=2.37;d5[i,8]:=2.30;d5[i,9]:=2.25;d5[i,10]:=2.20;d5[i,11]:=2.16;d5[i,12]:=2.13; d5[i,13]:=2.08;d5[i,14]:=2.03;d5[i,15]:=1.97;d5[i,16]:=1.93;d5[i,17]:=1.88;d5[i,18]:=1.84; d5[i,19]:=1.80;d5[i,20]:=1.76;d5[i,21]:=1.74;d5[i,22]:=1.71;d5[i,23]:=1.68;d5[i,24]:=1.67; i:=i+1; //28 d5[i,1]:=4.20;d5[i,2]:=3.34;d5[i,3]:=2.95;d5[i,4]:=2.71;d5[i,5]:=2.56;d5[i,6]:=2.44; d5[i,7]:=2.36;d5[i,8]:=2.29;d5[i,9]:=2.24;d5[i,10]:=2.19;d5[i,11]:=2.15;d5[i,12]:=2.12; d5[i,13]:=2.06;d5[i,14]:=2.02;d5[i,15]:=1.96;d5[i,16]:=1.91;d5[i,17]:=1.87;d5[i,18]:=1.81; d5[i,19]:=1.78;d5[i,20]:=1.75;d5[i,21]:=1.72;d5[i,22]:=1.69;d5[i,23]:=1.67;d5[i,24]:=1.65; i:=i+1; //29 d5[i,1]:=4.18;d5[i,2]:=3.33;d5[i,3]:=2.93;d5[i,4]:=2.70;d5[i,5]:=2.54;d5[i,6]:=2.43; d5[i,7]:=2.35;d5[i,8]:=2.28;d5[i,9]:=2.22;d5[i,10]:=2.18;d5[i,11]:=2.14;d5[i,12]:=2.10; d5[i,13]:=2.05;d5[i,14]:=2.00;d5[i,15]:=1.94;d5[i,16]:=1.90;d5[i,17]:=1.85;d5[i,18]:=1.80; d5[i,19]:=1.77;d5[i,20]:=1.73;d5[i,21]:=1.71;d5[i,22]:=1.68;d5[i,23]:=1.65;d5[i,24]:=1.64; i:=i+1; //30 d5[i,1]:=4.17;d5[i,2]:=3.32;d5[i,3]:=2.92;d5[i,4]:=2.69;d5[i,5]:=2.53;d5[i,6]:=2.42; d5[i,7]:=2.34;d5[i,8]:=2.27;d5[i,9]:=2.21;d5[i,10]:=2.16;d5[i,11]:=2.12;d5[i,12]:=2.09; d5[i,13]:=2.04;d5[i,14]:=1.99;d5[i,15]:=1.93;d5[i,16]:=1.89;d5[i,17]:=1.84;d5[i,18]:=1.79; d5[i,19]:=1.76;d5[i,20]:=1.72;d5[i,21]:=1.69;d5[i,22]:=1.66;d5[i,23]:=1.64;d5[i,24]:=1.62; i:=i+1; //32 d5[i,1]:=4.15;d5[i,2]:=3.30;d5[i,3]:=2.90;d5[i,4]:=2.67;d5[i,5]:=2.51;d5[i,6]:=2.40; d5[i,7]:=2.32;d5[i,8]:=2.25;d5[i,9]:=2.19;d5[i,10]:=2.14;d5[i,11]:=2.10;d5[i,12]:=2.07;
L 94 d5[i,13]:=2.02;d5[i,14]:=1.97;d5[i,15]:=1.91;d5[i,16]:=1.86;d5[i,17]:=1.82;d5[i,18]:=1.76; d5[i,19]:=1.74;d5[i,20]:=1.69;d5[i,21]:=1.67;d5[i,22]:=1.64;d5[i,23]:=1.61;d5[i,24]:=1.59; i:=i+1; //34 d5[i,1]:=4.13;d5[i,2]:=3.28;d5[i,3]:=2.88;d5[i,4]:=2.65;d5[i,5]:=2.49;d5[i,6]:=2.38; d5[i,7]:=2.30;d5[i,8]:=2.23;d5[i,9]:=2.17;d5[i,10]:=2.12;d5[i,11]:=2.08;d5[i,12]:=2.05; d5[i,13]:=2.00;d5[i,14]:=1.95;d5[i,15]:=1.89;d5[i,16]:=1.84;d5[i,17]:=1.80;d5[i,18]:=1.74; d5[i,19]:=1.71;d5[i,20]:=1.67;d5[i,21]:=1.64;d5[i,22]:=1.61;d5[i,23]:=1.59;d5[i,24]:=1.57; i:=i+1; //36 d5[i,1]:=4.11;d5[i,2]:=3.26;d5[i,3]:=2.86;d5[i,4]:=2.63;d5[i,5]:=2.48;d5[i,6]:=2.36; d5[i,7]:=2.28;d5[i,8]:=2.21;d5[i,9]:=2.15;d5[i,10]:=2.10;d5[i,11]:=2.06;d5[i,12]:=2.03; d5[i,13]:=1.98;d5[i,14]:=1.93;d5[i,15]:=1.87;d5[i,16]:=1.82;d5[i,17]:=1.78;d5[i,18]:=1.72; d5[i,19]:=1.69;d5[i,20]:=1.65;d5[i,21]:=1.62;d5[i,22]:=1.59;d5[i,23]:=1.56;d5[i,24]:=1.55; i:=i+1; //38 d5[i,1]:=4.10;d5[i,2]:=3.25;d5[i,3]:=2.85;d5[i,4]:=2.62;d5[i,5]:=2.46;d5[i,6]:=2.35; d5[i,7]:=2.26;d5[i,8]:=2.19;d5[i,9]:=2.14;d5[i,10]:=2.09;d5[i,11]:=2.05;d5[i,12]:=2.02; d5[i,13]:=1.96;d5[i,14]:=1.92;d5[i,15]:=1.85;d5[i,16]:=1.80;d5[i,17]:=1.76;d5[i,18]:=1.71; d5[i,19]:=1.67;d5[i,20]:=1.63;d5[i,21]:=1.60;d5[i,22]:=1.57;d5[i,23]:=1.54;d5[i,24]:=1.53; i:=i+1; //40 d5[i,1]:=4.08;d5[i,2]:=3.23;d5[i,3]:=2.84;d5[i,4]:=2.61;d5[i,5]:=2.45;d5[i,6]:=2.34; d5[i,7]:=2.25;d5[i,8]:=2.18;d5[i,9]:=2.12;d5[i,10]:=2.07;d5[i,11]:=2.04;d5[i,12]:=2.00; d5[i,13]:=1.95;d5[i,14]:=1.90;d5[i,15]:=1.84;d5[i,16]:=1.79;d5[i,17]:=1.74;d5[i,18]:=1.69; d5[i,19]:=1.66;d5[i,20]:=1.61;d5[i,21]:=1.59;d5[i,22]:=1.55;d5[i,23]:=1.53;d5[i,24]:=1.51; i:=i+1; //42 d5[i,1]:=4.07;d5[i,2]:=3.22;d5[i,3]:=2.83;d5[i,4]:=2.59;d5[i,5]:=2.44;d5[i,6]:=2.32; d5[i,7]:=2.24;d5[i,8]:=2.17;d5[i,9]:=2.11;d5[i,10]:=2.06;d5[i,11]:=2.02;d5[i,12]:=1.99; d5[i,13]:=1.94;d5[i,14]:=1.89;d5[i,15]:=1.82;d5[i,16]:=1.78;d5[i,17]:=1.73;d5[i,18]:=1.68; d5[i,19]:=1.64;d5[i,20]:=1.60;d5[i,21]:=1.57;d5[i,22]:=1.54;d5[i,23]:=1.51;d5[i,24]:=1.49; i:=i+1; //44 d5[i,1]:=4.06;d5[i,2]:=3.21;d5[i,3]:=2.82;d5[i,4]:=2.58;d5[i,5]:=2.43;d5[i,6]:=2.31; d5[i,7]:=2.23;d5[i,8]:=2.16;d5[i,9]:=2.10;d5[i,10]:=2.05;d5[i,11]:=2.01;d5[i,12]:=1.98; d5[i,13]:=1.92;d5[i,14]:=1.88;d5[i,15]:=1.81;d5[i,16]:=1.76;d5[i,17]:=1.72;d5[i,18]:=1.66; d5[i,19]:=1.63;d5[i,20]:=1.58;d5[i,21]:=1.56;d5[i,22]:=1.52;d5[i,23]:=1.50;d5[i,24]:=1.48; i:=i+1; //46 d5[i,1]:=4.05;d5[i,2]:=3.20;d5[i,3]:=2.81;d5[i,4]:=2.57;d5[i,5]:=2.42;d5[i,6]:=2.30; d5[i,7]:=2.22;d5[i,8]:=2.14;d5[i,9]:=2.09;d5[i,10]:=2.04;d5[i,11]:=2.00;d5[i,12]:=1.97; d5[i,13]:=1.91;d5[i,14]:=1.87;d5[i,15]:=1.80;d5[i,16]:=1.75;d5[i,17]:=1.71;d5[i,18]:=1.65; d5[i,19]:=1.62;d5[i,20]:=1.57;d5[i,21]:=1.54;d5[i,22]:=1.51;d5[i,23]:=1.48;d5[i,24]:=1.45; i:=i+1; //48 d5[i,1]:=4.04;d5[i,2]:=3.19;d5[i,3]:=2.80;d5[i,4]:=2.56;d5[i,5]:=2.41;d5[i,6]:=2.30; d5[i,7]:=2.21;d5[i,8]:=2.14;d5[i,9]:=2.08;d5[i,10]:=2.03;d5[i,11]:=1.99;d5[i,12]:=1.96; d5[i,13]:=1.90;d5[i,14]:=1.86;d5[i,15]:=1.79;d5[i,16]:=1.74;d5[i,17]:=1.70;d5[i,18]:=1.64; d5[i,19]:=1.61;d5[i,20]:=1.56;d5[i,21]:=1.53;d5[i,22]:=1.50;d5[i,23]:=1.47;d5[i,24]:=1.45; i:=i+1; //50 d5[i,1]:=4.03;d5[i,2]:=3.18;d5[i,3]:=2.79;d5[i,4]:=2.56;d5[i,5]:=2.40;d5[i,6]:=2.29; d5[i,7]:=2.20;d5[i,8]:=2.13;d5[i,9]:=2.07;d5[i,10]:=2.02;d5[i,11]:=1.98;d5[i,12]:=1.95; d5[i,13]:=1.90;d5[i,14]:=1.85;d5[i,15]:=1.78;d5[i,16]:=1.74;d5[i,17]:=1.69;d5[i,18]:=1.63; d5[i,19]:=1.60;d5[i,20]:=1.55;d5[i,21]:=1.52;d5[i,22]:=1.48;d5[i,23]:=1.46;d5[i,24]:=1.44;
L 95 i:=i+1; //55 d5[i,1]:=4.02;d5[i,2]:=3.17;d5[i,3]:=2.78;d5[i,4]:=2.54;d5[i,5]:=2.38;d5[i,6]:=2.27; d5[i,7]:=2.18;d5[i,8]:=2.11;d5[i,9]:=2.05;d5[i,10]:=2.00;d5[i,11]:=1.97;d5[i,12]:=1.93; d5[i,13]:=1.88;d5[i,14]:=1.83;d5[i,15]:=1.76;d5[i,16]:=1.72;d5[i,17]:=1.67;d5[i,18]:=1.61; d5[i,19]:=1.58;d5[i,20]:=1.52;d5[i,21]:=1.50;d5[i,22]:=1.46;d5[i,23]:=1.43;d5[i,24]:=1.41; i:=i+1; //60 d5[i,1]:=4.00;d5[i,2]:=3.15;d5[i,3]:=2.76;d5[i,4]:=2.52;d5[i,5]:=2.37;d5[i,6]:=2.25; d5[i,7]:=2.17;d5[i,8]:=2.10;d5[i,9]:=2.04;d5[i,10]:=1.99;d5[i,11]:=1.95;d5[i,12]:=1.92; d5[i,13]:=1.86;d5[i,14]:=1.81;d5[i,15]:=1.75;d5[i,16]:=1.70;d5[i,17]:=1.65;d5[i,18]:=1.59; d5[i,19]:=1.56;d5[i,20]:=1.50;d5[i,21]:=1.48;d5[i,22]:=1.44;d5[i,23]:=1.41;d5[i,24]:=1.39; i:=i+1; //65 d5[i,1]:=3.99;d5[i,2]:=3.14;d5[i,3]:=2.75;d5[i,4]:=2.51;d5[i,5]:=2.36;d5[i,6]:=2.24; d5[i,7]:=2.15;d5[i,8]:=2.08;d5[i,9]:=2.02;d5[i,10]:=1.98;d5[i,11]:=1.94;d5[i,12]:=1.90; d5[i,13]:=1.85;d5[i,14]:=1.80;d5[i,15]:=1.73;d5[i,16]:=1.68;d5[i,17]:=1.63;d5[i,18]:=1.57; d5[i,19]:=1.54;d5[i,20]:=1.49;d5[i,21]:=1.46;d5[i,22]:=1.42;d5[i,23]:=1.39;d5[i,24]:=1.37; i:=i+1; //70 d5[i,1]:=3.98;d5[i,2]:=3.13;d5[i,3]:=2.74;d5[i,4]:=2.50;d5[i,5]:=2.36;d5[i,6]:=2.23; d5[i,7]:=2.14;d5[i,8]:=2.07;d5[i,9]:=2.01;d5[i,10]:=1.97;d5[i,11]:=1.93;d5[i,12]:=1.89; d5[i,13]:=1.84;d5[i,14]:=1.79;d5[i,15]:=1.72;d5[i,16]:=1.67;d5[i,17]:=1.62;d5[i,18]:=1.56; d5[i,19]:=1.53;d5[i,20]:=1.47;d5[i,21]:=1.45;d5[i,22]:=1.40;d5[i,23]:=1.37;d5[i,24]:=1.35; i:=i+1; //80 d5[i,1]:=3.96;d5[i,2]:=3.11;d5[i,3]:=2.72;d5[i,4]:=2.48;d5[i,5]:=2.33;d5[i,6]:=2.21; d5[i,7]:=2.12;d5[i,8]:=2.05;d5[i,9]:=1.99;d5[i,10]:=1.95;d5[i,11]:=1.91;d5[i,12]:=1.88; d5[i,13]:=1.82;d5[i,14]:=1.77;d5[i,15]:=1.70;d5[i,16]:=1.65;d5[i,17]:=1.60;d5[i,18]:=1.54; d5[i,19]:=1.51;d5[i,20]:=1.45;d5[i,21]:=1.42;d5[i,22]:=1.38;d5[i,23]:=1.35;d5[i,24]:=1.32; i:=i+1; //100 d5[i,1]:=3.94;d5[i,2]:=3.09;d5[i,3]:=2.70;d5[i,4]:=2.46;d5[i,5]:=2.30;d5[i,6]:=2.19; d5[i,7]:=2.10;d5[i,8]:=2.03;d5[i,9]:=1.97;d5[i,10]:=1.92;d5[i,11]:=1.88;d5[i,12]:=1.85; d5[i,13]:=1.79;d5[i,14]:=1.75;d5[i,15]:=1.68;d5[i,16]:=1.63;d5[i,17]:=1.57;d5[i,18]:=1.51; d5[i,19]:=1.48;d5[i,20]:=1.42;d5[i,21]:=1.39;d5[i,22]:=1.34;d5[i,23]:=1.30;d5[i,24]:=1.28; i:=i+1; //125 d5[i,1]:=3.92;d5[i,2]:=3.07;d5[i,3]:=2.68;d5[i,4]:=2.44;d5[i,5]:=2.29;d5[i,6]:=2.17; d5[i,7]:=2.08;d5[i,8]:=2.01;d5[i,9]:=1.95;d5[i,10]:=1.90;d5[i,11]:=1.86;d5[i,12]:=1.83; d5[i,13]:=1.77;d5[i,14]:=1.72;d5[i,15]:=1.65;d5[i,16]:=1.60;d5[i,17]:=1.55;d5[i,18]:=1.49; d5[i,19]:=1.45;d5[i,20]:=1.39;d5[i,21]:=1.36;d5[i,22]:=1.31;d5[i,23]:=1.27;d5[i,24]:=1.25; i:=i+1; //150 d5[i,1]:=3.91;d5[i,2]:=3.06;d5[i,3]:=2.67;d5[i,4]:=2.43;d5[i,5]:=2.27;d5[i,6]:=2.16; d5[i,7]:=2.07;d5[i,8]:=2.00;d5[i,9]:=1.94;d5[i,10]:=1.89;d5[i,11]:=1.85;d5[i,12]:=1.82; d5[i,13]:=1.76;d5[i,14]:=1.71;d5[i,15]:=1.64;d5[i,16]:=1.59;d5[i,17]:=1.54;d5[i,18]:=1.47; d5[i,19]:=1.44;d5[i,20]:=1.37;d5[i,21]:=1.34;d5[i,22]:=1.29;d5[i,23]:=1.25;d5[i,24]:=1.22; i:=i+1; //200 d5[i,1]:=3.89;d5[i,2]:=3.04;d5[i,3]:=2.65;d5[i,4]:=2.41;d5[i,5]:=2.26;d5[i,6]:=2.14; d5[i,7]:=2.05;d5[i,8]:=1.98;d5[i,9]:=1.92;d5[i,10]:=1.87;d5[i,11]:=1.83;d5[i,12]:=1.80; d5[i,13]:=1.74;d5[i,14]:=1.69;d5[i,15]:=1.62;d5[i,16]:=1.57;d5[i,17]:=1.52;d5[i,18]:=1.45; d5[i,19]:=1.42;d5[i,20]:=1.35;d5[i,21]:=1.32;d5[i,22]:=1.26;d5[i,23]:=1.22;d5[i,24]:=1.19; i:=i+1; //400 d5[i,1]:=3.86;d5[i,2]:=3.02;d5[i,3]:=2.62;d5[i,4]:=2.39;d5[i,5]:=2.23;d5[i,6]:=2.12;
L 96 d5[i,7]:=2.03;d5[i,8]:=1.96;d5[i,9]:=1.90;d5[i,10]:=1.85;d5[i,11]:=1.81;d5[i,12]:=1.78; d5[i,13]:=1.72;d5[i,14]:=1.67;d5[i,15]:=1.60;d5[i,16]:=1.54;d5[i,17]:=1.49;d5[i,18]:=1.42; d5[i,19]:=1.38;d5[i,20]:=1.32;d5[i,21]:=1.28;d5[i,22]:=1.22;d5[i,23]:=1.16;d5[i,24]:=1.13; i:=i+1; //1000 d5[i,1]:=3.85;d5[i,2]:=3.00;d5[i,3]:=2.61;d5[i,4]:=2.28;d5[i,5]:=2.22;d5[i,6]:=2.10; d5[i,7]:=2.02;d5[i,8]:=1.95;d5[i,9]:=1.89;d5[i,10]:=1.84;d5[i,11]:=1.80;d5[i,12]:=1.76; d5[i,13]:=1.70;d5[i,14]:=1.65;d5[i,15]:=1.58;d5[i,16]:=1.53;d5[i,17]:=1.47;d5[i,18]:=1.41; d5[i,19]:=1.36;d5[i,20]:=1.30;d5[i,21]:=1.26;d5[i,22]:=1.19;d5[i,23]:=1.13;d5[i,24]:=1.08; i:=i+1; //tak hingga d5[i,1]:=3.84;d5[i,2]:=2.99;d5[i,3]:=2.60;d5[i,4]:=2.37;d5[i,5]:=2.21;d5[i,6]:=2.09; d5[i,7]:=2.01;d5[i,8]:=1.94;d5[i,9]:=1.88;d5[i,10]:=1.83;d5[i,11]:=1.79;d5[i,12]:=1.75; d5[i,13]:=1.69;d5[i,14]:=1.64;d5[i,15]:=1.57;d5[i,16]:=1.52;d5[i,17]:=1.46;d5[i,18]:=1.40; d5[i,19]:=1.35;d5[i,20]:=1.28;d5[i,21]:=1.24;d5[i,22]:=1.17;d5[i,23]:=1.11;d5[i,24]:=1.00; end; procedure buat1P; begin i:=1; //1 d1[i,1]:=4052;d1[i,2]:=4900;d1[i,3]:=5403;d1[i,4]:=5625;d1[i,5]:=5764;d1[i,6]:=5959; d1[i,7]:=5928;d1[i,8]:=5961;d1[i,9]:=6022;d1[i,10]:=6056;d1[i,11]:=6082;d1[i,12]:=6106; d1[i,13]:=6142;d1[i,14]:=6169;d1[i,15]:=6206;d1[i,16]:=6234;d1[i,17]:=6261;d1[i,18]:=62 86; d1[i,19]:=6302;d1[i,20]:=6323;d1[i,21]:=6334;d1[i,22]:=6352;d1[i,23]:=6361;d1[i,24]:=63 66; i:=i+1; //2 d1[i,1]:=98.40;d1[i,2]:=99.00;d1[i,3]:=99.17;d1[i,4]:=99.25;d1[i,5]:=99.30;d1[i,6]:=99.33; d1[i,7]:=99.36;d1[i,8]:=99.37;d1[i,9]:=99.39;d1[i,10]:=99.40;d1[i,11]:=99.41;d1[i,12]:=99. 42; d1[i,13]:=99.43;d1[i,14]:=99.44;d1[i,15]:=99.45;d1[i,16]:=99.46;d1[i,17]:=99.47;d1[i,18]: =99.48; d1[i,19]:=99.48;d1[i,20]:=99.49;d1[i,21]:=99.49;d1[i,22]:=99.49;d1[i,23]:=99.50;d1[i,24]: =99.50; i:=i+1; //3 d1[i,1]:=34.12;d1[i,2]:=30.82;d1[i,3]:=29.46;d1[i,4]:=28.71;d1[i,5]:=28.24;d1[i,6]:=27.91; d1[i,7]:=27.67;d1[i,8]:=27.40;d1[i,9]:=27.34;d1[i,10]:=27.23;d1[i,11]:=27.13;d1[i,12]:=27. 06; d1[i,13]:=26.92;d1[i,14]:=26.83;d1[i,15]:=26.69;d1[i,16]:=26.60;d1[i,17]:=26.50;d1[i,18]: =26.41; d1[i,19]:=26.35;d1[i,20]:=26.27;d1[i,21]:=26.23;d1[i,22]:=26.18;d1[i,23]:=26.14;d1[i,24]: =26.12; i:=i+1; //4 d1[i,1]:=21.20;d1[i,2]:=18.00;d1[i,3]:=16.69;d1[i,4]:=15.98;d1[i,5]:=15.52;d1[i,6]:=15.21; d1[i,7]:=14.98;d1[i,8]:=14.80;d1[i,9]:=14.66;d1[i,10]:=14.54;d1[i,11]:=14.46;d1[i,12]:=14. 37; d1[i,13]:=14.24;d1[i,14]:=14.15;d1[i,15]:=14.02;d1[i,16]:=13.93;d1[i,17]:=13.83;d1[i,18]: =13.74;
L 97 d1[i,19]:=13.69;d1[i,20]:=13.61;d1[i,21]:=13.57;d1[i,22]:=13.52;d1[i,23]:=13.48;d1[i,24]: =13.46; i:=i+1; //5 d1[i,1]:=16.26;d1[i,2]:=13.27;d1[i,3]:=12.06;d1[i,4]:=11.39;d1[i,5]:=10.97;d1[i,6]:=10.67; d1[i,7]:=10.46;d1[i,8]:=10.29;d1[i,9]:=10.15;d1[i,10]:=10.05;d1[i,11]:=9.96;d1[i,12]:=9.89 d1[i,13]:=9.77;d1[i,14]:=9.68;d1[i,15]:=9.56;d1[i,16]:=9.47;d1[i,17]:=9.38;d1[i,18]:=9.29; d1[i,19]:=9.24;d1[i,20]:=9.17;d1[i,21]:=9.13;d1[i,22]:=9.07;d1[i,23]:=9.04;d1[i,24]:=9.02; i:=i+1; //6 d1[i,1]:=13.74;d1[i,2]:=10.92;d1[i,3]:=9.78;d1[i,4]:=9.15;d1[i,5]:=8.75;d1[i,6]:=8.47; d1[i,7]:=8.26;d1[i,8]:=8.10;d1[i,9]:=7.98;d1[i,10]:=7.87;d1[i,11]:=7.79;d1[i,12]:=7.72; d1[i,13]:=7.60;d1[i,14]:=7.52;d1[i,15]:=7.39;d1[i,16]:=7.31;d1[i,17]:=7.23;d1[i,18]:=7.14; d1[i,19]:=7.09;d1[i,20]:=7.02;d1[i,21]:=6.96;d1[i,22]:=6.94;d1[i,23]:=6.90;d1[i,24]:=6.88; i:=i+1; //7 d1[i,1]:=12.25;d1[i,2]:=9.55;d1[i,3]:=8.45;d1[i,4]:=7.85;d1[i,5]:=7.46;d1[i,6]:=7.19; d1[i,7]:=7.00;d1[i,8]:=6.94;d1[i,9]:=6.71;d1[i,10]:=6.62;d1[i,11]:=6.54;d1[i,12]:=6.47; d1[i,13]:=6.35;d1[i,14]:=6.27;d1[i,15]:=6.15;d1[i,16]:=6.07;d1[i,17]:=5.98;d1[i,18]:=5.90; d1[i,19]:=5.85;d1[i,20]:=5.78;d1[i,21]:=5.75;d1[i,22]:=5.70;d1[i,23]:=5.67;d1[i,24]:=5.65; i:=i+1; //8 d1[i,1]:=11.26;d1[i,2]:=8.65;d1[i,3]:=7.59;d1[i,4]:=7.01;d1[i,5]:=6.63;d1[i,6]:=6.37; d1[i,7]:=6.19;d1[i,8]:=6.03;d1[i,9]:=5.91;d1[i,10]:=5.82;d1[i,11]:=5.74;d1[i,12]:=5.67; d1[i,13]:=5.56;d1[i,14]:=5.48;d1[i,15]:=5.36;d1[i,16]:=5.28;d1[i,17]:=5.20;d1[i,18]:=5.11; d1[i,19]:=5.06;d1[i,20]:=5.00;d1[i,21]:=4.96;d1[i,22]:=4.91;d1[i,23]:=4.88;d1[i,24]:=4.86; i:=i+1; //9 d1[i,1]:=10.56;d1[i,2]:=8.02;d1[i,3]:=6.99;d1[i,4]:=6.42;d1[i,5]:=6.06;d1[i,6]:=5.80; d1[i,7]:=5.62;d1[i,8]:=5.47;d1[i,9]:=5.35;d1[i,10]:=5.26;d1[i,11]:=5.18;d1[i,12]:=5.11; d1[i,13]:=5.00;d1[i,14]:=4.92;d1[i,15]:=4.80;d1[i,16]:=4.73;d1[i,17]:=4.64;d1[i,18]:=4.56; d1[i,19]:=4.51;d1[i,20]:=4.46;d1[i,21]:=4.41;d1[i,22]:=4.36;d1[i,23]:=4.33;d1[i,24]:=4.31; i:=i+1; //10 d1[i,1]:=10.04;d1[i,2]:=7.56;d1[i,3]:=6.55;d1[i,4]:=5.99;d1[i,5]:=5.64;d1[i,6]:=5.39; d1[i,7]:=5.21;d1[i,8]:=5.06;d1[i,9]:=4.96;d1[i,10]:=4.85;d1[i,11]:=4.78;d1[i,12]:=4.71; d1[i,13]:=4.60;d1[i,14]:=4.52;d1[i,15]:=4.41;d1[i,16]:=4.33;d1[i,17]:=4.25;d1[i,18]:=4.17; d1[i,19]:=4.12;d1[i,20]:=4.05;d1[i,21]:=4.01;d1[i,22]:=3.96;d1[i,23]:=3.93;d1[i,24]:=3.91; i:=i+1; //11 d1[i,1]:=9.65;d1[i,2]:=7.20;d1[i,3]:=6.22;d1[i,4]:=5.67;d1[i,5]:=5.32;d1[i,6]:=5.07; d1[i,7]:=4.88;d1[i,8]:=4.74;d1[i,9]:=4.63;d1[i,10]:=4.54;d1[i,11]:=4.46;d1[i,12]:=4.40; d1[i,13]:=4.29;d1[i,14]:=4.21;d1[i,15]:=4.10;d1[i,16]:=4.02;d1[i,17]:=3.94;d1[i,18]:=3.86; d1[i,19]:=3.80;d1[i,20]:=3.74;d1[i,21]:=3.70;d1[i,22]:=3.66;d1[i,23]:=3.62;d1[i,24]:=3.60; i:=i+1; //12 d1[i,1]:=9.33;d1[i,2]:=6.93;d1[i,3]:=5.96;d1[i,4]:=5.41;d1[i,5]:=5.06;d1[i,6]:=4.82; d1[i,7]:=4.65;d1[i,8]:=4.50;d1[i,9]:=4.39;d1[i,10]:=4.30;d1[i,11]:=4.22;d1[i,12]:=4.16; d1[i,13]:=4.05;d1[i,14]:=3.98;d1[i,15]:=3.86;d1[i,16]:=3.78;d1[i,17]:=3.70;d1[i,18]:=3.61; d1[i,19]:=3.56;d1[i,20]:=3.49;d1[i,21]:=3.46;d1[i,22]:=3.41;d1[i,23]:=3.38;d1[i,24]:=3.36; i:=i+1; //13 d1[i,1]:=9.07;d1[i,2]:=6.70;d1[i,3]:=5.74;d1[i,4]:=5.20;d1[i,5]:=4.86;d1[i,6]:=4.62; d1[i,7]:=4.44;d1[i,8]:=4.30;d1[i,9]:=4.19;d1[i,10]:=4.10;d1[i,11]:=4.02;d1[i,12]:=3.96; d1[i,13]:=3.85;d1[i,14]:=3.78;d1[i,15]:=3.67;d1[i,16]:=3.59;d1[i,17]:=3.51;d1[i,18]:=3.42; d1[i,19]:=3.37;d1[i,20]:=3.30;d1[i,21]:=3.27;d1[i,22]:=3.21;d1[i,23]:=3.18;d1[i,24]:=3.16;
L 98 i:=i+1; //14 d1[i,1]:=8.86;d1[i,2]:=6.51;d1[i,3]:=5.56;d1[i,4]:=5.03;d1[i,5]:=4.69;d1[i,6]:=4.46; d1[i,7]:=4.28;d1[i,8]:=4.14;d1[i,9]:=4.03;d1[i,10]:=3.94;d1[i,11]:=3.86;d1[i,12]:=3.80; d1[i,13]:=3.70;d1[i,14]:=3.62;d1[i,15]:=3.51;d1[i,16]:=3.43;d1[i,17]:=3.34;d1[i,18]:=3.26; d1[i,19]:=3.21;d1[i,20]:=3.14;d1[i,21]:=3.11;d1[i,22]:=3.06;d1[i,23]:=3.02;d1[i,24]:=3.00; i:=i+1; //15 d1[i,1]:=8.68;d1[i,2]:=6.36;d1[i,3]:=5.42;d1[i,4]:=4.89;d1[i,5]:=4.56;d1[i,6]:=4.32; d1[i,7]:=4.14;d1[i,8]:=4.00;d1[i,9]:=3.89;d1[i,10]:=3.80;d1[i,11]:=3.73;d1[i,12]:=3.67; d1[i,13]:=3.56;d1[i,14]:=3.48;d1[i,15]:=3.36;d1[i,16]:=3.29;d1[i,17]:=3.20;d1[i,18]:=3.12; d1[i,19]:=3.07;d1[i,20]:=3.00;d1[i,21]:=2.97;d1[i,22]:=2.92;d1[i,23]:=2.89;d1[i,24]:=2.87; i:=i+1; //16 d1[i,1]:=8.53;d1[i,2]:=6.23;d1[i,3]:=5.29;d1[i,4]:=4.77;d1[i,5]:=4.44;d1[i,6]:=4.20; d1[i,7]:=4.03;d1[i,8]:=3.89;d1[i,9]:=3.78;d1[i,10]:=3.69;d1[i,11]:=3.61;d1[i,12]:=3.55; d1[i,13]:=3.45;d1[i,14]:=3.37;d1[i,15]:=3.25;d1[i,16]:=3.18;d1[i,17]:=3.10;d1[i,18]:=3.01; d1[i,19]:=2.96;d1[i,20]:=2.90;d1[i,21]:=2.86;d1[i,22]:=2.80;d1[i,23]:=2.77;d1[i,24]:=2.75; i:=i+1; //17 d1[i,1]:=8.40;d1[i,2]:=6.11;d1[i,3]:=5.18;d1[i,4]:=4.67;d1[i,5]:=4.34;d1[i,6]:=4.10; d1[i,7]:=3.93;d1[i,8]:=3.79;d1[i,9]:=3.68;d1[i,10]:=3.59;d1[i,11]:=3.52;d1[i,12]:=3.45; d1[i,13]:=3.35;d1[i,14]:=3.27;d1[i,15]:=3.16;d1[i,16]:=3.08;d1[i,17]:=3.00;d1[i,18]:=2.92; d1[i,19]:=2.86;d1[i,20]:=2.79;d1[i,21]:=2.76;d1[i,22]:=2.70;d1[i,23]:=2.67;d1[i,24]:=2.65; i:=i+1; //18 d1[i,1]:=8.28;d1[i,2]:=6.01;d1[i,3]:=5.09;d1[i,4]:=4.58;d1[i,5]:=4.25;d1[i,6]:=4.01; d1[i,7]:=3.85;d1[i,8]:=3.71;d1[i,9]:=3.60;d1[i,10]:=3.51;d1[i,11]:=3.44;d1[i,12]:=3.37; d1[i,13]:=3.27;d1[i,14]:=3.19;d1[i,15]:=3.07;d1[i,16]:=3.00;d1[i,17]:=2.91;d1[i,18]:=2.83; d1[i,19]:=2.78;d1[i,20]:=2.71;d1[i,21]:=2.68;d1[i,22]:=2.62;d1[i,23]:=2.59;d1[i,24]:=2.57; i:=i+1; //19 d1[i,1]:=8.18;d1[i,2]:=5.93;d1[i,3]:=5.01;d1[i,4]:=4.50;d1[i,5]:=4.17;d1[i,6]:=3.94; d1[i,7]:=3.77;d1[i,8]:=3.63;d1[i,9]:=3.52;d1[i,10]:=3.43;d1[i,11]:=3.36;d1[i,12]:=3.30; d1[i,13]:=3.19;d1[i,14]:=3.12;d1[i,15]:=3.00;d1[i,16]:=2.92;d1[i,17]:=2.84;d1[i,18]:=2.76; d1[i,19]:=2.70;d1[i,20]:=2.63;d1[i,21]:=2.60;d1[i,22]:=2.54;d1[i,23]:=2.51;d1[i,24]:=2.49; i:=i+1; //20 d1[i,1]:=8.10;d1[i,2]:=5.85;d1[i,3]:=4.94;d1[i,4]:=4.43;d1[i,5]:=4.10;d1[i,6]:=3.87; d1[i,7]:=3.71;d1[i,8]:=3.56;d1[i,9]:=3.45;d1[i,10]:=3.37;d1[i,11]:=3.30;d1[i,12]:=3.23; d1[i,13]:=3.13;d1[i,14]:=3.06;d1[i,15]:=2.94;d1[i,16]:=2.86;d1[i,17]:=2.77;d1[i,18]:=2.69; d1[i,19]:=2.63;d1[i,20]:=2.56;d1[i,21]:=2.53;d1[i,22]:=2.47;d1[i,23]:=2.44;d1[i,24]:=2.42; i:=i+1; //21 d1[i,1]:=8.02;d1[i,2]:=5.78;d1[i,3]:=4.87;d1[i,4]:=4.37;d1[i,5]:=4.04;d1[i,6]:=3.81; d1[i,7]:=3.65;d1[i,8]:=3.51;d1[i,9]:=3.40;d1[i,10]:=3.31;d1[i,11]:=3.24;d1[i,12]:=3.17; d1[i,13]:=3.07;d1[i,14]:=2.99;d1[i,15]:=2.88;d1[i,16]:=2.80;d1[i,17]:=2.72;d1[i,18]:=2.63; d1[i,19]:=2.58;d1[i,20]:=2.51;d1[i,21]:=2.47;d1[i,22]:=2.42;d1[i,23]:=2.38;d1[i,24]:=2.36; i:=i+1; //22 d1[i,1]:=7.94;d1[i,2]:=5.72;d1[i,3]:=4.82;d1[i,4]:=4.31;d1[i,5]:=3.99;d1[i,6]:=3.76; d1[i,7]:=3.59;d1[i,8]:=3.45;d1[i,9]:=3.35;d1[i,10]:=3.26;d1[i,11]:=3.18;d1[i,12]:=3.12; d1[i,13]:=3.02;d1[i,14]:=2.94;d1[i,15]:=2.83;d1[i,16]:=2.75;d1[i,17]:=2.67;d1[i,18]:=2.58; d1[i,19]:=2.53;d1[i,20]:=2.46;d1[i,21]:=2.42;d1[i,22]:=2.37;d1[i,23]:=2.33;d1[i,24]:=2.31; i:=i+1; //23 d1[i,1]:=7.88;d1[i,2]:=5.66;d1[i,3]:=4.76;d1[i,4]:=4.26;d1[i,5]:=3.94;d1[i,6]:=3.71;
L 99 d1[i,7]:=3.54;d1[i,8]:=3.41;d1[i,9]:=3.30;d1[i,10]:=3.21;d1[i,11]:=3.14;d1[i,12]:=3.07; d1[i,13]:=2.97;d1[i,14]:=2.89;d1[i,15]:=2.78;d1[i,16]:=2.70;d1[i,17]:=2.62;d1[i,18]:=2.53; d1[i,19]:=2.48;d1[i,20]:=2.41;d1[i,21]:=2.37;d1[i,22]:=2.32;d1[i,23]:=2.28;d1[i,24]:=2.26; i:=i+1; //24 d1[i,1]:=7.82;d1[i,2]:=5.61;d1[i,3]:=4.72;d1[i,4]:=4.22;d1[i,5]:=3.90;d1[i,6]:=3.67; d1[i,7]:=3.50;d1[i,8]:=3.36;d1[i,9]:=3.25;d1[i,10]:=3.17;d1[i,11]:=3.09;d1[i,12]:=3.03; d1[i,13]:=2.93;d1[i,14]:=2.85;d1[i,15]:=2.74;d1[i,16]:=2.66;d1[i,17]:=2.58;d1[i,18]:=2.49; d1[i,19]:=2.44;d1[i,20]:=2.36;d1[i,21]:=2.33;d1[i,22]:=2.27;d1[i,23]:=2.23;d1[i,24]:=2.21; i:=i+1; //25 d1[i,1]:=7.77;d1[i,2]:=5.57;d1[i,3]:=4.68;d1[i,4]:=4.18;d1[i,5]:=3.86;d1[i,6]:=3.63; d1[i,7]:=3.46;d1[i,8]:=3.32;d1[i,9]:=3.21;d1[i,10]:=3.13;d1[i,11]:=3.06;d1[i,12]:=2.99; d1[i,13]:=2.89;d1[i,14]:=2.81;d1[i,15]:=2.70;d1[i,16]:=2.62;d1[i,17]:=2.54;d1[i,18]:=2.45; d1[i,19]:=2.40;d1[i,20]:=2.32;d1[i,21]:=2.29;d1[i,22]:=2.23;d1[i,23]:=2.19;d1[i,24]:=2.17; i:=i+1; //26 d1[i,1]:=7.72;d1[i,2]:=5.53;d1[i,3]:=4.64;d1[i,4]:=4.14;d1[i,5]:=3.82;d1[i,6]:=3.59; d1[i,7]:=3.42;d1[i,8]:=3.29;d1[i,9]:=3.17;d1[i,10]:=3.09;d1[i,11]:=3.02;d1[i,12]:=2.96; d1[i,13]:=2.86;d1[i,14]:=2.77;d1[i,15]:=2.66;d1[i,16]:=2.58;d1[i,17]:=2.50;d1[i,18]:=2.41; d1[i,19]:=2.36;d1[i,20]:=2.28;d1[i,21]:=2.25;d1[i,22]:=2.19;d1[i,23]:=2.15;d1[i,24]:=2.13; i:=i+1; //27 d1[i,1]:=7.68;d1[i,2]:=5.49;d1[i,3]:=4.60;d1[i,4]:=4.11;d1[i,5]:=3.79;d1[i,6]:=3.56; d1[i,7]:=3.39;d1[i,8]:=3.26;d1[i,9]:=3.14;d1[i,10]:=3.06;d1[i,11]:=2.96;d1[i,12]:=2.93; d1[i,13]:=2.83;d1[i,14]:=2.74;d1[i,15]:=2.63;d1[i,16]:=2.55;d1[i,17]:=2.47;d1[i,18]:=2.38; d1[i,19]:=2.33;d1[i,20]:=2.25;d1[i,21]:=2.21;d1[i,22]:=2.16;d1[i,23]:=2.12;d1[i,24]:=2.10; i:=i+1; //28 d1[i,1]:=7.64;d1[i,2]:=5.45;d1[i,3]:=4.57;d1[i,4]:=4.07;d1[i,5]:=3.76;d1[i,6]:=3.53; d1[i,7]:=3.36;d1[i,8]:=3.23;d1[i,9]:=3.11;d1[i,10]:=3.03;d1[i,11]:=2.96;d1[i,12]:=2.90; d1[i,13]:=2.80;d1[i,14]:=2.71;d1[i,15]:=2.60;d1[i,16]:=2.52;d1[i,17]:=2.44;d1[i,18]:=2.35; d1[i,19]:=2.30;d1[i,20]:=2.22;d1[i,21]:=2.18;d1[i,22]:=2.13;d1[i,23]:=2.09;d1[i,24]:=2.06; i:=i+1; //29 d1[i,1]:=7.80;d1[i,2]:=5.42;d1[i,3]:=4.54;d1[i,4]:=4.04;d1[i,5]:=3.73;d1[i,6]:=3.50; d1[i,7]:=3.33;d1[i,8]:=3.20;d1[i,9]:=3.08;d1[i,10]:=3.00;d1[i,11]:=2.92;d1[i,12]:=2.87; d1[i,13]:=2.77;d1[i,14]:=2.68;d1[i,15]:=2.57;d1[i,16]:=2.49;d1[i,17]:=2.41;d1[i,18]:=2.32; d1[i,19]:=2.27;d1[i,20]:=2.19;d1[i,21]:=2.15;d1[i,22]:=2.10;d1[i,23]:=2.06;d1[i,24]:=2.03; i:=i+1; //30 d1[i,1]:=7.56;d1[i,2]:=5.39;d1[i,3]:=4.51;d1[i,4]:=4.02;d1[i,5]:=3.70;d1[i,6]:=3.47; d1[i,7]:=3.30;d1[i,8]:=3.17;d1[i,9]:=3.06;d1[i,10]:=2.96;d1[i,11]:=2.90;d1[i,12]:=2.84; d1[i,13]:=2.74;d1[i,14]:=2.66;d1[i,15]:=2.55;d1[i,16]:=2.47;d1[i,17]:=2.38;d1[i,18]:=2.29; d1[i,19]:=2.24;d1[i,20]:=2.16;d1[i,21]:=2.13;d1[i,22]:=2.07;d1[i,23]:=2.03;d1[i,24]:=2.01; i:=i+1; //32 d1[i,1]:=7.50;d1[i,2]:=5.34;d1[i,3]:=4.46;d1[i,4]:=3.97;d1[i,5]:=3.66;d1[i,6]:=3.42; d1[i,7]:=3.25;d1[i,8]:=3.12;d1[i,9]:=3.01;d1[i,10]:=2.94;d1[i,11]:=2.86;d1[i,12]:=2.80; d1[i,13]:=2.70;d1[i,14]:=2.62;d1[i,15]:=2.51;d1[i,16]:=2.42;d1[i,17]:=2.34;d1[i,18]:=2.25; d1[i,19]:=2.20;d1[i,20]:=2.12;d1[i,21]:=2.08;d1[i,22]:=2.02;d1[i,23]:=1.98;d1[i,24]:=1.96; i:=i+1; //34 d1[i,1]:=7.44;d1[i,2]:=5.29;d1[i,3]:=4.42;d1[i,4]:=3.93;d1[i,5]:=3.61;d1[i,6]:=3.38; d1[i,7]:=3.21;d1[i,8]:=3.08;d1[i,9]:=2.97;d1[i,10]:=2.89;d1[i,11]:=2.82;d1[i,12]:=2.76; d1[i,13]:=2.66;d1[i,14]:=2.58;d1[i,15]:=2.47;d1[i,16]:=2.38;d1[i,17]:=2.30;d1[i,18]:=2.21;
L100 d1[i,19]:=2.15;d1[i,20]:=2.08;d1[i,21]:=2.04;d1[i,22]:=1.98;d1[i,23]:=1.94;d1[i,24]:=1.91; i:=i+1; //36 d1[i,1]:=7.39;d1[i,2]:=5.25;d1[i,3]:=4.38;d1[i,4]:=3.89;d1[i,5]:=3.58;d1[i,6]:=3.35; d1[i,7]:=3.18;d1[i,8]:=3.04;d1[i,9]:=2.94;d1[i,10]:=2.86;d1[i,11]:=2.78;d1[i,12]:=2.72; d1[i,13]:=2.62;d1[i,14]:=2.54;d1[i,15]:=2.43;d1[i,16]:=2.35;d1[i,17]:=2.26;d1[i,18]:=2.17; d1[i,19]:=2.12;d1[i,20]:=2.04;d1[i,21]:=2.00;d1[i,22]:=1.94;d1[i,23]:=1.90;d1[i,24]:=1.87; i:=i+1; //38 d1[i,1]:=7.35;d1[i,2]:=5.21;d1[i,3]:=4.34;d1[i,4]:=3.86;d1[i,5]:=3.54;d1[i,6]:=3.32; d1[i,7]:=3.15;d1[i,8]:=3.02;d1[i,9]:=2.91;d1[i,10]:=2.82;d1[i,11]:=2.75;d1[i,12]:=2.69; d1[i,13]:=2.59;d1[i,14]:=2.51;d1[i,15]:=2.40;d1[i,16]:=2.32;d1[i,17]:=2.22;d1[i,18]:=2.14; d1[i,19]:=2.08;d1[i,20]:=2.00;d1[i,21]:=1.97;d1[i,22]:=1.90;d1[i,23]:=1.86;d1[i,24]:=1.84; i:=i+1; //40 d1[i,1]:=7.31;d1[i,2]:=5.18;d1[i,3]:=4.31;d1[i,4]:=3.83;d1[i,5]:=3.51;d1[i,6]:=3.29; d1[i,7]:=3.12;d1[i,8]:=2.99;d1[i,9]:=2.88;d1[i,10]:=2.80;d1[i,11]:=2.73;d1[i,12]:=2.66; d1[i,13]:=2.56;d1[i,14]:=2.49;d1[i,15]:=2.37;d1[i,16]:=2.29;d1[i,17]:=2.20;d1[i,18]:=2.11; d1[i,19]:=2.05;d1[i,20]:=1.97;d1[i,21]:=1.94;d1[i,22]:=1.88;d1[i,23]:=1.84;d1[i,24]:=1.81; i:=i+1; //42 d1[i,1]:=7.27;d1[i,2]:=5.15;d1[i,3]:=4.29;d1[i,4]:=3.80;d1[i,5]:=3.49;d1[i,6]:=3.26; d1[i,7]:=3.10;d1[i,8]:=2.96;d1[i,9]:=2.86;d1[i,10]:=2.77;d1[i,11]:=2.70;d1[i,12]:=2.64; d1[i,13]:=2.54;d1[i,14]:=2.46;d1[i,15]:=2.35;d1[i,16]:=2.26;d1[i,17]:=2.17;d1[i,18]:=2.08; d1[i,19]:=2.02;d1[i,20]:=1.94;d1[i,21]:=1.91;d1[i,22]:=1.85;d1[i,23]:=1.80;d1[i,24]:=1.78; i:=i+1; //44 d1[i,1]:=7.24;d1[i,2]:=5.12;d1[i,3]:=4.26;d1[i,4]:=3.78;d1[i,5]:=3.46;d1[i,6]:=3.24; d1[i,7]:=3.07;d1[i,8]:=2.94;d1[i,9]:=2.84;d1[i,10]:=2.75;d1[i,11]:=2.68;d1[i,12]:=2.62; d1[i,13]:=2.52;d1[i,14]:=2.44;d1[i,15]:=2.32;d1[i,16]:=2.24;d1[i,17]:=2.15;d1[i,18]:=2.06; d1[i,19]:=2.00;d1[i,20]:=1.92;d1[i,21]:=1.88;d1[i,22]:=1.82;d1[i,23]:=1.78;d1[i,24]:=1.75; i:=i+1; //46 d1[i,1]:=7.21;d1[i,2]:=5.10;d1[i,3]:=4.24;d1[i,4]:=3.76;d1[i,5]:=3.44;d1[i,6]:=3.22; d1[i,7]:=3.05;d1[i,8]:=2.92;d1[i,9]:=2.82;d1[i,10]:=2.73;d1[i,11]:=2.66;d1[i,12]:=2.60; d1[i,13]:=2.50;d1[i,14]:=2.42;d1[i,15]:=2.30;d1[i,16]:=2.22;d1[i,17]:=2.13;d1[i,18]:=2.04; d1[i,19]:=1.98;d1[i,20]:=1.90;d1[i,21]:=1.86;d1[i,22]:=1.80;d1[i,23]:=1.76;d1[i,24]:=1.72; i:=i+1; //48 d1[i,1]:=7.19;d1[i,2]:=5.08;d1[i,3]:=4.22;d1[i,4]:=3.74;d1[i,5]:=3.42;d1[i,6]:=3.20; d1[i,7]:=3.04;d1[i,8]:=2.90;d1[i,9]:=2.80;d1[i,10]:=2.71;d1[i,11]:=2.64;d1[i,12]:=2.58; d1[i,13]:=2.48;d1[i,14]:=2.40;d1[i,15]:=2.28;d1[i,16]:=2.20;d1[i,17]:=2.11;d1[i,18]:=2.02; d1[i,19]:=1.96;d1[i,20]:=1.88;d1[i,21]:=1.84;d1[i,22]:=1.78;d1[i,23]:=1.73;d1[i,24]:=1.70; i:=i+1; //50 d1[i,1]:=7.17;d1[i,2]:=5.06;d1[i,3]:=4.20;d1[i,4]:=3.72;d1[i,5]:=3.41;d1[i,6]:=3.18; d1[i,7]:=3.02;d1[i,8]:=2.88;d1[i,9]:=2.78;d1[i,10]:=2.70;d1[i,11]:=2.62;d1[i,12]:=2.56; d1[i,13]:=2.46;d1[i,14]:=2.39;d1[i,15]:=2.26;d1[i,16]:=2.18;d1[i,17]:=2.10;d1[i,18]:=2.00; d1[i,19]:=1.94;d1[i,20]:=1.86;d1[i,21]:=1.82;d1[i,22]:=1.76;d1[i,23]:=1.71;d1[i,24]:=1.68; i:=i+1; //55 d1[i,1]:=7.12;d1[i,2]:=5.01;d1[i,3]:=4.16;d1[i,4]:=3.63;d1[i,5]:=3.37;d1[i,6]:=3.15; d1[i,7]:=2.98;d1[i,8]:=2.85;d1[i,9]:=2.75;d1[i,10]:=2.66;d1[i,11]:=2.59;d1[i,12]:=2.53; d1[i,13]:=2.43;d1[i,14]:=2.35;d1[i,15]:=2.23;d1[i,16]:=2.15;d1[i,17]:=2.08;d1[i,18]:=1.96; d1[i,19]:=1.90;d1[i,20]:=1.82;d1[i,21]:=1.78;d1[i,22]:=1.71;d1[i,23]:=1.66;d1[i,24]:=1.64; i:=i+1; //60
L101 d1[i,1]:=7.08;d1[i,2]:=4.98;d1[i,3]:=4.13;d1[i,4]:=3.65;d1[i,5]:=3.34;d1[i,6]:=3.12; d1[i,7]:=2.96;d1[i,8]:=2.82;d1[i,9]:=2.72;d1[i,10]:=2.63;d1[i,11]:=2.56;d1[i,12]:=2.50; d1[i,13]:=2.40;d1[i,14]:=2.32;d1[i,15]:=2.20;d1[i,16]:=2.12;d1[i,17]:=2.03;d1[i,18]:=1.93; d1[i,19]:=1.87;d1[i,20]:=1.79;d1[i,21]:=1.74;d1[i,22]:=1.68;d1[i,23]:=1.63;d1[i,24]:=1.60; i:=i+1; //70 d1[i,1]:=7.01;d1[i,2]:=4.92;d1[i,3]:=4.08;d1[i,4]:=3.60;d1[i,5]:=3.29;d1[i,6]:=3.07; d1[i,7]:=2.91;d1[i,8]:=2.77;d1[i,9]:=2.67;d1[i,10]:=2.59;d1[i,11]:=2.51;d1[i,12]:=2.45; d1[i,13]:=2.35;d1[i,14]:=2.28;d1[i,15]:=2.15;d1[i,16]:=2.07;d1[i,17]:=1.98;d1[i,18]:=1.88; d1[i,19]:=1.82;d1[i,20]:=1.74;d1[i,21]:=1.69;d1[i,22]:=1.62;d1[i,23]:=1.56;d1[i,24]:=1.53; i:=i+1; //80 d1[i,1]:=6.96;d1[i,2]:=4.88;d1[i,3]:=4.04;d1[i,4]:=3.56;d1[i,5]:=3.25;d1[i,6]:=3.04; d1[i,7]:=2.87;d1[i,8]:=2.74;d1[i,9]:=2.64;d1[i,10]:=2.55;d1[i,11]:=2.48;d1[i,12]:=2.41; d1[i,13]:=2.32;d1[i,14]:=2.24;d1[i,15]:=2.11;d1[i,16]:=2.03;d1[i,17]:=1.94;d1[i,18]:=1.84; d1[i,19]:=1.78;d1[i,20]:=1.70;d1[i,21]:=1.65;d1[i,22]:=1.57;d1[i,23]:=1.52;d1[i,24]:=1.49; i:=i+1; //100 d1[i,1]:=6.90;d1[i,2]:=4.82;d1[i,3]:=3.98;d1[i,4]:=3.51;d1[i,5]:=3.20;d1[i,6]:=2.99; d1[i,7]:=2.82;d1[i,8]:=2.69;d1[i,9]:=2.59;d1[i,10]:=2.51;d1[i,11]:=2.43;d1[i,12]:=2.36; d1[i,13]:=2.26;d1[i,14]:=2.19;d1[i,15]:=2.06;d1[i,16]:=1.96;d1[i,17]:=1.89;d1[i,18]:=1.79; d1[i,19]:=1.73;d1[i,20]:=1.64;d1[i,21]:=1.59;d1[i,22]:=1.51;d1[i,23]:=1.46;d1[i,24]:=1.43; i:=i+1; //125 d1[i,1]:=6.84;d1[i,2]:=4.78;d1[i,3]:=3.94;d1[i,4]:=3.47;d1[i,5]:=3.17;d1[i,6]:=2.96; d1[i,7]:=2.79;d1[i,8]:=2.65;d1[i,9]:=2.56;d1[i,10]:=2.47;d1[i,11]:=2.40;d1[i,12]:=2.33; d1[i,13]:=2.23;d1[i,14]:=2.15;d1[i,15]:=2.03;d1[i,16]:=1.94;d1[i,17]:=1.85;d1[i,18]:=1.75; d1[i,19]:=1.68;d1[i,20]:=1.59;d1[i,21]:=1.54;d1[i,22]:=1.46;d1[i,23]:=1.40;d1[i,24]:=1.37; i:=i+1; //150 d1[i,1]:=6.81;d1[i,2]:=4.75;d1[i,3]:=3.91;d1[i,4]:=3.44;d1[i,5]:=3.14;d1[i,6]:=2.91; d1[i,7]:=2.76;d1[i,8]:=2.62;d1[i,9]:=2.53;d1[i,10]:=2.44;d1[i,11]:=2.37;d1[i,12]:=2.30; d1[i,13]:=2.20;d1[i,14]:=2.12;d1[i,15]:=2.00;d1[i,16]:=1.91;d1[i,17]:=1.83;d1[i,18]:=1.72; d1[i,19]:=1.65;d1[i,20]:=1.56;d1[i,21]:=1.51;d1[i,22]:=1.43;d1[i,23]:=1.37;d1[i,24]:=1.33; i:=i+1; //200 d1[i,1]:=6.76;d1[i,2]:=4.71;d1[i,3]:=3.88;d1[i,4]:=3.41;d1[i,5]:=3.11;d1[i,6]:=2.90; d1[i,7]:=2.73;d1[i,8]:=2.60;d1[i,9]:=2.50;d1[i,10]:=2.41;d1[i,11]:=2.34;d1[i,12]:=2.28; d1[i,13]:=2.17;d1[i,14]:=2.09;d1[i,15]:=1.97;d1[i,16]:=1.88;d1[i,17]:=1.79;d1[i,18]:=1.69; d1[i,19]:=1.62;d1[i,20]:=1.53;d1[i,21]:=1.48;d1[i,22]:=1.39;d1[i,23]:=1.33;d1[i,24]:=1.28; i:=i+1; //400 d1[i,1]:=6.70;d1[i,2]:=4.66;d1[i,3]:=3.83;d1[i,4]:=3.36;d1[i,5]:=3.08;d1[i,6]:=2.85; d1[i,7]:=2.69;d1[i,8]:=2.55;d1[i,9]:=2.46;d1[i,10]:=2.37;d1[i,11]:=2.29;d1[i,12]:=2.23; d1[i,13]:=2.12;d1[i,14]:=2.04;d1[i,15]:=1.92;d1[i,16]:=1.84;d1[i,17]:=1.74;d1[i,18]:=1.64; d1[i,19]:=1.57;d1[i,20]:=1.47;d1[i,21]:=1.42;d1[i,22]:=1.32;d1[i,23]:=1.24;d1[i,24]:=1.19; i:=i+1; //1000 d1[i,1]:=6.66;d1[i,2]:=4.62;d1[i,3]:=3.80;d1[i,4]:=3.34;d1[i,5]:=3.04;d1[i,6]:=2.82; d1[i,7]:=2.66;d1[i,8]:=2.53;d1[i,9]:=2.43;d1[i,10]:=2.34;d1[i,11]:=2.26;d1[i,12]:=2.20; d1[i,13]:=2.09;d1[i,14]:=2.01;d1[i,15]:=1.89;d1[i,16]:=1.81;d1[i,17]:=1.71;d1[i,18]:=1.61; d1[i,19]:=1.54;d1[i,20]:=1.44;d1[i,21]:=1.38;d1[i,22]:=1.28;d1[i,23]:=1.19;d1[i,24]:=1.11; i:=i+1; //tak hingga d1[i,1]:=6.64;d1[i,2]:=4.60;d1[i,3]:=3.78;d1[i,4]:=3.32;d1[i,5]:=3.02;d1[i,6]:=2.80; d1[i,7]:=2.64;d1[i,8]:=2.51;d1[i,9]:=2.41;d1[i,10]:=2.32;d1[i,11]:=2.24;d1[i,12]:=2.18;
L102 d1[i,13]:=2.07;d1[i,14]:=1.99;d1[i,15]:=1.87;d1[i,16]:=1.79;d1[i,17]:=1.69;d1[i,18]:=1.59; d1[i,19]:=1.52;d1[i,20]:=1.41;d1[i,21]:=1.38;d1[i,22]:=1.25;d1[i,23]:=1.15;d1[i,24]:=1.00; end; function GetFTable(P:integer;f1,f2:integer):real; var hasil:real; i,j,flag,flag2,kiri,kanan,atas,bawah,skiri,skanan,satas,sbawah:integer; begin // if P=5 then Buat5P else Buat1P; i:=0;j:=0; hasil:=0; atas:=0; bawah:=0; satas:=0; sbawah:=0; kiri:=0; kanan:=0; skiri:=0; skanan:=0; flag:=0; case f1 of 1:j:=1; 2:j:=2; 3:j:=3; 4:j:=4; 5:j:=5; 6:j:=6; 7:j:=7; 8:j:=8; 9:j:=9; 10:j:=10; 11:j:=11; 12..13:Begin if f1=12 then begin flag:=0; J:=12; end else begin flag:=1; kiri:=12; kanan:=13; skiri:=12; skanan:=14; end; end; 14..15:Begin if f1=14 then begin flag:=0; J:=13; end else begin flag:=1; kiri:=13; kanan:=14; skiri:=14; skanan:=16; end; end; 16..19:Begin if f1=16 then begin flag:=0; J:=14; end else
L103 begin flag:=1; kiri:=14; kanan:=15; skiri:=16; skanan:=20; end; end; 20..23:Begin if f1=20 then begin flag:=0; J:=15; end else begin flag:=1; kiri:=15; kanan:=16; skiri:=20; skanan:=24; end; end; 24..29:Begin if f1=24 then begin flag:=0; J:=16; end else begin flag:=1; kiri:=16; kanan:=17; skiri:=24; skanan:=30; end; end; 30..39:Begin if f1=30 then begin flag:=0; J:=17; end else begin flag:=1; kiri:=17; kanan:=18; skiri:=30; skanan:=40; end; end; 40..49:Begin if f1=40 then begin flag:=0; J:=18; end else begin flag:=1; kiri:=18; kanan:=19; skiri:=40; skanan:=50; end; end; 50..74:Begin if f1=50 then begin flag:=0; J:=19; end else begin flag:=1; kiri:=19; kanan:=20; skiri:=50; skanan:=75;
L104 end; end; 75..99:Begin if f1=75 then begin flag:=0; J:=20; end else begin flag:=1; kiri:=20; kanan:=21; skiri:=75; skanan:=100; end; end; 100..199:Begin if f1=100 then begin flag:=0; J:=21; end else begin flag:=1; kiri:=21; kanan:=22; skiri:=100; skanan:=200; end; end; 200..499:Begin if f1=200 then begin flag:=0; J:=22; end else begin flag:=1; kiri:=22; kanan:=23; skiri:=200; skanan:=500; end; end; 500..1000:Begin if f1=500 then begin flag:=0; J:=23; end else begin flag:=1; kiri:=23; kanan:=24; skiri:=500; skanan:=1000; end; end; end; flag2:=0; case f2 of 1:i:=1; 2:i:=2; 3:i:=3; 4:i:=4; 5:i:=5; 6:i:=6;
L105 7:i:=7; 8:i:=8; 9:i:=9; 10:i:=10; 11:i:=11; 12:i:=12; 13:i:=13; 14:i:=14; 15:i:=15; 16:i:=16; 17:i:=17; 18:i:=18; 19:i:=19; 20:i:=20; 21:i:=21; 22:i:=22; 23:i:=23; 24:i:=24; 25:i:=25; 26:i:=26; 27:i:=27; 28:i:=28; 29:i:=29; 30..31:Begin if f2=30 then begin flag2:=0; i:=30; end else begin flag2:=1; atas:=30; bawah:=31; satas:=30; sbawah:=32; end; end; 32..33:Begin if f2=32 then begin flag2:=0; i:=31; end else begin flag2:=1; atas:=31; bawah:=32; satas:=32; sbawah:=34; end; end; 34..35:Begin if f2=34 then begin flag2:=0; i:=32; end else begin
L106 flag2:=1; atas:=32; bawah:=33; satas:=34; sbawah:=36; end; end; 36..37:Begin if f2=36 then begin flag2:=0; i:=33; end else begin flag2:=1; atas:=33; bawah:=34; satas:=36; sbawah:=38; end; end; 38..39:Begin if f2=38 then begin flag2:=0; i:=34; end else begin flag2:=1; atas:=34; bawah:=35; satas:=38; sbawah:=40; end; end; 40..41:Begin if f2=40 then begin flag2:=0; i:=35; end else begin flag2:=1; atas:=35; bawah:=36; satas:=40; sbawah:=42; end; end; 42..43:Begin if f2=42 then begin flag2:=0; i:=36; end else begin flag2:=1; atas:=36; bawah:=37; satas:=42; sbawah:=44; end; end; 44..45:Begin if f2=44 then begin flag2:=0; i:=37; end else begin flag2:=1; atas:=37; bawah:=38; satas:=44; sbawah:=46; end;
L107 end; 46..47:Begin if f2=46 then begin flag2:=0; i:=38; end else begin flag2:=1; atas:=38; bawah:=39; satas:=46; sbawah:=48; end; end; 48..49:Begin if f2=48 then begin flag2:=0; i:=39; end else begin flag2:=1; atas:=39; bawah:=40; satas:=48; sbawah:=50; end; end; 50..54:Begin if f2=50 then begin flag2:=0; i:=40; end else begin flag2:=1; atas:=40; bawah:=41; satas:=50; sbawah:=55; end; end; 55..59:Begin if f2=55 then begin flag2:=0; i:=41; end else begin flag2:=1; atas:=41; bawah:=42; satas:=55; sbawah:=60; end; end; 60..64:Begin if f2=60 then begin flag2:=0; i:=42; end else begin flag2:=1; atas:=42; bawah:=43; satas:=60; sbawah:=65; end; end; 65..69:Begin
L108 if f2=65 then begin flag2:=0; i:=43; end else begin flag2:=1; atas:=43; bawah:=44; satas:=65; sbawah:=70; end; end; 70..79:Begin if f2=70 then begin flag2:=0; i:=44; end else begin flag2:=1; atas:=44; bawah:=45; satas:=70; sbawah:=80; end; end; 80..99:Begin if f2=80 then begin flag2:=0; i:=45; end else begin flag2:=1; atas:=45; bawah:=46; satas:=80; sbawah:=100; end; end; 100..124:Begin if f2=100 then begin flag2:=0; i:=46; end else begin flag2:=1; atas:=46; bawah:=47; satas:=100; sbawah:=125; end; end; 125..149:Begin if f2=125 then begin flag2:=0; i:=47; end else begin flag2:=1; atas:=47; bawah:=48; satas:=125; sbawah:=150; end; end; 150..199:Begin if f2=150 then
L109 begin flag2:=0; i:=48; end else begin flag2:=1; atas:=48; bawah:=49; satas:=150; sbawah:=200; end; end; 200..339:Begin if f2=200 then begin flag2:=0; i:=49; end else begin flag2:=1; atas:=49; bawah:=50; satas:=200; sbawah:=400; end; end; 400..999:Begin if f2=400 then begin flag2:=0; i:=50; end else begin flag2:=1; atas:=50; bawah:=51; satas:=400; sbawah:=1000; end; end; 1000..2000:begin if f2=1000 then begin flag2:=0; i:=51; end else begin flag2:=1; atas:=51; bawah:=52; satas:=1000; sbawah:=2000; end; end; end; //-----------------if P=5 then begin if (flag=0) and (flag2=0) then begin hasil:=d5[i,j]; end else if (flag=1) and (flag2=0) then begin if d5[i,kiri]>d5[i,kanan] then
L110 hasil:=d5[i,kanan]+(((f1-skiri)/(skanan-skiri))*(d5[i,kiri]-d5[i,kanan])) else if d5[i,kiri]d5[bawah,j] then hasil:=d5[bawah,j]+(((f1-satas)/(sbawah-satas))*(d5[atas,j]-d5[bawah,j])) else if d5[atas,j]d1[i,kanan] then hasil:=d1[i,kanan]+(((f1-skiri)/(skanan-skiri))*(d1[i,kiri]-d1[i,kanan])) else if d1[i,kiri]d1[bawah,j] then hasil:=d1[bawah,j]+(((f1-satas)/(sbawah-satas))*(d1[atas,j]-d1[bawah,j])) else if d1[atas,j]
L111 interface uses Windows, Classes, Graphics, Forms, Controls, StdCtrls, Buttons, ExtCtrls, jpeg, LMDControl, LMDBaseControl, LMDBaseGraphicControl, LMDGraphicControl, LMDScrollText; type TAboutBox = class(TForm) Panel1: TPanel; About: TImage; LMDScrollText1: TLMDScrollText; Label1: TLabel; procedure FormCreate(Sender: TObject); procedure Label1Click(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations } end; var AboutBox: TAboutBox; str1:array[1..25] of string; count:integer; implementation {$R *.dfm} procedure TAboutBox.FormCreate(Sender: TObject); begin SetWindowLong(Handle, GWL_STYLE,GetWindowLong(Handle, GWL_STYLE) and not WS_CAPTION); ClientHeight := Height - 45; end; procedure TAboutBox.Label1Click(Sender: TObject); begin aboutbox.Close; end; procedure TAboutBox.FormKeyPress(Sender: TObject; var Key: Char); begin if (Key=#13) or (Key=#27) then Aboutbox.Close; end; procedure TAboutBox.FormClose(Sender: TObject; var Action: TCloseAction); begin LMDScrollText1.Scroll:=false; end;
L112 procedure TAboutBox.FormActivate(Sender: TObject); begin LMDScrollText1.Scroll:=true; end; end.