• Tidak ada hasil yang ditemukan

Modul Praktikum Struktur Data (2)

N/A
N/A
Protected

Academic year: 2018

Membagikan "Modul Praktikum Struktur Data (2)"

Copied!
29
0
0

Teks penuh

(1)

MODUL PRAKTIKUM

STRUKTUR DATA

Dengan Borland C++ 5.2

Wahju T. Saputro

(2)

PRAKTIKUM 1

MENGENAL BORLAND C++ 5.2

1. PERINTAH KELUARAN

a. Fungsi

printf()

digunakan untuk menampilkan informasi ke layar monitor. informasi

yang ditampilkan jenis angka dan huruf.

b. Fungsi

puts()

digunakan untuk mencetak string ke layar monitor, fungsinya sama

dengan printf().

c. Fungsi

putschar()

digunakan untuk menampilkan sebuah string ke layar.

d. Fungsi

cout()

digunakan untuk menampilkan suatu data ke layar monitor. untuk

menggunakan fungsi cout() maka file header

oistream.h

harus ikut disertakan.

2. PERINTAH MASUKAN

a. Fungsi

scanf()

digunakan untuk memasukkan berbagai jenis data. Simbol &

merupakan pointer yang digunakan menunjuk ke alamat variabel yang dituju.

b. Fungsi

gets()

digunakan untuk menginputkan data string dan menerima spasi atau

tab sebagai data.

c. Fungsi

cin()

digunakan untuk menginputkan data. Fungsi ini berpasangan dengan

cout(). Untuk menggunakan fungsi cin() file header

iostream.h

harus disertakan.

d. Fungsi

getch()

digunakan untuk membaca sebuah karakter dengan sifat karakter yang

diketik tidak diakhiri tombol ENTER dan tombol yang ditekan tidak keluar di layar.

e. Fungsi

getche()

dipakai untuk membaca sebuah karakter dengan sifat karakter yang

diinputkan tidak perlu diakhiri tombol ENTER namun karakter yang diinputkan

ditampilkan di layar. Program ini modifikasi dari program getch() diatas.

Tabel1. Penentu format masukan

Tipe data

Penentu format

Integer

%d

Floating point

%e atau %f

Double precision

%lf

Character

%c

String

%s

Unsigned integer

%u

Long integer

%ld

Long unsigned integer

%lu

Unsigned hexadecimal integer

%x

Unsigned octal integer

%o

3. ARRAY

Sebuah struktur data yang terdiri dari banyak variabel dengan tipe data sama dan tersusun

secara linear dengan isi variabel yang berbeda. Array satu dimensi terdiri dari satu larik atau

deret. Array multidimensi terdiri dari baris dan kolom, berbentuk matrik atau seperti barisan

pasukan yang memiliki baris dan kolom.

4. MATERI PRAKTEK

//PROGRAM 1

//contoh penggunaan fungsi puts() #include <stdio.h>

(3)

void main() {

char data1[15]; char data2[15];

puts("Ketik nama pertama: "); gets(data1); puts("Ketik nama kedua: "); gets(data2); printf("\n");

puts("Namaku "); printf(“%s %s”, data1,data2); getch();

}

//PROGRAM 2

//contoh penggunaan fungsi getch() #include <conio.h>

#include <stdio.h> #include <iostream.h> void main() {

char huruf;

printf("Ketik sembarang huruf: "); huruf = getch();

printf("\n huruf yang diketik tadi %c", huruf); getch();

}

//PROGRAM 3

//contoh penggunaan fungsi getche() #include <conio.h>

#include <stdio.h> #include <iostream.h> void main() {

char huruf;

printf("Ketik sembarang huruf: "); huruf = getche();

printf("\n huruf yang diketik tadi %c", huruf); getch();

}

/*PROGRAM 4

Program Array 1 Dimensi

Untuk mencari bilangan terbesar*/ #include <conio.h>

#include <stdio.h> #include <iostream.h> void main() {

int x[10] = {45,34,23,34,32,12,65,76,34,23}; int i;

int mak = -1000;

for (i=0; i<10; i++) { if (x[i] > mak) {

mak = x[i]; }

}

cout << "Nilai Maksimal dalam array: " << mak << endl; getch();

}

/* PROGRAM 5

contoh program menginputkan data suhu Menggunakan array 1 dimensi*/

(4)

#include <conio.h> #include <iostream.h> void main() {

float suhu_udara[3];

cout << "Ketik tiga data suhu udara" << endl;

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

cout << i << " :"; cin >> suhu_udara[i]; }

cout << "Data suhu yang dimasukkan:" << endl; for (int i=0; i<3; i++) {

cout << suhu_udara[i] << endl; }

getch(); }

5. TUGAS PRAKTEK

a. Modifikasi PROGRAM 4 untuk menentukan bilangan terkecil.

b. Buatlah program untuk menampilkan jumlah hari dalam satu tahun. Dengan data

sebagai berikut:

int jml_hari[12] berisi

31, 28, 31, 30, 31,

30, 31, 31, 30, 31, 30, 31

Tulis jawaban anda pada selembar kertas. Beri identitas Nama Mata kuliah, NPM dan Nama

Mahasiswa.

(5)

PRAKTIKUM 2

1. MENGAKSES ARRAY BERDIMENSI SATU

