SlideShare a Scribd company logo
BAB 5
SUB PROGRAM
Pada dasarnya, manusia adalah makhluk yang lemah dan berkemampuan terbatas. Untuk mengerjakan sesuatu hal yang besar
dan kompleks, manusia membagi pekerjaan menjadi bagian yang lebih kecil yang memungkinkan untuk di selesaikan. Bagian
yan lebih kecil dan telah diselesaikan itu disebut dengan modul. Dalam algoritma pun juga terdapat paradigma untuk membagi
pekerjaan besar menjadi pekerjaan yang lebih kecil. Prinsip ini di kenal dengan divide and conquer (bagi lalu selesaikan).
A. Prosedur (Procedure)
Prosedur di kategorikan sebagai sub (subprogram) yang menghasilkan output lebih dari satu atau hanya sekedar
melakukan tindakan tertentu.
Contoh 5.1
Buatlah prosedure untuk menukar nilai dari dua variable.
Analisis :
Untuk memindahkan posisi huruf A pada posisi huruf B dan sebaliknya, maka kita perlu tempat sementara (temp) sebelum huruf
B. Karena kita tidak bisa begitu saja menaruh huruf ke posisi B, yang akan berakibat huruf B akan “hilang”. Langkah –
langkahnya adalah sebagai berikut :
TEMP
 

