40
HANDOUT (Versi 1.1) ALGORITMA DAN STRUKTUR DATA FAKULTAS TEKNOLOGI INDUSTRI UNIVERSITAS SULTAN AGUNG SEMARANG 2013

Digital Material Algoritma dan Struktur Data.pdf

Embed Size (px)

DESCRIPTION

Digital Material Algoritma dan Struktur Data

Citation preview

HANDOUT (Versi 1.1)

ALGORITMA DAN STRUKTUR DATA

FAKULTAS TEKNOLOGI INDUSTRI

UNIVERSITAS SULTAN AGUNG SEMARANG

2013

I. Pengantar Algoritma dan Struktur Data A. Konsep Pemrograman dalam Sistem Komputer

B. Konsep Umum Algoritma dan Struktur Data dalam pemrograman

C. Road Map Algoritma dan Struktur Data

II. Konstruksi Pemrograman Dasar (Pendalaman Dasar Pemrograman) A. Bentuk-bentuk pemrograman

B. Bagian-bagian program

C. Tipe data

D. Operator

E. Perintah masukan dan keluaran

F. Percabangan

G. Perulangan

H. Array

I. Fungsi

III. Algoritma dan Problem Solving A. Konsep Algoritma dalam pemrograman

B. Langkah-langkah Problem Solving dengan algoritma

C. Logika program dengan algoritma

D. Logika program dengan flowchart

IV. Struktur Data Dasar A. Pengelolaan Data Jamak

B. Array, Struct dan Kelas

V. Stuktur Data Lanjut A. Array berdimensi

B. File

VI. Pointer A. Pengalamatan instruksi dan data

B. Pointer sebagai penunjuk alamat data

C. Penggantian data berbasis pointer

D. Pointer berbasis banyak jenis data

VII. Sorting A. Konsep Sorting

B. Macam-macam sorting : Bubble Sort, Insertion Sort dsb

A. Konsep Pemrograman dalam Sistem Komputer

Sistem adalah suatu kesatuan elemen yang saling berhubungan sehingga membentuk

suatu kelompok dalam melaksanakan suatu tujuan pokok yang ditargetkan (Onno W. Purba :

2000 ). Menurut Electronic Data Processing System (EDPS), sebuah sistem komputer

memiliki bagian-bagian fungsional yang disebut perangkat keras (hardware), perangkat lunak

(software) dan orang yang berinteraksi/user (brainware).

Gambar 1. Bagan Sistem Komputer

Perangkat lunak (software) adalah program1 yang berisi kumpulan instruksi untuk

melakukan proses pengolahan data. Dari pengertian tersebut, dapat diketahui bahwa

sesungguhnya perangkat lunak terdiri dari bagian dinamis yaitu instruksi serta bagian statis

yaitu data. Unjuk kerja instruksi berupa perlakuan/behaviour yang dikenakan kepada data.

Setelah dikenai instruksi, data akan berubah menjadi data yang bernilai dan tertampil sebagai

informasi.

1 Program adalah kumpulan instruksi yang ditujukan untuk komputer. Melalui program, komputer dapat diatur agar melaksanakan tugas

tertentu sesuai yang ditentukan oleh pemrogram (orang yang membuat program) (Abdul Kadir, 2012).

Perangkat lunak dikembangkan sebagai sebuah produk yang memperhatikan efisiensi

dan efektifitas, karena perangkat lunak dibutuhkan sebagai salah satu bentuk teknologi yang

diharapkan dapat mempermudah kegiatan manusia dengan berbasis otomasi. Algoritma

digunakan sebagai sebuah pendekatan untuk dapat menyusun dan mengelola instruksi secara

efisien. Stuktur data digunakan untuk mengelola data secara efektif.

B. Konsep Umum Algoritma dan Struktur Data

Algoritma menawarkan suatu metode dalam menyelesaikan sebuah permasalahan.

Algoritma diartikan sebagai urutan langkah dalam menyelesaikan masalah secara sistematis

dan logis. Pendekatan secara sistematis dan logis tersebut, menjadikan proses penyelesaian

masalah terjaga kebenarannya karena algoritma hendaklah benar agar dapat menghasilkan

keluaran/solusi yang benar pula.

Data adalah fakta dunia nyata. Dalam istilah ilmu komputer, sebuah struktur data

adalah cara penyimpanan, penyusunan dan pengaturan data di dalam media penyimpanan

komputer sehingga data tersebut dapat digunakan secara efisien. Dalam teknik pemrograman,

struktur data berarti tata letak data yang berisi kolom-kolom data, baik itu kolom yang

tampak oleh pengguna (user) atau pun kolom yang hanya digunakan untuk keperluan

pemrograman yang tidak tampak oleh pengguna. Pemakiana struktur data yang tepat di dalam

proses pemrograman akan menghasilkan algoritma yang lebih jelas dan tepat, dan secara

keseluruhan menjadikan program secara keseluruhan lebih efisien dan sederhana.

C. Road Map Algoritma dan Struktur Data

Pembahasan materi Algoritma dan struktur data memerlukan dasar pengetahuan tentang

pemrograman. Algoritma dan struktur data diharapkan dapat menumbuhkan kompetensi

berupa pengetahuan dan skill dalam memecahkan persoalan dan memetakannya dalam

bentuk program.

Adapun, roadmap pencapaian Algoritma dan Struktur Data adalah sebagai berikut:

