of 33/33
MODUL PRAKTIKUM “ALGORITMA DAN PEMROGRAMAN IILABORATORIUM KOMPUTER FAKULTAS ILMU KOMPUTER UNIVERSITAS SRIWIJAYA 2011

MODUL PRAKTIKUM “ALGORITMA DAN PEMROGRAMAN II”comlab.ilkom.unsri.ac.id/wp-content/uploads/2016/10/Modul... · “ALGORITMA DAN PEMROGRAMAN II” ... bukan menunjukkan elemen larik

  • View
    265

  • Download
    1

Embed Size (px)

Text of MODUL PRAKTIKUM “ALGORITMA DAN PEMROGRAMAN...

MODUL PRAKTIKUM

ALGORITMA DAN PEMROGRAMAN II

LABORATORIUM KOMPUTER

FAKULTAS ILMU KOMPUTER

UNIVERSITAS SRIWIJAYA

2011

2

Universitas Sriwijaya

Fakultas Ilmu Komputer

Laboratorium

LEMBAR PENGESAHAN

MODUL PRAKTIKUM

SISTEM MANAJEMEN MUTU

ISO 9001:2008

No. Dokumen . Tanggal 4 AGUSTUS 2011

Revisi 0 Halaman 2 DARI 33

MODUL PRAKTIKUM

Mata Kuliah Praktikum : Algoritma dan Pemrograman II

Kode Mata Kuliah Praktikum : FIK18411

SKS : 1

Program Studi : Teknik Informatika

Semester : 2 (Genap)

DIBUAT OLEH DISAHKAN OLEH DIKETAHUI OLEH

TIM LABORAN

LABORATORIUM FASILKOM

UNSRI

TIM DOSEN TEKNIK

INFORMATIKA FASILKOM UNSRI

KEPALA LABORATORIUM

3

Daftar Isi

Cover ...................................................................................................... 1

Lembar Pengesahan ............................................................................... 2

Daftar Isi ................................................................................................. 3

Perkenalan ............................................................................................... 4

Penerapan konsep tipe data bentukan ..................................................... 7

Penerapan konsep pengurutan bubble..................................................... 11

Quis ......................................................................................................... 15

Penerapan konsep pengurutan selection ................................................. 16

Penerapan konsep pengurutan sekuensial............................................... 20

Penerapan konsep pencarian biner.......................................................... 23

UTS ......................................................................................................... 28

Penerapan konsep pointer (Lanjutan Algoritma dan Pemrograman I) ... 29

Latihan kasus........................................................................................... 31

Latihan kasus........................................................................................... 32

Review materi ........................................................................................ 33

4

1. PERKENALAN

1.1. Review Larik

Larik merupakan sekumpulan data yang mempunyai nama dan tipe yang sama.Larik

sering disebut juga variabel berindeks. Nilai suatu data dalam larik ditentukan oleh nama dan

indeks. Larik banyak digunakan pada operasi yang melibatkan indeks seperti pada statistik

dan matriks.

Tipe data larik dapat berupa larik satu demensi, dua demensi, tiga demensi atau

banyak dimensi.

Bentuk Umum Larik Satu Dimensi :

Bentuk Umum Larik Dua Dimensi :

Perhatikan :

o Tanda kurung [ ] digunakan untuk menunjukkan elemen larik

o Perhitungan elemen larik dimulai dari 0, bukan 1

C++ tidak mengecek larik. Bila anda menyatakan int x[10], ini artinya 10 elemen yang

dimulai dari 0. Karena itu elemen terakhir larik adalah x[9]. Bila anda salah

mereferensikannya dengan x[10], anda akan mendapatkan harga yang tidak terpakai. Akan

lebih buruk lagi jika anda memberikan harga ke x[10], yang tidak dapat diterima.

1.2. REPRESENTASI LARIK

Misalkan kita memiliki sekumpulan data ujian seorang siswa, ujian pertama bernilai 90,

kemudian 95,78,85. Sekarang kita ingin menyusunnya sebagai suatu data kumpulan ujian

seorang siswa. Dalam array kita menyusunnya sebagai berikut

ujian[0] = 90;

ujian[1] = 95;

ujian[2] = 78;

ujian[3] = 85;

tipe_larik nama_larik [ukuran1][ukuran2]

tipe_larik nama_larik [ukuran]

5

Empat pernyataan diatas memberikan nilai kepada array ujian. Tetapi sebelum kita

memberikan nilai kepada array, kita harus mendeklarasikannya terlebih dahulu, yaitu :

intujian[4];

Perhatikan bahwa nilai 4 yang berada didalam tanda kurung menujukkan jumlahelemen

larik, bukan menunjukkan elemen larik yang ke-4.Jadi elemen larik ujian dimulai dari angka

0 sampai 3.

Pemrogram juga dapat menginisialisasi larik sekaligus mendeklarasikannya, sebagai

contoh :

int ujian[4] = {90,95,78,85};

Elemen terakhir dari larik diisi dengan karakter \0.Karakter ini memberitahu kompiler

bahwa akhir dari elemen larik telah dicapai.Walaupun pemrogram tidak dapat melihat

karakter ini secara eksplisit, namun kompiler mengetahui dan membutuhkannya.

Sekarang kita akan membuat daftar beberapa nama pahlawan di Indonesia

char pahlawan[3][15] ;

char pahlawan[0][15] = Soekarno;

char pahlawan[1][15] = Diponegoro;

char pahlawan[2][15] = Soedirman;

Larik diatas terlihat berbeda denga contoh larik pertama kita. Perhatikan bahwa pada larik

pahlawan memilih dua buah tanda kurung [ ][ ]. Larik seperti itu disebut larik dua dimensi.

Tanda kurung pertama menyatakan total elemen yang dapt dimiliki oleh larik pahlawan dan

tanda kurung kedua menyatakan total elemen yang dapat dimiliki setiap elemen larik

pahlawan. Dalam contoh diatas, tanda kurung kedua menyatakan karakter yang menyatakan

nama pahlawan.

MENGHITUNG JUMLAH ELEMEN ARRAY

Karena fungsi sizeof() mengembalikan jumlah byte yang sesuai dengan argumennya,

maka operator tersebut dapat digunakan untuk menemukan jumlah elemen array, misalnya

int array[ ] = {26,7,82,166};

cout

6

Contoh-contoh soal yang mengandung larik beserta analisis nya antara lain:

Contoh 1 (larik 1 dimensi)#includevoid input(int x[5]);void output(int x[5]);void main(){

int x[5]; // banyak larik yang dibutuhkanx[0]=1; // nilai yang terdapat dalam larik x[0]x[1]=2; // nilai yang terdapat dalam larik x[1]x[2]=3; // nilai yang terdapat dalam larik x[2]x[3]=4; // nilai yang terdapat dalam larik x[3]x[4]=5; // nilai yang terdapat dalam larik x[4]

cout

7

2. PENERAPAN KONSEP TIPE DATA BENTUKAN

Struktur bermanfaat untuk mengelompokkan sejumlah data dengan tipe yang berlainan.

Sebuah contoh pendeklarasian struktur dapat dilihat dibawah ini :

struct data_tanggal

{

int tahun;

int bulan;

int tanggal;

};

Pada contoh ini, dideklarasikan sebuah struktur bernama data_tanggal yang terdiri dari tiga

buah anggota berupa :

tahun

bulan

tanggal

MENDEFINISIKAN VARIABEL STRUKTUR

Apabila suatu struktur telah dideklarasikan, struktur ini dapat digunakan untuk

mendefinisikan suatu variabel. Misalnya,

data_tanggal tanggal_lahir;

Merupakan pendefinisian variabel struktur bertipe struktur tanggal lahir. Dengan adanya

pendefinisian ini, tanggal_lahir memiliki tiga buah anggota yaitu :

tahun

bulan

tanggal

STRUKTUR DI DALAM STRUKTUR

Suatu struktur juga bisa mengandung struktur yang lain. Sebagai gambaran ditunjukkan di

bawah ini.

struct data_pegawai

{

int nip;

8

char nama[25];

data_tanggal tanggal_lahir;

} rec_peg;

MENGAKSES ANGGOTA STRUKTUR

Anggota struktur diakses dengan menggunakan bentuk :

variabel_struktur.nama_anggota

Tanda titik diberikan diantara nama variabel struktur dan nama anggota. Misalnya :

tanggal_lahir.tanggal = 1;