No. Langkah Algoritma
1. Temp di isi A temp  A
2. (A kosong) A di isi B A  B
3. (B kosong) B di isi temp B  temp
Algoritma 5.1
prosedur tukar (input/output a : integer; b : integer)
{menukar isi dua nilai a menjadi nilai b, demikian pula sebaliknya}
Deklarasi
temp : integer
Deskripsi
temp  a
a  b
b  temp
BA
Translasi 5.1
Bahasa Pascal Bahasa C
program Tukar_Nilai;
uses wincrt;
var a, b : integer;
procedure tukar (var a, b : integer);
var temp : integer;
begin
temp := a;
a := b;
b := temp;
end;
begin
a := 100; b:= 50;
writeln (‘Sebelum Tukar’);
writeln (‘Isi Nilai =’,a);
writeln (‘Isi Nilai =’,b);
tukar (a,b);
writeln (‘Sesudah Tukar’);
writeln (‘Isi Nilai1 = ‘,a);
writeln (‘Isi Nilai2 = ‘,b);
end.
#include <stdio.h>
void tukar (int *a, int *b)
{ int temp;
temp = *a;
*a = *b;
*b = temp;
}
Main () {
int a = 100, b = 50;
printf(“Sebelum Tukarn”);
printf(“isi Nilai1 = %dn”,a);
printf(“isi Nilai2 = %n”,b);
tukar (&a,&b);
printf(“Sesudah Tukarn”);
printf(“Isi Nilai1 =%dn”,a);
printf(“isi Nilai2 =%dn”,b);
return 0;
}
B. Fungsi (Function)
Sebagaimana pengertian fungsi dalam matematika, fungsi dalam algoritma adalah subprogram yang menghasilkan satu
nilai. Perbedaan penulisan fungsi dalam bahaasa Pascal dan Bahasa C adalah sebagai berikut :
Karakteristik Bahasa Pascal Bahasa C
mulai dengan … keyword function tipe hasil
nilai akhir dan fungsi disimpan pada nama fungsi return(hasil akhir)
prototipe function nama(deklarasi variable
tipe_hasil;
tipe_hasil nama
(deklarasi variable)
contoh function rata(x : larik; n : integer) : real float rata(larik x, int n)
Fungsi dipanggil dengan dua cara :
1. Langsung digunakan, misalnya pada saat mencetak hasil
2. di-assign ke suatu vaiabel
Bahasa Pascal Bahasa C
writeln(‘Hasil hitung rata-rata =’,rata(A,n)); printf(“Hasil hitung rata-rata = %fn”
(A,n));
hitung_rata := rata(A,n); Hitung_rata = rata (A,n);
C. Parameter Dalam Subprogram
Dalam subprogram dapat dideklarasikan variable sendiri, yang nantinya akan digunakan Variabel yang dideklarasikan
dalam subprogram bersifat lokal, artinya hanya dikenal dalam procedure itu sendiri, dan tidak di kenal diluar procedure. Ada 2
jenis parameter yang dideklarasikan dalam subprogram, yaitu :
1. parameter nilai (value parameter) : variable yang dikirim tidak mengalami perubahan
sekeluar dari subprogram)
2. parameter variable (variable parameter) : variable yang dikirim tidak mengalami
perubahan sekeluar dari subprogram)
Jenis Parameter Bahasa Pascal Bahasa C
parameter nilai ----- menggunakan const
parameter variabel menggunakan var melalui pointer
Contoh 5.2
Buatlah fungsi yang menentukan nilai terbesar dari 2 bilangan bulat.
Algoritma 5.2
Fungsi maksimum2 (input a,b : integer) : integer
Deskripsi
if (a>b) then maksimum2  a
else maksimum2  b
Translasi 5.2
Bahasa Pascal Bahasa C
program nilai_maksimum_2_bilangan;
user wincrt;
var x,y : integer;
function maksimum2(a,b : integer) : integer;
begin
If (a>b) then maksimum2 : = a
Else maksimum2 := b;
end;
begin
writeln(‘Masukkan dua integer :’);
write(‘Bilangan pertama : ‘); readln(x);
write(‘Bilangan kedua : ‘); readln(y);
write(‘Nilai terbesar:’,maksimum2(x,y));
end.
#include <stdio.h>
int maksimum2(int a, int b)
{ if (a>b) return(a);
else return(b);
}
Main () {
Int x, y;
Printf(“Massukkan dua integer : n”);
Scanf(“Bilangan pertama : “);
Scanf(“%d”,&x);
Printf(“Bilangan kedua : “);
scand(“%d”,&y)
Printf(“Bilangan terbesar
:d“,maksimum2(x,y));
return 0;
}
Contoh 5.3
Dengan menggunakan fungsi In dan exp, buatlah fungsi untuk menghasikan nilai 𝑥 𝑦
.
Analisis :
Dengan menggunakan sifat logaritma :
In(𝑥 𝑦
) = y*In(𝑥)
exp(In(𝑥 𝑦
)) = exp(y*In(𝑥))
sehingga :
𝑥 𝑦
= exp(y*In(𝑥))
Algoritma 5.3
Fungsi Pangkat(input x,y : integer)
{Menghitung nilai dari x pangkat y}
Deskripsi
pangkat  exp(y*In(x))
Translasi 5.3
Bahasa Pascal Bahasa C
Program pangkat_fungsi;
uses wincrt;
var hasil : real
a, b : integer
#include <stdio.h>
#include <math.h>
float pangkat(int x, int y)
{ return(exp(y*log(x))) }
function pangkat(x, y : integer) : real;
begin
pangkat := exp(y*ln(x));
end;
begin
writeln (‘Menghitung hasil
perpangkatan ‘);
write(‘Tulis sebuah bilangan : ‘); readln
(a);
write(‘Mau dipangkat berapa : ‘); readln
(b);
hasil := pangkat(a, b);
writeln (a,’ pangkat ‘,b,’ = ‘,hasil:6:0);
end
main() }
float hasil;
int a, b;
printf(“Menghitung hasil
perpangkatann”);
printf(“Tulis sebuah bilangan : “);
scanf(“%d”,&a)
printf(“Mau dipangkat berapa : “);
scanf(“%d”,&b)
hasil = pangkat(a, b);
printf(“%d pangkat %d =
%6.0fn”,a,b,hasil);
return 0;
}
Contoh 5.4
Buatlah fungsi perkalian 2 bilangan bulat dengan menggunakan operator penjumlahan.
Analisis :
a × b = a + a + a + … + a (sebanyak b kali)
Algoritma 5.4
fungsi kali(input a, b : integer) : integer
{ Menghitung hasil perkalian a dan b menggunakan Operator Penjumlahan }
Deklarasi
hasil, i : integer
Deskripsi
hasil  0
for i  1 to b do
hasil  hasil + a
kali  hasil
Translasi 5.4
Bahasa Pascal Bahasa C
program
Perkalian_dengan_cara_menjumlah;
{menghitung nilai dari m × n dengan cara
menjumlah : m+m+m+ … +m sebanyak n
kali}
uses wincrt;
var a, b : integer;
function kali(m, n : integer) : integer;
var i, hasil : integer;
begin
#include
int kali(int m, int n)
{ int i, hasil =0;
for (i=1;i<=n; i++)
hasil = hasil + m;
return(hasil);
}
hasil :=0;
for i:=1 to n do
hasil := hasil + m;
kali := hasil;
end
begin
write (‘Masukkan bilangan :’); readln
(a);
write (‘Akan dikali dengan ;’); readln
(b);
writeln (‘Nilai ‘,a,’ x ‘,b,’ = ‘,kali(a,b));
end
main() }
int a, b;
printf(“Masukkan bilangan : “);
scanf(“%d”,&a);
printf(“Akan dikali dengan : “);
scanf(“%d”,&b);
printf(“Nilai %d x %d =
%d”,a,b,kali(a,b));
return 0;
}
C. Fungsi Rekursif
Rekursif berasal dari bahasa Latin recur (re = kembali, cure : eksekusi). Fungsi rekursif adalah fungsi yang melakukan
proses perulangan dengan cara memanggil dirinya sendiri. Ini berbeda dengan versi iterative yang menggunakan perulangan for,
while maupun repeat until. Fungsi rekursif dapat dipandang sebagai sebuah “operator”. Misalkan kita lihat contoh 4.4 dimana
secara iteratif n factorial didefenisikan sebagai :
n! = 1 × 2 × 3 × … × n = ∏ 𝑖
𝑝
𝑖=1
n factorial didefinidikan secara rekursif sebagai berikut :
n! = 1 , untuk n = 0 atau n = 1
= n*(n-1)! , n > 2
Dapat dilihat ternyata pada sisi kanan terdapat operator yang sama dengan sisi kiri. Dengan demikian nilai dan factorial
baru bisa (n-1) factorial telah diperoleh. Tentu saja n factorial “lebih kompleks” disbanding dengan (n-1) factorial. Pencarian ini
berakhir bila sudah sampai pada nilai konstan, yakni telah dicapai harga n=0 atau n=1 yaitu 0!=1 atau 1!=1.
Untuk itu dapat diambil kesimpulan bahwa untuk fungsi rekursif ada 2 syarat, yaitu :
1. Kasus penyetop. Dalam kasus ini terdapat nilai konstan.
2. Kasus pemanggilan rekursif. Dalam kasus ini terdapat pemanggilan fungsi itu sendiri,
tetapi harus mengarah kepada kasus penyetop.
Contoh 5.5
buatlah fungsi factorial secara rekursif untuk mencari n!
Algoritma 5.5
Fungsi factorial(input n : integer) : longint
Deskripsi
if (n=0) or (n=1) then factorial  1
else factorial  n * faktorial(n-1)
Translasi 5.5
Bahasa Pascal Bahasa C
program Faktorial_Fungsi_Rekursif;
uses wincrt;
var bil : integer
function factorial(N : integer):logint;
begin
if (N = 0) or (N = 1) then factorial := 1
else factorial := N * factorial(N-1);
end;
begin
write (‘ Masukkan integer n : ‘);
readln(bil);
writeln (bil.’!= ‘,kaktorial(bil)));
end.
#include <stdio.h>
long faktorial(int n)
{ if ((n==0 || (n==1)) return(1);
else return (n*faktorial(n-1));
}
main() {
int n;
long hasil;
printf(“Masukkan integer n : “);
scanf(“%d”,&n);
hasil = faktorial
printf(“Nilai %d!=%ld”, n,hasil);
return 0;
}
Contoh 5.6
Diberikan deret Fibonacci sebagai berikut :
1, 1, 2, 3, 5, 8, …
Buatlah fungsi yang mnghitung suku ke-n dari deret Fibonacci dengan menggunakan cara rekursif.
Analisis :
Suku ke-n dari deret Fibonacci diperoleh dengan rumus :
fibonacci(n) = fibonacci(n-1) + fibonacci(n-2)
dengan nilai awal untuk n=1 dan n=2 berharga 1.
Algoritma 5.6
Fungsi Fibonacci (input n : integer) : integer
Deskripsi
if (n = 1) or (n = 2) then fibonacci  1
else Fibonacci  fibonacci(n-1) + Fibonacci(n-2)
endif
Translasi 5.6
Bahasa Pascal Bahasa C
Program Deret_Fibonacci;
uses wincrt;
var I, n : integer;
function fibonacci(n : integer) : integer;
begin
if (n = 1) or (n = 2) then fibonacci :=1
else
fibonacci := Fibonacci(n-1) +
fibonacci(n-2);
end;
begin
write (‘Sampai suku ke :’);readln (n);
for I := 1 to n do write (fibonacci(i),’,’);
end
#include <stdio.h>
Int fibonacci (int n)
{ if ((n == 1) ||( n == 2)) return(1);
else return(fibonacci(n-1) + fibonacci(n-
2));
}
Main () {
Int I, n;
printf(“Sampai suku ke
:”);scanf(“%d”,&n);
for (I = 1 ; I <= n; 1++)
printf (“%d, “,Fibonacci(i)));
return
}
D. Iteratif Versus Rekursif
Dengan pengalaman memprogram, seorang programmer akan tahu, kapan mneggunakan perulangan iterative dan kapan
menggunakan perulangan rekursif. Beberapa kasus berikut akan memberikan wawasan memprogram dengan kedua versi, yaitu
versi interatif dan rekursif.
Contoh 5.7
Cetaklah satu kalimat dengan cara iterative maupun cara rekursif.
Translasi 5.7.a. Versi Iteratif
Bahsa Pascal Bahasa C
Program balik_kalimat_iteratif;
uses wincrt;
var kata : string;
procedure balik(s : string);
var i : integer;
begin
for i:=length(s) downto 1 do write(s[i])
end;
begin
kata := ‘algoritma’;
balik(kata)
end.
#include <stdio.h>
#include <string.h>
void balik(char *s)
{ int I;
for (i=strlen(s)-1 ; i>=0; i--)
putchar(s[i]);
}
main() {
char *kata = “Algoritma”;
balik(kata);
return 0;
}
Translasai 5.7.b. Versi Rekursif
Bahasa Pascal Bahasa C
program balik_kalimat_rekursif;
uses wincrt;
var kata : string;
procedure balik(s : string; n : integer);
begin
if (n<>0) then begin
write(s[n]);
balik(s, n-1);
end;
end;
begin
kata := ‘Algoritma’;
balik(kata, length(kata));
end.
#include <stdio.h>
#include <string.h>
void balik(char *s)
{
if (*s != ‘0’) {
balik(&s[1]);
putchar(s[0]);
}
}
main () {
char *kata = “Algoritma”;
balik(kata);
return 0;
}
Contoh 5.8
Buatlah algoritma iterative dan rekursif dan rekursif untuk menghitung gcd dari dua bilangan bulat positif.
Analisis :
Jika n ≠ 0 dan m integer non negatif, kita dapat menulis m = q.n + r untuk suatu integer non negatif q dan r dengan 0 ≤ r < n.
Contoh :
Jika n = 3, m = 16 maka 16 = 5(3) + 1, yaitu q = 5 dan r = 1.
Jika n = 10, m = 3 maka 3 = 0(10) + 3, yaitu q = 0 dan r = 3.
Untuk mencari nilai gcd dari dua integer. Kita bisa menggunakan cara menulis di atas. Misalkan kita mau cari gcd(190,34).
34 |190  190 = 5(34) + 20, r= 20
20 |34  34 = 1(20) + 14, r = 14
14 |20  20 = 1(14) + 6, r = 6
6 | 14  14 = 2(6) + 2, r = 2
Harga r ≠ 0 terakhir dicapai adalah r = 2. Inilah hasil dari gcd(190,34). Versi rekursif, gcd didefinisikan sebagai berikut :
gcd(c,d) = c, jika d = 0
= gcd(c-d, d), jika d > 0 dan c > d.
Juga berlaku hokum komunatif, gcd(c,d) = gcd(d,c).
Algoritma 5.8
Fungsi gcd(c,d : integer) : integer
Versi iteratif Versi rekursif
Deskripsi
while (d > 0) do
r  c mod d
c  d { menyimpan harga r terakhir
}
d  r { harga r terakhir untuk
menghentikan perulangan }
endwhile
gcd  c
Deskripsi
if (d=0) then gcd  c
else if (c<d) then gcd  gcd(d,c)
else gcd  gcd(c-d, d)
Translasi 5.8.a Versi Iteratif
Bahasa Pascal Bahasa C
Program mencari_GCD;
uses wincrt;
var a, b, hitung : integer;
function gcd(c, d : integer) : integer;
var r : integer;
begin
while (d > 0) do begin
r := c mod d;
c := d;
d := r;
end;
gcd := c;
end;
begin { program utama }
write(‘Masukkan bilangan pertama : ‘);
readln(a);
write(‘Masukkan bilangan ke dua : ‘);
readln(b);
hitung(‘GCD dari ‘,a,’ dan ‘,b,’ =
‘,hitung);
end.
#include <stdio.h>
int gcd(int c, int d)
{ int r;
while (d > 0) {
r = c % d;
c = d;
d = r;
}
return (c);
}
main () }
int x, y, hitung;
printf(“Masukkan bilangan pertama :”);
scanf(“%d”,&x);
printf(“Masukkan bilangan kedua : “);
hitung(“%d”,&y);
printf(“gcd(%d,%d) = %dn”, x, y,
hitung);
return 0;
}
Translasi 5.8.b. Versi Rekursif
Bahasa Pascal Bahasa C
Program mencari_GCD;
uses wincrt;
var a, b, hitung : integer;
function gcd(c, d : integer) : integer;
begin
if (d=0) then gcd := c
else if (c<d) then gcd := gcd(d,c)
else gcd := gcd(c-d, d);
end;
begin { program utama }
write(‘Masukkan bilangan pertama : ‘);
readln(a);
write(‘Masukkan bilangan kedua : ‘);
readln(b);
hitung := gcd(a,b);
write(‘GCD dari ‘,a,’ dan ‘,b,’ =
‘,hitung);
end.
#include <stdio.h>
int gcd(int c, int d)
{
if (d==0) return(c);
if (c<d) return(gcd(d,c));
return(gcd(c-d, d));
}
main () {
int x, y, hitung;
printf(“Masukkan bilangan pertama : “);
scanf(“%d”,&x);
printf(“Masukkan bilangan kedua : “);
scanf(“%d”,&y);
hitung = gcd(x,y);
printf(“gcd(%d,%d) = %dn”, x, y,
hitung);
return 0;
}

