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 #3


February 27th, 2009 | by rosihanari |


Jual kaos

Saya lanjutkan kembali pembahasan soal-soal olimpiade komputer tingkat provinsi tahun 2005. Ada tambahan 2 soal dan pembahasannya lagi dari saya. Mudah-mudahan bermanfaat bagi Anda sekalian yang membutuhkan referensi.

Soal ke-5

Diberikan program Pascal berikut ini:

var k, j : integer;
begin
   j := 0;
   for k := 1 to 10 do
   begin
      inc(k);
      inc(j, k);
   end;
   write(j);
end.

Apa output dari program di atas?
a. 30
b. 38
c. 40
d. 42
e. 55

Pembahasan:

Dalam program di atas terdapat function inc(). Wah function apaan tuh? Function ini adalah untuk increment disingkat ‘inc’. Apa maksud dari inc(k)? Maksudnya ekuivalen dengan k := k + 1. Sedangkan inc(j, k) ekuivalen dengan j := j + k.

OK deh… kita sudah tahu sekarang apa maksud function tersebut. Now let’s check it out!! Kita akan analisis setiap langkah per langkah program di atas.

Step 1: j = 0
Step 2: (masuk for) k = 1
Step 3: inc(k) -> k := k + 1 -> k := 1 + 1 = 2
Step 4: inc(j, k) -> j := j + k -> j := 0 + 2 = 2
Step 5: (masuk for) k = 3
Step 6: inc(k) -> k := 3 + 1 = 4
Step 7: inc(j, k) -> j := 2 + 4 = 6
Step 7: (masuk for) k = 5
Step 8: inc(k) -> k := 5 + 1 = 6
Step 9: inc(j, k) -> j := 6 + 6 = 12
.
.
.

Sampai kapan proses loopingnya berjalan? proses looping berjalan apabila nilai k sudah sama dengan 10.

Nah… dengan melihat pola perhitungan j pada setiap iterasi, maka kita bisa simpulkan bahwa pada prinsipnya secara keseluruhan nilai j diperoleh dari hasil penjumlahan: j = 0 + 2 + 4 + 6 + 8 + 10 = 30. Apabila sudah kelihatan pola (pattern) perhitungannya, maka tidak usah dirunut untuk setiap iterasinya. Terlalu lama dan buang-buang waktu saja :-)

Sehingga begitu looping selesai, nilai j = 30 (A).

Soal ke-6

Apakah output dari program berikut ini?

var s : string[12];
begin
   s := 'setia';
   writeln('#', s, '#');
   s := s + ' sampai akhir ';
   writeln('#', s, '#');
end.

a. #setia# (kemudian terjadi runtime error)
b. #setia         #
    #setia sampai#
c. #setia#
    #setia sampai akhir#
d. #setia#
    #setia sampai#
e. #setia#
    #sampai akhir#

Pembahasan:

Apabila kita analisis program di atas, s adalah variabel bertipe data string dengan panjang karakternya maksimum 12. Nilai awal s adalah string ‘setia’ (panjang 5 baris). Berarti masih ada sisa ruang kosong untuk string s sebanyak 7 buah. Ingat… ruang kosong di sini bukan berisi spasi, tapi null karakter. Sehingga apabila dicetak writeln('#', s, '#'); tetap akan muncul ‘#setia#’ dan bukan ‘#setia       #’.

Selanjutnya pada baris berikutnya s yang lama ditambah dengan string ‘ sampai akhir ‘ (14 karakter termasuk spasi). Lho emang bisa string dijumlah dengan string? Runtime error donk jadinya? he…3x di sini makna plus bukan berarti dijumlah tapi penggabungan string. Operator + dapat diberikan pada string. Tapi, jangan coba-coba iseng untuk menggunakan operator -, * atau / pada operasi string. Komputernya bisa error. :-)

Sehingga string s yang baru adalah ‘setia’ + ‘ sampai akhir ‘. Trus… hasilnya apa dong? apakah ‘setia sampai akhir’? Eit.. tunggu dulu, berapa jumlah kapasitas karakter yang bisa dimuat pada s? Oiya… cuman ada 12 karakter saja. Dengan demikian hasilnya adalah ‘setia sampai’ (12 karakter).

Berikutnya cetak writeln('#', s, '#'); dan hasilnya adalah ‘#setia sampai#‘. Dengan demikian hasilnya adalah D.


Kata kunci: komputer - olimpiade - pembahasan -


 

Komentar Anda ...