Anda di halaman 1dari 6

Materi Persiapan Olimpiade Sains Bidang Komputer

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’));

var var i, j : byte;


I:integer; begin
begin for i:= 1 to 3 do
I:=2; begin
Case I of for j:=3 downto 1 do
1,3,5,7,9: writeln(‘Ganjil’); write(Data[i,j]):
2 : writeln(‘Prima genap’); writeln;
0,10 : writeln(‘Normal’); end;
else writeln(‘Tidak normal’); end.
end;
end. Apa keluaran program di atas ?
(A) Prima genap (D) Normal (A) 112 (C) 211 (E) 124
(B) Normal Prima genap 224 422 124
(C) Prima genap (E) Prima genap 448 844 248
Normal Tidak normal (B) ‘1’’1’’2’ (D) ‘2’’1’’1’
‘2’’2’’4’ ‘4’’2’’2’
Jawab: (A) ‘4’’4’’8’ ‘8’’4’’4’
Struktur kendali case akan segera keluar untuk menjalankan statement berikutnya
setelah menemukan nilai yang tepat. Jadi, jawabannya adalah Prima genap Jawab: (C)
>> Pseudocode berikut untuk Soal 12 dan Soal 13 << Proses kerja dari program di atas adalah sebagai berikut.
write(Data(1,3));
var I,j,k:integer; write(Data(1,2));
L:byte; write(Data(1,1));
writeln;
begin write(Data(2,3));
i:=3; write(Data(2,2));
write(Data(2,1));
j:=4;
writeln;
k:=32; write(Data(3,3));
L:=0; write(Data(3,2));
{If – 1 } write(Data(3,1));
if i + j and k = 0 then writeln;
writeln(‘Betul’) Sehingga output yang didapat adalah
else 211
writeln(‘Salah’); 422
{If – 2 } 844
if (i = 2) and (j < i) or (k > i) then Jadi, jawabannya adalah
writeln(‘Betul’) 211
else 422
writeln(‘Salah); 844
{If – 3}
if not L in [1..120] then
writeln(‘Betul’)
else
writeln(‘Salah’);
end.

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.

Output dari program di atas adalah:


var
A,B:string;
C:string[10];
(A) [1,2,3,4,5] (C) [5] (E) []
(B) [1,3,5] (D) [1,3] begin
A:='TOKI MEMANG';
Jawab: (C) B:='HEBAT';
C:=A+B;
Statement di bawah ini if (Pos(B)>0) then
setint:=[1]; begin
setint:=setint+[3]; writeln('A');
setint:=[5]; end else
Akan membuat setint berisi [5] saja. Pada statement berikutnya: writeln('B');
for i:=1 to 5 do end.
begin
if (i in setint) then continue else setint:=[i]; Apa yang terjadi jika program di atas dijalankan?
end;
Akan membuat setint berisi nilai terakhir dari i yaitu 5. Jadi, jawabannya adalah [5]. (A) Huruf ‘A’ tercetak (D) Terjadi error
Soal-soal Prosedur dan Fungsi (B) Huruf ‘B’ tercetak (E) Tidak bisa di-compile
(C) Tidak dapat dipastikan
Soal 17
Jawab: (E)
Perhatikan program berikut:
Kesalahan pertama yang akan ditemui program adalah pada function Pos.
var s:string; Deklarasi : Function Pos (Substr : String; S : String) : Integer;
Keterangan : function pos akan menghasilkan urutan atau posisi Substr di S. Jika
begin
s:='TOKI GO GET GOLD!'; tidak ditemukan, maka akan menghasilkan 0.
delete(s,1,length(s)-12); Pada program, function Pos hanya terdiri dari 1 parameter sehingga program tidak
writeln(s); akan dapat dijalankan. Jadi, jawabannya adalah Tidak bisa di-compile.
end.
Soal 20
Apa keluaran program di atas?
Perhatikan potongan program berikut :
(A) GO GET GOLD! (D) TOKI GO GET begin
(B) GO GET GOLD (E) TOKI GO GE writeln(round(frac(3.7)));
end.
(C) GET GOLD!
Apa keluaran program di atas?
(A) 0 (B) 1 (C) 2 (D) 3 (E) 4

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.

(A) St := Chr(60); Soal 23