More Related Content

What's hot

Ayo membuat program pascal
Ayo membuat program pascalAyo membuat program pascal
Ayo membuat program pascalHary Purwoko
 
Soal dan bahasan Pascal
Soal dan bahasan PascalSoal dan bahasan Pascal
Soal dan bahasan Pascal
bradware computer
 
Tipe data
Tipe dataTipe data
Tipe data
kafin0607
 
Pengenalan c++ bagian 3
Pengenalan c++ bagian 3Pengenalan c++ bagian 3
Pengenalan c++ bagian 3
Fazar Ikhwan Guntara
 
Function
FunctionFunction
Functionwindi1
 
Function
FunctionFunction
Topik 5 Ekspresi dan Iinput Output
Topik 5 Ekspresi dan Iinput OutputTopik 5 Ekspresi dan Iinput Output
Topik 5 Ekspresi dan Iinput Output
I Komang Agustino
 
Pascal 4-aturan-penulisan-pascal
Pascal 4-aturan-penulisan-pascalPascal 4-aturan-penulisan-pascal
Pascal 4-aturan-penulisan-pascal
adealfarisi
 
Dasar c++ input, proses, output
Dasar c++ input, proses, output Dasar c++ input, proses, output
Dasar c++ input, proses, output
Fazar Ikhwan Guntara
 
Kumpulan Kode C & C++
Kumpulan Kode C & C++Kumpulan Kode C & C++
Kumpulan Kode C & C++
Fajar Sany
 
Function
FunctionFunction
Function
Achmad Solichin
 
modul algoritma Bab 6
modul algoritma Bab  6modul algoritma Bab  6
modul algoritma Bab 6
Eko Widyanto Napitupulu
 
Dasar Pemrograman materi kuliah
Dasar Pemrograman materi kuliahDasar Pemrograman materi kuliah
Dasar Pemrograman materi kuliah
Braga Rezpect
 
Pertemuan 4
Pertemuan 4Pertemuan 4
Pertemuan 4
Syaiful Ahdan
 
Lapopran praktikum struktur data pertemuan 1 Tipe Data
Lapopran praktikum struktur data pertemuan 1  Tipe DataLapopran praktikum struktur data pertemuan 1  Tipe Data
Lapopran praktikum struktur data pertemuan 1 Tipe Data
Ady Achirul
 
Pertemuan 3
Pertemuan 3Pertemuan 3
Pertemuan 3
Syaiful Ahdan
 
Pengenalan c++ bagian 1
Pengenalan c++ bagian 1Pengenalan c++ bagian 1
Pengenalan c++ bagian 1
Fazar Ikhwan Guntara
 
6 lanjutan perulangan
6 lanjutan perulangan6 lanjutan perulangan
6 lanjutan perulangan
Simon Patabang
 

What's hot (19)

Ayo membuat program pascal
Ayo membuat program pascalAyo membuat program pascal
Ayo membuat program pascal
 
Soal dan bahasan Pascal
Soal dan bahasan PascalSoal dan bahasan Pascal
Soal dan bahasan Pascal
 
Tipe data
Tipe dataTipe data
Tipe data
 
Pengenalan c++ bagian 3
Pengenalan c++ bagian 3Pengenalan c++ bagian 3
Pengenalan c++ bagian 3
 
Function
FunctionFunction
Function
 
Function
FunctionFunction
Function
 
Pertemuan II Function
Pertemuan II FunctionPertemuan II Function
Pertemuan II Function
 
Topik 5 Ekspresi dan Iinput Output
Topik 5 Ekspresi dan Iinput OutputTopik 5 Ekspresi dan Iinput Output
Topik 5 Ekspresi dan Iinput Output
 
Pascal 4-aturan-penulisan-pascal
Pascal 4-aturan-penulisan-pascalPascal 4-aturan-penulisan-pascal
Pascal 4-aturan-penulisan-pascal
 
Dasar c++ input, proses, output
Dasar c++ input, proses, output Dasar c++ input, proses, output
Dasar c++ input, proses, output
 
Kumpulan Kode C & C++
Kumpulan Kode C & C++Kumpulan Kode C & C++
Kumpulan Kode C & C++
 
Function
FunctionFunction
Function
 
modul algoritma Bab 6
modul algoritma Bab  6modul algoritma Bab  6
modul algoritma Bab 6
 