(a) Hierarki Kompetensi

(b) Relasi

Gambar 1. Road Map Algoritma dan Struktur Data

Latar belakang pentingnya Algoritma dan Struktur Data adalah

1. Data semakin kompleks.

2. Implementasi dan perawatan software sangat sulit. Kerangka konsep yang jernih

memungkinkan pembuatan koding yang lebih efisien dan benar.

3. Pengembangan software berorientasi pada software yang baik, yaitu software yang

memnuhi criteria Clean Design, Easy Maintenance, Reliable (no core dumps), Easy to

use dan Fast algoritm.

Perangkat lunak difungsikan sebagai otomasi atas prosedur atau proses kerja

tertentu yang dikembangkan dengan konsep problem solving (pemecahan masalah).

Secara umum, pemecahan masalah terdiri atas tahapan sebagai berikut :

1. Problem definition atau identifikasi masalah. Tahap identifikasi masalah berisi

kegiatan identifikasi terhadap seluruh bagian program, baik segala sesuatu yang

menjadi masukan atau input program, segala sesuatu yang menjadi kebutuhan

pengeluaran atau output program maupun segala sesuatu yang dibutuhkan selama

proses/transformasi masukan menjadi keluaran.

2. Algorithm design dan analysis. Perancangan dan analisis algoritma berupa urutan

langkah-langkah dalam menyelesaikann permasalahan dengan berpijak pada hasil

identifikasi masalah yang telah dilakukan sebelumnya.

3. Implementation. Tahap ini berupa koding atau penyusunan program berdasarkan

algoritma yang telah disusun.

4. Testing atau pengujian. Pengujian dilakukan terhadap koding program yang telah

dibuat, untuk memastikan bahwa program telah berjalan dengan benar.

5. Maintenance atau pemeliharaan.

Bentuk-bentuk pemrograman

Program adalah kumpulan instruksi-instruksi tersendiri yang biasanya disebut source code

yang dibuat oleh programmer (pembuat program)

Beberapa pakar mendefinisikan beberapa bentuk pemrograman sebagai berikut:

1. Pemrograman Prosedural

Berdasarkan urutan-urutan, sekuensial. Program adalah suatu rangkaian prosedur untuk

memanipulasi data. Prosedur merupakan kumpulan instruksi yang dikerjakan secara

berurutan. Harus mengingat prosedur mana yang sudah dipanggil dan apa yang sudah

diubah.

2. Pemrograman Fungsional

Berdasarkan teori fungsi matematika. Fungsi merupakan dasar utama program.

3. Pemrograman Terstruktur

Secara berurutan dan terstrukrtur. Program dapat dibagai-bagi menjadi prosedur dan

fungsi. Contoh: PASCAL dan C

4. Pemrograman Modular

Pemrograman ini membentuk banyak modul. Modul merupakan kumpulan dari prosedur

dan fungsi yang berdiri sendiri. Sebuah program dapat merupakan kumpulan modul-

modul. Contoh: MODULA-2 atau ADA

5. Pemrograman Berorientasi Obyek

Pemrograman berdasarkan prinsip obyek, dimana obyek memiliki

data/variabel/property dan method/event/prosedur yang dapat dimanipulasi. Contoh: C++,

Object Pascal, dan Java.

6. Pemrograman Berorientasi Fungsi

Pemrograman ini berfokus pada suatu fungsi tertentu saja. Sangat tergantung pada tujuan

pembuatan bahasa pemrograman ini. Contoh: SQL (Structured Query Language), HTML,

XML dan lain-lain.

7. Pemrograman Deklaratif

Pemrograman ini mendeskripsikan suatu masalah dengan pernyataan daripada

memecahkan masalah dengan implementasi algoritma. Contoh: PROLOG

Bagian-bagian program

Tipe data

Tipe data yang berhubungan dengan bilangan pada C++ terbagi menjadi dua yaitu

tipe data yang berkaitan dengan bilangan bulat serta tipe data yang berkaitan dengan bilangan

pecahan.

1. Tipe data terkait dengan bilangan bulat adalah char, int, short, long.

2. Tipe data terkait dengan bilangan pecahan adalah float, double dan long double.

Jangkauan nilai untuk masing-masing tipe data adalah sebagai berikut :

Tipe Data Ukuran Memori Jangkauan Nilai

char 1 byte -128 hingga +127

int 2 byte -32768 hingga +32767

long 4 byte -2.147.438.648 hingga 2.147.438.647

float 4 byte 3.4x10-38 hingga 3.4x10+38

double 8 byte 1.7x10-308 hingga 1.1x10+4932

long double 10 byte 3.4x10-4932 hingga 1.1x10+4932

Berikut ini adalah program untuk menampilkan angka bulat dan pecahan.

#include<iostream.h>

#include<conio.h>

#include<iomanip.h>

void main()

{

int angkabulat =1357;

clrscr ();

cout<<setw(3)<<angkabulat<<endl;

cout<<setw(4)<<angkabulat<<endl;

cout<<setw(5)<<angkabulat<<endl;

cout<<setw(6)<<angkabulat<<endl;

cout<<endl;

float angkapecah;

angkapecah = 56.789857766;

cout <<setprecision(6)<<setw(10)<<angkapecah<<endl;

}

Operator

Pengantar Operator dan Ungkapan

