Tugas X Lanjutan Shorting

Soal :
  1. Jelaskan apa yang dimaksud dengan shell sort !
  2. Buatlah suatu program tentang merge sort !
  3. Sebutkan kelebihan dan kelemahan sort !
  4. Sebutkan metode-metode teknik sort !
  5. Siapakah yang pertama kali menemukan algoritma merge sort ?
Pengertian Shell Sort (Metode Shell) 
Metode ini disebut juga dengan metode pertambahan menurun (diminishing increment). Metode ini dikembangkan oleh Donald L. Shell pada tahun 1959, sehingga sering disebut dengan Metode Shell Sort. Metode ini mengurutkan data dengan cara membandingkan suatu data dengan data lain yang memiliki jarak tertentu, kemudian dilakukan penukaran bila diperlukan. Proses pengurutan dengan metode Shell dapat dijelaskan sebagai berikut : 
Pertama-tama adalah menentukan jarak mula-mula dari data yang akan dibandingkan, yaitu N / 2. Data pertama dibandingkan dengan data dengan jarak N / 2. Apabila data pertama lebih besar dari data ke N / 2 tersebut maka kedua data tersebut ditukar. Kemudian data kedua dibandingkan dengan jarak yang sama yaitu N / 2. Demikian seterusnya sampai seluruh data dibandingkan sehingga semua data ke-j selalu lebih kecil daripada data ke-(j + N / 2).
Pada proses berikutnya, digunakan jarak (N / 2) / 2 atau N / 4.Data pertama dibandingkan dengan data dengan jarak N / 4. Apabila data pertama lebih besar dari data ke N / 4 tersebut maka kedua data tersebut ditukar. Kemudian data kedua dibandingkan dengan jarak yang sama yaitu N / 4. Demikianlah seterusnya hingga seluruh data dibandingkan sehingga semua data ke-j lebih kecil daripada data ke- (j + N /4). Pada proses berikutnya, digunakan jarak (N / 4) / 2 atau N / 8. Demikian seterusnya sampai jarak yang digunakan adalah 1.

Contoh program merge sort dalam pascal
type INTARRAY = array[1..100000] of integer;
procedure gen_array(var A:INTARRAY; N:integer);
var i:integer;
begin
for i:=1 to N do A[i]:=Random(10*N);
end;
{copia l’array X in Y}
procedure copy_array(var X, Y:INTARRAY; n:integer);
var i:integer;
begin
for i := 0 to N do Y[i] := X[i];
end;
Function min(a,b:integer):integer;
begin if a
 else min := b;
end;



0 komentar:

Tugas IX TREE

Soal
1)      Jelaskan apa yang di maksud dengan tree dan binary tree
2) Uraikan istilah-istilah umum dalam tree
3) Buatlah 1 contoh program tree
4) Sebutkan pengertian AVL tree
5) Sebutkan beberapa jenis tree yang memiliki sifat khusus
Pengertian tree dan binary tree
a)      Binery tree
Pohon biner adalah pohon dengan syarat bahwa tiap node hanya memiliki boleh maksimal dua subtree dan kedua subtree tersebut harus terpisah. Sesuai dengan definisi tersebut, maka tiap node dalam binary tree hanya boleh memiliki paling banyak dua anak/child.
Node pada Binary Tree
Jumlah maksimum node pada setiap tingkat adalah 2n, Node pada binary tree maksimumnya berjumlah 2n-1.

b)      Pengertian tree
            Kumpulan node yang saling terhubung satu sama lain dalam suatu  kesatuan yang membentuk layakya struktur sebuah pohon. Struktur pohon adalah suatu  cara merepresentasikan suatu struktur hirarki (one-to-many) secara grafis yang mirip sebuah pohon, walaupun pohon tersebut  hanya tampak sebagai kumpulan node-node  dari atas ke bawah. Suatu struktur data yang tidak linier yang menggambarkan  hubungan yang hirarkis (one-to-many) dan tidak linier antara lemen-elemennya.
Deklarasi Pohon

            Jika kita memperhatikan setiap simpul dalam pohon biner, kita bisa menyusun  struktur data yang tepat dari simpul-simpul tersebut. Kita dapat melihat bahwa dalam  setiap simpul selalu berisi dua buah pointer untuk menunjuk ke cabang kiri dan cabang  kanan, dan informasi yang akan disimpan dalamsimpul tersebut.

0 komentar:

Tugas VIII Model Shorting

Soal
  1. Buatlah 1 contoh program insertion sort.
  2. Tuliskan pengertian sorting menurut pendapat anda masing-masing.
  3. Buatlah contoh program bouble sort dalam bahasa pascal
  4. Tuliskan algoritma quick rekursif.
  5. Sebutkan dan jelaskan metode-metode sorting.
Contoh Program Insertion Sort.
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <iomanip>
#ifdef __cplusplus__
#include <cstdlib>
#else
#include <stdlib.h>
#endif

using namespace std;

int main()
{
int x[5];
int i;
int temp;
int minindex;
int j;

if (system("CLS")) system("clear");
cout << " >> Program Selection Sort << \n" << endl;
cout << "masukkan nilai x :\n";
for (i = 0; i<5; i++)
{
cout << "x[" << i << "] = "; cin >> x[i];
}
cout << "\n Data sebelum di sort :";
for (i = 0; i<5; i++)
{
cout << setw(4) << x[i];
}
for (i = 0; i<5 - 1; i++) //perulangan iterasi
        {
                minindex = i;
                for (j = i + 1; j<5; j++) //perulangan membandingkan data
                {
                        if (x[minindex]>x[j])
                        {
                                minindex = j;
                        }
                }
                temp = x[i];
                x[i] = x[minindex];
                x[minindex] = temp;
        }
        cout << "\n Data setelah di sort :";
        for (i = 0; i<5; i++)
        {
                cout << setw(4) << x[i];
        }
        getchar();
        cout << endl;
        system("pause");
}





                