Dasar Pemrograman materi kuliah
Dasar Pemrograman materi kuliahDasar Pemrograman materi kuliah
Dasar Pemrograman materi kuliah
 
Pertemuan 4
Pertemuan 4Pertemuan 4
Pertemuan 4
 
Lapopran praktikum struktur data pertemuan 1 Tipe Data
Lapopran praktikum struktur data pertemuan 1  Tipe DataLapopran praktikum struktur data pertemuan 1  Tipe Data
Lapopran praktikum struktur data pertemuan 1 Tipe Data
 
Pertemuan 3
Pertemuan 3Pertemuan 3
Pertemuan 3
 
Pengenalan c++ bagian 1
Pengenalan c++ bagian 1Pengenalan c++ bagian 1
Pengenalan c++ bagian 1
 
6 lanjutan perulangan
6 lanjutan perulangan6 lanjutan perulangan
6 lanjutan perulangan
 

Viewers also liked

Praktikum iii (ppt)
Praktikum iii (ppt)Praktikum iii (ppt)
Praktikum iii (ppt)
Rachmat Darmawan
 
Jon lockridge ppp_final
Jon lockridge ppp_finalJon lockridge ppp_final
Jon lockridge ppp_final
Jon Lockridge
 
Actividades en torno a una audición
Actividades en torno a una audiciónActividades en torno a una audición
Actividades en torno a una audición
Nerea Montalvo
 
Prezentacja Daniela
Prezentacja DanielaPrezentacja Daniela
Prezentacja Daniela
klasa6
 
The latest higher capacity gypsum powder grinding machine with ceiso
The latest higher capacity gypsum powder grinding machine with ceisoThe latest higher capacity gypsum powder grinding machine with ceiso
The latest higher capacity gypsum powder grinding machine with ceiso
Ammy Cheng
 
Featured product barite grinding machine with ceiso
Featured product barite grinding machine with ceisoFeatured product barite grinding machine with ceiso
Featured product barite grinding machine with ceiso
Ammy Cheng
 
Connect The Dots by Sarah Daoudi, Ana Dorta-Duque, Alejandra Gonzalez & Julio...
Connect The Dots by Sarah Daoudi, Ana Dorta-Duque, Alejandra Gonzalez & Julio...Connect The Dots by Sarah Daoudi, Ana Dorta-Duque, Alejandra Gonzalez & Julio...
Connect The Dots by Sarah Daoudi, Ana Dorta-Duque, Alejandra Gonzalez & Julio...
Brandhome
 
First oral argument
First oral argumentFirst oral argument
First oral argument
Joseph Nohavicka
 
Evaluation question 3
Evaluation question 3Evaluation question 3
Evaluation question 3
jacobdriver
 
CSS with superpowers - SASS!
CSS with superpowers - SASS!CSS with superpowers - SASS!
CSS with superpowers - SASS!
fv0
 
Costos
CostosCostos
Costos
Aldo Mauro
 
Production Diary
Production DiaryProduction Diary
Production Diary
monah1
 
Clima dell'altro mondo
Clima dell'altro mondoClima dell'altro mondo
Clima dell'altro mondo
Consorzio LaMMA - Corso UdC
 
Tyrone aurelio
Tyrone  aurelioTyrone  aurelio
Tyrone aurelio
Tyrone Aurelio
 
Higuera la real
Higuera la realHiguera la real
Higuera la real
Caarmen__23
 
Wisata Sumur Soeharto
Wisata Sumur SoehartoWisata Sumur Soeharto
Wisata Sumur Soeharto
Pindai Media
 

Viewers also liked (16)

Praktikum iii (ppt)
Praktikum iii (ppt)Praktikum iii (ppt)
Praktikum iii (ppt)
 
Jon lockridge ppp_final
Jon lockridge ppp_finalJon lockridge ppp_final
Jon lockridge ppp_final
 
Actividades en torno a una audición
Actividades en torno a una audiciónActividades en torno a una audición
Actividades en torno a una audición
 
Prezentacja Daniela
Prezentacja DanielaPrezentacja Daniela
Prezentacja Daniela
 
The latest higher capacity gypsum powder grinding machine with ceiso
The latest higher capacity gypsum powder grinding machine with ceisoThe latest higher capacity gypsum powder grinding machine with ceiso
The latest higher capacity gypsum powder grinding machine with ceiso
 
Featured product barite grinding machine with ceiso
Featured product barite grinding machine with ceisoFeatured product barite grinding machine with ceiso
Featured product barite grinding machine with ceiso
 
Connect The Dots by Sarah Daoudi, Ana Dorta-Duque, Alejandra Gonzalez & Julio...
Connect The Dots by Sarah Daoudi, Ana Dorta-Duque, Alejandra Gonzalez & Julio...Connect The Dots by Sarah Daoudi, Ana Dorta-Duque, Alejandra Gonzalez & Julio...
Connect The Dots by Sarah Daoudi, Ana Dorta-Duque, Alejandra Gonzalez & Julio...
 
First oral argument
First oral argumentFirst oral argument
First oral argument
 
Evaluation question 3
Evaluation question 3Evaluation question 3
Evaluation question 3
 
CSS with superpowers - SASS!
CSS with superpowers - SASS!CSS with superpowers - SASS!
CSS with superpowers - SASS!
 
Costos
CostosCostos
Costos
 
Production Diary
Production DiaryProduction Diary
Production Diary
 
Clima dell'altro mondo
Clima dell'altro mondoClima dell'altro mondo
Clima dell'altro mondo
 
Tyrone aurelio
Tyrone  aurelioTyrone  aurelio
Tyrone aurelio
 
Higuera la real
Higuera la realHiguera la real
Higuera la real
 
Wisata Sumur Soeharto
Wisata Sumur SoehartoWisata Sumur Soeharto
Wisata Sumur Soeharto
 

Similar to modul algoritma Bab 5

modul algoritma Bab 7 record
modul algoritma Bab 7 recordmodul algoritma Bab 7 record
modul algoritma Bab 7 record
Eko Widyanto Napitupulu
 
Praktikum fix 2
Praktikum fix 2Praktikum fix 2
Praktikum fix 2
inggar tri
 
Praktikum
PraktikumPraktikum
Praktikum
inggar tri
 
07 function 2
07 function 207 function 2
Tutor C
Tutor CTutor C
PostgreSQL Stored-procedure
PostgreSQL Stored-procedurePostgreSQL Stored-procedure
PostgreSQL Stored-procedureAmmar Shadiq
 
03 i-o
03 i-o03 i-o
Tugas C++ - Dian Aditya - 2009/2010
Tugas C++ - Dian Aditya - 2009/2010Tugas C++ - Dian Aditya - 2009/2010
Tugas C++ - Dian Aditya - 2009/2010Dian Aditya
 
5 prosedur dan fungsi
5 prosedur dan fungsi5 prosedur dan fungsi
5 prosedur dan fungsi
Simon Patabang
 
Cara membuat fungsi dan prosedur pada java
Cara membuat fungsi dan prosedur pada javaCara membuat fungsi dan prosedur pada java
Cara membuat fungsi dan prosedur pada java
Devandy Enda
 
Modul pd
Modul pdModul pd
Modul pd
inggar tri
 
Algo
AlgoAlgo
listiati univ bung hata (1110013211051) Bahasa pemrograman pascal
listiati univ bung hata (1110013211051) Bahasa pemrograman pascallistiati univ bung hata (1110013211051) Bahasa pemrograman pascal
listiati univ bung hata (1110013211051) Bahasa pemrograman pascal
Maryanto Sumringah SMA 9 Tebo
 
Program Pascal
Program PascalProgram Pascal
Program Pascal
Simon Patabang
 