Suatu array dapat diakses dengan menggunakan indeks. Bentuk umum pengaksesannya

yaitu:

Nilai_akhir[3];

Nilai_akhir[1];

Nilai_akhir[0];

Nilai_akhir[2];

Dalam array terdapat tiga tahapan yaitu:

a. Mendefinisikan tipe data. Misal

int

b. Mendefinisikan nama array. Misal

nilai_uas

c. Mendefinisikan variabel array. Misal

[3];

Maka dari tiga tahapan diatas terbentuk menjadi

int nilai_uas[3];

2. FUNGSI MANIPULATOR

Fungsi manipulator digunakan untuk mengatur tampilan di layar. Untuk menggunakan fungsi

manipulator file header yang disertakan yaitu

iomanip.h

.

a.

Endl:

digunakan untuk menyisipkan atau mengatur pindah baris. File yang

dibutuhkan yaitu

iostream.h

b.

Ends:

digunakan untuk menambahkan karakter null (nilai ASCII NOL) ke deretan

suatu karakter file yang dibutuhkan yaitu

iostream.h

c.

Setprecision():

digunakan untuk mengatur jumlah digit desimal yang ingin

ditampilkan di layar. File yang dibutuhkan yaitu

iomanip.h

d.

Setw():

digunakan untuk mengatur lebar tampilan di layar dari suatu variabel. File

yang disertakan yaitu

iomanip.h

e.

Setiosflags():

digunakan untuk mengatur sejumlah format keluaran data. Fungsi ini

digunakan pada fungsi cout(). File yang disertakan yaitu

iomanip.h

, bila

ios::left

maka mengatur tampilan sebelah kiri dan

ios::right

maka

mengatur tampilan sebelah kanan.

3. MATERI PRAKTEK

/* PROGRAM 1

mengakses array berdimensi satu data nilai ujian mahasiswa */ #include <conio.h>

#include <stdio.h> #include <iostream.h> #include <iomanip.h> void main() {

int i;

char nama[5][20]; float nilai1[5]; float nilai2[5]; float hasil[5];

for (i=1; i<=2; i++) {

cout << "Data ke- " << i << endl;

(6)

cout << "Nilai UAS : "; cin >> nilai2[i]; hasil[i] = (nilai1[i] * 0.4) + (nilai2[i] * 0.6); cout << endl;

}

cout << "============================================"; cout << endl;

cout << "No. Nama Mahasiswa Nilai UTS Nilai UAS "; cout << "============================================"; cout << endl;

for (i=1; i<=2; i++) {

cout << setiosflags(ios::left) << setw(4) << i;

cout << setiosflags(ios::left) << setw(20) << nama[i]; cout << setprecision(2) << " " << nilai1[i];

cout << setprecision(2) << " " << nilai2[i]; cout << setprecision(2) << " " << hasil[i] << endl; }

cout << "============================================"; cout << endl;

getch(); }

4. TUGAS PRAKTEK

a. Sempurnakan tampilan PROGRAM 1 diatas

b. Sebuah perusahaan Gerobak Chicken yang telah memiliki banyak pelanggan ingin

dibuatkan program untuk kelancaran usahanya. Program yang diminta yaitu mampu

menampilkan daftar menu makanan dan harganya dengan data berikut:

==============================

ID Menu Jenis Harga Satuan

==============================

D

Dada 7500

P Paha 5500

S Sayap 4000

K Kepala Leher 5000

==============================

Tulis jawaban anda pada selembar kertas. Beri identitas Nama Mata kuliah, NPM dan Nama

Mahasiswa.

(7)

PRAKTIKUM 3

1. MATERI PRAKTEK

Ketik/salin program di bawah ini. Kemudian gambarkan koordinat [baris,kolom] pemetaan

ke dalam array 2 dimensi pada buku catatan anda.

/* Program berdimensi dua menampilkan informasi perkembangan jumlah pendaftar mahasiswa baru setiap tahun */

#include <conio.h> #include <stdio.h> #include <iostream.h> #include <iomanip.h> void main() {

int i,j;

int data_jual[3] [3];

for (i=0; i<=2; i++) { for (j=0; j<=2; j++) {

cout << "Data ke-"<<i<<" "<<j<< endl;

cout << "Jumlah Penjualan: "; cin >> data_jual[i] [j]; }

}

cout << "Data Penjualan Per Tahun" << endl; cout << " Sepeda Motor " << endl; cout << "========================" << endl; cout << "No 2003 2004 2005 " << endl; cout << "========================" << endl;

for (i=0; i<=2; i++) {

cout << setiosflags(ios::left) << setw(5) << i; for (j=0; j<=2; j++) {

cout << setiosflags(ios::right) << setw(4); cout << data_jual[i] [j];

cout << " "; }

cout << endl; }

cout << "========================" << endl; getch();

}

SOAL LATIHAN

Buat program 2D untuk menampilkan data penerimaan mahasiswa baru berikut selama 5

tahun

====================================

No

2008 2009 2010 2011 2012

====================================

0

201

264

278

234

280

1

305

214

335

275

395

(8)

Ketik/salin program di bawah ini. Kemudian gambarkan koordinat [baris,isi baris,kolom]

pemetaan ke dalam array 3 dimensi pada buku catatan anda.

/* program berdimensi tiga penjualan sepeda motor */ #include <conio.h>

