PROCEDURE DIVISION (lanjutan) Statement PERFORM ...THROUGH/THRU Bentuk statement ini akan membawa proses menuju ke paragraf yang dituju kemudian melanjutkan sampai ke paragraf yang disebutkan setelah THROUGH/THRU. Misal : PAR-A PERFORM PAR-D THRU PAR-E. PAR-B. .... PAR-C. .... PAR-D. .... PAR-E. .... CONDITIONAL STATEMENT Perintah kondisi dipergunakan untuk menyeleksi suatu kondisi. Perbedaan conditional statement dengan imperative statement yang sering dijumpai adalah : Conditional statement adalah suatu statement yang dipergunakan untuk menyeleksi suatu kondisi/syarat dan akan mengerjakan suatu operasi tergantung dari nilai kondisinya Imperative statement adalah statement yang langsung mengerjakan operasi tanpa ada penyeleksian suatu kondisi. Seluruh perintah kondisi dalam COBOL diawali dengan IF Verb. Ada beberapa jenis perintah kondisi dalam COBOL. Kondisi sederhana (Simple condition) Kondisi tanda (Sign condition) Kondisi kelas (class condition) Kondisi bersarang (Nested condition) Kondisi kompleks/jamak (Complex condition/Compound condition) KONDISI SEDERHANA Perintah ini digunakan untuk menyeleksi kondisi tunggal, yaitu membandingkan suatu hubungan antara 2 item yang ditunjukkan oleh tanda operasi (Operational operator). Relatiional operator dalam COBOL yaitu : TANDA DALAM KATA < LESS THAN > GREATER THAN = EQUAL TO NOT< NOT LESS THAN NOT > NOT GREATER THAN NOT= NOT EQUAL TO
AP3/TI/Ayuliana/2009
1
Bentuk umum : IF
Nama-data-1 Literal-1 Ungkapan-aritmatika-1
IS [NOT] < IS [NOT] = IS [NOT] >
Nama-data-2 Literal-2 Ungkapan-aritmatika-2
IMPERATIVE STATEMENT
KONDISI TANDA Perintah ini digunakan untuk menentukan apakah suatu data/perumusan ekspresi aritmatika mempunyia nilai sama dengan nol, positif, atau negative. Bentuk umum : IF
Nama-data-1 Ungkapan-aritmatika-1
IS [NOT]
POSITIVE NEGATIVE ZERO
IMPERATIVE STATEMENT
KONDISI KELAS Perintah ini memungkinkan untuk penyeleksian apakah isi suatu field termasuk kelas numerik atau alphabetik. Bentuk umum : IF Nama-Data IS [NOT]
NUMERIC ALPHABETIC
IMPERATIVE STATEMENT
KONDISI BERCABANG Perintah ini memungkinkan untuk penyeleksian bercabang, bila kondisi terpenuhi maka akan menjalankan blok statement-1 dan bila tidak terpenuhi akan menjalankan next statement setelah ELSE. Bentuk umum : IF kondisi
Statement-1 NEXT SENTENCE
ELSE statement-2 ELSE NEXT SENTENCE
KONDISI DARI NAMA-KONDISI Suatu nama kondisi dimulai dengan level number 88 (harus dideklarasikan pada DATA DIVISION). Pada PROCEDURE DIVISION, statement kondisi dari nama-kondisi adalah suatu statement kondisi yang menyeleksi isi dari nilai data yang di kandung oleh nama-kondisi tersebut. Misal : Pada DATA DIVISION tertulis 01 Mutu PIC 9. 88 Mutu-Rendah VALUE 3. 88 Mutu-Sedang VALUE 2. 88 Mutu-Tinggi VALUE 1. Maka pada PROCEDURE DIVISION penyeleksian kondisi akan : IF Mutu-Rendah PERFORM Kelompok-Rendah. IF Mutu-Sedang PERFORM Kelompok-Sedang. IF Mutu-Tinggi PERFORM Kelompok-Tinggi..
AP3/TI/Ayuliana/2009
2
KONDISI JAMAK Kondisi jamak (compound conditions) adalah kondisi yang mempunyai lebih dari 1 kondisi, merupakan gabungan dari kondisi tunggal/ sederhana dengan penggunaan operator logika OR, AND, atau NOT. OCCURS Clause Digunakan untuk tujuan mengulang data item didalam record beberapa kali, yang akan membentuk table. Bentuk Umum : [; OCCURS integer TIMES. ASCENDING DESCENDING
KEY IS nama-data-1[, nama-data-2]
INDEXED BY nama-indeks-1[, nama-indeks-2]…
OCCURS Clause tidak boleh digunakan pada level number 01 atau 77. Digunakan pada FILE SECTION, WORKING-STORAGE SECTION, atau LINKAGE SECTION. Integer TIMES, menunjukkan berapa kali data-item akan diulang dalam suatu record ASENDING atau DECENDING, menunjukkan bagaimana data tersebut diatur tergantung dari nilainya KEY IS dan INDEXED BY, menunjukkan nama kunci yang dipergunakan untuk statemenr SEARCH.
TABEL DIMENSI SATU Mempunyai nilai-nilai data yang bertipe sama berbentuk array. Misal : 01 TABEL-GAJI. 02 GAJI OCCURS 5 TIMES PIC 9(5)V99. Maka akan terbentuk table dimensi satu yang bila di ilustrasikan TABEL-GAJI GAJI(1) GAJI(2) GAJI(3) GAJI(4)
GAJI(5)
TABEL DIMENSI DUA Merupakan sekumpulan data yang membentuk tabel, yang elemen masing-masing data ditunjukkan oleh dua buah subscipt. Misal : 01 TABEL-PENJUALAN. 02 SALESMAN OCCURS 3 TIMES. 03 BULAN OCCURS 3 TIMES PIC 9(6). Total data yang di berikan ada 3*3 = 9 data. TABEL DIMENSI TIGA Merupakan sekumpulan data yang membentuk tabel, yang elemen masing-masing data ditunjukkan oleh tiga buah subscipt. Misal : 01 TABEL-MAHASISWA. 02 FAKULTAS OCCURS 5 TIMES 03 JURUSAN OCCURS 4 TIMES. 04 NAMA OCCURS 10 TIMES PIC X(15). Total data yang di berikan ada 5*4*10 = 200 data NAMA. AP3/TI/Ayuliana/2009
3
FILE FILE URUT Organisasi file secara urut (sequential) memungkinkan pengaksesan record di file secara berurutan. ENVIRONMENT DIVISION Informasi mengenai organisasi file urut disebutkan pada INPUT-OUTPUT SECTION. ASSIGN clause menunjukkan bentuk dari file yang akan dipergunakan yaitu disk-file atau printfile. ORGANIZATION IS LINE SEQUENTIAL atau SEQUENTIAL boleh dipilih salah satu, jika tidak disebutkan dianggap (default) SEQUENTIAL. FILE STATUS clause digunakan untuk menunjukan jenis kesalahan yang terjadi dari suatu hasil operasi. Jenis kesalahan ini ditunnjukan oleh suatu nilai sepanjang karakter yang disimpan pada nama data yang disebutkan pada clause ini dan sudah disebutkan terlebih dahulu pada WORKING-STORAGE SECTION atau pada LINKAGE SECTION. Nilai status organisasi file urut Nilai Status Jenis Kesalahan 00 Tidak terjadi kesalahan 10 Akhir dari file ( End Of File ) 30 File tidak ada ( File Not Found ) 34 Disk Penuh ( Disk space full ) 91 Struktur file rusak Bentuk Umum : ENVIRONMENT DIVISION INPUT-OUTPUT SECTION FILE CONTROL. SELECT nama-file ASSIGN TO
DISK PRINTER
[;ORGANISATION IS [LINE] SEQUENTIAL] [;ACCESS MODE IS SEQUENTIAL] [;FILE STATUS IS nama-data] DATA DIVISION Bentuk umum : LABEL RECORD IS RECORD ARE
STANDARD OMITTED
[;VALUE OF FILE-ID IS nama-file di label] PROCEDURE DIVISION Statement khusus yang dipergunakan dalam PROCEDURE DIVISION yaitu OPEN, CLOSE, READ, WRITE, dan REWRITE. •
OPEN verb digunakan untuk membuka file yang akan diakses, dengan bentuk umum : INPUT nama-file1 [,nama-file2]… OUTPUT nama-file3 [,nama-file4]… OPEN I-O nama-file5 [,nama-file6]… EXTEND nama-file7 [,nama-file8]…
AP3/TI/Ayuliana/2009
4
•
CLOSE verb digunakan untuk menutup file yang digunakan setelah selesai melaksanakan operasi file untuk mecegah rusaknya struktur file, dengan bentuk umum : CLOSE nama-file1 [WITH LOCK] [,nama-file2 [WITH LOCK] ]
•
WRITE verb digunakan untuk merekamkan data pada record tertentu difile yang telah dibuka, dengan bentuk umum : WRITE nama-record [FROM nama-data1] nama-file2 [LINE] BEFORE ADVANCING integer [LINES] AFTER PAGE
•
READ verb digunakan untuk membaca record yang ada di file, dengan bentuk umum : READ nama-file RECORD [INTO nama-data] [;AT END statement imperatif]
•
REWRITE verb digunakan untuk merekam ulang record yang sudah pernah direkam / update record, dengan bentuk umum : REWRITE nama-record [FROM nama-data]
FILE INDEKS Organisasi file secara indeks adalah jika file tersebut mempunyai indeks atau table yang berisi daftar alamat-alamat dari record di disc, yang disebut dengan control index. Control index berfungsi sebagai penunjuk/pointer dari posisi record tertentu yang berisi data, sehingga memungkinkan untuk menuju kesuatu lokasi record tertentu dengan cepat. File index ini disimpan terpisah dari file datanya. Pada COBOL organisasi file indeks akan menciptakan 2 file, yaitu file data (yang berisikan data tersimpan) dan file kunci(yang berisikan control indeks). Agar kedua file tersebut saling berhubungan, maka harus dihubungkan dengan suatu field kunci yang ada pada file data. Field kunci ini ditentukan sendiri oleh pemrogram dan harus unik (setiap data dipastikan mempuyai nilai yang berbeda). Hal ini dideklarasikan pada RECORD KEY clause didalam FILE-CONTROL section. ENVIRONMENT DIVISION Hampir sama seperti file urut, informasi mengenai organisasi file pada clause SELECT harus disebutkan ORGANIZATION IS INDEXED. Untuk file yang diorganisasikan secara indexed, dapat di akses secara acak (RANDOM), dan secara DINAMIC (dapat mengakses file tersebut secara random maupun sequential secara berurutan) , sedangkan akses SEQUENTIAL akan dilaksanakan secara berurutan dari kecil ke besar berdasarkan field kuncinya. RECORD KEY clause menunjukkan nama-data yang dipergunakan sebagai field kunci, yang sudah dideklarasikan terlebih dahulu pada file description entry. FILE STATUS clause digunakan untuk menunjukan jenis kesalahan yang terjadi dari suatu hasil operasi. Jenis kesalahan ini ditunjukan oleh suatu nilai sepanjang karakter yang disimpan pada nama data yang disebutkan pada clause ini dan sudah disebutkan terlebih dahulu pada WORKING-STORAGE SECTION atau pada LINKAGE SECTION. Nilai status organisasi file indeks Nilai Status Jenis Kesalahan 00 Tidak terjadi kesalahan 10 Akhir dari file ( End Of File ) 21 Tidak bias merekam pada sequential acces mode, nilai kunci tidak urut 22 Nilai kunci tidak unik AP3/TI/Ayuliana/2009
5
23 24 30 91
Record tidak ketemu Disk Penuh File tidak ada Struktur file rusak
Bentuk umum : ENVIRONMENT DIVISION FILE CONTROL. SELECT nama-file ASSIGN TO DISK ;ORGANISATION IS INDEXED SEQUENTIAL ;ACCESS MODE IS RANDOM DYNAMIC ;RECORD KEY IS nama_data1 ;FILE STATUS IS nama_data2 DATA DIVISION Bentuk umum : ;LABEL RECORD IS STANDARD [;VALUE OF FILE-ID IS nama-file di label] PROCEDURE DIVISION Statement khusus yang dipergunakan dalam PROCEDURE DIVISION yaitu OPEN, CLOSE, READ, WRITE, REWRITE, START dan DELETE •
OPEN verb digunakan untuk membuka file yang akan diakses, dengan bentuk umum : INPUT nama-file1 [,nama-file2]… OPEN OUTPUT nama-file3 [,nama-file4]… I-O nama-file5 [,nama-file6]…
•
CLOSE Verb, digunakan untuk menutup file yang digunakan setelah selesai melaksanakan operasi file untuk mecegah rusaknya struktur file, dengan bentuk umum : CLOSE nama-file1 [WITH LOCK] [,nama-file2 [WITH LOCK] ]
•
WRITE Verb, digunakan untuk merekamkan data pada record tertentu difile yang telah dibuka, dengan bentuk umum : WRITE nama-record [FROM nama-data1] [;INVALID KEY statement-imperatif]
•
READ Verb, digunakan untuk membaca record yang ada di file, dengan bentuk umum : BU 1 : READ nama-file [NEXT] RECORD [INTO nama-data] [;AT END statement imperatif] BU 2 : READ nama-file RECORD [INTO nama-data] [;KEY IS nama-data-2] [;;INVALID KEY statement imperatif]
AP3/TI/Ayuliana/2009
6
•
REWRITE Verb, digunakan untuk merekam ulang record yang sudah pernah direkam/ update record, dengan bentuk umum : REWRITE nama-record [FROM nama-data] [;INVALID KEY statement imperatif]
•
START Verb, digunakan untuk menempatkan pembacaan record mulai record yang mengandung nilai field kunci tertentu, dengan bentuk umum : IS EQUAL TO IS = IS GREATER THAN START nama-file KEY
IS >
nama-data
IS NOT LESS THAN IS NOT < [;INVALID KEY statement-imperatif] •
DELETE Verb DELETE nama-file RECORD [;INVALID KEY statement-imperatif]
FILE RELATIF Organisasi file relatif adalah file yang recordnya dibedakan berdasarkan nomor record relatif. Nomor record relatif berkisar dari 1 – 32767. Nomor relatif tidak terekam dalam file. File relatif mempunyai panjang record yang tetap. ENVIRONMENT DIVISION Pada divisi ini, entry pada clause SELECT harus disebutkan ORGANIZATION IS RELATIVE. Organisasi file secara relatif dapat diakses secara urut, acak, maupun dinamik. Pada mode akses urut (sequential access mode) record diakses dengan urutan record relatif dari kecil ke besar. Pada mode akses acak (random access mode) pengaksesan record diakses tidak diurutkan, tetapi diatur oleh pemrogram. Pada mode akses dinamik (dynamic access mode) pengaksesan record dilakukan dengan terurut dan acak. RELATIVE KEY clause menunjukan nama-data yang dipergunakan sebagai kunci relatif, yang sudah harus disebutkan terlebih dahulu pada record description entry dalam DATA DIVISION. Clause RELATIVE KEY harus disebutkan untuk mode akses acak dan dinamik, sedangkan pada mode akses urut dapat disebutkan bila akan mempergunakan perintah START. FILE STATUS clause dipergunakan untuk menunjukan jenis kesalahan yang terjadi dari suatu operasi.Jenis kesalahan ini ditunjukan oleh suatu nilai sepanjang karakter yang disimpan pada nama data yang disebutkan pada clause ini dan sudah disebutkan terlebih dahulu pada WORKING-STORAGE SECTION atau pada LINKAGE SECTION. Untuk nilai status organisasi file relatif lihat tabel file indeks.
AP3/TI/Ayuliana/2009
7
Bentuk umum : ENVIRONMENT DIVISION FILE CONTROL. SELECT nama-file ASSIGN TO DISK ;ORGANISATION IS RELATIVE SEQUENTIAL [,RELATIVE KEY IS nama-data-1] [;ACCESS MODE IS RANDOM DYNAMIC , RELATIVE KEY IS nama-data-1 [;FILE STATUS IS nama_data2] DATA DIVISION Bentuk umum : ;LABEL RECORD IS STANDARD [;VALUE OF FILE-ID IS nama-file di label] PROCEDURE DIVISION Statement khusus yang dipergunakan dalam PROCEDURE DIVISION yaitu OPEN, CLOSE, READ, WRITE, REWRITE, START dan DELETE •
OPEN verb digunakan untuk membuka file yang akan diakses, dengan bentuk umum : INPUT nama-file1 [,nama-file2]… OPEN OUTPUT nama-file3 [,nama-file4]… I-O nama-file5 [,nama-file6]…
•
CLOSE Verb, digunakan untuk menutup file yang digunakan setelah selesai melaksanakan operasi file untuk mecegah rusaknya struktur file, dengan bentuk umum : CLOSE nama-file1 [WITH LOCK] [,nama-file2 [WITH LOCK] ]
•
WRITE Verb, digunakan untuk merekamkan data pada record tertentu difile yang telah dibuka, dengan bentuk umum : WRITE nama-record [FROM nama-data1] [;INVALID KEY statement-imperatif]
•
READ Verb, digunakan untuk membaca record yang ada di file, dengan bentuk umum : BU 1 : READ nama-file [NEXT] RECORD [INTO nama-data] [;AT END statement imperatif] BU 2 : READ nama-file RECORD [INTO nama-data] [;INVALID KEY statement-imperatif]
•
REWRITE Verb, digunakan untuk merekam ulang record yang sudah pernah direkam/ update record, dengan bentuk umum : REWRITE nama-record [FROM nama-data] [;INVALID KEY statement imperatif]
•
DELETE Verb DELETE nama-file RECORD
•
START Verb, digunakan untuk menempatkan pembacaan record mulai record yang mengandung nilai field kunci tertentu, dengan bentuk umum :
AP3/TI/Ayuliana/2009
[;INVALID KEY statement-imperatif]
8
IS EQUAL TO IS = IS GREATER THAN START nama-file KEY
IS >
nama-data
IS NOT LESS THAN IS NOT < [;INVALID KEY statement-imperatif] Contoh-contoh program Contoh 1: (GOTODEP.cob) IDENTIFICATION DIVISION. PROGRAM-ID. GOTODEP. AUTHOR. JOGIYANTO HM. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 77 Jabatan PIC 9. PROCEDURE DIVISION. TANYA-JABATAN. DISPLAY 'KODE JABATAN ANDA [1-4] : ' ACCEPT Jabatan. DISPLAY SPACE. GO TO TUNJ1, TUNJ2, TUNJ3, TUNJ4 DEPENDING ON Jabatan. DISPLAY 'TIDAK ADA KODE JABATAN TERSEBUT...!!! ULANGI' GO TO TANYA-JABATAN. TUNJ1. DISPLAY 'TUNJANGAN ANDA RP 1.000.000,-' GO TO SELESAI. TUNJ2. DISPLAY 'TUNJANGAN ANDA RP 750.000,-' GO TO SELESAI. TUNJ3. DISPLAY 'TUNJANGAN ANDA RP 500.000,-' GO TO SELESAI. TUNJ4. DISPLAY 'TUNJANGAN ANDA RP 250.000,-'. SELESAI. STOP RUN. Contoh 2: (ARRAY2.cob) IDENTIFICATION DIVISION. PROGRAM-ID. DIMEN2. AUTHOR. JOGIYANTO HM. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. AP3/TI/Ayuliana/2009
9
01 DATA-KEMEJA. 02 KEMEJA OCCURS 3 TIMES. 03 UNIT OCCURS 4 TIMES PIC 99. 03 HARGA OCCURS 4 TIMES PIC 9(4). 01 HASIL. 02 HASIL-KEMEJA OCCURS 4 TIMES. 03 NILAI OCCURS 5 TIMES PIC 9(8). 01 HASIL-OUT. 02 HASIL-KEMEJA-OUT OCCURS 4 TIMES. 03 NILAI-OUT OCCURS 5 TIMEC PIC Z(7)9. 77 I PIC 9. 77 J PIC 9. SCREEN SECTION. 01 HAPUS-LAYAR. 02 BLANK SCREEN. PROCEDURE DIVISION. MULAI. DISPLAY HAPUS-LAYAR PERFORM MASUKAN-DATA VARYING I FROM 1 BY 1 UNTIL I > 3 AFTER J FROM 1 BY 1 UNTIL J > 4 PERFORM HITUNG-NILAI VARYING I FROM 1 BY 1 UNTIL I > 3 AFTER J FROM 1 BY 1 UNTIL J > 4 PERFORM NILAI-AWAL-TOTAL-UKURAN VARYING I FROM 1 BY 1 UNTIL I > 3 PERFORM HITUNG-TOTAL-UKURAN VARYING I FROM 1 BY 1 UNTIL I > 3 AFTER J FROM 1 BY 1 UNTIL J > 4 PERFORM NILAI-AWAL-TOTAL-WARNA VARYING J FROM 1 BY 1 UNTIL J > 4 PERFORM HITUNG-TOTAL-WARNA VARYING J FROM 1 BY 1 UNTIL J > 4 AFTER I FROM 1 BY 1 UNTIL I > 3 PERFORM NILAI-AWAL-GRAND-TOTAL PERFORM HITUNG-GRAND-TOTAL VARYING J FROM 1 BY 1 UNTIL I > 4. CETAK-HASIL. DISPLAY HAPUS-LAYAR PERFORM PINDAH-HASIL-OUT VARYING I FROM 1 BY 1 UNTIL I > 4 AFTER J FROM 1 BY 1 UNTIL J > 5 DISPLAY ' LAPORAN PERSEDIAAN BARANG ' DISPLAY ' JENIS BARANG KEMEJA' DISPLAY SPACE DISPLAY '----------------------------------------------' DISPLAY ' MERAH PUTIH KUNING BIRU TOTAL' DISPLAY '----------------------------------------------' DISPLAY 'KECIL ', HASIL-KEMEJA-OUT (1) DISPLAY 'SEDANG ', HASIL-KEMEJA-OUT (2) DISPLAY 'BESAR ', HASIL-KEMEJA-OUT (3) DISPLAY '----------------------------------------------' DISPLAY 'TOTAL ', HASIL-KEMEJA-OUT (4) DISPLAY '----------------------------------------------'. SELESAI. STOP RUN. MASUKAN-DATA. DISPLAY ' UNIT : 'I ', 'J ACCEPT UNIT (I, J) AP3/TI/Ayuliana/2009
10
DISPLAY ' HARGA : 'I ', 'J ACCEPT HARGA (I, J) DISPLAY SPACE. NILAI-AWAL-TOTAL-UKURAN. MOVE 0 TO NILAI (I, 5). NILAI-AWAL-TOTAL-WARNA. MOVE 0 TO NILAI (4, J). NILAI-AWAL-GRAND-TOTAL. MOVE 0 TO NILAI (4, 5). HITUNG-NILAI. COMPUTE NILAI (I, J) = UNIT(I, J) * HARGA(I, J). HITUNG-TOTAL-UKURAN. COMPUTE NILAI (I, 5) = NILAI (I, 5) + NILAI (I, J). HITUNG-TOTAL-WARNA. COMPUTE NILAI (4, J) = NILAI (4, J) + NILAI (I, J). HITUNG-GRAND-TOTAL. COMPUTE NILAI (4, 5) = NILAI (4, 5) + NILAI (4, J). PINDAH-HASIL-OUT. MOVE NILAI (I, J) TO NILAI-OUT (I, J).
AP3/TI/Ayuliana/2009
11