Asyiknya Belajar Struktur Data di Planet C++
Asyiknya Belajar Struktur Data di Planet C++Asyiknya Belajar Struktur Data di Planet C++
Asyiknya Belajar Struktur Data di Planet C++Nurdin Al-Azies
 
Asyiknya belajar struktur data di planet c++
Asyiknya belajar struktur data di planet c++Asyiknya belajar struktur data di planet c++
Asyiknya belajar struktur data di planet c++Ilan Surf ﺕ
 
Berpikir Komputasional
Berpikir KomputasionalBerpikir Komputasional
Berpikir Komputasional
Farichah Riha
 
Tugas sp algo
Tugas sp algoTugas sp algo
Tugas sp algo
andredavid17
 
Pengenalan bahasa c++
Pengenalan bahasa c++Pengenalan bahasa c++
Pengenalan bahasa c++
Iie Srimaiyanti
 

Similar to modul algoritma Bab 5 (20)

modul algoritma Bab 7 record
modul algoritma Bab 7 recordmodul algoritma Bab 7 record
modul algoritma Bab 7 record
 
Praktikum fix 2
Praktikum fix 2Praktikum fix 2
Praktikum fix 2
 
Praktikum
PraktikumPraktikum
Praktikum
 
07 function 2
07 function 207 function 2
07 function 2
 
Tutor C
Tutor CTutor C
Tutor C
 
PostgreSQL Stored-procedure
PostgreSQL Stored-procedurePostgreSQL Stored-procedure
PostgreSQL Stored-procedure
 
03 i-o
03 i-o03 i-o
03 i-o
 
Tugas C++ - Dian Aditya - 2009/2010
Tugas C++ - Dian Aditya - 2009/2010Tugas C++ - Dian Aditya - 2009/2010
Tugas C++ - Dian Aditya - 2009/2010
 
Alpro referensi
Alpro referensiAlpro referensi
Alpro referensi
 
5 prosedur dan fungsi
5 prosedur dan fungsi5 prosedur dan fungsi
5 prosedur dan fungsi
 
Cara membuat fungsi dan prosedur pada java
Cara membuat fungsi dan prosedur pada javaCara membuat fungsi dan prosedur pada java
Cara membuat fungsi dan prosedur pada java
 
Modul pd
Modul pdModul pd
Modul pd
 
Algo
AlgoAlgo
Algo
 
listiati univ bung hata (1110013211051) Bahasa pemrograman pascal
listiati univ bung hata (1110013211051) Bahasa pemrograman pascallistiati univ bung hata (1110013211051) Bahasa pemrograman pascal
listiati univ bung hata (1110013211051) Bahasa pemrograman pascal
 
Program Pascal
Program PascalProgram Pascal
Program Pascal
 
Asyiknya Belajar Struktur Data di Planet C++
Asyiknya Belajar Struktur Data di Planet C++Asyiknya Belajar Struktur Data di Planet C++
Asyiknya Belajar Struktur Data di Planet C++
 
Asyiknya belajar struktur data di planet c++
Asyiknya belajar struktur data di planet c++Asyiknya belajar struktur data di planet c++
Asyiknya belajar struktur data di planet c++
 
Berpikir Komputasional
Berpikir KomputasionalBerpikir Komputasional
Berpikir Komputasional
 
Tugas sp algo
Tugas sp algoTugas sp algo
Tugas sp algo
 
Pengenalan bahasa c++
Pengenalan bahasa c++Pengenalan bahasa c++
Pengenalan bahasa c++
 

More from Eko Widyanto Napitupulu

klasifikasi-komputer
klasifikasi-komputerklasifikasi-komputer
klasifikasi-komputer
Eko Widyanto Napitupulu
 
Soal un paket b 2009
Soal un paket b 2009Soal un paket b 2009
Soal un paket b 2009
Eko Widyanto Napitupulu
 
Indonesian edition
Indonesian editionIndonesian edition
Indonesian edition
Eko Widyanto Napitupulu
 
modul algoritma Bab 4
modul algoritma Bab 4modul algoritma Bab 4
modul algoritma Bab 4
Eko Widyanto Napitupulu
 
modul algoritma Bab 3
modul algoritma Bab 3modul algoritma Bab 3
modul algoritma Bab 3
Eko Widyanto Napitupulu
 
modul algoritma Bab 1
modul algoritma Bab 1modul algoritma Bab 1
modul algoritma Bab 1
Eko Widyanto Napitupulu
 
Presentasi pkn "HAM"
Presentasi pkn "HAM"Presentasi pkn "HAM"
Presentasi pkn "HAM"
Eko Widyanto Napitupulu
 
Resistor paralel
Resistor paralelResistor paralel
Resistor paralel
Eko Widyanto Napitupulu
 
pengertian ihsan dan masalah ihsan
pengertian ihsan dan masalah ihsanpengertian ihsan dan masalah ihsan
pengertian ihsan dan masalah ihsan
Eko Widyanto Napitupulu
 
perangkat-keras
perangkat-kerasperangkat-keras
perangkat-keras
Eko Widyanto Napitupulu
 
perangkat-lunak
perangkat-lunakperangkat-lunak
perangkat-lunak
Eko Widyanto Napitupulu
 
Fungsi otak manusia
Fungsi otak manusiaFungsi otak manusia
Fungsi otak manusia
Eko Widyanto Napitupulu
 

More from Eko Widyanto Napitupulu (12)

klasifikasi-komputer
klasifikasi-komputerklasifikasi-komputer
klasifikasi-komputer
 
Soal un paket b 2009
Soal un paket b 2009Soal un paket b 2009
Soal un paket b 2009
 
Indonesian edition
Indonesian editionIndonesian edition
Indonesian edition
 
modul algoritma Bab 4
modul algoritma Bab 4modul algoritma Bab 4
modul algoritma Bab 4
 
modul algoritma Bab 3
modul algoritma Bab 3modul algoritma Bab 3
modul algoritma Bab 3
 
modul algoritma Bab 1
modul algoritma Bab 1modul algoritma Bab 1
modul algoritma Bab 1
 
Presentasi pkn "HAM"
Presentasi pkn "HAM"Presentasi pkn "HAM"
Presentasi pkn "HAM"
 
Resistor paralel
Resistor paralelResistor paralel
Resistor paralel
 
pengertian ihsan dan masalah ihsan
pengertian ihsan dan masalah ihsanpengertian ihsan dan masalah ihsan
pengertian ihsan dan masalah ihsan
 
perangkat-keras
perangkat-kerasperangkat-keras
perangkat-keras
 
perangkat-lunak
perangkat-lunakperangkat-lunak
perangkat-lunak
 
Fungsi otak manusia
Fungsi otak manusiaFungsi otak manusia
Fungsi otak manusia
 

Recently uploaded

1.1.d.2. Refleksi - Framework dan Model-model Refleksi.pdf
1.1.d.2. Refleksi - Framework dan Model-model Refleksi.pdf1.1.d.2. Refleksi - Framework dan Model-model Refleksi.pdf
1.1.d.2. Refleksi - Framework dan Model-model Refleksi.pdf
sonymoita41
 
Wen4D Daftar Situs Slot Gacor Gampang Maxwin Terbaru Hari Ini
Wen4D Daftar Situs Slot Gacor Gampang Maxwin Terbaru Hari IniWen4D Daftar Situs Slot Gacor Gampang Maxwin Terbaru Hari Ini
Wen4D Daftar Situs Slot Gacor Gampang Maxwin Terbaru Hari Ini
Wen4D
 
Pedoman BOS Kinerja Sekolah Prestasi Tahun 2024.pdf
Pedoman BOS Kinerja Sekolah Prestasi Tahun 2024.pdfPedoman BOS Kinerja Sekolah Prestasi Tahun 2024.pdf
Pedoman BOS Kinerja Sekolah Prestasi Tahun 2024.pdf
sigitpurwanto62
 
