Headlines News :
Home » , » Program Zodiac dengan Pascal

Program Zodiac dengan Pascal

Written By Mangku on Jumat, 23 Desember 2011 | 19.54


Program Zodiac dengan Pascal

Membangun program untuk menentukan zodiac memang terlalu lazim dan mudah, di semua jenis bahasa pemogramman. Banyak sekolah-sekolah computer atau kursus-kursur yang mengambil program zodiac sebagai bahan latihan awal. Tapi pembahasan mengenai program zodiac dengan Pascal kali ini mungkin akan lebih spesial. Karena di sini diterapkan trik-trik menarik dan penggunaan prosedur dan fungsi.

Desain Program

Program untuk menentukan zodiac melatih penggunaan beberapa struktur pengambilan keputusan dalam bahasa pemograman yaitu: struktur IF bersarang (If … Then … Else), dan strukstur seleksi (Case Of). Karena kedua buah struktur ini boleh dikata merupakan ‘jantung’ dari bahasa pemograman. Baiklah, langsung saja kita ke pembahasan.

Pada program ini diterapkan beberapa prosedur dan fungsi, diantaranya:

Prosedur

Tulis => Menuliskan teks pada posisi tertentu. Prosedur ini juga disertai 3 (tiga) pilihan perataan teks (terhadap layar monitor) yaitu: rata kiri, rata, rata tengah, dan rata kanan.

Window => Membuat window (kotak) dengan ukuran tertentu dan pada lokasi tertentu, window ini dilengkapi dengan bingkai dan dapat diarsir (diisi bagian dalamnya), juga dapat ditentukan warna huruf dan warna latarnya.

Keterangan => Menentukan nama zodiac berdasarkan nilai yang diterima, kemudian menampilkannya pada layar monitor.

Cek_Zodiak => Menentukan id dari zodiac berdasarkan nilai tanggal dan bulan yang diterima.

Input_Tanggal => Menerima nilai entri untuk mengisi nilai tanggal dan bulan.


Fungsi

IntToStr => Mengkonversi nilai bertipe LongInt menjadi String
Hari_Ini => Mencetak nama hari dan bulan menurut data tanggal pada sistem

Baris Kode
PROGRAM ZODIAK;
USES CRT, DOS;

TYPE TANGGAL = RECORD
     DD, MM, YY:INTEGER;
END;

VAR I, J, X, Y:INTEGER;
    TOMBOL, HURUF:CHAR;
    STANGGAL:STRING;
    NAMA:STRING;
    SALAH:INTEGER;
    MYTANGGAL:TANGGAL;
    IDX:CHAR;
    SJK:STRING;

(*
  FUNGSI UNTUK MENGKONVERSI NILAI LONGINT
  MENJADI STRING (TEKS)
*)

FUNCTION INTTOSTR(I: LONGINT): STRING;
VAR
        S: STRING[11];

BEGIN
     STR(I, S);
     INTTOSTR := S;
END;

(*
  FUNGSI UNTUK MENENTUKAN NAMA HARI DAN BULAN
  MENURUT TANGGAL PADA SISTEM
*)

FUNCTION HARI_INI:STRING;
CONST
     DAYS : ARRAY [0..6] OF STRING[9] =
          ('MINGGU','SENIN','SELASA',
          'RABU','KAMIS','JUMAT',
          'SABTU');
     MONTHS : ARRAY [1..12] OF STRING [10] =
         ('JANUARI','PEBRUARI','MARET','APRIL',
         'MEI','JUNI','JULI','AGUSTUS','SEPTEMBER',
         'OKTOBER','NOPEMBER','DESEMBER');
VAR
    Y, M, D, DOW : Word;

BEGIN
  GETDATE(Y,M,D,DOW);

  HARI_INI := 'HARI INI : ' + DAYS[DOW] + ', ' +
          INTTOSTR(d) +  ' ' + MONTHS[M] + ' ' + INTTOSTR(y);
END;

(*
  PROSEDUR UNTUK MENULISKAN TEKS
  PADA POSISI TERTENTU
*)

PROCEDURE TULIS(KIRI, ATAS, PILIH:INTEGER;
                TEKS:STRING);