0 komentar:

Tugas VII Searching

SOAL
  1. Apa kelebihan dari Searching ?
  2. Sebutkan jenis searching dalam algoritma !
  3. Apa yang dimaksud dengan searching dan tujuannya berikan 1 contoh !
  4. Berikan contoh program pencarian binary !
  5. Apa pengertian dari searching ?
Kelebihan Searching
Kelebihannya yaitu tidak perlu membandingkan data yang dicari dengan seluruh data array yang ada, cukup melalui titik tengah kemudian kita bisa menentukan ke mana selanjutnya mencari data yang ingin dicari.
Jenis searching dalam algoritma
a)      Sequential search
Disebut juga sebagai metode pencarian urut adalah metode pencarian yang paling mudah. Adalah suatu teknik pencarian data dalam array ( 1 dimensi ) yang akan menelusuri semua elemen-elemen array dari awal sampai akhir, dimana data-data tidak perlu diurutkan terlebih dahulu.
Kemungkinan terbaik (best case) adalah jika data yang dicari terletak di indeks array terdepan (elemen array pertama) sehingga waktu yang dibutuhkan untuk pencarian data sangat sebentar (minimal). Sedangkan kemungkinan terburuk (worst case) adalah jika data yang dicari terletak di indeks array terakhir (elemen array terakhir) sehingga waktu yang dibutuhkan untuk pencarian data sangat lama (maksimal).
Sequential search memiliki proses sebagai berikut:
q    Tentukan banyaknya data yang akan di olah, misal banyak data adalah N.
q   Tentukan data apa yang akan dicari, misal data yang akan dicari adalah C.
q   Deklarasikan sebuah counter untuk menghitung banyak data yang ditemukan, missal counternya adalah K.
q   Inisialisasikan K =0
q  Lakukanlah perulangan sebanyak N kali
q   Dalam tiap proses perulangan tersebut periksalah apakah data yang sedang diolah sama dengan data yang dicari.
q   Jika ternyata sama K=K+1
q   Jika tidak, lanjutkan proses perulangan .
q   Setelah proses perulangan berhenti, periksalah nilai K.
q   Jika nilai K lebih dari 0, artinya data yang dicari ada dalam data /array dan tampilkan   nilai K ke layer sebagai jumlah data yang ditemukan.
q  Jika nilai K=0, artinya data yang dicari tidak ditemukan dalam data / array dan tampilkan ke layar bahwa data tidak ditemukan
q  Proses selesai.
Dapat disimpulkan bahwa sequential search, akan mencari data dengan cara membandingkannya satu-persatu dengan data yang ada. Prosesnya tentu saja akan singkat jika data yang diolah sedikit, dan akan lama jika data yang diolah banyak. Disarankan proses ini digunakan pada jumlah data yang sedikit saja.
b)      Binary Search.
            Pencarian binary search hanya dapat dilakukan pada kumpulan data yang sudah diurutkan terlebih dahulu. Jika terdapat N buah data yang akan diolah, data yang dicari akan dibandingkan dengan data ke-N jika data ke-N lebih besar dari data yang dicari maka akan dilakukan pembagian data menjadi dua bagian. Kemudian ujung data pada setiap bagian dibandingkan lagi dengan nilai yang akan dicari.








0 komentar:

Tugas VI ilustrasi dari kasus antrian

Soal
Berikan gambaran/ilustrasi dari kasus antrian berikut !
1.      Diketahui suatu antrian / queue dengan max= 6.
2.      Lakukan enqueu 4 elemen ke dalam antrian, dimanakah posisi Head dan Tail ?
3.      Kemudian lakukan dequeue 2 elemen dari antrian . Maka dimana posisi Head dan Tail ?
4.      Dari keadaan diatas, bagaimanakah kondisi IsFull dan IsEmpty nya ?
QUEUE
Secara harfiah queue dapat diartikan sebagai antrean. Queue merupakan kumpulan data dengan penambahan data hanya dapat dilakukan melalui satu sisi, yaitu belakang (tail) dan penghapusan data hanya melalui sisi depan (head). Queue bersifat FIFO(First In First Out), yaitu data yang pertama masuk akan keluar terlebih dahulu dan data yang terakhir masuk akan keluar terakhir.
Elemen yang pertama kali masuk kedalam queue disebut elemen depan (front/head of queue), sedangkan elemen yang terakhir kali masukk queue disebut elemen belakang (rear/tail of queue).
Aturan penambahan dan penghapusan elemen pada queue, yaitu pada penambahan elemen selalu di lakukan melalui salah satu ujung, menempati posisi di belakang elemen-elemen yang sudah masuks ebelumnya atau menjadi elemen paling belakang. Sedangkan penghapusan elemen dilakukan di ujung yang berbeda, yaitu pada posisi elemen yang masuk paling awal atau elemen terdepan.
Contoh Program
PROGRAM ANTRIAN_ARRAY_STATIS;
       
      USES winCRT;
         CONST
            MAX_QUEUE = 6;
         TYPE
            QUEUE = ARRAY[1..MAX_QUEUE] OF CHAR;
       
      VAR
         ANTRIAN      : QUEUE;
         I  : INTEGER;
         DEPAN        : INTEGER;
