P. 1
Modul Algoritma & Pemrograman Bahasa C - Fungsi Dan Rekursi

Modul Algoritma & Pemrograman Bahasa C - Fungsi Dan Rekursi

|Views: 9,498|Likes:
Dipublikasikan oleh Ismail Adha Kesuma

More info:

Published by: Ismail Adha Kesuma on Apr 04, 2010
Hak Cipta:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

06/17/2014

pdf

text

original

MODUL II FUNGSI DAN REKURSI

2.1

Tujuan Tujuan modul II ini, adalah:

Praktikan bisa membuat program sederhana berdasarkan algoritma dengan memakai fungsi

Praktikan bisa membuat program sederhana berdasarkan algoritma dengan menggunakan fungsi rekursi

• • 2.2

Praktikan dapat membiasakan diri untuk membuat program secara terstruktur. Praktikan memahami algoritma fungsi dan rekursi Teori Modularisasi program (yang disebut juga rutin, prosedur atau fungsi)

memberikan dua keuntungan, yaitu: untuk aktivitas yang harus dilakukan lebih dari satu kali, modularisasi menghindari penulisan teks program yang sama secara berulangkali. Disini penggunaan modul program dapat mengurangi panjang program. Keuntungan kedua adalah kemudahan menulis dan menemukan kesalahan program. Kemudahan menulis akan sangat berguna pada masalah besar yang dikerjakan oleh satu tim pemrogram yang beranggotakan beberapa orang. Bahasa C tidak mengenal istilah prosedur seperti bahasa pascal. Dalam pascal sendiri, prosedur didefinisikan sebagai suatu proses yang tidak mengembalikan nilai. Untuk melakukan hal ini di dalam c, maka kita harus membuat suatu fungsi dengan tipe void, yang berarti tidak memiliki nilai balik (return value).

2.2.1 Fungsi Tanpa Nilai Balik Notasi algoritma yang digunakan untuk mendefinisikan struktur prosedur atau fungsi ini adalah: Procedure nama_prosedur {spesifikasi prosedur, berisi penjelasan tentang apa yang dilakukan oleh prosedur ini} k.awal : keadaan sebelum prosedur dilaksanakan}

II-1

II-2

k.akhir : keadaan setelah prosedur dilaksanakan} Deklarasi {Semua nama yang dipakai dalam prosedur dan hanya berlaku local dalam prosedur didefnisikan disini} Deskripsi {badan prosedur, berisi kumpulan instruksi}

Contoh Algoritma 1: Procedure HitungLuasSegitiga {Menghitung luas segitiga dengan rumus Luas = (alas x tinggi)/2} {k.awal : sembarang} {k.akhir : Luas dicetak ke piranti masukan keluaran} Deklarasi Alas : real Tinggi : real Luas : real

{panjang alas segitiga, dalam cm} {tinggi segitiga, dalam cm} {luas segitiga, dalam cm}

Deskripsi Read(Alas, Tinggi) Luas ← (Alas * Tinggi) / 2 Write(Luas) Algoritma luassegitiga {program utama untuk menghitung luas segitiga} Deklarasi Procedure HitungLuasSegitiga {menghitung luas segitiga dengan rumus luas = (alas x tinggi)/2} Deskripsi Write(‘menghitung luas sebuah segitiga’) HitungLuasSegitiga Write(‘selesai’) Program Algoritma 1: //program utama untuk menghitung luas segitiga #include "stdio.h" int Alas; int Tinggi; void HitungLuasSegitiga();

II-3

main(){ printf("Menghitung luas sebuah segitiga\n"); HitungLuasSegitiga(); printf("\nselesai"); } void HitungLuasSegitiga() { float Luas; printf("Alas : ");scanf("%d",&Alas); printf("Tinggi : ");scanf("%d",&Tinggi); luas = (Alas * Tinggi)/2; printf("%4.2f",Luas); }