#include <stdio.h> #include <iostream.h> #include <iomanip.h> void main() {

int i,j,k;

int data_jual[2] [3] [2];

for (i=0; i<2; i++) { for (j=0; j<3; j++) {

for (k=0; k<2; k++) {

cout << "Data tahun ke- " << i << endl; cout << "Data ke-" << j << " "<< k << endl; cout << "Jumlah Penjualan : ";

cin >> data_jual[i] [j] [k]; }

cout << endl; }

cout << endl; }

cout << endl;

cout << "Data Penjualan per tahun" << endl;

cout << "==================================="; cout << endl; cout << "Tahun|Hasil ke| Tahun Penjualan ke "; cout << endl; cout << " | | I II "; cout << endl; cout << "==================================="; cout << endl; cout << endl;

for (i=0; i<2; i++) { for (j=0; j<3; j++) {

cout << setiosflags(ios::left) << setw(11) << i; cout << setiosflags(ios::left) << setw(9) << j; for (k=0; k<2; k++) {

cout << setiosflags(ios::right) << setw(5); cout << data_jual[i] [j] [k];

cout << " "; }

cout << endl; }

cout << endl; }

cout << "=================================="; cout << endl; getch();

}

SOAL LATIHAN

1. Buat program 2D menghitung nilai akhir mahasiswa dengan ketentuan berikut:

2. NIM, nilai tugas, UTS, UAS diinputkan.

Proses yang dilakukan yaitu:

(9)

b. Nilai UTS = nilai UTS x 30%

c. Nilai UAS = nilai UAS x 40%

d. Nilai akhir = nilai tugas + nilai UTS + nilai UAS

Tampilan yang muncul sebagai berikut:

Daftar Nilai Akhir Mahasiswa

========================================

No NIM Tugas UTS UAS Akhir

========================================

... ....

... ... ....

....

... ....

... ... ....

....

... ....

... ... ....

....

========================================

(10)

PRAKTIKUM 4

BUBBLE SORT

Sorting yang paling sederhana. Disebut bubble karena setiap kunci lambat laun akan

menggelembung ke posisi yang tepat hingga data terurut. Urutan data ada dua macam yaitu

ascending (naik) dan descending (turun).

Salah satu sifat dari sorting ini yaitu mudah diimplementasikan ke dalam program dan

mudah dipelajari. Dalam Bubble Sort L merupakan array bertipe integer, dimana N data

pertama akan diurutkan, sehingga L[k] <= L[j] untuk 1 <= k <= N. Setiap langkah mengandung

proses membandingkan antara satu record dengan record record kunci. Dalam notasi ditulis

L[k] dengan L[k-1] dan menukar tempat bila urutannya tidak tepat.

Berikut ini adalah bagian inti potongan program Bubble Sort:

1. if (L[k] < L[k-1]) {

//proses validasi membandingkan data

2.

temp = L[k];

//memindah data L[k] ke variabel temp

3.

L[k] = L[k-1];

//memindah data L[k] ke L[k-1]

4.

L[k-1] = temp;

//memindah data di var temp ke L[k-1]

}

Latihan 1:

Coba ketik program di bawah ini dan bandingkan hasil dari program dengan proses manual

anda.

#include <stdio.h> #include <conio.h> #include <iostream.h>

void main() {

int i,k,temp;

int L[5]; //jml data dlm array yg diurutkan

//Jumlah elemen dalam array ada 5 L[0]=1;

L[1]=9; L[2]=17; L[3]=3; L[4]=7;

//Proses secara Ascending(naik) for (i = 0; i <= 4; i++)

for (k = 4; k >= 0; k--)

if (L[k] < L[k-1]) { //proses membandingkan ascending temp = L[k];

L[k] = L[k-1]; L[k-1] = temp; }

//bagian menampilkan data setelah diurutkan for (i=0; i<=4; i++)

cout << L[i] << endl; getch();

}

(11)

PRAKTIKUM 5

POINTER MENGGUNAKAN DEREFERENCE

#include <conio.h>

#include <stdio.h>

#include <iostream.h>

void main() {

int dewi, amir, *raka;

dewi = 89;

amir = dewi;

raka = &dewi;

cout <<"Nilai Dewi: " << dewi << endl;

cout <<"Nilai Amir: " << amir << endl;

cout <<"Nilai Raka: " << raka << endl;

getch();

}

POINTER MENGGUNAKAN REFERENCE

#include <stdio.h>

#include <iostream.h>

void main() {

int dewi, *amir, raka;

dewi = 89;

amir = &dewi;

raka = *amir;

cout <<"Nilai Dewi: " << dewi << endl;

cout <<"Nilai Amir: " << amir << endl;

cout <<"Nilai Raka: " << raka << endl;

getch();

}

PROGRAM POINTER UNTUK KONSTANTA

#include <stdio.h>

#include <conio.h>

#include <iostream.h>