BELAKANG     : INTEGER;
         PILIH        : CHAR;
       ELEMEN       : CHAR;
PROCEDURE CLEAR;
      VAR
         I : INTEGER;
            BEGIN
               FOR I := 1 TO 10 DO
               BEGIN
                  GOTOXY(62 - 4 * I, 19);WRITELN(' ');
         END;
      END; {*Procedure HUPUS*}
       
      {****************************************************************
         * Fungsi untuk menge-cek keadaan antrian ( Penuh atau Kosong ) *
         ****************************************************************}
{***************************************
 * Procedure menampilkan antrian data. *
 ***************************************}
   PROCEDURE TAMPILKAN( X :INTEGER);
      VAR
         I : INTEGER;
               BEGIN
         FOR I := 1 TO X DO
         BEGIN
            GOTOXY(18 + 4 * I, 19);
            WRITE(ANTRIAN[I]);
           
         END;
      END; {*Procedure TAMPILAKAN*}




0 komentar:

TUGAS V QUEUE(Antrian)

SOAL
1)      Jelaskan perbedaan antara queue dengan stack.
2)      Buatlah contoh program dari Queue.
3)      Sebutkan contoh Queue yang Anda terapkan dalam kehidupan sehari – hari.
4)      Jelaskan konsep dari operasi – operasi Queue.
 Apa saja kondisi yang harus diperhatikan dalam operasi – operasi Queue.

Jawab :
PERBEDAAN STACK DAN QUEUE
QUEUE
Secara harfiah queue dapat diartikan sebagai antrean. Queue merupakan kumpulan data dengan penambahan data hanya dapat dilakukan melalui satu sisi, yaitu belakang (tail) dan penghapusan data hanya melalui sisi depan (head). Queue bersifat FIFO(First In First Out), yaitu data yang pertama masuk akan keluar terlebih dahulu dan data yang terakhir masuk akan keluar terakhir.
Elemen yang pertama kali masuk kedalam queue disebut elemen depan (front/head of queue), sedangkan elemen yang terakhir kali masukk queue disebut elemen belakang (rear/tail of queue).
Aturan penambahan dan penghapusan elemen pada queue, yaitu pada penambahan elemen selalu di lakukan melalui salah satu ujung, menempati posisi di belakang elemen-elemen yang sudah masuks ebelumnya atau menjadi elemen paling belakang. Sedangkan penghapusan elemen dilakukan di ujung yang berbeda, yaitu pada posisi elemen yang masuk paling awal atau elemen terdepan.
STACK
Stack adalah sebuah abstract data type (ADT) yang berisi koleksi data item yang hanya dapat diakses pada akhir bagian stack tersebut, biasa disebut top. Hal ini berarti bahwa didalam sebuah stack, kita dapat memasukkan (insert) dan menghapus (delete) item hanya dari posisi top tersebut. Item terakhir yang kita masukkan kedalam sebuah stack adalah item yang paling pertama harus kita keluarkan. Itulah mengapa stack disebut sebagai Last-In-First-Out (LIFO) data structure. Kalimat sederhana yang dapat menjelaskan konsep tersebut adalah kalimat “Masuk belakangan keluar duluan”.
Didalam kehidupan sehari-hari, terdapat beberapa contoh penerapan algoritma dari data structure ini, seperti dalam membuat suatu tumpukan piring, tumpukan buku, tumpukan koin, tusuk sate, atau bahkan cara memakai gelang. Salah satu contoh, dalam membuat suatu tumpukan piring kita pasti menempatkan piring pertama berada pada posisi paling  bawah, dan piring terakhir berada pada posisi paling atas. Nah, ketika kita hendak mencuci atau mengambil piring tersebut, maka kita akan mengambil piring pada tumpukkan atas terlebih dahulu dan seterusnya hingga mencapai piring paling bawah. Hal tersebut juga serupa pada tumpukan buku, koin, tusuk sate dan cara memakai gelang. Saya rasa ilustrasi tersebut cukup menjelaskan konsep LIFO dari stack.
Perbedaan antara stack dan queue terdapat pada aturan penambahan dan penghapusan elemen. Pada stack, operasi penambahan dan penghapusan elemen dilakukan di satu ujung. Elemen yang terakhir kali dimasukkan akan berada paling dekat dengan ujung atau dianggap paling atas sehingga pada operasi penghapusan, elemen teratas tersebut akan dihapus paling awal, sifat demikian dikenal dengan LIFO.
Sedangkan Pada queue, operasi tersebut dilakukan di tempat yang berbeda. Penambahan elemen selalu dilakukan melalui salah satu ujung, menempati posisi di belakang elemen-elemen yang sudah masuk sebelumnya atau menjadi elemen paling belakang. Sedangkan penghapusan elemen dilakukan di ujung yang berbeda, yaitu pada posisi elemen yang masuk paling awal atau elemen terdepan. Sifat yang demikian dikenal dengan FIFO.
CONTOH PROGRAM
PROGRAM QUEUE;
uses wincrt;
const max=25;
type queue=record
 jenis:array [1..max] of string;
plat:array [1..max] of real;
depan, belakang:0..max;
end;
var produk : queue;
 tempjenis : string;
 tempplat : real;
 pil :1..4;
 tanya : char;

