Dosen: Marsel, S.Kom., M.T.
MATERI I Tujuan Instruksional Umum Tujuan Instruksional Khusus
STRUKTUR BAHASA PEMROGRAMAN PASCAL
: Setelah mengikuti matakuliah ini, diharapkan mahasiswa mampu membuat program untuk menyelesaikan sejumlah kasus. : Setelah mengikuti praktikum ini, mahasiswa diharapkan mampu menyusun program sederhana menggunakan variable, konstanta, dan operator.
A. PENDAHULUAN Bahasa Pascal dikembangkan pada awal tahun 1970-an oleh ilmuwan komputer Eropa, Niklaus Wirth. Nama Pascal diambil dari nama ahli matematika Blaise Pascal yang menemukan mesin hitung mekanik pertama. Sekarang Pascal digunakan baik untuk keperluan ilmiah maupun aplikasi bisnis. Sampai saat ini, bahasa Pascal juga digunakan pada sekolah dan universitas di Indoensia untuk belajar pemrograman dasar. Pascal sebagai salah satu bahasa tingkat tinggi (high-level language) untuk dapat dikenali oleh computer harus diterjemahkan menjadi bahasa mesin. Untuk itu dikembangkan sebuah program penerjemah yang disebut dengan kompilator (compiler). Kompilator Pascal adalah sebuah software, bukan perangkat keras (hardware). Kompilator adalah progam yang disimpan pada file dalam disk. Struktur Program Pascal Secara umum struktur program pascal dapat digambarkan sebagai berikut: Program Nama_Program; {Judul Program} Uses……… {Definisi Unit} Label... {Defenisi Label} Const {pengumuman tetapan-tetapan} ; type . . . { pengumuman tipe-tipe data }; . . . { pengumuman peubah-peubah }; procedure Nama_Prosedur; begin ... end; Function Nama_Fungsi; begin ... end; { Program utama } begin ... end.
Judul Program Judul Program merupakan baris yang menunjukkan judul program atau identitas program. Bagian ini adalah optional atau tidak harus dibuat. Sintaksnya dituliskan sebagai berikut: Program [judul_program]; Defenisi Unit Uses digunakan untuk mendefenisikan unit-unit yang akan digunakan dalam program. Sintaks: Uses Nama Unit; Misalnya: Uses Crt;
Praktikum Teknik Pemrograma
1
Dosen: Marsel, S.Kom., M.T. Deklarasi label Deklarasi label digunakan Jika pada penulisan program akan menggunakan statemen GOTO (untuk meloncat ke suatu statement tertentu). Sintaks: Label 100: Deklarasi konstanta Deklarasi ini digunakan untuk mengidentifikasikan data yang nilainya sudah ditentukan dan pasti, tidak dapat dirubah dalam program. Sintaks: Const Nama_Konstanta=Nilai; Misalnya Const Phi=3.14; Deklarasi tipe Deklarasi ini digunakan untuk menyebutkan tipe setiap data yang akan digunakan pada program Pascal. Tipe data menentukan jangkauan nilai yang mungkin dari data yang digunakan. Deklarasi variabel/perubah Deklarasi ini berisi data-data yang bisa berubah-ubah nilainya di dalam program. Deklarasi variabel harus di letakkan setelah deklarasi tipe (jika ada). Nama variabel atau Identifier adalah nama yang diberikan oleh programmer. Identifier tidak hanya untuk menamai program tetapi juga untuk objek-objek Pascal yang lain, seperti variabel dan konstanta. Aturan penamaan identifier: 1. Karakter pertama identifier harus berupa huruf 2. Karakter selanjutnya dapat gabungan antara huruf dan angka 3. Tidak berupa reserved word atau kata kunci dalam Pascal 4. Tidak boleh dipisahkan dengan spasi, tidak boleh operator Sintaks: Var
: Tipe_data; atau : Var , ,…: Tipe_data; Deklarasi prosedur dan Fungsi Program dapat dibagi menjadi beberapa bagian/subprogram, yang terdiri dari satu program utama dan satu / lebih program bagian (bisa berupa prosedur /fungsi). Deklarasi prosedure/ fungsi terletak pada subprogram yang menggunakannya. Program Utama Bagian ini adalah bagian yang akan terproses dan terdapat dalam suatu blok yang diawali dengan BEGIN dan diakhiri dengan END (penulisan END diikuti dengan tanda titik). Bagian ini berisi pernyataan / statamen yang merupakan instruksi program. Setiap statemen diakhiri dengan tanda titik koma (;). Bentuk umumnya adalah sbb : BEGIN ... statemen; ... END. Komentar Jika suatu program dikompilasi, komentar akan dilewati atau diabaikan oleh kompilator. Komentar dalam Pascal dituliskan dengan mengapitnya dengan kurung kurawal buka dan tutup, {komentar} atau (*komentar*)
Praktikum Teknik Pemrograma
2
Dosen: Marsel, S.Kom., M.T.
Reserved Word Reserved Word adalah kata-kata yang sudah mempunyai arti khusus dalam bahasa pemrograman atau “kata kunci”. Contoh: program, begin, end dan lain-lain. Ada banyak sekali reserved word dalam Pascal, anda dapat mencari dalam buku atau referensi lain. Tipe Data Tipe Data dapat terletak pada deklarasi variabel maupun padadeklarasi tipe. Pascal menyediakan beberapa macam tipe data, yang terdiri dari : 1. Tipe data sederhana/skalar, terdiri dari : 1.1. Tipe data standar/predefinisi 1.1.1. Bulat (integer). Integer adalah Tipe integer adalah bilangan yang tidak mempunyai titik desimal/bilangan pecahan. Integer terdiri dari beberapa tipe, yaitu : a. byte, dengan jangkauan nilai 0..255 b. shortint, dengan jangkauan nilai -128..127 c. integer, dengan jangkauan nilai -32768..32767 d. word, dengan jangkauan nilai 0..65535 e. longint, dengan jangkauan nilai -2147483648..2147483647 1.1.2. Real. Tipe real adalah bilangan yang mengandung pecahan, palingsedikit harus ada satu digit sebelum dan sesudah titik desimal. Tipe data real terdiri dari beberapa tipe yaitu: a. Real, dengan jangkauan nilai 2.9E39 ..1.7E38 b. Single, dengan jangkauan nilai (1.5E-45..3.4E38 c. Double, dengan jangkauan nilai 5.0E-423..1.7E308 d. Extend, dengan jangkauan nilai 1.9E-4951..3.4E4932 e. Comp, dengan jangkauan nilai -2E63+1..2E63-1 1.1.3. Char. Yaitu nilai data berupa sebuah karakter yang ditulis diantara tanda petik tunggal, misalnya : 'A', 'b', '@', dan sebagainya 1.1.4. String. Yaitu satu atau lebih karakter yang terletak diantara tanda petik tunggal, misal : 'STMIK DIPANEGARA'. Bila panjang dari suatu string di dalam deklarasi variabel tidak disebutkan, maka dianggap panjangnya 255 karakter. 1.1.5. Logika (boolean) yaitu data yang mempunyai dua nilai, yaitu True dan False. 2. Tipe data didefinisikan pemakai : 2.1.1. Subjangkauan (subrange) yaitu tipe data yang dapat didefinisikan sendiri oleh pemakai. Nilai data pada tipe ini mempunyai jangkauan tertentu. Misalkan nilai ujian mempunyai harga 0 sampai 100, maka nilai ujian dapat didefinisikan sbb: nilai = 0..100; Terbilang (enumerated) yaitu tipe data ini juga dapat didefinisikan sendiri oleh pemakai. Disebut tipe terbilang karena semua nilai disebut satu persatu. Contoh: hari = (Senin,Selasa,Rabu,Kamis,Jum'at,Sabtu,Minggu); hari_kerja = (Senin,Selasa,Rabu,Kamis,Jum'at); situasi = (senang,gembira,sedih,susah); 3. 3.1. 3.2. 3.3. 3.4. 4.
Tipe data terstruktur, terdiri dari : Larik (array) yaitu tipe data terstruktur yang memiliki item/field data yang masingmasing memiliki tipe yang sama. Record yaitu tipe terstruktur yang memiliki item/field data yang masing-masing memiliki tipe data yang berbeda. File yaitu kumpulan sejumlah komponen bertipe data sama yang jumlahnya tidak tertentu dan biasanya tersimpan dalam media penyimpanan luar. Set atau himpunan yaitu kumpulan objek yang mempunyai tipe data yang sama dan urutan penulisannya tidak diperhatikan. Tipe data penunjuk (pointer) yaitu suatu variable yang berisi alamat (address) di memori dimana suatu data disimpan, bukannya berisi data itu sendiri. Dengan kata
Praktikum Teknik Pemrograma
3
Dosen: Marsel, S.Kom., M.T. lain pointer akan menunjukkan letak dari data di memori. Operator Tanda operasi (operator) di dalam bahasa Pascal di kelompokkan dalam : 1. Assignment operator (operator pengerjaan) menggunakan simbol titik dua diikuti oleh tanda sama dengan (:=). Contoh –> A:=B; 2. Binary operator digunakan untuk mengoperasikan dua buah operand yang berbentuk konstanta ataupun variable. Operator ini digunakan untuk operasi arithmatika yang berhubungan dgn nilai tipe data Integer dan Real. Operasi yang dilakukan adalah : Pertambahan (+), Pengurangan (-), Perkalian (*), Pembagian Bulat (DIV), Pembagian Real (/) dan Modulus atau Sisa Pembagian (MOD) 3. Unary operator, operator ini menggunakan sebuah operand saja dapat berupa unary minus dan unary plus. Contoh : +2.5, a+(+b) dll 4. Bitwise operator digunakan untuk operasi bit per bit pada nilai integer. Operator yang digunakan (NOT, AND, OR, XOR, Shl, Shr) 5. Relasional operator, yaitu operator untuk membadingkan dua buah nilai. Operator yang digunakan lebih besar (>), lebih kecil (<), lebih besar atau sama dengan (>=), lebih kecil atau sama dengan (<=), sama dengan (=), tidak sama dengan (<>) 6. Operator Logika, digunankan untuk menggabungkan beberapa operator relasional. Operator yang digunakan adalah NOT, OR, AND. Beberapa Statemen / Perintah Pada Pascal Statemen adalah perintah untuk pengerjaan program pascal. Statemen terletak di bagian deklarasi statemen dengan diawali oleh kata cadangan BEGIN dan diakhiri dengan kata cadangan END. Akhir dari setiap statemen diakhiri dengan titik koma(;). Statemenstatemen dalam bahasa Pascal terdiri dari pernyataan yang berupa fungsi dan prosedur yang telah disediakan sebagai perintah standar Turbo Pascal. 1. Statemen-statemen yang digunakan untuk input/output a)
Read/Readln(prosedur) Perintah read dan readln akan menangkap masukan yang diberikan melalui keyboard dan menyimpannya disebuah memori computer dengan nama sesuai dengan parameternya. Perbedaan perintah read dan readln sama dengan perbedaan perintah write dan writeln. Perintah read akan membaca masukan dari keyboard tanpa memindahkan posisi kursor setelah pembacaan, sedangkan perintah readln akan membaca masukan sekaligus memindahkan posisi kursor. Misalnya: Read(Alas); Readln(Tinggi);
b)
Write/Writeln(prosedur) Perintah writeln merupakan kependekan dari write line. Setelah menuliskan parameternya di layar, maka kursor penulisan akan langsung pindah ke baris di bawahnya atau ganti baris. Perintah write hanya menuliskan parameternya saja tanpa pindah baris. Contoh penggunaan perintah write dan writeln: write („Selamat Belajar‟); writeln („Pascal‟); write („Semoga Sukses‟);
c)
Readkey(fungsi) Untuk pembacaan sebuah karakter dari keyboard. Tipe data yang dihasilkan adalah char. Sintaks: READKEY;
d)
Clrscr(prosedur) Digunakan untuk membersihkan layar. Sintaks: CLRSCR;
Praktikum Teknik Pemrograma
4
Dosen: Marsel, S.Kom., M.T.
e)
Gotoxy(prosedur) Untuk menempatkan posisi kursor pada layar. Sintaks: GOTOXY(X, Y: Byte); Keterangan : X = sumbu X (posisi horisontal), Y = sumbu Y (posisi vertikal)
f)
Delay(prosedur) Untuk menghentikan sejenak proses program. Sintaks: DELAY(MS: Word); Keterangan : MS = ukuran waktu dalam milisecond.
2. Statemen yang digunakan untuk memanipulasi string a)
CONCAT(fungsi) Untuk menggabungkan 2 atau beberapa variabel string. Sintaks: CONCAT(s1 [,s2,...,sn]: String) : STRING; contoh: CONCAT('ABC','DEF') { ABCDEF }
b)
COPY(fungsi) Mengambil satu(1) atau beberapa karakter dari sebuah string. Sintaks: COPY(S,Index,Count) : String; Keterangan : S = sebuah string (string). Index = posisi awal kita akan mengambil beberapa karakter (integer) Count = banyaknya karakter yang akan diambil (integer).
c)
DELETE(prosedur) Menghapus sebagian karakter dari sebuah string. Sintaks: DELETE(S,Index,Count); Keterangan : sama dengan statemen COPY.
d)
INSERT(prosedur) Menyisipkan satu(1) atau beberapa karakter ke dalam sebuah string. Sintaks: INSERT(Source,var S,Index); Keterangan : Source = sumber string untuk disisipi (string) var S = string tujuan yang akan disisipi oleh string Source (string) Index = posisi mulai (integer).
e)
LENGTH(fungsi) Memberikan nilai panjang dari suatu string (jumlah karakterdalam string). Sintaks: LENGTH(S); Keterangan : S = string LENGTH(S) menghasilkan nilai integer.
f)
POS(fungsi) Mencari posisi sebuah bagian string (substring) didalam sebuah string. Sintaks: POS(Substr,S); {menghasilkan nilai Byte} Keterangan : Substr = substring yang akan dicari posisinya di dalam sebuah string S. Bila bernilai 0 berarti nilai string yang dicari tidak ada.
g)
STR(prosedur) Merubah nilai numerik ke dalam nilai string. Sintaks: STR(N,S); Keterangan : N = data tipe integer,
Praktikum Teknik Pemrograma
5
Dosen: Marsel, S.Kom., M.T. S = data tipe string. h)
UPCASE(fungsi) Memberikan huruf kapital dari argumen. Sintaks: UPCASE(S); Keterangan : S = variabel bertipe karakter.
3. Statemen-statemen untuk perhitungan aritmatik a)
ABS(fungsi) Memberikan nilai mutlak dari suatu argumen. Sintaks: ABS(x);
b)
COS(fungsi) Memberikan nilai dari fungsi Cosinus. Sintaks: COS(x);
c)
EXP(fungsi) Menghitung nilai pangkat dari bilangan e (bilangan alam), yaitu sebesar x. Sintaks: EXP(x); x dapat bertipe real atau integer dan akan menghasilkan nilai bertipe real.
d)
INT(fungsi) Memberikan nilai integer (bilangan bulat) dari suatu variabel dengan membuang bilangan di belakang koma. Sintaks: INT(X);
e)
LN(fungsi) Digunakan untuk menghitung nilai logaritma alam (natural logarithm) dari nilai x. Sintaks: LN(x);
f)
SIN(fungsi) Memberikan nilai dari fungsi Sinus. Sintaks: SIN(x);
g)
SQR(fungsi) Digunakan untuk menghitung nilai pangkat kuadrat dari suatu bilangan. Sintaks: SQR(x); Tipe dari x bisa berupa real maupun integer. Dan hasilnya akan sama dengan tipe dari x.
h)
SQRT(fungsi) Digunakan untuk menghitung nilai akar dari suatu bilangan. Sintaks: SQRT(x);
4. Statemen-statemen untuk transfer nilai dari suatu variable a)
CHR(fungsi) Merubah nilai dari byte ke bentuk karakter yang sesuai dengan kode ASCII. Sintaks: CHR(x); Keterangan : x bertipe byte contoh : WRITELN(CHR(61); hasilnya : a
b)
ROUND(fungsi) Membulatkan data tipe real ke data tipe longint. Sintaks: ROUND(X); Keterangan : Jika nilai pecahan < 0,5 maka dibulatkan kebawah. Jika nilai pecahan > 0,5 maka dibulatkan keatas.
Praktikum Teknik Pemrograma
6
Dosen: Marsel, S.Kom., M.T. contoh : WRITELN('10/3 dibulatkan = ',ROUND(10/3)); hasilnya : 10/3 dibulatkan = 3 c)
TRUNC(fungsi) Membulatkan kebawah data tipe real ke data tipe longint. Sintaks: TRUNC(X); contoh : WRITELN('20/3 dibulatkan kebawah = ',TRUNC(20/3)); hasilnya : 20/3 dibulatkan kebawah = 6
B. KEGIATAN PRAKTIKUM Kegiatan-1. Ketik Program berikut ini:
PROGRAM PERTAMAKU; USES CRT; BEGIN WRITE (‘SELAMAT DATANG DI PEMROGRAMAN PASCAL’); WRITELN(‘STMIK DIPANEGARA MAKASSAR’); END. Simpan program di atas dengan memilih menu File, Save atau Save As (Alt F + S) dan beri nama file Prak1_01.Pas. Kemudian eksekusi program tersebut dengan memilih menu Run (Ctrl + F9). Kemudian perhatkan hasilnya; Tambahkan perintah READLN sebelum perintah END. Kemudian eksekusi kembali program tersebut dan amati hasilnya. Kegiatan-2.
Buatlah program yang mendeklarasikan suatu bilangan bertipe real, mengisi bilangan bertipe real tersebut dari keyboard, lakukan operasi tambah – kurang – bagi – kali –kurang dari – lebih dari. Tampilkan hasil dari tiap setiap operasi ke layar.
PENYELESAIAN: PROGRAM Prak1_02; USES Crt; VAR bil1, bil2 : real; BEGIN CLRSCR; WRITE(‘MASUKKAN BILANGAN PERTAMA : ‘ ); READLN(BIL1); WRITE(‘MASUKKAN BILANGAN KEDUA : ‘ ); READLN(BIL2); WRITELN(‘BIL1 + BIL2 = ‘, BIL1 + BIL2:9:2 ); WRITELN(‘BIL1 – BIL2 =’, BIL1 – BIL2:9:2 ); WRITELN(‘BIL1 / BIL2 =’, BIL1/BIL2:9:2 ); WRITELN(‘BIL1 * BIL2 = ‘, BIL1*BIL2:9:2 ); WRITELN(‘BIL1 < BIL2 = ‘, BIL1 BIL2 = ‘, BIL1>BIL2); READLN; END. Kegiatan-3.
Program untuk menghitung luas lingkaran. Luas lingkaran didefinisikan sbb : L = pi*r*r, dimana pi adalah konstanta yang bernilai 3,1415 sedangkan r adalah jari-jari lingkaran.
PROGRAM SOAL2;
Praktikum Teknik Pemrograma
7
Dosen: Marsel, S.Kom., M.T. USES CRT; VAR L , R : REAL; CONST PI = 3.1415; {* Const Pi Adalah Nilai Konstan *} BEGIN CLRSCR; WRITE('NILAI JARI-JARI LINGKARAN: '); READLN(R); L := PI * SQR(R); {* SQR ADALAH KUADRAT *} WRITELN('LUAS LINGKARAN ADALAH : ',L:9:2); READLN; END. Kegiatan-4.
Program Menghitung Umur
PROGRAM Menghitung_Umur; USES CRT; TYPE STR10 = STRING[10]; CONST KOMA=','; VAR NAMA1,NAMA2 : STR10; ALAMAT : STRING; USIA ,THN_LHR,THN_SKR: INTEGER; BEGIN WRITE('MASUKKAN NAMA DEPAN : '); READLN(NAMA1); WRITE('MASUKKAN NAMA BELAKANG : '); READLN(NAMA2); WRITE('MASUKKAN ALAMAT : ');READLN(ALAMAT); WRITE('MASUKKAN TAHUN LAHIR : ');READLN(THN_LHR); WRITE('MASUKKAN TAHUN SEKARANG : ');READLN(THN_SKR); USIA := THN_SKR - THN_LHR; WRITELN; WRITELN('=== BIODATA DIRI ==='); WRITELN(NAMA1,KOMA,NAMA2); WRITELN(ALAMAT); WRITELN(USIA,' TAHUN'); READLN; END. Kegiatan-5.
Buatlah program untuk kasus-kasus berikut ini:
1. Buatlah program untuk menghitung luas sebuah segitiga siku-siku: Input : Alas, Tinggi Keluaran : Luas 2. Buatlah program yang menampilkan data mahasiswa berupa No. Stambuk, Nama, Nilai Tugas, Nilai UTS, Nilai UAS dan Total Nilai. Input : No. Stambuk, Nama, Nilai Tugas, Nilai UTS, Nilai UAS Proses : Total Nilai = 20% * Nilai Tugas + 35% Nilai UTS + 45% Nilai UAS Keluaran : Total Nilai 3. Jarak antara dua titik dengan masukan 2 titik, yang ditentukan dengan rumus: 𝑑 = x2 − x1 2 + y2 − y1 b 2 , dimana d = jarak antara titik A(x1,y1 ) dan B(x2,y2). Buatlah program untuk menghitung jarak diantara 2 buah titik jika x1, x2, y1 dan y2 diinput dari keyboard.
Praktikum Teknik Pemrograma
8
Dosen: Marsel, S.Kom., M.T. INSTRUKSI SELEKSI
MATERI 2 Tujuan Instruksional Umum Tujuan Instruksional Khusus
: Setelah mengikuti matakuliah ini, diharapkan mahasiswa mampu membuat program untuk menyelesaikan sejumlah kasus. : Setelah mengikuti praktikum ini, mahasiswa diharapkan mampu menyusun program menggunakan instruksi seleksi.
C. PENDAHULUAN Instruksi seleksi biasa juga disebut dengan percabangan yaitu instruksi untuk mengambil suatu keputusan apakah suatu baris instruksi atau blok instruksi akan diproses atau tidak. Bentuk-bentuk instruksi seleksi: 1. Seleksi if/then. Digunakan untuk memilih suatu alternatif apakah akan dikerjakan atau tidak, berdasarkan kondisi. Jika kondisi yang diuji benar maka alternatif tersebut dikerjakan tetapi jika salah maka alternatif tersebut tidak dikerjakan. Bentuk umum seleksi if/then adalah sebagai berikut: If kondisi then Alternatif
2. Seleksi if/then/else. Digunakan untuk memilih satu di antara dua alternatif berdasarkan kondisi. Bila kondisi terpenuhi, maka alternatif pertama yang akan dipilih tetapi jika kondisi salah, maka alternatif kedua yang akan dipilih. Bentuk seleksi if/then/else sebagai berikut: If (kondisi) then Alternatif1 Else Alternatif2
Selain digunakan untuk memilih satu diantara dua alternatif if/then/else juga dapat digunakan untuk memilih satu diantara tiga atau lebih alternatif. Bentuk umumnya sebagai berikut: If (kondisi_1) then Alternatif_1 Else if (kondisi_2) then Alternatif_2 ……………………………………. Else if(kondisi_n) then Alternatif_n Else Alternatif_n+1
Catatan: 1. Alternatif_1 dipilih jika kondisi_1 bernilai benar 2. Alternatif_2 dipilh jika kondisi_1 salah dan kondisi_2 bernilai benar 3. Alternatif_n dikerjakan jika kondisi_1, kondisi_2 bernilai salah dan kondisi_n bernilai benar. 4. Alternatif_n+1 dipilih jika kondisi_1 sampai dengan kondisi_n semuanya bernilai salah. 3. Seleksi Case. Digunakan untuk menyederhanakan kontruksi if/then/else yang terlalu banyak. Bentuk dari seleksi case adalah: Case (variabel) Of Nilai_1 : Alternatif_1; Nilai_2 : Alternatif_1; ……………………… Nilai_n : Alternatif_n; Else Alternatif_n+1; End;
Praktikum Teknik Pemrograma
Catatan: Alternatif_1 dipilih jika nilai variabel sama dengan nilai_1 Alternatif_2 dipilih jika nilai variabel sama dengan nilai_2 Alternatif_n dipilih jika nilai variabel sama dengan nilai_n Alternatif_n+1 dipilih jika nilai variabel tidak sama dengan nilai_1 sampai dengan nilai_n
9
Dosen: Marsel, S.Kom., M.T. D. KEGIATAN PRAKTIKUM Kegiatan-1.
Susunlah program untuk membaca sebuah bilangan. Jika bilangan tersebut habis dibagi dengan 2, maka tampilkan output „Bilangan genap‟ tetapi jika tidak maka tampilkan „Bilangan ganjil‟.
PENYELESAIAN: PROGRAM PRAK2_01; USES CRT; VAR ANGKA: INTEGER; BEGIN CLRSCR; WRITE('MASUKKAN SEBUAH ANGKA:'); READLN(ANGKA); IF (ANGKA MOD 2 = 0) THEN WRITELN(ANGKA, ' ADALAH BILANGAN GENAP') ELSE WRITELN(ANGKA, ' ADALAH BILANGAN GANJIL'); READLN; END. Kegiatan-1.
Studi Kasus
PT XYZ memberikan tunjangan keluarga kepada karyawannya sebesar 10% dari Gaji Pokok dan Tunjangan anak sebesar 2% dari gaji pokok untuk setiap anak. Jumlah anak yang boleh masuk tanggungan adalah maksimum 2 orang anak. Gaji pokok didasarkan pada tabel golongan sebagai berikut:
Buatlah Program yang menerima NIK, nama, golongan, status kawin, jumlah anak kemudian tampilkan total Gaji. Total Gaji diperoleh dari Gaji Pokok + Tunjangan Keluarga+Tunjangan Anak. PENYELESAIAN: PROGRAM PRAK2_02; USES CRT; VAR JA: BYTE; {JA=JUMLAH ANAK} GAPOK: LONGINT; {GAPOK = GAJI POKOK} NAMA, NIK: STRING; {GOL=GOLONGAN} TOTALGAJI, TANAK, TKELUARGA: REAL; GOL, STATUS: CHAR; BEGIN CLRSCR; {INPUT DATA} WRITE('NO. INDUK KARYAWAN :');READLN(NIK); WRITE('NAMA KARYAWAN :');READLN(NAMA); WRITE('GOLONGAN [1,2,3,4] :');READLN(GOL); WRITE('STATUS [K/B] :');READLN(STATUS); WRITE('JUMLAH ANAK :');READLN(JA);
Praktikum Teknik Pemrograma
10
Dosen: Marsel, S.Kom., M.T. {MENCARI GAJI POKOK BERDASARKAN GOLONGAN} IF (GOL='1') THEN GAPOK:=500000 ELSE IF (GOL='2') THEN GAPOK:=600000 ELSE IF (GOL='3') THEN GAPOK:=700000 ELSE GAPOK:=1000000; {MENGHITUNG TUNJANGAN KELUARGA} IF UPCASE(STATUS)='K' THEN TKELUARGA:=10/100*GAPOK ELSE TKELUARGA:=0; {MENGHITUNG TUNJANGAN ANAK} IF JA>2 THEN TANAK:=2 * GAPOK * 2/100 ELSE TANAK:= JA * GAPOK * 2/100; TOTALGAJI:=GAPOK+TKELUARGA+TANAK; {CETAK OUTPUT} CLRSCR; WRITELN('NIK KARYAWAN :',NIK); WRITELN('NAMA KARYAWAN:',NAMA); WRITELN('GOLONGAN :',GOL); WRITELN('STATUS KAWIN :',STATUS); WRITELN('JUMLAH ANAK :',JA); WRITELN('GAJI POKOK : RP. ',GAPOK:10); WRITELN('TUNJANGAN KEL. : RP. ',TKELUARGA:10:2); WRITELN('TUNJANGAN ANAK : RP. ',TANAK:10:2); WRITELN('TOTAL GAJI : RP. ',TOTALGAJI:10:2); READLN; END. Kegiatan-3.
Modifikasi Prak02_2 dengan cara mengganti instruksi if dengan case untuk menentukan gaji pokok berdasarkan golongan.
PENYELESAIAN: PROGRAM Prak2_03; USES CRT; VAR JA: BYTE; {JA=JUMLAH ANAK} GAPOK: LONGINT; {GAPOK = GAJI POKOK} NAMA, NIK: STRING; {GOL=GOLONGAN} TOTALGAJI, TANAK, TKELUARGA: REAL; STATUS: CHAR; GOL :CHAR; BEGIN CLRSCR; WRITE('NO. INDUK KARYAWAN:');READLN(NIK); WRITE('NAMA KARYAWAN:');READLN(NAMA); WRITE('GOLONGAN [1,2,3,4]:');READLN(GOL); WRITE('STATUS [K/B] :');READLN(STATUS); WRITE('JUMLAH ANAK :');READLN(JA); {MENGHITING GAJI POKOK} CASE GOL OF '1' : GAPOK:=500000; '2' : GAPOK:=600000; '3' : GAPOK:=700000; ELSE GAPOK:=1000000; END;
Praktikum Teknik Pemrograma
11
Dosen: Marsel, S.Kom., M.T. {MENGHITUNG TUNJANGAN KELUARGA} IF (STATUS='K') OR (STATUS='K') THEN TKELUARGA:=10/100*GAPOK ELSE TKELUARGA:=0; {MENGHITUNG TUNJANGAN ANAK} IF JA>2 THEN TANAK:=2 * GAPOK * 2/100 ELSE TANAK:= JA * GAPOK * 2/100; TOTALGAJI:=GAPOK+TKELUARGA+TANAK; {CETAK OUTPUT} CLRSCR; WRITELN('NIK KARYAWAN :',NIK); WRITELN('NAMA KARYAWAN :',NAMA); WRITELN('GOLONGAN :',GOL); WRITELN('STATUS KAWIN :',STATUS); WRITELN('JUMLAH ANAK :',JA); WRITELN('GAJI POKOK : RP. ',GAPOK:10); WRITELN('TUNJANGAN KEL. : RP. ',TKELUARGA:10:2); WRITELN('TUNJANGAN ANAK : RP. ',TANAK:10:2); WRITELN('TOTAL GAJI : RP. ',TOTALGAJI:10:2); READLN; END.
Kegiatan-4. Buatlah program untuk kasus-kasus berikut ini: 4. Gunakan pernyataan IF atau CASE untuk menyelesaikan soal-soal berikut: Berdasarkan data berikut ini: A = TVRI B = RCTI C = SCTV D = ANTV E = INDOSIAR F =TVOne G=TRANS TV H=TRANS 7 Buatlah program yang meminta masukan huruf saluran TV,kemudian program menampilkan nama stasiun penyiarannya. Bila yang huruf yang dimasukkan tidak diantara A sampai dengan H, berikan komentar „Nomor saluran salah‟. 5. Buatlah program yang menampilkan data mahasiswa berupa No. Stambuk, Nama, Nilai Tugas, Nilai UTS, Nilai UAS dan Total Nilai. Input : No. Stambuk, Nama, Nilai Tugas, Nilai UTS, Nilai UAS Proses : Total Nilai = 20% * Nilai Tugas + 35% Nilai UTS + 45% Nilai UAS Jika Total Nilai>=85, maka nilai huruf=”A” Jika 75
Praktikum Teknik Pemrograma
12
Dosen: Marsel, S.Kom., M.T. INSTRUKSI PERULANGAN/LOOPING
MATERI 3 Tujuan Instruksional Umum Tujuan Instruksional Khusus
: Setelah mengikuti matakuliah ini, diharapkan mahasiswa mampu membuat program untuk menyelesaikan sejumlah kasus. : Setelah mengikuti praktikum ini, mahasiswa diharapkan mampu menyusun program menggunakan instruksi perulangan.
E. PENDAHULUAN 4. Perulangan for… to… do Pernyataan for (for statements) juga digunakan untuk melakukan proses perulangan. Perulangan dengan pernyataan for dapat berupa perulangan positif ('to') dan perulangan negatif ('downto'). Jika pernyataan yang akan mengalami perulangan lebih dari satu pernyataan, maka harus diawali dengan begin dan diakhiri dengan end; Bentuk for positif: For Variabel:=Awal To Akhir Do Bentuk for negatif: For Variabel:=Awal Down To Akhir Do 5. Perulangan While. Digunakan untuk pengujian syarat pada awal proses berulang. Pengujian awal digunakan untuk agar program dapat menyeleksi kondisi, sehingga program dapat menentukan tindakan apa yang harus dikerjakan, tergantung dari kondisi yang diseleksi tersebut. Bentuk While While kondisi do Instruksi yang akan diproses berulang Misalnya: Menampilkan Angka 1 s.d. 25 dapat dilakukan dengan cara: Angka:=1; While Angka<=25 do Begin Write(Angka,‟ „); Inc(Angka); {Nilai Angka dinaikkan 1} End; Misalnya: Menampilkan Angka 25 s.d.1 dapat dilakukan dengan cara: Angka:=25; While Angka>=1 do Begin Write(Angka,‟ „); Dec(Angka); {Nilai Angka dikurangi 1} End; 6. Perulangan Repeat. Digunakan untuk melakukan perulangan terhadap suatu pernyataan, dimana proses pemeriksaan syaratnya berada pada akhir pernyataan repeat tersebut. Pernyataan-pernyataan yang ada pada repeat akan dijalankan (diulang terus) sampai kondisi yang diseleksi di until tidak terpenuhi. Bentuk Repeat Repeat Instruksi yang akan diproses berulang Until Kondisi
Praktikum Teknik Pemrograma
13
Dosen: Marsel, S.Kom., M.T. Misalnya: Menampilkan Angka 1 s.d. 25 dapat dilakukan dengan cara: Angka:=1; Repeat Write(Angka,‟ „); Inc(Angka); {Nilai Angka dinaikkan 1} Until Angka>25; Misalnya: Menampilkan Angka 25 s.d.1 dapat dilakukan dengan cara: Angka:=25; Repeat Write(Angka,‟ „); Dec(Angka); {Nilai Angka dikurangi 1} Until Angka<1; F. KEGIATAN PRAKTIKUM Kegiatan-1. Susunlah program untuk menampilkan bilangan genap dari 2 s.d. 100 PENYELESAIAN: PROGRAM PRAK3_01; USES CRT; VAR ANGKA: INTEGER; BEGIN CLRSCR; WRITELN('BILANGAN GENAP 1 S.D. 100'); FOR ANGKA := 1 TO 100 DO IF ANGKA MOD 2 = 0 THEN WRITE(ANGKA:4); READLN; END. Kegiatan-2.
Program membalik kalimat
PENYELESAIAN: PROGRAM PRAK3_02; USES CRT; VAR I, PANJANG: INTEGER; KATA,BALIK:STRING; BEGIN CLRSCR; WRITELN('BALIK KALIMAT'); WRITELN('============='); WRITE('MASUKKAN SEBUAH KALIMAT: '); READ(KATA); PANJANG:=LENGTH(KATA); FOR I:=PANJANG DOWNTO 1 DO BALIK:=BALIK+UPCASE(KATA[I]); WRITELN('HASIL PEMBALIKANNYA :',BALIK); READLN; END. Kegiatan-3.
Menghitung nilai perpangkatan dan nilai factorial
PENYELESAIAN: PROGRAM P3_03; USES CRT;
Praktikum Teknik Pemrograma
14
Dosen: Marsel, S.Kom., M.T. VAR HASIL: REAL; I, PILIH, A, X, N: INTEGER; STATUS: BOOLEAN; BEGIN REPEAT CLRSCR; WRITELN('1. PEMANGKATAN 2. FAKTORIAL 3. KELUAR'); WRITE('MASUKKAN PILIHAN ANDA : '); READLN(PILIH); CASE PILIH OF 1 : BEGIN WRITE('MASUKKAN SEMBARANG ANGKA : '); READLN(X); WRITE('AKAN DIPANGKATKAN BERAPA : '); READLN(A); HASIL := 1; FOR I := 1 TO A DO HASIL := X * HASIL; WRITELN('JADI ', X,' DIPANGKATKAN ', A,' : ',HASIL:6:2); STATUS := FALSE; END; 2 : BEGIN WRITE('MASUKKAN SEMBARANG ANGKA : '); READLN(N); IF N <= 1 THEN HASIL := 1 ELSE BEGIN HASIL := 1; FOR I := 2 TO N DO HASIL := HASIL * I; END; WRITELN('JADI FACTORIAL ', N,' (', N,'!) : ',HASIL:6:2); STATUS := FALSE; END; 3 : STATUS := TRUE; ELSE BEGIN WRITELN('PILIHAN ANDA SALAH !'); STATUS := TRUE; END; END; READLN; UNTIL STATUS; END. Kegiatan-4. Modifikasi Program Prak2_03 menjadi seperti berikut ini: PROGRAM PRAK3_04; USES CRT; VAR JA: BYTE; {JA=JUMLAH ANAK} GAPOK: LONGINT; {GAPOK = GAJI POKOK} NAMA, NIK: STRING; {GOL=GOLONGAN} TOTALGAJI, TANAK, TKELUARGA: REAL; GOL, STATUS, LAGI : CHAR;
Praktikum Teknik Pemrograma
15
Dosen: Marsel, S.Kom., M.T. BEGIN REPEAT CLRSCR; {INPUT DATA} WRITE('NO. INDUK KARYAWAN :');READLN(NIK); WRITE('NAMA KARYAWAN :');READLN(NAMA); WRITE('GOLONGAN [1,2,3,4] :');READLN(GOL); WRITE('STATUS [K/B] :');READLN(STATUS); WRITE('JUMLAH ANAK :');READLN(JA); {MENCARI GAJI POKOK BERDASARKAN GOLONGAN} IF (GOL='1') THEN GAPOK:=500000 ELSE IF (GOL='2') THEN GAPOK:=600000 ELSE IF (GOL='3') THEN GAPOK:=700000 ELSE GAPOK:=1000000; {MENGHITUNG TUNJANGAN KELUARGA} IF UPCASE(STATUS)='K' THEN TKELUARGA:=10/100*GAPOK ELSE TKELUARGA:=0; {MENGHITUNG TUNJANGAN ANAK} IF JA>2 THEN TANAK:=2 * GAPOK * 2/100 ELSE TANAK:= JA * GAPOK * 2/100; TOTALGAJI:=GAPOK+TKELUARGA+TANAK; {CETAK OUTPUT} CLRSCR; WRITELN('NIK KARYAWAN :',NIK); WRITELN('NAMA KARYAWAN :',NAMA); WRITELN('GOLONGAN :',GOL); WRITELN('STATUS KAWIN :',STATUS); WRITELN('JUMLAH ANAK :',JA); WRITELN('GAJI POKOK : RP. ',GAPOK:10); WRITELN('TUNJANGAN KEL. : RP. ',TKELUARGA:10:2); WRITELN('TUNJANGAN ANAK : RP. ',TANAK:10:2); WRITELN('TOTAL GAJI : RP. ',TOTALGAJI:10:2); WRITELN; WRITE('MASIH ADA DATA [Y/T] :'); READLN(LAGI); UNTIL UPCASE(LAGI)='T'; END. Kegiatan-5. Buatlah program untuk kasus-kasus berikut ini: 6. Buatlah program untuk menghitung jumlah deret bilangan berikut dengan N buah suku, dimana N dibaca dari piranti masukan: D= -1 + 1/3 – 1/6 + 1/9 -1/12+ 1/15 + ….. 7. Buat program untuk menampilkan deret kuadrat 1, 4, 9, 16, .. ! 8. Bilangan prima merupakan bilangan yang hanya dapat habis dibagi oleh bilangan 1 dan oleh bilangan itu sendiri, kecuali 1. Untuk menentukan apakah suatu bilangan adalah prima atau tidak, maka bilangan tersebut harus diperiksa dengan membagi bilangan tersebut sejumlah bilangan yang lebih kecil. Misalkan akan diperiksa apakah bilangan a adalah bilangan prima atau tidak maka a harus dibagi oleh 2 s.d. a-1, bilamana ada diantara bilangan tersebut yang membagi a dengan bulat berarti abaikan bilangan prima. 1. Mula-mula baca nilai N 2. Berikan nilai prima=true 3. Untuk i= 2 sampai dengan N lakukan langkah 4 s.d. 8 4. J=2 5. Selama j
Praktikum Teknik Pemrograma
16
Dosen: Marsel, S.Kom., M.T. 8. Jika prima=true maka cetak i
MATERI 4
PROCEDURE, FUNCTION
Tujuan Instruksional Umum : Setelah mengikuti matakuliah ini, diharapkan mahasiswa mampu membuat program untuk menyelesaikan sejumlah kasus. Tujuan Instruksional Khusus : Setelah mengikuti praktikum ini, mahasiswa diharapkan mampu menyusun program modular menggunakan procedure, function.
G. PENDAHULUAN Program Pascal akan menjadi mudah dibuat jika ditulis dalam bentuk modul-modul. Sistem modul ini memiliki beberapa keuntungan, diantaranya : 1. Untuk langkah-langkah yang sering dilakukan (bukan perulangan), akan terhindar dari pembuatan pernyataan-pernyataan yang sama. 2. Suatu modul program hanya sekali ditetapkan dan dapat dipanggil dari beberapa tempat dalam program. Sekumpulan data yang berbeda juga dapat diproses setiap kali modul tersebut dijalankan. Dengan menggunakan sistem modul ini panjang program akan dapat dikurangi. Dalam pascal terdapat dua tipe modul, yaitu prosedur dan fungsi (procedures and functions). hanya cara pemanggilannya berbeda, dan memberikan informasi dengan cara yang berbeda. Pada praktikum-praktikum sebelumnya telah digunakan beberapa prosedur bawaan, misalya Write, Writeln, Read dan Readln, serta Fungsi bawaan, misalnya, Odd, Sqr, dll. Prosedur (Procedures) memiliki struktur yang sama dengan struktur program, yaitu terdiri dari nama prosedur, pengumuman-pengumuman atau deklarasi (kecuali pengumuman uses), dan bagian utama (pernyataan) dari prosedur tersebut. Di dalam prosedur juga dimungkinkan terdapat prosedur (atau fungsi) lainnya, sehingga dapat disebut dengan prosedur bersarang (nested procedures). Bentuk Prosedure: PROCEDURE Nama(Daftar Parameter) BEGIN Deklarasi variable local Daftar Pernyataan END; Fungsi (functions) hampir sama dengan prosedur, dengan sedikit perbedaan bahwa nama fungsi sekaligus berfungsi sebagai suatu ungkapan (pada blok pemanggil fungsi tersebut). Sehingga setiap fungsi harus diumumkan tipe datanya. Bentuk Prosedure: FUNCTION Nama(Daftar Parameter):Tipe; BEGIN Deklarasi variable local Daftar Pernyataan END; Parameter : variable yang ditempatkan dalam judul procedure/fungsi untuk menerima nilai jika ada nilai yang dikirim ke dalam sebuah procedure/fungsi. H. KEGIATAN PRAKTIKUM Kegiatan-1.
Program untuk mencetak garis dan kalimat menggunakan procedure.
PENYELESAIAN: PROGRAM PRAK4_01; USES CRT; VAR I,PANJANG :INTEGER;
Praktikum Teknik Pemrograma
17
Dosen: Marsel, S.Kom., M.T. KATA:STRING; PROCEDURE CETAK; BEGIN WRITELN(KATA); END; PROCEDURE GARIS; BEGIN FOR I:=1 TO LENGTH(KATA) DO WRITE('='); END; BEGIN WRITE('Masukkan Sebuah Kalimat: '); READLN(KATA); CLRSCR; GARIS; {Panggil Prosedure Garis} WRITELN; CETAK; {Panggil Prosedure Cetak} GARIS; {Panggil Prosedure Garis} READKEY; {Menunggu Penekanan Tombol Di Keyboard} END. Kegiatan-2.
Program menghitung pangkat dan Faktorial
PENYELESAIAN: PROGRAM PRAK4_02; USES CRT; VAR HASIL: REAL; I, PILIH, A, X, N: INTEGER; STATUS: BOOLEAN; PROCEDURE PANGKAT; BEGIN WRITE('MASUKKAN SEMBARANG ANGKA : '); READLN(X); WRITE('AKAN DIPANGKATKAN BERAPA : '); READLN(A); HASIL := 1; FOR I := 1 TO A DO HASIL := X * HASIL; WRITELN('JADI ', X,' DIPANGKATKAN ', A,' : ',HASIL:6:2); END; PROCEDURE FAKTORIAL; BEGIN WRITE('MASUKKAN SEMBARANG ANGKA : '); READLN(N); IF N <= 1 THEN HASIL := 1 ELSE BEGIN HASIL := 1; FOR I := 2 TO N DO HASIL := HASIL * I; END; WRITELN('JADI FACTORIAL ', N,' (', N,'!) : ',HASIL:6:2); END; {PROGRAM UTAMA} BEGIN
Praktikum Teknik Pemrograma
18
Dosen: Marsel, S.Kom., M.T. REPEAT CLRSCR; WRITELN('<<MENU PILIHAN>>'); WRITELN('<<============>>'); WRITELN('1. PEMANGKATAN'); WRITELN('2. FAKTORIAL '); WRITELN('3. KELUAR'); WRITELN('=============='); WRITE('PILIHAN ANDA [1,2,3]: '); READLN(PILIH); CASE PILIH OF 1 : BEGIN PANGKAT; STATUS := FALSE; END; 2 : BEGIN FAKTORIAL; STATUS := FALSE; END; 3 : STATUS := TRUE; ELSE BEGIN WRITELN('PILIHAN ANDA SALAH !'); STATUS := TRUE; END; END; READLN; UNTIL STATUS; END. Kegiatan-3. Menghitung Luas & Keliling Lingkaran dengan Function
PROGRAM PRAK4_03; USES WINCRT; CONST PHI=3.14; VAR K,L,R:REAL; {K:KELILING, L:LUAS, R:JARI-JARI} PILIH :INTEGER; FUNCTION LUAS(JARI:REAL):REAL; BEGIN LUAS:=PHI*JARI*JARI; END; FUNCTION KELILING(JARI:REAL):REAL; BEGIN KELILING:=2*PHI*JARI; END; {PROGRAM UTAMA} BEGIN REPEAT CLRSCR; GOTOXY(10,4); GOTOXY(45,4); GOTOXY(10,6); GOTOXY(10,7);
WRITE('MASUKKAN NILAI JARI-JARI LINGKARAN: '); READLN(R); WRITE('1. HITUNG LUAS LINGKARAN'); WRITE('2. HITUNG KELILING LINGKARAN');
Praktikum Teknik Pemrograma
19
Dosen: Marsel, S.Kom., M.T. GOTOXY(10,8); WRITE('3. SELESAI:'); GOTOXY(10,9); WRITE('PILIHAN ANDA [ ]'); REPEAT GOTOXY(24,9);READLN(PILIH); UNTIL PILIH IN [1,2,3]; CASE PILIH OF 1 : BEGIN L:=LUAS(R); GOTOXY(10,11);WRITE('LUAS LINGKARAN: '); GOTOXY(26,11);WRITE(L:8:2); END; 2 : BEGIN K:=KELILING(R); GOTOXY(10,11);WRITE('KELILING LINGKARAN: '); GOTOXY(26,11);WRITE(K:8:2); END; END; READKEY; UNTIL PILIH=3; END. Kegiatan-4. Buatlah Program Untuk Mengelesaikan kasus-kasus berikut
Buatlah menggunakan untuk menampilkan pilihan berikut: <<MENU PILIHAN OPERASI>> ======================== 1. LUAS PERSEGI PANJANG 2. LUAS KUBUS 3. LUAS LINGKARAN 4. LUAS PERMUKAAN BOLA 5. SELESAI PILIHAN ANDA [ ] Jika Pilihan=1, maka panggil modul luas persegi panjang untuk membaca data menghitung luas persegi panjang, dan menampilkan luas persegi panjang. Jika Pilihan=2, maka panggil modul luas kubus untuk membaca data menghitung luas kubus, dan menampilkan luas kubus. Jika Pilihan=3, maka panggil modul luas lingkaran untuk membaca data menghitung luas lingkaran, dan menampilkan luas lingkaran. Jika Pilihan=4, maka panggil modul luas permukaan bola untuk membaca data menghitung luas permukaan bola, dan menampilkan luas permukaan bola. Jika Pilihan=5, maka selesai
Praktikum Teknik Pemrograma
20
Dosen: Marsel, S.Kom., M.T.
LARIK DIMENSI SATU
MATERI 5 Tujuan Instruksional Umum Tujuan Instruksional Khusus
: Setelah mengikuti matakuliah ini, diharapkan mahasiswa mampu membuat program untuk menyelesaikan sejumlah kasus. : Setelah mengikuti praktikum ini, mahasiswa diharapkan mampu menyusun program menggunakan vektor.
I. PENDAHULUAN Larik adalah suatu wadah yang digunakan untuk menampung data yang sejenis. Berdasarkan dimensi maka larik dapat dikategorikan menjadi 3 yaitu (1) vektor yaitu larik berdimensi satu; (2) matriks yaitu larik berdimensi dua; (3) tensor yaitu matrik bermiensi lebih dari dua Pendefinisian array secara umum adalah sebagai berikut: Jika kita ingin membuat beberapa array dengan tipe/jenis yang sama, kita lebih baik jika mendeklarasikan dengan type selanjutnya dengan deklarasi var dengan bentuk: TYPE Nama_array = ARRAY[bawah..atas] of tipe_data; VAR variabel_array : nama_array; atau dengan menggunakan statement var : VAR variabel_array : ARRAY[bawah..atas] of tipe_data; Penjelasan: Bawah dan Atas menyatakan batas untuk array. tipe_data adalah merupakan tipe variabel yang dipunyai array (mis. Integer, char, real, dsb) J. KEGIATAN PRAKTIKUM Kegiatan-1.
Ketik Program Berikut
PENYELESAIAN: PROGRAM P5_01; {Program Array Menggunakan 1 Dimensi} USES CRT; VAR A: ARRAY[1..10] OF BYTE;{Maksimum Jumlah Elemen=10} BEGIN A[1]:=10; A[2]:=15; A[3]:=A[1]+A[2]; WRITELN(A[1]); WRITELN(A[2]); WRITELN(A[3]); END. Kegiatan-2.
Program Menggabungkan 2 buah Vektor
PENYELESAIAN: PROGRAM PRAK4_02; USES CRT; CONST N=5;
Praktikum Teknik Pemrograma
21
Dosen: Marsel, S.Kom., M.T. CONST M=10; VAR A: ARRAY [1..N] OF INTEGER; B:ARRAY[1..M] OF INTEGER; C:ARRAY[1..N+M] OF INTEGER; INDEKS, L: INTEGER; LAGI: CHAR; PROCEDURE BACA_A; BEGIN FOR INDEKS:=1 TO N DO BEGIN GOTOXY(5,4); WRITE('ELEMEN LARIK A[ ]=[ ]'); GOTOXY(20,4);WRITE(INDEKS); GOTOXY(24,4);READ(A[INDEKS]); END; END; PROCEDURE BACA_B; BEGIN FOR INDEKS:=1 TO M DO BEGIN GOTOXY(5,5);WRITE('ELEMEN LARIK B[ ]=[ ]'); GOTOXY(20,5);WRITE(INDEKS); GOTOXY(24,5);READ(B[INDEKS]); END; END; PROCEDURE GABUNG; BEGIN {SALIN LARIK A KE LARIK C} FOR INDEKS:=1 TO N DO C[INDEKS]:= A[INDEKS]; {SALIN LARIK A KE LARIK C} L:=M+N; FOR INDEKS:=N+1 TO L DO C[INDEKS] := B[INDEKS-N]; END; PROCEDURE CETAK; BEGIN CLRSCR; WRITELN('<>'); FOR INDEKS:=1 TO N DO WRITE(A[INDEKS],' '); WRITELN; WRITELN('<>'); FOR INDEKS:=1 TO M DO WRITE(B[INDEKS],' '); WRITELN; WRITELN('<>'); FOR INDEKS:=1 TO N+M DO WRITE(C[INDEKS],' '); END; {Program Utama} BEGIN {Baca Larik A} REPEAT CLRSCR; BACA_A;
Praktikum Teknik Pemrograma
22
Dosen: Marsel, S.Kom., M.T. {Baca Larik B} BACA_B; GABUNG; CETAK; WRITELN; WRITE('MASIH ADA DATA [Y/T] :'); READLN(LAGI); UNTIL UPCASE(LAGI)='T'; END. Kegiatan-3. Mengurutkan Isi Larik PROGRAM PRAK4_03; USES CRT; CONST N=6; VAR DATA: ARRAY [1..N] OF INTEGER; I,J,TEMP :INTEGER; LAGI: CHAR; PROCEDURE BACA; BEGIN FOR I:=1 TO N DO BEGIN GOTOXY(5,4);WRITE('DATA KE-[ ]=[ GOTOXY(14,4);WRITE(I); GOTOXY(18,4);READ(DATA[I]); END; END;
]');
PROCEDURE SORTING; BEGIN FOR I:=1 TO N-1 DO BEGIN FOR J:=I+1 TO N DO BEGIN IF DATA[I]>DATA[J] THEN BEGIN TEMP:=DATA[I]; DATA[I]:=DATA[J]; DATA[J]:=TEMP; END; END; END; END; PROCEDURE CETAK; BEGIN FOR I:=1 TO N DO WRITE(DATA[I],' '); END; {PROGRAM UTAMA} BEGIN REPEAT CLRSCR; BACA; CLRSCR;
Praktikum Teknik Pemrograma
23
Dosen: Marsel, S.Kom., M.T. WRITELN('DATA SEBELUM DIURUTKAN'); CETAK; SORTING; WRITELN; WRITELN; WRITELN('DATA SETELAH DIURUTKAN’); CETAK; WRITELN; WRITE('MASIH ADA DATA [Y/T] :'); READLN(LAGI); UNTIL UPCASE(LAGI)='T'; END. Kegiatan-4. Program Perhitungan Gaji Karyawan
PROGRAM PRAK5_04; USES CRT; CONST N=100; VAR JA: ARRAY[1..N] OF BYTE; {JA=JUMLAH ANAK} GAPOK: LONGINT; {GAPOK = GAJI POKOK} NIK:ARRAY[1..N] OF STRING[9]; {GOL=GOLONGAN} NAMA:ARRAY[1..N] OF STRING[15]; {GOL=GOLONGAN} TOTALGAJI, TANAK, TKELUARGA:REAL; GOL,STATUS:ARRAY[1..N] OF CHAR; LAGI : CHAR; I,J, BARIS, JUMLAH:INTEGER; PROCEDURE GARIS; BEGIN FOR J:=1 TO 80 DO WRITE('-'); END; {PROGRAM UTAMA} BEGIN LAGI:='Y'; I:=0; WHILE UPCASE(LAGI)='Y' DO BEGIN INC(I); CLRSCR; {INPUT DATA} GOTOXY(5,2);WRITE('ENTRI IDENTITAS PEGAWAI'); GOTOXY(5,3);WRITE('======================='); GOTOXY(5,4);WRITE('NO. INDUK KARYAWAN:[ ]'); GOTOXY(25,4);READLN(NIK[I]); GOTOXY(5,5);WRITE('NAMA KARYAWAN :[ ]'); GOTOXY(25,5);READLN(NAMA[I]); GOTOXY(5,6);WRITE('GOLONGAN [1,2,3,4]:[ ]'); GOTOXY(25,6);READLN(GOL[I]); GOTOXY(5,7);WRITE('STATUS [K/B] :[ ]'); GOTOXY(25,7);READLN(STATUS[I]); IF UPCASE(STATUS[I])='K' THEN BEGIN GOTOXY(5,8);WRITE('JUMLAH ANAK :[ ]'); GOTOXY(25,8);READLN(JA[I]); END
Praktikum Teknik Pemrograma
24
Dosen: Marsel, S.Kom., M.T. ELSE JA[I]:=0; GOTOXY(5,10);WRITE('MASIH ADA DATA [Y/T]:[ ]'); GOTOXY(27,10);READLN(LAGI); END; JUMLAH:=I; {CETAK LAPORAN} CLRSCR; GOTOXY(1,1);WRITE('DAFTAR GAJI KARYAWAN PT XYZ'); GOTOXY(1,2);GARIS; GOTOXY(1,3);WRITE('|'); GOTOXY(2,3);WRITE('NO.'); GOTOXY(5,3);WRITE('|'); GOTOXY(6,3);WRITE('N I K'); GOTOXY(14,3);WRITE('|'); GOTOXY(15,3);WRITE(' NAMA KARYAWAN'); GOTOXY(30,3);WRITE('|'); GOTOXY(31,3);WRITE('GOL.'); GOTOXY(34,3);WRITE('|'); GOTOXY(35,3);WRITE('STATUS'); GOTOXY(41,3);WRITE('|'); GOTOXY(42,3);WRITE('ANAK'); GOTOXY(46,3);WRITE('|'); GOTOXY(47,3);WRITE('GAPOK'); GOTOXY(54,3);WRITE('|'); GOTOXY(55,3);WRITE('T. KEL.'); GOTOXY(62,3);WRITE('|'); GOTOXY(63,3);WRITE('T. ANAK'); GOTOXY(69,3);WRITE('|'); GOTOXY(70,3);WRITE('TOTALGAJI'); GOTOXY(80,3);WRITE('|'); GOTOXY(1,4);GARIS; BARIS:=4; FOR I:=1 TO JUMLAH DO BEGIN INC(BARIS); {Mencari Gaji Pokok Berdasarkan Golongan} IF (GOL[I]='1') THEN GAPOK:=500000 ELSE IF (GOL[I]='2') THEN GAPOK:=600000 ELSE IF (GOL[I]='3') THEN GAPOK:=700000 ELSE GAPOK:=1000000; {Menghitung Tunjangan Keluarga} IF STATUS[I]='K' THEN TKELUARGA:=10/100*GAPOK ELSE TKELUARGA:=0; {Menghitung Tunjangan Anak} IF JA[I]>2 THEN TANAK:=2 * GAPOK * 2/100 ELSE TANAK:= JA[I] * GAPOK * 2/100; TOTALGAJI:=GAPOK+TKELUARGA+TANAK; GOTOXY(1,BARIS);WRITE('|'); GOTOXY(2,BARIS);WRITE(I); GOTOXY(5,BARIS);WRITE('|');
Praktikum Teknik Pemrograma
25
Dosen: Marsel, S.Kom., M.T. GOTOXY(6,BARIS);WRITE(NIK[I]); GOTOXY(14,BARIS);WRITE('|'); GOTOXY(15,BARIS);WRITE(NAMA[I]); GOTOXY(30,BARIS);WRITE('|'); GOTOXY(31,BARIS);WRITE(GOL[I]); GOTOXY(34,BARIS);WRITE('|'); GOTOXY(35,BARIS);WRITE(STATUS[I]); GOTOXY(41,BARIS);WRITE('|'); GOTOXY(42,BARIS);WRITE(JA[I]); GOTOXY(46,BARIS);WRITE('|'); GOTOXY(47,BARIS);WRITE(GAPOK:7); GOTOXY(54,BARIS);WRITE('|'); GOTOXY(55,BARIS);WRITE(TKELUARGA:6:0); GOTOXY(62,BARIS);WRITE('|'); GOTOXY(63,BARIS);WRITE(TANAK:6:0); GOTOXY(69,BARIS);WRITE('|'); GOTOXY(70,BARIS);WRITE(TOTALGAJI:7:0); GOTOXY(80,BARIS);WRITE('|'); IF BARIS>22 THEN BARIS:=4; END; GOTOXY(1,BARIS+1);GARIS; END.
Kegiatan-5. STUDI KASUS Buatlah program untuk membaca data nilai mahasiswa berikut: Masukan: NO. STAMBUK NAMA MAHASISWA NILAI TUGAS NILAI MID NILAI FINAL
: : : : :
[ [ [ [ [
] ] ] ] ]
MASIH ADA DATA [Y/T] : [ ] Keluaran: DAFTAR NILAI MAHASISWA ------------------------------------------------------------------------------------------| No. | No. Stambuk | Nama Mahasiswa | Tugas | Mid | Final | Akhir | Huruf | ------------------------------------------------------------------------------------------| | | | | | | | | | | | | | | | | | ------------------------------------------------------------------------------------------Dimana: Nilai Akhir = 20%*Nilai Tugas + 35%*Nilai Mid + 45%*Nilai Final Jikai Nilai Akhir>85, maka Nilai Huruf=‟A‟ Jika 75
Praktikum Teknik Pemrograma
26
Dosen: Marsel, S.Kom., M.T.
LARIK DIMENSI DUA <MATRIKS>
MATERI 6 Tujuan Instruksional Umum Tujuan Instruksional Khusus
: Setelah mengikuti matakuliah ini, diharapkan mahasiswa mampu membuat program untuk menyelesaikan sejumlah kasus. : Setelah mengikuti praktikum ini, mahasiswa diharapkan mampu menyusun program menggunakan matriks.
K. PENDAHULUAN Matriks adalah sekumpulan informasi yang setiap individu elemennya diacu dengan menggunakan dua buah indeks (yang biasanya dikonotasikan dengan baris dan kolom). Matriks juga biasa disebut tabel. Konsep umum larik berlaku juga pada Matriks, yaitu: 1. Kumpulan elemen bertipe sama; 2. Setiap elemen data dapat diakses secara acak, jika indeksnya (baris dan kolom) sudah diketahui; 3. Merupakan struktur data statis, artinya jumlah elemennya sudah ditentukan terlebih dahulu di dalam kamus dan tidak bisa diubah selama pelaksanaan program. Sebuah matriks dapat dideklarasikan dengan bentuk berikut: TYPE nama_array =ARRAY[bawah..atas, bawah..atas] of tipe_data; VAR variabel_array : nama_array; atau dengan menggunakan statement var : VAR variabel_array : ARRAY[bawah..atas, bawah..atas] of tipe_data;
L. KEGIATAN PRAKTIKUM Kegiatan-1.
Program Menjumlahkan Matriks
PENYELESAIAN: PROGRAM PRAK6_01; USES CRT; CONST N=3; CONST M=3; TYPE LARIK = ARRAY[1..M,1..N] OF INTEGER; VAR A, B, C : LARIK; I, J: INTEGER; LAGI:CHAR; PROCEDURE BACA; BEGIN {BACA MATRIKS A} WRITELN('MENGISI ELEMEN MATRIKS A'); WRITELN('========================'); FOR I:=1 TO M DO BEGIN FOR J:=1 TO N DO BEGIN WRITE('A',I,’,’,J,'='); READ(A[I,J]); END; END; WRITELN;
Praktikum Teknik Pemrograma
27
Dosen: Marsel, S.Kom., M.T. WRITELN('MENGISI ELEMEN MATRIKS B'); WRITELN('========================'); {BACA MATRIKS B} FOR I:=1 TO M DO BEGIN FOR J:=1 TO N DO BEGIN WRITE('B',I,’,’,J,'='); READLN(B[I,J]); END; END; END; PROCEDURE TAMBAH; BEGIN FOR I:=1 TO M DO BEGIN FOR J:= 1 TO N DO C[I,J]:= A[I,J] + B[I,J]; END; END; PROCEDURE CETAK(VAR MATRIKS:LARIK); BEGIN FOR I:= 1 TO M DO BEGIN FOR J:=1 TO N DO WRITE(MATRIKS[I,J],' '); WRITELN; END; END; {ROGRAM UTAMA} BEGIN REPEAT CLRSCR; BACA; TAMBAH; CLRSCR; WRITELN('ISI MATRIKS A'); WRITELN('============='); CETAK(A); WRITELN('ISI MATRIKS B'); WRITELN('============='); CETAK(B); WRITELN('ISI MATRIKS C'); WRITELN('============='); CETAK(C); WRITELN; WRITE('MASIH ADA DATA [Y/T]:');READLN(LAGI); UNTIL UPCASE(LAGI)='T'; END. Kegiatan-2.
Program Perkalian Matriks
PENYELESAIAN:
Praktikum Teknik Pemrograma
28
Dosen: Marsel, S.Kom., M.T. PROGRAM PRAK6_02; USES WINCRT; CONST M =2; CONST N=3; CONST P=4; VAR A: ARRAY[1..M,1..N] OF INTEGER; B: ARRAY[1..N,1..P] OF INTEGER; C: ARRAY[1..M,1..P] OF INTEGER; I, J,K: INTEGER; LAGI:CHAR; PROCEDURE BACA_A; BEGIN {BACA MATRIKS A} WRITELN('MENGISI ELEMEN MATRIKS A'); WRITELN('========================'); FOR I:=1 TO M DO BEGIN FOR J:=1 TO N DO BEGIN WRITE('A',I,',',J,'='); READ(A[I,J]); END; END; END; PROCEDURE BACA_B; BEGIN {BACA MATRIKS B} FOR I:=1 TO N DO BEGIN FOR J:=1 TO P DO BEGIN WRITE('B',I,',',J,'='); READLN(B[I,J]); END; END; END; PROCEDURE KALI; BEGIN FOR I:=1 TO M DO BEGIN FOR J:= 1 TO P DO BEGIN C[I,J]:=0; FOR K:=1 TO N DO BEGIN C[I,J]:= C[I,J]+ A[I,K]*B[K,J]; END; END; END; END; PROCEDURE CETAK_A; BEGIN
Praktikum Teknik Pemrograma
29
Dosen: Marsel, S.Kom., M.T. FOR I:= 1 TO M DO BEGIN FOR J:=1 TO N DO WRITE(A[I,J],' WRITELN; END; END; PROCEDURE CETAK_B; BEGIN FOR I:= 1 TO N DO BEGIN FOR J:=1 TO P DO WRITE(B[I,J],' WRITELN; END; END; PROCEDURE CETAK_C; BEGIN FOR I:= 1 TO M DO BEGIN FOR J:=1 TO P DO WRITE(C[I,J],' WRITELN; END; END; {PROGRAM UTAMA}
');
');
');
BEGIN REPEAT CLRSCR; BACA_A; BACA_B; KALI; CLRSCR; WRITELN('ISI MATRIKS A'); WRITELN('============='); CETAK_A; WRITELN('ISI MATRIKS B'); WRITELN('============='); CETAK_B; WRITELN('ISI MATRIKS C'); WRITELN('============='); CETAK_C; WRITELN; WRITE('MASIH ADA DATA [Y/T]:');READLN(LAGI); UNTIL UPCASE(LAGI)='T'; END. Kegiatan-5. STUDI KASUS
1. Jika diberikan Matriks bujursangkar A dengan ukuran M x M, maka susunlah program modular menggunakan procedure atau fungsi untuk mengisi setiap elemen matriks A, menentukan elemen terkecil dalam matriks A, posisi baris dan kolom elemen terkecil dalam matriks A.
Praktikum Teknik Pemrograma
30
Dosen: Marsel, S.Kom., M.T.
Praktikum Teknik Pemrograma
31
Dosen: Marsel, S.Kom., M.T.
MATERI 8
TIPE DATA REKAMAN
Tujuan Instruksional Umum : Setelah mengikuti matakuliah ini, diharapkan mahasiswa mampu membuat program untuk menyelesaikan sejumlah kasus. Tujuan Instruksional Khusus : Setelah mengikuti praktikum ini, mahasiswa diharapkan mampu menyusun program menggunakan tipe data record.
M. PENDAHULUAN Record adalah elemen larik yang bertipe terstruktur. Dengan menggunakan tipe data record, beberapa item data yang masing-masing dapat mempunyai tipe data berbeda-beda dapat dikumpulkan. Masing-masing item data disebut dengan field. Jadi record terdiri dari kumpulan field yang dapat berbeda tipe. Biasanya suatu record berisi beberapa field untuk sebuah subyek tertentu. Sebuah record rekaman disusun oleh beberapa field. Tiap field berisi data dari tipe dasar / bentukan tertentu. Record mempunyai kelebihan untuk menyimpan suatu sekumpulan elemen data yang berbeda-beda tipenya (di banding array). Cara pendeklarasian dari record adalah sbb: a. Mendefinisikan tipe dari record (jumlah field, jenis tipe data yang dipakai), b. Mendefinisikan variabel untuk dilakukan operasi. Sintaks: TYPE Nama_record = record identifier_1 : tipe_data_1; : : identifier_n : tipe_data_n; END; VAR Variabel : nama_record; N. KEGIATAN PRAKTIKUM Kegiatan-1.
Menghitung gaji karyawan dengan menggunakan tipe record
PENYELESAIAN: PROGRAM PRAK7_01; USES CRT; TYPE REKAMAN=RECORD JA: BYTE; {JA=JUMLAH ANAK} GAPOK: LONGINT; {GAPOK = GAJI POKOK} NIK:STRING[9]; {GOL=GOLONGAN} NAMA:STRING[15]; {GOL=GOLONGAN} TOTALGAJI, TANAK, TKELUARGA:REAL; GOL,STATUS:CHAR; END; VAR LAGI : CHAR; KARYAWAN:REKAMAN; {PROGRAM UTAMA} BEGIN LAGI:='Y';
Praktikum Teknik Pemrograma
32
Dosen: Marsel, S.Kom., M.T. WHILE UPCASE(LAGI)='Y' DO BEGIN CLRSCR; {INPUT DATA} GOTOXY(5,2);WRITE('ENTRI IDENTITAS PEGAWAI'); GOTOXY(5,3);WRITE('======================='); GOTOXY(5,4);WRITE('NO. INDUK KARYAWAN:[ ]'); GOTOXY(5,5);WRITE('NAMA KARYAWAN :[ ]'); GOTOXY(5,6);WRITE('GOLONGAN [1,2,3,4]:[ ]'); GOTOXY(5,7);WRITE('STATUS [K/B] :[ ]'); GOTOXY(25,4);READLN(KARYAWAN.NIK); GOTOXY(25,5);READLN(KARYAWAN.NAMA); GOTOXY(25,6);READLN(KARYAWAN .GOL); GOTOXY(25,7);READLN(KARYAWAN.STATUS); IF UPCASE(KARYAWAN.STATUS)='K' THEN BEGIN GOTOXY(5,8);WRITE('JUMLAH ANAK :[ ]'); GOTOXY(25,8);READLN(KARYAWAN.JA); END ELSE KARYAWAN.JA:=0; IF (KARYAWAN.GOL='1') THEN KARYAWAN.GAPOK:=500000 ELSE IF (KARYAWAN.GOL='2') THEN KARYAWAN.GAPOK:=600000 ELSE IF (KARYAWAN.GOL='3') THEN KARYAWAN.GAPOK:=700000 ELSE KARYAWAN.GAPOK:=1000000; {Menghitung Tunjangan Keluarga} IF KARYAWAN.STATUS='K' THEN KARYAWAN.TKELUARGA:=10/100* KARYAWAN.GAPOK ELSE KARYAWAN.TKELUARGA:=0; {Menghitung Tunjangan Anak} IF KARYAWAN.JA>2 THEN KARYAWAN.TANAK:=2 * KARYAWAN.GAPOK * 2/100 ELSE KARYAWAN.TANAK:= KARYAWAN.JA * KARYAWAN.GAPOK * 2/100; KARYAWAN.TOTALGAJI:=KARYAWAN.GAPOK+ KARYAWAN.TKELUARGA + KARYAWAN.TANAK; GOTOXY(5,9);WRITE('GAJI POKOK :[ ]'); GOTOXY(5,10);WRITE('TUNJ. KELUARGA :[ ]'); GOTOXY(5,11);WRITE('TUNJANGAN ANAK :[ ]'); GOTOXY(5,12);WRITE('TOTAL GAJI :[ ]'); GOTOXY(25,9);WRITE(KARYAWAN.GAPOK:7); GOTOXY(25,10);WRITE(KARYAWAN.TKELUARGA:7:0); GOTOXY(25,11);WRITE(KARYAWAN.TANAK:7:0); GOTOXY(25,12);WRITE(KARYAWAN.TOTALGAJI:7:0); GOTOXY(5,14);WRITE('MASIH ADA DATA [Y/T]:[ ]'); GOTOXY(27,14);READLN(LAGI); END; END. Kegiatan-2.
Modifikasi Prak7_01 menggunakan prosedure
PENYELESAIAN: PROGRAM PRAK7_01; USES WINCRT; TYPE REKAMAN=RECORD
Praktikum Teknik Pemrograma
33
Dosen: Marsel, S.Kom., M.T. JA: BYTE; {JA=JUMLAH ANAK} GAPOK: LONGINT; {GAPOK = GAJI POKOK} NIK:STRING[9]; {GOL=GOLONGAN} NAMA:STRING[15]; {GOL=GOLONGAN} TOTALGAJI, TANAK, TKELUARGA:REAL; GOL,STATUS:CHAR; END; VAR LAGI : CHAR; KARYAWAN:REKAMAN; PROCEDURE BACADATA; BEGIN CLRSCR; {INPUT DATA} WITH KARYAWAN DO BEGIN GOTOXY(5,2);WRITE('ENTRI IDENTITAS PEGAWAI'); GOTOXY(5,3);WRITE('======================='); GOTOXY(5,4);WRITE('NO. INDUK KARYAWAN:[ ]'); GOTOXY(5,5);WRITE('NAMA KARYAWAN :[ ]'); GOTOXY(5,6);WRITE('GOLONGAN [1,2,3,4]:[ ]'); GOTOXY(5,7);WRITE('STATUS [K/B] :[ ]'); GOTOXY(25,4);READLN(NIK); GOTOXY(25,5);READLN(NAMA); GOTOXY(25,6);READLN(GOL); GOTOXY(25,7);READLN(STATUS); IF UPCASE(STATUS)='K' THEN BEGIN GOTOXY(5,8);WRITE('JUMLAH ANAK :[ ]'); GOTOXY(25,8);READLN(JA); END ELSE JA:=0; END; END; PROCEDURE HITUNG_GAJI; BEGIN WITH KARYAWAN DO BEGIN IF (GOL='1') THEN GAPOK:=500000 ELSE IF (GOL='2') THEN GAPOK:=600000 ELSE IF (GOL='3') THEN GAPOK:=700000 ELSE GAPOK:=1000000; {MENGHITUNG TUNJANGAN KELUARGA} IF STATUS='K' THEN TKELUARGA:=10/100*GAPOK ELSE TKELUARGA:=0; {MENGHITUNG TUNJANGAN ANAK} IF JA>2 THEN TANAK:=2 * GAPOK * 2/100 ELSE TANAK:= JA * GAPOK * 2/100; TOTALGAJI:=GAPOK+TKELUARGA+TANAK; END; END;
Praktikum Teknik Pemrograma
34
Dosen: Marsel, S.Kom., M.T. PROCEDURE CETAK; BEGIN WITH KARYAWAN DO BEGIN GOTOXY(5,9);WRITE('GAJI POKOK GOTOXY(5,10);WRITE('TUNJ. KELUARGA GOTOXY(5,11);WRITE('TUNJANGAN ANAK GOTOXY(5,12);WRITE('TOTAL GAJI GOTOXY(25,9);WRITE(GAPOK:7); GOTOXY(25,10);WRITE(TKELUARGA:7:0); GOTOXY(25,11);WRITE(TANAK:7:0); GOTOXY(25,12);WRITE(TOTALGAJI:7:0); END; END;
:[ :[ :[ :[
]'); ]'); ]'); ]');
{PROGRAM UTAMA} BEGIN LAGI:='Y'; WHILE UPCASE(LAGI)='Y' DO BEGIN BACADATA; HITUNG_GAJI; CETAK; GOTOXY(5,14);WRITE('MASIH ADA DATA [Y/T]:[ ]'); GOTOXY(27,14);READLN(LAGI); END; END. Kegiatan-3. STUDI KASUS
PT ABADI NAN JAYA MAKASSAR memberikan tunjangan anak kepada karyawannya sebesar 5% dari gaji pokok untuk setiap anak. Jumlah anak yang boleh masuk tanggungan adalah maksimum 2 orang anak. Gaji pokok didasarkan pada tabel golongan dan masa kerja berikut: Golongan I II III IV
0 s.d. 2 450000 800000 1150000 1500000
3 s.d. 4 500000 850000 1200000 1550000
Masa Kerja 5 s.d. 6 7 s.d. 8 9 s.d. 10 11 ke atas 550000 600000 650000 700000 900000 950000 1000000 1050000 1250000 1300000 1350000 1400000 1600000 1650000 1700000 1750000
Buatlah program menggunakan type data rekaman/record yang menerima nomor induk karyawan (NIK), nama, golongan, jumlah anak, dan masa kerja kemudian tampilkan total gaji dari seorang karyawan. Total gaji diperoleh dari Gaji Pokok + Tunjangan Anak
Praktikum Teknik Pemrograma
35
Dosen: Marsel, S.Kom., M.T.
MATERI 9
TIPE DATA REKAMAN & ARRAY
Tujuan Instruksional Umum : Setelah mengikuti matakuliah ini, diharapkan mahasiswa mampu membuat program untuk menyelesaikan sejumlah kasus. Tujuan Instruksional Khusus : Setelah mengikuti praktikum ini, mahasiswa diharapkan mampu menyusun program menggunakan tipe data record dan array.
O. PENDAHULUAN Yang dimaksud dengan record dan array di sini adalah suatu record dapat menampung lebih dari satu record data. Mendefenisikan record dalam bentuk array: type nama_record = record identifier_1 : tipe_data_1; : identifier_n : tipe_data_n; end; var variabel : Array[1..N] of nama_record;
P. KEGIATAN PRAKTIKUM Kegiatan-1.
Program Menghitung Gaji dengan Rekaman dan Array
PENYELESAIAN: PROGRAM PRAK8_01; USES WINCRT; CONST M=100; TYPE REKAMAN=RECORD JA: BYTE; {JA=JUMLAH ANAK} GAPOK: LONGINT; {GAPOK = GAJI POKOK} NIK:STRING[9]; {GOL=GOLONGAN} NAMA:STRING[15]; {GOL=GOLONGAN} GOL,STATUS:CHAR; END; VAR LAGI : CHAR; I,J, BARIS, JUMLAH:INTEGER; KARYAWAN:ARRAY[1..M] OF REKAMAN; TOTALGAJI, TANAK, TKELUARGA:REAL; PROCEDURE GARIS; BEGIN FOR J:=1 TO 80 DO WRITE('-'); END; PROCEDURE BACADATA; BEGIN CLRSCR; {Input Data} INC(I); WITH KARYAWAN[I] DO BEGIN GOTOXY(5,2);WRITE('ENTRI IDENTITAS PEGAWAI'); GOTOXY(5,3);WRITE('======================='); GOTOXY(5,4);WRITE('NO. INDUK KARYAWAN:[ GOTOXY(5,5);WRITE('NAMA KARYAWAN :[ GOTOXY(5,6);WRITE('GOLONGAN [1,2,3,4]:[ ]'); GOTOXY(5,7);WRITE('STATUS [K/B] :[ ]');
Praktikum Teknik Pemrograma
]'); ]');
36
Dosen: Marsel, S.Kom., M.T. GOTOXY(25,4);READLN(NIK); GOTOXY(25,5);READLN(NAMA); GOTOXY(25,6);READLN(GOL); GOTOXY(25,7);READLN(STATUS); IF UPCASE(STATUS)='K' THEN BEGIN GOTOXY(5,8);WRITE('JUMLAH ANAK GOTOXY(25,8);READLN(JA); END ELSE JA:=0; END;
:[
]');
END; PROCEDURE CETAK; BEGIN JUMLAH:=I; {Cetak Laporan} CLRSCR; GOTOXY(1,1);WRITE('DAFTAR GAJI KARYAWAN PT XYZ'); GOTOXY(1,2);GARIS; GOTOXY(1,3);WRITE('|'); GOTOXY(2,3);WRITE('NO.'); GOTOXY(5,3);WRITE('|'); GOTOXY(6,3);WRITE('N I K'); GOTOXY(14,3);WRITE('|'); GOTOXY(15,3);WRITE(' NAMA KARYAWAN'); GOTOXY(30,3);WRITE('|'); GOTOXY(31,3);WRITE('GOL.'); GOTOXY(34,3);WRITE('|'); GOTOXY(35,3);WRITE('STATUS'); GOTOXY(41,3);WRITE('|'); GOTOXY(42,3);WRITE('ANAK'); GOTOXY(46,3);WRITE('|'); GOTOXY(47,3);WRITE('GAPOK'); GOTOXY(54,3);WRITE('|'); GOTOXY(55,3);WRITE('T. KEL.'); GOTOXY(62,3);WRITE('|'); GOTOXY(63,3);WRITE('T. ANAK'); GOTOXY(69,3);WRITE('|'); GOTOXY(70,3);WRITE('TOTALGAJI'); GOTOXY(80,3);WRITE('|'); GOTOXY(1,4);GARIS; BARIS:=4; FOR I:=1 TO JUMLAH DO BEGIN INC(BARIS); WITH KARYAWAN[I] DO BEGIN {Mencari Gaji Pokok Berdasarkan Golongan} IF (GOL='1') THEN GAPOK:=500000 ELSE IF (GOL='2') THEN GAPOK:=600000 ELSE IF (GOL='3') THEN GAPOK:=700000 ELSE GAPOK:=1000000; {Menghitung Tunjangan Keluarga} IF STATUS='K' THEN TKELUARGA:=10/100*GAPOK ELSE TKELUARGA:=0; {Menghitung Tunjangan Anak} IF JA>2 THEN TANAK:=2 * GAPOK * 2/100
Praktikum Teknik Pemrograma
37
Dosen: Marsel, S.Kom., M.T. ELSE TANAK:= JA * GAPOK * 2/100; TOTALGAJI:=GAPOK+TKELUARGA+TANAK; GOTOXY(1,BARIS);WRITE('|'); GOTOXY(2,BARIS);WRITE(I); GOTOXY(5,BARIS);WRITE('|'); GOTOXY(6,BARIS);WRITE(NIK); GOTOXY(14,BARIS);WRITE('|'); GOTOXY(15,BARIS);WRITE(NAMA); GOTOXY(30,BARIS);WRITE('|'); GOTOXY(31,BARIS);WRITE(GOL); GOTOXY(34,BARIS);WRITE('|'); GOTOXY(35,BARIS);WRITE(STATUS); GOTOXY(41,BARIS);WRITE('|'); GOTOXY(42,BARIS);WRITE(JA); GOTOXY(46,BARIS);WRITE('|'); GOTOXY(47,BARIS);WRITE(GAPOK:7); GOTOXY(54,BARIS);WRITE('|'); GOTOXY(55,BARIS);WRITE(TKELUARGA:6:0); GOTOXY(62,BARIS);WRITE('|'); GOTOXY(63,BARIS);WRITE(TANAK:6:0); GOTOXY(69,BARIS);WRITE('|'); GOTOXY(70,BARIS);WRITE(TOTALGAJI:7:0); GOTOXY(80,BARIS);WRITE('|'); IF BARIS>22 THEN BARIS:=4; END; END; GOTOXY(1,BARIS+1);GARIS; END; {PROGRAM UTAMA} BEGIN I:=0; LAGI:='Y'; WHILE UPCASE(LAGI)='Y' DO BEGIN BACADATA; GOTOXY(5,14);WRITE('MASIH ADA DATA [Y/T]:[ ]'); GOTOXY(27,14);READLN(LAGI); CETAK; END; END. Kegiatan-2. STUDI KASUS
PT ABADI NAN JAYA MAKASSAR memberikan tunjangan anak kepada karyawannya sebesar 5% dari gaji pokok untuk setiap anak. Jumlah anak yang boleh masuk tanggungan adalah maksimum 2 orang anak. Gaji pokok didasarkan pada tabel golongan dan masa kerja berikut: Golongan I II III IV
0 s.d. 2 450000 800000 1150000 1500000
3 s.d. 4 500000 850000 1200000 1550000
Masa Kerja 5 s.d. 6 7 s.d. 8 9 s.d. 10 11 ke atas 550000 600000 650000 700000 900000 950000 1000000 1050000 1250000 1300000 1350000 1400000 1600000 1650000 1700000 1750000
Buatlah program menggunakan type data rekaman/record dan array yang menerima nomor induk karyawan (NIK), nama, golongan, jumlah anak, dan masa kerja kemudian tampilkan total gaji dari seorang karyawan. Total gaji diperoleh dari Gaji Pokok + Tunjangan Anak
Praktikum Teknik Pemrograma
38
Dosen: Marsel, S.Kom., M.T.
MATERI 10
OPERASI FILE TEKS
Tujuan Instruksional Umum : Setelah mengikuti matakuliah ini, diharapkan mahasiswa mampu membuat program untuk menyelesaikan sejumlah kasus. Tujuan Instruksional Khusus : Setelah mengikuti praktikum ini, mahasiswa diharapkan mampu menyusun program menggunakan file.
Q. PENDAHULUAN File Teks disusun sebagai runtunan beberapa baris . - Tiap baris terdiri dari runtunan karakter. - Tiap baris diakhiri oleh karakter khusus, yaitu End-Of-Line (EOL) - Karakter yang terakhir dari file teks adalah End-Of-File (EOF) EOF adalah menerima argumen nama file dan menghasilkan nilai true jika sudah tidak ada data yang bisa dibaca lagi. Dan EOLN adalah menerima argumen nama file dan menghasilkan nilai true jika sudah tidak ada lagi data yang bisa lagi dalam satu baris. Untuk melakukan operasi pada file teks, kita perlu mendeklarasikan suatu variabel dengan tipe teks seperti berikut: VAR F : TEXT; F adalah sembarang variabel file teks. Misalnya akan dibaca file teks dengan nama readme, maka pertama kita harus memanggilnya dengan fungsi: ASSIGN(F,'README'). Untuk bisa membaca file yang dipanggil dengan ASSIGN, dapat dilakukan dengan statement Reset(F); File dapat dibaca baris demi baris, dengan menyatakan suatu variabel s sebagai string: READLN(F, S); Setelah selesai membaca keseluruhan teks, maka harus ditutup dengan CLOSE(F); Membuka File Baru: Suatu file teks baru dapat dibuat dengan mengubah kata kunci : RESET(F); menjadi REWRITE(F); Menambah Data: Menambah data ke dalam suatu file teks dapat dilakukan dengan membuka file teks tersebut dengan statement APPEND(F); R. KEGIATAN PRAKTIKUM Kegiatan-1.
Ketik dan Compile Program Berikut
PENYELESAIAN: PROGRAM P10_01; TYPE COBA = FILE OF BYTE; VAR FCOBA : COBA; I : BYTE; BEGIN ASSIGN(FCOBA,'C:\TEST.TXT'); RESET(FCOBA); I:=1; WRITE(FCOBA,I); CLOSE(FCOBA); END.
Kegiatan-2. Ketik dan compile program berikut PROGRAM P10_02; TYPE MHS = RECORD
Praktikum Teknik Pemrograma
39
Dosen: Marsel, S.Kom., M.T. NRP : STRING[8]; NAMA : STRING[20]; END; VAR FMHS : FILE OF MHS; TMHS : MHS; BEGIN TMHS.NRP := '00112398'; TMHS.NAMA := 'WIWIEN'; ASSIGN(FMHS,'C:\TEST.TXT'); RESET(FMHS); WRITE(FMHS,TMHS); CLOSE END. Kegiatan-3. Ketik dan compile program berikut PROGRAM P10_03; CONST N = 2; TYPE TMHS = RECORD NRP : STRING[8]; NAMA : STRING[20]; ALAMAT : STRING; END; DTMHS = ARRAY[1..N] OF TMHS; VAR F : FILE OF DTMHS; DATAMHS : DTMHS; I : INTEGER; BEGIN FOR I:= 1 TO N DO BEGIN WITH DATAMHS[I] DO BEGIN WRITE('MASUKKAN NRP : '); READLN(NRP); WRITE('MASUKKAN NAMA : '); READLN(NAMA); WRITE('MASUKKAN ALAMAT : ');READLN(ALAMAT); END; END; ASSIGN(F,'C:\TEST.TXT'); REWRITE(F); WRITE(F,DATAMHS); CLOSE(F); ASSIGN(F,'C:\TEST.TXT'); RESET(F); READ(F,DATAMHS); CLOSE(F); FOR I : = 1 TO N DO BEGIN WRITELN(DATAMHS[I].NRP); WRITELN(DATAMHS[I].NAMA); WRITELN(DATAMHS[I].ALAMAT); END; READLN; END. Kegiatan-4. STUDI KASUS
Buatlah 2 procedure untuk menginput data dan menampilkan data pada program P10_03 di atas
Praktikum Teknik Pemrograma
40