VAR PANJANG:INTEGER;

BEGIN
   PANJANG := LENGTH(TEKS);
   IF PILIH = 1 THEN
        GOTOXY(KIRI, ATAS)
   ELSE IF PILIH = 2 THEN
        (* AGAR POSISI KURSOR DITENGAH-TENGAH LAYAR *)
        GOTOXY((80 - PANJANG) DIV 2, ATAS)
   ELSE IF PILIH = 3 THEN
        GOTOXY((80 - PANJANG), ATAS);
   WRITE(TEKS);
END;

(*
  PROSEDUR UNTUK MEMBUAT KOTAK/WINDOW
*)
PROCEDURE WINDOW(KIRI, ATAS, LEBAR, TINGGI,
                 WARNA1, WARNA2:INTEGER;
                 ARSIR:BYTE);

BEGIN
    TEXTATTR:=WARNA1;
    TEXTATTR:=WARNA2;

    TULIS(KIRI, ATAS, 1, CHAR(201));
    TULIS(KIRI, ATAS+TINGGI, 1, CHAR(200));
    TULIS(KIRI+LEBAR, ATAS, 1, CHAR(187));
    TULIS(KIRI+LEBAR, ATAS+TINGGI, 1, CHAR(188));

    FOR I:= KIRI+1 TO KIRI+LEBAR-1 DO
    BEGIN
        TULIS(I, ATAS, 1, 'ĂŤ');
        TULIS(I, ATAS+TINGGI, 1, 'ĂŤ');
    END;

    FOR I:= ATAS+1 TO TINGGI+ATAS-1 DO
    BEGIN
        TULIS(KIRI, I, 1,CHAR(186));
        TULIS(KIRI + LEBAR, I, 1,CHAR(186));
    END;

    IF ARSIR = 1 THEN
    BEGIN
        FOR I:= ATAS + 1 TO TINGGI + ATAS - 1 DO
        FOR J:= KIRI + 1 TO KIRI + LEBAR - 1 DO
        TULIS(J, I, 1, CHAR(176));
    END
    ELSE
    BEGIN
        FOR I:= ATAS + 1 TO TINGGI + ATAS - 1 DO
        FOR J:= KIRI + 1 TO KIRI + LEBAR - 1 DO
    TULIS(J, I, 1, ' ');
    END;

    TEXTATTR:=WARNA2;
END;

(*
  PROSEDUR UNTUK MENENTUKAN NAMA ZODIAK
  MENURUT NILAI DARI VARIABEL IDX
*)

PROCEDURE KETERANGAN;

BEGIN
    CLRSCR;
    WINDOW(1,1,79,23,$4A,$5B,0);

    IF (SJK) = 'L' THEN
        TULIS(3,3,1,'om ' + NAMA)
    ELSE
        TULIS(3,3,1,'MBA ' + NAMA);

    TULIS (3,4,1, 'TERNYATA ZODIAK ANDA ADALAH ...');

    WINDOW((80-14) dIV 2,6,14,2,$21,$1C,0);
    WINDOW(2,10,77,13,$21,$1C,0);

    TEXTCOLOR(YELLOW);
    TULIS(3,11,1,'SIFAT :');
    TULIS(3,18,1,'CIRI KHAS :');

    TEXTCOLOR(GREEN);

    CASE IDX OF
    '1' : BEGIN
               TULIS(1,7,2,'CAPRICORNUS')
               {TULIS(3,19,1,'')}
          END;
    '2': BEGIN
              TULIS(1,7,2,'AQUARIUS')
              {TULIS(3,19,1,'')}
         END;
    '3' : BEGIN
               TULIS(1,7,2,'PISCES')
               {TULIS(3,19,1,'')}
          END;
    '4': BEGIN
              TULIS(1,7,2,'ARIES')
              {TULIS(3,19,1,'')}
         END;
    '5' : BEGIN
               TULIS(1,7,2,'TAURUS')
               {TULIS(3,19,1,'')}
          END;
    '6': BEGIN
              TULIS(1,7,2,'GEMINI')
              {TULIS(3,19,1,'')}
         END;
    '7' : BEGIN
               TULIS(1,7,2,'CANCER')
               {TULIS(3,19,1,'')}
          END;
    '8': BEGIN
              TULIS(1,7,2,'LEO')
              {TULIS(3,19,1,'')}
         END;
    '9' : BEGIN
               TULIS(1,7,2,'VIRGO')
               {TULIS(3,19,1,'')}
          END;
    'A': BEGIN
              TULIS(1,7,2,'LIBRA')
              {TULIS(3,19,1,'')}
         END;
    'B' : BEGIN
               TULIS(1,7,2,'SCORPIO')
               {TULIS(3,19,1,'')}
          END;
    'C': BEGIN
              TULIS(1,7,2,'SAGITARIUS')
              {TULIS(3,19,1,'')}
         END;
    END;
