Contoh-contoh yang lain

Sebelum kita kembali kepada pemrograman GUI, kita masih perlu untuk mencoba beberapa contoh sampai kita mengenal konsep pemrograman berorientasi obyek.

Di hari apakah Anda lahir?

Untuk mengetahui hari Anda lahir, caranya adalah menghitung berapa hari dari Anda lahir sampai hari ini. Dengan mengambil sisa bagi dengan tujuh dari jumlah hari hasil perhitungan tersebut, dan dengan mengetahui nama hari ini, maka Anda juga bisa mengetahui nama hari di saat Anda lahir.

program HariLahir;
{$APPTYPE CONSOLE}
type
  TNamaHari=(Minggu, Senin, Selasa, Rabu,
            Kamis, Jumat, Sabtu);
  TNamaBulan=(Januari=1, Pebruari, Maret, April,
              Mei, Juni, Juli, Agustus, September,
              Oktober, Nopember, Desember);
var
  TglLahir,BlnLahir,ThnLahir:integer;
  TglSkr,BlnSkr,ThnSkr:integer;
  HariSkr,HariL:integer;
  procedure AmbilData;
  begin
    Writeln('**Semua data dalam angka**'#13#10);
    Write('Tanggal Lahir?: ');
    Readln(TglLahir);
    Write('Bulan Lahir?  : ');
    Readln(BlnLahir);
    Write('Tahun Lahir?  : ');
    Readln(ThnLahir);
    Write(#13#10'Tanggal Sekarang?: ');
    Readln(TglSkr);
    Write('Bulan Sekarang?  : ');
    Readln(BlnSkr);
    Write('Tahun Sekarang?  : ');
    Readln(ThnSkr);
    Writeln('Hari apakah sekarang?');
    Write('Minggu=0, Senin=1, ..Sabtu=6: ');
    Readln(HariSkr);
  end;

  function IsKabisat(Y:integer):boolean;
  begin
    result:=((Y mod 4=0)and(Y mod 100<>0))
            or(Y mod 400=0);
  end;

  function HariDlmBulan(B:integer;
            Y:integer):integer;
  begin
    case TNamaBulan(B) of
    Januari,Maret,Mei,Juli,Agustus,
    Oktober,Desember:result:=31;
    April,Juni,September,Nopember:result:=30;
    Pebruari:if IsKabisat(Y)then result:=29
                else result:=28;
    end;
  end;

  function HitungHari:integer;
  var i:integer;
  begin
    //Hitung hari dalam tahun
    result:=0;
    for i:=ThnLahir to ThnSkr-1 do
      if IsKabisat(i)then result:=result+366
         else result:=result+365;
    //tambahkan dengan sisa bulan
    for i:=1 to BlnSkr-1 do
      result:=result+HariDlmBulan(i,ThnSkr);
    //tambahkan dengan sisa hari
    result:=result+TglSkr;
    //kurangkan dengan bulan lahir 
    for i:=1 to BlnLahir-1 do
      result:=result-HariDlmBulan(i,ThnLahir);
    //kurangkan dengan tgl lahir
    result:=result-TglLahir;
  end;

  procedure DisplayHari(H:integer);
  begin
    case TNamaHari(H) of
    Minggu:Writeln('Anda lahir hari Minggu');
    Senin:Writeln('Anda lahir hari Senin');
    Selasa:Writeln('Anda lahir hari Selasa');
    Rabu:Writeln('Anda lahir hari Rabu');
    Kamis:Writeln('Anda lahir hari Kamis');
    Jumat:Writeln('Anda lahir hari Jumat');
    Sabtu:Writeln('Anda lahir hari Sabtu');
    end;
  end;
begin
  AmbilData;
  HariL:=HitungHari mod 7;
  HariL:=(HariSkr-HariL+7)mod 7;
  DisplayHari(HariL);
  Writeln('Tekan Enter');
  Readln;
end.

Sungguh banyak yang kita pelajari dari program HariLahir ini. Hal tersebut terlihat pada bagian berikut:

Tipe enumerated

Tipe ini mendefinisikan urutan dari sekumpulan nilai dengan cara memberikan daftar pengenal yang menandakan nilai tersebut. Kita bisa menentukan tipe data enumerated dengan cara sebagai berikut:

type //ini adalah kata yang dicadangkan yang digunakan
		//setiap kita akan mendefinisikan tipe data
	NamaTipe=(pengenal1,pengenal2,...,pengenaln);

Biasanya kita memberikan awalan huruf T untuk nama tipe data. Secara default, pengenal1 akan memiliki nilai ordinal 0. Kemudian pengenal2 memiliki nilai ordinal pengenal1+1 dan seterusnya. Akan tetapi kita bisa menentukan nilai ordinal untuk pengenal-pengenal tersebut dengan cara menambahkan tanda sama dengan diikuti nilai ordinal yang diinginkan. Contoh untuk hal ini adalah pada TNamaBulan. Kita biasa menyebut bulan Januari sebagai bulan 1, bukan bulan 0. Oleh karena itu kita perlu menentukan nilai ordinal untuk Januari sebagai 1 bukan 0.

Tipe Char

Kita telah mengetahui bahwa string adalah untaian karakter, dan kita telah sering menggunakan tipe data string. Akan tetapi kita bahkan belum pernah menggunakan tipe data karakter secara individual. Tipe data karakter di dalam Delphi disebut dengan Char. Untuk menugasi variabel dengan tipe ini, kita bisa menggunakan beberapa cara seperti berikut:

var C:Char;//deklarasi
....
C:='A';
C:=#65;//menggunakan nilai ordinalnya
C:=Char(65);//type casting

Cara pertama adalah cara yang paling biasa karena kita langsung mengetahui tampilan datanya jika dicetak. Cara kedua adalah penugasan menggunakan nilai ordinalnya. Kita sudah pernah membahas bahwa tipe karakter memiliki nilai ordinal dari 0 hingga 255. Untuk menugasi tipe karakter menggunakan nilai ordinalnya, kita menambahkan tanda pagar (#) sebelum angka ordinalnya. Contoh pertama dan contoh kedua akan memberikan nilai yang sama karena kode ASCII untuk huruf A adalah 65. Cara ketiga adalah type casting. Type casting adalah cara untuk menyesuaikan tipe data. 65 adalah bilangan, sedangkan C adalah tipe karakter. Oleh karena itu bilangan 65 tidak akan diterima oleh C. Dengan cara type casting, maka 65 akan dianggap sebagai tipe karakter.

Sekarang perhatikan pada prosedur AmbilData. Perhatikan bahwa kita menambahkan karakter #13 dan karakter #10 pada Writeln pertama dan saat menanyakan tanggal sekarang. #13 disebut dengan Carry Return, sedangkan #10 adalah Line Feed. Pasangan #13#10 adalah pasangan karakter yang menandakan ganti baris.

Operator boolean

Kita bisa menggabungkan dua ekspresi boolean untuk menghasilkan satu nilai menggunakan operator boolean. Operator boolean ada 4 macam yaitu:

  1. and. Dua ekspresi boolean yang digabungkan dengan operator ini akan bernilai true jika kedua ekspresinya bernilai true.
  2. or. Dua ekspresi boolean yang digabungkan dengan operator ini akan bernilai false jika kedua ekspresinya bernilai false.
  3. xor. Dua ekspresi boolean yang digabungkan dengan operator ini akan bernilai false jika kedua ekspresinya bernilai sama (true dan true, atau false dan false).
  4. not. Operator ini merupakan operator unari yang hanya dikenakan pada satu operand (ekspresi yang dikenai operator). Operator ini membalik nilai ekpresi, true menjadi false dan false menjadi true.

Tahun Kabisat

Ketentuan tahun yang dianggap sebagai tahun kabisat adalah tahun yang merupakan kelipatan 4 tetapi bukan merupakan tahun abad. Pengecualian terhadap tahun abad adalah jika tahun tersebut merupakan kelipatan 400 maka tahun tersebut juga merupakan tahun kabisat (atau disebut sebagai abad kabisat).

Kata yang lebih singkat untuk pengertian di atas adalah:

Tahun yang habis dibagi 4 tetapi tidak habis dibagi 100 atau tahun yang habis dibagi 400. Dalam bahasa logika, tetapi sama artinya dengan dan.

Bilangan merupakan kelipatan 4 adalah jika bilangan tersebut dibagi dengan 4 sisanya 0. Operator untuk mendapatkan sisa bagi adalah mod.

Pemilihan aksi dengan case of

Pemilihan aksi dengan pilihan yang banyak dapat dilakukan menggunakan case seperti berikut:

  case ekspresi of
  Keadaan1:aksi1;
  Keadaan2:aksi2;
  Keadaan3,Keadaan4:aksi3_atau_4;
  ....
  KeadaanN:aksiN;
  else aksiLainnya;
  end;

Jika ekspresi menghasilkan nilai yang sama dengan Keadaan1, maka aksi1 yang akan dijalankan. Jika ada beberapa nilai yang akan melakukan aksi yang sama, kita bisa menggabungkannya dengan pemisahan tanda koma seperti pada Keadaan3 dan Keadaan4. Bagian else akan dilaksanakan jika ekspresi tidak menemukan nilai yang sesuai dengan nilai-nilai yang disebutkan. Seperti pada if, bagian else merupakan pilihan yang boleh ada boleh juga tidak.

Pada prosedur DisplayHari, nilai-nilai yang disebutkan di dalam daftar case adalah nilai-nilai dari tipe TNamaHari. Sedangkan parameter yang diberikan adalah ekspresi dengan tipe integer. Oleh karena itu kita perlu melakukan type casting terhadap parameternya agar dianggap bertipe TNamaHari.

Apakah Anda menyukai post ini? Mengapa tidak memberikan komentar di bawah dan melanjutkan perbincangan, atau berlangganan my feed dan dapatkan artikel semacam ini yang dikirm secara otomatis feed reader Anda.
Harap diperhatikan bahwa komentar atau pertanyaan yang disampaikan haruslah sesuai dengan topik yang sedang dibahas. Komentar atau pertanyaan yang tidak sesuai dengan topik akan kami hapus :!:

Tinggalkan komentar

Sebelum membuat komentar, pastikan Anda telah membaca komentar-komentar sebelumnya. Jangan membuat pertanyaan yang telah ditanyakan. Perhatikan pula link-link dalam artikel. Lihatlah link tersebut sebelum membuat pertanyaan, karena mungkin penjelasan dari pertanyaan Anda telah di jawab dalam link tersebut.

Komentar yang tidak mengikuti aturan ini akan dihapus!

(wajib)

(wajib)


Time limit is exhausted. Please reload the CAPTCHA.