2.2.1.1 Nama Global dan Lokal Nama-nama (konstanta, peubah, tipe dan lain-lain) yang dideklarasikan di dalam deklarasi prosedur hanya “dikenal” di dalam badan prosedur yang bersangkutan (bersifat lokal). Sedangkan nama-nama yang dideklarasikan di dalam program utama dikatakan bersifat global (nama-nama global dapat digunakan di bagian manapun di dalam program, baik di dalam program utama maupun di dalam prosedur).

2.2.1.2 Parameter Parameter aktual adalah parameter yang disertakan pada waktu pemanggilan, sedangkan parameter formal adalah parameter yang dideklarasikan di dalam bagian header prosedur itu sendiri. Ketika prosedur dipanggil, parameter actual menggantikan parameter formal. Tiap-tiap parameter aktual berpasangan dengan parameter formal yang bersesuaian. Berdasarkan penggunaannya terdapat 3 jenis parameter formal, yaitu : • Parameter masukan (input parameter) : parameter yang nilainya berlaku sebagai masukan untuk prosedur (sering disebut parameter nilai – parameter by value). • Parameter keluaran (output parameter) : parameter yang menampung keluaran yang dihasilkan oleh prosedur.

II-4

Parameter masukan/keluaran (input/output parameter) : parameter yang berfungsi sebagai masukan sekaligus keluaran bagi prosedur tersebut (parameter keluaran dan parameter masukan/keluaran sering dinamakan parameter acuan – parameter by reference).

Contoh algoritma parameter masukan: Procedure Satu(input X, Y : integer) {contoh prosedur dengan parameter formal berjenis parameter masukan k.awal : nilai x dan y sudah terdefinisi k.akhir : nilai x dan y masing-masing dinaikkan satu lalu dicetak ke piranti keluaran} Deklarasi {tidak ada} Deskripsi X ← X +1 Y ← Y -1 Write(X, Y) Algoritma PQR {contoh program utama yang memanggil prosedur satu} Deklarasi A, B : real Procedure Satu(input X, Y : integer) {contoh prosedur dengan parameter formal berjenis parameter masukan} Deskripsi Satu(4,10) {pemanggilan satu yang pertama kali} Read(a,b) Satu(a,b) {pemanggilan satu yang kedua kalinya} Satu(a+5,17) {pemanggilan satu yang ketiga kalinya} Pada program PQR diatas: x dan y adalah parameter formal; 4 dan 10, a dan b, a+5 dan 17 adalah parameter aktual. Contoh algoritma parameter Keluaran: Procedure Tiga(input X : integer, output Y : real) {contoh prosedur dengan parameter formal berjenis parameter keluaran k.awal : nilai x sudah terdefinisi k.akhir : di dalam prosedur, nilai x ditambah satu, lalu hasilnya dikalikan 3, disimpan ke dalam y}

II-5

Deklarasi {tidak ada} Deskripsi X←X+1 Y←X*3 Algoritma PQR Deklarasi A, B : integer Procedure Tiga(input X : integer, output Y : integer) {contoh prosedur dengan parameter formal berjenis parameter keluaran} Deskripsi Tiga(4, B) {pemanggilan tiga yang pertama kali} Write(B) Read (A) Tiga(A, B) {pemanggilan tiga yang kedua kali} Write(B) Tiga(A+5, B) {pemanggilan tiga yang ketiga kali} Write(B) Contoh Algoritma Parameter Masukan/Keluaran: Procedure Empat(input/output X, Y : integer) {contoh prosedur dengan parameter formal parameter masukan/keluaran} {menambahkan nilai x dan y masing-masing dengan 4} {k.awal : X dan Y sudah berisi nilai} {k.akhir : nilai X dan Y bertambah masing-masing 4, lalu dicatat ke piranti keluaran } Deklarasi {tidak ada} Deskripsi X←X+4 Y←Y+4 Write(‘nilai X dan Y di akhir prosedur empat’) Write(‘X : ’,X) Write(‘Y : ‘,Y) Algoritma PQR {program yang memperlihatkan efek penggunakan parameter masukan/ keluaran} Deklarasi A, B : integer

II-6