END;

(*
  PROSEDUR UNTUK MENENTUKAN IDX BERDASARKAN TANGGAL DAN BULAN
  YANG DIINPUTKAN
*)

PROCEDURE CEK_ZODIAK(TANGGAL, BULAN:WORD);
VAR NAMA_ZODIAK:STRING;

BEGIN
    CLRSCR;

    IF BULAN = 1 THEN
        BEGIN
           IF (TANGGAL) >= 23 THEN
               IDX := '2'
           ELSE
               IDX := '1'
        END
    ELSE IF BULAN = 2 THEN
        BEGIN
           IF (TANGGAL) >= 23 THEN
               IDX := '3'
           ELSE
               IDX := '2'
        END
    ELSE IF BULAN = 3 THEN
        BEGIN
           IF (TANGGAL) >= 23 THEN
               IDX := '4'
           ELSE
               IDX := '3'
        END
    ELSE IF BULAN = 4 THEN
        BEGIN
           IF (TANGGAL) >= 23 THEN
               IDX := '5'
           ELSE
               IDX := '4'
        END

    ELSE IF BULAN = 5 THEN
        BEGIN
           IF (TANGGAL) >= 23 THEN
               IDX := '6'
           ELSE
               IDX := '5'
        END
    ELSE IF BULAN = 6 THEN
        BEGIN
           IF (TANGGAL) >= 23 THEN
               IDX := '7'
           ELSE
               IDX := '6'
        END
    ELSE IF BULAN = 7 THEN
        BEGIN
           IF (TANGGAL) >= 23 THEN
               IDX := '8'
           ELSE
               IDX := '7'
        END
    ELSE IF BULAN = 8 THEN
        BEGIN
           IF (TANGGAL) >= 23 THEN
               IDX := '9'
           ELSE
               IDX := '8'
        END
     ELSE IF BULAN = 9 THEN
        BEGIN
           IF (TANGGAL) >= 23 THEN
               IDX := 'A'
           ELSE
               IDX := '9'
        END
     ELSE IF BULAN = 10 THEN
        BEGIN
           IF (TANGGAL) >= 23 THEN
               IDX := 'B'
           ELSE
               IDX := 'A'
        END
     ELSE IF BULAN = 11 THEN
        BEGIN
           IF (TANGGAL) >= 23 THEN
               IDX := 'C'
           ELSE
               IDX := 'B'
        END
    ELSE IF BULAN = 12 THEN
        BEGIN
           IF (TANGGAL) >= 23 THEN
               IDX := '1'
           ELSE
               IDX := 'C'
        END;

   KETERANGAN;
END;