function penuh (s:queue) : boolean;
begin
if s.belakang=max then penuh := true
else penuh := false;
end;
function kosong (s:queue):boolean;
begin
if s.belakang=0 then kosong:=true
else kosong:=false;
end;
procedure push (var s:queue; tempjenis:string; tempplat:real);
begin
if penuh(s) then writeln ('maaf, antrian sudah penuh.hapus beberapa data kemudian ulangi lagi')
else begin
 s.belakang:=s.belakang+1;
 s.jenis[s.belakang]:=tempjenis;
 s.plat[s.belakang]:=tempplat;
 writeln('jumlah data antrian sekarang ',s.belakang,' buah');
 end;
end;
{procedure pop}
procedure pop (var s:queue);
var  i:byte;
Begin
if kosong(S) then
writeln('antrian kosong')
else begin
for i:=1 to s.belakang-1 do
Begin
s.jenis [i]:=s.jenis[i+1];
s.plat [i]:=s.plat[i+1];
end;
s.belakang:=s.belakang-1;
 writeln('data yang ada di antrian sekarang ada',s.belakang,' buah');
 end;
end;
{procedure cetak}
procedure cetak (s:queue);
var i:byte;
begin
if kosong (s) then writeln('tidak ada data')
else begin
writeln('+==================================+');
writeln('| No |      Tujuan     |    harga  |');
writeln('+---- ----------------- -----------+');
for i:=1 to s.belakang do
writeln('|',i:3,' |',s.jenis[i]:16,' | ':2,s.plat[i]:9:2,' |':2);
writeln('+==================================+');
end;
end;
begin
repeat
clrscr;
writeln('  PROGRAM QUEUE TIKET KERETA API');
writeln('==================================');
writeln;
writeln('1. Masukkan Antrian Tiket');
writeln('2. Lihat  Data Antrian');
writeln('3. Ambil Data Antrian');
writeln('4. Exit');
writeln;
writeln('PILIHAN [1/2/3/4]');
writeln;
write('masukan pilihan anda : ');readln(pil);
writeln;
case pil of
1:begin
repeat
writeln ('Masukkan Data Transaksi');
write ('Tujuan   : ');readln(tempjenis);
write ('Harga    : Rp. ');readln(tempplat);
push (produk,tempjenis,tempplat);
writeln;
write('Tambah Data Lagi? [Y/N] =>  ');readln(tanya);
until upcase (tanya)<>'Y';
end;
2: begin
cetak (produk);
write('press enter to continue ');readkey;
end; 3: begin
 repeat
CONTOH QUEUE DALAM KEHIDUPAN SEHARI-HARI
Dalam kehidupan sehari-hari kita bisa dapati melalui penerapan pembelian tiket kereta api, tiket pesawat, tiket kapal laut, pembayaran tiket tol, pembayaran listrik, pembayaran air, dan lain sebagainya. Walaupun berbeda implementasi, Konsep struktur data queue adalah First In First Out(FIFO).
Queue setidaknya harus memiliki operasi-operasi sebagai berikut:
EnQueue : Masukkan data ke dalam antrian
DeQueue : Mengeluarkan data terdepan dari antrian
Clear : Menghapus seluruh antrian
IsEmpty : Memeriksa apakah antrian kosong
IsFull : Memeriksa apakah antrian penuh
Dalam pembelian tiket kereta api:
Enqueue : Seseorang membeli tiket melalui tempat pembayaran tiket yang disediakan.
Dequeue : Setelah membeli tiket, langsung menuju tempat penungguan kereta, dengan sebelumnya petugas memeriksa cek tiket tersebut.
Clear : Pembeli tiket tersebut telah terhapus dari antrian karena sudah melewati pembayaran administrasi tersebut.
IsEmpty : Petugas tiket Kereta melihat tidak ada lagi yang ingin membeli tiket kereta.
IsFull : Petugas Tiket Kereta melihat masih ada pembeli tiket kereta.
KONSEP QUEUE
  1. Create() 
Untuk menciptakan dan menginisialisasi Queue
Dengan cara membuat Head dan Tail  = -1
  1. IsEmpty() 
Untuk memeriksa apakah antrian masih kosong atau sudah terisi dengan cara memeriksa nilai tail, jika tail = -1 maka empty Pergerakan pada Antrian terjadi dengan penambahan  data antrian kebelakang, yaitu menggunakan nilai tail.
2.      IsFull()
            untuk mengecek apakah Antrian sudah penuh atau belum
Dengan cara mengecek nilai tail, jika tail >= MAX-1 (karena MAX-1 adalah batas data array pada C) berarti sudah penuh
  1. Enqueue
            Untuk menambahkan data ke dalam antrian, penambahan data selalu ditambahkan di data paling belakang
Penambahan data selalu menggerakan variabel tail dengan cara increment counter tail.
  1. Dequeue() 
            Digunakan untuk menghapus data terdepan dari Antrian
Dengan cara mengurangi counter tail dan menggeser semua data antrian kedepan. Penggeseran dilakukan dengan menggunakan looping
  1. Clear() 
            Untuk menghapus semua data Antrian dengan cara membuat tail dan head = -1 . Penghapusan data-data antrian sebenarnya tidak menghapus arraynya, namun hanya mengeser indeks pengaksesannya ke nilai -1 sehingga data-data Antrian tidak lagi terbaca.

  1. Tampil() 
            Untuk menampilkan nilai-nilai data Antrian menggunakan looping dari head s/d tail 
KONDISI YANG HARUS DI PERHATIKAN DALAM QUEUE
Kondisi antrian yang menjadi perhatian adalah :
1)      Penuh
Bila elemen di antrian  mencapai  kapasitas  maksimum  antrian. Pada kondisi ini, tidak mungkin dilakukan penambahan ke antrian. Penambahan elemen menyebabkan kondisi kesalahan Overflow.
2)      Kosong

