Kamis, 04 Juni 2009 |
SORT |
Algoritma Sorting
Sorting adalah proses menyusun elemen – elemen dengan tata urut tertentu dan
proses tersebut terimplementasi dalam bermacam aplikasi. Kita ambil contoh pada
aplikasi perbankan. Aplikasi tersebut mampu menampilkan daftar account yang aktif.
Hampir seluruh pengguna pada sistem akan memilih tampilan daftar berurutan
secara ascending demi kenyamanan dalam penelusuran data.
Beberapa macam algoritma sorting telah dibuat karena proses tersebut sangat
mendasar dan sering digunakan. Oleh karena itu, pemahaman atas algoritma –
algoritma yang ada sangatlah berguna.
Setelah menyelesaikan pembahasan pada bagian ini, anda diharapkan mampu :
1. Memahami dan menjelaskan algoritma dari insertion sort, selection sort,
merge sort dan quick sort.
2. Membuat implementasi pribadi menggunakan algoritma yang ada
6.2 Insertion Sort
Salah satu algoritma sorting yang paling sederhana adalah insertion sort. Ide dari
algoritma ini dapat dianalogikan seperti mengurutkan kartu. Penjelasan berikut ini
menerangkan bagaimana algoritma insertion sort bekerja dalam pengurutan kartu.
Anggaplah anda ingin mengurutkan satu set kartu dari kartu yang bernilai paling
kecil hingga yang paling besar. Seluruh kartu diletakkan pada meja, sebutlah meja
ini sebagai meja pertama, disusun dari kiri ke kanan dan atas ke bawah. Kemudian
kita mempunyai meja yang lain, meja kedua, dimana kartu yang diurutkan akan
diletakkan. Ambil kartu pertama yang terletak pada pojok kiri atas meja pertama
dan letakkan pada meja kedua. Ambil kartu kedua dari meja pertama, bandingkan
dengan kartu yang berada pada meja kedua, kemudian letakkan pada urutan yang
sesuai setelah perbandingan. Proses tersebut akan berlangsung hingga seluruh kartu
pada meja pertama telah diletakkan berurutan pada meja kedua.
Algoritma insertion sort pada dasarnya memilah data yang akan diurutkan menjadi
dua bagian, yang belum diurutkan (meja pertama) dan yang sudah diurutkan (meja
kedua). Elemen pertama diambil dari bagian array yang belum diurutkan dan
kemudian diletakkan sesuai posisinya pada bagian lain dari array yang telah
diurutkan. Langkah ini dilakukan secara berulang hingga tidak ada lagi elemen yang
tersisa pada bagian array yang belum diurutkan.
6.2.1Algoritma
void insertionSort(Object array[], int startIdx, int endIdx) {
for (int i = startIdx; i < endIdx; i++) {
int k = i;
for (int j = i + 1; j < endIdx; j++) {
if (((Comparable) array[k]).compareTo(array[j])>0) {
k = j;
}
}
swap(array[i],array[k]);
}
}
Gambar 1.1.2: Contoh insertion sort
Pada akhir modul ini, anda akan diminta untuk membuat implementasi bermacam
algoritma sorting yang akan dibahas pada bagian ini.
6.3 Selection Sort
Jika anda diminta untuk membuat algoritma sorting tersendiri, anda mungkin akan
menemukan sebuah algoritma yang mirip dengan selection sort. Layaknya insertion
sort, algoritma ini sangat rapat dan mudah untuk diimplementasikan.
Mari kita kembali menelusuri bagaimana algoritma ini berfungsi terhadap satu paket
kartu. Asumsikan bahwa kartu tersebut akan diurutkan secara ascending. Pada
awalnya, kartu tersebut akan disusun secara linier pada sebuah meja dari kiri ke
kanan, dan dari atas ke bawah. Pilih nilai kartu yang paling rendah, kemudian
tukarkan posisi kartu ini dengan kartu yang terletak pada pojok kiri atas meja. Lalu
cari kartu dengan nilai paling rendah diantara sisa kartu yang tersedia. Tukarkan
kartu yang baru saja terpilih dengan kartu pada posisi kedua. Ulangi langkah –
langkah tersebut hingga posisi kedua sebelum posisi terakhir dibandingkan dan
dapat digeser dengan kartu yang bernilai lebih rendah.
Ide utama dari algoritma selection sort adalah memilih elemen dengan nilai paling
rendah dan menukar elemen yang terpilih dengan elemen ke-i. Nilai dari i dimulai
dari 1 ke n, dimana n adalah jumlah total elemen dikurangi 1.
6.3.1Algoritma
void selectionSort(Object array[], int startIdx, int endIdx) {
int min;
for (int i = startIdx; i < endIdx; i++) {
min = i;
for (int j = i + 1; j < endIdx; j++) {
if (((Comparable)array[min]).compareTo(array[j])>0) {
min = j;
}
}
swap(array[min], array[i]);
}
}
6.4 Merge Sort
Sebelum mendalami algoritma merge sort, mari kita mengetahui garis besar dari
konsep divide and conquer karena merge sort mengadaptasi pola tersebut.
6.4.1Pola Divide and Conquer
Beberapa algoritma mengimplementasikan konsep rekursi untuk menyelesaikan
permasalahan. Permasalahan utama kemudian dipecah menjadi sub-masalah,
kemudian solusi dari sub-masalah akan membimbing menuju solusi permasalahan
utama.
Pada setiap tingkatan rekursi, pola tersebut terdiri atas 3 langkah:
1. Divide
Memilah masalah menjadi sub masalah
2. Conquer
Selesaikan sub masalah tersebut secara rekursif. Jika sub-masalah tersebut
cukup ringkas dan sederhana, pendekatan penyelesaian secara langsung akan
lebih efektif
3. Kombinasi
Mengkombinasikan solusi dari sub-masalah, yang akan membimbing menuju
penyelesaian atas permasalahan utama
6.4.2Memahami Merge Sort
Seperti yang telah dijelaskan sebelumnya, Merge sort menggunakan pola divide and
conquer. Dengan hal ini deskripsi dari algoritma dirumuskan dalam 3 langkah
berpola divide-and-conquer. Berikut menjelaskan langkah kerja dari Merge sort.
1. Divide
Memilah elemen – elemen dari rangkaian data menjadi dua bagian.
2. Conquer
Conquer setiap bagian dengan memanggil prosedur merge sort secara
rekursif
3. Kombinasi
Mengkombinasikan dua bagian tersebut secara rekursif untuk mendapatkan
rangkaian data berurutan
Proses rekursi berhenti jika mencapai elemen dasar. Hal ini terjadi bilamana bagian
yang akan diurutkan menyisakan tepat satu elemen. Sisa pengurutan satu elemen
tersebut menandakan bahwa bagian tersebut telah terurut sesuai rangkaian.
6.4.3Algoritma
void mergeSort(Object array[], int startIdx, int endIdx) {
if (array.length != 1) {
//Membagi rangkaian data, rightArr dan leftArr
mergeSort(leftArr, startIdx, midIdx);
mergeSort(rightArr, midIdx+1, endIdx);
combine(leftArr, rightArr);
}
}
6.4.4Sebuah Contoh
Rangkaian data:
7 2 5 6
Membagi rangkaian menjadi dua bagian:
LeftArr RightArr
7 2 5 6
Membagi LeftArr menjadi dua bagian:
LeftArr RightArr
7 2
Mengkombinasikan
2 7
Membagi RightArr menjadi dua bagian:
LeftArr RightArr
Mengkombinasikan
5 6
Mengkombinasikan LeftArr dan RightArr.
2 5 6 7
Gambar 1.3.4: Contoh merge sort
6.5 Quicksort
Quicksort ditemukan oleh C.A.R Hoare. Seperti pada merge sort, algoritma ini juga
berdasar pada pola divide-and-conquer. Berbeda dengan merge sort, algoritma ini
hanya mengikuti langkah – langkah sebagai berikut :
1. Divide
Memilah rangkaian data menjadi dua sub-rangkaian A[p…q-1] dan A[q+1…r]
dimana setiap elemen A[p…q-1] adalah kurang dari atau sama dengan A[q]
dan setiap elemen pada A[q+1…r] adalah lebih besar atau sama dengan
elemen pada A[q]. A[q] disebut sebagai elemen pivot. Perhitungan pada
elemen q merupakan salah satu bagian dari prosedur pemisahan.
2. Conquer
Mengurutkan elemen pada sub-rangkaian secara rekursif
Pada algoritma quicksort, langkah ”kombinasi” tidak di lakukan karena telah terjadi
pengurutan elemen – elemen pada sub-array
6.5.1Algoritma
void quickSort(Object array[], int leftIdx, int rightIdx) {
int pivotIdx;
/* Kondisi Terminasi */
if (rightIdx > leftIdx) {
pivotIdx = partition(array, leftIdx, rightIdx);
quickSort(array, leftIdx, pivotIdx-1);
quickSort(array, pivotIdx+1, rightIdx);
}
}
6.5.2Sebuah Contoh
Rangkaian data:
3 1 4 1 5 9 2 6 5 3 5 8
Pilih sebuah elemen yang akan menjadi elemen pivot.
3 1 4 1 5 9 2 6 5 3 5 8
Inisialisasi elemen kiri sebagai elemen kedua dan elemen kanan sebagai elemen
akhir.
kiri kanan
3 1 4 1 5 9 2 6 5 3 5 8
Geser elemen kiri kearah kanan sampai ditemukan nilai yang lebih besar dari elemen
pivot tersebut. Geser elemen kanan ke arah kiri sampai ditemukan nilai dari elemen
yang tidak lebih besar dari elemen tersebut.
kiri kanan
3 1 4 1 5 9 2 6 5 3 5 8
Tukarkan antara elemen kiri dan kanan
kiri kanan
3 1 3 1 5 9 2 6 5 4 5 8
Geserkan lagi elemen kiri dan kanan.
kiri kanan
3 1 3 1 5 9 2 6 5 4 5 8
Tukarkan antar elemen kembali.
kiri kanan
3 1 3 1 2 9 5 6 5 4 5 8
Geserkan kembali elemen kiri dan kanan.
kanan kiri
3 1 3 1 2 9 5 6 5 4 5 8
Terlihat bahwa titik kanan dan kiri telah digeser sehingga mendapatkan nilai elemen
kanan < elemen kiri. Dalam hal ini tukarkan elemen pivot dengan elemen kanan.
pivot
2 1 3 1 3 9 5 6 5 4 5 8
Gambar 1.4.2: Contoh quicksort
Kemudian urutkan elemen sub-rangkaian pada setiap sisi dari elemen pivot.
6.6 Latihan
6.6.1Insertion Sort
Impelementasikan algoritma insertion sort dalam Java untuk mengurutkan
serangkaian data integer. Lakukan percobaan terhadap hasil implementasi anda
terhadap rangkaian data integer yang dimasukkan oleh pengguna melalui command
line.
6.6.2Selection Sort
Impelementasikan algoritma selection sort dalam Java untuk mengurutkan
serangkaian data integer. Lakukan percobaan terhadap hasil implementasi anda
terhadap rangkaian data integer yang dimasukkan oleh pengguna melalui command
line.
6.6.3Merge Sort
Gunakan implementasi merge sort berikut ini terhadap serangkaian data integer.
class MergeSort {
static void mergeSort(int array[], int startIdx,
int endIdx) {
if(startIdx == _____) {
return;
}
int length = endIdx-startIdx+1;
int mid = _____;
mergeSort(array, _____, mid);
mergeSort(array, _____, endIdx);
int working[] = new int[length];
for(int i = 0; i < length; i++) {
working[i] = array[startIdx+i];
}
int m1 = 0;
int m2 = mid-startIdx+1;
for(int i = 0; i < length; i++) {
if(m2 <= endIdx-startIdx) {
if(m1 <= mid-startIdx) {
if(working[m1] > working[m2]) {
array[i+startIdx] = working[m2++];
} else {
array[i+startIdx] = _____;
}
} else {
array[i+startIdx] = _____;
}
} else {
array[_____] = working[m1++];
}
}
}
public static void main(String args[]) {
int numArr[] = new int[args.length];
for (int i = 0; i < args.length; i++) {
numArr[i] = Integer.parseInt(args[i]);
}
mergeSort(numArr, 0, numArr.length-1);
for (int i = 0; i < numArr.length; i++) {
System.out.println(numArr[i]);
}
}
}
6.6.4 Quicksort
Gunakan implementasi quicksort berikut ini terhadap serangkaian data integer.
class QuickSort {
static void quickSort (int[] array, int startIdx,
int endIdx) {
// startIdx adalah index bawah
// endIdx is index atas
// dari array yang akan diurutkan
int i=startIdx, j=endIdx, h;
//pilih elemen pertama sebagai pivot
int pivot=array[_____];
// memilah
do {
while (array[i]_____pivot) {
i++;
}
while (array[j]>_____) {
j--;
}
if (i<=j) {
h=_____;
array[i]=_____;
array[j]=_____;
i++;
j--;
}
} while (i<=j);
// rekursi
if (startIdxquickSort(array, _____, j);
}
if (iquickSort(array, _____, endIdx);
}
}
public static void main(String args[]) {
int numArr[] = new int[args.length];
for (int i = 0; i < args.length; i++) {
numArr[i] = Integer.parseInt(args[i]);
}
quickSort(numArr, 0, numArr.length-1);
for (int i = 0; i < numArr.length; i++) {
System.out.println(numArr[i]);
}
}
}
|
posted by asy syaghaf @ 6/04/2009 01:02:00 AM |
|
|
Rabu, 03 Juni 2009 |
POINTER |
Pointer
Poiter adalah variabel yang berisi alamat memori variabel lain dan secara tidak langsung
menunjuk ke variabel tersebut.
Sebagai contoh Andi berteman dengan Budi, lalu anda ingin mengetahui jumlah keluarga
Budi untuk keperluan sensus penduduk. Anda tidak mengetahui alamat Budi, tetapi anda
mengenal Andi. Untuk mencari jumlah keluarga Budi, maka pertama-tama anda pergi ke rumah
Andi, misalnya di rumah No. 8321. Sesampai di Andi, Andi membaritahukan kepada anda bahwa
alamat Budi ada pada alamat 9821. Kemudian anda pergi ke rumah Budi lalu mencatat jumlah
keluarga yang dimiliki Budi yaitu lima orang (misalkan).
Dalam contoh di atas, Andi bertindak sebagai pointer. Andi tidak memberitahukan jumlah
keluarga Budi, tetapi Andi memberitahu alamat Budi, di alamat 9821 (alamat Budi) itulah Anda
mengetahui jumlah keluarga Budi.
Jika alamat dari ditunjukkan dengan simbol & dan isi dari ditunjukkan dengan symbol *,
maka hubungan analogi di atas adalah:
Nama Alamat Isi
Andi 8321 9821 = &Budi
Budi 9821 5 = *(&Budi)
Algoritma dan Pemrograman II (3 SKS) Struktur dan Pointer
Syamsuryadi Program Ilmu Komputer halaman 5 dari 8
Dalam bentuk pointer, ditulis :
Andi = &Budi; // baris 1
Budi = *(&Budi); // baris 2
Subtitusi pernyataan di baris 2 :
Andi = *Andi;
Contoh program yang menggambarkan hal tersebut sebagai berikut:
#include
void main()
{
int *Andi; // Andi sebagai pointer
int Budi = 5; // Budi bukan pointer, perhatikan perbedaan pada *
Andi = &Budi // Isi dari Andi yaitu alamat Budi
cout<<”Isi alamat memori Andi : “<cout<<”Isi alamat memori Budi : “<cout<<”Isi alamat memori Budi : “<<*Andi<cout<<”Alamat memori Andi : “<<&Andi<cout<<”Alamat memori Budi :”<<&Budi<}
Hasil program :
Isi alamat memori Andi : 0x6da72448
Isi alamat memori Budi : 5
Isi alamat memori Budi : 5
Alamat memori Andi : 0x6da7244a
Alamat memori Budi : 0x6da72448
Penjelasan :
Isi alamat memori Andi adalah alamat memori Budi, yaitu 0x6da72448 (alamat ini
berbeda-beda tergantung dari komputernya dan ditulis dalam bentuk hexadesimal).
Sedangkan isi alamat memori Budi adalah 5. Cara mengakses isi dari alamat Budi ada dua cara,
yaitu mengakses variabel Budi dan mengakses isi dari pointer Andi (*Andi). *Andi dapat juga
disebut “isi dari alamat memori yang ditunjuk oleh Andi”. Karena alamat memori yang ditunjuk
oleh Andi adalah alamat memori Budi, maka dapat dikatakan “isi dari alamat memori Budi”.
2.2.1 Pointer - Array
Kita akan melihat bagaimana data disimpan di memori dalam sebuah array.
Algoritma dan Pemrograman II (3 SKS) Struktur dan Pointer
Syamsuryadi Program Ilmu Komputer halaman 6 dari 8
Contoh :
#include
void main()
{
int n;
int array[4] = {10,20,30,40};
for(n=0;n<4;n++)
{
cout<<”Array[“<cout<<”\tMenggunakan pointer = “<<*&array[n]<cout<<”\tDisimpan dalam “<<&array[n]<}
}
Keluarannya :
Array[0] = 10
Menggunakan pointer = 10
Disimpan dalam 0xdb72408
Array[1] = 20
Menggunakan pointer = 20
Disimpan dalam 0xdb7240a
Array[2] = 30
Menggunakan pointer = 30
Disimpan dalam 0xdb7240c
Array[3] = 40
Menggunakan pointer = 40
Disimpan dalam 0xdb7240e
Penjelasan :
Seperti yang anda lihat, setiap array disimpan dalam 2 byte memori karena kita
menggunakan tipe data integer. Perhatikan pula penggunaan pointer dalam
pengaksesan nilai setiap elemen array dan pengaksesan alamat setiap array.
Alamat setiap elemen array dapat diperoleh dengan cara
&array[n] atau array+n
Isi dari setiap elemen array dapat diperoleh dengan cara
array[n] atau *(array+n)
Algoritma dan Pemrograman II (3 SKS) Struktur dan Pointer
Syamsuryadi Program Ilmu Komputer halaman 7 dari 8
Di bawah ini adalah contoh pengaksesan memori dan isi memori dengan menggunakan
cara kedua.
Contoh :
#include
void main()
{
int n;
int array[4] = {10,20,30,40};
for(n=0;n<4;n++)
{
cout<<”Array[“<cout<<”\tMenggunakan pointer = “<<*(array+n)<cout<<”\tDisimpan dalam “<}
}
Keluarannya :
Array[0] = 10
Menggunakan pointer = 10
Disimpan dalam 0xdb72408
Array[1] = 20
Menggunakan pointer = 20
Disimpan dalam 0xdb7240a
Array[2] = 30
Menggunakan pointer = 30
Disimpan dalam 0xdb7240c
Array[3] = 40
Menggunakan pointer = 40
Disimpan dalam 0xdb7240e
Mengapa hasil antara dua contoh di atas sama namun sintaksnya berbeda ? Karena array itu
sebenarnya telah menunjuk ke alamat memori setiap elemennya, sehingga untuk mengetahui
alamat memori setiap elemen array cukup dengan array + n dengan n bilangan bulat ( integer ).
2.2.2 Pointer - String
String merupakan bentuk khusus dari array. Oleh karena itu operasi pointer-array
tidak jauh berbeda dengan operasi pointer-string
Algoritma dan Pemrograman II (3 SKS) Struktur dan Pointer
Syamsuryadi Program Ilmu Komputer halaman 8 dari 8
Contoh :
#include
void main()
{
char nama[5] = “Andi”;
cout<<”Nama awal : “<char *ptr;
ptr = nama;
*(ptr+3) = ‘y’;
cout<<”Nama menjadi : “<}
Keluarannya :
Nama awal : Andi
Nama menjadi : Andy
Jadi :
String adalah array (susunan) dari karakter-karakter.
String dapat diakses dan dimanipulasi lewat pointer.
Alamat awal dari string dapat diperoleh dari namanya.
2.2.3 Pointer Sebagai Argumen String
Jika pointer dikirim sebagai argument, maka nilai aktualnya dapat dimodifikasi.
Contoh :
#include
void ubah(char *);
void main()
{
char *ptr,nama[5] = “Andi”;
ptr = nama; // ptr sebagai pointer ke variable nama
cout<<”Nama awal : “<ubah(ptr);
cout<<”Nama menjadi : “<}
void ubah(char *x)
{
*(x+3) = ‘y’;
}
Keluarannya :
Nama awal : Andi
Nama menjadi : Andy |
posted by asy syaghaf @ 6/03/2009 10:47:00 PM |
|
|
|
STUKTUR BAHASA PASCAL |
Struktur Bahasa PASCAL secara umum Pascal mempunyai struktur sebagai berikut: 1. Bagian Judul Program 2. Bagian Deklarasi a. Deklarasi tipe data (TYPE) b. Deklarasi variabel (VAR) c. Deklarasi konstanta (CONST) d. Deklarasi label (LABEL) e. Deklarasi sub-program (PROCEDURE dan FUNCTION) 3. Bagian Program Utama Perintah-perintah. Teks Pascal setidaknya memiliki bagian Judul Program, bagian Deklarasi, dan Bagian Program Utama yang berupa perintah-perintah. Sedangkan untuk bagian deklarasi menyesuaikan dengan isi dari program itu sendiri. Contoh program PASCAL: program TAMBAH_00; { Menjumlahkan dua bilangan yang nilainya diberikan dalam perintah} var X, Y, Z: integer; { Deklarasi variabel X,Y dan Z sebagai bilangan bulat } BEGIN { Program Utama Mulai } X := 50; { Perintah memberikan nilai 50 pada var. X } Y := 25; { Perintah memberikan nilai 25 pada var. Y } Z := X + Y; { Perintah menjumlahkan X dan Y serta menyimpan hasilnya ke Z} END. { Akhir Program Utama } Pada contoh ini nilai X dan Y tidak bisa sembarang, karena didefiniskan tertentu. Agar nilai X dan Y bisa bebas ditentukan, nilai X dan Y dibaca dari default input. program TAMBAH_01; { Menjumlahlan dua buah bilangan yang dibaca dari default input } var X, Y, Z: integer; { Deklarasi variabel X,Y dan Z sebagai bilangan bulat } BEGIN { Program Utama Mulai } read(X); { Membaca nilai X lewat key-board } read(Y); { Membaca nilai Y lewat key-board } Z := X + Y; { Menjumlahkan X dan Y serta menyimpan hasilnya ke Z } write(Z); { Menyajikan Z ke layar monitor } END. { Akhir Program Utama }
Dasar Bahasa PASCAL Unsur-unsur Pemrograman a. Mendapatkan data dengan membaca data dari default input (key board, file atau sumber data lainnya). b. Menyimpan data ke dalam memori dengan struktur data yang sesuai, c. Memproses data dengan instruksi yang tepat. d. Menyajikan atau mengirimkan hasil olahan data ke default output (monitor, file atau tujuan lainnya).
Jenis identifier a. Identifier umum Merupakan identifier yang didefinisikan sendiri oleh pemrogram. Pemrogram mempunyai kebebasan untuk menentukan nama identifiernya, dengan syarat nama tersebut tidak sama dengan identifier standar dan reserved word yang akan dibahas lebih lanjut. Hal ini untuk mencegah kesalahan yang bisa timbul akibat tumpang tindih identifier dalam program.
b. Identifier Standar (Baku) Merupakan identifier yang didefinisikan oleh pembuat kompiler Pascal. Biasanya pembuat kompiler menyediakan suatu library yang sudah ada didalam kompiler. Library berisi berbagai procedure, fungsi atau unit yang sudah siap pakai. Misalnya Turbo Pascal Windows 1.5 memiliki suatu unit untuk memproses output yaitu wincrt, gotoxy, yang dengan mudah bisa dipakai oleh programmer di dalam menuliskan kode-kode programnya. Dinamai Identifier Standar karena suatu kompiler tidak harus memilikinya, masing-masing kompiler dimungkinkan mempunyai identifier yang berbeda untuk suatu tugas yang hampir sama. Misalnya Turbo Pascal versi DOS menggunakan crt untuk melakukan fungsi yang sama dengan wincrt (TPW 1.5). Beberapa Identifier Standar yang dimiliki oleh kompiler-kompiler Pascal antara lain: abs arctan boolean char cos dispose eof eoln exp false input integer ln maxint new odd ord output pack page pred read readln real reset rewrite round sin sqr sqrt succ text true trunc write writeln c. Identifier "reserved word", yaitu yang sudah didefinisikan dan digunakan oleh bahasa PASCAL sendiri (Kita tidak bisa menamai identifier kita dengan ini). and array begin case const div do downto else end file for forward function goto if in label mod nil not of or packed procedure program record repeat set then to type until var while with Deklarasi Variable: Mendeklarasikan varibel adalah: a. Memberikan nama variabel sebagai identitas pengenal b. Menentukan tipe data variabel Contoh deklarasi variabel: var K : integer; R : real; C : char; T : boolean; Beberapa identifier yang sejenis bisa dideklarasikan bersamaan. var i, j, k : integer;{Variabel i, j dan k sebagai integer} namaMHS, alamatMHS : char; {Nama dan alamat mahasiswa } Deklarasi Konstanta: Mendeklarasikan konstanta adalah: a. Memberikan nama konstanta sebagai identitas pengenal b. Menentukan nilai konstanta Contoh deklarasi konstanta: const MaximumSize = 100; {integer } ExitCommand = 'Q'; {char }
Tipe Data Tipe data yang disediakan oleh PASCAL meliputi: 1. Tipe Data Sederhana merupakan tipe data dasar yang sering dipakai oleh program, meliputi: integer (bilangan bulat), real (bilangan pecahan), char (alphanumerik dan tanda baca), dan boolean (logika). Untuk data integer dan real masing-masing terbagi menjadi beberapa kategori a. Bilangan Integer merupakan tipe data berupa bilangan bulat, terbagi atas beberapa kategori seperti terlihat dalam tabel 1. tabel 1 menunjukkan jenis data, ukuran dalam memori dan rentang nilainya. tabel 1. Tipe Data Bilangan Integer Tipe Data Ukuran Tempat Rentang Nilai Byte 1 byte 0 s/d +255 Shortint 1 byte -28 s/d +127 integer 2 bytes -32768 s/d 32767 Word 2 bytes 0 s/d 65535 Longint 4 bytes 2147483648 s/d 2147483647 Contoh bilangan integer adalah: 34 6458 -90 0 1112 Penggolongan tipe data integer tersebut dimaksudkan untuk membatasi alokasi memori yang dibutuhkan misalkan untuk suatu perhitungan dari suatu variabel bilangan diperkirakan nilai maksimumnya 32767 kita cukup mendeklarasikan variabel bilangan sebagai integer (2 byte), daripada sebagai longint(4 byte). Di dalam kompilernya, Pascal menyediakan konstanta untuk bilangan Integer yaitu: MaxInt and MaxLongInt, pemrogram bisa menggunakannya di dalam programnya tanpa harus terlebih dahulu mendefinisikannya. -MaxInt bernilai 32.767 -MaxLongint bernilai 2.147.483.647. contoh: Program display_maxint; uses wincrt; begin writeln (maxint) end.
Hasilnya: 32.767 b. Bilangan Real Bilangan real atau nyata merupakan jenis bilangan pecahan, dapat dituliskan secara biasa atau model scientific . Contoh bilangan real: 34.265 -3.55 0.0 35.997E+11, dimana E merupakan simbol perpangkatan 10. Jadi 452.13 mempunyai nilai sama dengan 4.5213e2. Penggolongan tipe data bilangan real dapat dilihat pada tabel 2. Bilangan Real Tabel 2. Tipe Data Bilangan Real Tipe Data Ukuran Tempat Rentang Nilai real 6 bytes 2.9 x 10-39 s/d 1.7 x1038 single 4 bytes 1.5 x 1045 s/d 3.4 x 1038 double 8 bytes 5.0 x 10-324 s/d 1.7 x 10308 extended 10 bytes 3.4 x 10-4932 s/d 1.1 x 104932 comp 8 bytes -9.2x 1018 s/d 9.2x 1018 c. Char Tipe data ini menyimpan karakter yang diketikkan dari keyboard, memiliki 266 macam yang terdapat dalam tabel ASCII (American Standard Code for Information Interchange). Contoh: 'a' 'B' '+', dsb. Yang perlu diingat bahwa dalam menuliskannya harus dengan memakai tanda kutip tunggal. Jenis data ini memerlukan alokasi memori sebesar 1(satu) byte untuk masing-masing data. d. Tipe Data Boolean merupakan tipe data logika, yang berisi dua kemungkinan nilai: TRUE (benar) atau FALSE (salah). Turbo Pascal for Windows memiliki tiga macam jenis ini yaitu: Boolean, WordBool, dan LongBool. Tipe boolean memakai memori paling kecil, sedangkan WordBool dan LongBool dipakai untuk menulis program yang sesuai dengan lingkungan Windows. Tabel 3. Tipe Data Boolean Tipe Data Ukuran Tempat Boolean 1 byte WordBool 2 byte Longbool 3 byte Sebagai bilangan ordinal boolean true mempunyai nilai 1(satu), sedangkan false nilainya adalah 0(nol). Contoh: Program display_bool; uses wincrt; begin writeln(ord(true)); writeln(ord(false)); end.
Hasilnya: 1 0 3.2. Tipe Data Terstruktur tipe ini terdiri atas : array, record, set, dan file. String adalah tipe data jenis array, tetapi karena string memiliki kekhasan tersendiri sebagai array dari karakter maka penulis perlu memberikan penjelasan tersendiri. Sedangkan untuk array, record, dan file perlu dijelaskan dalam bab yang lain karena agak banyak hal-hal yang perlu dibahas. a. Tipe Data String merupakan suatu data yang menyimpan array (larik), sebagai contoh 'ABCDEF' merupakan sebuah konstanta string yang berisikan 6 byte karakter. Ukuran Tempat untuk tipe data ini adalah 2 s/d 256 byte, dengan jumlah elemen 1 s/d 255. String dideklarasikan dengan string [ konstanta ] atau string. Bila ukuran string tidak didefinisikan maka akan banyak memakan ruang, karena ukuran string menyesuaikan dengan defaultnya. Misalkan var kata: string [20]; atau var kata: string; karena string merupakan array dari karakter. Maka kata[1] merupakan karakter pertama dari string, kemudian kata[2], merupakan elemen kedua, dst. Contoh: Program hal_string; Uses wincrt; var s : string; begin s:='Hello'; writeln(s); writeln('panjang dari string adalah: ',ord(s[0])); end. Karakter nol merupakan karakter yang menyatakan panjang string. Sehingga ord(s[0]) menyatakan panjang dari string tersebut,panjang string juga bisa dinyatakan sebagai length(s). |
posted by asy syaghaf @ 6/03/2009 09:36:00 PM |
|
|
|
ARRAY (LARIK) |
ARRAY (LARIK) 1. Pendahuluan Suatu array adalah sebuah struktur data yang terdiri atas banyak variabel dengan tipe data sama, dimana masing-masing elemen variabel mempunyai nilai indeks. Setiap elemen array mampu untuk menyimpan satu jenis data (yaitu: variabel). Suatu array dinyatakan dengan type, sehingga variabel yang bekerja akan dinyatakan dengan: contoh type A = array [1..10] of integer; 1 2 3 4 5 6 7 8 9 10 Secara logika pendefinisian array di atas merupakan sekumpulan kotak , dimana tiap kotak mempunyai nilai indeks integer 1, 2, 3, ...,9, 10 tiap elemen array ditandai dengan: A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[8], A[9], A[10]
2. Sifat Array Array merupakan struktur data yang statis, yaitu jumlah elemen yang ada harus ditentukan terlebih dahulu dan tak bisa di ubah saat program berjalan. Untuk menyatakan array dalam PASCAL kita harus terlebih dahulu: Mendefinisikan jumlah elemen array, Mendefinisikan tipe data dari elemen array Contoh. const N=10; type A= array [1..N] of integer;
3. Array Satu Dimensi Pernyataan di atas merupakan penjelasan tentang array dengan satu dimensi. Pendefinisian array secara umum adalah sebagai berikut: jika kita ingin membuat beberapa array dengan tipe/jenis yang sama, kita lebih baik jika mendeklarasikan dengan type selanjutnya dengan deklarasi var. SYNTAX Type nama_array = ARRAY[bawah..atas] of tipe_data; var variabel_array : nama_array;
atau dengan menggunakan statemen var : var variabel_array : ARRAY[bawah..atas] of tipe_data; Penjelasan: Bawah dan Atas menyatakan batas untuk array. tipe_data adalah merupakan tipe variabel yang dipunyai array (mis. Integer, char, real, dsb) Contoh: type intarray = ARRAY [1..20] of integer; Pernyataan diatas adalah pernyataan untuk membentuk suatu array bernama intarray,yang berisi 20 tempat untuk bilangan integer. Setiap posisi disebut elemen, yang menyimpan suatu bilangan integer.langkah berikutnya adalah membuat suatu variabel kerja dengan tipe intarray yaitu, var numbers : intarray; kita bisa melakukan operasi pada setiap elemen dari numbers secara individual. Contoh kita bisa memberi nilai pada suatu elemen array seperti berikut: numbers[2] := 10;
perintah ini memberikan suatu nilai integer 10 pada elemen ke-2 dari array numbers. Nomor dari elemen ditempatkan didalam kurung tegak. Contoh berikut adalah merupakan array yang menyimpan variabel-variabel integer. Data dengan tipe integer hanya bisa dimasukkan satu persatu, kemudian baru bisa ditampilkan di monitor secara bersamaan
Contoh a. program INT_ARRAY; uses wincrt; const N=10; type int_array = ARRAY [1..N] of integer; var bil : int_array; indeks : integer; BEGIN writeln('masukkan sepuluh bilangan integer.'); for indeks := 1 to 10 do begin readln(bil[indeks]); { loop untuk memasukkan elemen array } end; writeln('Isi dari array ini adalah'); { tampilkan setiap elemen } for indeks := 1 to 10 do begin writeln('bil[', indeks:2,'] adalah ',bil[indeks] ); end END. Contoh b. program contoh_ARRAY; uses wincrt; var a : array[1..10] of byte;{maksimum jumlah elemen=10} begin a[1]:=10; a[2]:=15; a[3]:=a[1]+a[2]; writeln(a[1]); writeln(a[2]); writeln(a[3]); end.
Latihan 1. Menggunakan Array 1 dimensi buatlah program dengan ketentuan: Input--- Nilai PPN, Nilai PPA, Nilai Logika, Nilai Agama Output- Total Nilai Ket: Nama Array = nilai Nama variabel = n Jumlah Range = 5
2. Untuk soal no.1 tambahkan proses untuk mendapatkan kelulusan jika nilai logika > 7 dan proses untuk mendapatkan grade ( A jika total >34, B jika total > 28, C jika total > 24 dan D jika total <=24). |
posted by asy syaghaf @ 6/03/2009 09:34:00 PM |
|
|
|
ARRAY MULTIDIMENSI |
Array Multidimensi Dalam array multidimensi terdiri atas baris (row) dan kolom (column). Index pertama adalah baris dan yang kedua adalah kolom . SYNTAX Type nama_array =ARRAY[bawah..atas, bawah..atas] of tipe_data; var variabel_array : nama_array; atau dengan menggunakan statemen var : SYNTAX var variabel_array : ARRAY[bawah..atas, bawah..atas] of tipe_data; Pernyataan berikut membentuk suatu array integer dengan nama bilangan , 10 x 10 elemen (100). type matriks = ARRAY [1..10, 1..10] of integer; var AKU: matriks;
untuk memasukkan tiap elemen maka, diperlukan suatu procedure dengan mempergunakan struktur pengulangan for ...do tersarangseperti berikut: procedure ISI_MATRIK(AKU:matriks; m,n:integer); var i,j: integer; {faktor pengulang} begin for i:=1 to m do begin for j:=1 to n do begin read(A[i,j]); end; readln ;{ini memungkinkan kita menulis tiap baris elemen} end;
untuk menampilkan tiap elemen maka, digunakan struktur pengulangan for ...do tersarang seperti berikut procedure TULIS_MATRIK(AKU:matriks; m,n:integer); var i,j: integer; {faktor pengulang} begin for i:=1 to m do begin for j:=1 to n do begin write(A[i,j]:6); end; writeln ; {ini memungkinkan kita menulis elemen dalam baris dan kolom } end; end;
5. Operasi pada Array Sifat masing-masing elemen array mengikuti jenis data yang dimilikinya, untuk array dengan tipe bilangan integer atau real kita bisa melakukan berbagai standar operasi aritmatika seperti penjumlahan, perkalian, pengurangan, dsb. Yang perlu di garis bawahi, bahwa sifat dari array dimanfaatkan untuk operasi matrik.
a. Mencari Harga Tertentu pada Array Mencari suatu elemen data di dalam suatu data merupakan suatu kejadian yang sering kita alami, contoh: mencari nama mahasiswa dari daftar presensi. Pencarian beruntun (sequence), merupakan suatu teknik untuk mencari suatu elemen dalam suatu sistim yang lebih besar. Contoh. Misal array A[8], dengan elemen sbb: A 60 12 76 23 11 42 18 42 Untuk mencari apakah bilangan x=11 ada didalam tabel maka dilakukan pemeriksaan terhadap : 60 12 76 23 11 Sehingga ditemukan x pada elemen ke-5, dalam bahasa PASCAL diterjemahkan seperti berikut: type PITA = ARRAY [1..8] of integer; var AKU: PITA; procedure CARI_MATRIK(AKU: PITA); var i: integer; {faktor pengulang} begin for i:=1 to 8 do begin if AKU[i]:= 11 then writeln(‘ terdapat bilangan 11 dalam pita ini ‘); else writeln(‘ tidak ada bilangan 11, pencarian berhenti ‘); end; end; b. Mencari Harga Maksimum pada Array Misal array di atas kita cari harga yang tertinggi, maka kita perlu menentukan nilai tertinggi dahulu sebelum melakukan pencarian ; diawali dengan nilai maksimum=0 procedure CARI_MAKSIMUM(AKU: PITA); var i: integer; {faktor pengulang} MAKS : integer; begin MAKS := AKU[1]; for i:=1 to 8 do begin if AKU[i]> MAKS then MAKS:= AKU[i]; End; Writeln(‘NILAI MAKSIMUM = ’,MAKS); end; b. Mencari Harga Minimum pada Array Misal array di atas kita cari harga yang terendah, maka kita perlu menentukan nilai terendah dahulu sebelum melakukan pencarian ; diawali dengan nilai maksimum=3200 procedure CARI_MINIMUM(AKU: PITA); var i: integer; {faktor pengulang} MIN : integer; begin MIN := 3200; for i:=1 to 8 do begin if AKU[i]< MIN then MIN:= AKU[i]; end; writeln(‘NILAI MINIMUM = ’,MIN); end; c. Matrik Sebagai perwujudan dari array dua dimensi, operasi aritmatika seperti penjumlahan, perkalian, dan pengurangan bisa dilakukan. Contoh. - Mendefinisikan Elemen Program OPERASI_MATRIK; uses wincrt; type matrik=array[1..100,1..100] of real; var m,n, p, q: integer; {dimensi dari matrik} A,B,C: matrik; {matrik A, B sebagai input, C sebagai hasil}
- Membaca Elemen Matrik procedure bacamatrik(var A:matrik; m,n:integer); var i,j: integer; {faktor pengulang} begin {read} for i:=1 to m do begin {do} for j:=1 to n do read(A[i,j]); readln; end; {do} end; {read} - Menampilkan Elemen Matrik procedure tulismatrik(A:matrik; m,n:integer); var i,j: integer; {faktor pengulang} begin {write} for i:=1 to m do begin {tiap baris} writeln; for j:=1 to n do write(A[i,j]:6:2); end; {tiap baris} writeln; end; {write} - Penjumlahkan Matrik procedure check_matrik(A,B,C:matrik; m,n,p,q:integer); var i,j :integer; begin if (m=p) and (n=q) then begin for i:=1 to m do begin for j:=1 to n do begin C[m,n]=A[m,n]+B[m,n]) end; end; end else writeln('DIMENSI MATRIK TIDAK COCOK') end; - Pengurangan Matrik procedure check_matrik(A,B,C:matrik; m,n,p,q:integer); var i,j :integer; begin if (m=p) and (n=q) then begin for i:=1 to m do begin for j:=1 to n do begin C[m,n]=A[m,n]- C[m,n]) end; end; end else writeln('DIMENSI MATRIK TIDAK COCOK') end;
-. Perkalian Matrik procedure perkalian_matrik(A,B,C:matrik; m,n,p,q:integer); var i,j, k :integer; C1: matrik; begin if (n=p) then begin for i:=1 to m do begin for j:=1 to p do begin {inner product} C1[i,j]:=0; for k:=1 to n do C1[i,j]:=C1[i,j]+A[i,k]*B[k,j]; end; {inner product} end; n:=q; for i:=1 to m do for j:=1 to n do C[i,j]:=C1[i,j]; end else writeln('DIMENSI MATRIK TIDAK COCOK') end; - Transpose Matrik procedure Transpose(A,B:matrik; m,n,p,q:integer); var i,j:integer; begin for i:=1 to n do begin for j:=1 to m do begin B[m,n]=A[n,m] end; end; end; -. Mencari Elemen yang Kosong pada Matrik procedure CHECK_ZERO_ELEMEN(A,matrik; m,n:integer); var i,j:integer; begin for i:=1 to m do begin for j:=1 to n do begin if B[m,n]= 0 then writeln (‘terdapat elemen yang kosong’) else writeln (‘tidak terdapat elemen yang kosong’) end; end; end; |
posted by asy syaghaf @ 6/03/2009 09:25:00 PM |
|
|
|
RECORD |
RECORD (REKAMAN) Sebuah record rekaman disusun oleh beberapa field. Tiap field berisi data dari tipe dasar / bentukan tertentu. Record mempunyai kelebihan untuk menyimpan suatu sekumpulan elemen data yang berbeda-beda tipenya (di banding array). Contoh , sebuah record dengan empat buah field. Cara pendeklarasian dari record adalah sbb: • Mendefinisikan tipe dari record (jumlah field, jenis tipe data yang dipakai), • Mendefinisikan variabel untuk dilakukan operasi. SYNTAX type nama_record = record identifier_1 : tipe_data_1; : : identifier_n : tipe_data_n; end; var variabel : nama_record; Contoh. type Data_mahasiswa = record Nama : string; Usia : integer; Kota : String; Kodepos : integer; end; Var x: Data_mahasiswa; 1. Pengaksesan Elemen Record Nama variable disertai nama field. x.Nama x.Usia x.Kota x.Kodepos Contoh. program RECORD_INTRO;
type tanggal = record bulan, hari, tahun : integer; end; var waktu : tanggal; begin waktu.hari :=25; waktu.bulan:=09; waktu.tahun:= 1983; writeln('hari ini adalah ',waktu.hari,':',waktu.bulan,':', waktu.tahun) end.
2. Pengunaan With … do Pernyataan with untuk lebih menyederhanakan pengaksesan field-field pada record. Pemrograman dapat mengakses field cukup dengan menyebutkan nama field-nya saja. Misalkan pernyataan : x.Nama x.Usia x.Kota x.Kodepos menjadi with x do Begin Nama Usia Kota Kodepos end Contoh. program RECORD_INTRO; type tanggal = record bulan, hari, tahun : integer; end; var waktu : tanggal; begin {program utama} with waktu do {mulai with} begin hari :=25; bulan:=09; tahun:=1983; writeln('hari ini adalah ',hari,':',bulan,':', tahun) end {akhir with} end.
3. Array dari Record Suatu array dapat juga berisi record contoh suatu deklarasi record tanggal. type tanggal = record bulan, hari, tahun : integer; end; var waktu : tanggal;
kemudian kita membentuk suatu array dari record ini, namakan birthdays. var birthdays : array[1..10] of tanggal; pernyataan ini akan membentuk suatu array dengan 10 elemen. Dimana tiap elemen adalah sebuah record tanggal, yaitu, terdiri atas bulan, hari, tahun dengan tipe data Integer. Contoh Pemberian nilai awal dari masing-masing elemen birthdays: Birthdays[1].hari :=25; Birthdays[1].bulan:=09; Birthdays[1].tahun:=1983;
4. Record di dalam Record Record bisa berisi record lain sebagai field. Seperti contoh record tanggal dan jam dikombinasikan menjadi sebuah record saat ini,
type tanggal = record bulan, hari, tahun : integer; end; type waktu =record jam, menit, detik : integer; end; type waktu_ini =record tanggal_ini : tanggal; waktu_ini : waktu end;
Kemudian kita perlu membuat variabel kerja var saat_ini : waktu_ini; pemberian nilai akan terjadi seperti di bawah ini: saat_ini.tanggal.bulan:= 11; saat_ini.tanggal.hari:= 2; saat_ini.tanggal.tahun:= 1985; saat_ini.waktu.jam:= 3; saat_ini.waktu.menit:= 3; saat_ini.waktu.detik:= 33; |
posted by asy syaghaf @ 6/03/2009 09:18:00 PM |
|
|
|
STACK |
STACK ( Tumpukan )
- Adalah tumpulan data yang seolah-olah ada data di atas data lain. - Suatu metode untuk Input dan hapus di dalam memori komputer.
Konsep utama dalam STACK adalah LIFO ( Last In First Out ). Contoh:
5 Guntur 4 Aditya 3 Tyas 2 Hendra 1 Dyah
Data nomor 1 datang/masuk duluan, data nomor 5 yang paling atas yang keluar terlebih dahulu.
Algoritma: 1. Input/tambah data • Jika ada input maka no stack/no tumpukan yang semula 0 akan tambah 1 demi 1 sampai maksimal tumpukan.
2. Pengambilan data • Jika ada pengambilan data maka data dipindahkan di variabel lain contohnya temp. Dan posisi tumpukannya yang semula maksimal akan berkurang 1 demi 1 sampai posisi 0 kembali.
1. Deklarasi STACK
Type Const Max = 5; Nama record = Record Data : type data; Top : byte; End; Nama_array = ARRAY [1..max] of Nama record; Var STACK : nama Array;
Nama Array----- Barang Nama Record--- Coba Nama Variabel-- Stack
Contoh Deklarasi dari gambar diatas:
Type Coba = record Data :string; Top : byte; End; Barang = ARRAY [1..4] of coba; Var Stack:barang;
2. Operasi pada STACK • CREATE Membuat stack baru yang masih kosong.
Procedure create; Begin Stack.top:=0; End;
• FULL Untuk memeriksa apakah stack sudah penuh atau belum.
Fuction full:bolean; Begin Stack.top:=max; End;
• PUSH Menambah sebuah elemen ( data ) kedalam stack Syarat: tidak bisa dilakukan jika stack sudah penuh.
Procedure push ( input:string ); Begin If not full then Begin Stack.top:=stack.top; Stack.data:=input; End; End;
• EMPTY Fuction empty: bolean; Begin Empty:=false; If top:=0 then empty:=true; End;
• POP Mengambil elemen teratas dari stack. Syarat: Stack tidak boleh kosong.
Procedure Pop ( elemen:string ); Begin If not empty then Begin Elemen:=stack.data; Stack.top:=top – 1; End; End;
Uses wincrt; Type kelas = ARRAY[1..4] of string; Var Stack: kelas; top:byte; Elemen: string; I : integer; Begin top:=0; For i:=1 to 4 do Begin Writeln('masukkan nama ke', ' ',i,' ','='); readln(stack[i]); top:=top+1; End; writeln('posisi tumpukan=',top); Writeln('pengambilan data'); For i:=1 to 4 do Begin Elemen:=stack[i]; top:=top - 1; End; writeln; Writeln('data elemen sekarang=',elemen); writeln('posisi tumpukan=',top); Readln; End. |
posted by asy syaghaf @ 6/03/2009 09:12:00 PM |
|
|
|
|
About Me |
Name: asy syaghaf
Home: Pekanbaru, Riau
About Me: saya hanya seorang gadis biasa yang tengah berjuang menelusuri jati diri.
See my complete profile
|
Previous Post |
|
Archives |
|
Shoutbox |
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis ligula lorem, consequat eget, tristique nec, auctor quis, purus. Vivamus ut sem. Fusce aliquam nunc vitae purus. |
Links |
- link 1
- link 2
- link 3
- link 4
|
Powered by |
|
|