procedure Empat(input/output X, Y : integer) {menambahkan nilai X dan Y masing-masing dengan 4} Deskripsi A ← 15 B ← 10 write(‘nilai A dan B sebelum pemanggilan’) write(‘A : ’,A) write(‘B : “, B) empat(A, B) write(‘nilai A dan B setelah pemanggilan’) write(‘A : ’,A) write(‘B : “, B) Contoh Algoritma 2: Procedure tukar(input/output X, Y : integer) {mempertukarkan nilai x dan y k.awal : nilai X dan Y sudah terdefinisi k.akhir : X berisi nilai Y yang lama, Y berisi nilai X yang lama} Deklarasi Temp : integer {peubah bantu} Deskripsi Temp ← X {simpan nilai X ke dalam Temp} X←Y {isikan nilai Y ke dalam X} Y ← Temp {isikan nilai Temp ke dalam Y} Algoritma tukar {program utama untuk mempertukarkan nilai A dan B, nilai A dan B dibaca dari piranti masukan} Deklarasi A, B : integer Procedure Tukar(input/output X, Y : integer) {mempertukarkan nilai x dan y} Deskripsi read(A, B) write(A, B) Tukar(A, B) write(A, B)

{baca nilai A dan B terlebih dahulu} {cetak nilai A dan B sebelum pertukaran} {pertukaran nilai A dan B dengan memanggil prosedur Tukar} {cetak nilai A dan B setelah pertukaran}

II-7

Program Algoritma 2: //program tukar #include "stdio.h" void tukar(int *a, int *b); main(){ int A, B; printf("A : ");scanf("%d",&A); printf("\nB : ");scanf("%d",&B); printf("\nA : %d",A); printf("\nB : %d",B); tukar(&A, &B); printf("\nA : %d",A); printf("\nB : %d",B); } void Tukar(int *A, int *B) { int Temp; Temp = *A; *A = *B; *B = Temp; } Contoh Algoritma 3: Procedure HitungRatarata(input N : integer , output U : real) {menghitung nilai rata-rata N buah bilangan bulat yang dibaca dari piranti masukan. Nilai N diasumsikan selalu positif} {k.awal : N sudah berisi banyaknya data (N>0)} {k.akhir : U berisi rata-rata seluruh bilangan } Deklarasi X : integer K : integer Jumlah : integer

{data bilangan bulat yang dibaca dari papan kunci} {pencacah banyak bilangan} {jumlah seluruh bilangan}

Deskripsi Jumlah ← 0 {inisialisasi} For K ← 1 to N do Read(X) Jumlah ← Jumlah + X Endfor U ← Jumlah/N

II-8

Algoritma Rataratabilanganbulat {program utama untuk menghitung nilai rata-rata N buah bilangan bulat yang dibaca dari piranti masukan} Deklarasi N : integer U : real

{banyaknya data bilangan bulat. N positif} {nilai rata-rata seluruh bilangan}

Procedure HitungRatarata(input N : integer , output U : real) {menghitung nilai rata-rata N buah bilangan bulat yang dibaca dari piranti kunci} Deskripsi Read(N) Write(‘menghitung rata-rata N buah bilangan bulat’) HitungRatarata(N, U) Write(U) Program Algoritma 3: //program utama untuk menghitung luas segitiga #include "stdio.h" int N; float U; void HitungRatarata(int N, float *U); main(){ printf("Jumlah data : ");scanf("%d", &N); printf("menghitung rata-rata N buah bilangan bulat\n"); HitungRatarata(N, &U); printf("%f", U); } void HitungRatarata(int N, float *U) { int K, Jumlah, X; Jumlah = 0; for (K=1; K<=N; K++) { printf("data ke-%d : ",K);scanf("%d", &X); Jumlah = Jumlah + X; } *U = Jumlah/N; }

II-9