void main() {

char *const nama="Dewi Kartikasari";

cout << "Nama Lengkap: " << nama << endl;

getch();

(12)

POINTER PADA POINTER

#include <conio.h>

#include <iostream.h>

#include <stdio.h>

void main() {

int dewi;

int *raka;

int **amir;

dewi = 89;

cout <<"Nilai Dewi: " << dewi << endl;

raka = &dewi;

amir = &raka;

cout <<"Nilai Raka hasil dari mengakses variabel Dewi: ";

cout << *raka << endl;

cout <<"Nilai Amir hasil dari mengakses variabel Dewi: ";

cout << **amir << endl;

getch();

}

POINTER PADA ARRAY

#include <conio.h>

#include <stdio.h>

#include <iostream.h>

void main() {

int i;

int nilai[5];

int *pnilai;

pnilai = nilai;

for(i=1; i<=5; i++) {

cout << "Masukkan nilai: "; cin >> nilai[i];

}

cout << endl;

cout << "Hasil proses pointer pada array";

cout << endl << endl;

for(i=1; i<=5; i++) {

cout << "Elemen "<< i <<". Nilai "<< nilai[i];

cout << ", berada di lokasi memori ";

cout << &pnilai[i];

cout << endl;

}

getch();

}

(13)

PRAKTIKUM 6

cout <<"%i"<< endl; cin >> N);

Lo = 0;

Hi = n-1;

Flag = 0;

while(Lo <= Hi && Flag == 0) {

Mid = (Lo + Hi) / 2;

if(N == A[Mid])

Flag = 1;

else {

if(N < A[Mid])

Hi = Mid - 1;

else

Lo = Mid + 1;

}

}

If(Flag == 1)

cout <<"Data ditemukan" <<endl;

else

cout <<"Data tidak ada" << endl;

Contoh Program Searching Pertama:

Program pertama di bawah ini data yang diurutkan berada pada

array[size], dimana berisi

10 data.

#include <iostream.h> #include <stdio.h> #include <conio.h>

int binary_search(int array[], int size, int elemen); void main() {

const int size=10;

int array[size]={0,6,9,12,20,23,29,32,47,79}; cout <<"Isi dari array: "<< endl;

for(int i=0; i<size; i++) cout <<" "<< array[i];

int elemen; int tanda; cout <<"\n\n";

cout <<"Ketik data yang dicari: "; cin >> elemen;

cout <<"\n\n";

tanda=binary_search(array,size,elemen); if(tanda!=-1)

cout<<"data "<< elemen <<" di array["<<tanda<<"]"<<" /deret ke "<< (tanda+1);

else

cout <<"\n data tidak ditemukan"; getch();

}

int binary_search(int array[],int size,int elemen) { int start=0;

int end=size-1; int middle;

Set awal nilai variabel pada

array

Hitung middle pada array

Jika nilai N == A[Mid] proses

selesai

(14)

int posisi=-1;

middle=(start + end) / 2; do {

if(elemen < array[middle]) end=middle-1;

else if(elemen > array[middle]) start=middle+1;

middle=(start+end)/2; }

while(start <= end && array[middle] != elemen); if(array[middle] == elemen)

posisi=middle; return posisi; }

Contoh Program Searching Kedua:

Pada program kedua ini data yang diinputkan dari keyboard dapat tidak urut, sehingga

waktu melakukan searching data harus diurutkan terlebih dulu. Lihat bagian baris program

berikut

#include <stdio.h> #include <conio.h>

void main() {

//deklarasi variabel

int A[10], i,j,k,tkr,top,bottom,middle,tm; //proses penginputan data

for(i=0;i<10;i++) {

printf("Data ke-%d:",i+1); scanf("%d",&A[i]);

}

printf("Masukkan data yang akan anda cari:"); scanf("%d",&k);

//proses pengurutan data for(i=0;i<10;i++) {

for(j=i+1;j<10;j++) { if (A[i]>A[j]) {

tkr=A[i]; A[i]=A[j]; A[j]=tkr; }

} }

//proses pencarian data tm=0;

top=9; bottom=0;

while(top>=bottom) {

middle=(top+bottom)/2; if(A[middle]==k) {

tm++; }

if(A[middle]<k) { bottom=middle+1; }

else {

(15)

} }

if (tm>0) {

printf("Data %d yang dicari ada dalam array ini\n",k); }

//jika tidak ditemukan else {

printf("Data tidak ditemukan dalam array ini\n"); }

getch(); }

Contoh Program Searching Ketiga:

Program terakhir/ketiga ini bila dijalankan hasilnya kurang komunikatif. Sewaktu program dijalankan pertama kali harus ada kalimat “Silahkan ketika angka yang dicari”. Kemudian ubah/modifikasi program dibawah ini ke bentuk biasa tidak menggunakan function. Selamat mengerjakan !.

#include <conio.h> #include <stdio.h> #include <iostream.h> #define n 10

void binsearch(int A[], int N) { int lo,hi,mid,flag;

lo = 0; hi = n-1; flag = 0; while(lo <= hi && flag == 0) {

mid = (lo + hi) / 2; if(N == A[mid])

flag = 1; else

if(N < A[mid]) hi = mid - 1; else

lo = mid + 1; }

if(flag == 1)

printf("\nNilai %i ditemukan pada kolom %i", N, mid); else

printf("\nNilai %i tidak ditemukan", N); }

void main() { int N;

int A[n]={3,5,7,9,17,25,40,55,62,80}; int i,lo,hi,mid,flag;

scanf("%i", &N); binsearch(A,N); getch();

}

(16)

PRAKTIKUM 7

MERGE SORT

Pengurutan yang dilakukan dengan teknik menggabungkan dua buah array ke dalam array

