PKN LPKIA BANDUNG

Mata Kuliah : Teori Strukturdata
Nama Dosen : Dadan N. Bagenda

Selasa, 25 Mei 2010

TUGAS SERCHING

/*Program Tentukan IPK Mahasiswa
Nama Programer : Siti Romlah
Kelas : 1 TI 8
Nrp : 6309037*/

#include
#include
#include
class data{
public:
void input();
void view();
struct data{
char nama[30];
char nrp[50];
char ipk[10];
}mahasiswa[20];
}aa;

int i, j;



void main()
{
int pil;
do
{
clrscr();
cout<<"Program IPK Mahasiswa"< cout<<"__________________________"< cout<<"Masukkan Pilihan : "< cout<<"1. Input Data Mahasiswa"< cout<<"2. View Data Mahasiswa dalam Tabel"< cout<<"3. Keluar Dari Program"< cout<<"Pilihan : ";cin>>pil;

switch (pil)
{
case 1 : aa.input();break;
case 2 : aa.view();break;
default : clrscr();cout<<"Sampai jumpa lagi...";
}
}while(pil!=3);
getch();
}

void data::input()
{
clrscr();
cout<<"Masukkan Jumlah Mahasiswa Yang Akan Diinputkan: ";cin>>j;
clrscr();

for (i=1;i<=j;i++)
{
cout<<"Nama Depan Ke-"< cout<<"NRP Mahasiswa Ke-"< cout<<"IPK Mahasiswa Ke-"< cout< }

cout<<"Press any key to continue..";
getch();
}

void data::view()
{
clrscr();
int x,y;
gotoxy(19, 2);cout<<"Tabel IPK Mahasiswa"< gotoxy(8, 3);cout<<"ÉÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍ»\n";
gotoxy(8, 4);cout<<"º No. º NRP º Nama º IPK º\n";
gotoxy(8, 5);cout<<"ÌÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍ͹\n";
gotoxy(8, 6);cout<<"º º º º º\n";
gotoxy(8, 7);cout<<"º º º º º\n";
gotoxy(8, 8);cout<<"º º º º º\n";
gotoxy(8, 9);cout<<"º º º º º\n";
gotoxy(8,10);cout<<"º º º º º\n";
gotoxy(8,11);cout<<"º º º º º\n";
gotoxy(8,12);cout<<"º º º º º\n";
gotoxy(8,13);cout<<"º º º º º\n";
gotoxy(8,14);cout<<"º º º º º\n";
gotoxy(8,15);cout<<"º º º º º\n";
gotoxy(8,16);cout<<"º º º º º\n";
gotoxy(8,17);cout<<"º º º º º\n";
gotoxy(8,18);cout<<"ÈÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍͼ\n";

for (x=1;x<=4;x++)
for (y=1;y<=j;y++)
{
gotoxy(x*10+1,y+5);
{
if(x==1) cout< if(x==2) cout< if(x==3) cout< if(x==4) cout< }
}

gotoxy(1,25); cout<<"Press any key to continue..";

getch();
}

SESI 7 & 8

Searching Array
Pada semester yang lalu kita sudah mempelajari array, baik array 1 dimensi maupun array 2 dimensi. Pada bab ini, kita akan mempelajari beberapa cara untuk melakukan pencarian suatu nilai dalam sebuah array 1 dimensi (pada array 2 dimensi sama saja).
Teknik pencarian data dari array yang paling mudah adalah dengan cara sequential search, dimana data dalam array dibaca 1 demi satu, diurutkan dari index terkecil ke index terbesar, maupun sebaliknya.
Contoh :
Array :
int a[5] = {0,3,6,10,1} (index array pada bahasa c dimulai dari index ke 0 !!!)
jika kita ingin mencari bilangan 6 dalam array tersebut, maka proses yang terjadi kita mencari
1.dari array index ke-0, yaitu 0, dicocokan dengan bilangan yang akan dicari, jika tidak sama, maka mencari ke index berikutnya
2.pada array index ke-1, juga bukan bilangan yang dicari, maka kita mencari lagi pada index berikutnya
3.pada array index ke-2, ternyata bilangan yang kita cari ada ditemukan, maka kita keluar dari looping pencarian
contoh source :
http://www.blogger.com/img/blank.gif


output :