2.2.2 Fungsi Dengan Nilai Balik
Fungsi adalah modul program yang memberikan/mengembalikan (return) sebuah nilai dari tipe tertentu (tipe dasar atau tipe bentukan). Sebagaimana halnya prosedur, fungsi diakses dengan memanggil namanya. Selain itu, fungsi juga dapat mengandung daftar parameter formal. Parameter pada fungsi selalu merupakan parameter masukan. Hal ini disebabkan oleh kenyataan bahwa parameter pada fungsi merupakan masukan yang digunakan oleh fungsi tersebut untuk menghasilkan nilai. Notasi algoritma untuk fungsi : Function namafungsi(input daftar parameter formal) → tipe hasil {spesifikasi fungsi, menjelaskan apa yang dilakukan dan yang dikembalikan oleh fungsi} Deklarasi {semua nama yang dipakai di dalam algoritma fungsi dideklarasikan disini. Nama yang didefinisikan di dalam deklarasi lokal hanya dikenal dan dipakai di dalam fungsi ini saja} Deskripsi {badan fungsi, berisi instruksi-isntruksi untuk menghasilkan nilai yang akan dikembalikan oleh fungsi} return hasil {pengembalian nilai yang dihasilkan fungsi} Contoh Algoritma 4 : Function F(input X : real) → real {mengembalikan nilai f(x) = 2x2 + 5x – 8, x R) Deklarasi {tidak ada} Deskripsi Return 2*X*X + 5*X – 8 ATAU, Function F(input X : real) → real {mengembalikan nilai f(x) = 2x2 + 5x – 8, x R) Deklarasi Y : real

{penampung hasil fungsi F}

Deskripsi Y ← 2*X*X + 5*X – 8 Return Y Algoritma fungsiF {program utama pemanggilan fungsiF}

II-10

Deklarasi X : integer Function F(input X : real) → real Deskripsi Read(X) Write(‘F(X) = ’, F(X)) Program Algoritma 4 : //program fungsi f(x)=2x2+5x-8 #include "stdio.h" float F(float X); main(){ int X; printf("X : ");scanf("%d",&X); printf("\nF(X) : %f",F(X)); } float F(float X){ float Y; Y = 2*X*X + 5*X - 8; return Y; }

Contoh Algoritma 5 : Function Genap(input N : integer)→boolean {mengembalikan nilai true jika N adalah bilangan genap, false jika sebaliknya} Deklarasi Y : integer Deskripsi Y ← (N mod 2 = 0) Return Y Algoritma GenapGanjil {program utama yang memanggil fungsi genap} Deklarasi Bil : integer Function Genap(input N : integer) → boolean {mengembalikan nilai true jika N adalah bilangan genap, false jika sebaliknya}

II-11

Deskripsi Read(Bil) If Genap(Bil) then Write(Bil, ‘adalah bilangan genap’) Else Write(Bil, ‘adalah bilangan ganjil’) Endif Program Algoritma 5 : //program fungsi f(x)=2x2+5x-8 #include "stdio.h" bool Genap(int Bil); main(){ int Bil; printf("Bil : ");scanf("%d",&Bil); if (Genap(Bil)) printf("\n%d adalah bilangan genap", Bil); else printf("\n%d adalah bilangan ganjil", Bil); } bool Genap(int Bil){ bool Y; Y = (Bil % 2 == 0); return Y; } 2.2.3 Rekursi Suatu obyek disebut sebagai rekursif apabila sebagian berisi atau didefinisikan sebagai dirinya sendiri. Dengan demikian rekursif adalah suatu proses berupa pemanggilan diri berupa statement perulangan. Proses rekursif juga memungkinkan terjadinya komputasi yang tidak berkesudahan sampai memory yang digunakan tidak dapat menampung lagi, sehingga perlu diperhatikan akan adanya kondisi untuk menghentikan proses eksekusi program . Sebagai contoh sederhana mengenai proses rekursif adalah proses menghitung nilai faktorial dari bilangan bulat positif dan mencari deret fibonnaci dari suatu bilangan bulat, permainan menara hanoi dan sebagainya.

II-12