baru. Penggabungan isi dua buah array hanya bisa dilakukan bila kedua array tersebut

berisid ata yang sudah urut. Panjang kedua array tidak harus sama dengan kata lain boleh

berbeda.

A

[0]

[1]

[2]

[3]

[4]

5

17

20

35

37

B

[0]

[1]

[2]

[3]

[4]

[5]

[6]

7

10

12

20

25

27

30

C

[0]

[1]

[2]

[3]

[4]

[5]

[6]

[7]

[8]

[9]

[10] [11]

5

7

12

12

17

20

20

25

27

30

35

37

Algoritma:

k=0; i=0; j=0;

while(i<=4 && j<=6) {

if(a[i] <= b[j]) {

c[k] = a[i];

k++;

i++;

}

else {

c[k] = b[j];

k++;

j++;

}

}

while(i<=4) {

c[k] = a[i];

k++;

i++;

}

while(j<=6) {

c[k] = b[j];

k++;

j++;

}

Selama isi array A dan B masih ada

kerjakan proses looping. Keluar dari

looping bila salah satu habis

Menyalin isi array A atau B (mana yang

lebih kecil) ke array C. Bila isi array A

yang disalin, maka I tambah 1.

Bila isi aray B yang disalin maka J

tambah 1. Setiap menyalin ke C maka K

sealu bertambah 1.

Menyalin sisa isi array A bila isi array B

yang lebih dulu selesai disalin. Untuk

contoh diatas nilai 35 dan 37.

(17)

Program

//merge sort

#include <stdio.h>

#include <conio.h>

#include <iostream.h>

#define n 11

void main() {

int i,j,k,size,L1,L2,U1,U2;

int a[n]= {25,12,37,15,20,45,17,5,27,7,32};

int aux[n];

printf("Sebelum diurutkan:\n ");

for(i=0; i<n-1; i++)

printf(" %d", a[i]);

printf("\n");

size=1;

while(size < n) {

L1=0;

k=0;

while(L1 + size < n) {

L2=L1+size;

U1=L2-1;

if(L2+size-1 < n)

U2=L2+size-1;

else

U2=n-1;

i=L1;

j=L2;

while(i<=U1 && j<=U2) {

if(a[i] <= a[j])

aux[k]=a[i++];

else

aux[k]=a[j++];

k++;

}

while(i<=U1) {

aux[k]=a[i];

i++;

k++;

}

while(j<=U2) {

aux[k]=a[j];

j++;

k++;

}

L1=U2+1;

}

Deklarasikan isi array

Buat aux

Untuk pertama kali

ketika size=1; L1=0 dan

k=0;

Merge pertama kali

ketika size=1; L1=0;

dan K=0; lakukan

perbandingan dan

pertukaran sampai

merge tahap 1 selesai

Salin isi array A

Salin isi array B

(18)

for (i=L1; k<n; i++) {

aux[k++]=a[i];

}

for (i=0; i<n; i++) {

a[i]=aux[i];

}

size=size*2;

printf("\n\nSetelah diurutkan:\n ");

for(i=0; i<=n-1; i++)

printf(" %d", a[i]);

}

getch();

}

QUICK SORT

Disebut juga Partition Exchange Sort (PES) karena mempunyai average bihaviour yang

terbaik diantara metode sort yang ada. Disebut PES karena membuat partisi-partisi dan

pengurutan dilakukan per partisi.

Proses dari Quick Sort yaitu mengambil satu buah nilai pada posisi tertentu yang disebut

pivot. Pivot dapat diambil dari data paling kiri atau yang berada di tengah. Qucik Sort dalam

melakukan proses pengurutan dapat menggunakan cara non rekursif atau rekursif.

Algoritma dan Program

#include <stdio.h>

#include <conio.h>

#include <iostream.h>

#define n 11

int a[n]={25,12,38,15,20,45,34,3,29,7,22};

void sort(int l, int r);

void main() {

int i;

printf("Sebelum urut: ");

for(i=0; i<=n-1; i++)

printf(" %d", a[i]);

printf("\n");

sort(0,n-1);

printf("\nSetelah diurutkan:");

for(i=0; i<=n-1; i++)

printf(" %d",a[i]);

getch();

}

void sort(int kiri,int kanan) {

int i,j,pivot,w;

i=kiri;

j=kanan;

pivot=a[i];

Salin apa adanya untuk kelompok yang

tidak punya pasangan mergenya.

Setiap selesai suatu tahap

salin kembali isi array dari

aux ke A

Untuk n=11 maka size= 1, 2, 4, 8

jadi ada 4 tahap proses merge

Ganti perintah pivot=a[i]; dengan

(19)

while(i <= j) {

while(a[i] < pivot)

i++;

while(pivot < a[j])

j--;

if(i <= j) {

w=a[i];

a[i]=a[j];

a[j]=w;

i++;

j++;

}

}

if(kiri < j) sort(kiri,j);

if(i < kanan) sort(i,kanan);

}

Latihan:

Bila diketahui data angka berikut ini: 5 12 7 17 19 15 27 32 25 22. Buat programnya

untuk mengurutkan secara:

1. Merge Sort

2. Quick Sort

(20)

PRAKTIKUM 8

INSERTION SORT

Pengurutan dilakukan dengan cara membandingkan data ke-i sampai data terakhir. Dimana

