Modul Praktikum Struktur Data

29
MODUL PRAKTIKUM STRUKTUR DATA Dengan Borland C++ 5.2 Wahju T. Saputro YOGYKARTA 2012

Transcript of Modul Praktikum Struktur Data

MODUL PRAKTIKUM

STRUKTUR DATADengan Borland C++ 5.2

Wahju T. Saputro

YOGYKARTA2012

PRAKTIKUM 1MENGENAL BORLAND C++ 5.2

1. PERINTAH KELUARANa. 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 MASUKANa. 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 diinputkanditampilkan di layar. Program ini modifikasi dari program getch() diatas.

Tabel1. Penentu format masukanTipe data Penentu format

Integer %dFloating point %e atau %fDouble precision %lfCharacter %cString %sUnsigned integer %uLong integer %ldLong unsigned integer %luUnsigned hexadecimal integer %xUnsigned octal integer %o

3. ARRAYSebuah struktur data yang terdiri dari banyak variabel dengan tipe data sama dan tersusunsecara linear dengan isi variabel yang berbeda. Array satu dimensi terdiri dari satu larik atauderet. Array multidimensi terdiri dari baris dan kolom, berbentuk matrik atau seperti barisanpasukan yang memiliki baris dan kolom.

4. MATERI PRAKTEK//PROGRAM 1//contoh penggunaan fungsi puts()#include <stdio.h>#include <conio.h>

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 4Program Array 1 DimensiUntuk 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 5contoh program menginputkan data suhuMenggunakan array 1 dimensi*/

#include <stdio.h>

#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 PRAKTEKa. 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 NamaMahasiswa.

=== 0 ===

PRAKTIKUM 2

1. MENGAKSES ARRAY BERDIMENSI SATUSuatu array dapat diakses dengan menggunakan indeks. Bentuk umum pengaksesannyayaitu:

Nilai_akhir[3];Nilai_akhir[1];Nilai_akhir[0];Nilai_akhir[2];

Dalam array terdapat tiga tahapan yaitu:a. Mendefinisikan tipe data. Misal intb. Mendefinisikan nama array. Misal nilai_uasc. Mendefinisikan variabel array. Misal [3];

Maka dari tiga tahapan diatas terbentuk menjadi int nilai_uas[3];

2. FUNGSI MANIPULATORFungsi manipulator digunakan untuk mengatur tampilan di layar. Untuk menggunakan fungsimanipulator file header yang disertakan yaitu iomanip.h.

a. Endl: digunakan untuk menyisipkan atau mengatur pindah baris. File yangdibutuhkan yaitu iostream.h

b. Ends: digunakan untuk menambahkan karakter null (nilai ASCII NOL) ke deretansuatu karakter file yang dibutuhkan yaitu iostream.h

c. Setprecision(): digunakan untuk mengatur jumlah digit desimal yang inginditampilkan di layar. File yang dibutuhkan yaitu iomanip.h

d. Setw(): digunakan untuk mengatur lebar tampilan di layar dari suatu variabel. Fileyang disertakan yaitu iomanip.h

e. Setiosflags(): digunakan untuk mengatur sejumlah format keluaran data. Fungsi inidigunakan pada fungsi cout(). File yang disertakan yaitu iomanip.h, bilaios::left maka mengatur tampilan sebelah kiri dan ios::right makamengatur tampilan sebelah kanan.

