modul c++ fungsi dan rekursi

Upload: pharlevy

Post on 15-Oct-2015

360 views

Category:

Documents


15 download

DESCRIPTION

ini adalah modul C++ sedot aja gan bila bermanfaat oke

TRANSCRIPT

  • II-1

    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

    Praktikan dapat membiasakan diri untuk membuat program secara terstruktur.

    Praktikan memahami algoritma fungsi dan rekursi

    2.2 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-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 {panjang alas segitiga, dalam cm} Tinggi : real {tinggi segitiga, dalam cm} Luas : real {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) {baca nilai A dan B terlebih dahulu} write(A, B) {cetak nilai A dan B sebelum pertukaran} Tukar(A, B) {pertukaran nilai A dan B dengan memanggil prosedur Tukar} write(A, B) {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 {data bilangan bulat yang dibaca dari papan kunci} K : integer {pencacah banyak bilangan} Jumlah : integer {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 {banyaknya data bilangan bulat. N positif} U : real {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

  • 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 Return N*Fak(N-1) {rekurens} 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 {tidak ada masalah penambahan 1 detik} J.SS J.SS + 1 else {j.ss + 1 = 60} J.SS0 {detik kembali menjadi nol, menit bertambah 1, tapi

    periksa dulu apakah menit +1

  • 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, MN 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 {>0} PBT : integer {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 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 else {J2.SS < J1.SS, lakukan peminjaman 1 menit = 60 detik dari

    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

  • II-17

    Algoritma HitungSelisihDuaBuahJam {menghitung selisih dua buah jam. Data jam dibaca dari piranti masukan}

    Deklarasi Type Jam : record 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 ) Write( 4. Keluar program ) 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 {kata sandi yang dibaca dari piranti masukan} Sah : boolean {true jika password benar, false jika salah} K : integer {pencatat jumlah pembacaan sandilewat}

    Function Valid(input P : string) boolean {bernilai true jika password P benar, false jika tidak}

    Deskripsi K1 Sah false repeat read(Sandilewat) if Valid(Sandilewat) then Sahtrue

  • II-20

    else {Sandilewat Password} KK + 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 K2 Testrue {sesuaikan M pada awalnya bilangan prima} while (KM-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} Else {rekurens} 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 :

    !...

    !3!2!1!0

    3210

    n

    xxxxxe

    nx +++++=

    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 N0)

    function Pangkat(input X : real, input M:integer) real {mengembalikan harga perpangkatan xn}

    Deskripsi S0 for X0 to N do SS + 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 N0)

    function Pangkat(input X : real, input M : integer) real {mengembalikan harga perpangkatan xn}

    Deskripsi Read(X) Write( exponential,X, adalah ,Exp(X))