MODUL PRAKTIKUM
STRUKTUR DATA
Dengan Borland C++ 5.2
Wahju T. Saputro
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>
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*/
#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.
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;
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.
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
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:
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
========================================
... ....
... ... ....
....
... ....
... ... ....
....
... ....
... ... ....
....
========================================
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();
}
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();
}
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
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 {
} }
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();
}
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.
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
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
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
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--;
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],
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.
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.
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.
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();
}
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)
.
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 {
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() {
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
=======================================