WA 081388333722 Jual Dildo Penis IKat Pinggang Di Surabaya Cod
WA 081388333722 Jual Dildo Penis IKat Pinggang Di Surabaya CodWA 081388333722 Jual Dildo Penis IKat Pinggang Di Surabaya Cod
WA 081388333722 Jual Dildo Penis IKat Pinggang Di Surabaya Cod
ajongshopp
 
Games Tebak Lagu Untuk Ice Breaking Presentasi
Games Tebak Lagu Untuk Ice Breaking PresentasiGames Tebak Lagu Untuk Ice Breaking Presentasi
Games Tebak Lagu Untuk Ice Breaking Presentasi
RayAhmed5
 
VIII PENDAFTARAN DAN PERALIHAN HAK ATAS TANAH.ppt
VIII PENDAFTARAN DAN PERALIHAN HAK ATAS TANAH.pptVIII PENDAFTARAN DAN PERALIHAN HAK ATAS TANAH.ppt
VIII PENDAFTARAN DAN PERALIHAN HAK ATAS TANAH.ppt
MuhammadAmin350497
 
Ppt tentang Deret tak hingga, deret pangkat
Ppt tentang Deret tak hingga, deret pangkatPpt tentang Deret tak hingga, deret pangkat
Ppt tentang Deret tak hingga, deret pangkat
nadazaki20
 
Modul 3.2. Pemimpin dalam Pengelolaan Sumber Daya - Final (1).pdf
Modul 3.2. Pemimpin dalam Pengelolaan Sumber Daya - Final (1).pdfModul 3.2. Pemimpin dalam Pengelolaan Sumber Daya - Final (1).pdf
Modul 3.2. Pemimpin dalam Pengelolaan Sumber Daya - Final (1).pdf
MiftaJohanDaehanJo
 
Makalah Bahasa Arab. Inna waahwa Tuha .Kelompok 4
Makalah Bahasa Arab. Inna waahwa Tuha .Kelompok 4Makalah Bahasa Arab. Inna waahwa Tuha .Kelompok 4
Makalah Bahasa Arab. Inna waahwa Tuha .Kelompok 4
renaldifebriansyahed
 

Recently uploaded (9)

1.1.d.2. Refleksi - Framework dan Model-model Refleksi.pdf
1.1.d.2. Refleksi - Framework dan Model-model Refleksi.pdf1.1.d.2. Refleksi - Framework dan Model-model Refleksi.pdf
1.1.d.2. Refleksi - Framework dan Model-model Refleksi.pdf
 
Wen4D Daftar Situs Slot Gacor Gampang Maxwin Terbaru Hari Ini
Wen4D Daftar Situs Slot Gacor Gampang Maxwin Terbaru Hari IniWen4D Daftar Situs Slot Gacor Gampang Maxwin Terbaru Hari Ini
Wen4D Daftar Situs Slot Gacor Gampang Maxwin Terbaru Hari Ini
 
Pedoman BOS Kinerja Sekolah Prestasi Tahun 2024.pdf
Pedoman BOS Kinerja Sekolah Prestasi Tahun 2024.pdfPedoman BOS Kinerja Sekolah Prestasi Tahun 2024.pdf
Pedoman BOS Kinerja Sekolah Prestasi Tahun 2024.pdf
 
WA 081388333722 Jual Dildo Penis IKat Pinggang Di Surabaya Cod
WA 081388333722 Jual Dildo Penis IKat Pinggang Di Surabaya CodWA 081388333722 Jual Dildo Penis IKat Pinggang Di Surabaya Cod
WA 081388333722 Jual Dildo Penis IKat Pinggang Di Surabaya Cod
 
Games Tebak Lagu Untuk Ice Breaking Presentasi
Games Tebak Lagu Untuk Ice Breaking PresentasiGames Tebak Lagu Untuk Ice Breaking Presentasi
Games Tebak Lagu Untuk Ice Breaking Presentasi
 
VIII PENDAFTARAN DAN PERALIHAN HAK ATAS TANAH.ppt
VIII PENDAFTARAN DAN PERALIHAN HAK ATAS TANAH.pptVIII PENDAFTARAN DAN PERALIHAN HAK ATAS TANAH.ppt
VIII PENDAFTARAN DAN PERALIHAN HAK ATAS TANAH.ppt
 
Ppt tentang Deret tak hingga, deret pangkat
Ppt tentang Deret tak hingga, deret pangkatPpt tentang Deret tak hingga, deret pangkat
Ppt tentang Deret tak hingga, deret pangkat
 
Modul 3.2. Pemimpin dalam Pengelolaan Sumber Daya - Final (1).pdf
Modul 3.2. Pemimpin dalam Pengelolaan Sumber Daya - Final (1).pdfModul 3.2. Pemimpin dalam Pengelolaan Sumber Daya - Final (1).pdf
Modul 3.2. Pemimpin dalam Pengelolaan Sumber Daya - Final (1).pdf
 
Makalah Bahasa Arab. Inna waahwa Tuha .Kelompok 4
Makalah Bahasa Arab. Inna waahwa Tuha .Kelompok 4Makalah Bahasa Arab. Inna waahwa Tuha .Kelompok 4
Makalah Bahasa Arab. Inna waahwa Tuha .Kelompok 4
 

