PEMROGRAMAN KOMPUTER
DALAM HISAB DAN RUKYAT
PENDAHULUAN
SEKILAS TENTANG HISAB DAN RUKYAT
PENGERTIAN DASAR TENTANG KOMPUTER
ALGORITHME DAN BAHASA PEMROGRAMAN
PEMROGRAMAN MACRO DALAM WINWORD DAN EXCEL
PEMBUATAN PROGRAM KOMPUTER UNTUK HISAB DAN
RUKYAT
1
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
1. Pendahuluan
A. Umum
Teknologi komputer merupakan bagian dari kehidupan manusia dan masyarakat, bahkan
pada dasarnya teknologi secara umum dan komputer secara khusus adalah salah satu
sarana utama bagi manusia untuk meningkatkan kualitas hidupnya. Perkembangan
teknologi akhir-akhir ini berjalan sedemikian pesatnya, dan teknologi komputer termasuk
yang sangat cepat merambah sampai di hampir seluruh aspek kehidupan sehingga era
saat-saat ini para pakar menyebutnya sebagai era komputerisasi.
Gambar 1. Hilal yang dilihat di Mesir bisa segera diinformasikan lewat telpon ke Indonesia
Globalisasi yang demikian populer saat ini tidak terlepas dari pengaruh dorongan
percepatan perkembangan teknologi komputer, tidak luput pula tentunya pengaruhnya
Satelit
Hilal
Mesir
Indonesia
terhadap aspek kehidupan sosial masyarakat termasuk didalamnya umat Islam, yang
secara khusus dalam buku ini dibahas perihal komputerisasi di Bidang Hisab dan Rukyat.
Sisi positif lain, perkembangan komputer yang pesat diharapkan dapat mendukung
pelaksanaan hisab dan rukyat hilal, sedemikian rupa sehingga perbedaan-perbedaan
yang terjadi di masyarakat berkisar hasil hisab dan rukyat dapat diminimalkan. Dalam hal
ini, komputer ataupun teknologi bukan satu-satunya faktor yang dapat memecahkan
permasalahan perbedaan dalam kalender Islam. Teknologi komputer hanya merupakan
sarana bantu untuk memperkecil kesalahan-kesalahan manusiawi yang biasa terjadi.
2
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
Maksud penulisan buku ini adalah untuk memberikan introduksi tentang ilmu komputer
yang dapat dimanfaatkan untuk program hisab dan rukyat. Tujuan penulisan buku ini
adalah sebagai gagasan bagi pemutakhiran teknologi hisab dan rukyat dengan
memaksukkan komponen teknologi komputer didalamnya.
Apa yang dimaksud dengan komputerisasi Program Hisab dan Rukyat? Apakah dengan
komputer permasalahan hisab dan rukyat dapat dipecahkan? Apakah program komputer
sesuai dengan Fiqh? Dan masih banyak pertanyaan-pertanyaan lain muncul tatkala kita
bicara masalah komputerisasi hisab dan rukyat.
Astronomi
Matematik
Statistik
dll
Komputer
Hisab
Hardware Hasil yang lebih akurat
Software
Brainware
Pengamat
Peralatan Rukyat
Lokasi
Prediksi
dll
Ketika kita bicara masalah komputerisasi dalam program hisab, maka kita bicara
bagaimana menghitung dengan cepat dan akurat yang mempertimbangkan berbagai
parameter baik itu dari astronomi, matematik, statistik dan lain-lain dengan
memanfaatkan komputer sedemikian rupa sehingga kesalahan manusia dapat
diminimalkan. Dengan komputer juga dimungkinkan untuk memasukkan semua
parameter-parameter perhitungan. Di lain hal, ketika kita bicara kompterisasi program
hilal, maka kita bicara bagaimana mengoptimalkan pengamatan hilal sedemikian rupa
hasil yang diperoleh lebih akurat. Dalam hal ini memperhitungkan unsur-unsur pengamat,
lokasi, peralatan dan prediksi serta paramater-parameter lain yang mendukung
keakuratan hasil pengamatan dengan memasukkan pemanfaatan komputer sebagai
sarana bantu untuk keberhasilan rukyat.
Gambar 2. menunjukkan konsep komputerisasi hisab dan rukyat yang diharapkan untuk
memunculkan hasil yang lebih akurat dibanding hisab dan rukyat tanpa pemanfaatan
teknologi komputer.
Selanjutnya dalam tulisan ini lebih menekankan bahasannya pada topik komputerisasi,
bukan pada hisab dan rukyat dengan segala macam pengertiannya.
3
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
Masalahnya, soal kelihatan apa tidak, terkadang tergantung oleh faktor non astronomis,
seperti cuaca, medan (topografi), maupun oleh pengalaman si pengamat. Jaman
sekarang ini, sudah jarang orang yang 'kenal langit', maklum sudah ada jam, kompas
atau radio. Makanya banyak yang tidak tahu sifat-sifat hilal, di mana letaknya,
mengamatinya jam berapa. Akibatnya ada yang keliru melihat pesawat atau awan dan
dikira hilal. Akibatnya rukyat bisa salah. Pada zaman Nabi, hampir setiap orang tahu sifat-
sifat hilal, karena mereka sehari-hari harus bernavigasi dengan melihat langit, sehingga
bila ada seorang Badui bersaksi telah melihatnya pun, Rasulullah mempercayainya, dan
menyatakan besok Ramadhan dimulai. Pada zaman sekarang ini, di beberapa negeri
muslim, saksi hilal diberi honor, akibatnya mereka berlomba-lomba adu cepat. Dan tak
jarang, mereka mengaku menyaksikan hilal, padahal rembulan belum ijtima' atau irtifa'
masih negatif. Ini ibarat mengatakan matahari di Indonesia terbit pukul 03:00 WIB. Lebih
dari itu, kapan 29 Sya'ban, ternyata sudah ditabulasi dalam suatu kalender, yang
tentunya dihitung dengan hisab jauh-jauh hari. Nah di sini ternyata bisa timbul kalender
yang berbeda-beda, karena terdapat berbagai definisi pergantian bulan. Kapan bulan
Rojab berganti ke bulan Sya'ban? Apakah bila rembulan mengalami ijtima' (conjunction),
atau bila irtifa'-nya (altitude) sudah lebih dari 2 derajat. Mungkin ada kalender lain yang
mensyaratkan
irtifa' 5 derajat, atau 7 derajat; atau tidak cuma irtifa' tapi juga tingkat kilau (illuminasi)
dll. Dan andaipun definisi astronomis ini diseragamkan, kalendernya masih juga lain-lain,
tergantung
dari posisi geografis mana ia dihitung. Irtifa' rembulan dari daerah tropis berbeda dengan
dari daerah sedang. Rembulan dengan irtifa' negatif adalah mustahil untuk dilihat, karena
ia masih
di bawah cakrawala. Jadi perbedaan ini bisa mencapai satu hari! Dan karena di dunia ini
ada 24 daerah waktu, maka total jenderal perbedaan kalender ini bisa mencapai 2 hari !
Pertanyaan selanjutnya, terus bagaimana agar seluruh dunia bersatu dalam 1 Ramadhan
dan satu dalam 1 Syawal? Mungkinkah muslim di seluruh dunia bisa serentak memulai 1
Ramadhan pada hari Jum'at 10 Januari 1997? Berita rukyatul hilal di suatu tempat bisa
disebarkan ke seluruh dunia
pada saat yang sama melalui radio.
Taruhlah di Samoa (179 W), Kamis ini kalender menunjukkan 29 Sya'ban, namun hilal bisa
dilihat. Maka segera diumumkan agar "besok", yakni hari Jum'at mulai puasa. Berita ini
dengan cepat akan mencapai Tuvalu (179 E) yang cuma satu "loncatan" saja dari Samoa.
Baik di Samoa maupun Tuvalu sama-sama senja. Tapi apa makna "besok" di Tuvalu?
Ketika "besok" bagi Samoa adalah hari Jum'at, pada saat yang sama di Tuvalu sudah
Jum'at, dan "besok" adalah Sabtu. Antara Samoa dan Tuvalu terletak garis batas tanggal
internasional. Untuk mengatasi hal ini jelaslah, bahwa dalam pembuatan kalender Islam
pun perlu diperhatikan adanya suatu konvensi global. Suatu konvensi global itu misalnya:
"bila ijtima' terjadi sebelum pukul 12:00 GMT, maka hari besok adalah permulaan bulan
baru". Hal ini karena pada pukul 12:00 GMT, hari di seluruh dunia masih sama. Namun
sepertinya persatuan ini belum mungkin tanpa adanya infrastruktur
yang mempersatukan ummat Islam di seluruh dunia, karena hanya suatu khilafah yang
4
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
berhak dan mampu memberlakukan satu definisi kalender Islam yang bisa berlaku global
dan mengikat, dan setelah itu rukyah dibangun di atas landasan kalender itu, dan
dikerjakan secara merata di seluruh dunia oleh ahlinya.
5
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
6
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
7
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
a. Generasi Pertama.
8
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
b. Generasi Kedua.
9
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
c. Generasi Ketiga
d. Generasi Keempat
10
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
b. Special-purpose Computer
11
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
12
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
13
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
b. Komputer Mini
c. Komputer Mainframe
14
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
15
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
d. Super-komputer
a. Digital Komputer
16
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
b. Komputer Analog.
c. Hibrid Komputer
17
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
a. Input Device
• Internal Memory/Main
Memory, berfungsi untuk me-
nyimpan data dan program.
• ALU (Arithmatic Logical Unit),
untuk melaksanakan perbagai
18
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
macam perhitungan.
• Control Unit, bertugas untuk
mengatur seluruh operasi komputer
19
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
c. Output Device
d. External Memory
20
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
21
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
a. Byte/Karacter
b. Field
c. Record
d. File
I. Sistem Bilangan
22
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
23
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
24
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
d. System BCD
25
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
f. System EBCDIC
g. System ASCII
Pertanyaan Ulangan :
26
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
4.Komputer generasi keberapakah yang ada pada saat ini, dan berikan alasan
kenapa saudara memberikan jawaban tersebut.
5.Sebutkan contoh komputer generasi kedua berikut teknologi yang
digunakan.
6.Dibanding dengan tabung hampa udara, maka transistor memiliki banyak
keunggulan, sebutkan keunggulan-keunggulan tersebut.
7.Sebuah komputer bisa disebut sebagai PC, MINI ataupun MAINFRAME karena
faktor apa ?
8.Apa yang dimaksud dengan single user dan multi user ?
9.Komputer PC yang ada dilaboratorium dan digunakan untuk praktikum para
mahasiswa, bisa dikatagorikan sebagai single ataukah multi user ?, berikan
alasan saudara.
10.Dibanding dengan Mini ataupun Mainframe, komputer PC ternyata
mempunyai banyak keunggulan, sebutkan tiga keunggulan tersebut.
11.Apa kelemahan PC yang paling mendasar jika dibanding dengan Mini
ataupun Mainframe ?
12.Data didalam kehidupan sehari-hari sebenarnya sangat banyak dan
beragam, bisakah saudara menceritakan pengertian data tersebut ?
13.Jenis data yang bagaimana yang bisa diolah oleh komputer, dan sebutkan
pula jenis komputer yang harus digunakan untuk mengolah data-data
tersebut.
14.Konsep robot itu merupakan perkembangan dari komputer jenis apa dan
biasanya digunakan untuk apa ?
15.Sebutkan bagian-bagian yang paling mendasar dari sebuh komputer.
16.Sebutkan pula bagian-bagian dari Central Processing Unit.
17.Arithmatic Logical Unit itu berfungsi untuk apa ?
18.Media disket yang biasa kita gunakan, termasuk input, output ataukah
input/output device ?, berikan alasan saudara.
19.Kenapa disket diperlukan oleh sistem komputer ?
20.Dapatkah saudara menerangkan tentang perbedaan pengertian antara
Field dan File, Bit dan Byte ?
21.Terangkan, kenapa konsep binary, oktal dan hexa desimal digunakan dalam
sistem komputer.
22.Dapatkah saudara mengkonversikan bilangan 125 (desimal) kedalam
binary ?
23.Kenapa 4-bit BCD dikatakan tidak efisien ?
24.Dapatkah saudara menceritakan tentang pengertian dari ASCII dan EBCDIC
?
25.Dimana letak perbedaan antara ASCII dan EBCDIC ?
27
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
28
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
A. SISTEM KOMPUTER
Komputer adalah suatu alat elektronika yang mempunyai kemampuan untuk melakukan
perhitungan dan membuat keputusan logika dengan waktu yang jauh lebih cepat dari
yang dapat dilakukan oleh manusia. Menurut data, pada saat ini sebuah komputer pribadi
dapat melakukan sekitar sepuluh juta penjumlahan dalam waktu satu detik.
Komputer memproses data dengan menggunakan kendali dari sekumpulan instruksi yang
disebut dengan program komputer. Program komputer ini memandu kerja dari komputer
yang secara berstruktur disusun oleh orang yang disebut denganprogrammer. Berbagai
peralatan terdapat di dalam suatu sistem komputer yang disebut dengan perangkat keras
(hardware, atau sering disingkat dengan h/w), di antaranya adalah papan ketik
(keyboard), layar (monitor), disk, memori, dan unit pemroses (CPU=Central
ProcessingUnit). Sedangkan program untuk menjalankan suatu komputer disebut dengan
perangkat lunak (software, atau sering disingkat dengan s/w). Dengan demikian, sistem
komputer terdiri dari perangkat keras dan perangkat lunak, serta manusia yang
mengoperasikan maupun memrogram (brainware, atau sering disingkat dengan b/w).
Perangkat keras komputer terdiri dari enam unit (logika) yang saling terpadu membentuk
suatu organisasi komputer, yaitu:
• Unit input, yang bertugas untuk menerima masukan informasi (data dan/atau
program komputer) dari berbagai alat masukan (input devices) dan
menempatkannya ke unit lain sedemikian rupa sehingga dapat diproses.
• Unit output, yang mengambil informasi yang telah diproses oleh komputer dan
menempatkannya pada berbagai alat output (output devices) sehingga dapat
digunakan oleh pengguna.
• Unit memori, yang menampung masukan dari unit input, sehingga informasi
tersebut selalu tersedia untuk diproses pada saat dibutuhkan. Unit ini juga
menampung hasil proses komputer sampai diperlukan oleh unit output. Unit
memori ini sering disebut dengan memori utama.
• ALU=Arithmetic and Logic Unit, yang bertanggung jawab untuk melakukan
perhitungan seperti penjumlahan, pengurangan, perkalian, dan pembagian. Unit
ini juga berisi mekanisme untuk mengambil keputusan yang harus dilakukan oleh
komputer, misalnya membandingkan dua item (nilai), dan sebagainya.
• CPU=Central Processing Unit, yang merupakan koordinator dan penanggung
jawab bagi operasi unit-unit lainnya. CPU menyampaikan pada unit input, kapan
informasi harus dibaca ke dalam unit memori, dan pada unit output, kapan harus
mengirim informasi dari memori ke alat-alat output.
• Secondary storage unit, yaitu unit dengan kapasitas yang sangat luas untuk
menyimpan program dan/atau data (misalnya disk).
Pemrograman komputer sangatlah sulit dilakukan, terutama bagi orang yang baru
pertama kali melakukannya. Oleh karena itu, pemrograman komputer dilakukan secara
sistematis, yang dimulai dengan merancang atau mendisain langkah-langkah yang tepat
yang menjelaskan jawaban dari suatu masalah yang diberikan. Langkah-langkah yang
disusun secara berstruktur dan terurut untuk menjawab suatu persoalan dengan
menggunakan bahasa manusia inilah yang sering disebut dengan algoritme. Karena
langkah-langkah atau instruksi dalam bentuk algoritme ini akan diberikan kepada
komputer untuk diproses, maka harus dibuat dengan menggunakan bahasa
pemrograman komputer tertentu, yang hasilnya disebut dengan program komputer.
Sebuah algoritme dicatat dalam bentuk narasi (narrative description) atau diagram alir
(flowchart). Metode narasi sangat sederhana dimana setiap langkah-langkah
penyelesaian masalah dalam suatu algoritme ditulis dengan menggunakan kalimat-
kalimat yang mudah dipahami. Berikut adalah contoh algoritme untuk menjumlahkan dua
buah bilangan bulat yang dituliskan dalam bentuk narasi:
SEJARAH C
Bahasa pemrograman C disusun berdasarkan dua bahasa terdahulu, yaitu BCPL dan B.
BCPL dikembangkan pada tahun 1967 oleh Martin Richards sebagai bahasa untuk
menulis perangkat lunak sistem operasi dan kompilator (compiler). Ken Thompson
memodelkan beberapa fitur di dalam bahasa B bersama-sama dengan rekan-rekannya
yang menggunakan bahasa BCPL untuk membuat sistem operasi UNIX yang pertama di
Bell Laboratories pada tahun 1970 dengan menggunakan komputer DEC PDP-7.
Bahasa C dikembangkan lebih lanjut dari bahasa B oleh Dennis Ritchi di Bell Laboratories
dan pertama kali diimplementasikan dalam komputer DEC PDP-11 pada tahun 1972 yang
menggunakan sistem operasi UNIX. Pada perkembangannya saat ini, hampir semua
sistem operasi baru ditulis dalam C atau C++, dan telah menjadi bahasa pemrograman
yang populer. C yang pertama kali muncul ini saat ini dikenal dengan nama "C
tradisional" yang dipublikasikan oleh Kernighan dan Ritchi pada tahun 1978. Dalam
perkembangannya telah muncul C dalam berbagai versi, antara lain ANSI C, Borland C,
Turbo C, dan sebagainya.
TAHAPAN PEMROGRAMAN C
STRUKTUR PROGRAM C
30
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
tulis (NilaiMaks);
return 0;
}
Di dalam program C, suatu aksi dilakukan dengan suatu ekspresi (expression), misalnya
'hasil = 9'. Ekspresi yang diakhiri dengan titik-koma (;) membentuk pernyataan
(statement) seperti contoh berikut:
PREPROCESSOR DIRECTIVES
KATA KUNCI
Kata kunci (keywords) adalah kata di dalam pemrograman yang tidak dapat digunakan
untuk kepentingan lain kecuali yang telah ditetapkan oleh kompilator. Dengan demikian
31
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
kita tidak dapat membuat variabel dengan nama seperti yang tercantum pada kata kunci,
atau kepentingan-kepentingan lainnya. Ada 32 kata kunci di dalam C, yaitu:
auto, double, int, struct, break, else, long, switch, case, enum, register, typedef, char,
extern, return, union, const, float, short, insigned, continue, for, signed, void, default,
goto, sizeof, volatile, do, if, static, while
TIPE DATA
Setiap program umumnya mempunyai data, dan setiap data memiliki tipe tertentu. Di
dalam program C terdapat dua kelompok besar tipe data, yaitu integral types (terdiri dari
char, short, int, dan long) dan non-integral types (yaitu float dan double ). Penjelasan
masing-masing tipe ini seperti yang diuraikan pada tabel berikut:
No. Tipe Keterangan
Tipe data short dan int dapat berbentuk signed maupun unsigned.
LITERAL CONSTANT
Suatu nilai data dalam program kadang-kadang berbentuk literal (hanya berupa nilai,
misalnya 3, 4.15, dan sebagainya) dan bersifat constant (tidak dapat diubah). Setiap
literal mempunyai tipe, misalnya: 3 bertipe int, 4.15 bertipe float, dan sebagainya. Nilai
literal juga bersifat nonaddressable karena alamatnya tidak dapat diakses.
Ada empat tipe literal constant ini, yaitu:
1. literal integer constants, untuk menuliskan konstanta bilangan bulat. Konstanta ini
dapat dituliskan dalam notasi desimal (misalnya 20, -5), oktal yang dimulai
dengan karakter '0' (misalnya 024), dan heksadesimal yang dimulai dengan
karakter '0X' (misalnya 0X14). Jika tidak menggunakan deklarasi tipe apapun,
otomatis konstanta yang dituliskan bertipe integer bertanda (signed int). Tipe long
dan unsigned dapat ditambahkan di belakang konstanta, misalnya 123U, 325UL,
2L, dan sebagainya.
2. literal floating point constants, yaitu nilai konstanta jenis bilangan riil yang dapat
dituliskan dalam notasi ilmiah (misalnya 1.0E-3 yang berarti 1.0 x 10-3), dan
notasi desimal (misalnya 3.14F, 0.0).
3. literal character constants, yaitu konstanta karakter yang ditulis di dalam tanda
kutip ('..'), misalnya 'a', '2', ',', '' (empty character), dan sebagainya. Disamping
itu, terdapat karakter yang bersifat nonprintable character (tidak dapat dicetak,
melainkan hanya sebagai kode operasi tertentu), yang ditulis dengan escape
sequences, seperti yang diuraikan pada tabel berikut.
32
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
1. \n new line
2. \t horizontal tab
3. \r carriage return
5. \\ backslash
1. string literal constants, yang terdiri dari nol atau lebih karakter, dan ditulis di
dalam tanda kutip dobel (double quotes), yaitu "…..", misalnya "" (null string='\0'),
"a" (sama dengan 'a','\0') , "komputer" (sama dengan 'k','o','m','p','u','t','e','r','\0'),
dan sebagainya.
SYMBOLIC VARIABLE
Setiap program umumnya mengandung satu atau lebih variabel untuk menyimpan suatu
nilai, misalnya 'Nilai1', 'Nilai2', 'NilaiMaks', 'x1', dan 'x2' contoh program C sebelumnya.
Identifikasi variabel ini dibuat oleh pengguna sendiri dan bersifat addressablekarena
alamatnya dapat diakses melalui program.
Ada dua nilai yang berkaitan dengan sebuah variabel, yaitu Rvalue dan Lvalue. Rvalue
adalah nilai data yang disimpan pada lokasi memori, sedangkan Lvalue adalah alamat
dari lokasi memori dimana nilai data itu disimpan. Perhatikan contoh berikut:
x = a;
x = x + 1;
maka x sebelah kiri disebut Lvalue, dan a serta x di sebelah kanan disebut Rvalue. Di
dalam sebuah program, setiap variabel yang dibuat harus dideklarasikan dengan
menentukan tipe variabel yang bersangkutan. Berikut adalah contoh deklarasi variabel:
int hari, bulan, tahun;
unsigned long jarak;
int nilai = 0;
double harga = 15.9, potongan = 0.2;
float gaji;
unsigned x = abs(-108);
Fungsi printf yang pertama mempunyai satu argumen, yang bertujuan untuk menuliskan
suatu string kalimat 'Ketikkan dua bilangan bulat :' di layar. Kalimat ini diawali dengan
dengan karakter '\n' yang berarti bahwa kursor terlebih dahulu dipindahkan ke baris baru
sebelum menuliskan kalimat tersebut. Sedangkan fungsi printf yang kedua mempunyai
dua argumen, dimana argumen pertama adalah string kalimat yang akan ditulis ke layar,
dan argumen kedua adalah nilai suatu variabel yang akan ditulis (x). Nilai x ini ditulis
dengan menggunakan notasi desimal (karakter '%d' pada argumen pertama).
Fungsi kedua adalah scanf yang digunakan untuk membaca nilai suatu variabel yang
diketikkan dari papan ketik saat program diproses. Pada contoh ini, nilai yang dibaca
33
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
terdiri dari dua buah dan masing-masing akan dimasukkan ke dalam variabel Nilai1 dan
Nilai2. Karakter '%d' menunjukkan bahwa nilai yang diketik harus dalam notasi desimal,
sedangkan karakter '&' menunjukkan bahwa argumen fungsi scanf berupa reference
variable (akan dibahas pada bab selanjutnya).
OPERATOR ARITMATIKA
Program komputer banyak melakukan perhitungan aritmatika, yang terdiri dari operator
(+, -, *, /, dan %) dan operand . Misalnya ekspresi 3 + 7 terdiri dari operator + dan dua
buah operand (disebut binary), yaitu 3 dan 7. Disamping itu, ada pula operator yang
hanya diterapkan pada sebuah operand (disebut unary), misalnya -5, +12.7, dan
sebagainya. Operator aritmatika beserta notasinya seperti tercantum pada tabel berikut:
Operasi Operator Ekspresi Aljabar Ekspresi C
Perkalian * bm b*m
34
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
KESAMAAN
LOGIKA
RELATIONAL
a = 5;
b = a = 10;
c = c + 5;
c += 5; /* artinya c = c + 5 */
x /= 2; /* artinya x = x / 2 */
jumlah %= 2; /* artinya jumlah = jumlah % 2 */
35
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
bahwa nilai ekspresinya sama dengan nilai variabel sebelum diubah. Perhatikan
penjelasan pada contoh berikut:
c = 5; /* c bernilai 5 */
#include <stdio.h>
main() {
int a = 10;
printf("\n%d", a += 3);
printf("\n%d", a -= 3);
printf("\n%d", a *= 3);
printf("\n%d", a /= 3);
printf("\n%d", a %= 3);
printf("\n%d", a);
printf("\n%d", ++a);
printf("\n%d", a);
printf("\n%d", a++);
printf("\n%d", a);
printf("\n%d", --a);
printf("\n%d", a);
printf("\n%d", a--);
printf("\n%d", a);
return 0;
Jika anda melakukan pekerjaan yang berulang-ulang dengan winword, maka anda dapat
mengotomatisasinya dengan MACRO. Sebuah macro adalah serangkaian komando dalam
Word dan intruksi-intruksi yang anda dapat mengelompokkannya dalam satu group
sebagai satu intruksi baru. Cara ini untuk memudahkan anda untuk melakukan
serangkaian kerja dengan cukup sekali klik, untuk menghemat waktu.
Macro biasanya digunakan untuk merekam urutan keyboard atau aksi lainnya yang
diperlu dilakukan secara berulang oleh pemakai dalam tugas sehari-hari. Misal, jika
profesi anda adalah peneliti, anda akan mendapatkan bahwa sejumlah publikasi harus
ditulis mengikuti aturan-aturan tertentu. Maka jika anda sangat sering menulis dalam
format yang sama, maka cara yang paling elegan yang perlu anda lakukan adalah
dengan mengotomatisasinya menggunakan macro.
36
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
Cara yang paling mudah untuk membuat macro dalam winword adalah dengan fasilitas
“macro recorder” untuk merekam sejumlah perintah atau aksi-aksi yang kita susun. Jika
anda sedang merekam macro, maka anda dapat menggunakan mouse dan menklik
command dan opsi-opsi yang ada. Sebagai catatan, bahwasannya “macro recorder” tidak
merekam gerakan mouse dalam jendela dokumen.
Klik pada menu Tools, kemudian arahkan kursor ke Macro kemudian kik record new Macro.
1. Di bagian boks Macro name, ketikkan nama macro yang anda inginkan.
2. Dalam Boks Store macro in, klik template atau dokumen yang anda akan pakai
untuk menyimpan macro.
3. Di boks Description, ketikkan uraian secukupnya tentang macro tersebut.
4. Jika anda tidak menginginkan macro ini tampil dalam toolbar, menu atau
shortcut maka klik OK untuk memulai merekam macro.
Untuk menempatkan macro dalam toolbar atau menu, maka klik Toolbars. Di
boks Commands, klik macro yang sedang anda rekam, dan tempatkan ke
toolbar atau menu yang anda inginkan. Klik Close untuk memulai perekaman.
5. Lakukan langkah-langkah yang sudah anda rencanakan untuk direkam dalam
macro.
Anda dapat menggunakan mouse untuk mengklik perintah dan opsi-opsi yanga
ada, tetapi macro tidak merekam gerakan mouse dalam jendela dokumen.
6. Untuk menyudahi perekaman, klik Stop Recording
Catatan Jika anda memberi nama macro baru dengan nama macro yang sudah ada
dalam winword, maka macro baru tersebut akan menggantikan macro winword yang asli.
Contoh: Dalam menu File terdapat perintah Close yang mengacu pada macro FileClose.
Jika anda membuat macro baru dengan nama sama dengan macro tersebut, maka macro
anda akan menggantikan macro winword yang asli.
Anda dapat menyimpan macro dalam templates (*.dot) atau dalam dokumen (*.doc). Jika
anda tidak memilih secara spesifik, maka macro akan disimpan dalam Normal template
(normal.dot) sedemikian rupa sehingga dapat dimanfaatkan oleh setiap dokumen word.
Jika anda menginginkan menggunakan macro hanya untuk dokumen tertentu, maka
simpan macro tersebut dalam dokumen bersangkutan.
37
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
Virus Macro
Fasilitas longgar yang diberikan oleh winword untuk penggunanya melalui macro,
ternyata dimanfaatkan dengan tujuan tidak baik oleh oknum-oknum yang tidak
bertanggung-jawab.
Sebuah virus macro adalah tipe virus komputer yang disimpan dalam macro yang
tersimpan dalam dokumen atau template. Jika anda membuka sebuah dokumen maka
yang terkena virus, maka virus macro tersebut dengan sendirinya ikut aktif dan
disebarkan dalam komputer anda melalui penyimpanan virus macro tersut ke Normal
template. Sekali normal template berisikan virus, maka semua dokumen yang dibuka
akan terinfeksi oleh virus tersebut.
Word tidak dapat menscan floppy disk, hard disk, or network drive untuk menemukan
atau membuang virus macro. Untuk melakukan hal tersebut, anda memerlukan software
anti virus. Yang dapat dilakukan oleh Word adalah sekedar memberikaan peringatan
kemungkinan-kemungkinan macro yang mengandung virus. Selanjutnya anda dapat
membuka sebua dokumen dengan atau tanpa macro.
38
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
Visual Bsic Applications (VBA) merupakan bahasa terbaru dalam deretan panjang bahasa
pemrograman. Peralihan mendasar sedang terjadi dalam cara orang menggunakan
komputer sekarang ini. Beberapa teknologi terkait yang muncul dari Mcrosot dan
perusahaan lain membuat komputer dapat dipakai dengan efisien dan lebih mudah.
Teknologi ini – dengan nama seperti Dynamic Dta Exchange (DDE), Object Linking and
Embedding (OLE) dan Visual Basic For Applications (VBA) – bekerja bersama-sama untuk
membantu pemakai menyelesaikan tugas komputasi yang umum, seperti customizing
aplikasi dan manipulasi informasi dengan cara yang lebih efektif.
Untuk memahami VBA, pertama kita harus menengok pendahulunya, bahasa BASIC
(Beginners All Purposes Symbolic Instruction Code) elakangan ini, bahasa macro telah
dibangun untuk membantu pemakai mengcustomize aplikasi agar sesuai dengan
kebutuhan khusus mereka.
Dengan Visual Basic, bahasa BASIC, memiliki kemampuan menayangkan dan mengelola
grafik, dan menghasilkan program Windows yang tidak bisa dibedakan dari aplikasi
profesional. Dengan window dialog VBA, tugas embuatan program menjadi jauh lebih
mudah. Apa itu Visual? Kata Visual menunjukkan cara yang digunakan untuk membuat
graphical user interface (GUI). Dengan cara ini, anda tidak lagi perlu menuliskan sederet
instrtuksi pemrograman dalam kode-kode baris yang rumit dan susah dihafal, tetapi
secara mudah anda dapat melakukan drag anda drop obyek-obyek yang akan anda
gunakan.
39
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
C/C++
Pada hakikatnya yang terpenting dalam hal memprogram komputer adalah algorithm dan
struktur diagram cara berfikir kita untuk mengungkapkan dalam deretan atuaran syntax
yang sudah ditentukan. Memprogram dengan Visual Basic, Visual C, Borland C, Fortran
dsbnya adalah sama. Hal ini dapat diidentikkan ketika kita menuliskan makalah dalam
bahasa Indonesia, Inggris, Jerman ataupun yang lainnya adalah sama. Pembedanya
adalah aturan main dalam penggunaan bahasa tersebut. Kompleks tidaknya suatu
bahasa pemrograman seringkali tergantung dari kebiasaan kita memrogram.
Sebagai contoh, dari pengalaman penulis, bahasa pemrograman Borland C/C++ adalah
sangat kompleks. Anda membutuhkan waktu panjang untuk mampu menguasainya
dengan baik. Kerumitan ini akan segera hilang begitu anda sudah fasih untuk mengklik
dan mengetahui seluruh seluk beluk dalam bahasa pemrograman ini.
Catatan: Pada prinsipnya setiap bahasa pemrograman dapat dipakai untuk membantu
proses otomatisasi dengan Winword dan excel. Keuntungan utama, jika anda
menggunakan Visual Basic adalah terintegrasinya fasilitas-fasilitas ini secara langsung
dalam Winword dan Excel.
40
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
Software ditulis dengan bahasa pemrograman, C/C++, Visual Basic dengan kombinasi
dengan macro winword. Komponen-komponen dalam program ini adalah:
Mwqt4word.doc : dokumen yang berisikan macro program Mawaaqit 2000 untuk
winword.
MwqtInputs.frm : frame atau boks dialog untuk memasukkan input secara
interaktif.
41
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
MMwqt2000.bas : module atau bagian program inti yang ditulis dengan Visual
Basic.
Mwqt4word.exe : program yang ditulis dengan C/C++ untuk membuat input-input
yang akan dimasukkan dalam tabel atau untuk membuat peta
dengan kontur-kontur yang diinginkan.
Berikut ini adalah source code dari pengembangan software tersebut. Source Code ini
pada umumnya dibuat dengan fasilitas “macro recorder” di winword.
MwqtInputs.frm
VERSION 5.00
Sub SettingDirectory()
DirectoryData = "c:\mwqt4word\data\"
DirectoryHasilPeta = "c:\mwqt4word\Results\Maps\"
DirectoryHasilTabel = "c:\mwqt4word\Results\Tables\"
DirectoryHasilJudul = "c:\mwqt4word\Results\Titles\"
DirectoryIjtima = "c:\mwqt4word\Results\IjtimaTime\"
DirectoryProgram = "c:\mwqt4word\"
End Sub
StrBulan = Format(MwqtInputs.BulanHijriyah.ListIndex + 1)
StrTahun = Format(MwqtInputs.TahunHijriyah.ListIndex + 1300)
If (MwqtInputs.BulanHijriyah.ListIndex < 9) Then
StrBulan = "0" & StrBulan
End If
TextTemp = StrBulan & StrTahun
If (MwqtInputs.TahunHijriyah.SelText = "") Then
TextTemp = StrBulan & "1420"
End If
ComputeTableData
TableFile = DirectoryHasilTabel & "Global" & TextTemp & "a.tbl"
JudulText = DirectoryHasilJudul & "Global" & TextTemp & "a.ttl"
42
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
InsertTable
InsertTableData
MyFile = Dir(TableFile)
If (MyFile <> "") Then
Kill TableFile
End If
MyFile = Dir(JudulText)
If (MyFile <> "") Then
Kill JudulText
End If
Sub Create2NewBlankPage()
Selection.InsertBreak Type:=wdPageBreak
Selection.InsertBreak Type:=wdPageBreak
Selection.MoveLeft Unit:=wdCharacter, Count:=2
End Sub
Sub InsertMonthName()
Dim Hgh
Hgh = Array(3, 3, 3, 3, 3, 3, 3.82, 3.82, 3, 3.82, 3, 3.82)
If (MwqtInputs.BulanHijriyah.SelText = "") Then
ActiveDocument.Shapes.AddTextEffect(msoTextEffect16, "Muharram", _
"Arial Black", 60#, msoFalse, msoFalse, 255.8, 196.5).Select
Else
ActiveDocument.Shapes.AddTextEffect(msoTextEffect16, MwqtInputs.BulanHijriyah.SelText, _
"Arial Black", 60#, msoFalse, msoFalse, 255.8, 196.5).Select
End If
Selection.ShapeRange.RelativeHorizontalPosition = _
wdRelativeHorizontalPositionMargin
Selection.ShapeRange.RelativeVerticalPosition = _
wdRelativeVerticalPositionMargin
Selection.ShapeRange.Height = CentimetersToPoints(Hgh(MwqtInputs.BulanHijriyah.ListIndex))
43
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
Sub ComputeIjtimaTime()
Dim MyFile, MyString, RetVal, MyProgram, ResFile, FileName, StrBulan, StrTahun
StrBulan = Format(MwqtInputs.BulanHijriyah.ListIndex + 1)
StrTahun = Format(MwqtInputs.TahunHijriyah.ListIndex + 1300)
If (MwqtInputs.BulanHijriyah.ListIndex < 9) Then
StrBulan = "0" & StrBulan
End If
RetVal = Shell(MyProgram, 1)
Do While MyFile <> FileName
MyFile = Dir(ResFile)
Loop
End Sub
Sub ComputeTableData()
Dim MyFile, MyString, RetVal, MyProgram
MyProgram = DirectoryProgram & "Mwqt4Word.exe 2 " & _
Str(MwqtInputs.BulanHijriyah.ListIndex + 1) & " " & MwqtInputs.TahunHijriyah.SelText
If (MwqtInputs.TahunHijriyah.SelText = "") Then
MyProgram = MyProgram & " 1420"
End If
RetVal = Shell(MyProgram, 1)
Do While MyFile <> "TableCompleted"
MyFile = Dir(DirectoryHasilTabel & "TableCompleted")
Loop
End Sub
Sub BoxOn()
ActiveDocument.Shapes.AddShape(msoShapeRectangle, 70.75, 57.1, 721.25, 480.4).Select
Selection.ShapeRange.Fill.Visible = msoFalse
Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.Weight = 1.5
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Shadow.Type = msoShadow6
End Sub
Sub Goto2NextPage()
Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Count:=1, Name:=""
Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Count:=1, Name:=""
Selection.Find.ClearFormatting
With Selection.Find
.Text = ""
44
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
End Sub
Sub InsertTable()
Selection.InsertFile FileName:=DirectoryData & "table.doc", Range:="", ConfirmConversions
_
:=False, Link:=False, Attachment:=False
ActiveWindow.ActivePane.SmallScroll Down:=-15
ActiveWindow.ActivePane.SmallScroll Down:=3
End Sub
Sub InsertTableData()
Selection.InsertFile FileName:=TableFile, Range:="", _
ConfirmConversions:=False, Link:=False, Attachment:=False
Selection.MoveUp Unit:=wdLine, Count:=28, Extend:=wdExtend
Selection.ConvertToTable Separator:=wdSeparateByCommas, NumColumns:=13, _
NumRows:=28, Format:=wdTableFormatNone, ApplyBorders:=True, ApplyShading _
:=True, ApplyFont:=True, ApplyColor:=True, ApplyHeadingRows:=True, _
ApplyLastRow:=False, ApplyFirstColumn:=True, ApplyLastColumn:=False, _
AutoFit:=False
Selection.Cut
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveUp Unit:=wdLine, Count:=2
Selection.MoveRight Unit:=wdCharacter, Count:=12
Selection.MoveLeft Unit:=wdCharacter, Count:=12, Extend:=wdExtend
Selection.MoveUp Unit:=wdLine, Count:=27, Extend:=wdExtend
Selection.Paste
Selection.MoveDown Unit:=wdLine, Count:=27, Extend:=wdExtend
Selection.MoveRight Unit:=wdCharacter, Count:=12, Extend:=wdExtend
Selection.Font.Name = "Courier New"
Selection.Font.Size = 9
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
With Selection.ParagraphFormat
.SpaceBefore = 1
.SpaceAfter = 2
End With
Selection.MoveLeft Unit:=wdCharacter, Count:=10, Extend:=wdExtend
Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
Selection.MoveLeft Unit:=wdCharacter, Count:=2, Extend:=wdExtend
Selection.ParagraphFormat.FirstLineIndent = CentimetersToPoints(0.25)
Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
Selection.MoveUp Unit:=wdLine, Count:=3
Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.InsertFile FileName:=JudulText, Range:="", _
ConfirmConversions:=False, Link:=False, Attachment:=False
Selection.MoveUp Unit:=wdLine, Count:=1, Extend:=wdExtend
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
Selection.Font.Name = "Arial"
Selection.Font.Size = 14
Selection.Font.Bold = wdToggle
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
With Selection.ParagraphFormat
.LeftIndent = CentimetersToPoints(0)
.RightIndent = CentimetersToPoints(0)
.SpaceBefore = 0
.SpaceAfter = 0
.LineSpacingRule = wdLineSpace1pt5
.Alignment = wdAlignParagraphCenter
.WidowControl = True
.KeepWithNext = False
.KeepTogether = False
.PageBreakBefore = False
.NoLineNumber = False
.Hyphenation = True
.FirstLineIndent = CentimetersToPoints(0)
.OutlineLevel = wdOutlineLevelBodyText
End With
45
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
'CreateGlobalMaps
' ----------------------------
StrCode = "a"
MapsFrame = DirectoryData & "GlobalAltitude.doc"
MapsFileName = DirectoryHasilPeta & "AltitudeGlobal" & TextTemp & "a" & ".gif"
InsertGlobalMaps
StrCode = "a"
MapsFrame = DirectoryData & "InaAltitude.doc"
MapsFileName = DirectoryHasilPeta & "AltitudeIna" & TextTemp & "a" & ".gif"
InsertInaMaps
' ----------------------------
' ----------------------------
StrCode = "b"
MapsFrame = DirectoryData & "GlobalAltitude.doc"
MapsFileName = DirectoryHasilPeta & "AltitudeGlobal" & TextTemp & "b" & ".gif"
InsertGlobalMaps
StrCode = "b"
MapsFrame = DirectoryData & "InaAltitude.doc"
MapsFileName = DirectoryHasilPeta & "AltitudeIna" & TextTemp & "b" & ".gif"
InsertInaMaps
' ----------------------------
' ----------------------------
StrCode = "a"
MapsFrame = DirectoryData & "GlobalMoonsAge.doc"
MapsFileName = DirectoryHasilPeta & "MoonsAgeGlobal" & TextTemp & "a" & ".gif"
InsertGlobalMaps
StrCode = "a"
MapsFrame = DirectoryData & "InaMoonsAge.doc"
MapsFileName = DirectoryHasilPeta & "MoonsAgeIna" & TextTemp & "a" & ".gif"
InsertInaMaps
' ----------------------------
' ----------------------------
StrCode = "b"
MapsFrame = DirectoryData & "GlobalMoonsAge.doc"
46
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
MapsFileName = DirectoryHasilPeta & "MoonsAgeGlobal" & TextTemp & "b" & ".gif"
InsertGlobalMaps
StrCode = "b"
MapsFrame = DirectoryData & "InaMoonsAge.doc"
MapsFileName = DirectoryHasilPeta & "MoonsAgeIna" & TextTemp & "b" & ".gif"
InsertInaMaps
' ----------------------------
' ----------------------------
StrCode = "a"
MapsFrame = DirectoryData & "GlobalIllumination.doc"
MapsFileName = DirectoryHasilPeta & "IlluminationGlobal" & TextTemp & "a" & ".gif"
InsertGlobalMaps
StrCode = "a"
MapsFrame = DirectoryData & "InaIllumination.doc"
MapsFileName = DirectoryHasilPeta & "IlluminationIna" & TextTemp & "a" & ".gif"
InsertInaMaps
' ----------------------------
' ----------------------------
StrCode = "b"
MapsFrame = DirectoryData & "GlobalIllumination.doc"
MapsFileName = DirectoryHasilPeta & "IlluminationGlobal" & TextTemp & "b" & ".gif"
InsertGlobalMaps
StrCode = "b"
MapsFrame = DirectoryData & "InaIllumination.doc"
MapsFileName = DirectoryHasilPeta & "IlluminationIna" & TextTemp & "b" & ".gif"
InsertInaMaps
' ----------------------------
' ----------------------------
StrCode = "a"
MapsFrame = DirectoryData & "GlobalSMDiffer.doc"
MapsFileName = DirectoryHasilPeta & "SMDifferGlobal" & TextTemp & "a" & ".gif"
InsertGlobalMaps
StrCode = "a"
MapsFrame = DirectoryData & "InaSMDiffer.doc"
MapsFileName = DirectoryHasilPeta & "SMDifferIna" & TextTemp & "a" & ".gif"
InsertInaMaps
' ----------------------------
' ----------------------------
StrCode = "b"
MapsFrame = DirectoryData & "GlobalSMDiffer.doc"
MapsFileName = DirectoryHasilPeta & "SMDifferGlobal" & TextTemp & "b" & ".gif"
InsertGlobalMaps
StrCode = "b"
MapsFrame = DirectoryData & "InaSMDiffer.doc"
MapsFileName = DirectoryHasilPeta & "SMDifferIna" & TextTemp & "b" & ".gif"
InsertInaMaps
' ----------------------------
Sub InsertInaMaps()
Selection.InsertFile FileName:=MapsFrame, Range:="", _
ConfirmConversions:=False, Link:=False, Attachment:=False
Selection.GoTo What:=wdGoToPage, Which:=wdGoToPrevious, Count:=1, Name:=""
Selection.Find.ClearFormatting
With Selection.Find
.Text = "_$$$_"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
47
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.MoveDown Unit:=wdLine, Count:=3
Selection.InlineShapes.AddPicture FileName:= _
MapsFileName, LinkToFile:=False, _
SaveWithDocument:=True
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
With Selection.InlineShapes(1)
With .Borders(wdBorderLeft)
.LineStyle = wdLineStyleThinThickSmallGap
.LineWidth = wdLineWidth150pt
.ColorIndex = wdAuto
End With
With .Borders(wdBorderRight)
.LineStyle = wdLineStyleThickThinSmallGap
.LineWidth = wdLineWidth150pt
.ColorIndex = wdAuto
End With
With .Borders(wdBorderTop)
.LineStyle = wdLineStyleThinThickSmallGap
.LineWidth = wdLineWidth150pt
.ColorIndex = wdAuto
End With
With .Borders(wdBorderBottom)
.LineStyle = wdLineStyleThickThinSmallGap
.LineWidth = wdLineWidth150pt
.ColorIndex = wdAuto
End With
.Borders.Shadow = False
End With
With Options
.DefaultBorderLineStyle = wdLineStyleThinThickSmallGap
.DefaultBorderLineWidth = wdLineWidth150pt
.DefaultBorderColorIndex = wdAuto
End With
ActiveWindow.ActivePane.View.Zoom.PageFit = wdPageFitBestFit
ActiveWindow.ActivePane.SmallScroll Down:=11
ReplaceTanggal
End Sub
Sub InsertGlobalMaps()
Selection.InsertBreak Type:=wdPageBreak
Selection.GoTo What:=wdGoToPage, Which:=wdGoToPrevious, Count:=1, Name:=""
Selection.Find.ClearFormatting
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.InsertFile FileName:=MapsFrame, Range:="", _
ConfirmConversions:=False, Link:=False, Attachment:=False
Selection.MoveUp Unit:=wdLine, Count:=2
Selection.InlineShapes.AddPicture FileName:= _
MapsFileName, LinkToFile:=False, _
SaveWithDocument:=True
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
With Selection.InlineShapes(1)
With .Borders(wdBorderLeft)
.LineStyle = wdLineStyleThinThickSmallGap
.LineWidth = wdLineWidth150pt
.ColorIndex = wdAuto
End With
With .Borders(wdBorderRight)
.LineStyle = wdLineStyleThickThinSmallGap
.LineWidth = wdLineWidth150pt
.ColorIndex = wdAuto
End With
With .Borders(wdBorderTop)
.LineStyle = wdLineStyleThinThickSmallGap
48
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
.LineWidth = wdLineWidth150pt
.ColorIndex = wdAuto
End With
With .Borders(wdBorderBottom)
.LineStyle = wdLineStyleThickThinSmallGap
.LineWidth = wdLineWidth150pt
.ColorIndex = wdAuto
End With
.Borders.Shadow = False
End With
With Options
.DefaultBorderLineStyle = wdLineStyleThinThickSmallGap
.DefaultBorderLineWidth = wdLineWidth150pt
.DefaultBorderColorIndex = wdAuto
End With
Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Count:=1, Name:=""
Selection.Find.ClearFormatting
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
ReplaceTanggal
End Sub
Sub CreateGlobalMaps()
Dim MyFile, MyString, RetVal, MyProgram
MyProgram = DirectoryProgram & "Mwqt4Word.exe 3 " & _
Str(MwqtInputs.BulanHijriyah.ListIndex + 1) & " " & MwqtInputs.TahunHijriyah.SelText
If (MwqtInputs.TahunHijriyah.SelText = "") Then
MyProgram = MyProgram & " 1420"
End If
RetVal = Shell(MyProgram, 1)
Do While MyFile <> "MapsCompleted"
MyFile = Dir(DirectoryHasilPeta & "MapsCompleted")
Loop
End Sub
TxtBulan = MwqtInputs.BulanHijriyah.SelText
If (MwqtInputs.BulanHijriyah.SelText = "") Then
TxtBulan = "Muharram"
End If
ResFile = "f:\" & StrTahun & "H\" & StrBulan & "_" & TxtBulan & ".doc"
49
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
RetVal = Shell(MyProgram, 1)
Do While MyFile <> FileName
MyFile = Dir(ResFile)
Loop
50
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
.Engrave = False
.Superscript = False
.Subscript = False
.Spacing = 0
.Scaling = 100
.Position = 0
.Kerning = 0
.Animation = wdAnimationNone
End With
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
Selection.ShapeRange.Fill.Visible = msoFalse
Selection.ShapeRange.Line.Visible = msoFalse
Selection.ShapeRange.Height = 72#
Selection.ShapeRange.Width = 255.1
Selection.ShapeRange.TextFrame.MarginLeft = 7.09
Selection.ShapeRange.TextFrame.MarginRight = 7.09
Selection.ShapeRange.TextFrame.MarginTop = 3.69
Selection.ShapeRange.TextFrame.MarginBottom = 3.69
Selection.ShapeRange.RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
Selection.ShapeRange.RelativeVerticalPosition = wdRelativeVerticalPositionPage
Selection.ShapeRange.Left = CentimetersToPoints(0)
Selection.ShapeRange.Top = CentimetersToPoints(16.5)
Selection.ShapeRange.LockAnchor = True
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
UpdateYear
InsertDataIjtimaTahunA
InsertDataIjtimaTahunB
ShadowedCellB
ShadowedCellA
End Sub
Sub UpdateYear()
Dim StrTahun, ResFile
StrTahun = Format(MwqtInputs.TahunHijriyah.ListIndex + 1300)
ResFile = DirectoryHasilJudul & "calyear" & StrTahun
If (MwqtInputs.TahunHijriyah.SelText = "") Then
ResFile = DirectoryHasilJudul & "calyear" & "1420"
StrTahun = "1420"
End If
51
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
.RightIndent = CentimetersToPoints(0)
.SpaceBefore = 2
.SpaceAfter = 2
.LineSpacingRule = wdLineSpaceSingle
.Alignment = wdAlignParagraphCenter
.WidowControl = True
.KeepWithNext = False
.KeepTogether = False
.PageBreakBefore = False
.NoLineNumber = False
.Hyphenation = True
.FirstLineIndent = CentimetersToPoints(0)
.OutlineLevel = wdOutlineLevelBodyText
End With
Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:="31"
Selection.Find.ClearFormatting
With Selection.Find
.Text = "YEAR_B"
End With
Selection.Find.Execute
Selection.InsertFile FileName:=ResFile & "b.out", Range:="", _
ConfirmConversions:=False, Link:=False, Attachment:=False
Selection.TypeBackspace
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
Selection.TypeBackspace
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
Selection.Font.Size = 14
Selection.Font.Name = "Arial"
Selection.Font.Bold = wdToggle
With Selection.ParagraphFormat
.LeftIndent = CentimetersToPoints(0)
.RightIndent = CentimetersToPoints(0)
.SpaceBefore = 2
.SpaceAfter = 2
.LineSpacingRule = wdLineSpaceSingle
.Alignment = wdAlignParagraphCenter
.WidowControl = True
.KeepWithNext = False
.KeepTogether = False
.PageBreakBefore = False
.NoLineNumber = False
.Hyphenation = True
.FirstLineIndent = CentimetersToPoints(0)
.OutlineLevel = wdOutlineLevelBodyText
End With
End Sub
Sub GetDateFile()
Dim StrBulan, StrTahun, TextTemp
StrBulan = Format(MwqtInputs.BulanHijriyah.ListIndex + 1)
StrTahun = Format(MwqtInputs.TahunHijriyah.ListIndex + 1300)
If (MwqtInputs.BulanHijriyah.ListIndex < 9) Then
StrBulan = "0" & StrBulan
End If
TextTemp = StrBulan & StrTahun
If (MwqtInputs.TahunHijriyah.SelText = "") Then
TextTemp = StrBulan & "1420"
End If
End Sub
Sub ReplaceTanggal()
GetDateFile
Selection.Find.ClearFormatting
With Selection.Find
.Text = "_$$$_"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
52
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
.MatchAllWordForms = False
End With
Selection.Find.Execute
Selection.InsertFile FileName:=MyStringTgl, Range:="", _
ConfirmConversions:=False, Link:=False, Attachment:=False
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
With Selection.Font
.Name = "Arial"
.Size = 14
.Bold = True
.Italic = False
.Underline = wdUnderlineNone
.StrikeThrough = False
.DoubleStrikeThrough = False
.Outline = False
.Emboss = False
.Shadow = False
.Hidden = False
.SmallCaps = False
.AllCaps = False
.ColorIndex = wdAuto
.Engrave = False
.Superscript = False
.Subscript = False
.Spacing = 0
.Scaling = 100
.Position = 0
.Kerning = 0
.Animation = wdAnimationNone
End With
Selection.Range.Case = wdUpperCase
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
With Selection.ParagraphFormat
.LeftIndent = CentimetersToPoints(0)
.RightIndent = CentimetersToPoints(0)
.SpaceBefore = 0
.SpaceAfter = 0
.LineSpacingRule = wdLineSpaceMultiple
.LineSpacing = LinesToPoints(1.4)
.Alignment = wdAlignParagraphCenter
.WidowControl = True
.KeepWithNext = False
.KeepTogether = False
.PageBreakBefore = False
.NoLineNumber = False
.Hyphenation = True
.FirstLineIndent = CentimetersToPoints(0)
.OutlineLevel = wdOutlineLevelBodyText
End With
Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Count:=1, Name:=""
Selection.Find.ClearFormatting
With Selection.Find
.Text = "_$$$_"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
End Sub
Sub InsertDataIjtimaTahunA()
Dim ResFile, StrTahun
StrTahun = Format(MwqtInputs.TahunHijriyah.ListIndex + 1300)
53
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
Selection.Find.ClearFormatting
With Selection.Find
.Text = "YEAR_B"
.Replacement.Text = "1420 H"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.InsertFile FileName:=ResFile, Range:="", _
ConfirmConversions:=False, Link:=False, Attachment:=False
Selection.MoveUp Unit:=wdLine, Count:=13, Extend:=wdExtend
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
Selection.ConvertToTable Separator:=wdSeparateByCommas, NumColumns:=5, _
NumRows:=13, Format:=wdTableFormatNone, ApplyBorders:=True, ApplyShading _
:=True, ApplyFont:=True, ApplyColor:=True, ApplyHeadingRows:=True, _
ApplyLastRow:=False, ApplyFirstColumn:=True, ApplyLastColumn:=False, _
AutoFit:=False
Selection.Font.Name = "Arial"
Selection.Font.Size = 11
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
With Selection.ParagraphFormat
.SpaceBefore = 1
.SpaceAfter = 1
End With
Selection.Cut
Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:="31"
Selection.Find.ClearFormatting
With Selection.Find
.Text = "YEAR_B"
.Replacement.Text = "1420 H"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.MoveDown Unit:=wdLine, Count:=4
Selection.MoveLeft Unit:=wdCharacter, Count:=3
Selection.MoveDown Unit:=wdLine, Count:=12, Extend:=wdExtend
Selection.MoveRight Unit:=wdCharacter, Count:=4, Extend:=wdExtend
Selection.Paste
Selection.MoveRight Unit:=wdCell
Selection.MoveDown Unit:=wdLine, Count:=12, Extend:=wdExtend
Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
Selection.ParagraphFormat.FirstLineIndent = CentimetersToPoints(0.31)
Selection.MoveRight Unit:=wdCell
Selection.MoveRight Unit:=wdCell
Selection.MoveRight Unit:=wdCell
Selection.MoveRight Unit:=wdCell
Selection.MoveDown Unit:=wdLine, Count:=12, Extend:=wdExtend
Selection.Font.Italic = wdToggle
End Sub
Sub InsertDataIjtimaTahunB()
Dim ResFile, StrTahun
StrTahun = Format(MwqtInputs.TahunHijriyah.ListIndex + 1300)
54
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.InsertFile FileName:=ResFile, Range:="", _
ConfirmConversions:=False, Link:=False, Attachment:=False
Selection.MoveUp Unit:=wdLine, Count:=13, Extend:=wdExtend
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
Selection.ConvertToTable Separator:=wdSeparateByCommas, NumColumns:=5, _
NumRows:=13, Format:=wdTableFormatNone, ApplyBorders:=True, ApplyShading _
:=True, ApplyFont:=True, ApplyColor:=True, ApplyHeadingRows:=True, _
ApplyLastRow:=False, ApplyFirstColumn:=True, ApplyLastColumn:=False, _
AutoFit:=False
Selection.Font.Name = "Arial"
Selection.Font.Size = 11
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
With Selection.ParagraphFormat
.SpaceBefore = 1
.SpaceAfter = 1
End With
Selection.Cut
Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:="31"
Selection.Find.ClearFormatting
With Selection.Find
.Text = "YEAR_B"
.Replacement.Text = "1420 H"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.MoveDown Unit:=wdLine, Count:=3
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdCell
Selection.MoveRight Unit:=wdCell
Selection.MoveDown Unit:=wdLine, Count:=1
Selection.MoveDown Unit:=wdLine, Count:=12, Extend:=wdExtend
Selection.MoveRight Unit:=wdCharacter, Count:=4, Extend:=wdExtend
Selection.Paste
Selection.MoveRight Unit:=wdCell
Selection.MoveRight Unit:=wdCell
Selection.MoveRight Unit:=wdCell
Selection.MoveRight Unit:=wdCell
Selection.MoveRight Unit:=wdCell
Selection.MoveRight Unit:=wdCell
Selection.MoveDown Unit:=wdLine, Count:=12, Extend:=wdExtend
Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
Selection.ParagraphFormat.FirstLineIndent = CentimetersToPoints(0.31)
Selection.MoveRight Unit:=wdCell
Selection.MoveRight Unit:=wdCell
Selection.MoveRight Unit:=wdCell
Selection.MoveRight Unit:=wdCell
Selection.MoveDown Unit:=wdLine, Count:=12, Extend:=wdExtend
Selection.Font.Italic = wdToggle
End Sub
Sub ShadowedCellB()
Dim MyFile, MyString, ResFile, FileName, StrTahun, StrTahunN
StrTahunN = Format(MwqtInputs.TahunHijriyah.ListIndex + 1301)
StrTahun = Format(MwqtInputs.TahunHijriyah.ListIndex + 1300)
ResFile = DirectoryHasilTabel & "shift" & StrTahun & "b.out"
FileName = "shift" & StrTahun & "b.out"
If (MwqtInputs.TahunHijriyah.SelText = "") Then
ResFile = DirectoryHasilTabel & "shift" & "1420b.out"
FileName = "shift" & "1420b.out"
End If
55
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
MyFile = Dir(ResFile)
If (MyFile <> "") Then
Kill ResFile
End If
End Sub
Sub ShadowedCellA()
Dim MyFile, MyString, ResFile, FileName, StrTahun, StrTahunP
StrTahun = Format(MwqtInputs.TahunHijriyah.ListIndex + 1300)
StrTahunP = Format(MwqtInputs.TahunHijriyah.ListIndex + 1299)
ResFile = DirectoryHasilTabel & "shift" & StrTahun & "a.out"
FileName = "shift" & StrTahun & "a.out"
If (MwqtInputs.TahunHijriyah.SelText = "") Then
ResFile = DirectoryHasilTabel & "shift" & "1420a.out"
FileName = "shift" & "1420a.out"
End If
56
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
MMwqt2000.bas
Sub PageSetup()
With ActiveDocument.PageSetup
.LineNumbering.Active = False
.Orientation = wdOrientLandscape
.TopMargin = CentimetersToPoints(2)
.BottomMargin = CentimetersToPoints(2)
.LeftMargin = CentimetersToPoints(2.5)
.RightMargin = CentimetersToPoints(1.7)
.Gutter = CentimetersToPoints(0)
.HeaderDistance = CentimetersToPoints(1.27)
.FooterDistance = CentimetersToPoints(1.27)
.PageWidth = CentimetersToPoints(29.7)
.PageHeight = CentimetersToPoints(21)
.FirstPageTray = wdPrinterDefaultBin
.OtherPagesTray = wdPrinterDefaultBin
.SectionStart = wdSectionNewPage
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.VerticalAlignment = wdAlignVerticalTop
.SuppressEndnotes = False
.MirrorMargins = True
End With
End Sub
57
Surabaya, 11 – 12 Oktober 2002
Kuliah Umum : Komputerisasi Program Hisab dan Rukyat
58
Surabaya, 11 – 12 Oktober 2002