Vous êtes sur la page 1sur 120

Algoritma dan Pemrograman 2

Pertemuan Ke-1
Array (Larik)

Disusun Oleh :
M u k i d i n, S.Kom.

Jurusan Teknik Informatika


STIKOM POLTEK CIREBON
2009

Algoritma dan Pemrograman 2


Judul Materi

: Array (Larik)

Deskripsi Materi
: Materi ini mencakup subpokok bahasan array
dimensi satu, dimensi dua, perhitungan matriks, dan pengenalan dimensi n dengan
menggunakan tipe data array
Tujuan Instruksional Khusus
:
1. Mendefinisikan dan membuat matriks dengan menggunakan tipe data array
2. Mengimplementasikan tipe data array untuk matrik
3. Menggunakan definisi matriks untuk perhitungan matriks
Referensi
:
Buku Teks
Munir, Rinaldi (2005), Algoritma dan Pemrograman dalam Bahasa Pascal dan
C, Buku 2, Edisi Ketiga, Penerbit Informatika Bandung.
Charibaldi, N. (2004), Modul Kuliah Algoritma Pemrograman II, Edisi Kedua,
Yogyakarta

Buku Acuan/Referensi
Brassard, Gilles (1999), Fundamentals of algorithma, PrinteceHall.
Jarne, Stroustrup B. (1997), C++ Programming language, AT &T.
Kristanto, Andri (2003), Algoritma pemrograman C++, Graha Ilmu.
Schildt,Herbert (2000), The Complete Reference C++, McGraw-Hill.
Sedgewick, R. (2000), Algoritma Third edition In C part 5, Addison Wesley.

ARRAY (LARIK)
PENDAHULUAN
Array atau biasa disebut larik adalah koleksi data dimana setiap elemen memakai
nama yang sama dan bertipe sama dan setiap elemen diakses dengan membedakan indeks
arraynya.

ISI

A.

Deklarasi Array
Variabel array dideklarasikan dengan mencantumkan tipe dan nama variable yang
diikuti dengan banyaknya lokasi memori yang ingin dibuat.
Contoh :
int c[5];
C++ secara otomatis akan menyediakan lokasi memori sesuai dengan yang
dideklarasikan, dimana nomor indeks selalu dimulai dari 0.
int c[5] = {-12, 0, 20, 85, 1551};
Nilai suatu variabel array dapat juga diinisialisasi secara langsung seperti yang
terdapat di dalam tanda kurung kurawal pada saat deklarasi di atas.
int x[5] = [0];
Deklarasi variable array sekaligus mengisi setiap lokasi memorinya dengan
nilai 0.

B.

Array Dimensi Satu


Bentuknya (Pseudocode) :
nama_var : array [rangeindeks] of tipe
Bentuknya (C++):
tipe nama_var[ukuran];

Dengan :
tipe
: menyatakan jenis elemen array (int, char dan lain-lain)
rangeindeks : menyatakan indeks awal sampai demgan indeks akhir dari var
array yang dibuat
ukuran
: menyatakan jumlah maksimal elemen array
Contoh :
Algoritma :
Algoritma PangkatDua
Deklarasi
square : array [1..100] of integer
i,k : integer
Deskripsi
for i 1 to 10 do
ki+1
square[i] k * k
output(Pangkat dari ,k, adalah , square[i])
endfor
Program C++ :
#include<iostream.h>
main()
{
int square[100];
int i,k;
for(i=0; i<10; i++)
{
k = i + 1;
square[i] = k * k;
cout<<\nPangkat dari <<k<< adalah << square[i];
}
}

Output :
Pangkat dari 1 adalah 1
Pangkat dari 2 adalah 4
Pangkat dari 3 adalah 9
Pangkat dari 4 adalah 16
Pangkat dari 5 adalah 25
Pangkat dari 6 adalah 36

Pangkat dari 7 adalah 49


Pangkat dari 8 adalah 64
Pangkat dari 9 adalah 81
Pangkat dari 10 adalah 100

C.

Array Dimensi Dua

Array dua dimensi merupakan array yang terdiri dari m buah baris dan n buah kolom.
Bentuknya dapat berupa matriks atau tabel.
Deklarasi array (Pseudocode) :
nama_var : array [rangeindeks1,rangeindeks2] of tipe
Deklarasi array (C++):
tipe nama_var[ukuran1][ukuran2];

Contoh :
Sebuah matrik A berukuran 2x3 dapat dideklarasikan sebagai berikut :
Algoritma :
a : array [1..2,1..3] of integer
a1 11
a2 7
a3 4
a4 12
a5 3
a6 9
C++ :
int a[2][3] = {{11, 7, 4},{12, 3, 9}};

yang akan menempati lokasi memori dengan susunan berikut :


0

11

12

Dan definisi variabel untuk setiap elemen tersebut adalah :


0

a[0][0]

a[0][1]

a[0][2]

a[1][0]

a[1][1]

a[1][2]