modul algoritma Bab 5

  • 1. BAB 5 SUB PROGRAM Pada dasarnya, manusia adalah makhluk yang lemah dan berkemampuan terbatas. Untuk mengerjakan sesuatu hal yang besar dan kompleks, manusia membagi pekerjaan menjadi bagian yang lebih kecil yang memungkinkan untuk di selesaikan. Bagian yan lebih kecil dan telah diselesaikan itu disebut dengan modul. Dalam algoritma pun juga terdapat paradigma untuk membagi pekerjaan besar menjadi pekerjaan yang lebih kecil. Prinsip ini di kenal dengan divide and conquer (bagi lalu selesaikan). A. Prosedur (Procedure) Prosedur di kategorikan sebagai sub (subprogram) yang menghasilkan output lebih dari satu atau hanya sekedar melakukan tindakan tertentu. Contoh 5.1 Buatlah prosedure untuk menukar nilai dari dua variable. Analisis : Untuk memindahkan posisi huruf A pada posisi huruf B dan sebaliknya, maka kita perlu tempat sementara (temp) sebelum huruf B. Karena kita tidak bisa begitu saja menaruh huruf ke posisi B, yang akan berakibat huruf B akan “hilang”. Langkah – langkahnya adalah sebagai berikut : TEMP    No. Langkah Algoritma 1. Temp di isi A temp  A 2. (A kosong) A di isi B A  B 3. (B kosong) B di isi temp B  temp Algoritma 5.1 prosedur tukar (input/output a : integer; b : integer) {menukar isi dua nilai a menjadi nilai b, demikian pula sebaliknya} Deklarasi temp : integer Deskripsi temp  a a  b b  temp BA
  • 2. Translasi 5.1 Bahasa Pascal Bahasa C program Tukar_Nilai; uses wincrt; var a, b : integer; procedure tukar (var a, b : integer); var temp : integer; begin temp := a; a := b; b := temp; end; begin a := 100; b:= 50; writeln (‘Sebelum Tukar’); writeln (‘Isi Nilai =’,a); writeln (‘Isi Nilai =’,b); tukar (a,b); writeln (‘Sesudah Tukar’); writeln (‘Isi Nilai1 = ‘,a); writeln (‘Isi Nilai2 = ‘,b); end. #include <stdio.h> void tukar (int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } Main () { int a = 100, b = 50; printf(“Sebelum Tukarn”); printf(“isi Nilai1 = %dn”,a); printf(“isi Nilai2 = %n”,b); tukar (&a,&b); printf(“Sesudah Tukarn”); printf(“Isi Nilai1 =%dn”,a); printf(“isi Nilai2 =%dn”,b); return 0; } B. Fungsi (Function) Sebagaimana pengertian fungsi dalam matematika, fungsi dalam algoritma adalah subprogram yang menghasilkan satu nilai. Perbedaan penulisan fungsi dalam bahaasa Pascal dan Bahasa C adalah sebagai berikut : Karakteristik Bahasa Pascal Bahasa C mulai dengan … keyword function tipe hasil nilai akhir dan fungsi disimpan pada nama fungsi return(hasil akhir) prototipe function nama(deklarasi variable tipe_hasil; tipe_hasil nama (deklarasi variable) contoh function rata(x : larik; n : integer) : real float rata(larik x, int n) Fungsi dipanggil dengan dua cara : 1. Langsung digunakan, misalnya pada saat mencetak hasil 2. di-assign ke suatu vaiabel Bahasa Pascal Bahasa C writeln(‘Hasil hitung rata-rata =’,rata(A,n)); printf(“Hasil hitung rata-rata = %fn” (A,n)); hitung_rata := rata(A,n); Hitung_rata = rata (A,n);
  • 3. C. Parameter Dalam Subprogram Dalam subprogram dapat dideklarasikan variable sendiri, yang nantinya akan digunakan Variabel yang dideklarasikan dalam subprogram bersifat lokal, artinya hanya dikenal dalam procedure itu sendiri, dan tidak di kenal diluar procedure. Ada 2 jenis parameter yang dideklarasikan dalam subprogram, yaitu : 1. parameter nilai (value parameter) : variable yang dikirim tidak mengalami perubahan sekeluar dari subprogram) 2. parameter variable (variable parameter) : variable yang dikirim tidak mengalami perubahan sekeluar dari subprogram) Jenis Parameter Bahasa Pascal Bahasa C parameter nilai ----- menggunakan const parameter variabel menggunakan var melalui pointer Contoh 5.2 Buatlah fungsi yang menentukan nilai terbesar dari 2 bilangan bulat. Algoritma 5.2 Fungsi maksimum2 (input a,b : integer) : integer Deskripsi if (a>b) then maksimum2  a else maksimum2  b Translasi 5.2 Bahasa Pascal Bahasa C program nilai_maksimum_2_bilangan; user wincrt; var x,y : integer; function maksimum2(a,b : integer) : integer; begin If (a>b) then maksimum2 : = a Else maksimum2 := b; end; begin writeln(‘Masukkan dua integer :’); write(‘Bilangan pertama : ‘); readln(x); write(‘Bilangan kedua : ‘); readln(y); write(‘Nilai terbesar:’,maksimum2(x,y)); end. #include <stdio.h> int maksimum2(int a, int b) { if (a>b) return(a); else return(b); } Main () { Int x, y; Printf(“Massukkan dua integer : n”); Scanf(“Bilangan pertama : “); Scanf(“%d”,&x); Printf(“Bilangan kedua : “); scand(“%d”,&y) Printf(“Bilangan terbesar :d“,maksimum2(x,y)); return 0; }
  • 4. Contoh 5.3 Dengan menggunakan fungsi In dan exp, buatlah fungsi untuk menghasikan nilai 𝑥 𝑦 . Analisis : Dengan menggunakan sifat logaritma : In(𝑥 𝑦 ) = y*In(𝑥) exp(In(𝑥 𝑦 )) = exp(y*In(𝑥)) sehingga : 𝑥 𝑦 = exp(y*In(𝑥)) Algoritma 5.3 Fungsi Pangkat(input x,y : integer) {Menghitung nilai dari x pangkat y} Deskripsi pangkat  exp(y*In(x)) Translasi 5.3 Bahasa Pascal Bahasa C Program pangkat_fungsi; uses wincrt; var hasil : real a, b : integer #include <stdio.h> #include <math.h> float pangkat(int x, int y) { return(exp(y*log(x))) } function pangkat(x, y : integer) : real; begin pangkat := exp(y*ln(x)); end; begin writeln (‘Menghitung hasil perpangkatan ‘); write(‘Tulis sebuah bilangan : ‘); readln (a); write(‘Mau dipangkat berapa : ‘); readln (b); hasil := pangkat(a, b); writeln (a,’ pangkat ‘,b,’ = ‘,hasil:6:0); end main() } float hasil; int a, b; printf(“Menghitung hasil perpangkatann”); printf(“Tulis sebuah bilangan : “); scanf(“%d”,&a) printf(“Mau dipangkat berapa : “); scanf(“%d”,&b) hasil = pangkat(a, b); printf(“%d pangkat %d = %6.0fn”,a,b,hasil); return 0; }
  • 5. Contoh 5.4 Buatlah fungsi perkalian 2 bilangan bulat dengan menggunakan operator penjumlahan. Analisis : a × b = a + a + a + … + a (sebanyak b kali) Algoritma 5.4 fungsi kali(input a, b : integer) : integer { Menghitung hasil perkalian a dan b menggunakan Operator Penjumlahan } Deklarasi hasil, i : integer Deskripsi hasil  0 for i  1 to b do hasil  hasil + a kali  hasil Translasi 5.4 Bahasa Pascal Bahasa C program Perkalian_dengan_cara_menjumlah; {menghitung nilai dari m × n dengan cara menjumlah : m+m+m+ … +m sebanyak n kali} uses wincrt; var a, b : integer; function kali(m, n : integer) : integer; var i, hasil : integer; begin #include int kali(int m, int n) { int i, hasil =0; for (i=1;i<=n; i++) hasil = hasil + m; return(hasil); } hasil :=0; for i:=1 to n do hasil := hasil + m; kali := hasil; end begin write (‘Masukkan bilangan :’); readln (a); write (‘Akan dikali dengan ;’); readln (b); writeln (‘Nilai ‘,a,’ x ‘,b,’ = ‘,kali(a,b)); end main() } int a, b; printf(“Masukkan bilangan : “); scanf(“%d”,&a); printf(“Akan dikali dengan : “); scanf(“%d”,&b); printf(“Nilai %d x %d = %d”,a,b,kali(a,b)); return 0; }
  • 6. C. Fungsi Rekursif Rekursif berasal dari bahasa Latin recur (re = kembali, cure : eksekusi). Fungsi rekursif adalah fungsi yang melakukan proses perulangan dengan cara memanggil dirinya sendiri. Ini berbeda dengan versi iterative yang menggunakan perulangan for, while maupun repeat until. Fungsi rekursif dapat dipandang sebagai sebuah “operator”. Misalkan kita lihat contoh 4.4 dimana secara iteratif n factorial didefenisikan sebagai : n! = 1 × 2 × 3 × … × n = ∏ 𝑖 𝑝 𝑖=1 n factorial didefinidikan secara rekursif sebagai berikut : n! = 1 , untuk n = 0 atau n = 1 = n*(n-1)! , n > 2 Dapat dilihat ternyata pada sisi kanan terdapat operator yang sama dengan sisi kiri. Dengan demikian nilai dan factorial baru bisa (n-1) factorial telah diperoleh. Tentu saja n factorial “lebih kompleks” disbanding dengan (n-1) factorial. Pencarian ini berakhir bila sudah sampai pada nilai konstan, yakni telah dicapai harga n=0 atau n=1 yaitu 0!=1 atau 1!=1. Untuk itu dapat diambil kesimpulan bahwa untuk fungsi rekursif ada 2 syarat, yaitu : 1. Kasus penyetop. Dalam kasus ini terdapat nilai konstan. 2. Kasus pemanggilan rekursif. Dalam kasus ini terdapat pemanggilan fungsi itu sendiri, tetapi harus mengarah kepada kasus penyetop. Contoh 5.5 buatlah fungsi factorial secara rekursif untuk mencari n! Algoritma 5.5 Fungsi factorial(input n : integer) : longint Deskripsi if (n=0) or (n=1) then factorial  1 else factorial  n * faktorial(n-1)
  • 7. Translasi 5.5 Bahasa Pascal Bahasa C program Faktorial_Fungsi_Rekursif; uses wincrt; var bil : integer function factorial(N : integer):logint; begin if (N = 0) or (N = 1) then factorial := 1 else factorial := N * factorial(N-1); end; begin write (‘ Masukkan integer n : ‘); readln(bil); writeln (bil.’!= ‘,kaktorial(bil))); end. #include <stdio.h> long faktorial(int n) { if ((n==0 || (n==1)) return(1); else return (n*faktorial(n-1)); } main() { int n; long hasil; printf(“Masukkan integer n : “); scanf(“%d”,&n); hasil = faktorial printf(“Nilai %d!=%ld”, n,hasil); return 0; } Contoh 5.6 Diberikan deret Fibonacci sebagai berikut : 1, 1, 2, 3, 5, 8, … Buatlah fungsi yang mnghitung suku ke-n dari deret Fibonacci dengan menggunakan cara rekursif. Analisis : Suku ke-n dari deret Fibonacci diperoleh dengan rumus : fibonacci(n) = fibonacci(n-1) + fibonacci(n-2) dengan nilai awal untuk n=1 dan n=2 berharga 1. Algoritma 5.6 Fungsi Fibonacci (input n : integer) : integer Deskripsi if (n = 1) or (n = 2) then fibonacci  1 else Fibonacci  fibonacci(n-1) + Fibonacci(n-2) endif
  • 8. Translasi 5.6 Bahasa Pascal Bahasa C Program Deret_Fibonacci; uses wincrt; var I, n : integer; function fibonacci(n : integer) : integer; begin if (n = 1) or (n = 2) then fibonacci :=1 else fibonacci := Fibonacci(n-1) + fibonacci(n-2); end; begin write (‘Sampai suku ke :’);readln (n); for I := 1 to n do write (fibonacci(i),’,’); end #include <stdio.h> Int fibonacci (int n) { if ((n == 1) ||( n == 2)) return(1); else return(fibonacci(n-1) + fibonacci(n- 2)); } Main () { Int I, n; printf(“Sampai suku ke :”);scanf(“%d”,&n); for (I = 1 ; I <= n; 1++) printf (“%d, “,Fibonacci(i))); return } D. Iteratif Versus Rekursif Dengan pengalaman memprogram, seorang programmer akan tahu, kapan mneggunakan perulangan iterative dan kapan menggunakan perulangan rekursif. Beberapa kasus berikut akan memberikan wawasan memprogram dengan kedua versi, yaitu versi interatif dan rekursif. Contoh 5.7 Cetaklah satu kalimat dengan cara iterative maupun cara rekursif. Translasi 5.7.a. Versi Iteratif Bahsa Pascal Bahasa C Program balik_kalimat_iteratif; uses wincrt; var kata : string; procedure balik(s : string); var i : integer; begin for i:=length(s) downto 1 do write(s[i]) end; begin kata := ‘algoritma’; balik(kata) end. #include <stdio.h> #include <string.h> void balik(char *s) { int I; for (i=strlen(s)-1 ; i>=0; i--) putchar(s[i]); } main() { char *kata = “Algoritma”; balik(kata); return 0; }
  • 9. Translasai 5.7.b. Versi Rekursif Bahasa Pascal Bahasa C program balik_kalimat_rekursif; uses wincrt; var kata : string; procedure balik(s : string; n : integer); begin if (n<>0) then begin write(s[n]); balik(s, n-1); end; end; begin kata := ‘Algoritma’; balik(kata, length(kata)); end. #include <stdio.h> #include <string.h> void balik(char *s) { if (*s != ‘0’) { balik(&s[1]); putchar(s[0]); } } main () { char *kata = “Algoritma”; balik(kata); return 0; } Contoh 5.8 Buatlah algoritma iterative dan rekursif dan rekursif untuk menghitung gcd dari dua bilangan bulat positif. Analisis : Jika n ≠ 0 dan m integer non negatif, kita dapat menulis m = q.n + r untuk suatu integer non negatif q dan r dengan 0 ≤ r < n. Contoh : Jika n = 3, m = 16 maka 16 = 5(3) + 1, yaitu q = 5 dan r = 1. Jika n = 10, m = 3 maka 3 = 0(10) + 3, yaitu q = 0 dan r = 3. Untuk mencari nilai gcd dari dua integer. Kita bisa menggunakan cara menulis di atas. Misalkan kita mau cari gcd(190,34). 34 |190  190 = 5(34) + 20, r= 20 20 |34  34 = 1(20) + 14, r = 14 14 |20  20 = 1(14) + 6, r = 6 6 | 14  14 = 2(6) + 2, r = 2 Harga r ≠ 0 terakhir dicapai adalah r = 2. Inilah hasil dari gcd(190,34). Versi rekursif, gcd didefinisikan sebagai berikut : gcd(c,d) = c, jika d = 0 = gcd(c-d, d), jika d > 0 dan c > d. Juga berlaku hokum komunatif, gcd(c,d) = gcd(d,c). Algoritma 5.8 Fungsi gcd(c,d : integer) : integer Versi iteratif Versi rekursif Deskripsi while (d > 0) do r  c mod d c  d { menyimpan harga r terakhir } d  r { harga r terakhir untuk menghentikan perulangan } endwhile gcd  c Deskripsi if (d=0) then gcd  c else if (c<d) then gcd  gcd(d,c) else gcd  gcd(c-d, d)
  • 10. Translasi 5.8.a Versi Iteratif Bahasa Pascal Bahasa C Program mencari_GCD; uses wincrt; var a, b, hitung : integer; function gcd(c, d : integer) : integer; var r : integer; begin while (d > 0) do begin r := c mod d; c := d; d := r; end; gcd := c; end; begin { program utama } write(‘Masukkan bilangan pertama : ‘); readln(a); write(‘Masukkan bilangan ke dua : ‘); readln(b); hitung(‘GCD dari ‘,a,’ dan ‘,b,’ = ‘,hitung); end. #include <stdio.h> int gcd(int c, int d) { int r; while (d > 0) { r = c % d; c = d; d = r; } return (c); } main () } int x, y, hitung; printf(“Masukkan bilangan pertama :”); scanf(“%d”,&x); printf(“Masukkan bilangan kedua : “); hitung(“%d”,&y); printf(“gcd(%d,%d) = %dn”, x, y, hitung); return 0; } Translasi 5.8.b. Versi Rekursif Bahasa Pascal Bahasa C Program mencari_GCD; uses wincrt; var a, b, hitung : integer; function gcd(c, d : integer) : integer; begin if (d=0) then gcd := c else if (c<d) then gcd := gcd(d,c) else gcd := gcd(c-d, d); end; begin { program utama } write(‘Masukkan bilangan pertama : ‘); readln(a); write(‘Masukkan bilangan kedua : ‘); readln(b); hitung := gcd(a,b); write(‘GCD dari ‘,a,’ dan ‘,b,’ = ‘,hitung); end. #include <stdio.h> int gcd(int c, int d) { if (d==0) return(c); if (c<d) return(gcd(d,c)); return(gcd(c-d, d)); } main () { int x, y, hitung; printf(“Masukkan bilangan pertama : “); scanf(“%d”,&x); printf(“Masukkan bilangan kedua : “); scanf(“%d”,&y); hitung = gcd(x,y); printf(“gcd(%d,%d) = %dn”, x, y, hitung); return 0; }