data ke-i dimulai dari data kedua sampai terakhir. Jika ditemukan data yang lebih kecil maka

data tersebut disisipkan ke depan sesuai posisi seharusnya.

Algoritma:

#define n 7

k=1;

while(k <= n-1) {

i = k;

x = A[i];

while(i >= 1 && A[i-1] > X) {

A[i] = A[i-1];

i--;

}

A[i] = X;

k++;

}

Jika algoritma diatas menggunakan for() maka potongan kode programnya sebagai berikut:

#define n 7

For(k=1; k = n-1; k++) {

X = A[k];

for(i=k; I>= 1 && A[i-1] > X; i--) {

A[i] = A[i-1];

}

A[i] = X;

}

Latihan:

Berbekal algoritma diatas lengkapi program dibawah ini sehingga dapat dijalankan.

Perhatikan kode program yang di dalam kotak. Kemudian simpan filenya dengan nama

insert_XXXX.cpp

dimana XXXX adalah 4 digit NIM anda.

#include <stdio.h>

#define n 5

void main() {

int i,k,X;

int A[n]={7,22,17,5,12};

printf("Sebelum diurutkan: \n");

for(i=0; i <= n-1; i++)

printf(" %d", A[i]);

Setiap kali menemukan elemen

yang lebih besar dari X, maka

geser elemen tersebut satu

langkah ke kanan. Geser

dinotasikan dengan

A[i-1];

i--;

(21)

for(k=1; k <= -1; k++) {

i = k;

X = A[i];

while(i >= 1 && A[i-1] > X) {

A[i] = A[i-1];

i--;

}

A[i] = X;

}

k++;

printf("\nSesudah diurutkan: \n");

for(i=0; i <= n-1; i++)

printf(" %d", A[i]) ;

}

SELECTION SORT

Selection sort mencari data dari elemen berikutnya sampai dengan elemen yang terakhir.

Jika ditemukan elemen lain yang lebih kecil dari elemen sekarang maka elemen yang

bersangkutan akan ditukar. Demikian seterusnya.

Algoritma:

#define n 7

k=0;

while(k <= n-2) {

j=k;

i=k+1;

while(i <= n-1) {

if(a[i] < A[j])

j=i;

i++;

}

X=A[j];

A[j]=A[k];

A[k]=x;

k++;

}

Latihan:

Coba jalankan program dibawah ini. Bila kurang lengkap silahkan dilengkapi berbekal

algoritma diatas.

#include <stdio.h>

#include <conio.h>

#define n 5

void main() {

int A[n]={7,22,17,5,12};

J=indek untuk

nilai terkecil.

Nilai yang terkecil ditukar

tempat (swap) dengan A[K],

sehingga A[K] menyimpan

nilai terkecil.

Ambil nilai A[J],

(22)

int J,X,I,K;

printf("Sebelum diurutkan \n");

for(I=0; I <= n-1; I++)

printf(" %d", A[I]);

printf("\n");

K=0;

while(K <= n-2) {

J=K; I=K+1;

while(I <= n-1) {

if(A[I] < A[J])

J=I;

I++;

}

X = A[J];

A[J] = A[K];

A[K] = X;

}

K++;

printf("Sesudah diurutkan: \n");

for(I=0; I <= n-1; I++)

printf(" %d", A[I]);

getch();

}

Kemudian ubah program diatas menjadi

urut Descending, sebagai bantuan perhatikan baris

program dalam kotak. Kemudian simpan filenya dengan nama

select_XXXX.cpp

dimana

XXXX adalah 4 digit NIM anda.

Bubble Sort

Metode pengurutan yang membandingkan elemen sekarang dengan elemen berikutnya. Bila

elemen sekarang lebih besar dari elemen berikutnya maka posisi ditukar.

Algoritma:

#define n 7

Flag=1;

for(k=0; k <= n-2 && flag=1; k++) {

flag=0;

for(i=0; I <= n-2–K; I++) {

if(A[I] > A[I+1]) {

flag=1;

X=A[I];

A[I]=A[I+1];

A[I+1] = X;

}

}

}

Apabila ada pertukaran/swap maka

flag dibuat = 1. Bila pada loop

bagian dalam tidak ada pertukaran

berarti data sudah urut, tidak perlu

memeriksa nilai K berikutnya.

(23)

Latihan:

Coba jalankan program dibawah ini. Bila kurang lengkap silahkan dilengkapi berbekal

algoritma diatas.

#include <stdio.h>

#include <conio.h>

#define n 5

void main() {

int A[n]={7,22,17,5,12};

int X,I,K,flag;

printf("Sebelum diurutkan: \n");

for(I=0; I <= n-1; I++)

printf(" %d", A[I]);

printf("\n");

K=0;

flag=1;

while(K <= n-2 && flag==1) {

I=0; flag =0;

while(I <= n-1 - K) {

if(A[I] > A[I+1]) {

flag=1;

X=A[I];

A[I]=A[I+1];

A[I]=X;

}

I++;

}

K++;

}

printf("Sesudah diurutkan: \n");

for(I=0; I<= n-1; I++)

printf(" %d", A[I]);

getch();

}

Kemudian ubah program diatas menjadi

urut Descending, sebagai bantuan perhatikan baris

program dalam kotak. Kemudian simpan filenya dengan nama