Operator adalah simbol dalam pemrograman untuk melakukan suatu operasi atau

manipulasi seperti menjumlahkan dua buah nilai, memberikan nilai ke suatu variabel atau

membandingkan kesamaan dua buah nilai.

Berdasarkan jumlah operand yang terlibat terdapat tiga sifat operator yaitu unary, jika

hanya melibatkan sebuah operand, binary jika melibatkan dua buah operand dan ternary

jika melibatkan tiga buah operand. Ungkapan dalam C++ dapat berupa pengenal, konstanta

maupun kombinasi elemen dengan operator.

Operator Aritmatika

Operator aritmatika yang termasuk unary.

Operator Keterangan Contoh

- Tanda minus -2

+ Tanda plus +4

Operator aritmatika yang termasuk binary.

Operator Keterangan Contoh Hasil

* Perkalian 2 * 3 6

/ Pembagian 7 / 2 3.5

% Sisa pembagian 7 % 2 1

+ Penjumlahan 5 + 4 9

- Pengurangan 5 - 4 1

Berikut ini adalah program yang mengaplikasikan operator % (sisa pembagian) :

Contoh 1:

#include <iostream.h>

#include <math.h>

void main()

{

int nilai,sisa;

for(nilai=1; nilai<=20; nilai++)

{

sisa = nilai % 2;

if (sisa == 0)

cout<<nilai<<endl;

}

}

Contoh 2:

#include <iostream.h>

#include <conio.h>

void main()

{

int bilangan, tampungan;

cout<<"Masukkan bilangan : "<<endl;

cin>>bilangan;

tampungan=bilangan%2;

if (tampungan == 1)

cout<<"Bilangan yang saudara masukkan GANJIL."<<endl;

else

cout<<"Bilangan yang saudara masukkan GENAP."<<endl;

}

Berikut ini adalah program yang menunjukkan penggunaan operator logika :

#include <iostream.h>

#include <conio.h>

void main()

{

cout<<"Program Nilai Huruf"<<endl;

int bil;

cout<<"Masukkan nilai bilangan : ";

cin>>bil;

if(bil>100 || bil<0)

cout<<"Inputan salah";

else if(bil>80)

cout<<"Nilai huruf = A";

else if(bil>75)

cout<<"Nilai huruf = B";

else if(bil>65)

cout<<"Nilai huruf = C";

else if(bil>45)

cout<<"Nilai huruf = D";

else

cout<<"Nilai huruf = E";

//getch();

}

Operator Penaikan dan Penurunan

Operasi penaikan atau increment serta operasi penurunan atau decrement digunakan

untuk tipe bilangan bulat. Operator penaikan digunakan untuk menaikkan nilai variabel

sebesar satu. Contoh x = x + 1 atau dapat dideklarasikan dengan ++x atau x++. Operator

penurunan digunakan untuk menurunkan nilai variabel sebesar satu. Sebagai contoh y = y – 1

atau dapat ditulis - -y atau y - -

Perintah masukan dan keluaran

cout

Perdefinisian berfungsi meletakkan suatu informasi ke standart output. Biasanya

diikuti perintah \n yang berarti newline atau ganti baris agar tulisan yang akan ditampilkan

tampak. Misal untuk menampilkan tulisan di layar monitor : “ Selamat Belajar C++ ”

cin

Objek ini bermanfaat untuk membaca data dari standart input, misal dari keyboard.

Bentuk pernyataan cin adalah cin >> var;

Selain cin, perintah masukan yang lain adalah getch() dan getch(). Pada program

berikut lihat perbedaannya :

#include <iostream.h>

#include <conio.h>

main ()

{

char karakter;

clrscr();

cout << "Masukkan sebuah karakter : ";

karakter = getch();

cout << endl;

cout << "Anda mengetik " << karakter

<< ", tetapi karakter tsb tidak ditampilkan " << endl;

cout << "Coba ulangi sekali lagi." <<endl;

cout << "Masukkan sebuah karakter : ";

karakter = getche();

cout<<endl;

cout<<"Sekarang karakter tsb. tampak.";

}

Hasil program:

Percabangan

Pernyataan if dipakai untuk mngambil keputusan berdasarkan suatu kondisi. Terdapat

dua macam pernyataan if yatiu a) pernyataan if sederhana dan b) pernyataan if dengan else.

Bentuk pernyataan if sederhana adalah :

if (kondisi)

pernyataan;

sedangkan bentuk pernyataan if dengan else adalah

if (kondisi)

pernyataan1;

else

pernyataan2;

Keterangan :

1. Jika kondisi dipenuhi, maka pernyataan1 akan dibaca/diproses.

2. Jika kondisi tidak dipenuhi, maka pernyataa1 tidak akan dibaca/diproses, tetapi

pernyataa2 yang akan dibaca/diproses.

Pernyataan if didalam if sering pula disebut if bersarang (nested if). Salah satu

betuknya adalah :

if (kondisi1)

pernyataan1;

else if (kondisi2)

pernyataan2;

else if (kondisi3)

pernyataan3;

else if (kondisi4)

pernyataan4;

else pernyataan n;

Pernyataan untuk menjalankan salah satu pernyataan dari beberapa kemungkinan

pernyataan berdasarkan nilai dari sebuah ungkapan dan nilai penyeleksi. Bentuk pernyataan

switch :

switch (ungkapan)