Sulap(St); Bagaimana output program di atas bila inputnya 42?
(B) St :=’KECIL’; (A) 7*3*2=42 (D) 2*3*7=47
Sulap(St); (B) Bilangan prima (E) Salah semua
(C) St := Chr(45) + Chr(65); (C) =42
Sulap(St);
(D) Sulap(‘Besar’); Jawab: (D)
(E) Semua ekspresi di atas benar Proses kerja dari program di atas adalah sebagai berikut.
Find(42,0)
Jawab: (D) B ← 42
R←6
Sebuah prosedur dengan parameter masukan string tidak dapat menerima langsung J←2
parameter masukan berupa string, melainkan sebuah variabel bertipe string yang (J<=R) and (B mod J = 0) ⇒ J ← 2 {tetap}
sudah memiliki nilai string. Seperti opsi a, b, dan c. Jadi, jawabannya adalah J <= R ⇒ output = 2*
Sulap(‘Besar’); Find(21,1)
B ← 21
Soal-soal Kasus / Membaca Program R←5
J←2
Soal 22 (J<=R) and (B mod J <> 0) ⇒ J ← inc(J) ⇒ 3 {berubah}
(J<=R) and (B mod J = 0) ⇒ J ← 2 {tetap}
Diberikan fungsi berikut: J <= R ⇒ output = 3*
function apaitu(a: integer; b: integer): integer; Find(7,2)
var B←7
count : integer; R←3
begin J←2
count := 0; (J<=R) and (B mod J = 0) ⇒ J ← 2 {tetap}
count := count + 1;
if (a > b) then apaitu := apaitu(b, a)
J > R {proses lanjut, belum ada output}
else if (a = 0) then apaitu := b I > 0 ⇒ output = 7=42
else apaitu := apaitu (b mod a, a) Jadi, jawabannya adalah 2*3*7=42
end;
Soal 24
Jika fungsi tersebut dipanggil dengan
writeln(apaitu(1001, 1331)); Bagaimana output program di atas bila inputnya 23?
berapakah yang dicetaknya? (A) =23 (D) =23 Bilangan prima!
(A) 10 (B) 11 (C) 12 (D) 13 (E) 14 (B) Bilangan prima! (E) Salah semua
Jawab: (B) (C) 23*1 = 23
Proses kerja dari program di atas adalah sebagai berikut.
Jawab: (B)
apaitu(1001,1331) Proses kerja dari program di atas adalah sebagai berikut.
b>a⇒apaitu(330,1001) Find(23,0)
b>a⇒apaitu(671,330)
B ← 23
a>b⇒apaitu(330,671)
b>a⇒apaitu(341,330) R←5
a>b⇒apaitu(330,341) J←2
b>a⇒apaitu(11,330) (J<=R) and (B mod J <> 0) ⇒ J ← inc(J) ⇒ 3 {berubah}
b>a⇒apaitu(0,11) ⫶
b>a⇒apaitu(11,0) (J<=R) and (B mod J <> 0) ⇒ J ← inc(J) ⇒ 6 {berubah}
a=0⇒apaitu=11 (J>R) and (B mod J <> 0) ⇒ J ← 6 {tetap}
Jadi, jawabannya adalah 11. J > R {proses lanjut, belum ada output}
I = 0 ⇒ output = Bilangan Prima!
Jadi, jawabannya adalah Bilangan prima!

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]);

(A) Judul program (program Statistik) terlalu panjang,


end;

maksimum 8 karakter (misalnya: program Stat) begin


for c:='A' to 'Z' do
(B) Procedure Readln (pada baris terakhir program J[c]:=0;
sebelum end.) tidak boleh dipanggil tanpa parameter.
Kal:='PASAR';
HH(Kal);
Jadi seharusnya: Readln(I); for c:='A' to 'Z' do
if J[c]>0 then
(C) Statement for dengan variabel sama tidak boleh diulangi write(c,J[c],' ');
dua kali. Seharusnya dideklarasikan variabel lain, misalnya writeln;
Kal:='RAYA';
var I: Integer untuk for yang kedua. HH(Kal);
for c:='Z' downto 'A' do
(D) Deklarasi array salah, semestinya: if j[c]>0 then
var Amatan: array[1..5] of Integer; write(c,J[c],' ');
writeln;
(E) Nama variabel seperti RataRata tidak valid, seharusnya end.
Ratarata
Soal 28
Jawab: (D)
Bila terdapat kesalahan yang menyebabkan program sama
Deklarasi dari array adalah:
type identifier=array[tipe_indeks] of tipe_data
sekali tidak dapaf dijalankan, sebutkan pada baris berapa, dan
di mana tipe_indeks adalah tipe data ordinal. bagaimana perbaikannya?
Jadi, jawabannya adalah
Deklarasi array salah, semestinya: var Amatan: array[ 1..5] of Integer;. (A) Kesalahan semacam ini tidak ada
Soal 26 (B) Baris 14, seharusnya ditulis
If [m] in [‘A’..’Z’] then
Setelah Anda memberi saran demikian, ternyata Joni masih (C) Baris 8 seharusnya ditulis var i: char;
belum bisa meng-compile programnya. Apa sebabnya? (D) Baris 15, seharusnya ditulis inc(J[m]);
(A) setiap variabel harus dideklarasikan dengan keyword var (E) Index array hanya boleh berupa angka. Jadi deklarasi
sendiri-sendiri. variabel seharusnya ditulis:
Misalnya: const A = 1; Z = 26;
var J: array[A..Z] of Byte;
var Jumlah: Integer; c: Byte;
var RataRata:Integer; Kal: String;
var I:Integer; dan semua konstanta karakter dalam perintah for harus
(B) Variabel RataRata tidak harus bertipe Real diganti, misalnya: for c:= A to Z do dan seterusnya.
(C) Semua variabel, kecuali I seharusnya adalah Real, tidak
Jawab: (D)
boleh Integer
Variabel J adalah variabel dengan tipe data array yang mempunyai indeks [‘A’..’Z’].
(D) Pemisah antara parameter dalam Write dan Writeln Dalam program diberikan indeks berupa bilangan bulat, yaitu i. Hal ini akan
harus titik koma, bukan koma, Misalnya menghasilkan pesan kesalahan type mismatch. Jadi, jawabannya adalah
Writeln(‘Jumlah = ‘;Jumlah); Baris 15, seharusnya ditulis
(E) Semua alasan di atas salah
inc(J[m]);

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

Anda mungkin juga menyukai