1. Question 1
Marks: 0/100
Kuis Sederhana Rangkuman semua ADT
Anda sudah pernah diminta untuk mengimplementasikan ADT Point, Stack dan Queue dan sudah memakainya untuk persoalan sederhana.
Pada kuis praktikum kali ini, anda diminta untuk membuat program yang memakai ADT tsb dan ADT yang pernah anda buat, untuk versi-0.
Anda diminta untuk mengelola sebuah sistem kecil yang akan merupakan subsistem lebih besar, yaitu untuk menerima perintah
(“commandâ€), dan memroses kalender. Sebuah kalender disimpan dalam tabel Setiap baris tabel berisi data (disebut sebuah entri)
yang terdiri dari :
1. Id : nomor unik dan urut yang dimulai dengan NOL saat sistem dihidupkan
2. Data teridir dari
a. Tanggal : bertype date (untuk sementara direprentasi sebagai integer)
b. memo : bertype string (untuk sementara direpresentasi dengan 1 karakter saja)
Program MyCal berfungsi untuk menambah data yang sudah disimpan melalui “command line†(seperti sistem DOS). Antarmuka
aplikasi sangat sederhana, dimana pengguna akan mengetikkan perintah dan data. Daftar perintah yang dapat diketikkan disajikan pada
tabel Perintah sbb
Tabel Perintah
No
Perintah
Keterangan
1.
Add <data>
2.
Clean <n>
3.
View <n>
Menambahkan sebuah entri dengan memberikan datanya, sistem akan
men-generate idnya
Menghapus <n> entri yang paling lama. Jika perintah yang pernah
diketikkan kurang dari n, maka yang semua perintah dihapus (daftar
perintah menjadi kosong)
Menampilkan <n> entri yang disimpan. Jika Kalender kosong (belum ada
isinya), tidak melakukan apa-apa sebab tak ada yang di-view. Jika n
bernilai 0, maka menampilkan semua entri yang ada.
4.
Salin <n>
5.
Quit
Perintah ini tidak mengubah nilai yang tersimpan pada program
Menambahkan <n> perintah terakhir ke daftar perintah dengan menyalinnya,
dan sesuai urutannya
Keluar dari sistem, untuk versi-0 semua data hilang
Pada versi-0, perintah belum direpresentasi sebagai string, tapi direpresentasi dari nomornya dan nomor tsb merepresentasi indeks
dimana perintah tersebut disimpan dalam tabel perintah.
converted by Web2PDFConvert.com
2. Sistem akan mengelola :
- TRF, Sebuah Tabel Referensi perintah, yang setiap baris berisi < command:string> dan nomor perintah adalah indeks tabel. TRF[i]
isinya adalah perintah ke-i. Contoh : TRF[3] =
- S, Sebuah stack untuk mengeksekusi perintah Salin. Prosedur Tulis Stack akan memprint isi stack mulai “top†sampai ke
“bottomâ€, dan jika Stacknya kosong akan memprint “Stack kosongâ€
- Kalender, Sebuah Tabel yang berisi data hasil eksekusi daftar perintah yang “terkiniâ€. Data yang baru akan ditambahkan
sebagai elemen berikutnya. Tulis Kalender akan memprint isi Kalender dari elemen pertama s.d terakhir. Jika kalender kosong akan
memprint “Kalender kosongâ€
- IdSeq : sebuah counter yang akan diinisialisasi Nol dan terus ditambah sampai user menekan Quit. Nomor akan terus bertambah
Untuk versi-0, semua perintah hanya diketikkan nomornya.
Kerangka program utama adalah
Inisilisasi IdSeq dengan Nol
Inisialisasi TRF sesuai isi TRF yang diberikan di bawah
Inisialissi S, Kalender dengan kosong
Tulis 'Welcome'
Ulangi
Baca nomor perintah
Baca parameter sesuai perintah
Proses perintah sesuai tabel (1)
Sampai user mengetik perintah adalah Quit)
Tulis isi Kalender(Jika kalender kosong tulis ‘Kalender kosong’)
Tulis isi Stack
Tulis ‘Good bye’
Isi Tabel TRF
Contoh isi Kalender pada suatu saat
Tabel TRF
Indeks Perintah
TRF
Kalender
Id
Tanggal
Data
1
2
3
4
5
6
7
8
9
4
5
6
7
8
9
10
A
x
2
q
S
W
S
Add
Clean
View
Salin
120
200
300
12
111
134
190
Quit
Catatan mengenai tabel TRF: sengaja Quit dikode = 9 sebab pada latihan berikutnya, akan dipakai untuk perintah lain.
converted by Web2PDFConvert.com
3. Contoh urutan ketikan user dan isi tabel Kalender dan S(tidak ada hubungan dengan data di atas, urutan lain)
User mengetik
Keterangan
Nilai Counter dan Isi tabel
1
Add data
IdSeq=1
120 A
Tanggal=120 dan
Data=’A’
Add data
Kalender {<1,120,’A’> dan S= {}
Tanggal=10
,Data=’C’
Add data
Kalender {<1,120,’A’>, <2,10,’C’>} dan S= {}
Kalender {<1,120,’A’>, <2,10,’C’>,
3
Tanggal=200,
Data=’x’
View semua data
0
2
Clean dua data teratas
IdSeq=3
1
10 C
1
200 x
2
4
1
IdSeq=2
IdSeq=3
<3,200,’x’>} dan S= {}
Tidak mengubah kondisi tabel. Melakukan printf semua entri
yang ada (karena n=0) (lihat contoh I/O)
Kalender { <3,200,’x’>} dan S= {}
Memasukkan (push) 1
entri terakhir ke S,
kemudian mengosongkan
ke stack dengan
menambahkannya
IdSeq=3
Mula-mula: Kalender { <3,200,’x’>}, S=
{<3,200,’x’>}}
Kemudian: Kalender { <3,200,’x’>,<3,200,’x’>
}, S= {}
1
Add, menambah Idseq
200 B
1
Kalender { <3,200,’x’>,<3,200,’x’>, <4.200
Add, menambah Idseq
110 D
1
2
‘B’> }, S= {}
IdSeq=5
Kalender { <3,200,’x’>,<3,200,’x’>, <4.200
Add, menambah Idseq
300 Z
4
IdSeq=4
‘B’>, <5,110,’D’> }, S= {}
IdSeq=6
Kalender { <3,200,’x’>,<3,200,’x’>, <4.200
Salin 2 perintah terakhir
‘B’> , <5,110,’D’>,<6,300,’Z’> }, S= {}
Kalender { <3,200,’x’>,<3,200,’x’>, <4.200
‘B’ , <5,110,’D’>,<6,300,’Z’> ,
<5,110,’D’>,<6,300,’Z’> }, S= {}
converted by Web2PDFConvert.com
4. Contoh Input dan Output
Kasus Input-1
1
120 A
1
10 C
1
200 x
3
0
2
2
4
1
1
200 B
1
110 D
1
300 Z
4
2
9
Kasus Output -1
Welcome
1 120 A
2 10 C
3 200 x
3 200 x
3 200 x
4 200 B
5 110 D
6 300 Z
5 110 D
6 300 Z
Stack kosong
converted by Web2PDFConvert.com
6. Struktur data yang harus anda definisikan dalam bahasa C
/* konstanta yang diperlukan : Nmax adalah kapasitas Stack S dan Kalender*/
/* Ncommand adalah kapasitas tabel penyimpan banyaknya Command */
#define NMAx 100
#define Ncommand 10
typedef struct {
int Tanggal;
char memo; } data;
typedef struct { int Id;
data d } entri;
typedef struct { int perintah;
data d; } cmd;
/* TRF adalah array of string*/
/* Kalender adalah Queue of <id,data>. Selain Add dan delete , anda harus mengimplementasikan
sebuah prosedur “delete†tanpa menghapus elemen TAIL, hanya menyalin saja */
/* S adalah Stack of cmd */
Setoran :
Anda hanya diminta mengerjakan kuis ini untuk soal versi-o, dan menyetor semua file lengkap untuk persoalan ini. ADT yang anda pakai
harus lengkap header file dan bodynya.
Soal ini hanya akan dinilai outputnya berdasarkan eksekusi semua file yang anda submisi.
converted by Web2PDFConvert.com