Metode pencarian yang kedua adalah binary search, pada metode pencarian ini, data harus diurutkan terlebih dahulu. Pada metode pencarian ini, data dibagi menjadi dua bagian (secara logika), untuk setiap tahap pencarian.
Algoritma binary search :
1.Data diambil dari posisi 1 sampai posisi akhir N
2.Kemudian cari posisi data tengah dengan rumus: (posisi awal + posisi akhir) / 2
3.Kemudian data yang dicari dibandingkan dengan data yang di tengah, apakah sama atau lebih kecil, atau lebih besar?
4.Jika lebih besar, maka proses pencarian dicari dengan posisi awal adalah posisi tengah + 1
5.Jika lebih kecil, maka proses pencarian dicari dengan posisi akhir adalah posisi tengah – 1
6.Jika data sama, berarti ketemu.

Contoh source binary search :



Output :


Interpolation search merupakan salah satu metode pencarian yang dapat digunakan. Seperti pada binary search, data yang harus diurutkan terlebih dahulu, sebelum dapat dilakukan pencarian dengan metode ini. Pada metode pencarian ini, kita mencoba menebak letak data yang kita cari, dengan perhitungan



•Jika data[posisi] > data yg dicari, high = pos – 1
•Jika data[posisi] < data yg dicari, low = pos + 1
Contoh source code interpolation search :



Output :


Tambahan materi :
break ;
digunakan untuk keluar dari suatu blok perintah
continue;
digunakan untuk mem by-pass satu iterasi pada perulangan

contoh kode : (dijalankan dan dipelajari cara kerjanya)
#include
void main(){
for(int i=0;i<10;i++){
for(int j=10;j>0;j--){
if(i+j==10) break;
//if(i+j==10) continue; //hilangkan tanda slash didepan if, dan beri slash 2 di depan if yang atas untuk mencoba kode continue
printf("%i ",i+j);
printf("pass");
}
printf("\n");
}
}

Latihan 1
1. Buatlah sebuah program yang dapat menerima inputan data kedalam sebuah array.
2. Lanjutan dari nomor 1, gunakan sequensial search untuk mencari sebuah nilai dari array tersebut, dan gantilah nilainya.
3. Coba gunakan metode pencarian lainnya
4. Buatlah menu untuk program tersebut (1. Sequential search, 2. Binary Search, 3. Interpolation Search)
Latihan 2
1.Buatlah sebuah program yang dapat mencari dan menampilkan suatu bilangan yang dicari beserta indexnya
contoh :
isi array : 12, 14, 15, 12, 5
data yang dicari : 12
output: data 12 ditemukan pada index ke 0 dan 3
petunjuk :
coba tampung index array yang ditemukan pada sebuah array baru
cara 2, langsung tampilkan index array jika data ditemukan
2.buatlah program untuk mencari data pada array 2 dimensi (bisa ditambahkan kode program untuk memberi inputan data dan ukuran array)
contoh :
data array :
1 3 2
10 5 8
15 24 10

yang dicari : 24
output : data 24 berada pada posisi [2][1]
yang dicari : 2
output : data 2 berada pada posisi [0][2]

petunjuk :
gunakan sequential search, karena data tidak diurutkan, terdapat 2 looping untuk proses pencarian

PERSENTASE BUBBLE SORT

SORTING ALGORITHM > BUBBLE SORT > SELECTION SORT > INSERTION SORT > EXCHANGE SORT
Sorting algorithm merupakan salah satu bagian penting dari struktur data yaitu sorting (pengurutan data). Ada banyak sekali algoritma pengurutan data di dunia komputer, yaitu bubble sort, selection sort, insertion sort, exchange sort, quick sort, merge sort, dll. Setiap algoritma memiliki kelebihan & kekurangan masing-masing , kita akan mempelajari cukup 4 algoritma saja, yaitu bubble sort, selection sort, insertion sort, dan exchange sort. Tetapi pada sekarang kita hanya membahas tentang bubble sorting saja. Sorting yang lainnya akan di bahas pada persentasi berikutnya. Maksud dari bubble short, bubble artinya gelembung. Dan gelembung itu selalu mengapung keatas. Jadi bubble sort adalah proses pengurutan isi array yang dilakukan secara tahap pertahap atau disebut juga pengurutan pengurutan Descending.

PERSENTASI STRUCT & CLASS

