Digital Material Algoritma dan Struktur Data.pdf
-
Upload
achmad-chaidir-s -
Category
Documents
-
view
64 -
download
6
description
Transcript of Digital Material Algoritma dan Struktur Data.pdf
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.
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;
}