Contoh Algoritma 6: Function Fak(input N : integer) → integer {mengembalikan nilai N!. algoritma rekursif. basis : jika N = 0, maka 0!=1 rekurens : jika N>0, maka N! = N x (N-1)!} Deklarasi {tidak ada} Deskripsi If N = 0 then Return 1 {basis} Else {rekurens} Return N*Fak(N-1) Endif Algoritma faktorial {program utama yang memanggil fungsi faktorial} Deklarasi Bil : integer Function Fak(input Bil : integer) → integer {mengembalikan nilai N!} Deskripsi Read(Bil) Write(Bil, ‘ ! adalah :’,Fak(Bil)) Program Algoritma 6: //program fungsi rekursif faktorial #include "stdio.h" int Fak(int N); main(){ int N; printf("N! : ");scanf("%d",&N); printf("\n%d! adalah %d", N, Fak(N)); } int Fak(int N){ if (N == 0) return 1; else return N*Fak(N-1); }

II-13

2.3

Kasus

2.3.1 Kasus 1 1. Tuliskan prosedur untuk menghitung jumlah N buah bilangan genap pertama (bilangan genap dimulai dari 0). Prosedur menerima (parameter) masukan N dan memberikan (parameter) keluaran jumlah N buah bilangan genap pertama. Dari algoritma tersebut, buatlah program dan cantumkan output/hasilnya. 2. Buatlah algoritma prosedur yang menerima dua buah tanggal (dd-mm-yyy) : tanggal-1 dan tanggal-2 lalu menghitung berapa hari jarak tanggal-1 ke tanggal-2 tersebut. Dari algoritma tersebut, buatlah program dan cantumkan output/hasilnya.

2.3.2 Kasus 2 1. Buatlah sebuah algoritma fungsi yang memberikan durasi antara dua buah jam (dengan format hh:mm:ss) lebih dari 1 jam. Dari algoritma tersebut, buatlah program dan cantumkan output/hasilnya. 2. Misalkan panit(n,k) menyatakan jumlah panitia yang terdiri dari k orang yang dapat dibentuk dari n orang. Sebagai contoh, panit(4,3)=4, karenadiberikan empat orang A, B, C, dan D, maka terdapat empat kemungkinan panitia, yaitu ABC, ABD, ACD dan BCD. Buktikan kesamaan berikut: Panit(n,k) = panit(n-1,k) + panit(n-1,k-1) Buatlah fungsi rekursifnya untuk n, k ≥ 1.

2.4

Tugas – Tugas Pendahuluan Tugas pendahuluan akan dikerjakan selama 30 menit di awal jam

praktikum dengan menggunakan software Self Assessment

II-14

2.5

Latihan Praktikum III dan IV

2.5.1 Latihan Praktikum III (Pertemuan Ketiga) Buatlah program berdasarkan algoritma di bawah ini: Algoritma 1: Procedure TambahSatuDetik(input/output J : Jam) {menaikkan jam j dengan satu detik} {k.awal : j sudah berisi nilai jam (hh:mm:ss)} {k.akhir: j berisi jam yang harus setelah ditambah 1 detik} Deklarasi {tidak ada} Deskripsi If J.SS+1 < 60 then J.SS ← J.SS + 1 else J.SS←0

{tidak ada masalah penambahan 1 detik}

{j.ss + 1 = 60} {detik kembali menjadi nol, menit bertambah 1, tapi periksa dulu apakah menit +1 <60} if J.MM + 1 < 60 then {tidak ada masalah penambahan 1 menit} J.MM ← J.MM + 1 {J.MM + 1 = 60} else J.MM ← 0 {menit menjadi nol, jam berambah 1, tapi periksa dulu apakah jam + 1 <24} if J.HH + 1 < 24 {tidak ada masalah penambahan 1 jam} J.HH ← J.HH + 1 { J.HH + 1 = 24} else J.HH ← 0 endif endif endif Algoritma Jam_Hidup {membuat jam ‘hidup’ yang selalu bertambah 1 detik terus menerus sampai jam 00:00:00. masukan jam dibaca dari piranti masukan. Setiap pertambahan 1 detik, jam yang baru ditampilkan sebagai keluaran} Deklarasi Type Jam : record<HH : integer, (0≤HH≤59) MM : integer, (0≤HH≤59) SS : integer, (0≤HH≤23) > J : Jam Procedure TambahSatuDetik(input/output J : Jam) {menaikkan jam J dengan satu detik}