(*
  PROSEDUR UNTUK MENGINPUTKAN TANGGAL
*)
PROCEDURE INPUT_TANGGAL;
BEGIN
    TULIS(39,7,1,'  /  /  ');
    GOTOXY(39,7);
    I:=34; J:=7;
    STANGGAL := '';
    HURUF := #0;

    WHILE (HURUF <> #13) AND (LENGTH(STANGGAL) < 8) DO
    BEGIN
          REPEAT
             HURUF:=READKEY;

             (*  PEMBATASAN AGAR TOMBOL KEYBOARD YG BERFUNGSI
              HARUSLAH TOMBOL ANGKA DAN ENTER SAJA *)

          UNTIL HURUF IN ['1','2','3','4','5',
          '6','7','8','9','0',#13];
          IF HURUF <> #13 THEN
          BEGIN
                STANGGAL := STANGGAL + HURUF;
                WRITE(HURUF);
                
                IF (LENGTH(STANGGAL)=2) OR
                (LENGTH(STANGGAL)=5) THEN
                BEGIN
                     STANGGAL := STANGGAL + '/';
                     WRITE('/');
                END;
          END;
    END;

        TULIS(39,7, 1, STANGGAL);

        (* MENGISI NILAI-NILAI VARIABEL (TANGGAL,
           BULAN DAN TAHUN) BERDASARKAN STRING
           YANG DIINPUTKAN *)

        VAL(COPY(STANGGAL,1,2),MYTANGGAL.DD,SALAH);
        VAL(COPY(STANGGAL,4,2),MYTANGGAL.MM,SALAH);
        VAL(COPY(STANGGAL,7,2),MYTANGGAL.YY,SALAH);
END;

(* PROGRAM UTAMA *)
BEGIN
    CLRSCR;

    (* MEMPERCANTIK TAMPILAN *)
    WINDOW(1,1,79,23,$4A,$5B,1);
    WINDOW(20,2,41,3,$1A,15,0);

    TULIS(0,3,2,'SELAMAT DATANG');
    TULIS(0,4,2,'DI RAMALAN ZODIAK INOCHIS' + 
    CHAR(147)  + 'ftware');

    WINDOW(18,8,45,4,$3B,$6F,0);
    TULIS (0, 9, 2, 'DIBUAT OLEH : KI AGUNG NOVIAN');
    TULIS (0, 10, 2, 'TEAM PROGRAMMER');
    TULIS (0, 11, 2, 'INOCHI COMPUTER CIREBON');
    TEXTATTR:=$1F;
    TULIS (0, 15, 2, HARI_INI);

    TEXTATTR:=$8F;
    TULIS (0, 17, 2, 'INOCHIS' + CHAR(147) + 'ftware');
    TULIS (0, 18, 2,
    'Jl. P. Drajat Gg. Jepun No. 48 ' 
    + 'Telp. (0231) 210178 Cirebon');

    WINDOW(19,21,43,2,$1A,15,0);
    TULIS(0,22,2,'TEKAN SEMBARANG TOMBOL UNTUK MELANJUTKAN');
    READKEY;

    CLRSCR;
    WINDOW(1,1,79,23,$1D,$7F,1);
    WINDOW(15,3,50,8,$2A,$6B,0);

    TULIS (20,5,1,'NAMA ANDA        : ');
    GOTOXY(39,5);READLN(NAMA);
    TULIS (20,7,1,'TANGGAL LAHIR    : ');

    INPUT_TANGGAL;

    TULIS (20,9,1,'J. KELAMIN (L/K) : ');

    WHILE (HURUF <> #13) AND (LENGTH(SJK) < 2) DO
    BEGIN
        REPEAT
            HURUF := READKEY;
        UNTIL HURUF IN ['L', 'l', 'p', 'P', #13];
        IF HURUF <> #13 THEN
        BEGIN
           SJK := SJK + HURUF;
           WRITE (HURUF);
        END;
    END;

    (* PEMANGGILAN PROSEDUR *)
    CEK_ZODIAK(MYTANGGAL.DD, MYTANGGAL.MM);

    READLN;
END.

Tampilan (Lay-Out)

Program ini nantinya mempunyai tiga tampilan yaitu: tampilan muka, tampilan input dan tampilan hasil.

Tampilan Muka
Pada tampilan muka dilihatkan keterangan mengenai program.

Tampilan Input
Tampilan input adalah tampilan permintaan input data yang akan diproses.

Tampilan Hasil
Pada tampilan hasil dilihatkan hasil proses dari data yang telah diinputkan.
Share this article :

0 komentar:

Speak up your mind

Tell us what you're thinking... !

Sponsor

Dragon Nest BarongNET

Followers

Kotak Pesan

Klik Sponsor Donk!!

 
Support : Creating Website | Johny Template | Mas Template
Proudly powered by Blogger
Copyright © 2011. Sekala Niskala™ - All Rights Reserved