Académique Documents
Professionnel Documents
Culture Documents
Pertemuan Ke-1
Array (Larik)
Disusun Oleh :
M u k i d i n, S.Kom.
: 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.
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
C.
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}};
11
12
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
";
";
cout<<"Matrik C = \n";
for(i=0; i<3 ; i++)
{
for(j=0; j<2 ; j++)
cout<<C[i][j]<<"
cout<<endl;
}
";
D.
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
Disusun Oleh :
M u k i d i n, S.Kom.
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.
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;
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;
Contoh Program :
#include<iostream.h>
#include<string.h>
typedef struct
{
} 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;
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;
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
Disusun Oleh :
M u k i d i n, S.Kom.
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.
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
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+...-...
Disusun Oleh :
M u k i d i n, S.Kom.
: 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
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.
Jadi jika factorial 3!= 3 x 2 x 1, yang mana secara pasti mempunyai nilai sama
yang diperoleh dari definisi tanpa rekursif.
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
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
Disusun Oleh :
M u k i d i n, S.Kom.
: 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
pada dasarnya pencarian ini hanya melakukan pengulangan dari elemen ke-1
sampai dengan jumlah data.
sebaliknya apabila sampai akhir pengulangan tidak ada yang sama, berarti
data tidak ada.
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.
perbedaannya dengan yang tanpa sentinel adalah ketika data ditemukan tapi
data tersebut adalah sentinel berarti data tidak ada.
cout << "tidak ada " << y << " dalam Array";
else
cout << y << " ditemukan dalam Array pada index ke-" << i;
}
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";
}
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:
Data dicari melalui nomorinduknya. Ketika data yang dicari ditemukan, tampilkan tiga
field lainnya.
Disusun Oleh :
M u k i d i n, S.Kom.
: 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";
}
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:
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.
Disusun Oleh :
M u k i d i n, S.Kom.
: 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 :
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
Langkah-langkah :
1
j = i-1;)
4
: Selesai
A [0]
A [1]
A [2]
A [3]
A [4]
A [5]
A[ i ]
j=i-1
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
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
Langkah-langkah :
1
: Selesai
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.
Disusun Oleh :
M u k i d i n, S.Kom.
: 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
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]
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
Langkah-langkah :
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
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)
MergeSort(Data,1,1)
MergeSort(Data,1,2)
MergeSort(Data,2,2)
MergeSort(Data,1,
Merge(Data,1,1,2,2)
MergeSort(Data,3,3)
4)
apa}
MergeSort(Data,3,4)
MergeSort(Data,4,4)
MergeSort(Data,1
MergeSort(Data,3,3,4,4)
Merge(Data,1,2,3,4)
,7)
MergeSort(Data,5,5)
MergeSort(Data,5,6)
MergeSort(Data,6,6)
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)
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
Disusun Oleh :
M u k i d i n, S.Kom.
: 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;
tipedata adalah tipe dasar nilai yang berada di memori yang ditunjuk oleh pointer.
(*) adalah operator memori yang fungsinya untuk mengembalikan nilai variable pada
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;
int *q;
q
p
p=(int *) malloc(sizeof(int));
p
(isi)null
q=(int *) malloc(sizeof(int));
q
(isi)null
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
{
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.
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).
Ilustrasi :
value1 = 5;
value1
5
mypointer = &value1;
mypointer
*mypointer = 10;
mypointer
value1
x5 10
value1
5
Output :
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;
}
Disusun Oleh :
M u k i d i n, S.Kom.
: 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 = #
*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.
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;
}
}
Untuk menentukan alamat dari variable integer disebut var ke elemen ketiga dari pointer
array, dapat dituliskan sebagai berikut :
int var;
Pi[2] = &var
Pointer Tunggal
Untuk Pointer dalam Pointer, diagramnya adalah sebagai berikut :
dan misalnya berisi data-data yang acak pada memori 7230, 8092, dan 10502, maka
diagramnya adalah sebagai berikut :
c adalah sebuah variable dengan tipe (char **) yang berisi 8092.
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
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;
}
Disusun Oleh :
M u k i d i n, S.Kom.
: 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 = #
*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.
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;
}
}
Untuk menentukan alamat dari variable integer disebut var ke elemen ketiga dari pointer
array, dapat dituliskan sebagai berikut :
int var;
Pi[2] = &var
Pointer Tunggal
Untuk Pointer dalam Pointer, diagramnya adalah sebagai berikut :
dan misalnya berisi data-data yang acak pada memori 7230, 8092, dan 10502, maka
diagramnya adalah sebagai berikut :
c adalah sebuah variable dengan tipe (char **) yang berisi 8092.
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
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;
}
Disusun Oleh :
M u k i d i n, S.Kom.
: 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 :
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.
Record
Byte
Record
Field
Field
Byte
Field
nama
ALI
SITI
MIRA
Masing-masing
adalah sebuah field
alamat
JL. BEO 307
JL. WARU I/69
JL. WARAS 99
Sebuah record
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.
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.
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 :
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)
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>
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.
Disusun Oleh :
M u k i d i n, S.Kom.
: 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
11.
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.
Disusun Oleh :
M u k i d i n, S.Kom.
: 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
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
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).
(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++.