Pada sebuah aplikasi pengolah dokumen, biasanya terdapat fasilitas untuk melakukan

Berikut ini adalah pertanyaan dari johanhery1234 pada mata pelajaran TI untuk jenjang Sekolah Menengah Atas

Pada sebuah aplikasi pengolah dokumen, biasanya terdapat fasilitas untuk melakukan Undo dan Redo. Operasi Undo akan membatalkan langkah/ tindakan terakhir yang kita lakukan saat mengedit dokumen (misal, jika kita menyadari ada kesalahan pada langkah terakhir kita), sedangkan Redo digunakan untuk mengulang kembali operasi yang baru saja dibatalkan dengan sebuah Undo. Proses Undo dan Redo ini dapat dilakukan sampai dengan operasi pertama setelah sebuah dokumen dibuka/disimpan. Misalnya, terjadi rangkaian kejadian berikut a. Budi membuka dokumen A b. Budi menambahkan judul pada dokumen A c. Budi menulis sebuah paragraf pada dokumen A d. Budi menambahkan sebuah tabel pada dokumen A e. Budi menyisipkan sebuah gambar pada dokumen A Apabila kemudian Budi menekan tombol Undo, operasi terakhir (yaitu penambahan gambar) akan dibatalkan sehingga gambar tersebut akan hilang dari dokumen. Jika kemudian Budi menekan tombol Undo sekali lagi, operasi terakhir sebelum itu (yaitu menambahkan tabel) juga akan dibatalkan sehingga tabel tersebut akan hilang dari dokumen. Jika kemudian Budi menekan tombol Redo, operasi Undo yang terakhir (yaitu yang menghilangkan tabel) akan dibatalkan sehingga tabel tersebut akan muncul kembali. Jelas bahwa aplikasi perlu untuk menyimpan data-data berupa tindakan/ operasi apa saja yang dilakukan oleh penggunanya dari awal sampai akhir, serta efeknya terhadap dokumen agar dapat memberikan fungsionalitas Undo dan Redo tersebut. Manakah di antara stack dan queue yang lebih tepat digunakan untuk menyimpan operasi-operasi tersebut?​

Jawaban dan Penjelasan

Berikut ini adalah pilihan jawaban terbaik dari pertanyaan diatas.

Jawaban:

Yang lebih tepat untuk menyimpan histori dari operasi-operasi yang dilakukan pengguna aplikasi adalah: STACK.

Penjelasan:

STACK vs QUEUE

Prinsip kerja STACK (Tumpukan) adalah LIFO (last-in-first-out), artinya data yang dimasukkan terakhirlah yang bisa dikeluarkan pertama kali. Sementara QUEUE (Antrian) berprinsip kerja FIFO (first-in-first-out), artinya data yang dimasukkan pertamalah yang bisa dikeluarkan pertama kali.

ILUSTRASI STACK UNTUK UNDO-REDO

Untuk keperluan Undo-Redo ini, diperlukan 2 stack.

  • Stack pertama: untuk menyimpan histori operasi yang bisa dibatalkan (di-undo). Syaratnya: sudah ada operasi yang dilakukan.
  • Stack kedua: untuk menyimpan histori operasi yang bisa dikembalikan (di-redo). Syaratnya: sudah ada operasi yang dibatalkan.

Catatan: ilustrasi ini hanya konsep untuk menjelaskan bagaimana struktur data stack bisa menangani Undo-Redo.

0. Kondisi Awal/Initial Condition

Stack Undo dan Redo masih kosong.

1. Budi membuka dokumen A

Operasi: buka dokumen A dimasukkan (di-PUSH) ke dalam stack Undo.

\begin{array}{|c|c|c|}\texttt{Buka A}&{\quad}&\ \\\cline{1-1}\cline{3-3}\bf \sf UNDO&{\quad}&\bf \sf REDO\\\cline{1-1}\cline{3-3}\end{array}

2. Budi menambahkan judul pada dokumen A

Operasi: tambah judul dimasukkan (di-PUSH) ke dalam stack Undo.

\begin{array}{|c|c|c|}\texttt{Tmbh Jdl}&{\quad}&\ \\\texttt{Buka A}&{\quad}&\ \\\cline{1-1}\cline{3-3}\bf \sf UNDO&{\quad}&\bf \sf REDO\\\cline{1-1}\cline{3-3}\end{array}

3. Budi menulis sebuah paragraf pada dokumen A

Operasi: tulis paragraf dimasukkan (di-PUSH) ke dalam stack Undo.

\begin{array}{|c|c|c|}\texttt{Tulis Par.}&{\quad}&\ \\\texttt{Tmbh Jdl}&{\quad}&\ \\\texttt{Buka A}&{\quad}&\ \\\cline{1-1}\cline{3-3}\bf \sf UNDO&{\quad}&\bf \sf REDO\\\cline{1-1}\cline{3-3}\end{array}

4. Budi menambahkan sebuah tabel pada dokumen A

Operasi: tambah tabel dimasukkan (di-PUSH) ke dalam stack Undo.