Contoh Program 1 :
#include<iostream.h>
main()
{
int A[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int i,j;
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
cout<<A[i][j]<<"
cout<<endl;
}

";

Output :
1 2 3
4 5 6
7 8 9
Contoh Program 2 :
#include<stdio.h>
void printArray(int [][3]);
main()
{
int matrik1 [2][3] = { {1, 2, 3}, {4, 5, 6}};
int matrik2 [2][3] = { {1, 2, 3}, {4, 5}};
int matrik3 [2][3] = { {1, 2}, {4} };
printArray(matrik1);
printArray(matrik2);
printArray(matrik3);
return 0;
}
void printArray(int a[][3])

int i, j;
for(i=0; i<=1; i++)
{ for(j=0; j<=2; j++)
printf("%d ", a[i][j]);
printf("\n");
}

Output :
123
456
123
450
120
400
Contoh Program 3 :
//program penjumlahan matrik
#include<iostream.h>
main()
{
int A[3][2]={{1,2},{3,4},{5,6}};
int B[3][2]={{7,8},{9,10},{11,12}};
int C[3][2];
int i,j;
cout<<"Matrik A = \n";
for(i=0; i<3 ; i++)
{
for(j=0; j<2 ; j++)
cout<<A[i][j]<<"
cout<<endl;
}
cout<<"Matrik B = \n";
for(i=0; i<3 ; i++)
{
for(j=0; j<2 ; j++)
cout<<B[i][j]<<"
cout<<endl;
}
//penjumlahan matrix

";

";

for(i=0; i<3 ; i++)


for(j=0; j<2 ; j++)
C[i][j]=A[i][j] + B[i][j];

cout<<"Matrik C = \n";
for(i=0; i<3 ; i++)
{
for(j=0; j<2 ; j++)
cout<<C[i][j]<<"
cout<<endl;
}

";

D.

Array Dimensi Banyak


Bentuknya dalam bahasa C++ :
tipe nama_var[ukuran1[ukuran2]. . .[ukuranN];
Contoh :
int data_huruf[2][4][6];

PENUTUP
Array merupakan suatu tipe data terstruktur. Deklarasi tipe ini tidak hanya dapat
untuk data satu dimensi tetapi bisa sampai n dimensi. Array dua dimensi biasanya dipakai
untuk perhitungan matriks dua dimensi.
SOAL-SOAL
Diketahui matriks A dan matriks B sebagai berikut :

A=

2 3 6

4 7 8

3 5

B = 2 4
8 6

Buatlah program untuk menghitung


matriks C = matriks A * matriks B

Algoritma dan Pemrograman 2


Pertemuan Ke-2
Record/Struct dan Array Of Record

Disusun Oleh :
M u k i d i n, S.Kom.

Jurusan Teknik Informatika


STIKOM POLTEK CIREBON
2009

Algoritma dan Pemrograman 2


Judul Materi

: Record/Struct dan Array Of Record

Deskripsi Materi
: Materi ini membahas tipe data terstruktur
record/struct dan penggunaannya dengan tipe data terstruktur array
Tujuan Instruksional Khusus
:
1. Mendefinisikan dan menggunakan tipe data record/struktur
2. Mendeskripsikan tipe data record
Referensi
:
Buku Teks
Munir, Rinaldi (2005), Algoritma dan Pemrograman dalam Bahasa Pascal dan
C, Buku 2, Edisi Ketiga, Penerbit Informatika Bandung.
Charibaldi, N. (2004), Modul Kuliah Algoritma Pemrograman II, Edisi Kedua,
Yogyakarta

Buku Acuan/Referensi
Brassard, Gilles (1999), Fundamentals of algorithma, PrinteceHall.
Jarne, Stroustrup B. (1997), C++ Programming language, AT &T.
Kristanto, Andri (2003), Algoritma pemrograman C++, Graha Ilmu.
Schildt,Herbert (2000), The Complete Reference C++, McGraw-Hill.
Sedgewick, R. (2000), Algoritma Third edition In C part 5, Addison Wesley.

RECORD/STRUCT DAN ARRAY OF RECORD


PENDAHULUAN
Seperti halnya Array, Record/Struct mempunyai sejumlah elemen yang disebut
field. Kalau semua elemen array harus mempunyai tipe data yang sama, maka tiap-tiap
elemen pada Record/Struct dapat memiliki tipe data yang berbeda.

ISI
A. RECORD/STRUCT
Bentuk umum deklarasi Record/Struct
Algoritma :
namaVar : record
< namaField1 : tipeField1 ,
namaField2 : tipeField2 ,

namaFieldn : tipeFieldn ,
>
Atau namavar dapat dipisah dari deklarasi tiperecordnya, sehingga menjadi
Type namaTipeRecord : record
< namaField1 : tipeField1 ,
namaField2 : tipeField2 ,

namaFieldn : tipeFieldn ,
>
namaVar : namaTipeRecord

Bahasa C++ :
struct namaTipeStruct
{
tipeField1

namaField1;

tipeField2

namaField2;


tipeFieldn

namaFieldn;

} namaVar;
Atau namavar dapat dipisah dari deklarasi tiperecordnya, sehingga menjadi :
typedef

struct
{
tipefield1 namafield1;
tipefield2 namafield2;

tipefieldn namafieldn;

} namatipestruct;
namatipestruct

namavar;

Catatan : namaVar bisa lebih dari satu

Contoh record/struct :
Algoritma :
Deklarasi
Type Mahasiswa : Record < NIM : integer,
Nama : string,
KodeMK : string,
NilaiHuruf : char >
Mhs1,Mhs2 : Mahasiswa

Bahasa C++ :

//deklarasi
typedef

struct

int NIM;
char Nama[20];
char KodeMK[10];
char NilaiHuruf;

} Mahasiswa;
Mahasiswa

Mhs1,Mhs2;

Cara mengakses elemen record/structur :


namavar.namafield

Contoh Program :
#include<iostream.h>
#include<string.h>
typedef struct
{

int tanggal, bulan, tahun;

} data_tanggal;
typedef struct
{

char nama[30];
data_tanggal tgl_lahir;

} data_rekan;
data_rekan info_rekan;
main()
{
strcpy(info_rekan.nama,"Hanif");
info_rekan.tgl_lahir.tanggal = 30;
info_rekan.tgl_lahir.bulan = 4;
info_rekan.tgl_lahir.tahun = 2002;
cout<<"Nama

: "<<info_rekan.nama;

cout<<"\nTanggal lahir :";


cout<<info_rekan.tgl_lahir.tanggal;
cout<<"-"<<info_rekan.tgl_lahir.bulan;
cout<<"-"<<info_rekan.tgl_lahir.tahun;
}

Contoh Variasi program Cara Mendeklarasikan Structur :


#include<iostream.h>
#include<string.h>
main()
{
struct data_tanggal
{

int tanggal, bulan, tahun; };

struct data_rekan
{

char nama[30];
struct data_tanggal

tgl_lahir;

};
struct data_rekan info_rekan;
strcpy(info_rekan.nama,"Hanif");
info_rekan.tgl_lahir.tanggal = 30;
info_rekan.tgl_lahir.bulan = 4;
info_rekan.tgl_lahir.tahun = 2002;
cout<<"Nama

: "<<info_rekan.nama;

cout<<"\nTanggal lahir :";


cout<<info_rekan.tgl_lahir.tanggal;
cout<<"-"<<info_rekan.tgl_lahir.bulan;
cout<<"-"<<info_rekan.tgl_lahir.tahun;
}

B. ARRAY OF RECORD

Algoritma :
namaVar : record
< namaField1 : tipeField1 ,
namaField2 : tipeField2 ,

namaFieldn : tipeFieldn ,
>
namaVar : array[rangeindex] of namaTipeRecord

Bahasa C++ :
struct namaTipeStruct
{
tipeField1

namaField1;

tipeField2

namaField2;


tipeFieldn

namaFieldn;

} namaVar;
namaTipeStruct

namaVar[ukuran];

PENUTUP
Record merupakan suatu tipe data terstruktur yang dapat menampung data field
bertipe berbeda. Tipe ini dapat dipadukan dengan tipe data terstruktur lainnya seperti
array.

SOAL-SOAL
Buat program untuk menginput dan menampilkan 5 data mahasiswa matakuliah
Algoritma dan Pemrograman 2 dengan field-field NoMhs, Nama, Kelas, NilaiAngka dan
NilaiHuruf, dengan ketentuan NilaiHuruf tidak diinputkan tetapi berasal dari NilaiAngka.
Range NilaiHuruf : 0<E<20; 20D<40; 40C<60; 60B<75; 75A<100

Algoritma dan Pemrograman 2


Pertemuan Ke-3
Reccurence Relation (Relasi Berulang)

Disusun Oleh :
M u k i d i n, S.Kom.

Jurusan Teknik Informatika


STIKOM POLTEK CIREBON
2009

Algoritma dan Pemrograman 2


Judul Materi

: Reccurence Relation (Relasi Berulang)

Deskripsi Materi
: Materi ini membahas pemakaian skema iterasi
untuk Persoalan Deret yang rumusnya dapat dinyatakan dalam hubungan/relasi
berulang
Tujuan Instruksional Khusus
:
1. Memahami algoritma hubungan berulang
2. Menjelaskan hubungan berulang dalam algoritma menggunakan sintak perulangan
3. Mengimplementasikan algoritma berulang
Referensi
:
Buku Teks
Munir, Rinaldi (2005), Algoritma dan Pemrograman dalam Bahasa Pascal dan
C, Buku 2, Edisi Ketiga, Penerbit Informatika Bandung.
Charibaldi, N. (2004), Modul Kuliah Algoritma Pemrograman II, Edisi Kedua,
Yogyakarta

Buku Acuan/Referensi
Brassard, Gilles (1999), Fundamentals of algorithma, PrinteceHall.
Jarne, Stroustrup B. (1997), C++ Programming language, AT &T.
Kristanto, Andri (2003), Algoritma pemrograman C++, Graha Ilmu.
Schildt,Herbert (2000), The Complete Reference C++, McGraw-Hill.
Sedgewick, R. (2000), Algoritma Third edition In C part 5, Addison Wesley.

RECCURENCE RELATION (RELASI BERULANG)


PENDAHULUAN
Pemakaian skema iterasi untuk Persoalan Deret dapat dinyatakan dalam rumus
hubungan/relasi berulang, yaitu menyangkut masalah ketelitian penyajian bilangan pada
komputer.

ISI
Contoh :
Barisan

: 1,2,3,4,...,n
3,5,7,9,...,n

Deret

: 1 + 2 + 3 + 4 + ... + n
3 + 5 + 7 + 9 + ... + n

Contoh1 :
1,2,3,4,5,...,n
Algoritma Contoh1
Deklarasi
i,n : integer
Deskripsi
Input(n)
i1
s0
while (i<=n) do
output(i)
ii+1
endwhile

Contoh2 :
S=1+2+3+4+5+...+n
Algoritma Contoh2
Deklarasi
i,s,n : integer
Deskripsi
Input(n)

i1
s0
while (i<=n) do
output(i)
ss+1
ii+1
endwhile
output(s)
Contoh3 :
S=2+4+6+8+...+20
i
f(i)

1
2

2
4

3
6

4
8

5
10

f(i) = 2*i
x = 2*i
s = s + (2*i)
s =s+x
Algoritma Contoh3
Deklarasi
i,s,x : integer
Deskripsi
i1
x0
s0
while (i<=10) do
x2*i
ss+x
output(x)
ii+1
endwhile
output(s)
Contoh3 dalam bahasa C :
#include<stdio.h>
#include<math.h>
main()
{
int i=1,s=0,x=0;
printf(S=);
while (i<=10)
{
x = 2*i

n
2n

s +=x
printf(%d+,x);
i++;
}
printf(jumlah deret s = %d ,s);
}

Contoh4 :
S=3+5+7+9+...+15
i
f(i)

1
3

2
5

3
7

4
9

5
11

n
2n+1

n
(n*n)+1

f(i) = 2*i +1
x = 2*i +1
s = s + (2*i +1)
s =s+x

Contoh5 :
S=2+5+10+17+26+...+101
i
f(i)

1
2

2
5

3 4 5
10 17 26

f(i) = i*i +1
x = i2 +1
s = s + (i2 +1)
s =s+x

Contoh6 :
S=-3+6-9+12-15+18
i
f(i)

1
-3

2
6

3
-9

4
12

f(i) = 3*i *(-1)i


atau
untuk ganjil i mod 2 =1
t = -1
untuk genap i mod 2 = 0
t=1

5
-15

6
18

N
3*n*(-1)n

Algoritma Contoh6a
Deklarasi
i,s,x,t : integer
Deskripsi
i1
x0
s0
t1
while (i<=6) do
x2*i*(-1**i)
ss+x
output(x)
ii+1
endwhile
output(s)
atau
Algoritma Contoh6b
Deklarasi
i,s,x,t : integer
Deskripsi
i1
x0
s0
t1
while (i<=6) do
if (i mod 2)=1 then
t -1
else t 1
x2*i*t
ss+x
output(x)
ii+1
endwhile
output(s)

Contoh7 :
S=3-6+9-12+15-18
i
1
2
3
4
5
6
f(i)
-3
6
-9
12
-15
18
i+1 atau
i
f(i) = 3*i *(-1)
f(i) = -3*i *(-1)

n
3*n*(-1)n+1

Contoh 8 :
S = 1/2-1/4+1/8-1/16+...-...
Algoritma HitungDeret7
Deklarasi
i,p,q,n : integer
S : real
Deskripsi
i1
p1
q2
S0.0
while (i<=n) do
output(p,/,q)
SS+p/q
p-1*p
qq*2
ii+1
endwhile
output(S)

PENUTUP
Konsep relasi berulang dapat digunakan untuk proses yang membutuhkan
ketelitian penyajian bilangan pada komputer, seperti perhitungan deret.

SOAL-SOAL
Buatlah Algoritma dan Program untuk menghitung deret berikut :
1. S = 3-6+9-12+15-18
2. S = 1-3+5-7+9-11+...+(2*i-1)*(-1)i-1
3. S = 1-1/2+1/3-1/4+...+1/99-1/100
4. S = 1/2-1/4+1/6-1/8+...-...
5. S = 2/3-4/9+8/27-16/81+...-...

Algoritma dan Pemrograman 2


Pertemuan Ke-4
Rekursif

Disusun Oleh :
M u k i d i n, S.Kom.

Jurusan Teknik Informatika


STIKOM POLTEK CIREBON
2009

Algoritma dan Pemrograman 2


Judul Materi

: Rekursif

Deskripsi Materi
: Materi ini membahas bentuk algoritma rekursif
dan penggunaan rekursif untuk menyelesaikan perosalan-persoalan iterasi
Tujuan Instruksional Khusus
:
1. Memahami algoritma rekursif
2. Menjelaskan bentuk algoritma rekursif
3. Mendeskripsikan parameter-parameter pada algoritma rekursif
4. Membandingkan algoritma rekursif dengan algoritma non rekursif
Referensi
:
Buku Teks
Munir, Rinaldi (2005), Algoritma dan Pemrograman dalam Bahasa Pascal dan
C, Buku 2, Edisi Ketiga, Penerbit Informatika Bandung.
Charibaldi, N. (2004), Modul Kuliah Algoritma Pemrograman II, Edisi Kedua,
Yogyakarta

Buku Acuan/Referensi
Brassard, Gilles (1999), Fundamentals of algorithma, PrinteceHall.
Jarne, Stroustrup B. (1997), C++ Programming language, AT &T.
Kristanto, Andri (2003), Algoritma pemrograman C++, Graha Ilmu.
Schildt,Herbert (2000), The Complete Reference C++, McGraw-Hill.
Sedgewick, R. (2000), Algoritma Third edition In C part 5, Addison Wesley.

REKURSIF
PENDAHULUAN
Rekursif merupakan alat untuk memecahkan masalah dalam suatu fungsi atau
procedure yang memanggil dirinya sendiri. Definisi menurut Niclaus Wirth : An object
is said be recursive if it partially consist or is defines in terms of itself
Mengapa kita memerlukan rekursif? Karena ada beberapa kasus yang akan jauh
lebih mudah diselesaikan jika menggunakan rekursif.
Secara teori semua masalah yang dapat dipecahkan dengan rekursif dapat dipecahkan
dengan tanpa rekursif. Meskipun dalam kenyataa ini, rekursif sangat bermanfaat sebab
beberapa masalah mempunyai solusi yang sulit tanpa menggunakan rekursif.
Penggunaan rekursif kadang-kadang harus mengorbankan efisiensi dan kecepatan,
disamping itu ada masalah yang sering muncul dalam rekursif, yaitu eksekusi yang tidak
pernah berhenti, akibtanya memori tumpukan akan habis dan computer hank.
Pada dasarnya rekursif sering digunakan dalam perhitungan matematika, sebagai
contoh pertimbangan fungsi factorial dan juga bilangan Fibonacci

ISI
A. Faktorial
Salah satu contoh yang sering digunakan untuk menjelaskan rekursif adalah
fungsi fakorial. Fungsi factorial dari bilangan bulat positif n didefinisikan sebagai
berikut:
n!= n.(n-1)!, jika n>1
n!= 1, jika n=0, 1
contoh :
3!= 3. 2!
3!= 3. 2. 1!
3!= 3. 2. 1
3!= 6

Cara lain untuk mendefiniskan fungsi tersebut sebagai berikut:

Dalam definisi ini, nilai 3! dieksprsikan sebagai 3 x 2!, dengan kata lain untuk
menghitung factorial 3, kita harus menghitung factorial lain yaitu factorial 2.

Jika definisi nilai 2!=2 x 1!

Factorial 1 didefinisikan dengan nilai 1.

Jadi jika factorial 3!= 3 x 2 x 1, yang mana secara pasti mempunyai nilai sama
yang diperoleh dari definisi tanpa rekursif.

Kita dapat menuliskan fungsi penghitung factorial seperti dibawah ini,


Algoritma :
Function Faktorial (input n: integer) integer
Deklarasi
{tidak ada}
Deskripsi
if (n = 0) or (n = 1) then
return (1)
else
return (n * Faktorial(n-1))
endif
Bahasa C++ :
1. int Faktorial(int n)
2. {
3.
if ((n == 0) || (n == 1 ))
4.
return (1);
5.
else
6.
return (n * Faktorial(n-1));
7. }

Pada baris 3 dari fungsi diatas,


nilai n dicek sama dengan 0 atau 1,
jika ya, maka fungsi mengembalikan nilai 1 {baris 4},
jika tidak, fungsi mengembalikan nilai n * Faktorial (n -1)
{baris 6}

disinilah letak proses rekursif itu, perhatikan fungsi factorial ini memanggil
dirinya sendiri tetapi dengan parameter (n-1)

B. Bilangan Fibonacci
Fungsi lain yang dapat diubah kebentuk rekursif adalah perhitungan Fibonacci. Bilangan
Fibonacci dapat didefinisikan sebagai berikut:
fn = fn-1 + fn-2 untuk n>1
f0 = 0
f1 = 1
berikut ini adalah barisan bilangan Fibonacci mulai dari n=1
1 1

13

21 34

Algoritma yang dipakai


Function Fibonacci(input n:integer) integer
Deklarasi Lokal
{tidak ada}
Deskripsi
if (n ==1 || n==2) then
return (l)
else
return (Fibonacci(n-1)+Fibonacci(n-2))
endif
Contoh,
Untuk ukuran n= 4, proses perhitungan Fibonacci dapat dilakukan sebagai berikut:
f4 = f3+f2
f4 = (f2+f1) + f2
f4 = (1+1) +1
f4 = 3
C. Penerapan faktorial

Kombinasi
Function Kombinasi (input n, r : integer) real
Deklarasi
If (n < r) Then
return (0)
Else
return (Faktorial(n)/Faktorial(r)*Faktorial(n-r))
Endif

Permutasi
Function Permutasi (input n, r : integer) real
Deklarasi
{tidak ada}
Deskripsi
if (n< r) then
return (0)
else
return (Faktorial(n) / Faktorial(n-r))
endif

PENUTUP
Persoalan yang diselesaikan dengan iterasi dapat juga diselesaikan dengan rekursif.
Definisi rekursif harus tergantung kondisi, yang harus ada keadaan dimana kita dapat
menghentikannya.

SOAL-SOAL
1. Buat program untuk menghitung deret S = 1+2+3+4+5 menggunakan function
rekursi
2. Buat program untuk menghitung deret S = 2+4+6+8+10 menggunakan function
rekursi

Algoritma dan Pemrograman 2


Pertemuan Ke-5
Pencarian (Searching) 1

Disusun Oleh :
M u k i d i n, S.Kom.

Jurusan Teknik Informatika


STIKOM POLTEK CIREBON
2009

Algoritma dan Pemrograman 2


Judul Materi

: Pencarian (Searching) 1

Deskripsi Materi
: Materi ini membahas metode-metode searching
sequensial search menggunakan tipe data array untuk data urut maupun tidak urut
Tujuan Instruksional Khusus
:
1. Memahami dan membandingkan metode searching menggunakan tipe data array
2. Mendeskripsikan berbagai metode searching
3. Mengilustrasikan berbagai metode searching menggunakan tipe data array
Referensi
:
Buku Teks
Munir, Rinaldi (2005), Algoritma dan Pemrograman dalam Bahasa Pascal dan
C, Buku 2, Edisi Ketiga, Penerbit Informatika Bandung.
Charibaldi, N. (2004), Modul Kuliah Algoritma Pemrograman II, Edisi Kedua,
Yogyakarta

Buku Acuan/Referensi
Brassard, Gilles (1999), Fundamentals of algorithma, PrinteceHall.
Jarne, Stroustrup B. (1997), C++ Programming language, AT &T.
Kristanto, Andri (2003), Algoritma pemrograman C++, Graha Ilmu.
Schildt,Herbert (2000), The Complete Reference C++, McGraw-Hill.
Sedgewick, R. (2000), Algoritma Third edition In C part 5, Addison Wesley.

PENCARIAN (SEARCHING) 1
PENDAHULUAN
Pencarian di perlukan untuk mencari informasi khusus dari tabel pada saat lokasi
yang pasti dari informasi tersebut sebelumnya tidak diketahui. Pencarian selalu
dinyatakan dengan referensi pada adanya sekolompok data yang tersimpan secara
terorganisasi, kelompok data tersebut kita sebut tabel.
Array memungkinkan untuk menyimpan nilai yang bertipe sama. Operasi yang umum
dalam array adalah Sequential Search dan Binary search. Perbedaan dari kedua teknik ini
terletak pada keadaan data.

ISI
Pencarian Sequential (Sequential Search)
Pencarian Sequential digunakan apabila data dalam keadaan acak atau tidak terurut.
Pencarian Sequential atau sering disebut Pencarian Linear menggunakan prinsip sebagai
berikut data yang ada dibandingkan satu persatu secara berurutan dengan data yang
dicari.
Pencarian Sequential (Sequential Search) :
1. Sequential Search pada Array yang elemen datanya Belum Terurut
a. Metode tanpa Sentinel
b. Metode dengan sentinel
2. Sequential Search pada Array yang elemen datanya Sudah Terurut
c. Metode Sequential Tanpa Sentinel
d. Metode Sequential Search Dengan Sentinel

A. Proses pencarian sequential data belum terurut tanpa sentinel :

pada dasarnya pencarian ini hanya melakukan pengulangan dari elemen ke-1
sampai dengan jumlah data.

pada setiap pengulangan, dibandingkan data ke-i dengan yang dicari,

apabila sama berarti data telah ditemukan,

sebaliknya apabila sampai akhir pengulangan tidak ada yang sama, berarti
data tidak ada.

Contoh Program SeqSearch_BelumUrut_nonSentinel


/* SeqSearch_BelumUrut_nonSentinel
diasumsikan Array X sudah ada dan berisi data yang belum
terurut, nilai yang dicari adalah y dan hanya ada satu */
#include <iostream.h>
typedef enum boolean {false=0,true=1};
main()
{
int X[10]={20,50,10,30,90,60,70,80,40,100};
boolean found;
int i,y;
cout << "nilai yang dicari = ";
cin >> y;
found=false;
i=0;
while ((i<10) & (!found))
{
if (X[i]==y)
found = true;
else
i = i + 1;
}
if(found)
cout << y <<" ditemukan pada index array ke-" <<i;
else
cout << y <<" tidak ada dalam Array tersebut";
}

Cara lain untuk Sequential Search pada data Array X[n], adalah dengan menyediakan
satu tempat setelah elemen terakhir, yaitu pada X[n+1] dan menyimpan harga yang dicari
(misal y) pada posisi tersebut. Nilai yang dicari pada posisi elemen terakhir tersebut
dinamakan sentinel.
B. Proses pencarian sequential data belum terurut dengan sentinel :

pada dasarnya pencarian ini sama dengan proses pencarian sequential data
belum terurut tanpa sentinel yaitu melakukan pengulangan dari elemen ke-1
sampai dengan jumlah data.

pada setiap pengulangan, dibandingkan data ke-i dengan yang dicari,

apabila sama berarti data telah ditemukan,

perbedaannya dengan yang tanpa sentinel adalah ketika data ditemukan tapi
data tersebut adalah sentinel berarti data tidak ada.

Contoh Program SeqSearch_BelumUrut_Sentinel {cara1}


/* SeqSearch_BelumUrut_Sentinel{cara1}
diasumsikan Array X[0..10] sudah ada dan indeks ke 0..9 telah
berisi data yang belum urut, nilai yang dicari adalah y dan
hanya ada satu, y diletakkan di index ke-10 */
#include <iostream.h>
main()
{
int X[11]={20,50,10,30,90,60,70,80,40,100};
int i,y;
cout << "nilai yang dicari = ";
cin >> y;
X[10]=y;
i=0;
while (X[i]!=y)
i=i+1;
if (i>9)
cout << "tidak ada " << y << " dalam Array";
else
cout << y << " ditemukan dalam Array pada index ke-" << i;
}

Contoh Program SeqSearch_BelumUrut_Sentinel {cara2}


/* SeqSearch_BelumUrut_Sentinel {cara2}
diasumsikan Array X[0..10] sudah ada dan indeks ke 0..9 telah
berisi data yang belum terurut,nilai yang dicari adalah y dan
hanya ada satu, y diletakkan di index ke-10 */
#include <iostream.h>
typedef enum boolean {false=0,true=1};
main()
{
int X[11]={20,50,10,30,90,60,70,80,40,100};
int i,y;
boolean found;
cout << "nilai yang dicari = ";
cin >> y;
X[10]=y;
found=false;
i=0;
while (!found)
{ if (X[i]==y) found=true;
else i=i+1;
}
if (i==10)

cout << "tidak ada " << y << " dalam Array";
else
cout << y << " ditemukan dalam Array pada index ke-" << i;
}

C. Proses pencarian sequential data sudah terurut tanpa sentinel :


Dimulai dari elemen pertama pada Array, dilakukan pembandingan dengan
elemen yang dicari. Jika elemen dalam Array masih lebih kecil dari elemen yang dicari
maka pencarian diteruskan. Jika sudah lebih besar, pencarian dihentikan, dan bisa
dipastikan bahwa elemen yang dicari memang tidak ada.
Contoh Program SeqSearch_Urut_NonSentinel
/* SeqSearch_SudahUrut_NonSentinel
diasumsikan Array X sudah ada dan berisi data yang sudah terurut,
nilai yang dicri adalah y dan hanya ada satu */
#include <iostream.h>
typedef enum boolean {false=0,true=1};
main()
{
int X[10]={10,20,30,40,50,60,70,80,90,100};
int i,y;
boolean found;
cout << "nilai yang dicari = ";
cin >> y;
found=false;
i=0;
while ((i<9) & (!found) & (y>=X[i]))
{
if (X[i]==y)
found=true;
else
i=i+1;
}
if (found)
cout << y << " ditemukan dalam Array pada index ke-" << i;
else
cout << "tidak ada " << y << " dalam Array";
}

D. Proses pencarian sequential data sudah terurut dengan sentinel :


Jika digunakan cara pencarian dengan sentinel (elemen yang dicari disisipkan di
index setelah data terakhir), dan elemen yang dicari lebih besar dari data terakhir yang

ada di Array sehingga data yang dicari sama dengan data sentinel maka dapat
disimpulkan bahwa data tidak ditemukan.
Contoh Program SeqSearch_Urut_Sentinel {cara1}
/* SeqSearch_SudahUrut_Sentinel {cara 1}
diasumsikan Array X[1..nmax] sudah ada dan indeks 1..n telah
berisi data yang sudah terurut,nilai yang dicari adalah y dan
hanya ada satu */
#include <iostream.h>
typedef enum boolean {false=0,true=1};
main()
{
int X[11]={10,20,30,40,50,60,70,80,90,100};
int i,y;
boolean found;
cout << "nilai yang dicari = "; cin >> y;
X[10]=y;
found=false;
i=0;
while ((!found) & (X[i]<y))
i=i+1; //tidak ada pengecekkan ketemu atau tidak
if (i>9)
cout << "tidak ada " << y << " dalam Array";
else
if (X[i]==y)
cout << y <<" ditemukan dalam Array pada index ke-"<< i;
else
cout << "tidak ada " << y << " dalam Array";
}

Contoh Program SeqSearch_Urut_Sentinel {cara2}


/* SeqSearch_SudahUrut_Sentinel {cara 2}
diasumsikan Array X [0..10] sudah ada dan indeks 1..9 telah
berisi data yang sudah terurut,nilai yang dicri adalah y dan
hanya ada satu */
#include <iostream.h>
typedef enum boolean {false=0,true=1};
main()
{
int X[11]={10,20,30,40,50,60,70,80,90,100};
int i,y;
boolean found;
cout << "nilai yang dicari = "; cin >> y;
X[10]=y;
found=false;
i=0;
while ((!found) & (X[i]<=y))

if (X[i]==y)
found=true;
else
i=i+1;

}
if (i==10)
cout << "tidak ada " << y << " dalam Array";
else
if (found)
cout << y << " ditemukan dalam Array pada index ke-" << i;
else
cout << "tidak ada " << y << " dalam Array";
}

PENUTUP
Sequensial Search mempunyai empat macam metode, dan metode pencarian ini
dapat dipakai untuk kelompok data yang urut maupun yang tidak urut.

SOAL-SOAL
Tulislah program untuk mencari data bertipe rekaman menggunakan salah satu metode
pencarian. Banyaknya data 10. Tipe rekaman mempunyai empat field, yaitu:

nomorinduk, bertipe bilangan bulat

nama, bertipe string

alamat, bertipe string

golongan, bertipe char (dapat bernilai A, Z)

Data dicari melalui nomorinduknya. Ketika data yang dicari ditemukan, tampilkan tiga
field lainnya.

Algoritma dan Pemrograman 2


Pertemuan Ke-6
Pencarian (Searching) 2

Disusun Oleh :
M u k i d i n, S.Kom.

Jurusan Teknik Informatika


STIKOM POLTEK CIREBON
2009

Algoritma dan Pemrograman 2


Judul Materi

: Pencarian (Searching) 2

Deskripsi Materi
: Materi ini membahas metode searching binary
search menggunakan tipe data array untuk data urut
Tujuan Instruksional Khusus
:
1. Memahami dan membandingkan metode searching menggunakan tipe data array
2. Mendeskripsikan berbagai metode searching
3. Mengilustrasikan berbagai metode searching menggunakan tipe data array
Referensi
:
Buku Teks
Munir, Rinaldi (2005), Algoritma dan Pemrograman dalam Bahasa Pascal dan
C, Buku 2, Edisi Ketiga, Penerbit Informatika Bandung.
Charibaldi, N. (2004), Modul Kuliah Algoritma Pemrograman II, Edisi Kedua,
Yogyakarta

Buku Acuan/Referensi
Brassard, Gilles (1999), Fundamentals of algorithma, PrinteceHall.
Jarne, Stroustrup B. (1997), C++ Programming language, AT &T.
Kristanto, Andri (2003), Algoritma pemrograman C++, Graha Ilmu.
Schildt,Herbert (2000), The Complete Reference C++, McGraw-Hill.
Sedgewick, R. (2000), Algoritma Third edition In C part 5, Addison Wesley.

PENCARIAN (SEARCHING) 2
PENDAHULUAN
Pencarian dengan menggunakan tipe data Array dapat digunakan metode Sequential
Search dan Binary search. Perbedaan dari kedua teknik ini terletak pada keadaan data.

ISI
Pencarian Biner (Binary Search)
Salah satu syarat pencarian biner (Binary Search) dapat dilakukan adalah data sudah
dalam keadaan terurut. Dengan kata lain, apabila data belum dalam keadaan urut,
pencarian biner tidak dapat dilakukan.
Dalam kehidupan sehari-hari, sebenarnya kita sering menggunakan pencarian biner,
misalnya pada saat ingin mencari suatu kata dalam kamus.
Langkah dari pencarian biner adalah sebagai berikut:
1. mula-mula diambil posisi awal=1 dan posisi akhir=n
2. kemudian kita cari posisi data tengah dengan rumus posisi tengah = (posisi awal +
posisi akhir) div 2
3. kemudian data yang dicari dibandingkan dengan data tengah
a. jika sama, data ditemukan, proses selesai.
b. jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap
sama dengan posisi tengah - 1.
c. jika lebih besar, proses dilakukan kembali tetapi posisi awal dianggap
sama dengan posisi tengah + 1.
4. ulangi langkah 2 sampai data ditemukan, atau tidak ditemukan.
5. Pencarian biner ini akan berakhir jika data ditemukan atau posisi awal lebih besar
dari pada posisi akhir. Jika posisi awal sudah lebih besar daripada posisi akhir
berarti data tidak ditemukan.

Contoh :
Misalkan kita ingin mencari angka 14 pada sekumpulan data urut berikut :
1

10

12

13

14

20

24

29

awal

tengah

akhir

Jawab:
1. mula-mula dicari data tengah, dengan rumus tengah = (awal+akhir) div 2 = (1+9)
div 2 = 5, berarti data tengah adalah data ke-5, dengan nilai 13
2. data yang kita cari adalah 14, bandingkan nilai 14 dengan data tengah.
3. karena 14 > 13, berarti proses dilanjutkan tetapi posisi awal dianggap sama
dengan posisi tengah+1 atau 6

10

12

13

14

20

24

29

awal

tengah

akhir

4. data tengah yang baru didapat dari rumus (6+9) div 2 = 7, berarti data tengah
yang baru adalah data ke-7, yaitu 20.
5. data yang kita cari adalah 14, bandingkan nilai 14 dengan nilai tengah.
6. karena 14 < 20, berarti proses dilanjutkan, tetapi posisi akhir dianggap sama
dengan posisi tengah-1 atau 6.
1

10

12

13

14

20

24

29

awal
akhir
tengah
7. data tengah yang baru didapat dari rumus (6+6) div 2 = 6, berarti data tengah
yang baru adalah data ke-6, yaitu 14
8. data yang kita cari adalah 14, bandingkan dengan data tengah, ternyata sama.
9. jadi data yang ditemukan pada indeks ke-6

Bagaimana jika data yang dicari tidak ditemukan, misalnya data yang dicari 16?
Pencarian biner ini akan berakhir jika data ditemukan atau posisi awal lebih besar dari
pada posisi akhir. Jika posisi awal sudah lebih besar daripada posisi akhir berarti data
tidak ditemukan.
Secara umum algoritma pencarian biner, adalah sebagai berikut :
(Data diurutkan lebih dahulu, data disimpan di data array, x adalah nilai yang dicari)
1. awal 1
2. akhir N
3. ketemu false
4. selama (awal<=akhir) dan (not ketemu) kerjakan baris 5 sampai 8.
5. tengah (awal+akhir) div 2
6. jika (data [tengah] = x) maka ketemu true
7. jika (x < data [tengah] ) maka akhir tengah-l
8. jika (x > data [tengah] maka awal tengah+1.
9. if (ketemu) maka tengah adalah indeks dari data yang dicari, jika tidak
data tidak ditemukan.
Contoh 1 pemakaian pencarian binary :
/* BinSearch_SudahUrut
diasumsikan Array X sudah ada dan berisi data yang sudah terurut,
nilai yang dicari adalah y dan hanya ada satu */
#include <iostream.h>
typedef enum boolean {false=0,true=1};
main()
{
int X[10]={10,20,30,40,50,60,70,80,90,100};
int i,y,j,k;
boolean found;
cout << "nilai yang dicari = ";
cin >> y;
found = false;
i=0;
j=10;
while ((!found) & (i <= j))
{
k=(i+j)/2;
if (y == X[k])
found=true;

else
if (y<X[k])
j=k-1;
//i tetap
else
i=k+1; //j tetap
}
if (found)
cout<< y<<"ditemukan dalam Array pada index ke-" << k;
else
cout << "tidak ada " << y << " dalam Array";
}

Contoh 2 pemakaian pencarian binary :


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int binary_search (int array[], int value, int size)
{
int found= 0;
int high= size, low= 0, mid;
Mid= (high+low)/2;
printf(\n\nLooking for %d\n, value);
while ((! Found) && (high >= low))
{
printf(Low %d Mid %d High %d\n, low, mid, high);
if (value == array[mid])
Found= 1;
else if (value < array[mid])
High= mid 1;
else
Low= mid + 1;
Mid= (high + low) / 2;
}
return (( found) ? mid: -1);
}
main()
{
int array[100], I;
clrscr();
for (i=0; i<100; i++)
array[i]= i;
printf(Result of search %d\n,binary_search(array, 33, 100));
printf(Result of search %d\n,binary_search(array, 75, 100));
printf(Result of search %d\n,binary_search(array, 1001, 100));
getche();
}

Program ini dimaksudkan untuk mengamati jumlah operasi searching yang harus
dilakukan untuk menemukan masing-masing nilai.

PENUTUP
Metode Binary Search dapat dipakai hanya untuk data yang urut atau telah
diurutkan.

SOAL-SOAL
1. Ilustrasikan pencarian nilai 25 pada kumpulan data dibawah. Gunakanlah metode
Binary Search.
12 15 4 25 45 10 19 9 32 33
2. Ilustrasikan pencarian nilai 20 pada kumpulan data dibawah. Gunakanlah metode
Binary Search.
12 15 4 25 45 10 19 9 32 33
3. Tulislah program untuk mengurutkan data bertipe rekaman menggunakan salah satu
metode pengurutan. Tipe rekaman yang harus diurutkan mempunyai empat data, yaitu:

nomorinduk, bertipe bilangan bulat

nama, bertipe string

alamat, bertipe string

golongan, bertipe char (dapat bernilai A, Z);

procedure pengurutan menerima satu parameter, yaitu bilangan bulat yang dapat bernilai
1, 2, atau 3. Apabila bernilai 1, maka data diurutkan menurut nomorinduk, apabila
bernilai 2, maka data diurutkan menurut nama, dan apabila bernilai 3, maka data
diurutkan menurut golongan.

Algoritma dan Pemrograman 2


Pertemuan Ke-7
Pencarian (Sorting) 1

Disusun Oleh :
M u k i d i n, S.Kom.

Jurusan Teknik Informatika


STIKOM POLTEK CIREBON
2009

Algoritma dan Pemrograman 2


Judul Materi

: Pengurutan (Sorting) 1

Deskripsi Materi
: Materi ini membahas metode sorting langsung
Metode Penyisipan Langsung (Straight Insertion Sort), Metode Seleksi (Straight
Selection Sort) dan Metode Penukaran (Exchange selection) / Gelembung (Bubble
Sort) menggunakan tipe data array
Tujuan Instruksional Khusus
:
1. Memahami dan membandingkan metode sorting menggunakan tipe data array dan
algoritma rekursif
2. Mengimplemetasikan penggunaan tipe data array
3. Mendeskripsikan berbagai metode sorting
4. Mengilustrasikan berbagai metode sorting menggunakan tipe data array
Referensi
:
Buku Teks
Munir, Rinaldi (2005), Algoritma dan Pemrograman dalam Bahasa Pascal dan
C, Buku 2, Edisi Ketiga, Penerbit Informatika Bandung.
Charibaldi, N. (2004), Modul Kuliah Algoritma Pemrograman II, Edisi Kedua,
Yogyakarta

Buku Acuan/Referensi
Brassard, Gilles (1999), Fundamentals of algorithma, PrinteceHall.
Jarne, Stroustrup B. (1997), C++ Programming language, AT &T.
Kristanto, Andri (2003), Algoritma pemrograman C++, Graha Ilmu.
Schildt,Herbert (2000), The Complete Reference C++, McGraw-Hill.
Sedgewick, R. (2000), Algoritma Third edition In C part 5, Addison Wesley.

PENGURUTAN (SORTING) 1
PENDAHULUAN
Sorting adalah suatu proses pengurutan data yang sebelumnya disusun secara acak
atau tidak teratur menjadi urut dan teratur menurut suatu aturan tertentu.
Biasanya pengurutan terbagi menjadi dua yaitu :

ascending (pengurutan dari karakter/angka kecil ke karakter/angka besar).

descending (pengurutan dari karakter/angka besar ke karakter/angka kecil).

ISI
Untuk melakukan proses pengurutan dapat menggunakan beberapa metode antara lain :
A. Metode pengurutan langsung :
1. Metode Penyisipan Langsung (Straight Insertion Sort)
2. Metode Seleksi (Straight Selection Sort)
3. Metode Penukaran (Exchange selection) / Gelembung (Bubble Sort)
B. Metode pengurutan tidak langsung :
1. Shell Sort
2. Quick Sort
3. Merge Sort

A. Metode pengurutan langsung :


1. Metode Penyisipan Langsung (Straight Insertion Sort)
Dapat dibagi menjadi 2 bagian

Bagian sebelah kiri data sudah terurut (tujuan)

Bagian sebelah kanan data belum terurut (sumber)

Langkah-langkah :
1

: Baca array elemen yang akan diurutkan (n)

2 : Kerjakan langkah 3 sampai langkah 6 untuk i : 1 s/d n-1


3

: Tentukan elemen yang akan disisipkan (Temp = A [i] ;

j = i-1;)
4

: Kerjakan langkah 5 selama temp <A [j] dan j >= 0;

: A [j+1]= A[j] ; j =j-1;

: Tempatkan elemen A [j+1] = Temp;

: Selesai

Algoritma Straight Insertion Sort


Deklarasi
I,J,K,N : Integer
Temp : real
A : array [1..20] of real
Deskripsi
Input(N) {maksimal N=20}
K traversal [1..N]
Input (Af) {masukkan data sebanyak N}
I traversal [2..N]
Temp A1
J I-1
While (temp <Aj) and (J>=1) do
Aj+1 Aj
J J-1
Endwhile
Aj+1 Temp

Ilustrasi Insertion Sort


Temp =

A [0]

A [1]

A [2]

A [3]

A [4]

A [5]

A[ i ]

j=i-1

2. Metode Seleksi (Straight Selection Sort)


Selection sort dimulai dengan menyelesaikan elemen array (misalnya elemen
pertama). Kemudian sorting mencari keseluruhan array hingga menemukan nilai yang
terkecil. Sorting menempatkan nilai terkecil pada elemen tersebut, memilih elemen kedua
dan mencari elemen terkecil kedua.

Langkah-langkah Straight Selection Sort


1 : Baca array elemen yang diurutkan (n)
2 : Kerjakan langkah-langkah 3 sampai langkah 5
untuk i=1 s/d n-1
3 : Tentukan lokasi awal data terkecil Mindeks =1;
kerjakan langkah 4 untuk j=i+1 s/d n
4 : Cari data terkecil dan catat lokasinya. Test
apakah AMindeks > Aj?
Jika ya, catat Mindeks = j
5 : Tukar nilai Amindeks dengan Aj
6 : Selesai

Ilustrasi Straight Selection Sort


44

33

33

22

33

44

44

44

55

55

55

55

22

22

22

33

11

11

11

11

11

11

11

11

44

44

33

22

55

55

55

55

33

33

44

44

22

22

22

33

11

11

11

22

22

22

44

33

33

55

55

44

33

44

55

3. Metode Penukaran (Exchange selection) / Gelembung (Bubble Sort)

metode pertama yang paling banyak dipelajari pemrogram.

Sederhana
a. bubble sort tidak efisien dan menyita banyak waktu prosessor lebih banyak
daripada teknik sorting yang lain.
b. tidak lebih dari 30 atau kurang dari 30 elemen, penggunaan bubble sort masih
sangat baik

Metode gelembung / penukaran adalah metode yang mendasarkan penukaran 2


buah elemen untuk mencapai keadaan urut yang diinginkan

Langkah-langkah :
1

: Baca array elemen yang diurutkan (N)

: Kerjakan langkah 3 untuk I=1 s/d N-1

: Kerjakan langkah 4 untuk J=1 s/d N-1

4 : Cek apakah A[J]>A[J+1}


5

: Selesai

Ilustrasi Bubble Sort


0

44

33

33

33

33

44

44

44

55

55

55

22

22

22

22

55

11

11

11

11

33

33

33

44

44

22

22

22

44

11

11

11

55

55

55

33

22

22

22

22

33

11

11

11

11

33

33

44

44

44

44

55

55

55

55

Program berikut memakai bubble sort untuk mengurutkan data array berisi 30 nilai acak :
/* Bubble Sort */
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
void bubble_sort(int array[], int size)
{
int temp, i, j;
for (i=0; i<size-1; i++)
for (j=0; j<size-1-i; j++)
if (array[j] > array[j+1])
{
temp= array[j];
array[j]= array[j+1];
array[j+1]= temp;
}
}

PENUTUP
Ketiga metode pengurutan langsung yang dibahas pada pertemuan ini hanya
beberapa dari metode pengurutan langsung lainnya. Banyak metode lain untuk
mengurutkan data. Metode-metode tersebut bertujuan sama yaitu mengurutkan data, yang
berbeda hanya cara yang mempengaruhi kecepatan untuk jumlah data tertentu.

SOAL-SOAL
1. Pergunakan ketiga metode pengurutan langsung di atas untuk menampilan data dalam
pengolahan data nilai suatu mata kuliah.
Buatlah menu untuk memilih metode yang dipakai, dan pilihan field yang akan dipakai
sebagai key juga harus bisa dipilih (misal berdasarkan NIM atau Nilai Akhir).
Struktur Data yang dipakai sebagai berikut :
Deklarasi
TYPE
DataMhs = Record
< NIM : String
Nama : String
UTS,UAS,Prakt,NA : real {0 s/d 100}
>
BykMhs, i, j : integer
Mahasiswa : Array[1..100] of DataMhs
Temp
: DataMhs
Nilai Akhir (NA) dihitung dengan rumus : NA = 25%*UTS+50%*UAS+25%*Prakt
Proses yang dilakukan dalam program ini :

memasukkan data,

sorting, dan

tampilkan data.

2. Carilah metode pengurutan langsung lainnya selain ketiga metode yang dibahas pada
pertemuan ini.

Algoritma dan Pemrograman 2


Pertemuan Ke-8
Pencarian (Sorting) 2

Disusun Oleh :
M u k i d i n, S.Kom.

Jurusan Teknik Informatika


STIKOM POLTEK CIREBON
2009

Algoritma dan Pemrograman 2


Judul Materi

: Pengurutan (Sorting) 2

Deskripsi Materi
: Materi ini membahas metode sorting tak langsung
Metode Shell Sort, Metode Quick Sort dan Metode Merge Sort dengan menggunakan
tipe data array dan algoritma rekursif
Tujuan Instruksional Khusus
:
1. Memahami dan membandingkan metode sorting menggunakan tipe data array dan
algoritma rekursif
2. Mengimplemetasikan penggunaan tipe data array
3. Mendeskripsikan berbagai metode sorting
4. Mengilustrasikan berbagai metode sorting menggunakan tipe data array
Referensi
:
Buku Teks
Munir, Rinaldi (2005), Algoritma dan Pemrograman dalam Bahasa Pascal dan
C, Buku 2, Edisi Ketiga, Penerbit Informatika Bandung.
Charibaldi, N. (2004), Modul Kuliah Algoritma Pemrograman II, Edisi Kedua,
Yogyakarta

Buku Acuan/Referensi
Brassard, Gilles (1999), Fundamentals of algorithma, PrinteceHall.
Jarne, Stroustrup B. (1997), C++ Programming language, AT &T.
Kristanto, Andri (2003), Algoritma pemrograman C++, Graha Ilmu.
Schildt,Herbert (2000), The Complete Reference C++, McGraw-Hill.
Sedgewick, R. (2000), Algoritma Third edition In C part 5, Addison Wesley.

PENGURUTAN (SORTING) 2
PENDAHULUAN
Untuk melakukan proses pengurutan tidak langsung dapat menggunakan beberapa
metode :
4. Shell Sort
5. Quick Sort
6. Merge Sort

B. Metode pengurutan tidak langsung :


1. Shell Sort
Disebut juga dengan istilah metode pertambahan menurun (dimishing increment)
dari Donald L.Shell. Metoda ini memanfaatkan penukaran sepasang elemen untuk
mencapai keadaan urut. Dua buah elemen ditukarkan dengan jarak tertentu.
Rumus : Jarak pertama = N div 2
Jarak berikutnya = jarak sebelumnya div 2
Contoh :
24

46

11

26

57

38

27

20

17

A[1]

A[2]

A[3]

A[4]

A[5]

A[6]

A[7]

A[8]

A[9]

Sehingga : Jarak pertama = 9 div 2 = 4


Jarak kedua = 4 div 2 = 2
Jarak ketiga = 2 div 2 = 1

Ilustrasi
Jarak

A[1]

A[2]

A[3]

A[4]

A[5]

Awal

24

46

11

26

57

38

Jarak = 4

24

46

11

26

57

24

38

11

26

24

38

11

24

38

24

Jarak = 2

Jarak = 1

A[6] A[7]

A[8]

A[9]

27

20

17

38

27

20

17

57

46

27

20

17

26

57

46

27

20

17

11

20

57

46

27

26

17

38

11

20

17

46

27

26

57

11

38

24

20

17

46

27

26

57

11

20

24

38

17

46

27

26

57

11

20

17

38

24

46

27

26

57

11

20

17

38

24

46

27

26

57

11

20

17

38

24

46

27

26

57

11

20

17

38

24

26

27

46

57

11

20

17

38

24

26

27

46

57

11

20

17

38

24

26

27

46

57

11

17

20

38

24

26

27

46

57

11

17

20

38

24

26

27

46

57

11

17

20

24

38

26

27

46

57

11

17

20

24

26

38

27

46

57

11

17

20

24

26

27

38

46

57

11

17

20

24

26

27

38

46

57

11

17

20

24

26

27

38

46

57

Program berikut, memakai shell sort untuk mengurutkan array yang berisi 50 nilai acak:
Contoh Program Shell Sort :
/* Shell Sort */
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
void shell_sort(int array[], int size)
{
int temp, gap, i, exchange_occurred;
gap= size/2;
do {
do {
exchange_occurred= 0;
for (i=0; i<size-gap; i++)
if(array[i] > array[i+gap])
{
temp= array[i];
array[i]= array[i+gap];
array[i+gap]= temp;
exchange_occurred= 1;
}
} while (exchange_occurred);
} while (gap= gap/2);
}
main()
{
int values[50], i;
clrscr();
//data yang belum diurutkan diambil dari hasil random
cout << "data yang belum urut : "<< endl;
for (i=0; i<50; i++)
{
values[i]= rand()%100;
cout << values[i] << " ";
}
cout << endl;
shell_sort(values, 50);
//data yang sudah diurutkan
cout << "data yang sudah diurutkan : "<< endl;
for (i=0; i<50; i++)
cout << values[i] << " ";
getche();
}

2. Quick Sort

Sering disebut dengan partion exchange sort.

Langkah-langkah :

a. Misal vektor A yang memiliki N elemen.


b. Dipilih sembarang elemen, biasanya elemen pertama, misal sebut saja X.
c. Kemudian, semua elemen tersebut dengan menempatkan X pada posisi J
sedemikian rupa sehingga :
i. elemen 1 s/d J-1 memiliki nilai lebih kecil dari X dan
ii. elemen ke J+1 s/d N memiliki nilai lebih besar dari X.
d. Dengan demikian, terdapat dua buah subvektor.
Contoh :
1

24

46

11

26

57

38

27

20

17

Ilustrasi
1

24

46

11

Subvektor Kiri
11

20

1
11

11

26

57

20

27

X
17

24

J-1
20

38

20

17

Subvektor Kanan
46

26

57

38

J+1

27
N

17

24

46

26

57

38

27

17

24

26

38

27

46

57

27

46

57

38

46

57

11

17

20

24

26

11

17

20

24

26

38

27

Contoh Program Quick Sort :


/* Quick Sort*/
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
void quick_sort(int array[], int first, int last)
{
int temp, low, high, list_separator;
low= first;
high= last;
list_separator= array[(first+last)/2];
do {
while (array[low]<list_separator) low++;
while (array[high]>list_separator) high--;
if (low<=high)
{
temp= array[low];
array[low++]= array[high];
array[high--]= temp;
}
} while (low<=high);
if (first<high) quick_sort(array, first, high);
if (low<last) quick_sort(array, low, last);
}
main()
{
int values[100], i;
clrscr();
//data yang belum diurutkan diambil dari hasil random
cout << "data yang belum urut : "<< endl;
for (i=0; i<100; i++)
{
values[i]= rand()%100;
cout << values[i] << " ";
}
cout << endl;
quick_sort(values, 0, 99 );
//data yang sudah diurutkan
cout << "data yang sudah diurutkan : "<< endl;
for (i=0; i<100; i++)
cout << values[i] << " ";
getche();
}

3. Merge Sort
Ide metode Merge Sort :
1. Pembagian array data menjadi dua bagian (bagian kiri dan bagian kanan)
Ulangi langkah 1 secara rekursi terhadap kedu abagian tersebut, sampai tiap
subarray hanya terdiri dari satu elemen.
2. Gabungkan masing-masing bagian itu sekaligus mengurutkannya, sesuai pohon
yang terbentuk saat membagi array, sampai membentuk array pertama saat
sebelum dibagi.
Ulangi langkah 2 secara rekursi pula.
Ilustrasi Merge Sort
I

25

12

28

15

20

tengah =
(1+7) div 2
25

12

28

12

tengah

25

tengah

20

tengah

tengah

25

15

12

28

15

20

tengah

28

15

20

II
2

Deklarasi
Type TipeData : Array[1..100] of integer
Data : TipeData
n,i : integer
Procedure MergeSort(input/output Data : TipaData;
input awal,akhir : integer)
Deskripsi
output(Banyaknya elemen array :)
input(n)
i traversal[1..n]
Datai random(n)
output(Data yang belum terurut : )
output(Datai)

Algoritma MergeSortRekursi

i traversal[1..n]

MergeSort(Data,1,n)
output(Data yang sudah terurut :)
i traversal[1..n]
output(Datai)

Procedure MergeSort(input/output Data : TipaData;


input awal,akhir : integer)
Deklarasi Lokal
tengah : integer
Procedure Merge(input/output Data : TipaData;
input awalkiri,akhirkiri,
awalkiri,akhirkiri : integer)
Deskripsi
if (awal<akhir) then
tengah (awal+akhir) div 2
MergeSort(Data,awal,tengah)
MergeSort(Data,tengah+1,akhir)
Merge(Data,awal,tengah,tengah+1,akhir)
endif

Procedure Merge(input/output Data : TipaData;


input awalkiri,akhirkiri,
awalkiri,akhirkiri : integer)
Deklarasi Lokal
temp : TipeData
i,kiri,kanan : integer
Deskripsi
kiri awalkiri
kanan awalkanan
i awalkiri

while (kiri<=akhirkiri) or (kanan<=akhirkanan) do


if (Datakiri<=Datakanan) or (kanan>akhirkanan) then
tempi Datakiri
kiri kiri+1
endif
if (Datakiri>Datakanan) or (kiri>akhirkiri) then
tempi Datakanan
kanan kanan+1
endif
ii+1
endwhile
i traversal[awalkiri..akhirkanan]
Datai tempi

MergeSort bila ditest dengan data dari ilustrasi

MergeSort(Data,1,1)

{tidak mengerjakan apaapa}

MergeSort(Data,1,2)

MergeSort(Data,2,2)

{tidak mengerjakan apaapa}

MergeSort(Data,1,

Merge(Data,1,1,2,2)

{gabung & urutkan data}

MergeSort(Data,3,3)

{tidak mengerjakan apa-

4)

apa}
MergeSort(Data,3,4)

MergeSort(Data,4,4)

{tidak mengerjakan apaapa}

MergeSort(Data,1

MergeSort(Data,3,3,4,4)

Merge(Data,1,2,3,4)

,7)

{gabung & urutkan data}

{gabung & urutkan data}

MergeSort(Data,5,5)

{tidak mengerjakan apaapa}

MergeSort(Data,5,6)

MergeSort(Data,6,6)

{tidak mengerjakan apaapa}

10

MergeSort(Data,5,

Merge(Data,5,5,6,6)

7)
MergeSort(Data,7,7)
12

11

Merge(Data,5,6,7,7)

Merge(Data,1,4,5,
7)

{gabung & urutkan


data}

{tidak mengerjakan apaapa}


{gabung & urutkan data}

{gabung & urutkan data}

Keterangan :

= memanggil
= alur logik

PENUTUP
Proses pengurutan tidak langsung dapat menggunakan beberapa metode : Shell
Sort, Quick Sort dan Merge Sort. Metode pengurutan tak langsung, implementasinya
dapat menggunakan fungsi rekursi.

SOAL-SOAL
1. Tambahkan ketiga metode pengurutan tak langsung di atas untuk menampilan data
dalam pengolahan data nilai suatu mata kuliah pada soal latihan kuliah pertemuan ke8.
2. Buat program menghitung nilai tengah (median) dari data-data integer yang diinput
lewat keyboard, dan cari nilai Z dengan Z = (median)2.
(Keterangan : cari dengan bantuan procedure pengurutan atau sorting. Perhatikan
untuk data yang jumlahnya ganjil atau genap)
Misal :
Input :

Data ke-1 = 3
Data ke-2 = 2
Data ke-3 = 6
Data ke-4 = 5

Output :

Median = 4
Z = 16

Algoritma dan Pemrograman 2


Pertemuan Ke-9
Pointer 1

Disusun Oleh :
M u k i d i n, S.Kom.

Jurusan Teknik Informatika


STIKOM POLTEK CIREBON
2009

Algoritma dan Pemrograman 2


Judul Materi

: Pointer 1

Deskripsi Materi
: Materi ini membahas tipe data pointer,
pendeklarasian dan cara pengaksesannya
Tujuan Instruksional Khusus
:
1. Mendefinisikan dan menggunakan tipe data pointer
2. Mendeskripsikan tipe data pointer
3. Memahami kegunaan pointer
Referensi
:
Buku Teks
Munir, Rinaldi (2005), Algoritma dan Pemrograman dalam Bahasa Pascal dan
C, Buku 2, Edisi Ketiga, Penerbit Informatika Bandung.
Charibaldi, N. (2004), Modul Kuliah Algoritma Pemrograman II, Edisi Kedua,
Yogyakarta

Buku Acuan/Referensi
Brassard, Gilles (1999), Fundamentals of algorithma, PrinteceHall.
Jarne, Stroustrup B. (1997), C++ Programming language, AT &T.
Kristanto, Andri (2003), Algoritma pemrograman C++, Graha Ilmu.
Schildt,Herbert (2000), The Complete Reference C++, McGraw-Hill.
Sedgewick, R. (2000), Algoritma Third edition In C part 5, Addison Wesley.

POINTER 1
PENDAHULUAN
Variabel pointer sering disebut sebagai variabel yang menunjuk obyek lain,
karena variabel pointer atau pointer adalah variabel yang berisi alamat di memori
komputer dari suatu obyek lain, yaitu obyek yang ditunjuk oleh pointer yang mempunyai
nilai tertentu.

ISI
A. Bentuk umum deklarasi variable pointer :
Algoritma (Pseodocode) :
nama_pointer : pointer to tipedata
C++ :
tipedata

*nama_pointer;

(deklarasi pointer null)

nama_pointer = (tipedata *) malloc(size_t size);

(deklarasi pointer kosong)


Dengan :

tipedata adalah tipe dasar nilai yang berada di memori yang ditunjuk oleh pointer.

nama_pointer adalah nama variable pointer.

(*) adalah operator memori yang fungsinya untuk mengembalikan nilai variable pada

alamatnya yang ditentukan oleh operand.

malloc(size_t size) adalah deklarasi pengalokasian memori kosong dengan

ukuran kapasitas sebesar size

Ilustrasi :
nama_pointer

pointer null

pointer kosong
nama_pointer
(isi)null
(alamat)

Contoh :
Algoritma (Pseodocode) :
p : pointer to integer
nilai : pointer to real
s : pointer to char
C++ :
int *p;
float *nilai;
char *s;

Contoh lain dalam bahasa C++ dan dengan ilustrasi :


int *p;

int *q;
q
p

p=(int *) malloc(sizeof(int));
p
(isi)null

q=(int *) malloc(sizeof(int));
q
(isi)null

B. Pengaksesan dengan Pointer


Untuk mengakses nilai/isi pada memori yang ditunjuk oleh pointer dipakai simbol *
Contoh :
*p = 10;
*q = 20;

Pointer menunjuk memori yang ditunjuk pointer lain :


Contoh :
p = q;

berarti p menunjuk ke alamat memori yang ditunjuk oleh q, dan dengan demikian p dan q
menunjuk alamat memori yang sama.
Ilustrasi :

*p = 10

*q = 20

10

20

p=q
p

10
q

20

Contoh program Pointer 1:


#include <iostream.h>
#include <alloc.h>
#include <stdlib.h>
void main()

{
int *p, *q;
p=(int *)malloc(sizeof(int));
q=(int *)malloc(sizeof(int));
*p=10;
*q=20;
cout<<"Isi info pointer :\n";
cout<<"*p = "<<*p<<endl;
cout<<"*q = "<<*q<<endl;
cout<<"\nAlamat register pointer :\n";
cout<<"p = "<<p<<endl;
cout<<"q = "<<q<<endl;
p=q;
cout<<"\nKondisi akhir isi info pointer :\n";
cout<<"*p = "<<*p<<endl;
cout<<"*q = "<<*q<<endl;
}

Output :

C. Operator Pointer
Ada beberapa operator yang bisa digunakan dalam pointer, yaitu :
1. Operator alamat (yang dilambangkan dengan symbol &)
2. Operator unary yang mengembalikan alamat dari operandnya.

Pointer menunjuk variabel statis :


Misalkan px adalah variabel bertipe pointer yang akan berisi alamat variabel lain
yang bertipe integer, maka dideklarasikan :
int x;
int *px;

Untuk mengatur pointer agar menunjuk ke variabel lain, mula-mula pointer harus diisi
dengan alamat dari variabel yang akan ditunjuk.

Operator & digunakan untuk menyatakan alamat variabel statis yang akan ditunjuk.
Contoh :
px = &x;

Ilustrasi :
int *px;

int x=10;

px

x
10

px = &x
px

x
10

Jika suatu variabel statis sudah ditunjuk oleh pointer, isi variabel tersebut dapat diakses
melalui variabel itu sendiri (pengaksesan langsung) atau melalui pointer (pengaksesan
tidak langsung).

Pengaksesan langsung dilakukan langsung oleh variabel statisnya (bukan pointernya).


Contoh :
x = 10

Operator indirection (pengaksesan tidak langsung), berupa simbol *


Contoh :
*px = 10

Ilustrasi :
value1 = 5;
value1
5

mypointer = &value1;
mypointer

*mypointer = 10;
mypointer

value1

x5 10

value1
5

Contoh Program Pointer 2 :


#include<iostream.h>
main()
{ int value1 = 5, value2 = 15;
int * mypointer;
mypointer = &value1;
*mypointer = 10;
cout << "\nvalue1 = " << value1;
cout << \n*mypointer = " << *mypointer;
mypointer = &value2;
*mypointer = 20;
cout << "\nvalue2 = " << value2;
cout << "\n*mypointer = "<<*mypointer;
}

Output :

Contoh program Pointer 3 :

a
b
c

#include <iostream.h>
main()
{
int x,y; //x dan y bertipe int
int *px; //deklarasi px, pointer yang menunjuk obyek
//bertipe int
x=87;
px=&x;
//px berisi alamat dari x
y =*px;
//y berisi nilai yang ditunjuk px
cout<<"alamat x= "<<&x<<endl;
cout<<"nilai x= "<<x<<endl;
cout<<"alamat yang ditunjuk oleh px= "<<px<<endl;
cout<<"nilai yang ditunjuk oleh px= "<<*px<<endl;
cout<<"alamat y= "<<&y<<endl;
cout<<"nilai y= "<<y;
}

Output :

Ilustrasi :
1

int
x
int
px

int
y

x=87;
x
87

px

px = &x;

y=*px;

y
87

PENUTUP
Penerapan pointer yang paling umum yaitu menciptakan variable dinamis, yang
memungkinkan untuk memakai memori bebas (memori yang belum dipakai) selama
eksekusi program.

SOAL-SOAL
1. Apa output dari program berikut :
#include<iostream.h>
main()

{ int p = 5, q = 15;
int *m;
m = &q;
q = 10;
cout << "\np = " << p;
cout << "\nq = " << q;
cout << "\n*m = " << *m;
*mypointer = p;
mypointer = &p;
cout << "\np = " << p;
cout << "\nq = " << q;
cout << "\n*m = " << *m;
}

2. Apa output dari program berikut :


#include<iostream.h>
#include<alloc.h>
main()
{ int j = 2, k = 3;
int *p,*q,*r;
p =(int *)malloc(sizeof(int));
q =(int *)malloc(sizeof(int));
r = p;
*p = k;
*q = j;
k = *q;
r = &j;
cout << "\nj = " << j;
cout << "\nk = " << k;
cout << "\n*p = " << *p;
cout << "\n*q = " << *q;
cout << "\n*r = " << *r;
}

3. Apa output dari program berikut :


#include<stdio.h>
#include<alloc.h>
main()
{ int m = 10;
int *p,*q ;
p =(int *)malloc(sizeof(int));
*p = m;
q = p;
m = *q + *p;
p = &m;
printf("\nm = %d",m);
printf("\n*p = %d",*p);
printf("\n*q = %d",*q);

Algoritma dan Pemrograman 2


Pertemuan Ke-10
Pointer 2

Disusun Oleh :
M u k i d i n, S.Kom.

Jurusan Teknik Informatika


STIKOM POLTEK CIREBON
2009

Algoritma dan Pemrograman 2


Judul Materi

: Pointer 2

Deskripsi Materi
: Materi ini membahas tipe data pointer, operatoroperator yang dapat dipakai dana penggunaannya bersama tipe data terstrutur yang
lain
Tujuan Instruksional Khusus
:
4. Mendefinisikan dan menggunakan tipe data pointer
5. Mendeskripsikan tipe data pointer
6. Memahami kegunaan pointer
Referensi
:
Buku Teks
Munir, Rinaldi (2005), Algoritma dan Pemrograman dalam Bahasa Pascal dan
C, Buku 2, Edisi Ketiga, Penerbit Informatika Bandung.
Charibaldi, N. (2004), Modul Kuliah Algoritma Pemrograman II, Edisi Kedua,
Yogyakarta

Buku Acuan/Referensi
Brassard, Gilles (1999), Fundamentals of algorithma, PrinteceHall.
Jarne, Stroustrup B. (1997), C++ Programming language, AT &T.
Kristanto, Andri (2003), Algoritma pemrograman C++, Graha Ilmu.
Schildt,Herbert (2000), The Complete Reference C++, McGraw-Hill.
Sedgewick, R. (2000), Algoritma Third edition In C part 5, Addison Wesley.

POINTER 2
PENDAHULUAN
Pointer adalah vriabel yang berisi alamat memori sebagai nilainya dan berbeda
dengan variable biasa yang berisi nilai tertentu. Dengan kata lain, pointer berisi alamat
dari variable yang mempunyai nilai tertentu.

ISI
A. Operator Pointer
Ada beberapa operator yang bisa digunakan dalam pointer, yaitu :
3. Operator alamat (yang dilambangkan dengan symbol &)
4. Operator unary yang mengembalikan alamat dari unary yang mengembalikan alamat
dari operandnya.
Contoh Program 1:
#include<iostream.h>
main()
{
int *ptr, num;
ptr = &num;
*ptr = 100;
cout << num << " ";
(*ptr)++;
cout << num << " ";
(*ptr)*2;
cout << num << "\n";
}

B. Expresi Pointer

Pointer Aritmatika
Hanya 4 operator aritmatik dapat digunakan pada pointer + +, = = , + , dan -. Asumsi
integer 32 bit.

Perhatikan contoh berikut.


int *p1 // assume; p1==2000
p1++;
p1--;

Pointer Aritmatika
Contoh program 2 pointer Aritmatika.
#include<iostream.h>
main()
{ int i[10], *i_ptr;
double f[10], *f_ptr;
int x;
i_ptr = i;
//i_ptr points to first element of i
f_ptr = f;
//f_ptr points to first element of f
for(x=0;x<10;x++)
cout << i_ptr+x << " " << f_ptr+x << "\n";
}

Pointer Perbandingan
Pointer dapat dibandingkan dengan menggunakan operator hubungan, seperti != , = =,
< , dan >.
Contoh Program 3 :
#include<iostream.h>
main()
{
int num[10];
int *start, *end;
start = num;
end = &num[9];
while(start != end) {
cout << "Masukkan bilangan sebanyak 9 data: ";
cin >> *start;
}
}

C. Pointer Dan Array


Array dan pointer adalah dua struktur data yang saling berkaitan satu sama lain
didalam C, dan dapat saling dipertukarkan penggunaannya. Hal ini karena suatu array
dapat didefinisikan sebagai pointer ke elemen pertama dari array tersebut.
Pointer dapat di-array seperti tipe data yang lain dalam C++. Sebagai contoh,
untuk menyatakan sebuah array pi dari pointer sebanyak 10 buah data yang bertipe 10
integer, dapat dituliskan sebagai berikut :
int *pi[10];

Untuk menentukan alamat dari variable integer disebut var ke elemen ketiga dari pointer
array, dapat dituliskan sebagai berikut :
int var;
Pi[2] = &var

Contoh program 4 array pointer


#include<iostream.h>
main()
{
int numbers[5];
int *p;
p = numbers; *p = 10;
p++; *p = 20;
p = &numbers[2]; *p = 30;
p = numbers + 3; *p = 40;
p = numbers; *(p+4) = 50;
for(int n=0;n<5;n++)
cout << numbers[n] << ", ";
}

D. Pointer dalam Pointer.


Diperbolehkan dalam C++ menggunakan pointer dalam pointer yang masih bisa
berisi data yang sama atau berbeda.
Dalam kondisi pointer biasa atau pointer tunggal, diagramnya adalah sebagai berikut :

Pointer Tunggal
Untuk Pointer dalam Pointer, diagramnya adalah sebagai berikut :

Pointer dalam Pointer


Contoh :
char a;
char *b;
char **c;
a = z;
b = &a;
c = &b;

dan misalnya berisi data-data yang acak pada memori 7230, 8092, dan 10502, maka
diagramnya adalah sebagai berikut :

Dari diagram diatas dapat disimpulkan :

c adalah sebuah variable dengan tipe (char **) yang berisi 8092.

*c adalah sebuah variable dengan tipe (char *) yang berisi 7230.

**c adalah sebuah variable dengan tipe (char) yang berisi z.

Contoh program 5 pointer dalam pointer


#include<iostream.h>
main()
{
int x, *p, **q;
x = 10;
p = &x;
q = &p;
cout << **q; //prints the value of x
}

Penjelasan Program :
Proses pendeklarasian pointer dalam pointer dapat dilihat pada pernyataan :
int x, *p, **q;
x = 10;
p = &x;
q = &p;
dan hasilnya adalah : 10

E. Masalah yang kadang terjadi pada pointer.


1. Pointer yang tidak di inisialisasikan.
2. Null pointer.

Sesudah pointer dinyatakan dan sebelum nilainya ditentukan, pointer akan


berisi sebuah nilai yang berubah-ubah. Jika pointer berisi Null atau nilai
(0), diasumsikan untuk tidak menunjuk apapun.

Beberapa tipe pointer dapat dimulai ke Null ketika dinyatakan sehingga


menghindari salah penggunaan atau pointer yang tidak di inisialisasikan.

3. Kesalahan dalam pointer perbandingan.


Membuat perbandingan pointer antara dua obyek yang berbeda, mungkin
menghasilkan hasil yang tidak diharapkan.
4. Pengembalian nilai pointer.
Kadang setelah mendeklarasikan nilai pointer, kita lupa mengembalikan ke nilai
semula.

PENUTUP
Pointer adalah tipe data dalam pemrograman yang dapat dikenai operator
aritmatika tertentu dan operator perbandingan. Pointer dapat dipadukan dengan tipe data
terstruktur array.

SOAL-SOAL
1. Apa output dari contoh program 1 sampai dengan 4 di atas.
2. Apa output dari program berikut :

#include<iostream.h>
main()
{
int m, n, *x, **y;
m = 10;
x = &m;
y = &x;
n = **y + 5;
x = &n;
cout << m << endl;
cout << n << endl;
cout << *x << endl;
cout << **y << endl;
}

Algoritma dan Pemrograman 2


Pertemuan Ke-11
Pointer 2

Disusun Oleh :
M u k i d i n, S.Kom.

Jurusan Teknik Informatika


STIKOM POLTEK CIREBON
2009

Algoritma dan Pemrograman 2


Judul Materi

: Pointer 2

Deskripsi Materi
: Materi ini membahas tipe data pointer, operatoroperator yang dapat dipakai dana penggunaannya bersama tipe data terstrutur yang
lain
Tujuan Instruksional Khusus
:
7. Mendefinisikan dan menggunakan tipe data pointer
8. Mendeskripsikan tipe data pointer
9. Memahami kegunaan pointer
Referensi
:
Buku Teks
Munir, Rinaldi (2005), Algoritma dan Pemrograman dalam Bahasa Pascal dan
C, Buku 2, Edisi Ketiga, Penerbit Informatika Bandung.
Charibaldi, N. (2004), Modul Kuliah Algoritma Pemrograman II, Edisi Kedua,
Yogyakarta

Buku Acuan/Referensi
Brassard, Gilles (1999), Fundamentals of algorithma, PrinteceHall.
Jarne, Stroustrup B. (1997), C++ Programming language, AT &T.
Kristanto, Andri (2003), Algoritma pemrograman C++, Graha Ilmu.
Schildt,Herbert (2000), The Complete Reference C++, McGraw-Hill.
Sedgewick, R. (2000), Algoritma Third edition In C part 5, Addison Wesley.

POINTER 2
PENDAHULUAN
Pointer adalah vriabel yang berisi alamat memori sebagai nilainya dan berbeda
dengan variable biasa yang berisi nilai tertentu. Dengan kata lain, pointer berisi alamat
dari variable yang mempunyai nilai tertentu.

ISI
A. Operator Pointer
Ada beberapa operator yang bisa digunakan dalam pointer, yaitu :
5. Operator alamat (yang dilambangkan dengan symbol &)
6. Operator unary yang mengembalikan alamat dari unary yang mengembalikan alamat
dari operandnya.
Contoh Program 1:
#include<iostream.h>
main()
{
int *ptr, num;
ptr = &num;
*ptr = 100;
cout << num << " ";
(*ptr)++;
cout << num << " ";
(*ptr)*2;
cout << num << "\n";
}

B. Expresi Pointer

Pointer Aritmatika
Hanya 4 operator aritmatik dapat digunakan pada pointer + +, = = , + , dan -. Asumsi
integer 32 bit.

Perhatikan contoh berikut.


int *p1 // assume; p1==2000
p1++;
p1--;

Pointer Aritmatika
Contoh program 2 pointer Aritmatika.
#include<iostream.h>
main()
{ int i[10], *i_ptr;
double f[10], *f_ptr;
int x;
i_ptr = i;
//i_ptr points to first element of i
f_ptr = f;
//f_ptr points to first element of f
for(x=0;x<10;x++)
cout << i_ptr+x << " " << f_ptr+x << "\n";
}

Pointer Perbandingan
Pointer dapat dibandingkan dengan menggunakan operator hubungan, seperti != , = =,
< , dan >.
Contoh Program 3 :
#include<iostream.h>
main()
{
int num[10];
int *start, *end;
start = num;
end = &num[9];
while(start != end) {
cout << "Masukkan bilangan sebanyak 9 data: ";
cin >> *start;
}
}

C. Pointer Dan Array


Array dan pointer adalah dua struktur data yang saling berkaitan satu sama lain
didalam C, dan dapat saling dipertukarkan penggunaannya. Hal ini karena suatu array
dapat didefinisikan sebagai pointer ke elemen pertama dari array tersebut.
Pointer dapat di-array seperti tipe data yang lain dalam C++. Sebagai contoh,
untuk menyatakan sebuah array pi dari pointer sebanyak 10 buah data yang bertipe 10
integer, dapat dituliskan sebagai berikut :
int *pi[10];

Untuk menentukan alamat dari variable integer disebut var ke elemen ketiga dari pointer
array, dapat dituliskan sebagai berikut :
int var;
Pi[2] = &var

Contoh program 4 array pointer


#include<iostream.h>
main()
{
int numbers[5];
int *p;
p = numbers; *p = 10;
p++; *p = 20;
p = &numbers[2]; *p = 30;
p = numbers + 3; *p = 40;
p = numbers; *(p+4) = 50;
for(int n=0;n<5;n++)
cout << numbers[n] << ", ";
}

D. Pointer dalam Pointer.


Diperbolehkan dalam C++ menggunakan pointer dalam pointer yang masih bisa
berisi data yang sama atau berbeda.
Dalam kondisi pointer biasa atau pointer tunggal, diagramnya adalah sebagai berikut :

Pointer Tunggal
Untuk Pointer dalam Pointer, diagramnya adalah sebagai berikut :

Pointer dalam Pointer


Contoh :
char a;
char *b;
char **c;
a = z;
b = &a;
c = &b;

dan misalnya berisi data-data yang acak pada memori 7230, 8092, dan 10502, maka
diagramnya adalah sebagai berikut :

Dari diagram diatas dapat disimpulkan :

c adalah sebuah variable dengan tipe (char **) yang berisi 8092.

*c adalah sebuah variable dengan tipe (char *) yang berisi 7230.

**c adalah sebuah variable dengan tipe (char) yang berisi z.

Contoh program 5 pointer dalam pointer


#include<iostream.h>
main()
{
int x, *p, **q;
x = 10;
p = &x;
q = &p;
cout << **q; //prints the value of x
}

Penjelasan Program :
Proses pendeklarasian pointer dalam pointer dapat dilihat pada pernyataan :
int x, *p, **q;
x = 10;
p = &x;
q = &p;
dan hasilnya adalah : 10

E. Masalah yang kadang terjadi pada pointer.


5. Pointer yang tidak di inisialisasikan.
6. Null pointer.

Sesudah pointer dinyatakan dan sebelum nilainya ditentukan, pointer akan


berisi sebuah nilai yang berubah-ubah. Jika pointer berisi Null atau nilai
(0), diasumsikan untuk tidak menunjuk apapun.

Beberapa tipe pointer dapat dimulai ke Null ketika dinyatakan sehingga


menghindari salah penggunaan atau pointer yang tidak di inisialisasikan.

7. Kesalahan dalam pointer perbandingan.


Membuat perbandingan pointer antara dua obyek yang berbeda, mungkin
menghasilkan hasil yang tidak diharapkan.
8. Pengembalian nilai pointer.
Kadang setelah mendeklarasikan nilai pointer, kita lupa mengembalikan ke nilai
semula.

PENUTUP
Pointer adalah tipe data dalam pemrograman yang dapat dikenai operator
aritmatika tertentu dan operator perbandingan. Pointer dapat dipadukan dengan tipe data
terstruktur array.

SOAL-SOAL
3. Apa output dari contoh program 1 sampai dengan 4 di atas.
4. Apa output dari program berikut :

#include<iostream.h>
main()
{
int m, n, *x, **y;
m = 10;
x = &m;
y = &x;
n = **y + 5;
x = &n;
cout << m << endl;
cout << n << endl;
cout << *x << endl;
cout << **y << endl;
}

Algoritma dan Pemrograman 2


Pertemuan Ke-12
Arsip (File) 1

Disusun Oleh :
M u k i d i n, S.Kom.

Jurusan Teknik Informatika


STIKOM POLTEK CIREBON
2009

Algoritma dan Pemrograman 2


Judul Materi

: Arsip (File) 1

Deskripsi Materi
: Materi ini membahas tipe data file, pendeklarasian
dan perintah-perintah baku untuk mengolah data pada file
Tujuan Instruksional Khusus
:
1. Mendefinisikan dan menggunakan tipe data file
2. Mendeskripsikan tipe data file
3. Menggunakan tipe data file
4. Menjelaskan fungsi-fungsi pada tipe data file
5. Mengimplementasikan fungsi-fungsi file untuk memanipulasi file
Referensi
:
Buku Teks
Munir, Rinaldi (2005), Algoritma dan Pemrograman dalam Bahasa Pascal dan
C, Buku 2, Edisi Ketiga, Penerbit Informatika Bandung.
Charibaldi, N. (2004), Modul Kuliah Algoritma Pemrograman II, Edisi Kedua,
Yogyakarta

Buku Acuan/Referensi
Brassard, Gilles (1999), Fundamentals of algorithma, PrinteceHall.
Jarne, Stroustrup B. (1997), C++ Programming language, AT &T.
Kristanto, Andri (2003), Algoritma pemrograman C++, Graha Ilmu.
Schildt,Herbert (2000), The Complete Reference C++, McGraw-Hill.
Sedgewick, R. (2000), Algoritma Third edition In C part 5, Addison Wesley.

Arsip (File) 1
PENDAHULUAN
Media Penyimpan :

Memori Utama (RAM) tidak menyimpan informasi secara permanen

Memori Sekunder media penyimpanan permanen.


Contoh : disk (floppy disk, hard disk, compact disk, flash disk dll.). Data yang
disimpan di dalam penyimpanan sekunder dikelompokkan dalam bentuk arsip/file

ISI
Data yang disimpan di dalam penyimpanan sekunder dikelompokkan dalam
bentuk arsip/file. File menyimpan data berkategori sama. Nama arsip/file harus unik.

Struktur File :

Suatu file merupakan organisasi dari sejumlah record dapat terdiri dari satu atau
beberapa field dan setiap field terdiri dari satu atau beberapa byte.

Adapun byte merupakan susunan dari 8 bit.


File

Record

Byte

Record

Field

Field

Byte

Struktur data dari file

Field

nama
ALI
SITI
MIRA

Masing-masing
adalah sebuah field

alamat
JL. BEO 307
JL. WARU I/69
JL. WARAS 99

Sebuah record

Gambaran record dan field


Pengorganisasian data di dalam file :

Sebuah informasi disebut datum atau record, sedangkan jamaknya disebut data.
Semua record di dalam file diorganisasikan penyimpanannya, dan pengaksesan record
di dalam file bergantung pada metode perorganisasiannya tsb.

Ada dua cara : beruntun (sequential) dan acak (random).

Arsip Beruntun
Pengertian Arsip beruntun : Sekumpulan record-record terpadu, yang disimpan dalam
media penyimanan sekunder, yang dapat diakses secara berurutan record per record
searah mulai dari record pertama.

File dapat dipandang dengan dua cara :


1. Secara Tabel
Field1
Record1
Record2
Record3

Recordn
Mark

Field2

Field3

Fieldn

2. Secara Blanko
Mark
Recordn
Record2
Record1

Record terakhir adalah record fiktif yang menandai akhir dari file.

Deklarasi File
(notasi algoritma)
Type NamaRecord : TipeRecord
NamaArsip : SeqFile of TipeRecord
VarRecord : NamaRecord
Contoh :
Type DataMhs : Record
<NIM : Integer,
Nama : String,
IPK : Real >
ArsipMhs : SeqFile of DataMhs
Mhs : DataMhs
Type ArsipBil :SeqFile of Integer
Bil : ArsipBil
i : integer
Type ArsipKar : SeqFile of Char
Kar : ArsipKar

c : Char

(Bahasa C++)
typedef TipeRecord NamaRecord;
FILE *NamaArsip;
NamaRecord

VarRecord;

Contoh :

Typedef struct {long NIM;


char Nama[25];
float IPK;
} DataMhs;
FILE *ArsipMhs;
DataMhs Mhs;

FILE *Bil;
int i;

FILE *Kar;
char c;

Perintah Baku
(notasi algoritma)
Open(NamaArsip,kode)
Contoh :
Open(ArsipMhs,1)
Open(Bil,2)
Open(Kar,1)
FRead(NamaArsip,VarRecord)
Contoh :

FRead(ArsipMhs,Mhs)
FRead(Bil,i)
FRead(Kar,c)
FWrite(NamaArsip,VarRecord)
Contoh :
FWrite(ArsipMhs,<12331,Hanif,3.50)
FWrite(ArsipMhs,<99999,xxxxx,9.99)
FWrite(Bil,765)
FWrite(Kar,R)
Input(i)
FWrite(Bil,i)
Input(c)
FWrite(Kar,c)
Input(Mhs.NIM)
Input(Mhs.Nama)
Input(Mhs.IPK)
FWrite(ArsipMhs,Mhs)

Close(NamaArsip)
Contoh :
Close(ArsipMhs)

(Notasi bahasa C++)


NamaArsip1 = fopen(NamaArsipFisik1,r); /*utk dibaca*/
NamaArsip2 = fopen(NamaArsipFisik1,w); /*utk ditulis*/

Contoh :
ArsipMhs = fopen(C:ArsipMhs.dat,r);
Bil = fopen(A:Bil.dat,w);
Kar = fopen(A:Kar.dat,r);
fread(VarRecord,sizeof(VarRecord),jum_record,NamaArsip);

Contoh :
fread(&Mhs,sizeof(Mhs),1,ArsipMhs);

fread(&i,sizeof(i),1,Bil);
fread(&c,sizeof(c),1,Kar);
fwrite(VarRecord,sizeof(VarRecord),jum_record,NamaArsip);

Contoh :
fwrite(&Mhs,sizeof(Mhs),1,ArsipMhs);
fwrite(&i,sizeof(i),1,Bil);
fwrite(&c,sizeof(c),1,Kar);
fwrite(&Kar,R)
fclose(NamaArsip);

Contoh :
fclose(ArsipMhs);

Contoh Program 1:
//menyimpan data bilangan integer
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
FILE *Bil;
typedef enum {true=1,false=0} boolean;
boolean Mark(int i);
main()
{
int i;
Bil = fopen("Bil.dat","w");
cout << "Bilangan : "; cin >> i;
while (Mark(i) != true)
{
fwrite(&i,sizeof(i),1,Bil);
cout << "Bilangan : "; cin >> i;
}
i = 999;
fwrite(&i,sizeof(i),1,Bil);
fclose(Bil);
}
boolean Mark(int i)
{
return (i == 999);
}

Contoh Program 2 :
//membaca data bilangan integer yang ada di
//file dari contoh program 1
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
FILE *Bil;
typedef enum {true=1,false=0} boolean;
boolean Mark(int i);
main()
{
int i,jum;
jum=0;
Bil = fopen("Bil.dat","r");
fread(&i,sizeof(i),1,Bil);
if (Mark(i))
cout << "Arsip kosong\n";
else
{
do
{
jum=jum+i;
//cout << i <<endl;
fread(&i,sizeof(i),1,Bil);
}
while (!Mark(i));
}
cout <<jum;
fclose(Bil);
return 0;
}
boolean Mark(int i)
{
return (i == 999);
}

Contoh program 3 :
//program menyimpan data mahasiswa dan mencetak
//data mahasiswa sesuai dengan nim yang diinginkan
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <iomanip.h>

typedef struct { long NIM;


char Nama[25];
char KodeMK[5];
int SKS;
char Indeks;
} DataMhs;
FILE *ArsipMhs;
typedef enum {true=1,false=0} boolean;
void RekamDataMahasiswa();
void CetakDaftarNilai(long KodeNIM);
boolean Mark(DataMhs Mhs);
main()
{
long KodeNIM;
RekamDataMahasiswa();
clrscr();
cout << " NIM : "; cin >> KodeNIM;
clrscr();
CetakDaftarNilai(KodeNIM);
return 0;
}
void RekamDataMahasiswa()
{
DataMhs Mhs;
ArsipMhs = fopen("Mhs.dat","w");
cout << "NIM : "; cin >> Mhs.NIM;
while (Mark(Mhs) != true)
{
cout << "Nama : "; cin >> Mhs.Nama;
cout << "Kode MK : "; cin >> Mhs.KodeMK;
cout << "SKS : "; cin >> Mhs.SKS;
cout << "Nilai : "; cin >> Mhs.Indeks;
fwrite(&Mhs,sizeof(Mhs),1,ArsipMhs);
cout << "NIM : "; cin >> Mhs.NIM;
}
Mhs.NIM = 9999;
strcpy(Mhs.Nama, "xxxxx");
strcpy(Mhs.KodeMK, "xxxxx");
Mhs.SKS = 9;
Mhs.Indeks = 'x';
fwrite(&Mhs,sizeof(Mhs),1,ArsipMhs);
fclose(ArsipMhs);
}
void CetakDaftarNilai(long KodeNIM)
{
int no;

DataMhs Mhs;
boolean ketemu;
boolean stop;
ArsipMhs = fopen("Mhs.dat","r");
stop = false;
fread(&Mhs,sizeof(Mhs),1,ArsipMhs);
if (Mark(Mhs))
cout << "Arsip kosong\n";
else
{ //cari code NIM
ketemu = false;
do
{
if (Mhs.NIM == KodeNIM)
ketemu = true;
else
fread(&Mhs,sizeof(Mhs),1,ArsipMhs);
}
while (!ketemu && !Mark(Mhs));
if (ketemu)
{
cout << "Daftar Nilai Mata Kuliah\n";
cout << " NIM
: " << Mhs.NIM << endl;
cout << " Nama : " << Mhs.Nama << endl;
cout << "--------------------------------\n";
cout << "No. Mata Kuliah
SKS
NIlai\n";
cout << "--------------------------------\n";
no = 0;
do
{
no++;
cout << no << setw(7) << Mhs.KodeMK;
cout << setw(13) << Mhs.SKS << setw(9);
cout << Mhs.Indeks << endl;
fread(&Mhs,sizeof(Mhs),1,ArsipMhs);
}
while (Mhs.NIM == KodeNIM && !Mark(Mhs));
cout << "--------------------------------\n";
}
else
{
cout << "Data mahasiswa dengan NIM = ";
cout << KodeNIM << " tidak ada";
}
}
fclose(ArsipMhs);
}
boolean Mark(DataMhs Mhs)
{
return (Mhs.NIM == 9999);
}

PENUTUP
File dengan memanfaatkan media penyimpan permanen, berfungsi untuk
menyimpan data secara permanen juga. Data yang disimpan dapat bertipe apa saja.

SOAL-SOAL
Modifikasi contoh program 3 di atas agar program tersebut tidak hanya mencetak daftar
nilai seorang mahasiswa tetapi mencetak semua data mahasiswa, dan juga mencetak
daftar mhs berdasarkan nilai yang diperoleh.

Algoritma dan Pemrograman 2


Pertemuan Ke-12
Arsip (File) 2

Disusun Oleh :
M u k i d i n, S.Kom.

Jurusan Teknik Informatika


STIKOM POLTEK CIREBON
2009

Algoritma dan Pemrograman 2


Judul Materi

: Arsip (File) 2

Deskripsi Materi
: Materi ini membahas tipe data file, operasi-operasi
file mengolah data dengan bahasa C++
Tujuan Instruksional Khusus
:
6. Mendefinisikan dan menggunakan tipe data file
7. Mendeskripsikan tipe data file
8. Menggunakan tipe data file
9. Menjelaskan fungsi-fungsi pada tipe data file
10. Mengimplementasikan fungsi-fungsi file untuk memanipulasi file
Referensi
:
Buku Teks
Munir, Rinaldi (2005), Algoritma dan Pemrograman dalam Bahasa Pascal dan
C, Buku 2, Edisi Ketiga, Penerbit Informatika Bandung.
Charibaldi, N. (2004), Modul Kuliah Algoritma Pemrograman II, Edisi Kedua,
Yogyakarta

Buku Acuan/Referensi
Brassard, Gilles (1999), Fundamentals of algorithma, PrinteceHall.
Jarne, Stroustrup B. (1997), C++ Programming language, AT &T.
Kristanto, Andri (2003), Algoritma pemrograman C++, Graha Ilmu.
Schildt,Herbert (2000), The Complete Reference C++, McGraw-Hill.
Sedgewick, R. (2000), Algoritma Third edition In C part 5, Addison Wesley.

Arsip (File) 2
Operasi File
1. Membuka / Mengaktifkan File
FILE fopen(char *namafile, char *mode);
Keterangan mode :
r

: Read only

w : Menyatakan file baru diciptakan. Operasi yang akan dilakukan adalah operasii
perekaman
data. Jika file tersebut sudah ada, isi yang lama akan dihapus.
a : Membuka file yang ada pada disk dan operasi yang akan dilakukan adalah
operasii penambahan data pada file. Jika file belum ada, secara otomatis file
akan dibuat .
r+ : Membuka file yang sudah ada, operasi yang dilakukan berupa pembacaan dan
penulisan.
w+ : Membuka file untuk pembacaan/penulisan. Jika file sudah ada, isinya akan
dihapus.
a+ : Membuka file, operasi yang dilakukan berupa perekaman dan pembacaan. Jika
file sudah ada, isinya tak akan terhapus.
File biner adalah file yang pola penyimpanan di dalam disk adalah dalam bentuk
biner, yaitu seperti bentuk dalam memori (RAM) komputer. Sedangkan file teks
merupakan file yang pola penyimpanan datanya dalam bentuk karakter.
Keterangan mode :
rt : mode file adalah teks dan file hendak dibaca.
rt+ : mode file adalah teks dan file bisa dibaca atau ditulisi ( = r+t ).
rb : mode file adalah biner dan file hendak dibaca.

2. Menutup File

Int fclose(FILE *pf);


3. Menyimpan File per Character
Int fputc(int kar, FILE *ptr_file );
4. Membaca File per Character
Int fgetc(FILE *ptr_file );
5. Membaca File per Integer
Int getw(FILE *ptr_file);
6. Menyimpan File per Integer
Int putw(FILE *ptr_file);
7. Membaca File per Blok
Untuk menyimpan atau membaca data file dalam bentuk kesatuan blok (sejumlah
byte), misalnya untuk tipe float atau struct (struktur)
int fread(void *buffer, int n, FILE *ptr_file);
8. Menyimpan File per Blok
int fwrite(void *buffer, int jum_byte, int n, FILE
*ptr_file);

9. Membaca Data String dari File


Fungsi yang digunakan untuk membaca data string pada file yaitu fgets( ) untuk
menyimpan string str ke dalam file. Dan fputs( ) untuk membaca string dari file
sampai ditemukannaya karakter baris-baru \n atau setelah (n-1) karakter, dangan n
adalah panjang maksimal string yang dibaca per wktu-baca.
char *fgets(char *str, int n, FILE *ptr_file);
10. Menyimpan Data String dari File

int fputs(char *str, FILE *ptr_file);

11.

Mengganti Nama File

Fungsi yang berguna untuk menghapus file, yaitu rename(). Bentuk deklarasinya :
int rename(char *namafilelama, char *namafilebaru);

PENUTUP
Bemacam-macam perintah untuk memanipulasi file yang terdapat pada bahasa
C++. Perintah-perintah yang dipakai tersebut harus sesuai dengan tipe data yang
disimpan pada file.

SOAL-SOAL
Buatlah contoh program untuk masing-masing operasi file.

Algoritma dan Pemrograman 2


Pertemuan Ke-13 & 14
Arsip (File) 3

Disusun Oleh :
M u k i d i n, S.Kom.

Jurusan Teknik Informatika


STIKOM POLTEK CIREBON
2009

Algoritma dan Pemrograman 2


Judul Materi

: Arsip (File) 3

Deskripsi Materi
: Materi ini membahas tipe data file, dan prosesproses konsolidasi, penggabungan (merging) dua file, updating data file dan spliting.
Tujuan Instruksional Khusus
:
11. Mendefinisikan dan menggunakan tipe data file
12. Mendeskripsikan tipe data file
13. Menggunakan tipe data file
14. Menjelaskan fungsi-fungsi pada tipe data file
15. Mengimplementasikan fungsi-fungsi file untuk memanipulasi file
Referensi
:
Buku Teks
Munir, Rinaldi (2005), Algoritma dan Pemrograman dalam Bahasa Pascal dan
C, Buku 2, Edisi Ketiga, Penerbit Informatika Bandung.
Charibaldi, N. (2004), Modul Kuliah Algoritma Pemrograman II, Edisi Kedua,
Yogyakarta

Buku Acuan/Referensi
Brassard, Gilles (1999), Fundamentals of algorithma, PrinteceHall.
Jarne, Stroustrup B. (1997), C++ Programming language, AT &T.
Kristanto, Andri (2003), Algoritma pemrograman C++, Graha Ilmu.
Schildt,Herbert (2000), The Complete Reference C++, McGraw-Hill.
Sedgewick, R. (2000), Algoritma Third edition In C part 5, Addison Wesley.

Arsip (File) 3
PENDAHULUAN
Beberapa proses di bawah ini merupakan proses yang terjadi pada file, seperti
konsolidasi, penggabungan (merging) dua file, updating data file dan spliting.

ISI
A. Algoritma Konsolidasi
Algoritma Konsolidasi adalah pengelompokan data dengan kunci yang sama yang harus
diproses sebagai satu kesatuan.
Contoh :
Diketahui sebuah Arsip Nilai Mahasiswa, satu mahasiswa dapat mempunyai beberapa
buah nilai (karena dalam satu semester mengambil beberapa matakuliah, dan tiap
mahasiswa bisa berbeda matakuliah).
Buatlah Algoritma untuk menghitung nilai rata-rata tiap mahasiswa, dan membuat daftar
nilai yang lebih sederhana, yaitu menuliskan NIM dan nilai rata-rata tiap mahasiswa.
NIM
70001
70001
70001
70001
70002
70002
70002
70002
70002
70003
70003
70004
70004
70004

Nilai
50
80
60
70
55
75
65
86
64
77
83
45
54
60

NIM
70001
70002
70003
70004

Nilai Rata-rata
65
69
80
53

277

Algoritma Konsolidasi
{Kondisi awal : ArsipMhs sudah berisi NIM dan nilai}
{Kondisi akhir : record sudah dikelompokkan berdasarkan NIM yang sama, dengan
nilainya adalah nilai rata-rata}
Deklarasi
Type DataMhs : Record
< NIM : integer
Nilai : real >
ArsipMhs1, ArsipMhs2 : seqFile of DataMhs
Mhs : DataMhs
CurrentNim, JumNil, nMK : integer
Rata : real
Function Mrk(Input Mhs : DataMhs) Boolean
{tanda akhir = <999,xxxxx,99.9>}
Deskripsi
Open(ArsipMhs1,1)
Open(ArsipMhs2,2)
Fread(ArsipMhs1, Mhs)
If (Mark(Mhs) = true) then
Output(Arsip kosong)
Else
While (Mark(Mhs) = false) do
JumNil 0
nMK 1
currentNIM Mhs.NIM {record1 dari ArsipMhs1}
Repeat
JumNil JumNil + Mhs.Nilai
Fread(ArsipMhs1,Mhs)
nMK nMK + 1
Until (currentNIM <> Mhs.NIM)
Rata JumNil/nMK
Fwrite(ArsipMhs2, <currentNIM, Rata>)
Outout(currentNIM,Rata)
Endwhile
EndIf
Close(ArsipMhs1)
Close(ArsipMhs2)
B. Penrosesan Dua Arsip Beruntun
1. Merging
Merging adalah penggabungan dua buah file yang tipe recordnya sama. Untuk melakukan
merging ada dua cara. Cara yang paling sederhana adalah data file kedua ditambahkan
setelah record terakhir file pertama, sehingga membentuk file baru. Cara ini tidak dapat

dipakai jika field kunci kedua file sudah terurut dan dikehendaki file gabungan yang field
kuncinya juga terurut.
Contoh :
NIM
70001
70003
70004
70006
70008

Nama
Adi
Budi
Susi
Anti
Doni

File ArsipMhs1

NIM
70002
70009
70010

Nama
Yudi
Eka
Bima

File ArsipMhs2

Algoritma MergingSambung
{Menggabungkan dua buah arsip beruntun yaitu ArsipMhs1 dan
ArsipMhs2, menjadi sebuah arsip baru yaitu ArsipMhs3,
dengan cara semua record arsip kedua disambungkan setelah
record terakhir arsip pertama}
{Kondisi awal : arsip pertama dan kedua sudah berisi data}
{Kondisi akhir : arsip'ketiga berisi hasil sambungan kedua arsip}
Deklarasi
Type DataMhs : Record
<NIM : Integer,
Nama: String>
ArsipMhsl, ArsipMhs2, ArsipMhs3 : SeqFile of DataMhs
Mhs : DataMhs
Function Mark(Input Mhs : DataMhs) Boolean
Deskripsi
Open(ArsipMhs1, 1)
Open(ArsipMhs2, 1)
Open(ArsipMhs3, 2)
FRead(ArsipMhs1, Mhs)
While (Mark(Mhs) = false) Do
FWrite(ArsipMhs3, Mhs)
FRead(ArsipMhs1, Mhs)
EndWhile
FRead(ArsipMhs2, Mhs)
While (Mark(Mhs) = false) Do
FWrite(ArsipMhs3, Mhs)
FRead(ArsipMhs2, Mhs)
EndWhile
FWrite(ArsipMhs3, <99999, 'xxxxx', 99.9>)

NIM
70001
70002
70003
70004
70006
70008
70009
70010

Nama
Adi
Yudi
Budi
Susi
Anti
Doni
Eka
Bima

File ArsipMhs3

Close(ArsipMhsl)
Close(ArsipMhs2)
Close(ArsipMhs3)
Algoritma Merging2 {versi And}
{Menggabungkan dua buah arsip beruntun yaitu
ArsipMhs1 dan ArsipMhs2 yang sudah terurut,
menjadi sebuah arsip baru yaitu ArsipMhs3 yang juga terurut}
{Kondisi awal : arsip pertama dan kedua sudah berisi data}
{Kondisi akhir : arsip ketiga berisi hasil merging kedua arsip}
Deklarasi
Type DataMhs : Record
<NIM : Integer,
Nama : String>
ArsipMhsl, ArsipMhs2, ArsipMhs3 : SeqFile of DataMhs
Mhs1, Mhs2 : DataMhs
Function Mark(Input Mhs : DataMhs) Boolean
Deskripsi
Open(ArsipMhs1, 1)
Open(ArsipMhs2, 1)
Open( ArsipMhs3 , 2)
FRead(ArsipMhsl, Mhs1)
FRead(ArsipMhs2, Mhs2)
While (Mark(Mhsl) = false) And (Mark(Mhs2) =false) Do
If (Mhsl.NIM <= Mhs2.NIM) Then
FWrite(ArsipMhs3, Mhsl)
FRead(ArsipMhsl, Mhsl)
Else
FWrite(ArsipMhs3, Mhs2)
FRead(ArsipMhs2, Mhs2)
Endif
EndWhile
{Mark(Mhs 1) = true atau Mark(Mhs2) = true}
{salin record yg tersisa, pada ArsipMhs 1 atau ArsipMhs2}
{jikayg tersisa adalahArsipMhsI} .
While (Mark(Mhsl) = false) Do
FWrite(ArsipMhs3, Mhs1)
FRead(ArsipMhsl, Mhsl)
EndWhile
{jika yg tersisa adalah ArsipMhs2}
While (Mark(Mhs2) = false) Do
FWrite(ArsipMhs3, Mhs2)
FRead(ArsipMhs2, Mhs2)
EndWhile

FWrite(ArsipMhs3, <99999, 'xxxxx', 99.9>)


Close(ArsipMhsl)
Close(ArsipMhs2)
Close(ArsipMhs3)

Algoritma Merging3 {versi Or}


{Menggabungkan dua buah arsip beruntun yaitu
ArsipMhs1 dan ArsipMhs2yang sudah terurut,
Menjadi sebuah arsip baru yaitu ArsipMhs3 yang juga terurut}
{Kondisiawal : arsip pertama dan kedua sudah berisi data}
{Kondisiakhir : arsip ketiga berisi hasil merging kedua arsip}
Deklarasi
Type DataMhs : Record
<NIM : Integer,
Nama: String>
ArsipMhsl, ArsipMhs2, ArsipMhs3 : SeqFile of DataMhs
Mhs 1, Mhs2 : DataMhs
Function Mark(Input Mhs : DataMhs) Boolean
Deskripsi
Open(ArsipMhsl, 1)
Open(ArsipMhs2, 1)
Open(ArsipMhs3, 2)
FRead(ArsipMhs1, Mhs1)
FRead(ArsipMhs2, Mhs2)
While (Mark(Mhsl) = false) Or (Mark(Mhs2) = false) Do
If (Mhsl.NIM <= Mhs2.NIM) Then
FWrite(ArsipMhs3, Mhs1)
FRead(ArsipMhsl, Mhsl)
Else
FWrite(ArsipMhs3, Mhs2)
FRead(ArsipMhs2, Mhs2)
Endif
EndWhile {Mark(Mhs 1) = true dan Mark(Mhs2) = true}
FWrite(ArsipMhs3, <99999, 'xxxxx', 99.9>)
Close(ArsipMhs1)
Close(ArsipMhs2)
Close(ArsipMhs3)

2. Updating
Updating adalah proses editing harga suatu record (field key tidak diedit) pada file master
dengan data dari file transaksi.

Berikut ini adalah algoitma umum untuk meremajakan record pada file master (bersifat
beruntun, nilai field keynya terurut naik tetapi bisa tidak unik).
Artinya bahwa suatu record pada file master dapat mengalami satu atau beberapa kali
peremajaan.
Contoh :
Peremajaan File Saldo tabungan pada Bank, dengan perjanjian jika nilai uang pada file
update berharga negatif, berari pengambilan, tetapi jika nilai uang pada File Update
berharga positif, berarti transaksi penabungan.
File Master
NoRek
Saldo
001
100000
003
150000
004
175000
006
180000
007
210000
008
112000
009
135000
010
210000
999
0

File Transaksi
NoRek
Saldo
001
+5000
001
-2000
002
+1000
004
-1500
004
+10000
004
-7500
006
+10500
006
-5000
007
-3000
999
0

File New Master


NoRek
Saldo
001
103000
003
150000
004
176000
006
185500
007
207000
008
112000
009
135000
010
210000
999
0

Contoh 1 :
Updating {judul algoritma}
{Mengubah salah satu isi field dari file master
berdasarkan data dari file transaksi lalu simpan hasil editing ke file new master}
{Kondisi awal : suatu variabel sudah bemilai isi dari field key pada posisi record yg
akan diubah, field key sudah terurut naik}
{kondisiakhir : file new master sudah berisi data dari hasil editing file master
berdasarkan file transaksi1}
Deklarasi
Type DataSaldo : Record
< NoRek : Integer,
Saldo : Longint >
Master, Transaksi, NewMaster : SeqFile of DataSaldo
Nasabah1,Nasabah2 : DataSaldo
NewSaldo : Longint
FunctionMark(InputNasabah : DataSaldo) Boolean

Deskripsi
Open(Master, 1)
Open(Transaksi, 1)
Open(NewMaster, 2)
FRead(Master, Nasabah1)
FRead(Transaksi, Nasabah2)
While (Mark(Nasabahl) = false) Do
While (Nasabah2.NoRek < Nasabahl.NoRek)
and (Mark(Nasabah2) = false) Do
FRead(Transaksi, Nasabah2 {skip record dari file trans}
EndWhile
If (Nasabah2.NoRek = Nasabahl.NoRek) Then
NewSaldo Nasabah 1.Saldo {yg akan diedit}
While (Nasabah2.NoRek = Nasabahl.NoRek)
and (Mark(Nasabah2) = false) Do
NewSaldo NewSaldo+ Nasabah2.Saldo
FRead(Transaksi, Nasabah2)
EndWhile
FWrite(NewMaster, <Nasabahl.NoRek, NewSaldo>)
Else
FWrite(NewMaster, Nasabahl) .
Endif
FRead(Master, Nasabah1)
EndWhile
FWrite(NewMaster, <999, 0>)
Close(Master)
Close(Transaksi)
Close(NewMaster)

Contoh2 :
Misalkan akan diubah IPK mahasiswa dengan NIM tertentu. Nilai IPK yg baru dibaca
dari piranti masukan. Langkah-langkahnya adalah sebagai berikut :
(i).

Buka arsip Master untuk dibaca

(ii). Buka arsip Sementara untuk ditulis


(iii). Baca dan salin record dari arsip Master sampai ditemukan NIM dari mahasiswa
yg IPK-nya akan diubah.
(iv). Baca pada arsip Master setiap record yg tersisa, lalu tulis ke arsip Sementara.
(v). Buka arsip Sementar untuk dibaca.
(vi). Buka arsip Master untuk dituEs.

(vii). Baca seluruh record dari arsip Sementara, lalu tuliskan ke arsip Master.
Deklarasi
Type DataMhs: Record
< NIM : Integer,
Nama: String,
IPK : Real>
Master, Sementara : SeqFile of DataMhs
Function Mark(Input Mhs : DataMhs) Boolean
Procedure MutakhirkanData(Input x : Integer)
{Kondisi awal : x sudah berisi NIM mahasiswa yang akan
diubah IPK-nya, x diisi dari piranti masukan}
{Kondisi akhir : IPK yang NIM-nya = x, sudah diubah menjadi
IPK yang baru}
Deklarasi lokal
Mhs : DataMhs
IPKbaru : Real
Deskripsi
Open(Master, 1)
Open(Sementara, 2)
FRead(Master, Mhs) {baca record pertama dari file Master}
{cari record dengan NIM = x}
While (Mhs.NIM <> x) And (Mark(Mhs) = false) Do
FWrite(Sementara, Mhs) {catat record yg <> x }
FRead(Mater, Mhs) {ambillagi record yg lain}
EndWhile
If (Mhs.NIM = x) Then
{tampilkan data yg lama}
Output(Mhs.NIM, Mhs.Nama, Mhs.IPK)
Input(IPKBaru) {masukkan IPK yg baru}
Mhs.IPK IPKBaru
FWrite(Sementara, Mhs)
FRead(Master, Mhs) {baca record selanjutnya}
Else
Output(x, , tidak ada pada arsip master')
Endif
{salin record yg terletak sesudah record x}
While (Mark(mhs) = false) Do
FWrite(Sementara, Mhs)
FRead(Master, Mhs)
EndWhile
Close(Master)
Close(Sementara)
{buka kennbali kedua arsip untuk keperluan berbeda,
yaitu untuk nnenyalin isi arsip Sennentara ke arsip Master}

Open(Sementara, 1)
Open(Master2 )
FRead(Sementara, Mhs)
While (Mark(mhs) = false) Do
FWrite(Master, Mhs)
FRead(Sementara, Mhs)
EndWhile
FWrite(Master, <99999, 'xxxxx', 9.99>)
Close(Sementara)
Close(Master)

3. Spliting
Spliting adalah pemecahan sebuah file menjadi dua atau lebih file baru.
Algoritmanya tergantung dari kriteria pemecahannya.
Contoh :
Memisahakan file nilai suatu matakuliah suatu kelas berdasarkan yang lulus dan yang
tidak lulus.
NIM
-

99999

Nilai
80
42
60
56
55
71
38
65
40
54
0

NIM
99999

Nilai
80
60
56
55
71
65
0

NIM
99999

Nilai
42
38
40
54
0

PENUTUP
Algoritma Konsolidasi adalah pengelompokan data dengan kunci yang sama yang harus
diproses sebagai satu kesatuan.
Merging adalah penggabungan dua buah file yang tipe recordnya sama.

Updating adalah proses editing harga suatu record (field key tidak diedit) pada file master
dengan data dari file transaksi.
Spliting adalah pemecahan sebuah file menjadi dua atau lebih file baru. Algoritmanya
tergantung dari kriteria pemecahannya.

SOAL-SOAL
Implementasikan algoritma konsolodasi, merging, updating dan spliting dengan bahasa
pemrograman C++.

Vous aimerez peut-être aussi