PEMBAHASAN I PENGENALAN PEMROGRAMAN TERSTRUKTUR DAN TURBO PASCAL (1 x Pertemuan)
1.1.
Pengenalan Bahasa Pemrograman Komputer adalah sebuah mesin yang hanya mengerti karakter 1 (satu)
dan 0 (null) atau bilangan biner. Oleh karena itu, untuk mengoperasikan komputer diperlukan penerjemah bahasa dari bahasa manusia ke bahasa mesin komputer. Penerjemah bahasa tersebut terdiri dari software (perangkat lunak), yang menghubungakan manusia (brainware) dengan hardware (perangkat keras). Software biasa disebut dengan nama program, yaitu merupakan himpunan atau kumpulan instruksi yang dibuat oleh programmer atau bisa juga dikatakan sebagai suatu executable dari suatu software. Dalam pembuatan program terdapat tata cara atau prosedure yang harus dilakukan dalam penulisan program, hal ini biasa disebut dengan bahasa pemrograman. Pada bahasa pemrograman terdapat dua faktor penting, yaitu yang dikenal dengan nama syntax dan semantik. Syntax (sintaks) itu sendiri merupakan aturan gramatikal atau komposisi suatu program yang mengatur tata cara penulisan huruf, angka, dan karakter lainnya. Contoh dalam program pascal, terdapat titik koma ( ; ) diantara dua statement. x := 1; x := x +1;
Sedangkan semantik merupakan bagaimana cara mendefinisikan arti dari program yang benar secara sintaks dari bahasa pemrograman tersebut. Contoh dalam pascal, seperti berikut: Nilai : Array [1..10] of Real;
Arti semantiknya adalah akan menyebabkan ruang sebanyak 10 dengan elemen real di variabel nilai dari 1-10. Secara umum bahasa pemrograman dibedakan menjadi 4 (empat) generasi, antara lain: Generai I, yaitu Machine Language (bahasa mesin) Generasi II, yaitu Assembly Language (Assembler) Generasi III, yaitu High-level Programming Language (C, Pascal, dsb) 1|Praktikum Algoritma dan Pemrograman
Generasi IV, yaitu 4 GL (Fourth-generation Language (SQL) Menurut versi-nya ada dua jenis bahasa pemrograman yang berkembang saat ini, permata yang menggunakan sistem console dan kedua menggunakan sistem visual. Sistem Console Sistem console adalah pemrograman yang mengandalkan dalam pengkode-an (coding), tanpa adanya kemudahan dalam click dan drag disamping
itu
tampilan
yang
kurang
menarik.
Contoh
bahasa
pemrograman yang menggunakan sistem consule adalah Pascal, QBasic, Java, C++, C, Perl, Java Script, dll. Sistem Visual atau Obyek Sistem visual adalah perkembangan dari sistem consule dengan berbasis object frame oriented dengan interface (tampilan grafis) yang lebih bagus dan memfokuskan pada kemudahan dalam memprogram suatu aplikasi dengan metode klik dan drag. Contoh bahasa pemrograman yang menggunakan sistem ini adalah Borland Delphi, Visual Basic, Visual C++, Visual Foxpro, dll.
Bahasa Pemrograman untuk Tujuan Tertentu Jenis Program
Bahasa Terbaik
Bahasa Terburuk
Data Terstruktur
ADA, C/C++, Pascal
Assembler, BASIC
Proyek cepat
BASIC
Pascal, ADA, Assembler
Eksekusi cepat
Assembler, C
Basic, Interpeter Language
Kalkulasi matematika
Fortran
Pascal
Menggunakan Memori Dinamis
Pascal, C
Basic
Lingkungan bermemori terbatas
Basic, Assembler, C
Fortran
Program real-time
ADA, Assembler, C
Basic, Fortran
Manipulasi string
Basic, Pascal
C
Program mudah dikelola
Pascal, ADA
C, Fortran
Compiler dan Interpreter Compiler adalah suatu program yang menterjemahkan bahasa program (source code) ke dalam bahasa objek (object code). Compiler menggabukankan keseluruhan bahasa program dikumpulkan kemudian disusun kembali.
2|Praktikum Algoritma dan Pemrograman
Gambar 1.1. Kompilasi Program Komputer
Tahap kompilasi : 1. Source Code (program yang ditulis) dibaca ke memory komputer. 2. Source Code tersebut diubah menjadi object code (bahasa assembly) 3. Object Code dihubungkan dengan library yang dibutuhkan untuk membentuk file yang bisa di eksekusi. Interpreter berbeda dengan compiler, Interpreter menganalisis dan dan mengeksekusi setiap baris dari program tanpa melihat program secara keseluruhan. Keuntungan interpreter adalah dalam eksekusi yang bisa dilakukan dengan segera. Tanpa melalui tahap kompilasi, untuk alasan ini interpreter digunakan pada saat pembuatan program berskala besar.
1.2.
Tipe Pemrograman Pemrograman terstruktur adalah cara pemrosesan data yang terstuktur.
Terstruktur dalam: analisa, cara dan penulisan program. Prinsip pemrograman terstruktur: a. Gunakan rancangan pendekatan dari atas ke bawah (top down design), b. Bagi program ke dalam modul-modul logika yang sejenis, c. Gunakan sub-program untuk proses-proses sejenis yang sering digunakan, d. Gunakan pengkodean terstruktur: IF ... THEN, DO ... WHILE dan lainlainnya, e. Hindarkan penggunaan perintah GO TO bila tidak diperlukan, f.
Gunakan nama-nama bermakna (mnemonic names), dan
g. Buat dokumentasi yang akurat dan berarti.
3|Praktikum Algoritma dan Pemrograman
Dalam perencanaan dan perancangan dari atas ke bawah, kategori dan penyelesaian masalah dimulai dari bagian yang utama kemudian dibagi menjadi bagian yang lebih kecil. Rancangan cara ini memudahkan penulisan, pengujian, koreksi dan dokumentasi program. Tahapan rancangan atas ke bawah dalam pemrograman:
Tentukan keluaran (output) yang diminta, masukan (input) yang diperlukan dan proses-proses utama yang diperlukan untuk transformasi data.
Membagi proses utama ke dalam modul-modul fungsional.
Buat algoritma msing-masing modul, dari modul utama ke sub-sub modul. Dalam proses pembuatan program, terlebih dahulu proggrammer
membuat rancangan program yang biasa disebut dengan nama ALGORITMA. Untuk lebih jelaskan akan dibahas sebagai berikut:
1.3.
ALGORITMA ALGORITMA ialah suatu metode khusus yang tepat dan terdiri dari
serangkaian langkah terstruktur dan dituliskan secara sistematis, yang akan dikerjakan untuk menyelesaikan suatu masalah, atau “Algoritma adalah urutan langkah-langkah logis penyelesaian masalah, yang disusun secara sistematis dan logis”. Kata Logis merupakan kata kunci dalam Algoritma. Langkah-langkah dalam Algoritma harus logis dan harus dapat ditentukan bernilai salah atau benar. CIRI-CIRI ALGORITHMA YANG BAIK
Algorithma harus tidak Ambigu (Unambiguous) atau harus pasti, artinya Deskripsi langkah-langkah dalam algorithma harus dan hanya mempunyai tafsiran tunggal.
Algorithma harus tepat (precise), artinya Algorithma harus menyatakan urutan langkah-langkahnya, kapan sebuah langkah dijalankan.
Algorithma harus pasti (definite), artinya jika serangkaian langkah yang sama dilakukan dua kali maka hasilnya harus selalu sama.
Algorithma harus berhingga (finite), artinya, serangkaian langkah dalam algorithma harus dapat dilakukan pada rentang waktu tertentu.
Murah, yaitu efisien dalam penggunaan piranti memori dan penyimpanan lainnya serta cepat waktu pelaksanaannya.
4|Praktikum Algoritma dan Pemrograman
Mengikuti alur konsep, suatu algoritma disusun dalam tiga bagian, yaitu : a.
Bagian Kepala algoritma
b.
bagian deklarasi, dan
c.
Bagian deskripsi algoritma Setiap bagian disertai dengan penjelasan atau dokumentasi tentang
maksud pembuatan teks. Algoritma Nama_algoritma {penjelasan tentang algoritma yang menguraikan secara
singkat
hal-hal
yang
dilakukan
oleh
algoritma}. Deklarasi {semua nama yang digunakan, meliputi nama-nama : tipe, konstanta, variabel, juga nama sub-program dinyatakan disini} Deskripsi {semua langkah atau aksi algoritma dituliskan disini} Algoritma tidak hanya dinotasikan dengan kata-kata saja, namun bisa juga dituangkan kedalam bentuk bagan alir atau yang biasa disebut dengan nama Flowchart. Adapun flowchart (diagram alir) merupakan urutan langkahlangkah logis untuk menyelesaikan masalah dengan menggunakan simbol. Diagram alir terbagi menjadi 5 (lima) jenis, yang salah satunya adalah diagram alir logika (logic flowchart). Adapun bentuk simbol-simbol yang digunakan adalah sebagai berikut:
Gambar 1.2. Simbol-simbol Flowchart Logika
5|Praktikum Algoritma dan Pemrograman
1.4. a)
BAHASA PEMROGRAMAN PASCAL Sejarah PASCAL Merupakan pengembangan dari bahasa ALGOL 60, bahasa pemrograman untuk sains komputasi. Tahun 1960, beberapa ahli komputer bekerja untuk mengembangkan bahasa ALGOL, salah satunya adalah Dr. Niklaus Wirth dari Swiss Federal Institute of Technology (ETHZurich), yang merupakan anggota grup yang membuat ALGOL. Tahun 1971, dia menerbitkan suatu spesifikasi untuk highly-structured language (bahasa
tinggi
yang
terstruktur)
yang
menyerupai
ALGOL.
Dia
menamainya dengan PASCAL (seorang filsuf dan ahli matematika dari Perancis) Pascal bersifat data oriented, yaitu programmer diberi keleluasaan untuk mendefinisikan data sendiri. Pascal juga merupakan teaching language (banyak dipakai untuk pengajaran tentang konsep pemrograman). Kelebihan yang lain adalah penulisan kode Pascal yang luwes, tidak seperti misalnya FORTRAN, yang memerlukan programmer untuk menulis kode dengan format tertentu. Bentuk dasar program Pascal adalah seperti berikut: program TITLE ; begin pernyataan; pernyataan end.
b) PASCAL sebagai bahasa terstruktur Sebagai bahasa terstruktur, PASCAL mempunyai ciri-ciri sebagai berikut: 1. Berurutan Susunan dari kode-kode dalam teks Pascal harus ditulis secara urut dari atas, pernyataan-pernyataan yang ditulis lebih awal akan dieksekusi lebih dahulu. Oleh karena itu, suatu pernyataan yang menyangkut suatu variabel di dalam program, maka variable itu harus terdefinisi dahulu sebelumnya. Hal ini terutama menyangkut pada pemanggilan sub-program oleh sub-program yang lain. Bisa dibaca lebih lanjut pada bagian sub-program. 2. Blok dengan batas-batas yang jelas. Pascal memberikan pembatas yang jelas pada tiap-tiap blok, seperti pada blok program utama, subprogram, struktur kontrol (pengulangan/ pemilihan), dll. Pemakaian kata kunci begin untuk mengawali operasi pada blok dan end untuk menutupnya
memudahkan
programmer
menyusun
dengan mudah. Seperti contoh: 6|Praktikum Algoritma dan Pemrograman
programnya
If X>0 then begin Write ( ‘ bilangan positif’); Writeln ( ‘ program selesai’); end;
Satu pintu masuk dan satu pintu keluar pada blok pemilihan dan pengulangan. Contoh di atas juga mengilustrasikan pintu masuk tunggal pada suatu blok pemilihan yaitu suatu test logika X>0, dengan pintu keluaran yang satu pula (satu disini maksudnya bukan dua baris perintah output tapi suatu paket perintah yang dirangkai dengan begin .. end.
c)
Bakuan PASCAL Dibakukan oleh ISO pada tahun 1983 dan dikembangkan dalam beberapa versi, diantaranya: USCD PASCAL, MS PASCAL, TURBO PASCAL
dll.
Dengan
semakin
berkembangnya
teknologi
dalam
komputasi, Pascal dimanfaatkan untuk pengembangan DELPHI (berasal dari nama suatu kota di masa Yunani kuno), suatu bahasa pemrograman visual yang menonjolkan pada efek grafis dan orientasi pada objek-objek yang siap dipakai, karena memiliki Visual Component Library (VCL).
d) Struktur Bahasa PASCAL secara umum Pascal mempunyai struktur sebagai berikut: 1. Bagian Judul Program 2. Bagian Deklarasi a. Deklarasi tipe data (TYPE) b. Deklarasi variabel (VAR) c. Deklarasi konstanta (CONST) d. Deklarasi label (LABEL) e. Deklarasi sub-program (PROCEDURE dan FUNCTION) 3. Bagian Program Utama Perintah-perintah. Teks Pascal setidaknya memiliki bagian Judul Program, bagian Deklarasi, dan Bagian Program Utama yang berupa perintahperintah. Sedangkan untuk bagian deklarasi menyesuaikan dengan isi dari program itu sendiri. Contoh program PASCAL:
7|Praktikum Algoritma dan Pemrograman
program TAMBAH_00; {Menjumlahkan dua bilangan yang nilainya diberikan dalam perintah}
var X, Y, Z: integer;{Deklarasi variabel X,Y dan Z sebagai bilangan bulat} BEGIN {Program Utama Mulai} X := 50; {Perintah memberikan nilai 50 pada var. X} Y := 25; {Perintah memberikan nilai 25 pada var. Y} Z := X + Y;{Perintah menjumlahkan X dan Y serta menyimpan hasilnya ke Z} END. {Akhir Program Utama}
Pada contoh ini nilai X dan Y tidak bisa sembarang, karena didefiniskan tertentu. Agar nilai X dan Y bisa bebas ditentukan, nilai X dan Y dibaca dari default input.
program TAMBAH_01; {Menjumlahkan 2 bil yg dibaca dari default input} var X,Y,Z: integer; {Deklarasi variabel X,Y dan Z sebagai bilangan bulat} BEGIN { Program Utama Mulai } read(X); { Membaca nilai X lewat key-board } read(Y); { Membaca nilai Y lewat key-board } Z := X + Y; { Menjumlahkan X dan Y serta menyimpan hasilnya ke Z} write(Z); { Menyajikan Z ke layar monitor } END. { Akhir Program Utama }
e)
Bentuk Tampilan Turbo Pascal 1.5
Gambar 1.3. Tampilan Turbo Pascal 1.5
8|Praktikum Algoritma dan Pemrograman
Terdapat beberapa menu didalam turbo pascal tersebut, antara lain:
Gambar 1.4. Tampilan Menu File
Menu file terdapat “new” yang berfungsi untuk membuat lembar kerja baru dalam membuat program. Setelah penulisan kode program, seperti gambar berikut:
Gambar 1.5. Tampilan Listing Program
9|Praktikum Algoritma dan Pemrograman
untuk menjalankan program maka pilih menu “RUN” setelah itu pilih “RUN” seperti pada gambar berikut:
Gambar 1.6. Tampilan Menu RUN
Atau dengan cara cepat dengan menekan Ctrl + F9, maka akan muncul program seperti pada gambar berikut:
Gambar 1.7. Tampilan Hasil Program Setelah Dijalankan
10 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
PEMBAHASAN II MENGENAL PROSEDUR CETAK (WRITE), MASUKAN (READ), VARIABEL, DAN TIPE DATA (1 x Pertemuan)
2.1.
Prosedure Cetak (Write/writeln) Di dalam membuat program, terdapat perintah untuk menampilkan kata
atau kalimat yang ingin ditampilkan dalam program yang akan dibuat. Adapun dalam pascal menggunakan perintah “write” atau “writeln” untuk menampilkan kata atau kalimat yang ingin ditampilkan. Seperti contoh penggunaan “write” berikut : Program tampil; uses wincrt; begin write('Belajar Pascal'); end.
Akan muncul tampilan setelah dijalankan sebagai berikut:
Gambar 2.1. Tampilan Hasil Program Cetak (write)
Untuk prosedure write SEMUA kalimat akan tercetak selama berada diantara tanda petik (‘) walaupun terdapat “space” atau simbol (@,#,$,%,^,&, dll) atau huruf (a-z) atau angka (0-10). Huruf apapun yang berada diantara tanda petik, akan ditampilkan setelah program dijalankan. Dan setiap prosedure akan selalu diakhiri dengan tanda titik koma (;) yang berfungsi untuk mengakhiri prosedure yang digunakan. Write('Belajar Pascal'); Untuk mencetak
untuk mengakhiri prosedure
Kata atau kalimat yang akan tercetak di dalam program Sedangkan WRITELN itu berarti write endline yang difungsikan untuk mencetak program dengan mengakhiri baris penulisan. Sehingga perintah berikutnya akan berada dibawah perintah sebelumnya. Untuk lebih jelasnya dapat dilihat pada contoh listing program berikut: 11 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
Menggunakan 2 (dua) prosedure “write”! Program tampil; uses wincrt; begin write('Belajar'); write('Pascal'); end.
Akan menghasilkan tampilan berikut:
Gambar 2.2. Tampilan Belajar Pascal (2 perintah Write)
Kedua kata tersebut tercetak dalam satu baris. Berbeda halnya dengan menggunkan prosedure Writeln sebagai berikut: Program tampil; uses wincrt; begin writeln('Belajar'); write('Pascal'); end.
Akan menghasilkan tampilan berikut:
Gambar 2.3. Tampilan Program (kombinasi writeln dan write)
Kata “pascal” akan tercetak dibawah kata “belajar” karena untuk mencetak kata “belajar” menggunakan prosedure writeln yang berarti cetakan selanjutnya akan berada dibawah dan tidak sejajar dengan prosedure yang menggunakan writeln. Adapun bentuk flowchart dari program diatas adalah sebagai berikut: START
Cetak “Belajar Pascal”
END
12 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
Latihan I: 1. Buat program untuk mencetak seperti pada gambar berikut, dengan menggunakan 5 (lima) prosedure cetak (write atau writeln)!
2. Buat program untuk mencetak seperti gambar berikut, sesuai dengan nama, nim, dan jurusan masing-masing!
13 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
2.2. a.
Prosedure Baca/Input/Masukkan (read/readln) Prosedure masukan tanpa variabel Untuk membaca atau memasukkan nilai dari keyboard dalam program
pascal menggunakan prosedure Read atau Readln. Jika ada prosedure ini, pengguna harus menginputkan nilai atau menekan tombol ENTER sehingga dapat meneruskan programnya. Untuk lebih jelasnya dapat dilihat pada listing program berikut: uses wincrt; begin write('Press ENTER to Continued...'); readln; write('TERIMA KASIH'); end.
Terdapat 2 (dua) prosedure cetak yaitu untuk mencetak kalimat “press ENTER to Continued…” dan “TERIMA KASIH” dan terdapat 1 (satu) prosedure “readln” diataranya, yang akan mengakibatkan program tersebut akan meminta masukan dari keyboard hingga user menekan tombol ENTER, dapat dilihat dari gambar berikut:
Gambar 2.4. Tampilan Program dengan Readln
Dapat dilihat dari gambar tersebut, bahwa program tersebut masih berjalan, setelah di ENTER akan muncul tampilan sebagai berikut:
Gambar 2.5. Tampilan Program Setelah di ENTER
Program berakhir ditandai dengan keterangan “inactive…”. Dari contoh di atas merupakan contoh penginputan data, tetapi belum ada variabel yang berfungsi sebagai tempat menyimpan data yang akan diinputkan. Selanjutnya akan dijelaskan tentang memasukkan nilai dengan penyimpanan menggunakan variabel.
14 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
b.
Prosedure Masukkan dengan Menggunakan Variabel Untuk melakukan operasi penjumlahan, pengurangan, penambahan,
perkalian dan operasi-operasi lainnya dibutuhkan suatu nilai yang akan di proses. Nilai tersebut dapat berupa huruf maupun angka. Namun untuk menyimpan nilainya perlu diberikan variabel sebagai tempat menampung nilai yang dimasukkan, seperti contoh berikut: A = 10 B=5 C=A+B Dari contoh diatas, angka 10 disimpan di Huruf A dimana A tersebut dikatakan sebagai variabel. Sehingga Variabel A memiliki nilai 10. Begitu juga untuk Variabel B memiliki nilai 5. Untuk melakukan operasi penambahan, A + B, dibutuhkan 1 (satu) variabel lagi untuk menyimpan hasil penjumlahan tersebut. Sehingga dibutuhkan Variabel C sebagai penampung hasil penjumlahan antara Variabel A dan Variabel B. Dari proses tersebut Variabel C memiliki nilai 15. Oleh karena itu, suatu program yang ada operasi aritmatika atau operasi lainnya membutuhkan variabel sebagai penampung data. Untuk lebih jelasnya dapat dilihat pada program menghitung nilai C seperti pada contoh ulasan sebelumnya: program menghitung_nilai_C; uses wincrt; var A : integer; B : integer; C : integer; begin A := 10; B := 5; C := A + B; write(C); end.
START
A = 10, B=5
C=A+B
Cetak C
END
Untuk kasus di atas, nilai A = 10, B = 5, bukan merupakan inputan/masukkan nilai, akan tetapi merupakan pemberian nilai awal. Sehingga dalam kasus tersebut, nilai A sudah bernilai 10 dan nilai B sudah bernilai 5 dan tidak memerlukan prosedure read/readln. Untuk penggunaan perintah readln/read akan dilihatkan pada contoh berikut ini: 15 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
program menghitung_nilai_C; uses wincrt; var A,B,C : integer; begin write('A : ');readln(A); write('B : ');readln(B); C := A + B; write(C); end.
START
Input A, B
C=A+B
Cetak C
END
c.
Variabel dan Tipe Data Variabel adalah nama atau simbol yang digunakan untuk MEWAKILI
suatu nilai. Nilai suatu variabel dapat berubah ubah dalam suatu proses program. Di dalam pendeklarasian sebuah variabel harus ditentukan tipe data yang digunakan oleh variabel tersebut. Seperti pada contoh program diatas terdapat pendeklarasian variabel Var A,B,C
: integer;
Merupakan Nama Variabel
Tipe Data yang digunakan Integer
Untuk lebih jelasnya tentang jenis tipe data yang ada pada program turbo pascal sebagai berikut: Integer Tipe Sederhana
Tipe Ordinal Boolean
Tipe Real
Tipe Data
Subjangkauan (subrange)
Tipe String Larik (Array) Tipe Terstruktur
Char
Rekaman (Record) Himpunan (set)
Tipe Pointer Berkas (file) Gambar 2.6. Tipe Data Dalam Pascal 16 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
Terbilang (enumerated)
Berikut ini adalah operator aritmatika yang digunakan di dalam pascal serta tipe data dan hasil operasi yang digunakan! Operator
Operasi
Tipe Operand
Tipe Hasil Operasi
+
Penjumlahan
Integer, real
Integer, real
-
Pengurangan
Integer, real
Integer, real
*
Perkalian
Integer, real
Integer, real
/
Pembagian
Integer, real
real
Div
Pembagian
Integer, integer
Integer
Mod
Sisa pembagian
Integer, integer
integer
LATIHAN II: 1. Buatlah masing-masing program untuk menghitung Luas Segitiga, Luas Lingkaran, dan Luas Persegi Panjang! 2. Buatlah program untuk menghitung total biaya dengan ketentuan sebagai berikut: Diskon = 10 %
merupakan konstanta
Harga = 100.000
Harga diinputkan oleh user/pengguna
3. Buatlah program untuk menginputkan biodata berikut, tentukan tipe data dari setiap variabel yang digunakan, dengan tampilan program sebagai berikut: BIODATA MAHASISWA Nama
: Kusuma Wijaya
TTL
: Mataram, 31 Desember 1995
Jenis Kelamin : Laki-laki Umur
: 17 tahun
Penghasilan
: 2000000
No HP
: 081234567890
Jabatan
: Tenaga Ahli
4. Buatlah program untuk menghitung nilai Z dengan rumus sebagai berikut: Z=A+B A = F * 0.5 B = M/J F = 25 - C J=2*F
17 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
PEMBAHASAN III STRUKTUR KONDISI/PERCABANGAN/PILIHAN (3 x Pertemuan)
3. 1.
Struktur Kondisi IF Struktur pernyataan IF adalah sebagai berikut: IF {kondisi} then {pernyataan};
Jika pernyataan lebih dari 1, maka bentuk struktur if adalah sebagai berikut: If {kondisi} then Begin {pernyataan 1}; {pernyataan 2}; ... {pernyataan n}; End;
Contoh flowchart dengan menggunakan struktur IF dan bentuk listing programnya adalah sebagai berikut: Program tentukan_suhu; uses wincrt; var suhu : real; begin write('Suhu : '); readln(suhu);
Input Suhu
if suhu > 37 then write('Suhu Panas');
IF Suhu >= 37
START
YA
Cetak “Suhu Panas”
end.
END
3. 2.
Struktur Kondisi IF … Then … Else… Struktur kondisi merupakan struktur di dalam pemrograman yang akan
melakukan penyeleksian/pemilahan sebuah pernyataan yang memiliki 2 (dua) aksi atau akibat yaitu bernilai BENAR (TRUE) dan bernilai SALAH (FALSE). Struktur pernyataan if… then… else.. adalah sebagai berikut: IF {kondisi} THEN {pernyataan} ELSE {pernyataan};
18 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
Jika pernyataanya lebih dari satu, akan menjadi: IF {kondisi} THEN begin {pernyataan 1}; {pernyataan 2}; ... {pernyataan n}; End ELSE begin {pernyataan A}; {pernyataan B}; ... {pernyataan N}; End;
Untuk lebih jelasnya dapat dilihat pada flowchart berikut: Algoritma dari flowchar di samping adalah: 1. Mulai 2. Input Nilai 3. Jika Nilai >= 80
START
Jika Ya, Cetak “LULUS” Jika Tidak, Cetak “GAGAL”
Input Nilai
4. Selesai
Adapun bentuk programnya: program kondisi1; uses wincrt; var nilai : real; begin write('Input Nilai : '); readln(nilai); if nilai >= 80 then write('LULUS') else write('GAGAL'); end.
IF Nilai >= 80
YA
Cetak “LULUS”
TIDAK Cetak “GAGAL”
END
Kondisi dari kasus di atas adalah “nilai >= 80”, yang berarti jika nilai >= 80, (TRUE/BENAR) maka cetak keterangan LULUS, dan sebaliknya jika BUKAN Nilai >= 80 atau bisa ditulis nilai <80, (FALSE/SALAH) maka cetak keterangan GAGAL.
19 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
3. 3.
Struktur IF… then… else if… then… else…. Seperti pada pembahasan sebelumnya, terdapat IF… Then… Else…
yang merupakan struktur kondisi untuk satu kondisi. Jika terdapat kondisi lebih dari 1, maka menggunakan struktur sebagai berikut: IF {Kondisi 1} then {Pernyataan 1} ELSE IF {kondisi 2} then {Pernyataan 2} ELSE {Pernyataan 3}
Seperti pada IF sebelumnya, jika terdapat lebih dari 1 (satu) statement atau pernyataan, maka gunakan “begin” dan “end;”. Untuk lebih jelasnya dapat dilihat dalam flowchart berikut: START
Algoritma dari dari flowchart: 1. Mulai 2. Masukkan nama, alamat
Input Nama, Alamat, Jenis_Kamar, Lama_menginap
Jenis_kamar, lama_menginap 3. Jika jenis_kamar = ‘anggrek’ Ya, tarif = 100.000 Jika jenis_kamar = ‘Mawar’ Ya, tarif = 300.000
IF Jenis_Kamar = “Anggrek”
YA Tarif = 100.000
TIDAK
Jika jenis_kamar = ‘Melati’ Ya, tarif = 200.000 4. Biaya_menginap = tarif * Lama_menginap 5. Cetak biaya_menginap
IF Jenis_Kamar = “Mawar”
YA
TIDAK Tarif = 200.000
6. Selesai Biaya_menginap = tarif * Lama_menginap
Cetak Biaya_menginap
END
20 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
Tarif = 300000
Listing program dari flowchart di atas adalah sebagai berikut: program penginapan; uses wincrt; var nama, alamat jenis_kamar lama_menginap tarif, biaya_menginap begin writeln(' write('Nama write('Alamat write('Jenis Kamar write('Lama Menginap
: : : :
string [40]; string [20]; byte; longint;
Program Penginapan'); : '); readln(nama); : '); readln(alamat); : '); readln(jenis_kamar); : '); readln(lama_menginap);
if jenis_kamar = 'Anggrek' then tarif := 100000 else if jenis_kamar = 'Mawar' then tarif := 300000 else tarif := 200000; biaya_menginap := tarif * lama_menginap; write('Biaya Menginap end.
3. 4.
: '); write(biaya_menginap);
Struktur IF Bersarang (Nested IF) IF bersarang merupakan struktur kondisi yang mana di dalam sebuah
kondisi terdapat kondisi lagi yang menjadi pemilihan berikutnya. Untuk lebih jelasnya perhatikan bentuk struktur berikut: If {kondisi 1} then Begin If {kondisi 1.1} then {pernyataan} Else {pernyataan} End Else Begin If {kondisi 2.1} then {pernyataan} Else {pernyataan} End;
Penggunaan if bersarang harus menggunakan “begin” dan diakhiri oleh “end;”. Untuk lebih jelasnya tentang IF bersarang, dapat dilihat pada contoh kasus berikut ini: Total gaji diperoleh dari gaji pokok ditambah dengan tunjangan istri dan ditambah dengan tunjangan anak. Untuk tunjangan istri diperoleh dengan syarat telah menikah, akan mendapat tunjangan 10% dari gaji pokok. Tunjangan anak 21 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
diperoleh dengan syarat jika jumlah anak lebih dari 2 maka, mendapat tunjangan anak sebesar 6% dari gaji pokok. Jika jumlah anak kurang atau sama dengan 2, akan mendapat tunjangan anak sebesar jumlah anak dikali dengan 3% dari gaji pokok. Untuk lebih jelasnya dapat dilihat seperti diagram alir berikut: Analisa Kasus: START
Input nama, status, Gaji_Pokok
IF Status = ‘menikah’
YA Tunj_istri = 10%*Gaji_Pokok
Input Jumlah_anak
TIDAK Tunj_istri = 0 Tunj_anak = 0
Tunj_anak = jumlah_anak*3%*Gaji_pokok
Tidak
IF Jumlah_anak > 2
Ya
Total_gaji = Gaji_Pokok + Tunj_istri + Tunj_anak
Cetak Total_gaji
END
Bentuk Programnya: program hitung_gaji; uses wincrt; var nama, status jumlah_anak gaji_pokok, tunj_istri, tunj_anak total_gaji : real;
: string; : byte; : real;
begin write('Nama = '); readln(nama); write('Status = '); readln(status); write('Gaji Pokok = '); readln(gaji_pokok); if status = 'menikah' then begin write('Jumlah Anak = '); readln(jumlah_anak); tunj_istri := 0.1 * gaji_pokok; if jumlah_anak > 2 then tunj_anak:= 0.06 * gaji_pokok else tunj_anak:= jumlah_anak * 0.03 * Gaji_pokok; end else begin tunj_istri := 0; tunj_anak := 0; 22 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
Tunj_anak = 6%*Gaji_Pokok
end; Total_gaji := gaji_pokok writeln('Tunjangan istri writeln('Tunjangan Anak writeln('Total Gaji end.
3. 5.
+ = = =
tunj_anak + tunj_istri; ',tunj_istri:8:2); ',tunj_anak:8:2); ',total_gaji:4:2);
Struktur CASE Struktur CASE pada dasarnya sama dengan struktur IF yaitu merupakan
proses pemilihan/kondisi. Untuk lebih jelasnya dapat dilihat pada kasus berikut ini: Pada sebuah perlombaan terdapat pemilihan hadiah dengan ketentuan sebagai berikut: Jika memilih nomor 1, akan mendapat “Televisi LCD 64 Inch” Jika memilih nomor 2, akan mendapat “Motor 150 Cc” Jika memilih nomor 3, akan mendapat “Rumah Mewah berserta Isinya”
Adapun bentuk sintax dengan menggunakan IF adalah sebagai berikut: program hadiah; uses wincrt; var pilih : byte; begin writeln('Pilih HADIAH antara no 1-10 !!!!'); write('Pilih Nomor : '); readln(pilih); if pilih = 1 then write('Televisi LCD 64 Inch') else if pilih = 5 then write('Motor 150 cc') else if pilih = 6 then write('Rumah Mewah Berserta Isinya') else write('Maaf Anda Belum Beruntung'); end.
Adapun bentuk sintax dengan menggunakan case adalah sebagai berikut: program hadiah; uses wincrt; var pilih : byte; begin writeln('Pilih HADIAH antara no 1-10 !!!!'); write('Pilih Nomor : '); readln(pilih); case pilih of 1: write('Televisi LCD 64 Inch'); 5: write('Motor 150 cc'); 6: write('Rumah Mewah Berserta Isinya'); else write('Maaf Anda Belum Beruntung'); end; end. 23 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
3. 6.
Kondisi AND dan Kondisi OR Kondisi AND Kondisi AND merupakan kondisi pilihan dimana semua kondisi tersebut harus bernilai benar maka aksi yang akan dipilih adalah benar. Untuk lebih jelasnya dapat dilihat dalam tabel kebenaran berikut: A 1 1 0 0
B 1 0 1 0
A and B 1 0 0 0
Dengan ketentuan : 0
: bernilai SALAH
1
: bernilai BENER
Contoh dalam kasus! Razia motor akan memeriksa kelengkapan SIM dan STNK. Sanksi akan diberikan jika salah satu tidak terpenuhi. Maka program dapat dibuat sebagai berikut: program razia; uses wincrt; var sim, stnk : string [3]; begin writeln('#### PROGRAM RAZIA MOTOR ####'); write('Ada SIM : '); readln(sim); write('Ada STNIK : '); readln(stnk); if (sim = 'ada') and (stnk = 'ada') then write('Anda adalah orang yang taat peraturan') else write('Anda terkena Sanksi'); end.
Adapun bentuk flowchartnya adalah sebagai berikut:
24 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
Kondisi OR Kondisi OR merupakan kondisi dimana aksinya akan SALAH jika semua kondisi yang diajukan bernilai SALAH. Adapun tabel kebenaran untuk kondisi OR adalah sebagai berikut: A 1 1 0 0
B 1 0 1 0
A OR B 1 1 1 0
Contoh dalam kasus! Bonus akan diperoleh jika jam kerja > 160 atau hasil produksi > 1000 unit. Adapun bentuk listing programnya adalah sebagai berikut: program bonus; uses wincrt; var jam_kerja, hsl_produksi
: integer;
begin writeln('##### BONUS #####'); write('Jumlah Jam Kerja : '); readln(jam_kerja); write('Hasil Produksi : '); readln(hsl_produksi); if ((jam_kerja > 160) or (hsl_produksi > 1000)) write('Anda Mendapat Bonus') else write('Anda Tidak Mendapat Bonus'); end.
Adapun bentuk flowchartnya adalah sebagai berikut: Start
Input jam_kerja, jml_produksi
IF jam_kerja > 160 OR jml_produksi > 1000
Ya
Cetak ‘Anda mendapat bonus’
Tidak Cetak ‘Anda ttidak mendapat bonus’
END
25 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
then
Latihan III: 1.
Buatlah program untuk menentukan kelulusan. Syarat dinyatakan lulus jika nilai >= 80!
2.
Buatlah program untuk menentukan grade nilai dengan ketentuan sebagai berikut: Jika nilai akhir >= 90 sampai 100 akan mendapat Grade A Jika nilai akhir >= 80 sampai < 90 akan mendapat Grade B+ Jika nilai akhir >= 70 sampai < 80 akan mendapat Grade B Jika nilai akhir >= 60 sampai < 70 akan mendapat Grade C+ Jika nilai akhir >= 50 sampai < 60 akan mendapat Grade C Jika nilai akhir >= 40 sampai < 50 akan mendapat Grade D Jika nilai akhir kurang dari 40 akan mendapat Grade E Nilai akhir = (20 % * Nilai harian) + (30 % * Nilai MID) + (50 % * Nilai UAS) Diinputkan nama, nim, semester, jurusan, dll (lengkapi data)!
3.
Buat program untuk menentukan bilangan ganjil dan bilangan genap!
4.
Buatlah program untuk menentukan nilai terbesar dari 3 (tiga) buah nilai!
5.
Buat program untuk kasus berikut, adapun tampilan programnya adalah sebagai berikut:
Dengan ketentuan! Jenis kamar dan tarif diperoleh dari table berikut: No 1 2 3
Jenis Kamar Mawar Anggrek Melati
Tarif/Malam 100.000 200.000 400.000
26 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
Untuk diskon diperoleh jika biaya menginap >= 1.000.000 sebesar 10% dari biaya menginap. 6.
Buatlah program untuk menghitung Luas Persegi panjang, Luas Segitiga, dan Luas Lingkaran dengan menggunakan menu pilihan. Adapun contoh programnya adalah sebagai berikut:
7.
Buatlah program untuk menentukan Total Gaji dari penggajian pegawai, dengan ketentuan sebagai berikut: Total gaji diperoleh dari gaji pokok ditambah dengan gaji lembur. Dimana untuk golongan A mendapat gaji pokok sebesar 2.000.000, untuk golongan B mendapat gaji pokok sebesar 1.500.000 dan untuk golongan C mendapat gaji pokok sebesar 1.000.000. Untuk gaji lembur, diperoleh dari jika jumlah jam kerja > 160 perbulan, maka selebihnya dianggap lembur. Gaji lembur diperoleh dari Jam lembur dikali dengan 10.000.
8.
Buatlah program untuk menentukan Total Gaji dari penggajian pegawai, dengan ketentuan sebagai berikut: Total gaji diperoleh dari gaji pokok ditambah dengan tunjangan istri dan ditambah dengan tunjangan anak. Untuk tunjangan istri diperoleh dengan syarat telah menikah, akan mendapat tunjangan 10% dari gaji pokok. Tunjangan anak diperoleh dengan syarat jika jumlah anak lebih dari 2 maka, mendapat tunjangan anak sebesar 6% dari gaji pokok. Jika jumlah anak kurang atau sama dengan 2, akan mendapat tunjangan anak sebesar jumlah anak dikali dengan 3% dari gaji pokok.
27 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
9.
Buatlah program seperti flowchart di bawah ini! START
Input A, B, C
Ya
Ya
IF (A and B) >10
Tidak
IF (A or B) > 10
IF A>C
Tidak
Tidak Z = A*B
Z = A*C
Ya
Z=A-B Tidak
Ya
IF A>B
Z=B-A
Z=B-C
Output Z
END
10. Buatlah program untuk kasus berikut jika diketahui data sebagai berikut: No
Kelas
Daya
Tarif/kwh
1
Ekonomi
900 watt
500/kwh
2
Menengah
1200 watt
1000/kwh
3
Bisnis
2200 watt
2000/kwh
Tentukan total bayar untuk biaya listrik, dengan ketentuan sebagai beriku: Biaya pemakaian
= tarif * jumlah pemakaian
Denda diperoleh jika jumlah pemakaian >= 200 atau tanggal pembayaran > 20, dengan denda sebesar 10 % dari biaya pemakaian. Bonus diperoleh jika jumlah pemakaian < 200 atau tanggal pembayaran <= 20, dengan bonus sebesar 10 % dari biaya pemakaian. 28 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
PEMBAHASAN IV STRUKTUR PENGULANGAN (For, While…do, dan Repeat…Until) (3 x Pertemuan) 4.1.
Strukur For For…to…do Struktur for…to..do merupakan pengulangan yang sudah pasti jumlah pengulangannya, dimana jumlah pengulangannya ditentukan oleh nilai awal dan nilai akhir. Struktur ini perhitungan nilainya secara ascending atau menaik dari nilai awal ke nilai akhir. Adapun bentuk prosedure dalam penggunaan for…to…do adalah sebagai berikut: For nama_variabel := nilai_awal to nilai_akhir do {statement/pernyataan}
Jika lebih dari 1 (satu) pernyataan yang mengalami perulangan, harus ditambah dengan begin dan diakhiri dengan end;, untuk lebih jelasnya sebagai berikut: For nama_variabel := nilai_awal to nilai_akhir do Begin {statement/pernyataan} {statement/pernyataan} … End;
Adapun contoh program dengan menggukan For…do adalah sebagai berikut: program pengulangan; uses wincrt; var i : byte; begin for i := 1 to 5 do writeln('Belajar Pascal'); end.
Bentuk flowchart dari program di atas dapat digambarkan sebagai berikut:
29 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
For…downto…do Sama halnya dengan For…to…do.. hanya berbeda perhitungan nilainya secara descending atau dari besar ke kecil atau nilai akhir ke nilai awal. Adapun bentuk perintah dari For…downto…do adalah sebagai berikut: For nama_variabel := nilai_akhir downto nilai_awal do {statement/pernyataan}
Adapun bentuk listing program dengan menggunakan For…downto…do adalah sebagai berikut: program pengulangan; uses wincrt; var i : byte; begin for i := 5 downto 1 do writeln('Belajar Pascal'); end.
Dalam program di atas, akan menghasilkan program sebagai berikut:
Setelah program dijalankan, maka akan tampil 5 (lima) kalimat belajar pascal. Berikut ini contoh program dengan dua (2) pernyataan/statement adalah sebagai berikut: program pengulangan; uses wincrt; var i : byte; begin for i := 1 to 5 do begin writeln('Belajar Pascal'); writeln('Gampang woi...'); end; end.
Start
For I = 1 to 5
Cetak “Belajar Pascal” Cetak “Gampang Woi…”
Next I
END
30 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
4.2.
Struktur While…do… Struktur While…do merupakan pengulangan dengan menggunakan
kondisi, dimana pengulangan akan terjadi jika kondisi bernilai benar. Adapun bentuk perintah pengulangan dengan menggunakan while..do dalam pascal adalah sebagai berikut: While {kondisi} do Begin {pernyataan} … … End;
Dengan kasus yang sama pada struktur for…do, dapat diliat listing program dengan menggunakan perintah while…do sebagai berikut: program pengulangan; uses wincrt; var i : byte; begin i:= 1; while(i <= 5) do begin writeln('Belajar Pascal'); writeln('Gampang woi...'); i:= i+1; end; end.
Adapun bentuk flowchart dari kasus di atas dapat digambarkan sebagai beirkut: Start
Start
I=1
I=1
While I <= 5
Tidak
END
Cetak “Belajar Pascal” Cetak “Gampang Woi…”
I=I+1
Ya Cetak “Belajar Pascal” Cetak “Gampang Woi…”
YA While I <= 5 I=I+1
TIDAK END
31 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
4.3.
Struktur Repeat…Until Struktur Repeat…Until merupakan pengulangan dengan menggunakan
kondisi, dimana pengulangan akan terjadi jika kondisi bernilai salah. Adapun bentuk printah menggunakan repeat…until dalam pascal adalah sebagai berikut: Repeat {pernyataan} … … Until
Dengan kasus yang sama pada struktur for…do, dapat diliat listing program dengan menggunakan perintah Repeat…Until sebagai berikut: program pengulangan; uses wincrt; var i : byte; begin i:= 1; repeat writeln('Belajar Pascal'); writeln('Gampang woi...'); i:= i+1; until (i>5); end.
Adapun bentuk flowchart dengan menggunakan Repeat…Until adalah sebagai berikut: Start
Start
I=1
I=1
Cetak “Belajar Pascal” Cetak “Gampang Woi…”
Repeat
I=I+1
Cetak “Belajar Pascal” Cetak “Gampang Woi…”
I=I+1
Tidak Repeat > 5
Tidak Ya
Until I > 5
END
Ya END
32 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
Counter dan Logika Penjumlahan Counter Counter merupakan logika untuk menentukan jumlah dari suatu perulangan. Bentuk logika counter ini adalah sebagai berikut: I = I + 1
Logika Penjumlahan Logika penjumlahan merupakan cara untuk menjumlahkan niilai dari suatu perulangan. Berikut bentuk atau rumus dari logika penjumlahan tersebut: Jumlah = jumlah + nilai
Berikut ini adalah contoh kasus untuk counter dan logika penjumlahan tersebut: No : 0001 Tanggal : 14 Agustus 2012 Nama : Kusuma --------------------------------------------------------No Nama Barang Harga Jumlah Total Harga --------------------------------------------------------1 Pepsodent 2000 2 4000 2 Lifeboy 2500 1 2500 3 Sampoo Clear 500 4 2000 --------------------------------------------------------Total Bayar 8500
Analisa dari kasus di atas adalah sebagai berikut: 1. 2. 3. 4. 5. 6.
Mulai Masukkan no, tanggal, nama, nama_barang, harga, jumlah I = I + 1 Total_harga = harga * jumlah Jumlah = jumlah + total harga Input Barang Lagi? Ya, Kembali ke-2 Tidak, ke-7 7. Cetak Total Bayar 8. Selesai
Bentuk listing program dari kasus di atas adalah sebagai berikut: program pengulangan; uses wincrt; var i,no,jumlah : byte; no_trans,tanggal,nama : string[30]; nm_brg : string[20]; harga, total_harga,total_jumlah : longint; jawab : char; begin i:=0; writeln('##### PROGRAM PENJUALAN ######'); 33 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
write('No Transaksi : '); readln(no_trans); write('Tanggal : '); readln(tanggal); write('Nama : '); readln(nama); jawab:= 'y'; writeln('-------------------------------------------------'); while (upcase(jawab) = 'Y') do begin i:=i+1; write('No : ');writeln(i); write('Nama Barang : ');readln(nm_brg); write('Harga : ');readln(harga); write('Jumlah : ');readln(jumlah); total_harga:=harga*jumlah; total_jumlah:=total_jumlah+total_harga; write('Total Harga : ');writeln(total_harga); writeln;writeln; write('Input Lagi [y/t] ? '); readln(jawab); end; writeln('---------------------------------------------------'); write('Total Harga --> ',total_jumlah); end.
Bentuk flowchartnya adalah sebagai berikut:
counter
Logika Penjumlahan
34 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
LATIHAN IV: 1. Buatlah program untuk mencetak deret berikut dengan menggunakan struktur pengulangan: a. 0 3 8 15 24 35…N b. 1 1 2 3 5 8 13…N c. 4 7 10 13 … N d. 2 5 10 17…N e. Input deret = 5 1 2 3 4 5 = 15 2. Buat program untuk menghitung nilai faktorial! Contoh: 1!
=1
2! 1 * 2
=2
4! 1 * 2 * 3 * 4
= 24
Dst.. 3. Buat program untuk menghitung pangkat! Contoh: -
4 pangkat 3 = 64
-
2 pangkat 3 = 8
-
3 pangkat 3 = 9 Dst…
4. Buatlah program untuk kasus berikut:
No
Nama Pasien
Biaya Berobat
Diskon
Total Bayar
Total Pendapatan Rumah Sakit Keterangan: Diskon diperoleh jika biaya berobat > 300.000 sebesar 10% -
Gunakan Uncounted Loop
5. Buatlah program untuk kasus berikut:
Diketahui data pelanggan PDAM dibedakan menjadi 3 (tiga) jenis langganan yang dibedakan berdasarkan biaya beban dan tarif. Adapun ketentuan dari PDAM ini adalah sebagai berikut: Jenis langganan = Umum,
tarif = Rp.5.000/m3, biaya beban = 50.000
35 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
Jenis langganan = Rumah Tangga, tarif = Rp.3.000/m3, biaya beban = 40.000 Jenis langganan = Bisnis, tarif = Rp.7.000/m3, biaya beban = 75.000
Biaya_pakai = jml_pemakaian * tarif Total Bayar = Biaya_beban + biaya pakai Buat program dengan input sebagai berikut: nama, jenis langganan, jumlah pemakaian. Cetak total bayar dan total pendapatan untuk PDAM tersebut! 6. Buatlah program untuk menentukan pemenang dalam pemilihan ketua bem dimana terdapat 3 (tiga) calon kandidat dengan simbol. Kandidat pertama dengan simbol “apel”, kandidat kedua dengan simbol “anggur”, dan kandidiat ketiga dengan simbol “melon”. Tentukan pemenang dari pertama, kedua, dan ketiga serta tentukan jumlah pemilih!
36 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
PEMBAHASAN V ARRAY/LARIK/VARIABEL BERINDEX (2 x Pertemuan) 5.1.
Array 1 Dimensi Array merupakan suatu variabel yang mempunyai nama yang sama, tipe
data yang sama, tetapi memiliki nilai yang berbeda yang dibedakan oleh index. Dapat juga diartikan sebagai struktur data yang menyimpan sekumpulan elemen yang bertipe sama. Tipe data index yang digunakan harus merupakan tipe data Ordinal/keterurutan seperti Integer atau char. Adapun bentuk Array dapat digambarkan dengan gambar berikut: Data[5] = {sepatu, kaos, celana, sandal, kemeja} Data[5]
1 Sepatu
2 Kaos
3 Celana
4 Sandal
5 kemeja
Data pada index pertama (data[1]) mempunyai nilai Sepatu, data pada index kedua (data[2]) mempunyai nilai Kaos, dan seterusnya. Contoh program dalam penginputan grade mahasiswa adalah sebagai Start
berikut:
Deklarasi Variabel Array
DIM nama[100], grade[100], I = 0, jawab = ‘y’
I=I+1
Proses Penginputan
Input nama[i], grade[i]
Input lagi?
For j = 1 to i
Proses Mencetak Array
Cetak nama[j], grade[j]
Next J
37 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
END
program array1D; uses wincrt; var jawab : i,j : nama : grade :
char; byte; Array [1..100] of string[30]; Array [1..100] of string[2];
begin jawab := 'y'; i:=0; writeln('###################################'); writeln('## ##'); writeln('## PROGRAM GRADE MAHASISWA ##'); writeln('## ##'); writeln('###################################'); writeln; while(upcase(jawab) = 'Y') do begin i:= i + 1; write('No : '); writeln(i); write('Nama : '); readln(nama[i]); write('Grade : '); readln(grade[i]); writeln;writeln; write('Input Data Lagi [y/t] ?'); readln(jawab); end; writeln('Data Setelah Diinputkan'); writeln('Tekan ENTER untuk melihat...'); readln; writeln('----------------------------'); writeln('No Nama Mahasiswa Grade '); writeln('----------------------------'); for j := 1 to i do begin write(j, nama[j]:16, grade[j]:7); writeln; end; writeln('----------------------------'); end.
38 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
5.2.
Pencarian (Searching) Pencarian (searching) merupakan suatu proses mencari data pada
sekumpulan data. Pencarian ini dapat dilakukan dengan dua cara yaitu Linear Searching dan Binery Searching. Adapun algoritma dengan menggunakan Linear Searching adalah sebagai berikut: 1. 2. 3. 4.
Mulai Masukkan Nilai variabel yang dicari I = I + 1 If cari = Data[i] Ya, k = k + 1 Hasil[k] = i 5. Apakah data sudah ditelusuri semua? Ya, lanjutkan ke proses 6 Tidak, kembali ke proses 3 6. If k = 0? Ya, Data tidak ditemukan Tidak, cetak semua data yang ditemukan. 7. Selesai
Algoritma dengan menggunakan Binery Searching adalah sebagai berikut: 1. 2. 3. 4. 5.
6. 7.
8. 9.
Mulai Urutkan data secara ascending Input nilai variabel yang dicari Tentukan BB (index batas bawah) dan BA (index batas atas) If (BB = BA) or (data telah ditemukan)? Ya, ke proses 9 Tidak, ke proses 6 MID = (BB + BA) div 2 If cari = data [mid]? Ya, Data ditemukan pada index ke-mid Ke proses 9 Tidak, if (cari > data[mid]) ? Ya, BB = mid + 1 Tidak, BA = mid - 1 Kembali ke proses 5 Selesai
39 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
5.3.
Pengurutan (Sorting) Pengurutan (sortiing) merupakan proses mengurutkan nilai, baik dari nilai
terkecil ke nilai terbesar (ascending) atau sebaliknya dari terbesar ke nilai terkecil (descending). Algoritma untuk melakukan pengurutan secara Ascending Deklarasi L : array [1..100] of integer; I, k, temp : integer; Algorithma : For I 1 to n-1 do For k n downto i+1 do If L[k] < L [k-1] then Temp L[k] L[k] L [k-1] L[k-1] temp Endif Endfor Endfor
5.4.
Array 2 Dimensi Array 2 dimensi merupakan pengembangan dari Array 1 Dimensi, dimana
pada Array 1 dimensi, index yang digunakan 1 (satu) yang
berarti
penyimpanannya dalam bentuk kolom ataupun dalam bentuk baris. Sedangkan pada
Array
2
Dimensi,
terdapat
2
(dua)
index
yang
dapat
berarti
penyimpanannya dalam bentuk baris dan kolom. Untuk lebih jelasnya dapat dilihat dalam contoh program berikut: A [5,5] = itu berarti terdapat penyimpanan data dengan 5 kolom dan 5 baris seperti tabel berikut: 1 2 3 4 5 1 10 A [5,5] = 2 87 3 33 4 34 5 44 Di liat dari tabel di atas, penempatan nilai tersebut dapat diwakilkan dengan cara berikut: A [1,1] = 10 A [1,4] = 34 A [2,2] = 87 A [3,3] = 33 A [5,5] = 55
40 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
LATIHAN V: 1. Buatlah program dengan menu berikut: PROGRAM PENJUALAN << Pilih Menu >> 1. Input Data 2. Lihat Hasil 3. Cari Data 4. Urutkan Data 5. Exit
Dalam program tersebut gunakan Array 1 dimensi dan bagi setiap menu dengan melakukan pemilihan!
2. Buatlah program untuk perhitungan Matrix (penjumlahan matrix, pengurangan matrix, dan perkalian matrix)
3. Buatlah program kwitansi berikut! Dengan ketentuan, setiap orang dapat membeli lebih dari 1 barang, dan setiap setiap orang membeli barang yang berbeda-beda. (Gunakan Array 2 Dimensi) Contoh tampilan setelah data diinputkan! Pembeli Pertama Nomor : 001 Tgl : 23 April 2012 Nama Pembeli : Kusuma ---------------------------------------------------------No Nama barang Harga jumlah Total Harga ---------------------------------------------------------1. Sabun 3000 4 12000 2. Pepsodent 2500 4 10000 3. Sampo Clear 500 5 2500 ---------------------------------------------------------Total pembayaran 24500
Pembeli Kedua Nomor : 002 Tgl : 23 April 2012 Nama Pembeli : Alfian ---------------------------------------------------------No Nama barang Harga jumlah Total Harga ---------------------------------------------------------1. Silverqueen 13000 2 26000 ---------------------------------------------------------Total pembayaran 26000
Tentukan juga total pendapatan pedagang yang diperoleh dari penjumlahan semua total pembayaran pembeli!!! 41 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
PEMBAHASAN VI PROCEDURE (PROSEDUR) DAN FUNCTION (FUNGSI) (2 x Pertemuan) 6.1.
Prosedur (Procedure) Prosedur (procedure) atau Fungsi (function) adalah suatu program
terpisah dalam blok sendiri yang berfungsi sebagai sub-program (modul program) yang merupakan sebuah program kecil untuk memproses sebagian dari pekerjaan program utama, khusus untuk fungsi dapat menghasilkan nilai sendiri. Prosedur dibagi menjadi 2 (dua) yaitu (1) Prosedur Sederhana yaitu merupakan prosedure yang tidak menerima argumen (nilai atau data) ketika dieksekusi; (2) Prosedure Kompleks menerima nilai yang diproses ketika dieksekusi. Berikut contoh prosedure sederhana! program prosedure_garis; uses wincrt; {prosedure garis} procedure garis; begin writeln('-----------------------'); end; {program utama} begin garis; writeln('PROGRAM PENJUALAN'); garis; end.
Prosedur Garis
Pemanggilan prosedur
Berikut contoh prosedure kompleks! program prosedur; uses wincrt; var r,luas : real;
Variabel GLOBAL
{prosedure lingkaran} procedure lingkaran (jari2 : real); var phi : real; begin phi:=22/7; luas:=phi*sqr(jari2); end; {program utama} begin writeln('Program Hitung write('Input Jari-jari lingkaran(r); write('Luas Lingkaran end. 42 | P r a k t i k u m A l g o r i t m
Prosedure Lingkaran Variabel LOKAL
Luas Lingkaran'); : '); readln(r); pemanggilan Prosedur : ',luas:0:2); a dan Pemrograman
Prosedur dengan PARAMETER Perhatikan bentuk program berikut: A
B
program prosedur; uses wincrt; var x : integer;
program prosedur; uses wincrt; var x : integer;
{prosedur nilai} procedure nilai(a:integer); begin writeln('Nilai a pertama : ',a); a:= 5; writeln('Nilai a kedua : ',a); end;
{prosedur nilai} procedure nilai(var a:integer); begin writeln('Nilai a pertama : ',a); a:= 5; writeln('Nilai a kedua : ',a); end;
{program utama} begin x:=10; writeln('x sebelum prosedure = ',x); nilai(x); writeln('x Setelah prosedure = ',x); end.
{program utama} begin x:=10; writeln('x sebelum prosedure = ',x); nilai(x); writeln('x Setelah prosedure = ',x); end.
Hasil setelah program dijalankan! A
B
Pada Point A nilai x setelah prosedure tidak berubah, hal ini yang dikatakan sebagai Parameter Nilai (Pass by Value), sedangkan untuk Point B, nilai x setelah prosedur mengalami perubahan sesuai dengan perubahan dari nilai parameter dari prosedure nilai tersebut, hal ini yang dikatakan sebagai Parameter Variabel (Pass by Variabel).
43 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
6.2.
Fungsi (Function) Sama seperti prosedure hanya fungsi memiliki nilai. Untuk lebih jelasnya
perhatikan contoh listing program berikut: program fungsi; uses wincrt; var nilai : integer; {fungsi kubik} function kubik(x:integer) : longint; begin kubik:=x*x*x; end; {program utama} begin write('Input Nilai : '); readln(nilai); write(nilai, ' pangkat 3 = ', kubik(nilai)); end.
Adapun bentuk flowchart dari kasus di atas untuk prosedur dan fungsi adalah sebagai berikut:
Flowchar Program Utama
Prosedure Kubik(x)
44 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
Latihan VI! 1. Buatlah program untuk menghitung Grade dengan tampilan menu utama terdiri dari: -
Input Data
{buat dalam 1 (satu) prosedure}
-
Cetak hasil
{buat dalam 1 (satu) prosedure}
-
Pencarian
{buat dalam 1 (satu) prosedure}
-
Pengurutan
{buat dalam 1 (satu) prosedure}
Diinputkan nama, nim, semester, jurusan, nilai harian, nilai mid, nilai uas dengan menggunakan prosedur input. Untuk menentukan grade yang diperoleh, gunakan Fungsi (Function). Ketentuan proses nilai akhir dan penentuan grade dapat dilihat pada Latihan III soal nomor 2!.
2. Buat program untuk menghitung konversi suhu, dari Celcius ke Reamur, dari Celcius ke Fahreinheit, dari celcius ke Kelvin dengan menggunakan prosedure atau fungsi!
3. Perhatikan Latihan V soal nomor 3 (tiga), buatlah program untuk kasus tersebut dengan ketentuan sebagai berikut: -
Input Data
{buat dalam 1 (satu) prosedure}
-
Cetak hasil
{buat dalam 1 (satu) prosedure}
-
Pencarian
{buat dalam 1 (satu) prosedure}
-
Pengurutan
{buat dalam 1 (satu) prosedure}
45 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
PEMBAHASAN VII REKURSI DAN RECORD (REKAMAN) (2 x Pertemuan)
7.1.
Rekursi Rekursi merupakan suatu prosedur atau fungsi yang mana dapat
memanggil dirinya sendiri. Dalam pembuatan rekursi tersebut harus ada penghentian operasi (iterasi). Untuk lebih jelasnya, dapat diliat pada contoh program dibawah ini! Program faktorial; Uses wincrt; Var x : integer; {fungsi Faktorial} function factorial (n:integer):integer; begin if n<2 then {ini adalah syarat penghentian operasi} factorial:=1 else factorial:=n*factorial(n-1); {ini bagian rekursi} end; {Program Utama} begin writeln('PROGRAM HITUNG NILAI FAKTORIAL'); writeln('------------------------------'); write('Masukkan nilai : '); readln(x); writeln(x,'! adalah ',factorial(x)); end.
Dari program tersebut dapat dijelaskan sebagai berikut: Jika x= 5, Ke-1, n=5. Factorial:=5*factorial(4); Perlu Pemanggilan Ke-2 Ke-2, n=4. Factorial:=4*factorial(3); Perlu Pemanggilan Ke-3 Ke-3, n=3. Factorial:=3*factorial(2); Perlu Pemanggilan Ke-4 Ke-4, n=2. Factorial:=2*factorial(1); Perlu Pemanggilan Ke-5 Ke-5, n=1. Factorial:=1; Ke-4 menjadi = Factorial 2*1
2
Ke-3 menjadi = Factorial 3*2
6
Ke-2 menjadi = Factorial 4*6
24
Ke-1 menjadi = Factorial 5*24
120
46 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
7.2.
Record (Rekaman) 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). Contoh , sebuah record dengan empat buah field. Field 1
Field 2
Field 3
Field 4
Cara pendeklarasian dari record adalah sbb: • Mendefinisikan tipe dari record (jumlah field, jenis tipe data yang dipakai), • Mendefinisikan variabel untuk dilakukan operasi. Adapun cara mendeklarasikan perintah record adalah sebagai berikut: type nama_record = record identifier_1 : tipe_data_1; . . . . . . identifier_n : tipe_data_n; end; var variabel : nama_record;
Contoh program dengan menggunakan record: program contoh_record; uses wincrt; type identitas = record nama : string[30]; alamat : string[40]; Golongan : string[5]; Gaji_Pokok : longint; end; var biodata : identitas; begin biodata.nama biodata.alamat biodata.golongan biodata.gaji_pokok writeln('Nama writeln('Alamat writeln('Golongan writeln('Gaji Pokok end.
:= 'Kusuma Wijaya'; := 'Mataram'; := 'IV D'; := 5000000; : ',biodata.nama); : ',biodata.alamat); : ',biodata.golongan); : ',biodata.gaji_pokok);
Untuk memudahkan dalam pengulangan penulisan nama variabel sehingga dalam penulisan tidak menjadi panjang seperti contoh di atas (biodata.gaji_pokok), dapat digunakan dengan statement with {nama pemanggil record} do. Dapat dilihat pada contoh program berikut:
47 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
program contoh_record; uses wincrt; type identitas = record nama : string[30]; alamat : string[40]; Golongan : string[5]; Gaji_Pokok : longint; end; var biodata : identitas; begin with biodata do begin nama alamat golongan gaji_pokok
:= := := :=
'Kusuma Wijaya'; 'Mataram'; 'IV D'; 5000000;
writeln('Nama writeln('Alamat writeln('Golongan writeln('Gaji Pokok
: : : :
',nama); ',alamat); ',golongan); ',gaji_pokok);
end; end.
Penggunaan record juga dapat dikombinasikan dengan menggunakan array, dapat dilihat pada contoh program di atas yang diubah dalam bentuk array sebagai berikut: program contoh_record_array; uses wincrt; type identitas = record nama : string[30]; alamat : string[40]; Golongan : string[5]; Gaji_Pokok : longint; end; var biodata : Array [1..10] of identitas; begin with biodata[1] do begin nama alamat golongan gaji_pokok
:= := := :=
writeln('Nama writeln('Alamat writeln('Golongan writeln('Gaji Pokok
'Kusuma Wijaya'; 'Mataram'; 'IV D'; 5000000; : : : :
',nama); ',alamat); ',golongan); ',gaji_pokok);
end; end. 48 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n
Latihan VII! 1. Buat program lain yang menggunakan cara rekursi! 2. Kembangkan program pada Latihan VI soal nomor 3 (tiga) dengan penambahan Record!
49 | P r a k t i k u m A l g o r i t m a d a n P e m r o g r a m a n