II-15

Deskripsi Read(J.HH, J.MM, J.SS) Write(J.HH, J.MM, J.SS) Repeat Tambahsatudetik(J) Write(J.HH, J.MM, J.SS) Until (J.HH=0) and (J.MM=0) and (J.SS=0) Algoritma 2: Procedure HitungPBT(input M : integer, input N : integer, output PBT : integer) {menghitung pembagi bersama terbesar dari dua buah bilangan bulat tak negative M dan N} {k.awal : M dan N sudah terdefinisi harganya, M≥N dan M, N ≥0} {k.akhir : PBT berisi pembagi bersama terbesar dari M dan N} Deklarasi R : integer

{sisa pembagian M dengan N}

Deskripsi While N ≠ 0 do R ← M mod N M←N N←R endwhile {N = 0, maka PBT = M} PBT ← M Procedure Tukar(input/output A, B : integer) {mempertukarkan nilai A dan B} {k.awal : nilai A dan B sudah terdefinisi} {k.akhir : A berisi nilai B yang lama, B berisi nilai A yang lama} Deklarasi Temp : integer

{peubah bantu}

Deskripsi Temp ← A {simpan nilai A ke dalam Temp} A←B {isikan nilai B ke dalam A} B ← Temp {isikan nilai Temp ke dalam B} Algoritma Euclidean {program utama untuk menghitung pembagi bersama terbesar dari dua buah bilangan bulat positif m dan n. harga m dan n dibaca dari piranti masukan} Deskripsi M, N : integer PBT : integer

{>0} {pembagi bersama terbesar M dan N}

II-16

Procedure HitungPBT(input M : integer, input N : integer, output PBT : integer) {menghitung pembagi bersama terbesar dari dua buah bilangan bulat tak negative M dan N} Procedure Tukar(input/output A, B : integer) {mempertukarkan nilai A dan B} Deskripsi Read(M, N) If M<N then Tukar(M, N) endif HitungPBT(M, N, PBT) write(PBT) Algoritma 3: Procedure HitungSelisihJam(input J1, J2 : Jam, output J3 : Jam) {menghitung selisih dua buah jam, J3 = J2 – J1} {k.awal: J1 dan J2 sudah berisi nilai jam (HH:MM:SS) dan J2.HH > J1.HH} {k.akhir: J3 berisi selisih jam J2 dengan J1} Deklarasi {tidak ada} Deskripsi {kurangi mulai dari detik dulu} if J2.SS ≥ J1.SS then {tidak ada masalah pengurangan detik} J3.SS ←J2.SS – J1.SS {J2.SS < J1.SS, lakukan peminjaman 1 menit = 60 detik dari else J2.MM} J3.SS ← (J2.SS + 60) – J1.SS J2.MM ← J2.MM – 1 {J2.MM berkurang 1 karena dipinjam 1 menit} endif {kurangi menit} if J2.MM ≥ J1.MM then {tidak ada masalah pengurangan menit} J3.MM ← j2.MM – J1.MM else {J2.MM < J1.MM, lakukan peminjaman 1 jam = 60 menit dari J2.HH} J3.MM ← (J2.MM + 60) – J1.MM J2.HH ← J2.HH – 1 {J2.HH berkurang 1 karena dipinjam 1 menit} endif {kurangi jam} J3.HH ← J2.HH – J1.HH

{pertukarkan M dan N}

II-17

