Kita sudah membuat program yang disa digunakan untuk bekerja dengan program-program lain menggunakan redireksi input dan output serta penggunaan pipe. Jika, kita kembali lagi pada perintah dir, kita melihat bahwa keluaran perintah ini bisa berubah sesuai dengan parameter yang diberikan. Kita juga bisa membuat program yang membaca parameter untuk membuat aksi yang berbeda tergantung pada parameter yang diberikan. Kali ini kita akan mencoba untuk mengubah program harilahir untuk menggunakan parameter program sehingga kita sekaligus memasukkan tanggal lahir sewaktu memanggil program seperti berikut:
1 | C:\Source>haritanggal 17 8 1945 |
Delphi memiliki cara untuk membaca parameter yang diberikan saat memanggil program menggunakan fungsi ParamStr dan ParamCount. Fungsi ParamCount akan memberikan jumlah parameter yang diberikan, sedangkan fungsi ParamStr membutuhkan sebuah parameter berupa nomor dari parameter program yang diminta. Sebagai contoh, ParamCount untuk pemanggilan program seperti diatas akan mengembalikan nilai 3, dan ParamStr(1) akan mengembalikan nilai ’17’, ParamStr(2) mengembalikan nilai ‘8’, dan ParamStr(3) akan mengembalikan nilai ‘1945’. Di sini saya menuliskan ’17’, ‘8’, dan ‘1945’ karena tipe data yang dikembalikan oleh fungsi ParamStr adalah string.
Listing lengkap dari program baru kita adalah sebagai berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | program HariTanggal; {$APPTYPE CONSOLE} uses SysUtils; type TNamaBulan=(Januari=1, Pebruari, Maret, April, Mei, Juni, Juli, Agustus, September, Oktober, Nopember, Desember); TTanggal=record Tanggal:integer; Bulan:TNamaBulan; Tahun:integer; end; const Hari:array[0..6]of string= ('Minggu','Senin','Selasa','Rabu', 'Kamis','Jumat','Sabtu'); NamaBulan:array[Januari..Desember]of string= (' Januari ',' Pebruari ',' Maret ',' April ', ' Mei ',' Juni ',' Juli ',' Agustus ', ' September ',' Oktober ',' Nopember ', ' Desember '); HariPertama=5; HariKabisat:array[Januari..Desember]of integer= (0,31,60,91,121,152,182,213,244,274,305,335); BukanKabisat:array[Januari..Desember]of integer= (0,31,59,90,120,151,181,212,243,273,304,334); var TglCari:TTanggal; HariCari:integer; function AmbilTanggal:TTanggal; var tmp:integer; begin Result.Tanggal:=StrToInt(ParamStr(1)); tmp:=StrToInt(ParamStr(2)); Result.Bulan:=TNamaBulan(tmp); Result.Tahun:=StrToInt(ParamStr(3)); end; function IsKabisat(Y:integer):boolean; begin result:=((Y mod 4=0)and(Y mod 100<>0)) or(Y mod 400=0); end; function HariDalamTahun(Tgl:TTanggal):integer; begin if IsKabisat(Tgl.Tahun)then Result:=HariKabisat[Tgl.Bulan]else Result:=BukanKabisat[Tgl.Bulan]; Result:=Result+Tgl.Tanggal; end; function HitungHari:integer; var i:integer; begin //Hitung hari dalam tahun result:=0; for i:=0 to TglCari.Tahun-1 do if IsKabisat(i)then result:=result+366 else result:=result+365; //tambahkan dengan sisa hari result:=result+HariDalamTahun(TglCari); end; procedure DisplayHari; begin Writeln('Hari pada tanggal ',TglCari.Tanggal, NamaBulan[TglCari.Bulan],TglCari.Tahun, ' adalah hari ',Hari[HariCari]); end; begin if ParamCount<3 then begin Writeln('HariTanggal tanggal bulan tahun'); Writeln('Semua parameter dalam angka'); Writeln('Tekan Enter'); Readln; Halt(1); end; TglCari:=AmbilTanggal; HariCari:=(HariPertama+HitungHari) mod 7; DisplayHari; Writeln('Tekan Enter'); Readln; end. |
Di awal program, kita harus memastikan bahwa jumlah parameter yang diberikan mencukupi, yaitu 3. Oleh karena itu jika jumlah parameternya kurang dari 3, kita memberi petunjuk cara pemakaian dan segera menghentikan program. Fungsi yang digunakan untuk menghentikan program adalah Halt dengan parameter berupa nilai yang dalam Command Prompt akan terbaca sebagai ErrorLevel. Bacalah buku DOS untuk mengetahui apa itu ErrorLevel.
Fungsi AmbilTanggal membaca parameter program dengan ParamStr. Akan tetapi nilai yang dikembalikan oleh fungsi ParamStr adalah string, sedangkan yang kita butuhkan adalah integer. Delphi menyediakan fungsi untuk mengubah string menjadi integer dengan fungsi StrToInt. Fungsi ini terdapat pada unit SysUtils. Oleh karena itu kita menyertakan unit SysUtils pada bagian uses. Fungsi kebalikan dari StrToInt adalah IntToStr yang akan membuat string yang akan menunjukkan angka yang senilai dengan isi dari variabel bertipe integer.
Jika program dijalankan, tampilannya akan seperti berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | C:\Source>haritanggal HariTanggal tanggal bulan tahun Semua parameter dalam angka Tekan Enter C:\Source>echo %ErrorLevel% 1 C:\Source>haritanggal 17 8 1945 Hari pada tanggal 17 Agustus 1945 adalah hari Jumat Tekan Enter C:\Source> |
Dengan menjalankan program diikuti tanggal, bulan, dan tahun yang semuanya dalam angka, maka proses perhitungan dan penampilan hasil akan dijalankan.