Bila tidak ada elemen di antrian. Pada kondisi ini, tidak mungkin dilakukan pengambilan elemen dari antrian. Pengambilan elemen menyebabkan kondisi kesalahan Underflow.




Lebih lengkap Program nya. Simak disini Contoh Program queue serta konsepnya.



0 komentar:

Tugas IV Stack(Tumpukan)

Apa itu stack ?

Stack adalah sebuah abstract data type (ADT) yang berisi koleksi data item yang hanya dapat diakses pada akhir bagian stack tersebut, biasa disebut top. Hal ini berarti bahwa didalam sebuah stack, kita dapat memasukkan (insert) dan menghapus (delete) item hanya dari posisi top tersebut. Item terakhir yang kita masukkan kedalam sebuah stack adalah item yang paling pertama harus kita keluarkan. Itulah mengapa stack disebut sebagai Last-In-First-Out (LIFO) data structure. Kalimat sederhana yang dapat menjelaskan konsep tersebut adalah kalimat “Masuk belakangan keluar duluan”.Apa itu stack ?
Stack adalah sebuah abstract data type (ADT) yang berisi koleksi data item yang hanya dapat diakses pada akhir bagian stack tersebut, biasa disebut top. Hal ini berarti bahwa didalam sebuah stack, kita dapat memasukkan (insert) dan menghapus (delete) item hanya dari posisi top tersebut. Item terakhir yang kita masukkan kedalam sebuah stack adalah item yang paling pertama harus kita keluarkan. Itulah mengapa stack disebut sebagai Last-In-First-Out (LIFO) data structure. Kalimat sederhana yang dapat menjelaskan konsep tersebut adalah kalimat “Masuk belakangan keluar duluan”.
Didalam kehidupan sehari-hari, terdapat beberapa contoh penerapan algoritma dari data structure ini, seperti dalam membuat suatu tumpukan piring, tumpukan buku, tumpukan koin, tusuk sate, atau bahkan cara memakai gelang. Salah satu contoh, dalam membuat suatu tumpukan piring kita pasti menempatkan piring pertama berada pada posisi paling  bawah, dan piring terakhir berada pada posisi paling atas. Nah, ketika kita hendak mencuci atau mengambil piring tersebut, maka kita akan mengambil piring pada tumpukkan atas terlebih dahulu dan seterusnya hingga mencapai piring paling bawah. Hal tersebut juga serupa pada tumpukan buku, koin, tusuk sate dan cara memakai gelang. Saya rasa ilustrasi tersebut cukup menjelaskan konsep LIFO dari stack.
PUSH DAN POP
q   Fungsi push: digunakan untuk menambahkan data ke dalam stack. Penambahan data tidak bisa dilakukan apabila stack sudah penuh. Urutan perintahnya adalah: menambahkan nilai top dan menambahkan data pada posisi nilai top. Jika dalam Linked List menggunakan method addLast.
q   Fungsi pop: digunakan untuk mengeluarkan data teratas stack dengan syarat bahwa stack tidak kosong. Urutan perintahnya adalah : menghapus data pada posisi nilai top dan menurunkan nilai top
Operasi Push
Operasi push adalah operasi dasar dari stack yang berguna untuk menambah suatu elemen data baru pada stack dan di simpan pada posisi top yang akan mengakibatkan posisi top akan berubah.
            Langkah-langkah operasi ini:
q   Periksa apakah stack penuh(isfull).jika bernilai false/0 (tidak penuh)maka proses push dilaksanakan dan jika pemeriksaan ini bernilai true/1,maka proses push digagalkan.
q   Proses push-nya sendiri adalah dengan menambahkan field top dengan 1,kemudian elemen pada posisi top di isi dengan elemen data baru.
Operasi Pop
q  Operasi Pop adalah salah satu operasi paling besar dari stack yang berguna untuk mengambil elemen terakhir(top) dan kemudian menghapus elemen tersebut sehingga posisi top akan berpindah.
q  Operasi ini biasanya dibuat dalam bentuk function yang me-return-kan nilai sesuai data yang ada di top. Operasi Pop pada Stack yang menggunakan array adalah terlebih dahulu memeriksa apakah stack  sedang keadaan kosong,jika tidak kosong maka data diambil pada posisi yang ditunjuk oleh posisi top,kemudian disimpan dalam variabel baru dengan nama “data”.
CONTOH PROGRAM :
program stack;
uses winCrt;
const max = 100;
Var L : array [1..max] of char;
sisa, i, j, top : integer;
jawab : char;
kondisi : string;
procedure inisiasi;
Begin
top :=0;
end;
procedure CEK;
begin
 sisa := max - top;
 if top = max then
  kondisi := 'penuh'
 else
  if ((top < max) and (top > 0)) then
   kondisi := 'belum penuh'
  else
   kondisi := 'kosong'
end;
procedure PUSH;
begin
 write('Masukan data : ');
 readln(L[top+1]);
 top := top + 1;
end;
procedure TAMPIL;
begin
 writeln('Stack Yang Dihasilkan : ');
 for i := top downto 1 do
 begin
  writeln(L[i]);
 end;
end;
procedure POP;
begin
 top := top - 1