Algoritma HitungSelisihDuaBuahJam {menghitung selisih dua buah jam. Data jam dibaca dari piranti masukan} Deklarasi Type Jam : record<HH : integer, (0..59) MM : integer, (0..59) SS : integer, (0..23) > J1, J2, J3 : Jam Procedure HitungSelisihJam(input J1,J2 : Jam, output J3 : Jam) {menghitung selisih dua buah jam, J3 = J2 – J1} Deskripsi Read(J1.HH, J1.MM, J1.SS) Read(J2.HH, J2.MM, J2.SS) HitungSelisihJam(J1, J2, J3) Write(J3.HH, J3.MM, J3.SS) Algoritma 4: Procedure Masukan(input/output Panjang, Lebar : real) {memasukan nilai panjang dan lebar} Deklarasi {tidak ada} Deskripsi Read(Panjang, Lebar) Procedure HitungLuassegiempat(input Panjang, Lebar : real) {menghitung luas segiempat persegipanjang. Luas segiempat dicetak sebagai keluaran} {k.awal: panjang dan lebar sudah terdefinisi nilainya} {k.akhir: luas segiempat tercetak di piranti keluaran} Deklarasi Luas : real Deskripsi: Masukan(Panjang, Lebar) Luas ← Panjang * Lebar Write(Luas) Procedure HitungKelilingsegiempat(input Panjang, Lebar : real) {menghitung keliling segiempat. keliling segiempat dicetak sebagai keluaran} {k.awal: panjang dan lebar sudah terdefinisi nilainya} {k.akhir: keliling segiempat tercetak di piranti keluaran}

II-18

Deklarasi Keliling : real Deskripsi: Masukan(Panjang, Lebar) Keliling ← 2*Panjang + 2*Lebar Write(Keliling) Procedure HitungPanjangdiagonal(input Panjang, Lebar : real) {menghitung panjang diagonal. keliling segiempat dicetak sebagai keluaran} {k.awal: panjang dan lebar sudah terdefinisi nilainya} {k.akhir: panjang diagonal segiempat tercetak di piranti keluaran} Deklarasi Diagonal : real Deskripsi: Masukan(Panjang, Lebar) Diagonal ← SQRT(Panjang*Panjang + Lebar*Lebar) Write(Diagonal) Algoritma Segiempat {program untuk menampilkan menu perhitungan segiempat (luas, keliling dan panjang)} Deklarasi Panjang, Lebar :real Nomormenu : integer Procedure Masukan(input/output Panjang, Lebar : real) {memasukan nilai panjang dan lebar} Procedure HitungLuassegiempat(input Panjang, Lebar : real) {menghitung luas segiempat persegi panjang. Luas segiempat dicetak sebagai keluaran} Procedure HitungKelilingsegiempat(input Panjang, Lebar : real) {menghitung keliling segiempat. keliling segiempat dicetak sebagai keluaran} Procedure HitungPanjangdiagonal(input Panjang, Lebar : real) {menghitung panjang diagonal segiempat. Panjang diagonal segiempat dicetak sebagai keluaran} Deskripsi Read(Panjang, Lebar) Repeat {cetak menu ke layar} Write(’ MENU SEGIEMPAT Write(’ 1. hitung luas

’) ’)

II-19

