Jumat, 04 September 2009
Struktur Data: Array
Array atau Larik merupakan kumpulan data yang sejenis dan disimpan dalam memori komputer. Setiap elemen array dibedakan atas indeksnya. Indeks adalah batas bawah dan batas atas indeks yang menyatakan jumlah anggota dalam array. Beberapa indeks dapat dibuat sekaligus dengan simbol pemisah adalah tanda koma (,), yang berarti dimensi array lebih dari satu. Elemen boleh bertipe apa saja tetapi indek tipenya harus ordinal.
Struktur Data: Record
Sebuah record berisi beberapa komponen atau fields yang dapat berbeda tipenya. Setiap fields adalah list identifier dipisah koma, diikuti oleh simbol titik dua dan sebuah tipe. Deklarasi tipe data record diawali dengan kata cadangan record dan diikuti oleh suatu daftar field dan diakhiri dengan kata cadangan End.
Sintak :
type
Record
Daftar field
End
Contoh:
Type
Mhs = Record
Npm : string[8];
Nama : string[30];
Nilai : real
End;
Var
RecordMhs : Mhs;
Tiap komponen field dari record dapat dipergunakan dengan cara menuliskan:
Pengenal-record.pengenal-field[.pengenal-field]
Contoh:
RecordMhs.Npm:=’51295801’;
RecordMhs adalah pengenal-record dan Npm adalah pengenal-field.
Sintak :
type
Record
Daftar field
End
Contoh:
Type
Mhs = Record
Npm : string[8];
Nama : string[30];
Nilai : real
End;
Var
RecordMhs : Mhs;
Tiap komponen field dari record dapat dipergunakan dengan cara menuliskan:
Pengenal-record.pengenal-field[.pengenal-field]
Contoh:
RecordMhs.Npm:=’51295801’;
RecordMhs adalah pengenal-record dan Npm adalah pengenal-field.
Struktur Data: Pointer
Tipe pointer adalah data yang berisi suatu alamat yang menunjuk ke lokasi tertentu. Bila pointer berisi alamat dirinya sendiri maka pointer tidak menunjuk ke manapun disebut nil.
Tipe data pointer ini dipergunakan untuk keperluan pengalamatan pada memory, contohnya pengalokasian variabel dinamik. Nilai suatu variabel pointer dapat diisi dengan cara:
• Menggunakan prosedur New
• Dengan operator ^.
Contoh:
Type
PenunjukKaryawan = ^CatatanKaryawan
Catatankaryawan=Record
Kode : string[5];
Nama : string[25];
Gaji : Real;
End;
Var
Datakaryawan : Penunjukkaryawan;
Pada deklarasi ini, tipe data PenunjukKaryawan adalah tipe data pointer yang menunjuk ke suatu record CatatanKaryawan dan deklarasi dari record ini dapat diletakkan dibawahnya.
Variabel dinamik dapat dihapus dari heap menggunakan prosedur standar Dispose.
Tipe data pointer ini dipergunakan untuk keperluan pengalamatan pada memory, contohnya pengalokasian variabel dinamik. Nilai suatu variabel pointer dapat diisi dengan cara:
• Menggunakan prosedur New
• Dengan operator ^.
Contoh:
Type
PenunjukKaryawan = ^CatatanKaryawan
Catatankaryawan=Record
Kode : string[5];
Nama : string[25];
Gaji : Real;
End;
Var
Datakaryawan : Penunjukkaryawan;
Pada deklarasi ini, tipe data PenunjukKaryawan adalah tipe data pointer yang menunjuk ke suatu record CatatanKaryawan dan deklarasi dari record ini dapat diletakkan dibawahnya.
Variabel dinamik dapat dihapus dari heap menggunakan prosedur standar Dispose.
Kamis, 23 April 2009
Software Development Life Cycle
Software Development Life Cycle sangat penting dalam pengembangan perangkat lunak karena dapat mengatasi keterbatasan biaya, waktu, dan sumberdaya.
Software Development Life Cycle dalam pengembangan digunakan untuk membantu memonitor dan mengontrol progress dan karena biaya kebanyakan sistem mengalami over time dan over budget. Tanpa metodologi, tidak ada aturan-aturan yang didefinisikan untuk “how do we procceed?” terutama berguna untuk pengembang sistem pemula.
Metodologi digunakan untuk memastikan bahwa tidak ada aktivitas yang terlupakan dan kebanyakan yang akan berakhir dengan kegagalan. Model Proses Pengembangan Sistem adalah proses pengembangan sistem yang sangat formal dan seksama yang mendefinisikan seperangkat aktifitas, metode-metode, best practices, deliverables, dan automated tools yang digunakan oleh pengembang sistem dan project manager untuk pengembangan dan pemeliharaan sistem dan perangkat lunak.
Model proses pengembangan perangkat lunak menggambarkan urut-urutan kejadian yang diperlukan untuk membangun sesuatu produk perangkat lunak tertentu. Model proses pengembangan suatu perangkat lunak sangat diperlukan untuk mendefinisikan, menjelaskan, mengabstraksikan, memodifikasi, memperbaiki dan mendokumentasikan produk perangkat lunak, untuk menggunakan model proses yang baik harus memenuhi 3 ketentuan, yaitu :
1. Model harus memiliki ‘descriptive power’ Sebuah model harus dapat mendeskripsikan yang dikerjakan dalam tahapannya. Software yang baik biasanya dapat terlihat melalui proses pengembangannya, jika suatu model tidak dapat mendeskripsikan prosesnya maka tidak semua orang dapat mengerti cara kerja pengembangannya. Maka buat apa memakai sebuah model yang hanya beberapa orang dalam tim saja yang mengerti.
2. Model yang dibuat harus mudah dibaca orang lain
Suatu model digunakan agar semua orang dapat mengerti tahapannya sehingga mengerti apa yang dikerjakan agar menghasilkan perangkat lunak yang berkualitas.
3. Bisa dikomputerisasikan
Model pengembangan digunakan agar dapat membantu mengembangkan perangkat lunak yang berkualitas, jika salah satu tahapan tidak dapat dikomputerisasikan maka model tersebut hanya akan menambah masalah dalam pengembangan bukannya mengurangi masalah. Oleh karena itu suatu model harus dapat melalui tahap komputerisasi.
Pada prinsipnya semua model pengembangan perangkat lunak memiliki tahapan yang paling penting yaitu:
1. Identifikasi masalah
Bagaimana menyelesaikan masalah kalau masalahnya saja tidak mengerti?? Oleh karena itu suatu model harus memiliki tahap yang dapat mencari permasalahan kemudian memberi alternatif solusi.
2. Penyelesaian yang terintegrasi
Ketika permasalahan sudah diketahui, tinggal penyelesaian yang harus dilakukan. Penyelesaian tidak dapat dilakukan seketika itu juga dalam satu tahap, namun dalam beberapa langkah pengembangan yang terintegrasi (modularity).
3. Teknik pengembangan
Setelah permasalahan diselesaikan, perangkat lunak tidak hanya berhenti disitu saja. Proses pengembangan pasti dilakukan mengingat tidak ada satupun perangkat lunak yang sempurna dari kesalahan (bug) dan yang dapat dilakukan adalah dengan meminimalisasi kesalahan melalui pengembangan dan evaluasi.
Beberapa tahap dalam System Development Life Cycle adalah
1. System Initiation
Menentukan perencanaan awal untuk menentukan lingkup, tujuan, jadwal dan anggaran proyek yang diperlukan untuk memecahkan masalah atau kesempatan yang direpresentasikan oleh proyek.
2. System Analysis
Merekomendasikan perbaikan dan menspesifikasikan persyaratan dan prioritas bisnis untuk solusi yang akan ditawarkan.
3. System Design
Menghasilkan rancangan spesifikasi sebagai solusi dari requirement yang diberikan sebelumnya.
4. System Implementation
Menghasilkan solusi perangkat keras dan perangkat lunak untuk permasalahan bisnis berdasarkan spesifikasi.
Software Development Life Cycle dalam pengembangan digunakan untuk membantu memonitor dan mengontrol progress dan karena biaya kebanyakan sistem mengalami over time dan over budget. Tanpa metodologi, tidak ada aturan-aturan yang didefinisikan untuk “how do we procceed?” terutama berguna untuk pengembang sistem pemula.
Metodologi digunakan untuk memastikan bahwa tidak ada aktivitas yang terlupakan dan kebanyakan yang akan berakhir dengan kegagalan. Model Proses Pengembangan Sistem adalah proses pengembangan sistem yang sangat formal dan seksama yang mendefinisikan seperangkat aktifitas, metode-metode, best practices, deliverables, dan automated tools yang digunakan oleh pengembang sistem dan project manager untuk pengembangan dan pemeliharaan sistem dan perangkat lunak.
Model proses pengembangan perangkat lunak menggambarkan urut-urutan kejadian yang diperlukan untuk membangun sesuatu produk perangkat lunak tertentu. Model proses pengembangan suatu perangkat lunak sangat diperlukan untuk mendefinisikan, menjelaskan, mengabstraksikan, memodifikasi, memperbaiki dan mendokumentasikan produk perangkat lunak, untuk menggunakan model proses yang baik harus memenuhi 3 ketentuan, yaitu :
1. Model harus memiliki ‘descriptive power’ Sebuah model harus dapat mendeskripsikan yang dikerjakan dalam tahapannya. Software yang baik biasanya dapat terlihat melalui proses pengembangannya, jika suatu model tidak dapat mendeskripsikan prosesnya maka tidak semua orang dapat mengerti cara kerja pengembangannya. Maka buat apa memakai sebuah model yang hanya beberapa orang dalam tim saja yang mengerti.
2. Model yang dibuat harus mudah dibaca orang lain
Suatu model digunakan agar semua orang dapat mengerti tahapannya sehingga mengerti apa yang dikerjakan agar menghasilkan perangkat lunak yang berkualitas.
3. Bisa dikomputerisasikan
Model pengembangan digunakan agar dapat membantu mengembangkan perangkat lunak yang berkualitas, jika salah satu tahapan tidak dapat dikomputerisasikan maka model tersebut hanya akan menambah masalah dalam pengembangan bukannya mengurangi masalah. Oleh karena itu suatu model harus dapat melalui tahap komputerisasi.
Pada prinsipnya semua model pengembangan perangkat lunak memiliki tahapan yang paling penting yaitu:
1. Identifikasi masalah
Bagaimana menyelesaikan masalah kalau masalahnya saja tidak mengerti?? Oleh karena itu suatu model harus memiliki tahap yang dapat mencari permasalahan kemudian memberi alternatif solusi.
2. Penyelesaian yang terintegrasi
Ketika permasalahan sudah diketahui, tinggal penyelesaian yang harus dilakukan. Penyelesaian tidak dapat dilakukan seketika itu juga dalam satu tahap, namun dalam beberapa langkah pengembangan yang terintegrasi (modularity).
3. Teknik pengembangan
Setelah permasalahan diselesaikan, perangkat lunak tidak hanya berhenti disitu saja. Proses pengembangan pasti dilakukan mengingat tidak ada satupun perangkat lunak yang sempurna dari kesalahan (bug) dan yang dapat dilakukan adalah dengan meminimalisasi kesalahan melalui pengembangan dan evaluasi.
Beberapa tahap dalam System Development Life Cycle adalah
1. System Initiation
Menentukan perencanaan awal untuk menentukan lingkup, tujuan, jadwal dan anggaran proyek yang diperlukan untuk memecahkan masalah atau kesempatan yang direpresentasikan oleh proyek.
2. System Analysis
Merekomendasikan perbaikan dan menspesifikasikan persyaratan dan prioritas bisnis untuk solusi yang akan ditawarkan.
3. System Design
Menghasilkan rancangan spesifikasi sebagai solusi dari requirement yang diberikan sebelumnya.
4. System Implementation
Menghasilkan solusi perangkat keras dan perangkat lunak untuk permasalahan bisnis berdasarkan spesifikasi.
Rabu, 10 Desember 2008
Struktur Data: Linked List
Linked adalah koleksi data heterogen dengan sifat setiap node (kecuali node terakhir) mempunyai penerus dan setiap node (kecuali node pertama) mempunyai pendahulu. Salah satu penggunaan pointer adalah untuk membuat linked list atau senarai berantai.
Linked list (senarai berantai) sendiri dapat diartikan sebagai sekumpulan node yang saling berhubungan (berantai) dengan bantuan pointer.
Deklarasi pointer dan simpul
type Simpul = ^Data;
Data = record
Info : char;
Berikut: simpul;
End;
Var Elemen : char;
Awal, Akhir, Baru: simpul;
Menambah di belakang
procedure Tambah_Belakang (var Awal, Akhir :simpul; elemen: char)
var Baru: simpul;
Begin
New(baru);
Baru^.info:=Elemen;
If Awal = nil then
Awal:=baru;
Else
Akhir^.berikut:=Baru;
Akhir:=baru;
Akhir^:=baru;
Akhir^.berikut:=nil
End;
Menambah di depan
procedure Tambah_Depan (var Awal, Akhir :simpul; elemen: char)
var Baru: simpul;
Begin
New(baru);
Baru^.info:=Elemen;
If Awal = nil then
Akhir:=baru;
Else
Baru^.berikut:=Awal;
Awal:=baru;
End;
Menambah di tengah
procedure Tambah_Tengah (var Awal, Akhir :simpul; elemen: char)
var Baru, Bantu: simpul;
Begin
New(baru);
Baru^.info := Elemen;
If Awal = nil then
begin
Awal:=baru;
Akhir:=baru;
End
Else
Begin
Bantu:=Awal;
While Elemen > Baru^.berikut^.info do
Bantu:=bantu^.berikut;
Baru^:=berikut:=bantu^.berikut;
Bantu^.berikut:=baru;
End;
End;
Menghapus Simpul
procedure Hapus_Simpul (var Awal, Akhir :simpul; elemen: char)
var Hapus, Bantu: simpul;
Begin
If Awal = nil then
Writeln(‘Senarai masih kosong’)
Else
If awal^.info = elemen then
Begin
Hapus := awal;
Awal := hapus^.berikut;
Dispose(hapus)
End
Else
Begin
Bantu := awal;
While (elemen <> bantu^.info) and (bantu^.berikut<>nil) do
Bantu:=bantu^.berikut;
Hapus:=bantu^.berikut;
If hapus <> akhir then
Bantu^.berikut
Else
Begin
Akhir:= bantu;
Akhir^.berikut:=nil
End;
Dispose(hapus)
End
Else
Writeln(‘Simpul yang akan dihapus tidak ada’)
end
End;
Linked list (senarai berantai) sendiri dapat diartikan sebagai sekumpulan node yang saling berhubungan (berantai) dengan bantuan pointer.
Deklarasi pointer dan simpul
type Simpul = ^Data;
Data = record
Info : char;
Berikut: simpul;
End;
Var Elemen : char;
Awal, Akhir, Baru: simpul;
Menambah di belakang
procedure Tambah_Belakang (var Awal, Akhir :simpul; elemen: char)
var Baru: simpul;
Begin
New(baru);
Baru^.info:=Elemen;
If Awal = nil then
Awal:=baru;
Else
Akhir^.berikut:=Baru;
Akhir:=baru;
Akhir^:=baru;
Akhir^.berikut:=nil
End;
Menambah di depan
procedure Tambah_Depan (var Awal, Akhir :simpul; elemen: char)
var Baru: simpul;
Begin
New(baru);
Baru^.info:=Elemen;
If Awal = nil then
Akhir:=baru;
Else
Baru^.berikut:=Awal;
Awal:=baru;
End;
Menambah di tengah
procedure Tambah_Tengah (var Awal, Akhir :simpul; elemen: char)
var Baru, Bantu: simpul;
Begin
New(baru);
Baru^.info := Elemen;
If Awal = nil then
begin
Awal:=baru;
Akhir:=baru;
End
Else
Begin
Bantu:=Awal;
While Elemen > Baru^.berikut^.info do
Bantu:=bantu^.berikut;
Baru^:=berikut:=bantu^.berikut;
Bantu^.berikut:=baru;
End;
End;
Menghapus Simpul
procedure Hapus_Simpul (var Awal, Akhir :simpul; elemen: char)
var Hapus, Bantu: simpul;
Begin
If Awal = nil then
Writeln(‘Senarai masih kosong’)
Else
If awal^.info = elemen then
Begin
Hapus := awal;
Awal := hapus^.berikut;
Dispose(hapus)
End
Else
Begin
Bantu := awal;
While (elemen <> bantu^.info) and (bantu^.berikut<>nil) do
Bantu:=bantu^.berikut;
Hapus:=bantu^.berikut;
If hapus <> akhir then
Bantu^.berikut
Else
Begin
Akhir:= bantu;
Akhir^.berikut:=nil
End;
Dispose(hapus)
End
Else
Writeln(‘Simpul yang akan dihapus tidak ada’)
end
End;
Selasa, 18 November 2008
Struktur Data: Queue
Queue (Antrian) adalah Suatu kumpulan data dimana penambahan elemen hanya bisa dilakukan pada suatu ujung (rear) dan pengambilan elemen dilakukan lewat ujung yang lain (front).
Tumpukan menggunakan metode yang disebut FIFO (First In First Out) yaitu Masuk pertama keluar pertama.
Pendeklarasian Antrian
Const MaxElemen = 100;
Type Antri = array[1.. MaxElemen] of char;
Var Antrian : Antri;
Depan, Belakang: Integer;
Operasi Penambahan Elemen
Procedure TAMBAH(var Q: Antri; X: char);
Begin
If Belakang := Max_Elemen then
Belakang := 1
Else
Belakang := Belakang + 1;
If Depan = Belakang then
Writeln(’ANTRIAN PENUH’)
Else
Q[Belakang];
end;
Operasi Penghapusan Elemen
Sebelumnya buat Fungsi untuk mencek apakah antrian dalam keadaan kosong atau terisi
Procedure KOSONG(Q : Antri): Boolean;
Begin
Kosong := (Depan = Belakang)
End;
Procedure HAPUS(Var Q:Antri): char;
Begin
If KOSONG(Q) then
Writeln (‘ANTRIAN KOSONG’)
Else
Begin
HAPUS := Q(Depan);
If Depan := Max_Elemen then
Depan := 1
Else
Depan := Depan + 1;
End;
End;
Contoh Pemakaian Program Antrian
program ILUSTRASI_ANTRIAN;
uses wincrt;
const Max_Elemen = 10;
Type Antri = Array[1..Max_Elemen] of char;
var Antrian : Antri;
Depan, Belakang, Pilih : integer;
Elemen : char;
procedure KOTAK;
var I : integer;
begin
gotoxy(20,15);
for i := 1 to Max_Elemen*4 + 1 do write ('');
gotoxy(20,16);
for i := 1 to max_elemen do write('');
for i := 1 to max_elemen*4 + 1 do
write(' ');
gotoxy(8,16); write('<----KELUAR');
gotoxy(22+Max_Elemen*4+1,16);
writeln('<----MASUK');
end;
procedure LETAKKAN(X:char; R:integer);
begin
gotoxy(18+4*R,16);
write(X);
end;
function KOSONG(Q:Antri):Boolean;
begin
Kosong := (Depan=Belakang);
end;
procedure TAMBAH(var antrian:antri; x:char);
begin
if belakang = max_elemen then belakang := 1
else belakang := belakang + 1;
if not(KOSONG(Antrian)) then
begin
Antrian[Belakang]:=X;
LETAKKAN(X,Belakang)
end
else
begin
gotoxy(40,9);
write('ANTRIAN SUDAH PENUH');
repeat
until keypressed;
gotoxy(40,9);
write(' ':30);
Belakang:= Belakang-1;
if belakang = 0 then
belakang:= max_elemen;
end;
end;
function HAPUS(var antrian:antri): char;
begin
if depan = max_elemen then
depan := 1
else
begin
depan:=depan+1;
HAPUS:=antrian[depan];
end;
end;
{PROGRAM UTAMA}
begin
clrscr;
KOTAK;
depan:=0; belakang:=0;
repeat
for pilih := 5 to 9 do
begin
gotoxy(40,pilih);
write(' ':39);
end;
gotoxy(1,1);
writeln('DAFTAR MENU ANTRIAN: ');
writeln('-------------------- ');
writeln;
writeln('1. Menambah Elemen Baru');
writeln('2. Menghapus Elemen');
writeln('3. S E L E S A I');
writeln;
writeln;
writeln('PILIH SALAH SATU');
repeat
gotoxy(22,9);writeln(' ');
gotoxy(22,9);readln(pilih);
until (pilih >= 1) and (pilih <= 3);
case pilih of
1 : begin
gotoxy(40,5);
writeln('MENAMBAH ELEMEN');
gotoxy(40,6);
writeln('---------------');
gotoxy(40,8);
write('ISIKAN ELEMENNYA: ');
readln(Elemen);
TAMBAH(Antrian,Elemen);
end;
2 : Begin
if not (KOSONG(antrian)) then
begin
Elemen:=HAPUS(antrian);
LETAKKAN(' ',Depan)
end
else
begin
gotoxy(30,9);
writeln('ANTRIAN KOSONG');
elemen:=readkey;
gotoxy(30,9); write(' ':30);
end
end
end
until pilih =3
end.
Tumpukan menggunakan metode yang disebut FIFO (First In First Out) yaitu Masuk pertama keluar pertama.
Pendeklarasian Antrian
Const MaxElemen = 100;
Type Antri = array[1.. MaxElemen] of char;
Var Antrian : Antri;
Depan, Belakang: Integer;
Operasi Penambahan Elemen
Procedure TAMBAH(var Q: Antri; X: char);
Begin
If Belakang := Max_Elemen then
Belakang := 1
Else
Belakang := Belakang + 1;
If Depan = Belakang then
Writeln(’ANTRIAN PENUH’)
Else
Q[Belakang];
end;
Operasi Penghapusan Elemen
Sebelumnya buat Fungsi untuk mencek apakah antrian dalam keadaan kosong atau terisi
Procedure KOSONG(Q : Antri): Boolean;
Begin
Kosong := (Depan = Belakang)
End;
Procedure HAPUS(Var Q:Antri): char;
Begin
If KOSONG(Q) then
Writeln (‘ANTRIAN KOSONG’)
Else
Begin
HAPUS := Q(Depan);
If Depan := Max_Elemen then
Depan := 1
Else
Depan := Depan + 1;
End;
End;
Contoh Pemakaian Program Antrian
program ILUSTRASI_ANTRIAN;
uses wincrt;
const Max_Elemen = 10;
Type Antri = Array[1..Max_Elemen] of char;
var Antrian : Antri;
Depan, Belakang, Pilih : integer;
Elemen : char;
procedure KOTAK;
var I : integer;
begin
gotoxy(20,15);
for i := 1 to Max_Elemen*4 + 1 do write ('');
gotoxy(20,16);
for i := 1 to max_elemen do write('');
for i := 1 to max_elemen*4 + 1 do
write(' ');
gotoxy(8,16); write('<----KELUAR');
gotoxy(22+Max_Elemen*4+1,16);
writeln('<----MASUK');
end;
procedure LETAKKAN(X:char; R:integer);
begin
gotoxy(18+4*R,16);
write(X);
end;
function KOSONG(Q:Antri):Boolean;
begin
Kosong := (Depan=Belakang);
end;
procedure TAMBAH(var antrian:antri; x:char);
begin
if belakang = max_elemen then belakang := 1
else belakang := belakang + 1;
if not(KOSONG(Antrian)) then
begin
Antrian[Belakang]:=X;
LETAKKAN(X,Belakang)
end
else
begin
gotoxy(40,9);
write('ANTRIAN SUDAH PENUH');
repeat
until keypressed;
gotoxy(40,9);
write(' ':30);
Belakang:= Belakang-1;
if belakang = 0 then
belakang:= max_elemen;
end;
end;
function HAPUS(var antrian:antri): char;
begin
if depan = max_elemen then
depan := 1
else
begin
depan:=depan+1;
HAPUS:=antrian[depan];
end;
end;
{PROGRAM UTAMA}
begin
clrscr;
KOTAK;
depan:=0; belakang:=0;
repeat
for pilih := 5 to 9 do
begin
gotoxy(40,pilih);
write(' ':39);
end;
gotoxy(1,1);
writeln('DAFTAR MENU ANTRIAN: ');
writeln('-------------------- ');
writeln;
writeln('1. Menambah Elemen Baru');
writeln('2. Menghapus Elemen');
writeln('3. S E L E S A I');
writeln;
writeln;
writeln('PILIH SALAH SATU');
repeat
gotoxy(22,9);writeln(' ');
gotoxy(22,9);readln(pilih);
until (pilih >= 1) and (pilih <= 3);
case pilih of
1 : begin
gotoxy(40,5);
writeln('MENAMBAH ELEMEN');
gotoxy(40,6);
writeln('---------------');
gotoxy(40,8);
write('ISIKAN ELEMENNYA: ');
readln(Elemen);
TAMBAH(Antrian,Elemen);
end;
2 : Begin
if not (KOSONG(antrian)) then
begin
Elemen:=HAPUS(antrian);
LETAKKAN(' ',Depan)
end
else
begin
gotoxy(30,9);
writeln('ANTRIAN KOSONG');
elemen:=readkey;
gotoxy(30,9); write(' ':30);
end
end
end
until pilih =3
end.
Struktur Data: Stack
Stack (Tumpukan) adalah Suatu kumpulan data yang seolah-olah ada data yang diletakkan di atas data yang lain.
Suatu hal yang perlu kita ingat adalah bahwa kita bisa menambah data (PUSH)dan mengambil data (POP) melalui ujung yang sama, yang disebut sebagai ujung atas tumpukan (Top of Stack).
Tumpukan menggunakan metode yang disebut LIFO (Last In First Out) yaitu Masuk terakhir keluar pertama.
Pendeklarasian Tumpukan
Const MaxElemen = 225;
Type Tumpukan = record
Isi: array[1.. MaxElemen] of integer;
Atas: 0.. MaxElemen;
End;
Var T: Tumpukan;
Operasi PUSH
Procedure PUSH(var T: Tumpukan; X: integer);
Begin
T.Atas:= T.Atas+1;
T.Isi[T.Atas]:=X;
end;
prosedure di atas tampaknya sudah mencukupi, tapi jika T.Atas sama dengan MaxElemen dan kita akan mem-push lagi, maka akan terjadi overflow, sehingga prosedur di atas perlu diubah menjadi:
Procedure PUSH(var T: Tumpukan; X: integer);
Begin
If T.Atas = MaxElemen then
Writeln(’TUMPUKAN SUDAH PENUH’);
Else
begin
T.Atas:= T.Atas+1;
T.Isi[T.Atas]:=X;
End;
end;
Operasi POP
Procedure POP(Var T: Tumpukan);
Begin
T.Atas := T.Atas-1
End;
Timbul pertanyaan seandainya tumpukan sudah kosong, lalu apa yang akan di-pop?, dengan demikian procedure di atas perlu di tambah testing untuk men-cek kosong tidaknya suatu tumpukan.
Procedure POP(Var T: Tumpukan);
Begin
If T.Atas = 0 then
Writeln (’TUMPUKAN SUDAH KOSONG’)
Else
T.Atas := T.Atas-1
End;
Contoh Pemakaian Program Tumpukan
Program Balik_Kalimat;
uses wincrt;
const Elemen = 255; {batas maximum karakter}
type S255 = string[Elemen];
Tumpukan = record
Isi : S255;
Atas: 0..Elemen
end;
var T : Tumpukan; {nama tumpukan}
I : integer; {pencacah}
Kalimat :S255; {kalimat yang dibalik}
procedure awalan (var T:Tumpukan);
{prosedur inisialisasi tumpukan}
Begin
T.Atas:=0
end;
procedure PUSH(var T:Tumpukan; X:Char);
{prosedur untuk memasukkan elemen ke dalam tumpukan}
begin
T.Atas:=T.Atas+1;
T.Isi[T.Atas]:=X
end;
function POP(var T:Tumpukan):char;
{fungsi untuk mengambil elemen dari tumpukan}
begin
POP:=T.Isi[T.Atas];
T.Atas:=T.Atas-1
end;
{program utama}
begin
clrscr;
awalan(T);
write('ISIKAN SEMBARANG KALIMAT: ');
readln(kalimat);
clrscr;
writeln('KALIMAT ASLI: ',kalimat);
writeln;
writeln('SETELAH DIBALIK: ');
for i := 1 to length(kalimat) do
PUSH(T,Kalimat[I]);
for i := 1 to length(kalimat) do
write(POP(T));
end.
Suatu hal yang perlu kita ingat adalah bahwa kita bisa menambah data (PUSH)dan mengambil data (POP) melalui ujung yang sama, yang disebut sebagai ujung atas tumpukan (Top of Stack).
Tumpukan menggunakan metode yang disebut LIFO (Last In First Out) yaitu Masuk terakhir keluar pertama.
Pendeklarasian Tumpukan
Const MaxElemen = 225;
Type Tumpukan = record
Isi: array[1.. MaxElemen] of integer;
Atas: 0.. MaxElemen;
End;
Var T: Tumpukan;
Operasi PUSH
Procedure PUSH(var T: Tumpukan; X: integer);
Begin
T.Atas:= T.Atas+1;
T.Isi[T.Atas]:=X;
end;
prosedure di atas tampaknya sudah mencukupi, tapi jika T.Atas sama dengan MaxElemen dan kita akan mem-push lagi, maka akan terjadi overflow, sehingga prosedur di atas perlu diubah menjadi:
Procedure PUSH(var T: Tumpukan; X: integer);
Begin
If T.Atas = MaxElemen then
Writeln(’TUMPUKAN SUDAH PENUH’);
Else
begin
T.Atas:= T.Atas+1;
T.Isi[T.Atas]:=X;
End;
end;
Operasi POP
Procedure POP(Var T: Tumpukan);
Begin
T.Atas := T.Atas-1
End;
Timbul pertanyaan seandainya tumpukan sudah kosong, lalu apa yang akan di-pop?, dengan demikian procedure di atas perlu di tambah testing untuk men-cek kosong tidaknya suatu tumpukan.
Procedure POP(Var T: Tumpukan);
Begin
If T.Atas = 0 then
Writeln (’TUMPUKAN SUDAH KOSONG’)
Else
T.Atas := T.Atas-1
End;
Contoh Pemakaian Program Tumpukan
Program Balik_Kalimat;
uses wincrt;
const Elemen = 255; {batas maximum karakter}
type S255 = string[Elemen];
Tumpukan = record
Isi : S255;
Atas: 0..Elemen
end;
var T : Tumpukan; {nama tumpukan}
I : integer; {pencacah}
Kalimat :S255; {kalimat yang dibalik}
procedure awalan (var T:Tumpukan);
{prosedur inisialisasi tumpukan}
Begin
T.Atas:=0
end;
procedure PUSH(var T:Tumpukan; X:Char);
{prosedur untuk memasukkan elemen ke dalam tumpukan}
begin
T.Atas:=T.Atas+1;
T.Isi[T.Atas]:=X
end;
function POP(var T:Tumpukan):char;
{fungsi untuk mengambil elemen dari tumpukan}
begin
POP:=T.Isi[T.Atas];
T.Atas:=T.Atas-1
end;
{program utama}
begin
clrscr;
awalan(T);
write('ISIKAN SEMBARANG KALIMAT: ');
readln(kalimat);
clrscr;
writeln('KALIMAT ASLI: ',kalimat);
writeln;
writeln('SETELAH DIBALIK: ');
for i := 1 to length(kalimat) do
PUSH(T,Kalimat[I]);
for i := 1 to length(kalimat) do
write(POP(T));
end.
Langganan:
Postingan (Atom)