end;
BEGIN
 clrscr;
 inisiasi;
 jawab := 'Y';
 while ((jawab = 'Y') or (jawab = 'y')) do
 begin
  writeln('PROGRAM STACK');
  writeln('1. PUSH');
  writeln('2. POP');
  write('PILIH 1 ATAu 2 ?  ');
  readln(j);
  case j of
   1 : begin
     CEK;
     if kondisi = 'penuh' then
      writeln('STACK PENUH, ANDA TIDAK BISA MENAMBAH TUMPUKAN')
     else
     begin
if kondisi <> 'penuh' then
      begin
       CEK;
writeln ('Stack ', kondisi, ', Masih Bisa Menampung : ', sisa, ' data');
write ('Apakah Anda mau Menambah Data ? (Y/T)  ');
readln (jawab);
while (((jawab = 'Y') or (jawab = 'y')) and (kondisi <> 'penuh')) do
       begin
        PUSH;
        writeln;
        writeln;
        CEK;
        writeln;
        writeln;
        TAMPIL;
        writeln;
        writeln;

writeln ('Stack ', kondisi, 'Masih Bisa Menampung : ', sisa, ' data');
        write ('Apakah Anda mau Menambah Data ? (Y/T)  ');
        readln (jawab);
       end;
      end
      else
       writeln ('STACK PENUH');
     end;
    end;
   2 : begin
     write ('Apakah Anda Yakin Mau Menghapus Data ? (Y/T)  ');
     readln (jawab);
     while (((jawab = 'Y') or (jawab = 'y')) and (kondisi <> 'kosong')) do
     begin
      POP;
      writeln;
      writeln;
CEK;
      writeln;
      writeln;
      TAMPIL;
      writeln;
      writeln;
      writeln ('Stack Masih Bisa Dihapus : ', top, ' data');
      write ('Apakah Anda Mau Menghapus Data ? (Y/T)  ');
      readln (jawab);
     end;
     if kondisi = 'kosong' then
      writeln ('STACK KOSONG')
    end;
 end;
  write ('Apakah Mau Kembali Ke Menu Utama ? (Y/T)  ');
  readln (jawab);
 end;
END.



0 komentar:

Tugas III Pemetaan Array

SOAL :
  1. Jelaskan konsep Pemetaan array ke storage.
q  Dimensi satu ?
q  Dimensi banyak ?
2. Jelaskan contoh kasus Array dalam matriks dan Pembentukan matriks dengan menggunakan array.
Penyelesaian :
PENGERTIAN ARRAY
            Array merupakan tipe data tersetruktur dimana di dalamnya terdiri dari komponen–komponen yang mempunyai tipe data yang sama. Di dalam suatu array jumlah komponen banyaknya adalah tetap. Di dalam suatu larik atau array setiap kompoenen ditunjukan oleh suatu index yang unik. Index dari setiap komponen array menunjukan urutan data atau identitas yang mewakili data yang ada didalamnya. Logika sederhananya array itu bisa disamakan dengan dua orang dengan nama yang sama didalam suatu komunitas, untuk membedakan antara nama yang satu atau dengan nama yang lain maka diberikan initial tambahan untuk setiap nama.
Karakteristik Array
a.       Mempunyai batasan dari pemesanan alokasi memori (bersifat statis).
b.      Mempunyai tipe data sama (bersifat homogen).
c.       Dapat diakses secara acak.
Deklarasi Array
            Ada tiga hal yang harus diketahui dalam pendeklarasian, yaitu :
a.       Type data array.
b.      Nama variable array.
c.       Subkrip / index array.
Contoh deklarasai array adalah sebagai berikut :
            int A[10], artinya variabel A adalah kumpulan data sebanyak 10 bilangan bertipe integer.
Penggunaan Array
            Pada dasarnya penggunaan array sangat luas tidak hanya digunakan pada bahasa pemrogaman. Contoh penggunaan array sebagai berikut :
1.   Array digunakan untuk suatu database, contoh : tabel.
2.   Array digunakan untuk operasi matematika seperti vektor.
3.   Digunakan dalam bentuk struktur data lain, contohnya list.  
Pengurutan Array
            Pengurutan atau sorting adalah proses yang paling sering dilakukan dalam pengolahan data, pengurutan dibedakan menjadi dua, yaitu :
1.   Pengurutan internal
Pengurutan dilakukan terhadap sekumpulan data di media memory internal komputer di mana data dapat diakses elemennya secara langsung.
2.   Pengurutan eksternal
Pengurutan data di memory sekunder. Biasanya data bervolume besar sehingga tidak mampu dimuat semuanya di memory utama.
 Keunggulan Dan Kelemahan Array
q     Keunggulan array adalah sebagai berikut :
a.       Array sangat cocok untuk pengaksesan acak. Sembarang elemen di array dapat diacu secara langsung tanpa melalui elemen-elemen lain.
b.      Jika berada di suatu lokasi elemen, maka sangat mudah menelusuri ke elemen-elemen tetangga, baik elemen pendahulu atau elemen penerus.
c.       Jika elemen-elemen array adalah nilai-nilai independen dan seluruhnya harus terjaga,maka penggunaan penyimpanannya sangat efisien.
q    Kelemahan Array adalah sebagai berikut :
            Array mempunyai fleksibilitas rendah, sehingga tidak cocok untuk berbagai aplikasi karena array mempunyai batasan sebagai berikut:
a.       Array harus bertipe homogen. Kita tidak dapat mempunyai array dimana satu elemenadalah karakter, elemen lain bilangan, dan elemen lain adalah tipe-tipe lain.
Kebanyakan bahasa pemrograman mengimplementasikan array statik yang sulitdiubah ukurannya di waktu eksekusi. Bila penambahan dan pengurangan terjadi terus-menerus, maka representasi statis
1.      ARRAY DIMENSI SATU
Deklarasi     : Type_Data Nama_Variabel [index]
Rumus untuk menentukan jumlah elemen dalam array adalah :
n
p(Index Array)
i = 1
ket:
p = Perkalian dari index sebelumnya (untuk arraybdimensi dua dan tiga).
Pemetaan (mapping) array dimensi satu ke storage
Rumus              :  @A[i] = B + (i – 1) * L
Dimana :  @A[i]           :  Posisi array yang dicari
B         :  Posisi awal index di memori computer
i           :  Subkrip atau index array yang di cari
L          :  Ukuran atau besar memori suatu tipe data
2.      ARRAY DIMENSI DUA
Deklarasi     : Type_Data Nama_Variabel [index1] [index2]
Menentukan jumlah elemen dalam array dimensi dua :
n
p(Index Array)
i = 1
ket:
p = Perkalian dari statemen sebelumnya
Pemetaan (mapping) array dimensi dua ke storage terbagi dua cara pandang (representasi) yang berbeda yaitu :
1)      Secara kolom per kolom (coloumn major order / CMO)
@M[i][j] = M[0][0] + {(j – 1) * K + (i – 1)} * L
 Secara baris per baris (row major order / RMO)
@M[i][j] = M[0][0] + {(i – 1) * N + (j – 1)} * L