{

case ungkapan1;

pernyataan_1;

break;

case ungkapan2;

pernyataan_2;

break;

……

default:

pernyataan_x;

}

Berikut ini adalah contoh program dengan menggunakan if dan switch yang saling

berequivalensi.

#include <iostream.h>

#include <conio.h>

#include <iomanip.h>

void main()

{

int jenis;

float vr1, vr2, r1, r2, rt, vs, it;

vs=12;

cout <<"Pilihan perhitungan tegangan dan arus"<<endl;

cout <<"1. Hitung SERI"<<endl;

cout <<"2. Hitung PARALEL"<<endl;

cout <<endl;

cout <<"Diketahui sebuah rangkaian tertutup, dengan nilai Vs = 12

volt"<<endl;

cout <<"Masukkan nilai resistor 1 : ";

cin>>r1;

cout <<"Masukkan nilai resistor 2 : ";

cin>>r2;

cout <<"Masukkan pilihan jenis perhitungan : ";

cin>>jenis;

cout <<endl;

if (jenis==1)

{

rt=r1+r2;

cout<<"Besar R total : "<<rt<<" ohm"<<endl;

cout<<"Besar I total : "<<vs/rt<<" ampere"<<endl;

}

else if(jenis==2)

{

rt=(r1*r2)/(r1+r2);

cout<<"Besar R total : "<<rt<<" ohm"<<endl;

cout<<"Besar I total : "<<vs/rt<<" ampere"<<endl;

}

else

cout <<"Maaf jenis perhitungan anda salah."<<endl;

}

Statement if pada program di atas dapat diganti dengan statement switch seperti berikut ini:

switch (jenis)

{

case 1 :

{

rt=r1+r2;

cout<<"Besar R total : "<<rt<<" ohm"<<endl;

cout<<"Besar I total : "<<vs/rt<<" ampere"<<endl;

break;

}

case 2 :

{

rt=(r1*r2)/(r1+r2);

cout<<"Besar R total : "<<rt<<" ohm"<<endl;

cout<<"Besar I total : "<<vs/rt<<" ampere"<<endl;

break;

}

default :

{

cout <<"Maaf jenis perhitungan anda salah."<<endl;

break;

}

}

Perulangan

Pernyataan while

While adalah Pernyataan untuk memproses pernyataan yang harus atau akan berulang

beberapa kali. Bentuk pernyataan tersebut :

while (ungkapan)

Pernyataan;

Untuk bebrapa pernyataan majemuk, bentuk pernyataannya adalah :

while (ungkapan)

{

Pernyataan1;

Pernyataan2;

...........;

pernyataanN;

}

Pernyataan do-while berguna untuk mengulang proses. Bentuk pernyataan do-while adalah

sebagai beikut:

do

{

Pernyataan1;

Pernyataan2;

...........;

pernyataanN;

} while (ungkapan)

Pernyataan for

Berguna untuk mengulang pengeksekusian terhadap satu atau sejumlah pernyataan. Bentuk

pertanyaan for adalah :

for (ungkapan1, ungkapan2, ungkapan3)

Pernyataan;

Pernyataan diatas identik dengan :

ungkapan1;

while (ungkapan2)

{

pernyataan;

ungkapan3;

}

Berikut ini adalah program perulangan untuk menghasilkan keluaran yang sama dengan tiga

bentuk statement perulangan (FOR< DO dan WHILE)

#include <iostream.h>

#include <conio.h>

void main()

{

//menampilan angka 1 s.d 10 dengan for

cout<<"Menampilkan 1 s.d 10 dengan FOR"<<endl;

for (int i=1;i<=10;i++)

{

cout<<i<<endl;

}

cout<<endl;

//menampilan angka 1 s.d 10 dengan do

cout<<"Menampilkan 1 s.d 10 dengan DO"<<endl;

int n=1;

do

{

cout<<n<<endl;

n+=1;

}

while(n<=10);

cout<<endl;

//menampilan angka 1 s.d 10 dengan while

cout<<"Menampilkan 1 s.d 10 dengan WHILE"<<endl;

int m=1;

while (m<=10)

{

cout<<m<<endl;

m++;

}

}

Latihan :

Perhatikan program berikut ini

//Program Perhitungan Tagihan Abonemen Air

#include <iostream.h>

#include <conio.h>

void main()

{

int jml_pelanggan;

long administrasi, pemeliharaan, pemakaian, total,

jumlah_tagihan;

administrasi=6000;

pemeliharaan = 3000;

jumlah_tagihan=0;

cout<<"Perhitungan Pembayaran Rekening Air"<<endl;

cout<<endl;

cout<<"Masukkan jumlah Pelanggan : ";

cin>>jml_pelanggan;

cout<<endl;

for (int i=1; i<=jml_pelanggan;i++)

{

cout<<"Masukkan nilai pemakaian pelanggan "<<i<<" sebesar : ";

cin>>pemakaian;

if(pemakaian<=15)

{

pemakaian=4000;

}

else if (pemakaian>15 && pemakaian <=30)

{

pemakaian=6000;

}

else

{

pemakaian=9000;

}

total= administrasi+pemeliharaan+pemakaian;

jumlah_tagihan=jumlah_tagihan+total;

cout <<"Total tagihan air pelanggan ke "<<i<<" :

"<<total<<endl;

cout<<endl;

}

cout <<"Total total tagihan air pelanggan :

"<<jumlah_tagihan<<endl;

}