\begin{array}{|c|c|c|}\texttt{Tmbh Tabel}&{\quad}&\ \\\texttt{Tulis Par.}&{\quad}&\ \\\texttt{Tmbh Jdl}&{\quad}&\ \\\texttt{Buka A}&{\quad}&\ \\\cline{1-1}\cline{3-3}\bf \sf UNDO&{\quad}&\bf \sf REDO\\\cline{1-1}\cline{3-3}\end{array}

5. Budi menyisipkan sebuah gambar pada dokumen A

Operasi: sisipkan gambar dimasukkan (di-PUSH) ke dalam stack Undo.

\begin{array}{|c|c|c|}\texttt{Sisip Gbr.}&{\quad}&\ \\\texttt{Tmbh Tabel}&{\quad}&\ \\\texttt{Tulis Par.}&{\quad}&\ \\\texttt{Tmbh Jdl}&{\quad}&\ \\\texttt{Buka A}&{\quad}&\ \\\cline{1-1}\cline{3-3}\bf \sf UNDO&{\quad}&\bf \sf REDO\\\cline{1-1}\cline{3-3}\end{array}

6. Budi menekan tombol Undo.

Operasi terakhir (teratas) dalam stack Undo dibatalkan. Data operasi ini dikeluarkan (di-POP) dari stack Undo, dan dimasukkan (di-PUSH) ke stack Redo.

\begin{array}{|c|c|c|}\texttt{Tmbh Tabel}&{\quad}&\ \\\texttt{Tulis Par.}&{\quad}&\ \\\texttt{Tmbh Jdl}&{\quad}&\ \\\texttt{Buka A}&{\quad}&\texttt{Sisip Gbr.}\\\cline{1-1}\cline{3-3}\bf \sf UNDO&{\quad}&\bf \sf REDO\\\cline{1-1}\cline{3-3}\end{array}

Akibatnya, gambar hilang karena tidak jadi disisipkan ke dalam dokumen.

7. Budi menekan tombol Undo.

\begin{array}{|c|c|c|}\texttt{Tulis Par.}&{\quad}&\ \\\texttt{Tmbh Jdl}&{\quad}&\texttt{Tmbh Tabel}\\\texttt{Buka A}&{\quad}&\texttt{Sisip Gbr.}\\\cline{1-1}\cline{3-3}\bf \sf UNDO&{\quad}&\bf \sf REDO\\\cline{1-1}\cline{3-3}\end{array}

Akibatnya, tabel hilang karena tidak jadi ditambahkan ke dalam dokumen.

8. Budi menekan tombol Redo.

Operasi teratas dalam stack Redo dikembalikan. Data operasi ini dikeluarkan (di-POP) dari stack Redo, dan dimasukkan (di-PUSH) ke stack Undo.

\begin{array}{|c|c|c|}\texttt{Tmbh Tabel}&{\quad}&\ \\\texttt{Tulis Par.}&{\quad}&\ \\\texttt{Tmbh Jdl}&{\quad}&\ \\\texttt{Buka A}&{\quad}&\texttt{Sisip Gbr.}\\\cline{1-1}\cline{3-3}\bf \sf UNDO&{\quad}&\bf \sf REDO\\\cline{1-1}\cline{3-3}\end{array}

Akibatnya, tabel muncul lagi di dokumen.

9. Budi menekan tombol Undo.

\begin{array}{|c|c|c|}\texttt{Tulis Par.}&{\quad}&\ \\\texttt{Tmbh Jdl}&{\quad}&\texttt{Tmbh Tabel}\\\texttt{Buka A}&{\quad}&\texttt{Sisip Gbr.}\\\cline{1-1}\cline{3-3}\bf \sf UNDO&{\quad}&\bf \sf REDO\\\cline{1-1}\cline{3-3}\end{array}

Akibatnya, tabel hilang lagi.

10. Budi menekan tombol Undo.

\begin{array}{|c|c|c|}\ &{\quad}&\texttt{Tulis Par.}\\\texttt{Tmbh Jdl}&{\quad}&\texttt{Tmbh Tabel}\\\texttt{Buka A}&{\quad}&\texttt{Sisip Gbr.}\\\cline{1-1}\cline{3-3}\bf \sf UNDO&{\quad}&\bf \sf REDO\\\cline{1-1}\cline{3-3}\end{array}

Akibatnya, paragraf hilang.

11. Budi menekan tombol Redo.

\begin{array}{|c|c|c|}\texttt{Tulis Par.}&{\quad}&\ \\\texttt{Tmbh Jdl}&{\quad}&\texttt{Tmbh Tabel}\\\texttt{Buka A}&{\quad}&\texttt{Sisip Gbr.}\\\cline{1-1}\cline{3-3}\bf \sf UNDO&{\quad}&\bf \sf REDO\\\cline{1-1}\cline{3-3}\end{array}

Akibatnya, paragraf muncul lagi.

Semoga bisa sedikit menjelaskan tentang Stack dan bagaimana stack lebih tepat untuk diimplementasikan dalam case Undo-Redo.

Semoga dengan pertanyaan yang sudah terjawab oleh henriyulianto dapat membantu memudahkan mengerjakan soal, tugas dan PR sekolah kalian.

Apabila terdapat kesalahan dalam mengerjakan soal, silahkan koreksi jawaban dengan mengirimkan email ke yomemimo.com melalui halaman Contact

Last Update: Mon, 31 Jan 22