Keterangan      :
@M[i][j] = Posisi array yang di cari, M[0][0 = Posisi alamat awal index array, i = Baris, j = Kolom, L = Ukuran memory type data, K = Banyaknya elemen per kolom, N = Banyaknya elemen per baris.
3.      ARRAY DIMENSI TIGA
Deklarasi         : type_Data Nama_Variabel [index1][index2][index3]
Menentukan jumlah elemen dalam array dimensi tiga :
N
p (Index Array)
   i = 1 
p = Perkalian dari statemen sebelumnya

Pemetaan (mapping) array dimensi tiga ke storage
RUMUS :
@M[    M[m][n][p]  = M[0][0][0] + {((m-1) *
(jum.elemen2*jum.elemen3)) + ((n-1)*(jum.elemen 3)) * ((p-1)} * L
Contoh program Matriks :
program Jumlah_Matrik;
uses wincrt;
const
Orde = 3;
type
Matrik = array[1..orde,1..orde] of integer;
var
M1, M2, H : matrik;
I, J : integer;
procedure Awal;
begin
Writeln('Latihan Pascal 3 : Array');
Writeln('------------------------');
Writeln;
Writeln('Nama : Saputri Phonna');
Writeln('NIM : 1405020054     ');
Writeln;
end;
procedure JumlahMatrik(var Mat1, Mat2, MatHasil : matrik);
begin
for I := 1 to orde do
for J := 1 to orde do
MatHasil[I,J] := Mat1[I,J] + Mat2[I,J];
end;
procedure BacaData(var Mat : matrik);
begin
for I := 1 to orde do
for J := 1 to orde do
begin
Write('Nilai[',I,',',J,'] = ');
Readln(Mat[I,J]);
end;
end;
procedure TulisMatrik(var Mat : matrik);
begin
for I := 1 to orde do
begin
for J := 1 to orde do
begin
Write(Mat[I,J]:5);
end;
Writeln;
end;
end;
begin
ClrScr;
Awal;
Writeln('Isi matrik pertama :');
BacaData(M1);
Writeln;
Writeln('Isi matrik kedua :');
BacaData(M2);
Writeln;
JumlahMatrik(M1, M2, H);
Writeln('Penjumlahan matrik pertama dan kedua :');
TulisMatrik(H);
Writeln;
Write('Tekan Enter...');
Readln;
end.



0 komentar:

Program KUIS

Soal :
1.  Buatlah sebuah contoh kasus array/larik beserta algoritmanya !
2. Buatlah sebuah contoh kasus record beserta algoritmanya !
3. Buatlah sebuah contoh kasus penggabungan array dan record beserta algoritmanya !
4. Jelaskan tentang array dan record secara konsep !
Penyelesaian :
1. Buatlah sebuah contoh kasus array/larik beserta algoritmanya !
Jawab :
Program menentukan_nilai_kode;
Uses winCrt;
VarKode:array[1..5] of Integer;
Begin
Kode[1]:=4;    
Kode[2]:=9;
Kode[3]:=13;
Kode[4]:=15;
Kode[5]:=20;
Writeln;
writeln('Jadi, nilai kode ke 4 adalah =',kode[4]);
Readln;
End.







Outputnya :
Algoritmanya :
1.      Mulai/Start
2.      Var kode
3.      Masukkan kode
4.      Kode[1]:=4
Kode[2]:=9
Kode[3]:=13
Kode[4]:=15
Kode[5]:=20
5.      Tampilkan nilai kode ke 4
6.      Selesai/end.

2.      Buatlah sebuah contoh kasus record beserta algoritmanya !
Jawab :
Program Biodata_diri;
Uses winCrt;
Type
Biodata=record
Nama:string[25];
tempatlahir:string[10];
tanggallahir:string[20];
Alamat:string[15];
NoHp:string[12];
end;
Var B: Biodata;
Begin
clrscr;
            write('Masukkan nama            :'); readln(B.nama);
            write('Masukkan tempatlahir     :'); readln(B.tempatlahir);
            write('Masukkan tanggallahir    :'); readln(B.tanggallahir);
            write('Masukkan alamat          :'); readln(B.alamat);
            write('Masukkan nohp            :'); readln(B.nohp);
            writeln;
            writeln('Biodata Diri Anda');
            writeln('Nama                   :', B.nama);
            writeln('Tempatlahir            :', B.tempatlahir);
            writeln('Tanggallahir           :', B.tanggallahir);
            writeln('Alamat                 :', B.alamat);
writeln('NoHp                   :', B.nohp);
readln;
end.





Outputnya :
Algoritmanya :
1.      Mulai/start
2.      Type Biodata = record
Nama,tempatlahir,tanggallahir,alamat,nohp : string
3.      Var B
4.      Masukkan nama,tempatlahir,tanggallahir,alamat,nohp
5.      Tampilkan biodata diri anda
6.      Selesai/end.

3.      Buatlah sebuah contoh kasus penggabungan array dan record beserta algoritmanya !
Jawab :
Program Mahasiswa_yang_mendapat_beasiswa;
uses wincrt;
Type mahasiswa=record
nama:string; NIM:integer;
jumlah:byte;
end;
var beasiswa:array [1..10] of mahasiswa;
n,i,j:integer;
begin
write(' Banyaknya data yang diinginkan= ');
readln(n);
for i:=1 to n do
begin
write('masukkan nama mahasiswa= ');readln(beasiswa[i].nama);
write(' masukkan NIM=');readln(beasiswa[i].NIM);
write(' masukkan Beasiswa=Rp. ');readln(beasiswa[i].jumlah);
writeln;
end;
for i:=1 to n do
begin
writeln(‘Data Mahasiswa yang Mendapatkan Beasiswa’);
writeln('nama           :',beasiswa[i].nama);
writeln('nim            :',beasiswa[i].nim);
writeln('beasiswa       :',beasiswa[i].jumlah);
writeln;
end;
end.












Outputnya :
Algoritmanya :
1.      Mulai/start
2.      Type mahasiswa:record
Nama: string
Nim: integer
Jumlah: Byte
3.      Var beasiswa:array
n,i,j: integer
4.      Masukkan banyaknya data yang diinginkan
5.      For i:= 1 to n do
6.      Masukkan nama,nim,beasiswa
7.      For i:= 1 to n do
8.      Tampilkan data mahasiswa yang mendapatkan beasiswa
9.      Selesai/end.

4.      Jelaskan tentang array dan record secara konsep !
Jawab :
A.   Array
Array merupakan tipe data tersetruktur dimana di dalamnya terdiri dari komponen–komponen yang mempunyai tipe data yang sama. Di dalam suatu array jumlah komponen banyaknya adalah tetap. Di dalam suatu larik atau array setiap kompoenen ditunjukan oleh suatu index yang unik. Index dari setiap komponen array menunjukan urutan data atau identitas yang mewakili data yang ada didalamnya. Logika sederhananya array itu bisa disamakan dengan dua orang dengan nama yang sama didalam suatu komunitas, untuk membedakan antara nama yang satu atau dengan nama yang lain maka diberikan initial tambahan untuk setiap nama.
Pengertian array satu dimensi, dua dimensi dan multi dimensi.
·         Array satu dimensi
Merupakan sebuah variabel yang menyimpan sekumpulan data yang memiliki tipe sama dan elemen yang akan diakses hanya melalui 1 indeks atau subskrip.
Bentuk umum pendeklarasian:
nama_array[jumlah_elemen];
·         Array dua dimensi
Merupakan sebuah variabel yang menyimpan sekumpulan data yang memiliki tipe sama dan elemen yang akan diakses melalui 2 indeks atau subskrip yaitu indeks baris dan indeks kolom.
Bentuk umum pendeklarasian:
nama_array[jumlah_eleman_baris][jumah_eleme_kolom];
·         Array multidimensi
Merupakan sebuah variabel yang menyimpan sekumpulan data yang memiliki tipe sama dan elemen yang akan diakses melalui banyak indeks atau subskrip. Array seperti ini biasa digunakan untuk matik, array 2 dimensi juga termasuk kedalam array multidimensi.
*      DEKLARASI ARRAY
Didalam penulisan bahasa pemograman setiap penggunaan array harus dideklarsikan terlebih dahulu. Pendeklarasian array diawali dengan nama variabel array diikuti dengan indeks array yang dituliskan didalam tanda “[]” , diikuti dengan kata cadangan of dan tipe data yang dibutuhkan. Berikut bentuk penulisan;
Nama_Variable : array [..tipe index ..] of tipe data;
Contoh :
Var
A : array[1..4] of integer;
B : array[1..5] of string;
C: array[1..10] of real;
Keterangan:
A,B,C merupakan tanda pengenal/ nama variabel dari array;
1..4 : merupakan tipe indek dari array, yang menunjukan banyaknya data yang mampu disimpan.
Integer : menunjukan bahwa data yang diinput berupa bilangan bulat.

B.   Record.
Sebuah record merupakan koleksi satuan data yang heterogen, yakni terdiri dari berbagai type. Satuan data tersebut sering disebut sebagai field dari record. Field dipanggil dengan  menggunakan namanya masing-masing. Suatu field dapat terdiri atas beberapa subfield. 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.
*      DEKLARASI RECORD
Type
Variable = record
…field = type data
…field = type data
…field = type data
End.
Perbedaan array dan record :
a.      Elemen record bersifat heterogen, yaitu  campuran beberapa tipe data, sedangkan elemen array bersifat homogen.
b.      Elemen record didefinisikan simbol/identifer sedangkan elemen array diidentifikasi dengan indeks.


0 komentar: