Algoritma Dan Pemrograman 2 Pertemuan Ke PDF
Algoritma Dan Pemrograman 2 Pertemuan Ke PDF
Pertemuan Ke-1
Array (Larik)
Disusun Oleh :
M u k i d i n, S.Kom.
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.
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
kÅi+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;
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
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}};
0 1 2
0 a[0][0] a[0][1] a[0][2]
1 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;
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;
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;
}
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
⎛ 3 5⎞
⎛ 2 3 6⎞ ⎜ ⎟
A= ⎜⎜ ⎟⎟ B = ⎜ 2 4⎟
⎝ 4 7 8⎠ ⎜8 6⎟
⎝ ⎠
Pertemuan Ke-2
Record/Struct dan Array Of Record
Disusun Oleh :
M u k i d i n, S.Kom.
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
ISI
A. 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;
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
{ 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
Pertemuan Ke-3
Reccurence Relation (Relasi Berulang)
Disusun Oleh :
M u k i d i n, S.Kom.
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)
iÅ1
sÅ0
while (i<=n) do
output(i)
iÅi+1
endwhile
Contoh2 :
S=1+2+3+4+5+...+n
Algoritma Contoh2
Deklarasi
i,s,n : integer
Deskripsi
Input(n)
iÅ1
sÅ0
while (i<=n) do
output(i)
sÅs+1
iÅi+1
endwhile
output(s)
Contoh3 :
S=2+4+6+8+...+20
i 1 2 3 4 5 … n
f(i) 2 4 6 8 10 2n
Î f(i) = 2*i
x = 2*i
s = s + (2*i)
s =s+x
Algoritma Contoh3
Deklarasi
i,s,x : integer
Deskripsi
iÅ1
xÅ0
sÅ0
while (i<=10) do
xÅ2*i
sÅs+x
output(x)
iÅi+1
endwhile
output(s)
#include<stdio.h>
#include<math.h>
main()
{
int i=1,s=0,x=0;
printf(“S=”);
while (i<=10)
{
x = 2*i
s +=x
printf(“%d+”,x);
i++;
}
printf(“jumlah deret s = %d “,s);
}
Contoh4 :
S=3+5+7+9+...+15
i 1 2 3 4 5 … n
f(i) 3 5 7 9 11 2n+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 1 2 3 4 5 … n
f(i) 2 5 10 17 26 (n*n)+1
Î f(i) = i*i +1
x = i2 +1
s = s + (i2 +1)
s =s+x
Contoh6 :
S=-3+6-9+12-15+18
i 1 2 3 4 5 6 N
f(i) -3 6 -9 12 -15 18 3*n*(-1)n
atau
untuk ganjil Æ i mod 2 =1
t = -1
atau
Algoritma Contoh6b
Deklarasi
i,s,x,t : integer
Deskripsi
iÅ1
xÅ0
sÅ0
tÅ1
while (i<=6) do
if (i mod 2)=1 then
t Å -1
else t Å 1
xÅ2*i*t
sÅs+x
output(x)
iÅi+1
endwhile
output(s)
Contoh7 :
S=3-6+9-12+15-18
i 1 2 3 4 5 6 n
f(i) -3 6 -9 12 -15 18 3*n*(-1)n+1
i+1 atau i
Î f(i) = 3*i *(-1) f(i) = -3*i *(-1)
Contoh 8 :
S = 1/2-1/4+1/8-1/16+...-...
Algoritma HitungDeret7
Deklarasi
i,p,q,n : integer
S : real
Deskripsi
iÅ1
pÅ1
qÅ2
SÅ0.0
while (i<=n) do
output(p,’/’,q)
SÅS+p/q
pÅ-1*p
qÅq*2
iÅi+1
endwhile
output(S)
PENUTUP
Konsep relasi berulang dapat digunakan untuk proses yang membutuhkan
ketelitian penyajian bilangan pada komputer, seperti perhitungan deret.
SOAL-SOAL
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.
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.
Algoritma :
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. }
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.
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 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
#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;
}
#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;
}
#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";
}
#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";
}
#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:
Pertemuan Ke-6
Pencarian (Searching) 2
Disusun Oleh :
M u k i d i n, S.Kom.
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
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 2 3 4 5 6 7 8 9
3 7 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
1 2 3 4 5 6 7 8 9
3 7 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 2 3 4 5 6 7 8 9
3 7 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.
#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";
}
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
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.
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.
ISI
Untuk melakukan proses pengurutan dapat menggunakan beberapa metode antara lain :
1 5 4 5 7 9 8 6
4 3 8 4 5 7 8 9 6
5 4 6 4 5 7 8 6 9
3 6 4 5 7 6 8 9
2 6 4 5 6 7 8 9
11 11 11
22 22 22
44 33 33
55 55 44
33 44 55
Langkah-langkah :
1 : Baca array elemen yang diurutkan (N)
2 : Kerjakan langkah 3 untuk I=1 s/d N-1
3 : 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 0 33 0 33 0 33
1 33 1 44 1 44 1 44
2 55 2 55 2 55 2 22
3 22 3 22 3 22 3 55
4 11 4 11 4 11 4 11
0 33 0 33 0 33
1 44 1 44 1 22
2 22 2 22 2 44
3 11 3 11 3 11
4 55 4 55 4 55
0 33 0 22 0 22 0 22
1 22 1 33 1 11 1 11
2 11 2 11 2 33 2 33
3 44 3 44 3 44 3 44
4 55 4 55 4 55 4 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>
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).
BykMhs, i, j : integer
Mahasiswa : Array[1..100] of DataMhs
Temp : DataMhs
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.
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
4. Shell Sort
5. Quick Sort
6. Merge Sort
1. Shell Sort
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] A[6] A[7] A[8] A[9]
Awal 24 46 11 26 57 38 27 20 17
Jarak = 4 24 46 11 26 57 38 27 20 17
24 38 11 26 57 46 27 20 17
24 38 11 26 57 46 27 20 17
24 38 11 20 57 46 27 26 17
Jarak = 2 24 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
Jarak = 1 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);
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 N
24 46 11 26 57 38 27 20 17
Ilustrasi
1 N
24 46 11 26 57 38 27 20 17
1 J-1 J+1 N
11 20 17 24 46 26 57 38 27
11 20 17 24 26 38 27 46 57
11 17 20 24 26 38 27 46 57
11 17 20 24 26 27 38 46 57
Contoh Program Quick Sort :
/* Quick Sort*/
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
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);
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 );
I 1 2 3 4 5 6 7
25 6 12 7 28 15 20
tengah =
(1+7) div 2
25 6 12 7 28 15 20
tengah tengah
25 6 12 7 28 15 20
25 6 12 7 28 15 20
II
2 6 1 7 2 1 2
6 2 7 1 1 2 2
6 7 1 2 1 2 2
6 7 1 1 2 2 2
Algoritma MergeSortRekursi
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)
= alur logik
PENUTUP
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 ke-
8.
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.
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
Algoritma (Pseodocode) :
nama_pointer : pointer to tipedata
C++ :
tipedata *nama_pointer;
(deklarasi pointer null)
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 :
• 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;
q
p
p=(int *) malloc(sizeof(int));
(isi)null
q=(int *) malloc(sizeof(int));
(isi)null
10 20
p=q
p
10
q
20
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.
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 value1
5
*mypointer = 10;
mypointer value1
x5 10
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 :
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;
a
b x
px = &x; 87
px
y=*px; c
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;
}
Pertemuan Ke-10
Pointer 2
Disusun Oleh :
M u k i d i n, S.Kom.
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
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.
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
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] << ", ";
}
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 :
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.
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
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.
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
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] << ", ";
}
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 :
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.
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 … Record
Byte … Byte
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.
Record1
Record2
Record3
Recordn
Mark
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
(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 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 :
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 :
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);
}
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.
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);
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
Disusun Oleh :
M u k i d i n, S.Kom.
Deskripsi Materi : Materi ini membahas tipe data file, dan proses-
proses konsolidasi, penggabungan (merging) dua file, updating data file dan spliting.
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.
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>)
Close(ArsipMhsl)
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.
Contoh 1 :
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
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 Nilai NIM Nilai
- 80 - 80
- 42 - 60
- 60 - 56
- 56 - 55
- 55 - 71
- 71 - 65
38 99999 0
65
40 NIM Nilai
54 - 42
99999 0 - 38
- 40
- 54
99999 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