3. MATERI PRAKTEK/* PROGRAM 1

mengakses array berdimensi satudata 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;cout << "Nama Mahasiswa: "; gets(nama[i]);cout << "Nilai UTS : "; cin >> nilai1[i];

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 PRAKTEKa. Sempurnakan tampilan PROGRAM 1 diatasb. Sebuah perusahaan Gerobak Chicken yang telah memiliki banyak pelanggan ingin

dibuatkan program untuk kelancaran usahanya. Program yang diminta yaitu mampumenampilkan daftar menu makanan dan harganya dengan data berikut:

==============================ID Menu Jenis Harga Satuan

==============================D Dada 7500P Paha 5500S Sayap 4000K Kepala Leher 5000

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

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

=== 0 ===

PRAKTIKUM 3

1. MATERI PRAKTEK

Ketik/salin program di bawah ini. Kemudian gambarkan koordinat [baris,kolom] pemetaanke dalam array 2 dimensi pada buku catatan anda.

/* Program berdimensi dua menampilkan informasiperkembangan jumlah pendaftar mahasiswabaru 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 LATIHANBuat program 2D untuk menampilkan data penerimaan mahasiswa baru berikut selama 5tahun====================================No 2008 2009 2010 2011 2012====================================0 201 264 278 234 2801 305 214 335 275 395====================================

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 LATIHAN1. Buat program 2D menghitung nilai akhir mahasiswa dengan ketentuan berikut:2. NIM, nilai tugas, UTS, UAS diinputkan.

Proses yang dilakukan yaitu:a. Nilai tugas = nilai tugas x 30%

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========================================... .... ...... ..... .... ....... .... ...... ..... .... ....... .... ...... ..... .... ....========================================

== 0 ==

PRAKTIKUM 4

BUBBLE SORTSorting yang paling sederhana. Disebut bubble karena setiap kunci lambat laun akanmenggelembung ke posisi yang tepat hingga data terurut. Urutan data ada dua macam yaituascending (naik) dan descending (turun).

Salah satu sifat dari sorting ini yaitu mudah diimplementasikan ke dalam program danmudah dipelajari. Dalam Bubble Sort L merupakan array bertipe integer, dimana N datapertama akan diurutkan, sehingga L[k] <= L[j] untuk 1 <= k <= N. Setiap langkah mengandungproses membandingkan antara satu record dengan record record kunci. Dalam notasi ditulisL[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 data2. temp = L[k]; //memindah data L[k] ke variabel temp3. 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 manualanda.#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 5L[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 ascendingtemp = L[k];

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

}

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

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

}== 0 ==

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();

}

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();

}

==0==

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;elseLo = Mid + 1;

}}If(Flag == 1)cout <<"Data ditemukan" <<endl;

elsecout <<"Data tidak ada" << endl;

Contoh Program Searching Pertama:Program pertama di bawah ini data yang diurutkan berada pada array[size], dimana berisi10 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);elsecout <<"\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 padaarray

Hitung middle pada array

Jika nilai N == A[Mid] prosesselesai

Jika N > A[Mid]

Jika N < A[Mid]

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, sehinggawaktu melakukan searching data harus diurutkan terlebih dulu. Lihat bagian baris programberikut

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

void main() {//deklarasi variabel

int A[10], i,j,k,tkr,top,bottom,middle,tm;//proses penginputan datafor(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 datafor(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 {

top=middle-1;

}}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 dijalankanpertama kali harus ada kalimat “Silahkan ketika angka yang dicari”. Kemudian ubah/modifikasiprogram 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;

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

elselo = mid + 1;

}if(flag == 1)printf("\nNilai %i ditemukan pada kolom %i", N, mid);

elseprintf("\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();

}== 0 ==

PRAKTIKUM 7

MERGE SORTPengurutan yang dilakukan dengan teknik menggabungkan dua buah array ke dalam arraybaru. Penggabungan isi dua buah array hanya bisa dilakukan bila kedua array tersebutberisid ata yang sudah urut. Panjang kedua array tidak harus sama dengan kata lain bolehberbeda.

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 adakerjakan proses looping. Keluar darilooping bila salah satu habis

Menyalin isi array A atau B (mana yanglebih kecil) ke array C. Bila isi array Ayang disalin, maka I tambah 1.Bila isi aray B yang disalin maka Jtambah 1. Setiap menyalin ke C maka Ksealu bertambah 1.

Menyalin sisa isi array A bila isi array Byang lebih dulu selesai disalin. Untukcontoh diatas nilai 35 dan 37.

Menyalin sisa isi array B bila isi array Ayang lebih dulu selesai disalin. Untukcontoh data diatas bagian ini tidakdikerjakan karena semua isi array Bsudah selesai disalin ke C.

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;

elseU2=n-1;

i=L1;j=L2;while(i<=U1 && j<=U2) {if(a[i] <= a[j])aux[k]=a[i++];

elseaux[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 kaliketika size=1; L1=0 dank=0;

Merge pertama kaliketika size=1; L1=0;dan K=0; lakukanperbandingan danpertukaran sampaimerge tahap 1 selesai

Salin isi array A

Salin isi array B

Lakukan untuk kelompok berikutnya

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 SORTDisebut juga Partition Exchange Sort (PES) karena mempunyai average bihaviour yangterbaik diantara metode sort yang ada. Disebut PES karena membuat partisi-partisi danpengurutan dilakukan per partisi.

Proses dari Quick Sort yaitu mengambil satu buah nilai pada posisi tertentu yang disebutpivot. Pivot dapat diambil dari data paling kiri atau yang berada di tengah. Qucik Sort dalammelakukan proses pengurutan dapat menggunakan cara non rekursif atau rekursif.

Algoritma dan Program#include <stdio.h>#include <conio.h>#include <iostream.h>#define n 11int 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 yangtidak punya pasangan mergenya.

Setiap selesai suatu tahapsalin kembali isi array dariaux ke A

Untuk n=11 maka size= 1, 2, 4, 8jadi ada 4 tahap proses merge

Ganti perintah pivot=a[i]; denganpivot=a[(kiri+kanan)/2]; bila nilai yang ditengah dijadikan pivot.

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 programnyauntuk mengurutkan secara:

1. Merge Sort2. Quick Sort

== 0 ==

PRAKTIKUM 8

INSERTION SORTPengurutan dilakukan dengan cara membandingkan data ke-i sampai data terakhir. Dimanadata ke-i dimulai dari data kedua sampai terakhir. Jika ditemukan data yang lebih kecil makadata tersebut disisipkan ke depan sesuai posisi seharusnya.

Algoritma:

#define n 7k=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 7For(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 namainsert_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 elemenyang lebih besar dari X, makageser elemen tersebut satulangkah ke kanan. Geserdinotasikan dengan A[i-1];i--;

Definisikan jumlahelemen yang akan diproses.

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 SORTSelection sort mencari data dari elemen berikutnya sampai dengan elemen yang terakhir.Jika ditemukan elemen lain yang lebih kecil dari elemen sekarang maka elemen yangbersangkutan akan ditukar. Demikian seterusnya.

Algoritma:

#define n 7k=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 berbekalalgoritma diatas.

#include <stdio.h>#include <conio.h>#define n 5

void main() {int A[n]={7,22,17,5,12};

J=indek untuknilai terkecil.

Nilai yang terkecil ditukartempat (swap) dengan A[K],sehingga A[K] menyimpannilai terkecil.

Ambil nilai A[J],dibandingkan jika A[I] lebihkecil dari A[J] maka jikaTRUE simpan nilai I di J,karena A[J] adalah nilaiterkecil.

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 barisprogram dalam kotak. Kemudian simpan filenya dengan nama select_XXXX.cpp dimanaXXXX adalah 4 digit NIM anda.

Bubble SortMetode pengurutan yang membandingkan elemen sekarang dengan elemen berikutnya. Bilaelemen sekarang lebih besar dari elemen berikutnya maka posisi ditukar.

Algoritma:

#define n 7Flag=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 makaflag dibuat = 1. Bila pada loopbagian dalam tidak ada pertukaranberarti data sudah urut, tidak perlumemeriksa nilai K berikutnya.

Bandingkan A[I] dengan A[I+1].Bila A[I] lebih besar maka danbernilai TRUE maka lakukanpertukaran dan flag dibuat =1.

Latihan:Coba jalankan program dibawah ini. Bila kurang lengkap silahkan dilengkapi berbekalalgoritma 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 barisprogram dalam kotak. Kemudian simpan filenya dengan nama bubble_XXXX.cpp dimanaXXXX adalah 4 digit NIM anda.

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

1. Insert_XXXX.cpp2. Select_XXXX.cpp3. Bubble_XXXX.cpp

Dikompres menjadi satu dengan format .RAR dan diberi nama XXXX.RAR dimana XXXXadalah 4 digit NIM anda selanjutnya kirim ke alamat server.

=== 0 ===

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 inisialisasivoid inisialisasi() {

Deklarasikan 10tumpukan

Semua variabel bersifatlokal

Inisialisasiawal

Jika diinputkanangka 999 loopingselesai

Jika diinputkan data diatas 60. Periksa stack, jikakosong/bisa diisi lakukan PUSH dan kembalimelakukan perulangan.

Bila stack sudah penuhproses berhenti

Jika diinputkan di bawah 60. Periksastack, jika ada isinya lakukan POP dantampilkan data di layar.

Proses berhentibila stackkosong

top = -1;}

//buat fungsi BISA DIISIint bisadiisi() {if(top < n-1)return 1;

elsereturn 0;

}

//buat fungsi ADA ISINYAint adaisinya() {if(top > -1)return 1;

elsereturn 0;

}

//buat fungsi tambahvoid PUSH(int X) {top++;S[top] = X;

}

//buat fungsi ambilint POP() {int X;X = S[top];;top--;return(X);

}

void main() {int X;inisialisasi();

scanf("%i", &X);while(X != 999) {if(X>=60) {//lakukan PUSHif(bisadiisi()){ PUSH(X); }

else {printf("Maaf stack penuh");printf("%i tidak bisa disimpan", X);break;

}}else {//lakukan POPif(adaisinya()) {X = POP();printf("Ambil data %i\n", X);

}else {printf("Maaf Stack kosong");break;

}}scanf("%i", &X);

}getch();printf("\nSelesai");

}

SOAL PRAKTIKUM1. 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 variabelpada 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 untukmenginputkan sebanyak 5 buah data melalui keyboard satu per satu dan melakukanPUSH ke dalam stack. Gunakan while(I=<5).

==0==

PRAKTIKUM 10

Struktur dapat menampung data seperti layaknya database namun hanya tersimpan dimemori. Struktur memiliki elemen struktur atau dalam database disebut atribut/field. Didalam 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 filehasil praktikum disimpan ke folder masing-masing.

1. Program PertamaKetik 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 NULLchar nama[20];

};

struct data_nil {float nil_uts;float nil_uas;

};

struct {struct data_mhs mhs;struct data_nil nilai;

} gabung;

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 KeduaKetik 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/kriteriachar 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() {

int i, j=1, k=1;

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 Latihan3. 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.22 4302 Dewi 80 66 82 82.53 4303 Santi 69 72 58 64.5=======================================

== 0 ==