Tingkat Kabupaten/Kota
Suplemen #003
oleh : Baharuddin Aziz | http://baha.web.id Pemrog. Prosedural (Bag. 2)
13 Agustus 2015
Soal 6
Contoh Soal dan Pembahasan
Dengan deklarasi berikut:
Soal-soal Deklarasi type warna=(merah,kuning,hijau,biru,hitam,putih,jingga);
Soal 1 var w:warna;
W1,W2,W3:set of warna;
Manakah yang mendeklarasikan tipe enumerasi dengan tepat?
Perintah mana yang benar?
(A) type a=integer;
(A) if w in [warna] then writeln(‘ada’);
(B) type a=1..300;
(B) w:=merah;
(C) type a=(baik, jelek, buruk);
w:=w + kuning;
(D) type a=[baik, jelek, buruk];
(C) w:=[merah];
(E) type a=baik, jelek, buruk;
(D) w:=hijau;
Jawab: (C) dec(w);
type a=(baik, jelek, buruk); (E) w:=’Merah’;
Soal 2 Jawab: (D)
Tipe di bawah ini, mana yang tidak dapat melakukan operasi Variabel w merupakan variabel dengan tipe data enumerasi yang merupakan salah
satu tipe data ordinal. Karena merupakan tipe data ordinal, maka variabel w dapat
aritmatika? dioperasikan dengan fungsi atau prosedur seperti ORD, DEC, INC, PRED, dan SUCC.
Jadi, jawabannya adalah
(A) integer (C) real (E) word w:=hijau;
(B) byte (D) boolean dec(w);
dec(w) berarti nilai w diganti/diubah menjadi nilai sebelumnya pada anggota tipe
Jawab: (D) warna, yaitu kuning.
Opsi a tidak benar karena:
boolean Terjadi error ketika di-compile.
Hal tersebut karena tipe tidak dapat digunakan dalam suatu ekspresi.
Soal 3 Agar dapat di-compile, ekspersi tersebut dapat diubah menjadi:
Deklarasi prosedur manakah yang tidak dibenarkan? if w in W1 then writeln(‘ada’);
Opsi b tidak benar karena:
(A) procedure hapus; w merupakan variabel bertipe warna, bukan set of warna.
Maka dari itu, w hanya punya satu nilai bertipe warna, bukan himpunan warna.
(B) procedure hapus(s:string); Karena bukan himpunan warna, maka w tidak dapat memiliki nilai lebih dari 1.
(C) procedure hapus(var s:string); Dengan kata lain, w tidak dapat digabung dengan nilai bertipe warna.
Opsi c tidak benar karena:
(D) procedure hapus(s:string):boolean; w merupakan variabel bertipe warna, bukan set of warna.
(E) procedure hapus(var data); Maka dari itu, w hanya dapat di-assign dengan satu nilai bertime warna,
bukan satu nilai bertipe himpunan warna.
Jawab: (D) Opsi e tidak benar karena:
w merupakan variabel bertipe warna, bukan set of warna.
Untuk penulisan prosedur, tidak diperbolehkan adanya nilai kembali. Sedangkan
Maka dari itu, , w hanya dapat di-assign dengan satu nilai bertime warna,
parameter tanpa tipe data (pada opsi e), dapat dibenarkan. Jadi, jawabannya adalah
procedure hapus(s:string):boolean; bukan satu nilai bertipe string.
Soal 4 Soal 7
Deklarasi function manakah yang tidak diizinkan? Berdasarkan Soal 6, jika W1 berisi [merah,kuning,hijau]
dan variabel W2 berisi [merah,kuning,hitam], maka
(A) function density(x:real):real;
seandainya diberikan statement W3:=W1+W2, W3 akan berisi:
(B) function density(b:byte):byte;
(A) [merah,kuning,hijau,hitam]
(C) function density(var s:string):real;
(B) [merah,kuning,hijau,merah,kuning,hitam]
(D) function density(var data):byte;
(C) [hijau,hitam]
(E) function density;
(D) [merah,kuning,merah,kuning,hijau, hitam]
Jawab: (E) (E) [merah,kuning]
Untuk penulisan function , harus ada nilai kembali. Jadi, jawabannya adalah
function density; Jawab: (A)
Soal 5 Operator + pada tipe data himpunan adalah gabungan atau union. Jadi, jawabannya
adalah [merah,kuning,hijau,hitam].
Tipe variabel ekspresi manakah yang tidak dapat ditampilkan
Soal 8
dengan procedure writeln?
Berdasarkan Soal 7, jika diberikan statemen W3:=W1-W2, W3
(A) type T=Integer;
akan berisi:
(B) type T=String;
(C) type C=Char; (A) [merah,kuning,hijau,hitam]
(D) type T=(Small, Medium, Large) (B) [merah,kuning,hijau,merah,kuning,hitam]
(E) Semua valid (C) [hijau]
(D) [merah,kuning,merah,kuning,hijau, hitam]
Jawab: (D)
(E) [merah,kuning]
Opsi d adalah tipe data enumerasi. Tipe data enumerasi tidak dapat ditampilkan
dengan perintah writeln. Jadi, jawabannya adalah Jawab: (C)
type T=(Small, Medium, Large)
Operator - pada tipe data himpunan adalah operator difference, yaitu anggota W1
dikurangi anggota W2. Dengan kata lain, semua anggota W2 yang ada di W1 dihapus.
Jadi, jawabannya adalah [hijau].
Diperbarui oleh Baharuddin Aziz pada 06 September 2015, pukul 12:11 WIB Halaman 1 dari 6
Materi Persiapan Olimpiade Sains Bidang Komputer | Tingkat Kota/Kabupaten
Soal 9 Program di atas berisi tiga perintah if-then-else yang
Berdasarkan Soal 7, jika diberikan statemen W3:=W1*W2, W3 saling tidak berkaitan, masing-masing IF diberi nama IF – 1,
akan berisi: IF – 2, IF – 3.
(A) [merah,kuning,hijau,hitam] Soal 12
(B) [merah,kuning,hijau,merah,kuning,hitam] Perintah if manakah yang tidak dibenarkan:
(C) [hijau,hitam] (A) if - 1 (D) if - 1 dan if - 2
(D) [merah,kuning,merah,kuning,hijau, hitam] (B) if - 2 (E) Tidak ada if yang salah
(E) [merah,kuning] (C) if - 3
Jawab: (E) Jawab: (E)
Operator * pada tipe data himpunan adalah operator irisan. Jadi, jawabannya adalah Pada if – 1, ekspresi i + j and k adalah ekspresi matematika dengan urutan
[merah,kuning].
pengerjaan j and k kemudian ditambahkan dengan i. Ini merupakan ekspresi yang
valid dalam bahasa Pascal. Pada If – 3, ekspresi Not L akan dioperasikan terlebih
Soal-soal Input/Output dulu. Ini juga merupakan ekspresi yang valid dalam bahasa Pascal. Jadi, jawabannya
adalah Tidak ada if yang salah.
Soal 10
Perhatikan potongan program berikut ini : Soal 13
begin Pada program di atas, IF mana yang menghasilan output
writeln((10 shr 1) shl 2);
end. “Betul”?
Apa yang dihasilkan oleh program di atas? (A) if - 1 (D) if - 1 dan if - 2
(B) if - 2 (E) Tidak ada if yang menghasilkan “Betul”
(A) 18 (B) 19 (C) 20 (D) 21 (E) 22
(C) if - 3
Jawab: (C)
Jawab: (B)
Operator shr (shift right) adalah operasi pergeseran bit ke kanan dan operasi shl
(shift left) adalah operasi pergeseran bit ke kiri. Sehingga Urutan pengerjaan operator AND dan OR adalah AND akan dievaluasi terlebih dulu.
10 shr 1 = 5 (1010 shr 1 = 0101 = 5), ada penambahan satu angka 0 di MSB Pada kondisi pertama, (i = 2) and (j < i) akan menghasilkan nilai FALSE. Namun, pada
5 shl 2 = 20 (0101 shl 2 = 10100 = 20), ada penambahan dua angka 0 di LSB saat dievaluasi dengan menggunakan kondisi OR, yaitu (k>i), akan menghasilkan
Maka, jawabannya adalah 20. TRUE, sehingga yang dicetak adalah “Betul”. Jadi, jawabannya adalah if-2.
Keterangan:
MSB = most significant bit, yaitu bit dengan orde terbesar
Soal-soal Perulangan
LSB = least significant bit, yaitu bit dengan orde terkecil Soal 14
Soal-soal Struktur Kontrol Perhatikan penggalan program berikuti ni :
Soal 11 const
Data: array [1..3,1..3] of char =
Bagaimana keluaran program di bawah ini? ((‘1’,’1’,’2’),(‘2’,’2’,’4’),(‘4’,’4’,’8’));
Diperbarui oleh Baharuddin Aziz, pada 06 September 2015, pukul 12:11 WIB. Halaman 2 dari 6
Materi Persiapan Olimpiade Sains Bidang Komputer | Tingkat Kota/Kabupaten
Soal 15 Jawab: (A)
Perhatikan program dibawah ini: Procedure delete
Deklarasi : procedure delete(var s: string; index: integer; count: integer);
type data=set of char; Keterangan : procedure delete akan menghapus S sebanyak count karakter, dimulai
var setchar:data;
s:string; dari posisi Index.
i:integer; Function length
Deklarasi : function length (s : string) : integer;
begin Keterangan : Length menghasilkan panjang dari S, bernilai antara 0 sampai dengan
setchar:=[]; 255. Jika S tidak berisi apa-apa maka akan menghasilkan 0.
readln(s); Statement delete(s,1,length(s)-12) akan menghapus s dari posisi 1 sebanyak
for i:=1 to length(s) do
panjang s, yaitu 17-12 = 5. Sehingga yang dihapus adalah karakter ‘TOKI ‘ dan s akan
begin
if not(s[i] in setchar) then bernilai GO GET GOLD!.Jadi, jawabannya adalah GO GET GOLD!.
begin
setchar:=setchar+[s[i]]; Soal 18
write(s[i]);
end; Perhatikan penggalan program berikut:
end;
writeln; var i,k: integer;
end.
begin
Jika input 'To be or Not To be that is the question', i:=5; k:=0;
k:=trunc(sqrt(i))+1;
output dari program di atas adalah … writeln(k);
end.
(A) ‘To berNthaisqun.' (D) ‘T N.'
Apa keluaran program di atas?
(B) ‘To berNhaisqu` (E) ‘OBERTHAISQUN’
(C) ‘to@bernhaisquN' (A) 3 (D) 0
(B) 2.24 (E) program tidak dapat dijalankan
Jawab: (B)
(C) 2
Yang perlu diperhatikan adalah bahwa tidak ada anggota yang sama dalam sebuah
set (himpunan). Jadi, jawabannya adalah ‘To berNthaisqun.'. Jawab: (A)
Soal 16 Fungsi sqrt
Deklarasi : Function Sqrt (X : Real) : Real;
Gunakan program berikut untuk menjawab pertanyaan: Keterangan : menghasilkan akar pangkat dua dari x, di mana x harus positif
Fungsi trunc
type data=set of byte;
Deklarasi : Function Trunc (X : Real) : Longint;
var setint:data;
i:integer; Keterangan : menghasilkan bilangan bulat dari X, akan selalu lebih kecil atau sama
dengan X.
begin Sqrt(5) akan menghasilkan 2.23
setint:=[1]; Trunc(2.23) akan menghasilkan 2
setint:=setint+[3]; Sehingga k:=trunc(sqrt(i))+1; akan menghasilkan 3.
setint:=[5];
Jadi, jawabannya adalah 3.
for i:=1 to 5 do
begin
if (i in setint) then continue else setint:=[i]; Soal 19
Mengacu pada program berikut:
end;
end.
Diperbarui oleh Baharuddin Aziz, pada 06 September 2015, pukul 12:11 WIB. Halaman 3 dari 6
Materi Persiapan Olimpiade Sains Bidang Komputer | Tingkat Kota/Kabupaten
Jawab: (B) >> Pseudocode berikut untuk Soal 23 dan Soal 24 <<
Fungsi frac var Bil:Integer;
Deklarasi : function frac (X : real) : longint;
procedure Find(B:Integer;I:Integer);
Keterangan : memunculkan pecahan suatu bilangan real dalam desimal
var J,R:Integer;
Fungsi round begin
Deklarasi : function round (X : real) : longint; R:=Round(sqrt(B));
Keterangan : membulatkan bilangan X, yang mungkin lebih besar atau lebih kecil J:=2;
dari X. while (J<=R) and (B Mod J<>0) do
Frac(3.7) akan menghasilkan 0.7 inc(J);
Round(0.7) akan menghasilkan 1
if J<=R then
begin
Jadi, jawabannya adalah 1. Write(J,'*');
Soal 21
Find(B div J, I+1);
end
else if I>0 then
Diketahui deklarasi fungsi dan variabel sebagai berikut: Writeln(B,'=',Bil)
else
var St: String;
Writeln('Bilangan Prima!');
end;
procedure Sulap(var S: String);
begin
begin
if S = 'Kecil’ then S :=’kecil’ else
Write('Masukkan bilangan : ');
if S = ‘Besar’ then S :=’BESAR’; Readln(Bil);
end;
Find(Bil,0);
Di antara potongan program berikut, manakah yang salah?
end.
Diperbarui oleh Baharuddin Aziz, pada 06 September 2015, pukul 12:11 WIB. Halaman 4 dari 6
Materi Persiapan Olimpiade Sains Bidang Komputer | Tingkat Kota/Kabupaten
>> Deskripsi berikut untuk Soal 25 s.d. Soal 27 << Soal 27
Joni, petugas statistik yang baru saja belajar Pascal. Mencoba Jika masukan adalah 7, 8, 9, 10 dan 5, lalu Joni mengganti
membuat program perata-rata sebagai berikut operator “/” dengan "div" pada baris ke-17 program tersebut.
Program Statistik; Apa akibatnya?
var Amatan:array[5] of integer;
Jumlah:Integer; (A) program tidak mau di-compile karena operator div tidak
RataRata:Integer;
I:Integer; dapat digunakan di situ
(B) nilai rata-ratanya menjadi 7
begin
for I:=1 to 5 do (C) nilai rata-ratanya menjadi 7.8
begin
Write('Amatan ke-',I,' : '); (D) nilai rata-ratanya menjadi 8
Readln(Amatan[I]); (E) nitai rata-ratanya menjadi 0
end;
Jumlah:=0;
For I:=1 to 5 do
Jawab: (B)
begin Perintah div adalah operator pembagian yang menghasilkan pembulatan ke bawah.
Jumlah:=Jumlah+Amatan[I]; Jadi, jawabannya adalah nilai rata-ratanya menjadi 7.
RataRata:=Jumlah/5;
Writeln('Jumlah = ',Jumlah);
Writeln('Rata-rata = ',RataRata);
>> Pseudocode berikut untuk Soal 28 s.d. Soal 30 <<
end; uses crt;
Readln;
end. var j:array['A'..'Z'] of Byte;
c:char;
Gunakan program yang dibuat oleh Joni ini untuk menjawab Kal:string;
soal-soal berikut. procedure HH(S:String);
Soal 25 var i:integer; {baris-8}
m:char;
Ketika si Joni mencoba menjalankan program tersebut, begin
for i:= 1 to length(S) do
ternyata compiler menunjukkan sebuah pesan kesalahan yang begin
m:=S[i]; {baris-13}
membuat ia kebingungan. Tahukah Anda kesalahan pertama if m in ['A'..'Z'] then {baris-14}
yang dibuat Joni? end;
inc(J[i]);
Jawab: (C)
Dalam program diberikan instruksi RataRata:=Jumlah/5 yang berarti variabel
RataRata harus bertipe Real. Karena operator / hanya dikenal oleh variabel yang
bertipe real. Jadi, jawabannya adalah Semua variabel, kecuali I seharusnya adalah
Real, tidak boleh Integer.
Diperbarui oleh Baharuddin Aziz, pada 06 September 2015, pukul 12:11 WIB. Halaman 5 dari 6
Materi Persiapan Olimpiade Sains Bidang Komputer | Tingkat Kota/Kabupaten
Soal 29
Dengan perbaikan seperti nomor sebelumnya (kalau ada),
maka program bisa dijalankan. Apakah hasil dari program
tersebut?
(A) A2 P1 R1 S1 (C) A2 P1 R1 S1 (E) A2 P1 R1 S1
A4 P1 R2 Sl Yl Y1 R2 A4 Yl Sl R2 P1 A4
(B) A2 P1 R1 S1 (D) P1 A2 Sl R1
Y1 R1 A2 Y1 A4 R2
Jawab: (E)
Proses kerja dari program di atas adalah sebagai berikut.
Setelah potongan kode:
Kal:=’PASAR’;
HH(Kal);
for c:='A' to 'Z' do
if J[c]>0 then
write(c,J[c],' ');
didapat output : A2 P1 R1 S1
Lalu, setelah potongan kode:
Kal:=’RAYA’;
HH(Kal);
for c:='Z' downto 'A' do
if j[c]>0 then
write(c,J[c],' ');
didapat output : Y1 S1 R2 P1 A4
Jadi, jawabannya adalah
A2 P1 R1 S1
Y1 S1 R2 P1 A4
Soal 30
Tindakan apakah yang dilakukan oleh prosedur HH ketika
dipanggil oleh baris 23 program di atas, dengan string S berisi
kata “PASAR"?
(A) Menghitung frekuensi kemunculan huruf-huruf alfabet
dan menyimpannya dalam array J
(B) Mengumpulkan huruf-huruf alfabet yang muncul lebih
dari satu kali ke dalam array J
(C) Mencatat letak setiap huruf alfabet ke dalam array J
(D) Menentukan huruf yang paling sering dan paling jarang
muncul dalam array J
(E) Mengurutkan huruf-huruf menurut urutan alfabet dari
yang terkecil sampai yang terbesar.
Jawab: (A)
Menghitung frekuensi kemunculan huruf-huruf alfabet dan menyimpannya dalam
array J
Daftar Pustaka
[1] Tim Pembina Olimpiade Sains Bidang Komputer. Kisi-Kisi
dan Materi Ujian Olimpiade Sains Bidang Informatika/
Komputer. Tim Olimpiade Komputer Indonesia, 2009.
[2] Yohanes Nugroho - Tim Pembina TOKI. Konsep Dasar
Pemrograman Prosedural. TOKI Pusat.
Diperbarui oleh Baharuddin Aziz, pada 06 September 2015, pukul 12:11 WIB. Halaman 6 dari 6