About Me

Hai, saya Rosihan Ari Yuana. Saya sehari-hari adalah mengajar di Universitas Sebelas Maret.

Bidang riset saya tentang adaptive learning, computer aided learning, dan datascience

Selain itu, saya juga seorang penulis buku dan blogger.

More about me...

Pembahasan Soal Olimpiade Komputer Provinsi 2005 #2

Mumpung ada waktu longgar, posting lagi ah artikel tentang pembahasan soal olimpiade komputer tingkat provinsi tahun 2005. Dalam artikel sebelumnya sudah saya posting artikel yang sama untuk #1.

Soal ke-3

Diketahui program Pascal berikut ini


var s1, s2, s : string; i, ins : integer;
begin
s1 := ‘TOKI’;
s2 := ‘2005’;
for i:=1 to length(s1) do if (ord(s1) < 10) then ins := 1; insert(s2, s1, ins); s := s1 + s2; writeln(s); end.

Outputnya adalah:
a. runtime error
b. TOK2005I2005
c. tidak ada output
d. 2005TOKI2005
e. 200TOKI5TOKI

Pembahasan:

Aduh… baru lihat programnya saja sudah pusing. Tapi.. eh, jangan pusing dulu. Coba baca kembali tips dan trik untuk mengerjakan soal olimpiade yang pernah saya posting sebelumnya. “Kalau di option jawabannya ada Runtime Error, maka cek semua rule dan aturan sintaksnya, siapa tahu ada kesalahan sehingga kita tidak perlu merunut semua proses dalam program“. Nah… kita cek tips dan trik tersebut karena dalam option terdapat Runtime Error. OK let’s check it out !!! 🙂

Baris 1… gak ada masalah, baris 2… gak ada masalah, baris 3, 4 juga gak ada masalah. Baris 5… ada masalah gak ya? di situ ada function ord(). Function ord(X) akan mengembalikan bilangan bulat yang menunjukkan ordinalitas dari X yang bertipe data ordinal. Perhatikan perintah ord(s1) pada program. Di situ terlihat bahwa ‘s1’ adalah bertipe data string.

Perlu diketahui bahwa tipe data ordinal adalah tipe data yang terurut valuenya. Tipe data yang termasuk ordinal antara lain integer (dan turunannya: shortint, longint, word, byte), boolean dan juga char.

Eh… btw, kok tipe data real tidak termasuk ordinal ya? Ya.. karena bilangan riil itu kan tidak dapat dinyatakan dalam bentuk urutan. Berapakah bilangan riil setelah 1? apakah 2? apakah 1.5? apakah 1.05 atau apakah 1.000001? tidak bisa bukan? karena di antara dua bilangan riil terdapat bilangan riil yang lain. Dengan demikian bilangan riil tidak bisa disajikan secara terurut. Nah.. di sini string juga bukan termasuk tipe data ordinal sehingga program di atas menimbulkan error.

Soal ke-4

Diberikan program berikut ini


var a, b, c, n, i : integer; bil : array [1..100] of integer;
begin
readln(n);
a := 1;
for i:=1 to n do
begin
c := a + b;
bil[i] := c;
a := b;
b := c;
end;
writeln(n);
end.

Jika diberikan inputnya adalah 5, maka outputnya adalah:

a. 0
b. 13
c. 2 3 5 8 13
d. 5
e. runtime error

Pembahasan:

AWAS… di pilihan jawaban ada runtime error. Coba dicek dulu sintaks dan rulenya. Hmm…. kayaknya gak ada yang salah nih. Wah gawat kalo gak ada yang salah, karena kita harus merunut proses jalannya program. Tapi… perlukah? Tunggu dulu, coba perhatikan program di atas. Apa yang akan dijadikan sebagai output? Yap… tepat sekali yaitu nilai dari variabel ‘n’. Di awal program nilai n ini adalah 5, karena berdasarkan soalnya nilai inputnya adalah 5, dalam hal ini 5 akan diberikan kepada n karena ada statement readln(n);

Trus… perhatikan lagi.. coba cek apakah ada kemungkinan nilai n berubah pada proses berikutnya? caranya ngecek gimana? ya… cari saja assignment yang berbentuk n := ...; Ternyata setelah dicek tidak ada. Berarti nilai n ini tidak pernah berubah, alias tetap sama dengan 5. Sehingga jawabannya adalah D.

Mudah bukan ternyata soal-soal olimpiade komputer? OK deh ini dulu yah, tunggu pembahasan berikutnya dari saya. Semoga tetap istiqomah dalam memposting hal-hal beginian 🙂

Saya seorang dosen dan peneliti di Universitas Sebelas Maret. Bidang penelitian saya tentang: adaptive learning, datascience, dan computer aided learning. Selain itu saya juga seorang blogger, serta penulis buku tentang pemrograman, dan matematika.

Leave a Reply