bubble_XXXX.cpp

dimana

XXXX adalah 4 digit NIM anda.

Proses Akhir:

Setelah semua materi praktikum diatas dikerjakan. Kemudian ketiga file yaitu:

1. Insert_XXXX.cpp

2. Select_XXXX.cpp

3. Bubble_XXXX.cpp

Dikompres menjadi satu dengan format .RAR dan diberi nama XXXX.RAR dimana XXXX

adalah 4 digit NIM anda selanjutnya kirim ke alamat server.

(24)

PRAKTIKUM 9

Berikut ini contoh program stack biasa.

#include <stdio.h>

#include <conio.h>

#include <iostream.h>

#define n 10

void main() {

int S[n], top, X;

top = -1;

scanf("%i", &X);

while(X != 999) {

if(X>=60) {

if(top < n-1) {

top++;

S[top] = X;

}

else {

printf("Maaf Stack Sudah Penuh");

break;

}

}

else {

if(top > -1) {

X = S[top];

top--;

printf("Diambil data: %i\n", X);

}

else {

printf("Maaf Stack Kosong");

break;

}

}

scanf("%i", &X);

}

getch();

printf("\nSelesai");

}

Berikut ini contoh program stack modifikasi dari program di atas menggunakan fungsi.

#include <stdio.h>

#include <conio.h>

#include <iostream.h>

#define n 10

int S[n], top; //variabel ini bersifat global

//lakukan inisialisasi

void inisialisasi() {

Deklarasikan 10

tumpukan

Semua variabel bersifat

lokal

Inisialisasi

awal

Jika diinputkan

angka 999 looping

selesai

Jika diinputkan data diatas 60. Periksa stack, jika

kosong/bisa diisi lakukan PUSH dan kembali

melakukan perulangan.

Bila stack sudah penuh

proses berhenti

Jika diinputkan di bawah 60. Periksa

stack, jika ada isinya lakukan POP dan

tampilkan data di layar.

(25)

top = -1;

}

//buat fungsi BISA DIISI

int bisadiisi() {

if(top < n-1)

return 1;

else

return 0;

}

//buat fungsi ADA ISINYA

int adaisinya() {

if(top > -1)

return 1;

else

return 0;

}

//buat fungsi tambah

void PUSH(int X) {

top++;

S[top] = X;

}

//buat fungsi ambil

int POP() {

int X;

X = S[top];;

top--;

return(X);

}

void main() {

int X;

inisialisasi();

scanf("%i", &X);

while(X != 999) {

if(X>=60) {

//lakukan PUSH

if(bisadiisi())

{ PUSH(X); }

else {

printf("Maaf stack penuh");

printf("%i tidak bisa disimpan", X);

break;

}

}

else {

//lakukan POP

if(adaisinya()) {

X = POP();

(26)

}

else {

printf("Maaf Stack kosong");

break;

}

}

scanf("%i", &X);

}

getch();

printf("\nSelesai");

}

SOAL PRAKTIKUM

1. Buat program untuk menampilkan isi tiga variabel A B C dimana A=2 B=2 C=2 dan

menyalin tiga variabel X Y Z dimana X=1 Y=2 Z=3 dengan proses: nilai tiga variabel

pada A B C dikalikan dengan nilai pada X Y Z. Gunakan operator A*=2 dan seterusnya.

Misal: A=2 X=1 maka hasilnya X=2

B=2 Y=3 maka hasilnya Y=6 dan seterusnya.

2. Dianggap tempat yang tersedia masih lebih dari 5 tempat. Tulis program untuk

menginputkan sebanyak 5 buah data melalui keyboard satu per satu dan melakukan

PUSH ke dalam stack. Gunakan

while(I=<5)

.

(27)

PRAKTIKUM 10

Struktur dapat menampung data seperti layaknya database namun hanya tersimpan di

memori. Struktur memiliki elemen struktur atau dalam database disebut atribut/field. Di

dalam struktur elemen terdapat struktur yang mana pada database disebut record/data.

Berikut ini contoh program sederhana dari struktur:

/* contoh program penggunaan struktur ====================================*/ #include <conio.h>

#include <stdio.h> #include <iostream.h> void main() {

struct { int npm;

char nama[30]; char asalkota[15]; float ipk;

} mahasiswa;

cout << "Ketik NPM : "; cin >> mahasiswa.npm; cout << "Ketik Nama Mahasiswa: "; cin >> mahasiswa.nama; cout << "Ketik Asal kota : "; cin >> mahasiswa.asalkota; cout << "Ketik IPK : "; cin >> mahasiswa.ipk;

cout << endl;

cout << "NPM : " << mahasiswa.npm << endl; cout << "Nama: " << mahasiswa.nama << endl; cout << "Asal: " << mahasiswa.asalkota << endl; cout << "IPK : " << mahasiswa.ipk << endl; getch();

}

Setelah mempelajari program diatas buat/ketik program dibawah ini, jangan lupa semua file

hasil praktikum disimpan ke folder masing-masing.

1. Program Pertama

Ketik dan pelajari program di bawah ini:

//contoh program struktur dalam struktur #include <stdio.h>

#include <conio.h> #include <iostream.h> void main() {

struct data_mhs {

char nim[10]; //mak 9 digit 1 digit NULL char nama[20];

};