Berdasarkan program di atas, carilah komponen pemrograman sebagai berikut :

1. Bodi program (1)

2. Komentar (1)

3. Variabel (5)

4. Header (2)

5. Perintah percabangan (1)

6. Perintah perulangan (1)

7. Pernyataan majemuk (min 1)

8. Pernyataan inisialisasi (min 3)

9. Perintah keluaran (min 5)

10. Perintah masukan (1)

11. Operator relasi (4)

12. Operator logika (1)

13. Sebutkan minimal 5 keyword dari program tersebut

14. Jika program dieksekusi, seperti apakah tampilan program tersebut ?

Algoritma adalah urutan langkah untuk menyelesaikan masalah secara sistematis dan logis.

Penyelesaian masalah (problem solving) adalah kegiatan utama yang dilakukan dalam

menyelesaiakan sesuatu. Adapaun langkah-langkah Problem Solving adalah sebagai berikut :

1. Mengidentifikasi masalah

2. Desain

3. Algoritma

4. Pembuatan program

5. Pengujian

6. Pemeliharaan

Algoritma biasa ditulis dalam bentuk pseudo code. Perhatikan contoh berikut ini:

Carilah luas persegi panjang jika diketahui x sebagai nilai panjang dan y sebagai nilai lebar.

1. panjang ← masukkan x sebagai nilai panjang

2. lebar ← masukkan y sebagai nilai lebar

3. luas ← panjang * lebar

4. Tulis luas

Tentukan bilangan masukan berikut sebagai bilangan postif, negatif atau nol.

1. Bilangan ← bilangan yang akan diuji

2. If bilangan > 0 then tulis “Bilangan Positif”

3. If bilangan < 0 then tulis “ Bilangan Negatif”

4. Tulis “Nol”

Tampilkan tulisan “Selamat Belajar” sebanyak 10 kali

1. x ← masukkan nilai perulangan

2. i ← 1

3. Jika i <= x, tulis “Selamat Belajar”

Flowchart adalah visualisasi urutan langkah secara sistematis dan logis dalam bentuk simbol-

simbol yang tertentu.

Simbol Flowchart menurut ASCII

Contoh flowchart :

Mulai

X bilangan yang

diuji

X < 0 ?

X > 0 ?

Tulis“Angka 0”

Tulis“Bilangan Positif”

Tulis“Bilangan Negatif”

Selesai

Ya

Ya

Tidak

Tidak

Struktur data adalah suatu pengelolaan data sehingga data dapat dipergunakan secara lebih

efisien dan efektif. Dalam bahasa pemrograman, struktur data seringkali ditampakkan secaa

fisik dalam bentuk tabel (biasanya pada bahasa pemrograman/pengelolaan database berbasis

visual), namun pada beberapa bahasa pemrograman yang tidak berbasis visual, strutkur data

lebih berupa pengelolaan data dengan aturan-aturan tertentu. Beberapa konsep pengelolaan

data sederhana adalah sebagai berikut :

Array

Array adalah kumpulan data bertipe sama dan menggunakan nama yang sama pula.

Antara satu variabel dengan variabel lain di dalam array dibedakan berdasarkan “subscript”.

Subscript berupa bilangan di dalam kurung siku [...]. Melalui subscript inilah masing-masing

elemen dapat diakses.

float suhu[5];

Array Berdimensi Satu

Array berdimensi satu adalah sekumpulan data/elemen yang disimpan secara

berurutan dalam suatu tempat/subscript yang terdiri atas 1 (satu) unsur.

Sejumlah data suhu disimpan dalam nama suhu terdiri dari Suhu 1 = 25°, Suhu 2 = 23,5°,

Suhu 3 = 21°, Suhu 4 = 26° dan Suhu 5 = 35°

Pendefinisian array meliputi nama array, tipe elemen array dan jumlah elemen array.

Contoh :

Float nilai_mhs [12];

Keterangan :

1. tipe array : float (bilangan pecah)

2. nama array : nilai_mhs

3. jumlah elemen array : 12 data, yaitu nilai_mhs[1], nilai_mhs[2],...., nilai_mhs[12].

tipe elemen array

jumlah elemen array

nama array

Nilai elemen array dapat dimasukkan melalui keyboard atau dimasukkan saat didefinisikan

pada program.

Array Berdimensi Dua

Array berdimensi satu adalah sekumpulan data/elemen yang disimpan secara

berurutan dalam suatu tempat/subscript yang terdiri atas 2 (dua) unsur, yaitu baris dan kolom.

Array berdimensi dua berarti meiliki dua dimensi data. Contoh sederhana adalah data yang

tertulis dalam tabel berikuit ini :

Merk Mobil 1992 1993 1994 1995

1. Honda 35 45 80 120

2. Daihatsu 100 110 70 101

3. Suzuki 10 15 20 17

Jika dibuat programnya adalah sebagai berikut :

int data_mobil [3] [4];

Keterangan :

1. baris 1 baris 3 : menunjukkan merek mobil.

2. kolom 1 kolom 4 : menunjukkan tahun penjualan

3. tipe array : integer (bilangan bulat).

4. nama array : data_mobil.

5. jumlah elemen array : [3,4]

6. [2,3] dibaca : penjualan mobil merek Daihatsu pada tahun 1994 adalah 70 unit.

Array Sebagai Argumen Fungsi

Array juga dapat berkedudukan sebagi parameter di dalam fungsi. Contoh pendefinisian :

const int MAKS = 5

Int data[MAKS];

Fungsi

Fungsi adalah bagian program yang berisi sejumlah pernyataan tertentu yang dapat

dipanggil berulang kali. Tujuan pembuatan fungsi adalah :

1. Memudahkan dalam mengembangkan program

2. Menghemat ukuran program

Beberapa hal yang harus diperhatikan dalam pembuatan fungsi adalah :

1. Fungsi menerima masukan yang disebut argumen atau parameter.

2. Masukan diproses oleh fungsi dan memberikan hasil akhir yang disebut nilai balik

(return value).

3. Agar fungsi dapat dipanggil, fungsi harus dideklarasikan.

Prototipe

Deklarasi fungsi disebut prototype fungsi yang berupa :

1. nama fungsi

2. tipe nilai balik fungsi

3. jumlah dan tipe argument

4. serta diakhiri dengan titik koma (;).

Contoh :

long kuadrat(long l)

dimana menyatakan kuadrat() adalah nama fungsi, long adalah tipe argument, long (kedua)

menunjukkan nilai balik yang bertipe long

void garis()

menyatakan fungsi tanpa nilai balik

Pernyataan return digunakan untuk memberikan nilai balik fungsi. Dalam fungsi diatas

berarti nilai kuadrat dari argument. Fungsi dengan pernyataan void tidak memberikan nilai

balik. Biasanya tidak diakhiri pernyataan return.

Jenis variabel dalam kaitannya dengan lingkup fungsi terdapat tiga macam yaitu :

variabel otomatis, variabel eksternal dan variabel statis.

Variabel Lokal (otomatis)

Variabel yang didefinisikan di dalam fungsi disebut variabel local. Variabel ini hanya

dikenal dalam fungsi tersebut.

Variabel Global (eksternal)

Variabel yang didefinisikan di bagian luar manapun dari fungsi dan dikenal oleh semua

fungsi. Disebut juga variabel global, karena dikenal de semua fungsi.

Variabel Statis

Baik variabel local maupun global dapat berfungsi sebagai variabel statis dengan cara

menambahkan pada kedua variabel tersebtu pernyatan static. Kemudian pada kedua variabel

tersebtu berlaku hal sebagai berikut :

1. Jika variabel local berdiri sebagai variabel statis maka variabel tetap hanya dapat

diakses pada fungsi yang mendefinisikannya, variabel tidak hilang saat eksekusi

fungsi berakhir. Nilainya akan tetap dipertahankan, sehingga akan dikenali pada

pemanggilan fungsi untuk tahap berikutnya.

2. Inisialisasi oleh pemrogram akan dilakukan sekali saja selama program dijalankan.

Jika tidak ada inisialisasi secara eksplisit, variabel diisi dengan nol.

3. Jika variabel eksternal dijadikan sebagai variabel statis, variabel ini dapat diakses oleh

semua file yang didefinisikan pada file yang sama dengan variabel eksternal tersebut .

Rekursi

Suatu fungsi dapat memanggil fungsi yang merupakan dirinya sendiri. Misal untuk

menghitung xn

ARRAY LANJUT

Program berikut menggunakan array dimensi dua dalam pencarian rerata baris dan kolom.

#include <stdio.h>

#include <conio.h>

#include <iostream.h>

main()

{

clrscr;

float nilai_jual [3][4]=

{

{35,45,80,120},

{110,110,70,102},

{10,15,20,17}

} ;

float jml_nilai0, jml_nilai1, jml_nilai2;

float rerata0, rerata1, rerata2;

jml_nilai0=0;

jml_nilai1=0;

jml_nilai2=0;

float jml_nilaicol0, jml_nilaicol1, jml_nilaicol2, jml_nilaicol3;

float reratacol0, reratacol1, reratacol2, reratacol3;

jml_nilaicol0=0;

jml_nilaicol1=0;

jml_nilaicol2=0;

//Per Baris

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

{

if (i==0)

{

for (int j=0;j<=3;j++)

jml_nilai0=jml_nilai0+nilai_jual[i][j];

}

else

if (i==1)

{

for (int j=0;j<=3;j++)

jml_nilai1=jml_nilai1+nilai_jual[i][j];

}

else

{

for (int j=0;j<=3;j++)

jml_nilai2=jml_nilai2+nilai_jual[i][j];

}

}

rerata0=jml_nilai0/4;

rerata1=jml_nilai1/4;

rerata2=jml_nilai2/4;

cout<<"Rerata baris ke 1 = "<<rerata0<<endl;

cout<<"Rerata baris ke 2 = "<<rerata1<<endl;

cout<<"Rerata baris ke 3 = "<<rerata2<<endl;

//Per kolom

cout<<endl;

for (int j=0;j<=3;j++)

{

if (j==0)

{

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

jml_nilaicol0=jml_nilaicol0+nilai_jual[i][j];

}

else

if (j==1)

{

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

jml_nilaicol1=jml_nilaicol1+nilai_jual[i][j];

}

else

if (j==2)

{

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

jml_nilaicol2=jml_nilaicol2+nilai_jual[i][j];

}

else

{

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

jml_nilaicol3=jml_nilaicol3+nilai_jual[i][j];

}

}

reratacol0=jml_nilaicol0/3;

reratacol1=jml_nilaicol1/3;

reratacol2=jml_nilaicol2/3;

reratacol3=jml_nilaicol3/3;

cout<<"Rerata kolom ke 1 = "<<reratacol0<<endl;

cout<<"Rerata kolom ke 2 = "<<reratacol1<<endl;

cout<<"Rerata kolom ke 3 = "<<reratacol2<<endl;

cout<<"Rerata kolom ke 4 = "<<reratacol3<<endl;

}

STRUCT

#include <iostream.h>

#include <conio.h>

void main()

{

struct data_tanggal //PENDEKLARASIAN

{

int tahun;

int bulan;

int tanggal;

};

data_tanggal tanggal_lahir[2]; //PENDEFINISIAN STRUKTUR

//PENGAKSESAN ANGGOTA STRUKTUR

tanggal_lahir[0].tanggal = 1;

tanggal_lahir[0].bulan = 9;

tanggal_lahir[0].tahun = 1964;

cout<<tanggal_lahir[0].tanggal<<‘/’<<tanggal_lahir[0].bulan<<‘/’<<ta

nggal_lahir[0].tahun<<endl;

tanggal_lahir[1].tanggal = 1;

tanggal_lahir[1].bulan = 9;

tanggal_lahir[1].tahun = 1964;

cout<<tanggal_lahir[1].tanggal<<‘/’<<tanggal_lahir[1].bulan<<‘/’<<ta

nggal_lahir[1].tahun<<endl;

tanggal_lahir[2].tanggal = 1;

tanggal_lahir[2].bulan = 9;

tanggal_lahir[2].tahun = 1964;

cout<<tanggal_lahir[2].tanggal<<‘/’<<tanggal_lahir[2].bulan<<‘/’<<ta

nggal_lahir[2].tahun<<endl;

}

STRUKTUR

Struktur bermanfaat untuk mengelompokkan sejumlah data dengan tipe yang berlainan.

Sebuah contoh deklarasi struktur adalah sebagai berikut :

Struct data_mahasiswa

{

char nim[6];

char nama[100];

int umur;

};

Pada contoh tersebut, tampak dideklarasikan sebuah struktur bernama data_mahasiswa yang

terdiri dari tiga buah anggota berupa :

Nim

Nama

Umur

Apabila struktur tersebut telah dideklarasikan, struktur dapat digunakan untuk mendefinisikan

suatu variabel, misalnya :

data_mahasiswa mhs1;

merupakan pendefinisian sebuah variabel struktur mhs1 yang bertipe struktur

data_mahasiswa.

PENCARIAN DATA

Berikut salah satu program yang menerapkan aplikasi algoritma untuk pencarian data :

void main()

{

int data[8] = {5, 2, 1, 6, 7,9,8, 3};

int cari =6;

int i=0;

int flag=0;

while (i<8){

if (data[i] == cari)

{

flag=1;

break;

}

i++;

}

if (flag==1)

cout <<"Ketemu."<<endl;

else

cout <<"Tidak ketemu"<<endl;

}

Pointer berisi alamat dari suatu data, bukan data sebagaimana pada variabel. Alamat

memori dimulai dari 0. Pada saat program dimuat di dalam memori, variabel akan diletakkan

dengan sendirinya pada alamat tertentu.

A. Mengetahui alamat suatu variabel

Alamat suatu variabel dapat diketahui dengan mudah. Caranya, tambahkan operator alamat,

berupa simbol &, di depan nama variabel. Dengan mengirimkan ke cout, alamat dari suatu

variabel akan ditampilkan di layar.

#include <iostream.h>

#include <conio.h>

void main()

{

//deklarasi variabel

int alif = 5;

float ba = 7.5;

double ta = 17.777;

//perintah membersihkan layar shg siap dipakai

clrscr();

//menampilkan nilai variabel

cout <<"Isi variabel : "<< endl;

cout <<"alif : " <<alif << endl;

cout <<"ba : " <<ba<< endl;

cout <<"ta : " <<ta<< endl;

//menampilkan alamat hasil penunjukkan pointer

cout << "\nAlamat variabel : " << endl;

cout << "alif = " <<&alif<< endl;

cout << "ba = " <<&ba<< endl;

cout << "ta = " <<&ta<< endl;

}

B. Mendefinisikan variabel pointer

Suatu variabel pointer didefinisikan dengan bentuk,

Tipe_data *nama_variabel;

Tipe_data dapat berupa sembarang tipe seperti halnya pada pendefinisian variabel bukan

pointer

Nama_variabel adalah nama variabel pointer

Contoh 1:

#include <iostream.h>

#include <conio.h>

void main()

{

//ada variabel bernama vint

int vint = 55;

//pendefinisian variabel pointer

int *pint;

//membersihkan layar

clrscr();

//inisialisasi variabel pointer

pint = &vint;

//menampilkan pointer

cout << "\nAlamat Vint : " << &vint <<endl;

//menampilkan variabel pointer

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

cout<<"Nilai yang ditunjuk pint : "<<*pint<<endl;

}

Contoh 2:

#include <iostream.h>

#include <conio.h>

void main()

{

int vint = 55;

int *pint;

clrscr();

pint = &vint;

cout << "Nilai yang ditunjuk oleh pint : " << *pint << endl;

}

C. Penggunaan pointer

Suatu variabel pointer menunjuk ke variabel lain, mula-mula harus diisi dengan

alamat dari vaeriabel yang hendak ditunjuk

Contoh :

#include <iostream.h>

#include <conio.h>

void main()

{

int vint = 55;

int *pint;

clrscr();

pint = &vint;

cout << "Alamat yang ditunjuk oleh pint : " << pint << endl;

cout << "Nilai yang ditunjuk oleh pint : " << *pint << endl;

}

D. Pointer void

Biasanya pointer menunjuk pada tipe data tertentu. Namun dimungkinkan membuat

pointer tak bertipe dengan cara meletakkan kata kunci void pada bagian penentu tipe pointer.

Suatu pointer void adalah pointer yang dapat menunjuk ke sembarang tipe data.

Misalnya, anda dapat mengatur agar pointer menunjuk ke tipe data int, tetapi pada saat lain

diperlukan untuk menunjuk ke tipe data float.

#include <iostream.h>

#include <conio.h>

void main()

{

void *ptr;

int vint = 50;

float vfl = 51.5;

ptr = &vint;

cout << "Nilai yang ditunjuk oleh ptr : " << *(int *)ptr << endl;

ptr = &vfl;

cout << "Nilai yang ditunjuk oleh ptr : " << *(float *)ptr <<

endl;

}

Sorting atau pengurutan data adalah salah satu mekanisme pengelolaan data yang

sering dipergunakan untuk beragam keperluan. Dengan sorting, seseorang bisa mendapatkan

suatu keadaan data yang lebih informatif dan berarti. Terdapat beberapa macam model

sorting diantarnya Exchange Sorting, Bubble Sorting dan Insertion Sorting. Berikut akan

ditampilkan programnya satu demi satu :

BUBBLE SORT

//Sorting Data dengan Metode Bubble Sort

#include <iostream.h>

#include <conio.h>

#include <stdio.h>

void main() {

int numList[8]={5,34,32,25,75,42,22,2};

int swap;

//Prose Menampilkan Data Belum terurut

cout<<"Data sebelum di urutkan"<<endl;

for(int ctr=0;ctr<8;ctr++)

{

cout<<" "<<numList[ctr];

}

cout<<endl<<endl;

//Proses Sorting

for(int i=0;i<7;i++)

{

for(int ii=0;ii<7;ii++)

{

if(numList[ii]>numList[ii+1])

{

swap = numList[ii];

numList[ii]=numList[ii+1];

numList[ii+1]=swap;

}

}

}

//Proses menampilkan data terurut

cout<<"Data setelah diurutkan"<<endl;

for(int iii=0; iii<8; iii++)

{

cout<<" "<<numList[iii];

}

cout<<endl<<endl;

//getch();return 0;

}

EXCHANGE SORT

//Sorting dengan Exchange Sort - Descending

#include <iostream.h>

#include <conio.h>

#include <stdio.h>

void main() {

int numList[4]={84,69,76,86};

int swap;

cout<<"Data sebelum di urutkan"<<endl;

for(int ctr=0;ctr<4;ctr++)

{

cout<<" "<<numList[ctr];

}

cout<<endl<<endl;

//Proses Pengurutan

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

{

for(int ii=i+1;ii<4;ii++)

{

if(numList[i]<numList[ii])

{

swap = numList[i];

numList[i]=numList[ii];

numList[ii]=swap;

} }}

cout<<"Data setelah diurutkan"<<endl;

for(int iii=0; iii<4; iii++)

{

cout<<" "<<numList[iii];

}

cout<<endl<<endl;

//getch();return 0;

}

SELECTION SORT

void main()

{

...

cout<<"\nInputkan banyak data yang akan diurutkan : ";

cin>>n;

Urut = 1;

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

{

cout<<"Masukan data ke "<<(i + 1)<<" : ";

cin>>Arr[i];

}

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

iMin = i;

for(j = Urut; j < n; j++) {

if(Arr[j] < Arr[iMin]) {

iMin = j;

if(Arr[i] != Arr[iMin]) {

Tmp = Arr[i];

if(Arr[i] > Arr[iMin]) {

Arr[i] = Arr[iMin];

Arr[iMin] = Tmp;

}

}

}

}

Urut = Urut + 1;

}

cout<<"\nSetelah Pengurutan\n";

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

cout<<"Elemen ke "<<(i + 1)<<" adalah "<<Arr[i]<<endl;

}

cout<<endl;

}

INSERTION SORT

void main()

{

...

cout<<"\nInputkan banyak data yang akan diurutkan : ";

cin>>n;

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

cout<<"Masukan data ke "<<(i + 1)<<" : ";

cin>>Arr[i];

}

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

Tmp = Arr[i];

j = i - 1;

while(Arr[j] >= Tmp && j > 0) {

Arr[j + 1] = Arr[j];

j = j - 1;

}

if(Tmp >= Arr[j]) {

Arr[j + 1] = Tmp;

} else {

Arr[j + 1] = Arr[j];

Arr[j] = Tmp;

}

}

cout<<"\nSetelah Pengurutan\n";

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

cout<<"Elemen ke "<<(i + 1)<<" adalah "<<Arr[i]<<endl;

}

cout<<endl;

}

Daftar Pustaka

Abdul Kadir (1995), Pemrograman C++, Yogyakarta : ANDI Offset

Anthoniur Rachmat C, http://lecturer.ukdw.ac.id/anton