merupakan pernyataan penugasan untuk memberikan nilai1 ke anggota tanggal pada variabel

struktur tanggal_lahir.

Bagaimana halnya untuk mengakses anggota bernama bulan pada variabel struktur rec_peg

seperti pada contoh di depan ?

Misalnya

rec_peg.tanggal_lahir.bulan = 9;

Merupakan contoh untuk memberikan nilai terhadap anggota bulan pada variabel struktur

rec_peg.

PENUGASAN STRUKTUR

Pemberian nilai terhadap suatu struktur dapat dilakukan dengan bentuk :

var1 = var2;

Sepanjang kedua variabel adalah variabel struktur bertipe sama. Misalnya terdapat

pendefinisian :

data_tanggal tgl1 tgl2;

Penugasan seperti berikut :

tgl2 = tgl1;

Diperkenankan.Dalam hal ini, seluruh anggota pada variabel tgl2 diisi dengan anggota terkait

yang ada pada tgl1. Pernyataan di atas merupakan penyederhanaan dari tiga pernyataan

berikut :

tgl2.bulan = tgl1.bulan;

tgl2.tahun = tgl1.tahun;

tgl2.tanggal = tgl1.tanggal;

Contoh Program :

9

#includetypedef struct lingkaran{

float r;float keliling;float luas;};

void kllluas(lingkaran &L);

voidmain(){lingkaran L;

coutL.r;kllluas (L);cout

10

void main(){

clrscr();angka umur; //umur (nama variabel),angka (tipe bentukan yang sama

dengan integer)pecahan pecah;huruf h;huruf nama[10];

printf ("Masukkan umur anda :" ) ;scanf ("%d",&umur);printf ("umur anda adalah %d",umur);printf ("\nMasukkan bilangan pecahan :" );scanf("%f",&pecah);printf ("Bilangan pecahan %f",pecah);printf ("\nMasukkan huruf : ");h=getche();printf ("\nHuruf anda %c",h);printf ("\nMasukkan nama : ");scanf ("%s",nama);printf ("Nama anda %s",nama);getch();

}

11

3. PENERAPAN KONSEPPENGURUTAN BUBBLE

Pengurutan (sorting) adalah proses mengatur sekumpulan obyek menurut urutan atau

susunan tertentu. Urutan tersebut dapat menaik (ascending) atau menurun (descending). Jika

diberikan n buah elemen disimpan di dalam larik L, maka :

- pengurutan menaik adalah L[0] < L[1] < L[2] < < L[n-1]

- pengurutan menaik adalah L[0] > L[1] > L[2] > > L[n-1]

Pengurutan berdasarkan jenisnya, dibagi dua kategori, yaitu :

1. Pengurutan Internal, yaitu pengurutan terhadap sekumpulan data disimpan di dalam

memori utama komputer.

2. Pengurutan Eksternal, yaitu pengurutan data yang disimpan di dalam memori

sekunder, biasanya data bervolume besar sehingga tidak mampu dimuat semuanya

dalam memori computer, disebut juga pengurutan arsip (file), karena struktur

eksternal yang dipakai adalah arsip.

Karena pengaksesan memori utama lebih cepat daripada memori sekunder, maka pengurutan

internal lebih cepat daripada pengurutan eksternal.

Bermacam-macam metode yang dipakai untuk melakukan pengurutan, antara lain :

- Bubble Sort

- Selection Sort

- Insertion Sort

- Heap Sort

- Shell Sort

- Quick Sort

- Merge Sort

- Radix Sort

- Tree Sort

Pada bagian ini hanya akan dibahas mengenai tiga buah metode sederhana yang mendasar,

yaitu :

1. Metode Pengurutan Gelembung (Bubble Sort)

12

2. Metode Pengurutan Pilih (Selection Sort)

3. Metode Pengurutan Sisip (Insertion Sort)

Metode Pengurutan Gelembung (Bubble Sort)

Metode ini diinspirasi oleh gelembung sabun yang berada di permukaan air. Karena berat

jenis gelembung sabun lebih ringan dibandingkan dengan berat jenis air, sehingga gelembung

sabun selalu terapung di permukaan air. Prinsip pengapungan inilah yang diterapkan ke

metode ini, dimana nilai yang paling rendah berada di posisi paling atas, melalui proses

pertukaran.