struct data_nil { float nil_uts;

float nil_uas; };

struct {

(28)

cout << "Ketik NIM : "; cin >> gabung.mhs.nim; cout << "Ketik Nama : "; cin >> gabung.mhs.nama; cout << "Ketik nilai UTS: "; cin >> gabung.nilai.nil_uts; cout << "Ketik nilai UAS: "; cin >> gabung.nilai.nil_uas;

cout << endl;

cout << "NIM Anda : " << gabung.mhs.nim << endl; cout << "Nama Mahasiswa: " << gabung.mhs.nama << endl; cout << "Nilai UTS : " << gabung.nilai.nil_uts << endl; cout << "Nilai UAS : " << gabung.nilai.nil_uas << endl; cout << endl;

getch(); }

2. Program Kedua

Ketik dan pelajari program di bawah ini:

float nilai; } mhs[3];

for (i=0; i<2; i++) {

cout << "Data ke- " << j++ << endl;

cout << "Ketik NIM : "; cin >> mhs[i].nim; cout << "Ketik Nama Mhs : "; cin >> mhs[i].nama; cout << "Ketik Nilai Akhir: "; cin >> mhs[i].nilai; cout << endl;

}

cout << "\n\nData Yang Diinputkan Adalah\n\n"; for (i=0; i<2; i++) {

cout << "Data ke- " << k++ << endl;

cout << "NIM : " << mhs[i].nim << endl; cout << "Nama Mhs: " << mhs[i].nama << endl; cout << "Nilai : " << mhs[i].nilai << endl;

cout << "Grade : "; cout << grade(mhs[i].nilai) << endl; cout << endl;

}

getch(); }

//fungsi grade() untuk menentukan grid/kriteria

char grade(float n) { // tipe data dalam kurung bisa int/float/double if (n > 80) return 'A';

else if (n > 70) return 'B'; else if (n > 60) return 'C'; else if (n > 40) return 'D'; else return 'E';

}

3. Program Ketiga

// contoh program array pada struktur //=================================== #include <stdio.h>

#include <conio.h> #include <iostream.h> #include <iomanip.h>

//char grade(float n); void main() {

(29)

struct {

char nim[10]; char nama[20]; float nilai; } mhs[3];

for (i=0; i<2; i++) {

cout << "Data ke- " << j++ << endl;

cout << "Ketik NIM : "; cin >> mhs[i].nim; cout << "Ketik Nama Mhs : "; cin >> mhs[i].nama; cout << "Ketik Nilai Akhir: "; cin >> mhs[i].nilai; cout << endl;

}

cout << "\n\nData Yang Diinputkan Adalah\n\n"; for (i=0; i<2; i++) {

cout << "Data ke- " << k++ << endl; cout << "NIM : " << mhs[i].nim << endl; cout << "Nama Mhs: " << mhs[i].nama << endl; cout << "Nilai : " << mhs[i].nilai << endl; }

getch(); }

4. Program Empat: Tugas Latihan

3. Buat program 2D menghitung nilai akhir mahasiswa dengan ketentuan berikut:

4. Nomor urut, Nama Mhs, NIM, nilai tugas, UTS, UAS diinputkan.

Proses yang dilakukan yaitu:

e. Nilai tugas = nilai tugas x 30%

f. Nilai UTS = nilai UTS x 30%

g. Nilai UAS = nilai UAS x 40%

Tampilan yang muncul sebagai berikut:

Daftar Nilai Akhir Mahasiswa

=======================================

No NIM

Nama Mhs Tugas UTS UAS Akhir

=======================================

1

4301 Bejo

73

81

79 76.2

2

4302 Dewi

80

66

82 82.5

3

4303 Santi

69

72

58 64.5

=======================================

Referensi

Dokumen terkait

Tinta cetak di sesuaikan dengan teknik cetak yang akan di gunakan,jadi tidak ada antara teknik cetak yang satu dengan teknik cetak yang lainnya menggunakan satu jenis tinta

Kehidupan berpolitik dalam Negara menurut masyarakat Betawi seperti yang sudah diungkapkan diatas merupakan bagian dari kehidupan mereka dalam bernegara, hanya saja orang Betawi

Penerapan standar memerlukan prasarana teknis dan institusional meliputi standar produk dan standar pendukungnya (cara uji, cara pengukuran, dsb), lembaga penilaian

Minat terhadap sains yang dimiliki siswa dengan LS rendah menunjukkan: sikap rasa ingin tahu terhadap sains dan isu-isu yang berkaitan dengan sains kurang baik;

Berdasarkan hasil penelitian yang telah dilakukan pada Klinik Hadi Wijaya Kota metro, dapat disimpulkan bahwa berdasarkan hasil pengembangan dan pengujian yang telah

Populasi penelitian meliputi seluruh tanaman pekarangan yang berada di wilayah Kecamatan Tawangsari Kabupaten Sukoharjo, sedangkan sampel penelitian meliputi sebagian

Wika In-Trade, agar pelatihan bermakna dan dapat meningkatkan pengetahuan dan skill peserta, maka model pelatihan yang berorientasi pada kebutuhan peserta (pegawai) dan kebutuhan

masyarakat akan memilih lokasi minimarket yang lebih dekat untuk memenuhi kebutu- hannya agar mereka dapat menghemat waktu dan tenaga serta biaya perjalanan