Free Ebook Tutorial from Rosihan Ari's Blog

Ebook Javascript | Ebook PHP | Ebook AJAX | Ebook CSS | Ebook FPDF | Ebook Wordpress | Ebook Java SE




Pembahasan Soal Olimpiade Komputer Provinsi 2005 #2


February 25th, 2009 | by rosihanari |


Jual kaos

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 :-)


Kata kunci: komputer - olimpiade - pembahasan -


 

Komentar Anda ...