PEMBAHASAN STRUCT & CLASS
1. Struct yaitu merupakan kumpulan dari variabel yang msing-masing dapat berbeda type, dan di kelompokan dalam satu nama. Contoh dari struct, yaitu informasi data tanggal. Berikut cara mendeklarasikannya:
struct data_tanggal { int tanggal;
int bulan;
int tahun; } ;
Contoh diatas adalah struct yang mendefinisikan data_tanggal, yaitu terdiri dari 3 buah element (field) berupa tanggal, bulan dan tahun. Contoh Program Struct di bawah ini:
#include
#include
#include
struct date {
char nama; char tgl[2];
char bln[2];
char thn[4]; }
birth[20];
void main()
{ clrscr();
int x;
cout<<“ jumlah data yang di inputkan: “;
cin>>x; for(int z=0; z < x; z++)
{ cout<<“input nama: “; gets(birth[z].nama);
cout<<“input tanggal lahir: “;
gets(birth[z].tgl);
cout<<“input bulan lahir: “;gets(birth[z].bln);
cout<<“input tahun lahir: “; gets(birth[z].thn); }
getch(); }

CONTOH PROGRAM SORTING

bubble sort
#include "stdio.h"
#include "iostream.h"
#include "conio.h"

int main(){
clrscr();
int A[5]={3,4,1,2,8},i,j,tampung;

for (i=0;i<5;i++){
for(j=5-1;j>=i;j--){
if (A[j] tampung=A[j];
A[j]=A[j-1];
A[j-1]=tampung;


}
}

printf("\n\nSetelah sorting : \n");
for (i=0;i<5;i++){
printf("%i ",A[j]);
}
getch();
return 0;
}



insertion sort
#include "stdio.h"
#include "iostream.h"
#include "conio.h"

int main(){

int A[5]={3,4,1,2,8},i,j,tampung;

printf("Sebelum sorting : \n");
for (i=0;i<5;i++){
printf("%i ",A[i]);
}

for (i=1;i<5;i++){
tampung=A[i];
j=i-1;

while (A[j]>tampung && j>0){
A[j+1] = A[j];
j--;
}
A[j+1]=tampung;
}

printf("\n\nSetelah sorting : \n");
for (i=0;i<5;i++){
printf("%i ",A[i]);
}
getch();
return 0;
}

selection sort
#include "stdio.h"

void main(){

int A[5]={3,4,1,2,8},i,j,tampung,pos;

printf("Sebelum sorting : \n");
for (i=0;i<5;i++){
printf("%i ",A[i]);
}

for (i=0;i<5-1;i++){
pos=i;
for(j=i+1;j<5;j++){
if (A[j] pos=j;
}
}
if (pos != i){
tampung=A[pos];
A[pos]=A[i];
A[i]=tampung;
}
}

printf("\n\nSetelah sorting : \n");
for (i=0;i<5;i++){
printf("%i ",A[i]);
}
}

SESI 4

Sorting Algorithm
Bubble Sort -- Selection Sort -- Insertion Sort -- Exchange Sort



Sorting Algorithm
Salah satu bagian penting dari struktur data adalah sorting atau pengurutan data. Ada banyak sekali Algoritma pengurutan data di dunia komputer, yatu : bubble sort, selection sort, insertion sort, exchange sort, quick sort, merge sort, dll.
Setiap algoritma memiliki kelebihan dan kekurangan masing – masing, kita akan mempelajari cukup 4 algoritma saja, yaitu bubble sort, selection sort, insertion sort, dan exchange sort. Bila ingin mempelajari algoritma yang lain silakan berkunjung ke www.wikipedia.org .
Bubble Sort
Perhatikan kode berikut :





Task 1
1.Apa yang dilakukan program diatas ?
2.Lakukan untuk pengurutan sebaliknya!
3.Pengurutan diatas dilakukan dari depan atau belakang? Buat program untuk sebaliknya!
4.Buat program agar user bisa inputkan data secara dinamis, baik untuk ascending, maupun descending!
5.Tambahkan kode agar user dapat melihat proses pengurutan data!
Note : Ascending adalah pengurutan data dari terkecil menuju terbesar, sedangkan descending adalah pengurutan dari data terbesar menuju terkecil.
Exchange Sort
Perhatikan kode berikut :


Task 2
1.Apa yang dilakukan program diatas ?
2.Lakukan untuk pengurutan sebaliknya!
3.Buat program agar user bisa inputkan data secara dinamis, baik untuk ascending, maupun descending!
4.Tambahkan kode agar user dapat melihat proses pengurutan data!
5.Apa perbedaan antara exchange sort dan bubble sort!

Selection Sort
Perhatikan kode berikut :



Task 3
1.Apa yang dilakukan program diatas ?
2.Lakukan untuk pengurutan sebaliknya!
3.Apa fungsi pos?
4.Buat program agar user bisa inputkan data secara dinamis, baik untuk ascending, maupun descending!
5.Tambahkan kode agar user dapat melihat proses pengurutan data!



Insertion Sort
Perhatikan kode berikut :



Task 4
1.Apa yang dilakukan program diatas ?
2.Lakukan untuk pengurutan sebaliknya!
3.Apa fungsi tampung?
4.Buat program agar user bisa inputkan data secara dinamis, baik untuk ascending, maupun descending!
5.Tambahkan kode agar user dapat melihat proses pengurutan data!


Task 5



1.Apa yang menjadi kesalahan pada program diatas?
2.Coba anda perbaiki!



Task 6
1.Gabungkan 4 sorting diatas menjadi 1 program menu pilihan untuk mengurutkan data kode pos.

2.User pertama kali harus memasukkan data terlebih dahulu, apabila tidak ada data, maka pengurutan data tidak bisa berjalan.
3.Data yang masuk hanya bisa berupa angka.
4.Semua metode mengurutkan secara ascending.
5.Pada tiap metode, user dapat melihat proses pengurutan data.

TAMBAHAN
Quick Sort
Quick sort merupakan algoritma kedua tercepat setelah merge sort. Quick sort disebut juga divide and conquer algorithm. Quick sort memiliki average case nLogn
Langkah-langkah quick sort :
1. SELECT
Pilih sebuah element , elemen ini kita sebut pivot

2. DIVIDE
Kemudian pisahkan data menjadi 2 bagian, bagian yang lebih kecil dari pivot dan bagian yang lebih besar dari pivot


3. RECUR and CONQUER
Kemudian 2 bagian tersebut diurutkan secara rekursif dengan memanggil fungsi itu sendiri, misal quicksort()


Perhatikan kode dibawah ini dan silakan di coba deprogram anda masing-masing:



Task 7
1.Bagian mana pada program yang menentukan pivot ?
2.Bagian mana pada program yang memisahkan array menjadi 2 bagian ?
3.Bagian mana pada program yang melakukan fungsi rekursif ?
Daftar Pustaka
•http://en.wikipedia.org/wiki/Sorting_algorithm
•lecturer.eepis-its.edu/~entin/Struktur%20Data/Minggu%2011/Minggu%2011%20Quick.pdf
•http://www.informatika.org/~rinaldi/Stmik/2005-2006/Makalah2006/MakalahStmik2006-27.pdf
•http://lecturer.ukdw.ac.id/anton/strukdat.php

SESI 3

ARRAY

Pertemuan kali ini kita akan kembali membahas materi yang sudah diberikan di algoritma dan pemrograman, yaitu array. Secara singkat, array adalah suatu tipe data terstruktur yang berupa sejumlah data sejenis (bertipe data sama) yang jumlahnya tetap dan diberi suatu nama tertentu.
Array dapat berupa array 1 dimensi, 2 dimensi, bahkan n-dimensi.

DEKLARASI

tipe_data nama_var_array [ukuran];

tipe_data : menyatakan jenis tipe data elemen larik (int, char, float, dll)
nama_var_array : menyatakan nama variabel yang dipakai.
ukuran : menunjukkan jumlah maksimal elemen larik.

Contoh :
Int nilai[6];

INISIALISASI

Menginisialisasi array sama dengan memberikan nilai awal array pada saat didefinisikan.
int nilai[6] = {8,7,5,6,4,3};¬¬¬¬¬

Contoh diatas berarti berarti anda memesan tempat di memori komputer sebanyak 6 tempat
dengan indeks dari 0-5, dimana indeks ke-0 bernilai 8, ke-1 bernilai 7, dst, dan dimana semua elemennya bertipe data integer.

PENGAKSESAN

nama_var_array [indeks];

Pengisian dan pengambilan nilai pada indeks tertentu dapat dilakukan dengan mengeset nilai atau menampilkan nilai pada indeks yang dimaksud. Pengaksesan elemen array dapat dilakukan berurutan atau random berdasarkan indeks tertentu secara langsung.

Contoh pengisian langsung saat deklarasi:
#include

void main ()
{ int billy [] = {16, 2, 77, 40, 12071};
int n, result=0;
for ( n=0 ; n<5 ; n++ )
{
result += billy[n];
}
printf("%d",result);
}

Contoh pengaksesan dan pengisian langsung ke tiap elemen dari array:
#include
#include

void main ()
{
int A [5]={20,9,1986,200,13},n,edit;
clrscr();
printf("Data yang lama\n");
for (n=0;n<5;n++)
{
printf("%i ",A[n]);
}
printf("\nData yang baru : \n");
A[0]=4;
A[1]=2;
A[2]=1;
A[3]=3;
A[4]=5;
for (n=0;n<5;n++)
{
printf("%i ",A[n]);
}
}

Contoh penghapusan data(elemen) pada array:
#include
#include

void main ()
{ int A [5]={20,9,1986,200,13},n,hapus;
clrscr();
printf("Data yang lama\n");
for (n=0;n<5;n++)
{
printf("%i ",A[n]);
}
printf("data yang ingin dihapus : ");
scanf("%i",&hapus);
printf("\nData yang baru : \n");
for (n=hapus-1;n<5-1;n++)
{
A[n]=A[n+1];
}
for (n=0;n<4;n++)
{
printf("%i ",A[n]);
}
}

LATIHAN
1. Buatlah fungsi untuk array 1 dimensi untuk ADD, EDIT, DELETE, dan VIEW.


STRUCT

• Bentuk struktur data yang dapat menyimpan variabel-variabel dalam 1 nama, namun memiliki tipe data yang berbeda ataupun sama. Variable-variabel tersebut memiliki kaitan satu sama yang lain.
Bentuk umum :
typedef struct nama_struct{
tipe_data ;
tipe_data ;
....
};

DEKLARASI
Ada 2 cara pendeklarasian struct, yaitu :

Deklarasi 1:
typedef struct Mahasiswa {
char NIM[8];
char nama[50];
float ipk;
};

Deklarasi 2 :
struct {
char NIM[8];
char nama[50];
float ipk;
} mhs;

Contoh struct:
#include
#include

void main()

{
struct orang
{
char nama[40];
short umur;
}saya;
printf("nama : ");
cin.getline(saya.nama,40);
printf("umur :" );
scanf("%i",&saya.umur);
printf("%s berumur %i",saya.nama,saya.umur);
}


ARRAY OF STRUCT
Apabila hendak menggunakan 1 struct untuk beberapa kali, ada 2 cara :
1. Deklarasi manual

Contoh :
#include
typedef struct Mahasiswa {
char NIM[8];
char nama[50];
float ipk;
};
void main()
{
Mahasiswa a,b,c;
……
……
……
}
artinya struct mahasiswa digunakan untuk 3 variabel, yaitu a,b,c

2. Array of struct
Contoh :
#include
typedef struct Mahasiswa {
char NIM[8];
char nama[50];
float ipk;
};
void main()
{
Mahasiswa mhs[3];
……
……
……
}

artinya struct mahasiswa dapat digunakan untuk tiga variabel mhs, yaitu mhs[0], mhs[1], dan mhs[2].

Contoh lainnya :
#include
#include
#include
typedef struct orang
{
char nama[30];
short umur;
};
void main()

{
orang saya[5];
int i,x;
for(i=0;i<=4;i++)
{
printf("nama ke-%i : ",i+1);
cin.getline(saya[i].nama,30);
printf("umur ke-%i : ",i+1);
scanf("%i",saya[i].umur);
printf("%s berumur %i",saya[i].nama,saya[i].umur);
}
for(x=0;x<=4;x++)
{
printf("nama %s berumur %d",saya[x].nama,saya[x].umur);
}
}

LATIHAN
1. Buat struct untuk data buku yang berisi tentang : kode buku, nama buku, tahun terbit, pengarang, dan harga. Gunakan array of struct.
2. Buatlah fungsi untuk soal no 1, agar dapat dimanipulasi untuk ADD, EDIT, HAPUS, dan TAMPIL
3. Cari 2 contoh kasus lain disekitar anda yang dapat menggunakan struct, selain KTP, KTM, SIM, buku.