Write(’ 2. hitung keliling ’) Write(’ 3. hitung panjang diagonal ’) 4. Keluar program ’) Write(’ Write(’ Masukan nomor pilihan menu [1/2/3/4]: ’) Read(Nomormenu) Case Nomormenu 1 : HitungLuassegiempat(Panjang, Lebar) 2 : HitungKelilingsegiempat(Panjang, Lebar) 3 : HitungPanjangdiagonal(Panjang, Lebar) 4 : write(’keluar program...’) endcase until Nomormenu = 4

2.5.2 Latihan Praktikum IV (Pertemuan Keempat) Buatlah program berdasarkan algoritma di bawah ini: Algoritma 1 Function Valid(input P : string) → boolean {bernilai true jika password P benar, false jika tidak} Deklarasi Const Password = ’abc123’ Deskripsi return (P = Password) Algoritma Pemeriksaan_password {program pemeriksaan kebenaran password, password dibaca dari papan kunci. Bila password salah, pemasukan password dapat diulang maksimal 3 kali} Deklarasi Sandilewat : string Sah : boolean K : integer

{kata sandi yang dibaca dari piranti masukan} {true jika password benar, false jika salah} {pencatat jumlah pembacaan sandilewat}

Function Valid(input P : string) → boolean {bernilai true jika password P benar, false jika tidak} Deskripsi K←1 Sah ← false repeat read(Sandilewat) if Valid(Sandilewat) then Sah←true

II-20

else {Sandilewat ≠ Password} K←K + 1 endif until (Sah) or (K>3) if not Sah then write(’anda tidak punya hak mengakses sistem’) endif Algoritma 2 Function Prima(input M : integer)→boolean {mengembalikan true jika M bilangan prima, false jika M bukan bilangan prima} Deklarasi K : integer Tes : boolean Deskripsi K←2 Tes←true {sesuaikan M pada awalnya bilangan prima} while (K≤M-1) and (not Tes) do if M mod K = 0 then {M habis dibagi dengan bilangan K ≤ M-1} Hasil ← false {kesimpulannya : M bukan bilangan prima} else K ← K+1 {coba bagi dengan K berikutnya} endif endwhile return Tes Algoritma Hitungprima {program utama menghitung bilangan prima} Deklarasi M : integer Function Prima(input M : integer)→boolean {mengembalikan true jika M bilangan prima, false jika M bukan bilangan prima} Deskripsi Read(M) If Prima(M) then Write(M, ‘bilangan prima) Else Write(M,’bukan bilangan prima’)

II-21

Algoritma 3: Function Balikangka(input N : integer) → integer {Membalikan urutan bilangan bulat N (misal: 4567 menjadi 7654) k.awal : nilai N sudah terdefinisi k.akhir : urutan angka bilangan N dicetak terbalik basis : jika N < 10, cetak(n) rekurens : jika N > 10 maks cetak (N mod 10), balikangka(N div 10)} Deklarasi {tidak ada} Deskripsi If N < 10 then Write(N) {basis} {rekurens} Else Write(N mod 10) Balikangka(N div 10) Endif Algoritma faktorial {program utama yang memanggil fungsi balikangka} Deklarasi N : integer Function Balikangka(input N : integer) → integer {Membalikan urutan bilangan bulat N (misal: 4567 menjadi 7654)} Deskripsi Read(N) Write(N, ‘ dibalik menjadi :’,Balikangka(N)) Algoritma 4: Function Pangkat(input A, N : integer) → integer {mengembalikan nilai an, n>0 basis : an = 1 jika n = 0 rekurens : an = a x an-1} Deklarasi {tidak ada} Deskripsi If N = 0 then return 1 Else return A*Pangkat(A, N-1)

II-22

endif Algoritma Faktorial {program utama yang memanggil fungsi faktorial} Deklarasi Bil : integer Function Pangkat(input A, N : integer) → integer {mengembalikan nilai an, n>0} Deskripsi Read(A, N) Write(A, ‘ pangkat ‘, N, ‘ adalah :’,Pangkat(A, N)) Algoritma 5 Formula Deret exp :
ex = x 0 x1 x 2 x 3 xn + + + + ... + 0! 1! 2! 3! n!

Function exp(input x : real) →real {mengembalikan nilai exp(x)} Deklarasi Const n : integer = 10 S: real X : integer Function Fak(input N : integer) →integer {mengembalikan harga N!, untuk N≥0) function Pangkat(input X : real, input M:integer) →real {mengembalikan harga perpangkatan xn} Deskripsi S←0 for X→0 to N do S→S + Pangkat(X, K)/Fak(K) endfor return S Algoritma exponential {program utama yang memanggil fungsi exp} Deklarasi X : integer

II-23

Function Fak(input N : integer) →integer {mengembalikan harga N!, untuk N≥0) function Pangkat(input X : real, input M : integer) →real {mengembalikan harga perpangkatan xn} Deskripsi Read(X) Write(‘ exponential’,X,’ adalah ‘,Exp(X))

You're Reading a Free Preview

Mengunduh
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->