Upload
trancong
View
228
Download
0
Embed Size (px)
Citation preview
PERANCANGAN PROGRAM APLIKASI PENGOLAHAN DATA PERCOBAAN MENGGUNAKAN METODE
PEMBANDING ORTOGONAL
SKRIPSI
Oleh
LUWI DARMAWAN 0300478582
UNIVERSITAS BINA NUSANTARA JAKARTA
2004
i
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
ii
Kupersembahkan untukKedua orang tuaku, kakakku dan adikku
serta seseorang yang sangat ku cintai
iii
PERANCANGAN PROGRAM APLIKASI PENGOLAHAN DATA PERCOBAAN MENGGUNAKAN METODE
PEMBANDING ORTOGONAL
SKRIPSI
Oleh
Luwi Darmawan NIM: 0300478582
disetujui oleh Pembimbing
Ir. Abdul Hamang, MS Drs. Agus Prahono, M.Eng.Sc D0527 D0208
UNIVERSITAS BINA NUSANTARA JAKARTA
2004
iv
v
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.
vi
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 sebesar-
besarnya 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.
vii
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 TI-
STAT99.
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
viii
DAFTAR ISI
Halaman
JUDUL DALAM .............................................................................................. i
LEMBAR PERSETUJUAN PEMBIMBING ......…….................................... iii
LEMBAR PENGESAHAN ..................................…………………………. iv
ABSTRAK ....................................................................................................... v
KATA PENGANTAR ...................................................................................... vi
DAFTAR ISI ..................................................................................................... viii
DAFTAR TABEL ............................................................................................. xi
DAFTAR GAMBAR ........................................................................................ xii
DAFTAR LAMPIRAN .................................................................................... 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
1.5 Metodologi .................................................................................... 6
1.6 Sistematika Penulisan .................................................................... 7
BAB 2 LANDASAN TEORI ........................................................................... 8
2.1 Kerangka Teori ............................................................................. 8
2.1.1 Konsep Dasar Rekayasa Piranti Lunak ............................ 8
ix
2.1.1.1 Pengertian Rekayasa Piranti Lunak ................... 8
2.1.1.2 Paradigma Rekayasa Piranti Lunak .................... 8
2.1.2 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.5 Percobaan Faktorial dengan Rancangan Dasar Rancangan
Acak Kelompok (RAK) .................................................. 16
2.1.6 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 ......................................................................... 30
BAB 3 PERANCANGAN ............................................................................... 32
3.1 Gambaran Umum Instansi ...................................................... 32
3.1.1 Sejarah Singkat Instansi .................................................... 32
3.1.2 Struktur Organisasi ........................................................... 33
x
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
3.6 Rancangan Layar ....................................................................... 42
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 ..................................................................................... 79
5.2 Saran .......................................................................................... 79
DAFTAR PUSTAKA ...................................................................................... 81
DAFTAR RIWAYAT HIDUP ....................................................................... 82
LAMPIRAN-LAMPIRAN ............................................................................... 83
xi
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
xii
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
xiii
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 ..................... 71
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
xiv
DAFTAR LAMPIRAN
Halaman
Lampiran 1 Data Penelitian ................................................................................. L1
Lampiran 2 Struktur Organisasi ........................................................................... L2
Lampiran 3 Listing Program ................................................................................ L3
Lampiran 4 Surat Keterangan Survei .................................................................. L113
1
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.
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.
8
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 :
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
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.
State 1 State 2
Condition Action
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 langkah-
langkah 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 :
;)( ijkijjikijk ABBAKuY ∈+++++= 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
Bj = pengaruh aditif dari taraf ke-j faktor B
(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 :
pengamatanbanyak )umum total( 22
.. ==rabY
FK ..................................(1)
FKYJKTkji
ijk −= ∑,,
2 ............................ (2)
JKT = jumlah kuadrat nilai pengamatan – faktor koreksi
( ) FKab
FKab
YJKK k
k
−=−= ∑∑ 2
2.. kelompok total ............................(3)
20
( ) FKr
FKr
YJKP ji
ij
−=−= ∑∑ 2
,
2. perlakuan total ........................... (4)
JKG = JKT – JKK – JKP ......................…. (5)
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 :
JK (A) =( )
FKrb
ai
i
−∑ 2
= ( )∑ rbAfaktor taraftotal 2
- FK ........(10)
JK (B) =( )
FKra
bj
j
−∑ 2
= ( )∑ raBfaktor taraftotal 2
- FK ........(11)
JK (A x B) = JKP – JK (A) – JK (B) ...................(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) = 1
)(−a
AJK ................................(16)
KT (B) = 1
)(−b
BJK ................................(17)
KT (A x B) = )1)(1(
)(−− ba
AxBJK ................................(18)
KT Galat = )1)(1(
galatJK −− abr
................................(19)
Tahap 6. Menghitung nilai F untuk masing-masing dari ketiga komponen faktorial,
sebagai berikut :
F (A) = KTGalat
AKT )( ..................................(20)
F (B) = KTGalat
BKT )( ..................................(21)
F (A x B) =KTGalat
AxBKT )( ..................................(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 :
kk = umumrataan
GalatKTx 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
F Tabel Sumber
Keragaman
Derajat
Bebas
Jumlah
Kuadrat
Kuadrat
Tengah
F
Hitung 5 % 1 %
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 x B (a-1)(b-1) JK (AxB) KT(AxB) F (AxB)
Galat (r-1)(ab-1) JKG KTG
Total rab –1 JKT -
2.1.6 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 perlakuan-
perlakuan 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 :
L = ∑=
t
iiiTc
1
........................(24)
= c1T1 + c2T2 + ... + ciTi
24
Menurut Gomez dan Gomez (1995, p223), JK kontras linier JK(L) ber-db
tunggal dihitung sebagai berikut :
JK(L) = )( 2
2
∑CrL ..............................(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
iiicc
121 = c11c21 + c12c22 + ... + c1tc2t = 0 ...............................(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 perlakuan-
perlakuan 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 :
nn XXXY βββα ++++= ...2
21 .........................(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 :
( )∑∑= 2
2
)(crL
LJK .................. (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
GalatKTJK
F ii = .................... (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 = sisadbsisaJK ........................... (29)
F = galat KTsisa KT ........................... (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 langkah-
langkah 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 :
ii XaL += ...............................(31)
2iii XcXbQ ++= ...............................(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
i
t
iii XtaL
1 1
0 ................................(33)
∑∑∑===
=++=t
ii
t
ii
t
ii XXctbQ
1
2
11
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:
tX
a ∑−= ..................................(35)
( )( ) ( )( ) ( )22
223
∑∑∑∑∑
−
−=
XXt
XXXb ........................(36)
( )( ) ( )( ) ( )22
32
∑∑∑∑∑
−
−=
XXt
XtXXc ........................(37)
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 data-
data 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.
32
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
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 (run-
time).
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.
60
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.
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 MSTAT RANCOB1. Dapat melakukan proses disain rancangan Tidak Ya2. Dapat mengambil data dari program Spreadsheet Tidak Ya3. Input koefisien Polinomial Ortogonal Ya Tidak4. Struktur Menu dikelompokkan ke dalam sub-sub menu Tidak Ya5. Media penyimpanan data Hanya Disket Semua Media6. Output grafik permukaan respon Tidak Ya7. Media penyimpanan output Hanya Disket Semua Media
PROGRAM
4.3.1 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 meng-
klik 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 rata-
rata 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.
79
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 :
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.
81
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.
82
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
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.Text)); 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,dbGalat),GetFTable(1,dbPerlakuanA,dbGalat)); Label55.Caption:=format('%8.2f',[HitFB])+CekNyata(HitFB,GetFTable(5,dbPerlakuanB,dbGalat),GetFTable(1,dbPerlakuanB,dbGalat)); Label56.Caption:=format('%8.2f',[HitFAxB])+CekNyata(HitFAxB,GetFTable(5,dbPerlakuanAxB,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(GetDBInt(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(GetDBInt(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(GetDBInt(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(GetDBInt(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),GetFTable(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(GetDBInt(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),GetFTable(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(GetDBInt(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<c) and (a>b)) then tamp:='*' else if a<b then tamp:='tn'; Result:=tamp; end; end. Unit PolOrt; nterface uses SysUtils,QDialogs; procedure isidata(bar,kol,r1,a1,b1:integer;c:real); procedure setbarkol(b2,k2:integer); procedure isikoef(bar,kol:integer;a:real); procedure isiHasilAxB(F:integer); function GetJumFak(NmFak,NoPerlak:integer):real; function HitJKFU(NmFak,D:integer):real; function HitJKFInteraksi(NmFak,D:integer):real; implementation var baris,kolom,r,a,b:integer; data:array [1..110,1..10] of real; koef:array [1..6,1..7] of real; HasilAxB:array[1..6,1..6]of real; dec:integer; procedure isidata(bar,kol,r1,a1,b1:integer;c:real);
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])<kecil then begin kecil:=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,18]:=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,24]:=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.71; 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.63; 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.36; 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]:=6286; d1[i,19]:=6302;d1[i,20]:=6323;d1[i,21]:=6334;d1[i,22]:=6352;d1[i,23]:=6361;d1[i,24]:=6366; 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;
L 100
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
L 101
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;
L 102
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
L 103
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;
L 104
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;
L 105
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
L 106
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;
L 107
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
L 108
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
L 109
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
L 110
hasil:=d5[i,kanan]+(((f1-skiri)/(skanan-skiri))*(d5[i,kiri]-d5[i,kanan])) else if d5[i,kiri]<d5[i,kanan] then hasil:=d5[i,kiri]-(((f1-skiri)/(skanan-skiri))*(d5[i,kanan]-d5[i,kiri])) else if d5[i,kiri]=d5[i,kanan] then hasil:=d5[i,kiri]; end; if (flag=0) and (flag2=1) then begin if d5[atas,j]>d5[bawah,j] then hasil:=d5[bawah,j]+(((f1-satas)/(sbawah-satas))*(d5[atas,j]-d5[bawah,j])) else if d5[atas,j]<d5[bawah,j] then hasil:=d5[atas,j]+(((f1-satas)/(sbawah-satas))*(d5[bawah,j]-d5[atas,j])) else if d5[atas,j]=d5[bawah,j] then hasil:=d5[atas,j]; end; end; if P=1 then begin if (flag=0) and (flag2=0) then begin hasil:=d1[i,j]; end else if (flag=1) and (flag2=0) then begin if d1[i,kiri]>d1[i,kanan] then hasil:=d1[i,kanan]+(((f1-skiri)/(skanan-skiri))*(d1[i,kiri]-d1[i,kanan])) else if d1[i,kiri]<d1[i,kanan] then hasil:=d1[i,kiri]+(((f1-skiri)/(skanan-skiri))*(d1[i,kanan]-d1[i,kiri])) else if d1[i,kiri]=d1[i,kanan] then hasil:=d1[i,kiri]; end; if (flag=0) and (flag2=1) then begin if d1[atas,j]>d1[bawah,j] then hasil:=d1[bawah,j]+(((f1-satas)/(sbawah-satas))*(d1[atas,j]-d1[bawah,j])) else if d1[atas,j]<d1[bawah,j] then hasil:=d1[atas,j]+(((f1-satas)/(sbawah-satas))*(d1[bawah,j]-d1[atas,j])) else if d1[atas,j]=d1[bawah,j] then hasil:=d1[atas,j]; end; end; result:=hasil; end; end. Unit About; unit about;
L 111
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;
L 112
procedure TAboutBox.FormActivate(Sender: TObject); begin LMDScrollText1.Scroll:=true; end; end.