Konsep dasar dari metode ini adalah setiap data yang ada di kumpulan, dibandingkan dengan

data-data lainnya, artinya jika jumlah data sebnayak 5, maka akan terjadi perbandingan

sebanyak (5-1)2 = 16 kali. Untuk satu data, akan dibandingkan sebanyak 4 kali terhadap data

yang lainnya.

Atau secara umum dapat ditarik rumus, untuk jumlah data sebanyak n buah, maka :

Jumlah iterasi pembandingan = (n-1)2

Jika data-data tersebut disimpan di dalam larik L, maka :

1. Untuk pengurutan menaik, pembandingnya sebagai berikut :

L[n] L[n-1]

Jika kondisi diatas terpenuhi, maka nilai data yang ada di indeks n-1 akan ditukar dengan

nilai data yang ada di indeks n.

Contoh :

#includevoid input(int x[10]);void proses(int x[10], int&temp);void output1(int x[10]);void output2(int x[10]);

void main(){

int x[10], temp;input(x);output1(x);proses(x,temp);output2(x);

13

}void input(int x[10]){

int i;for (i=0; i

14

untuk masing-masing data (j).Pada pengulangan pertama yaitu for (i=1;i

15

4. QUIS

Soal :

Buatlah program untuk mengurutkan nilai mahasiswa dengan menggunakan metode

pengurutan bubble

16

5. PENERAPAN KONSEP PENGURUTAN SELECTION

Metode ini memiliki konsep memilih data yang maksimum/minimum dari suatu kumpulan

data larik L, lalu menempatkan data tersebut ke elemen paling akhir atau paling awal sesuai

pengurutan yang diinginkan. Data maksimum/minimum yang diperoleh, diasingkan ke

tempat lain, dan tidak diikutsertakan pada proses pencarian data maksimum/minimum

berikutnya. Perhatikan ilustrasi berikut :

Misalkan ada sekumpulan data acak berjumlah n elemen yang disimpan di dalam larik L,

akan diurut menaik, maka langkah-langkah yang harus dilakukan adalah :

1. Menentukan jumlah iterasi, yaitu pass = n-2

2. Untuk setiap pass ke-I = 0,1,2, , pass, lakukan

a. Cari elemen terbesar (maks) dari elemen ke-i sampai ke-(n-1)

b. Pertukaran maks dengan elemen ke-i

c. Kurangin n sayu (n = n -1)

Rincian tiap-tiap pas adalah sebagai berikut :

- pass 0

Cari elemen maksimum di dalam L[0 (n-1)].

Pertukarkan elemen maksimum dengan elemen L[n-1]

- pass 1

Cari elemen maksimum di dalam L[0 .. (n-2)]

Pertukarkan elemen maksimum dengan elemen L[n-2]

- pass 2

Cari elemen maksimum di dalam L[0 .. (n-3)]

Pertukarkan elemen maksimum dengan elemen L[n-3]

.

.

.

- pass 3

Cari elemen maksimum di dalam L[0 .. 1]

Pertukarkan elemen maksimum dengan elemen L[1]

17

Contoh Program :

#include void input(int a[100], int&n);void selection(int a[100], int n);void output (int a[100], int n);void tukar (int a[100], int pos, int i);void main(){

int a[100], n;input (a,n);selection (a,n);output (a, n);

}voidinput (int a[20], int&n){

int i;coutn;for (i=0; i

18

nilai data.Memasukkan banyak data dan banyak nilai dengan menggunkaan

pengulangan for (i=0;i

19

Output :

20

6. PENERAPAN KONSEP PENCARIAN SEKUENSIAL

Penerapan dari konsep pemrograman sebelumnya, dapat digunakan untuk berbagai macam

permasalahan. Pada bagian ini akan dibahas penerapan ke dalam bentuk pencarian.

Konsep

Pencarian merupakan proses yang fundamental dalam pemrograman, guna menemukan data

(nilai) tertentu di dalam sekumpulan data yang bertipe sama. Fungsi pencarian itu sendiri

adalah memvalidasi (mencocokan) data.Sebagai contoh, untuk menghapus atau mengubah

sebuah data di dalam sekumpulan nilai, langkah pertama yang harus ditempuh adalah

mencari data tersebut, lalu menghapus atau mengubahnya. Contoh lain adalah penyisipan

data ke dalam kumpulan data, jika data telah ada, maka data tersebut tidak akan disisipkan,

selainnya akan disisipkan ke dalam kumpulan data tersebut.

Ada sebuah kasus sederhana, misalkan terdapat 10 data yang bertpe integer, terangkum di

dalam variabel larik L. Terdapat data X di dalam larik L tersebut. Bagaimana proses

pencarian data X tersebut ? Jika ketemu maka akan mengeluarkan pesan teks Data

ditemukan ! atau jika tidak ditemukan akan mengeluarkan pesan teks Data tidak

ditemukan . Serta menampilkan di elemen ke beberapa elemen tersebut ditemukan, dan

berapa jumlah data X di larik L.

Ada beberapa metode mencari data di dalam sekumpulan data yang bertipe sama yaitu :

1. Metode Pencarian Beruntun (Sequential Search)

2. Metode Pencarian Bagi Dua (Binary Search)

Metode Pencarian Beruntun

Konsep yang digunakan dalam metode ini adalah membandingkan data-data yang ada dalam

kumpulan tersebut, mulai dari elemen pertama sampai elemen ditemukan, atau sampai

elemen terakhir.

Contoh program :

#includevoid input(int data[10],int&cari);void hitung (int data[10],int cari,int&j,int indeks[10]);void output(int data[10],int cari,int j,int indeks[10]);void main()

21

{int data [10],indeks[10];int j,cari;input(data,cari) ;hitung (data,cari,j,indeks);output(data,cari,j,indeks);

}void input(int data[10],int&cari){

int i;cout

22

(i=0;i

23

7. PENERAPAN KONSEP PENCARIAN BINER

Metode ini diterapkan pada sekumpulan data yang sudah terurut (menaik atau

menurun).Metode ini lebih cepat dibandingkan metode pencarian beruntun.Data yang sudah

terurut menjadi syarat mutlak untuk menggunakan metode ini.

Konsep dasar metode ini adalah membagi 2 jumlah elemennya, dan menentukan apakah data

yang berada pada elemen paling tengah bernilai sama, maka langsung data tengah dicari

ditemukan. Jika data di elemen terurut naik, maka jika data yang berada di tengah kurang dari

data yang dicari, maka pencarian selanjutnya berkisar di elemen tengah ke kanan, dan begitu

seterusnya sampai ketemu atau tidak sama sekali. Dan sebaliknya untuk nilai data yang

berada di tengah lebih dari data yang dicari, maka pencarian selanjutnya berkisar di elemen

tengah ke kiri, dan begitu seterusnya sampai ketemu atau tidak sama sekali. Dan demikian

sebaliknya untuk data yang terurut menurun.Dalam hal ini tentukan indeks paling awal dan

indeks paling akhir, untuk membagi 2 elemen tersebut.

Indeks awal = i, dimana nilai i, pada awalnya bernilai 0;

Indeks akhir =j, dimana nilai j, pada awalnya bernilai sama dengan jumlah elemen.

Langkah-langkah untuk metode pencarian bagi dua.

1. Asumsikan data terurut secara horizontal dari indeks 0 samapi n-1, untuk menggunkan

istilah kanan dan kiri.

2. Misalkan kumpulan data yang berjumlah n adalah larik L, dan data yang akan dicari

adalah X.

3. Tentukan nilai indeks awal i=0 dan indeks akhir j = n-1.

4. Tentukan apakah data terurut menurun atau meniak dengan menggunakan

membandingkan apakah elemen paling kiri L[0] lebih dari atau kurang dari eleemn paling

kanan L[n-1].

Jika data di elemen paling kiri L[0] > data di elemen paling kanan L[n-1], maka data

terurut menurun.

Jika data elemen paling kiri L[0] < data di elemen paling kanan L[n-1], maka data

terurut menaik.

5. Asumsikan bahwa data terurut menaik (tergantung hasil nomor 3).

24

6. Misalkan variabel k adalah indeks paling tengah, diperoleh dengan rumus :

K = (I + j) div 2

7. Periksa, jika L[k] = x, maka data dicari langsung ketemu di elemen k.

8. Jika nomor 7 tidak terpenuhi, periksa jika L[k]X, maka pencarian berikutnya

dilakukan di sisi kiri indeks k, lakukan proses seperti pada nomor 6, dimana nilai indeks j

sekarang sama dengan nilai indeks k sebelumnya.

J=k

K=(i+j)div2

Dan seterusnya sampai nilai X dicari ketemu atu tidak sama sekali.

10. Jika data terurut menurun, maka tukar kondisi yang ada di nomor 8 dan 9.

Contoh :

Diberikan 10 data terurut L[10] = {15,17,20,25,29,30,45,50,58,60}. Cari nilai X = 20 di

elemen tersebut.

Solusi :

1. Menentukan apakah data terurut menaik atau menurun.

L[0] = 15

L[9] = 60

Karena L[0] < L[9], maka data tersebut terurut menaik.

2. Misal indeks paling kiri adlah I = 0 dan indeks paling kanan adalah j = 9, maka indeks

tengahnya adalah :

K = (i+j) div 2

= (0+9) div 2

= 4.

Elemen tengah sekarang adalah 4 dengan L[4] = 29.

3. Karena data di indeks tengah lebih dari nilai data yang dicari (L[4] > X), maka pencarian

berikutnya dilakukan pada sisi kiri indeks k, maka nilai j sekarang sama dengan k, lalu

lakukan proses sama seperti nomor 2.

25

J=k

= 4

K= (i+j) div 2

= (0 +4) div 2

= 2

Elemen tengah sekarang adalah 2 dengan L[2] = 20.

4. Karena nilai data di elemen tengah sama dengan nilai data yang dicari X, maka pencarian

berakhir. Data X ditemukan di iNdeks ke-1.

Pada contoh diatas mengunakan data masukan yang sudah diurutkan terlebih

dahulu.Bagaimana jika data yang di masukkan merupakan data acak sehingga belum dapat

diketahui data tersebut menaik atau menurun.Jika kondisinya seperti ini maka hasus

menggunakakn pengurutan terlebih dahulu untuk mengurutkan data menjadi terurut menaik

atau menurun.

Contoh program berikut ini merupakan contoh program yang datanya diinputkan acak

#include#includevoid input (int A[10],int&k);void urut (int A[10]) ;void cari(int A[10],int&tm,int k);void output(int tm,int k) ;void main(){

int A[10], i, j, k, tkr, top, bottom, middle, tm;input (A,k);urut (A) ;cari(A,tm,k);output(tm,k);

}void input (int A[10],int&k){

int i,j;for (i=0; i

26

A[j]=tkr;}

}}

}void cari(int A[10],int &tm,int k){

int top,middle,bottom;tm=0;top=9;bottom=0;

while(top>=bottom){

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

tm++;}if(A[middle]0){

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

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

}

Analisis :

Program ini merupakan program untuk melakukan pencarian.Dimana pencarian

dilakukan dengan cara membagi dua data masukan.Data dimasukkan pada prosedur

input dengan menggunkaan pengulangan for ( i=0;i

27

dibandingkan dengan nilai A[1].Didalam pengulangan terdapat pula pemilihan jika

A[i]>A[j].jika syarat tersebut terpenuhi maka akan ditukarkan tempat dengan

menggunakan tkr.Setelah pengulangan telah selesai and data telah teurut maka data

yang telah terurut dikirim ke prosedur cari.Dimisalkan banyak data 10 data,data yang

dimasukkan 3,4,2,1,6,5,7,4,8,9.Maka data tersebut akan diurutkan terlebih dahulu

menjadi 1,2,3,4,4,5,6,7,8,9.Lalu diinisialisasi awal nilai top = 0 bottom = 9,dan tm

menunjukkan banyak data yang sama dengan nilai yang dicari.Lalu masuk kedalam

akan berakhir jika nilai top>=bottom.Untuk mencari nilai tengah maka nilai atas

ditambah dengan nilai bawah lalu di bagi dua.Dan akan didapatkan nilai tengah dari

data tersebut.Lalu nilai tengah itu akan dilihat apakah sama dengan nilai yang

dicari.Jika sama maka tm akan bertambah.Lalu apabila nilai tengah lebih kecil dari

nilai yang dicari maka batas bawah akan berubah menjadi batas tengah +1.Dan jika

nilai tengah lebih besar dari nilai yang dicari maka batas atas akan berubah menjadi

batas tengah -1.Apabila pengulangan telah mencapai top>=bottom maka pengulangan

akan berhenti.Dan akan di lanjutkan ke prosedur output.Jika nilai tm yang didapatkan

lebih dari 0 maka akan ditampilkan bahwa nilai yang dicari ada didalam data.Dan jika

nilai tm =0.Maka akan ditampilkan bahwa data yang dicari tidak ada didalam

data.Setelah syarat tidak terpenuhi lagi maka hasil akan dikelurkan ke prosedur

output.Pada prosedur output hanya dilihat nilai tm jika nilai tm >0 berati data yang

dicari ada di dalam larik .Jika tm =0 maka data yang di cari tidak ada di dalam data

masukkan.

Output :

28

8. UTS

Soal :

Buatlah program pencarian nama mahasiswa dari sekumpulan data mahasiswa (mahasiswa

merupakan tipe data bentukan yang terdiri dari nama, nim dan nilai).

29

9. PENERAPAN KONSEP POINTER (Lanjutan Algoritma dan

Pemrograman I )

Pointer

Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu

variabel lain. Lokasi memori tersebut mungkin diwakili oleh sebuah variabel atau

mungkin juga lokasi bebas dalam memori. Sedangkan pointer sendiri yang berupa nilai

ditampung dalam sebuah variabel yang disebut variabel pointer.Jadi variable pointer atau

pointer berisi suatu nilai yang menyatakan alamat suatu lokasi.

Suatu variable pointer didefinisikan dengan bentuk :

Contoh :

a *c b *d var

2 * 3 * value

A * B * address

Step :

1. d=&a *d = 2 ; d = A

2. c=&b *c = 3 ; c = B

3. b=*d b = 2 ; &b = B

4. *d=*c *d = 2 ; d = A

Dari contoh di atas terlihat bahwa addres pada variabel pointer dapat berubah ubah,

apabila addres suatu variabel pointer berubah maka valuenya akan berubah sesuai addres

yang ditunjuk oleh pointer tersebut. Apabila pada address yang ditunjuk oleh pointer

tersebut mengalami perubahan value, maka value pada pointer juga akan berubah.

Pemberian Memori Alokasi Pada Pointer

Sebuah pointer itu tidak memiliki alamat, sehingga pointer harus menumpang pada variabel

lain. Namun sekarang kita memberikan alamat kepada variabel pointer sehingga pointer

TipeData *NamaVariabel

30

tidak lagi menumpang pada variabel lain.Untuk membuat alamat menggunakan malloc yang

disesuaikan dengan panjang data.

Contoh I:

1: #include2: #include3: voidmain()4: {5: int x;6: float y;7: long z;8:9: x = 3;10: y = 3.7;11: z = 1000;12:13: cout

31

10. LATIHAN KASUS

Buatlah program untuk menghitung frekuensi kemunculan nilai dari sebuah matriks dengan

ordo 8 x 8 dengan nilai dari 0 15. Nilai matriksnya sebagai berikut :

3 7 72 0 0

14 6 5

8 1 10 1 89 8 10

14 1015 159 12

12 2 10 2 34 5 0

8 8 104 5 130 1 0

11 110 142 2

5 3 12 1 0

1 9 131 1 1

8 713 12

Sehingga didapatkan frekuensi kemunculan nilai seperti berikut :

Output :

Data : Frekuensi

0: 8

1: 12

2: 6

3: 3

4: 2

5: 4

6: 1

7: 3

8: 6

9: 2

10: 4

11: 1

12: 3

13: 3

14: 3

15: 2

32

11. LATIHAN KASUS

Buatlah program untuk melihat nilai terbesar dan nilai terkecil dari sekumpulan nilai

mahasiswa (Dibuat dalam bentuk menu).

Menu 1. Pengguna dapat melihat nilai yang paling kecil

Menu 2. Pengguna dapat melihat nilai yang paling besar

33

12. REVIEW MATERI

1. Buatlah program mencari nilai dari array berikut ini dengan metode binary

4 13 21 28 35 42 47 48 57

2. Misalkan kita memiliki array dengan elemen seperti berikut ini :

1 5 2 7 6 3 9 4 0 8

Buatlah program dengan fungsi rekursif untuk menghitung jumlah total bilangan genap

dalam array