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


April 15th, 2009 | by rosihanari |


Jual kaos

Wah lama gak posting lagi tentang pembahasan olimpiade komputer. Maaf ya Bapak Ibu pembimbing olimpiade yang begitu antusias menantikan postingan saya di blog ini.

OK.. sekarang kita lanjutkan pembahasan soal olimpiade komputer tingkat provinsi berikutnya.

Soal No. 7

Apa output program ini?

begin
   writeln(80+0:0);
   writeln(80*1:0);
   writeln(80/1:0);
   writeln(80-0.0:0);
end.
a. 80       b. 80     c. 80        d. 8.0E+01    e. Terjadi error
   80          80        8.0E+01      8.0E+01
   8.0E+01     80        8.0E+01      8.0E+01
   8.0E+01     80        80           8.0E+01

Pembahasan:

OK kita mulai dari writeln() yang pertama dahulu. Dalam writeln tersebut akan dicetak 80+0:0. Hasil yang dicetak adalah hasil dari penjumlahan 80 + 0. Kedua bilangan adalah bertipe integer. Kita tahu bahwa integer + integer, hasilnya adalah integer dalam hal ini sama dengan 80 (integer).

Selanjutnya perintah kedua untuk menampilkan hasil perkalian dari 80 (integer) x 1 (integer) = 80 (integer). Sehingga yang ditampilkan juga 80.

Perintah ke tiga menampilkan hasil dari 80 (integer) / 1 (integer). Kita tentu tahu bahwa 80/1 = 80. Namun ingat bahwa operator / selalu menghasilkan bilangan real, meskipun hasilnya bulat. Dengan demikian hasil pembagian di sini (80) adalah bertipe real. Tanpa pengaturan format di layar, bilangan real 80 akan ditampilkan sebagai 8.0E+01.

Nah… perintah ke empat, akan menampilkan hasil dari 80 (integer) dikurangi 0.0 (bilangan 0 dalam tipe real). Kita tentu tahu bahwa integer – real akan menghasilkan real. Sehingga perintah keempat ini akan menghasilkan 80 dalam bentuk real atau 8.0E+01.

Dengan demikian jawaban yang benar adalah A

Soal No. 8

Dalam program di bawah ini, baris ke berapakah yang harus diubah untuk membuat program dapat berjalan dengan baik?

program pembuat string;            {baris 1}
const st = string[5] : 'pascal';   {baris 2}
begin
    writeln(St)                    {baris 4}
end.

a. baris 1
b. baris 2
c. baris 1 dan 2
d. baris 4
e. baris 1, 2, dan 4

Pembahasan:

Untuk menjawab soal ini, kita analisis satu persatu pada setiap barisnya. Baris 1 digunakan untuk menuliskan nama program. Tentu kita tahu bahwa nama program adalah salah satu dari identifier. Sedangkan syarat penulisan identifier adalah tidak boleh mengandung spasi. Coba lihat pada baris 1 tersebut! Bagaimana bentuk nama programnya? aha… ada spasi bukan. So.. baris 1 musti diubah.

Now.. let’s check baris ke-2. Baris kedua ini dimaksudkan untuk menulis sebuah konstanta bertipe. Perlu kita ketahui bahwa aturan penulisan konstanta bertipe adalah

const namakonstanta : tipe data = value;

Coba lihat baris ke-2 di atas! Sudah sesuaikah cara penulisannya dengan aturannya? Aha… baris ke-2 ini juga perlu diperbaiki.

Sekarang kita lihat baris ke-3. Baris ini dimaksudkan untuk menampilkan value dari konstanta ‘st’. Lho.. tapi kok huruf ‘s’ nya ditulis dengan huruf besar? bukankah di const konstanta ‘st’ ini ditulis dalam huruf kecil semua? he… 3x perlu kita tahu bahwa dalam pascal, besar kecilnya huruf dalam nama identifier itu tidak ada pengaruhnya alias dianggap sama. Mungkin.. ada di antara Anda yang beripikiran lain. Lho.. kok writeln() nya gak dikasih titik koma? Salah donk? nah… perlu kita tahu juga bahwa dalam Pascal, perintah atau statement terakhir sebelum END. boleh tidak dikasih tanda titik koma. Dengan demikian untuk baris ke-4 ini tidak ada masalah.

So… untuk soal ini jawabannya adalah C.

Soal No 9

Diberikan program Pascal berikut ini:

var bil : string; bit : integer;
begin
    readln(bit);
    while(bit <> 0) do
    begin
       if bit and 1 = 1 then bil := '1' + bil
       else bil := '0' + bil;
       bit := bit shr 1;
    end;
    writeln(bit);
    readln;
end.

Apa output program di atas jika inputnya adalah 60?
a. runtime error
b. 11110
c. 60
d. 0
e. tidak ada output

Pembahasan:

Waduh… ketemu perulangan (looping) lagi… pusing…. Wah nyerah deh!
Eit… jangan nyerah dulu, kadang soal yang tampak rumit pengerjaannya bahkan lebih mudah daripada soal yang kelihatannya mudah :-) Coba kita analisis bentar… gak pake lama kok. Tenang aja :-) .

OK.. di dalam pilihan jawaban terdapat pilihan jawaban ‘runtime error’. Sesuai tips yang pernah saya berikan pada artikel sebelumnya, coba cek dulu ada tidaknya kesalahan sintaks atau rule yang dilanggar dari penulisan program. Apabila dicek, maka tidak ada kesalahan sintaks maupun aturan penulisan perintah yang dilanggar. Oleh karena itu tidak mungkin jawabannya A.

Selanjutnya selain ‘runtime error’ terdapat pula option ‘tidak ada output’. Kita cek juga option ini, benar tidak bahwa program tidak mengoutputkan sesuatu. Indikasi bahwa program terdapat outputnya, di dalamnya pasti terdapat perintah write() atau writeln(). Nah.. bila diperhatikan, program di atas memiliki perintah writeln(). Dengan demikian jawabannya juga tidak mungkin yang E.

Waduh… berarti ini benar-benar harus masuk ke looping nya nih, dan kita uji satu-persatu :-( (

Eit.. jangan patah semangat dulu, siapa tahu ada celah logika yang bisa kita manfaatkan untuk mengambil kesimpulan secara cepat tanpa harus menelusuri setiap proses satu persatu.

OK.. sekarang saya tanya kepada Anda: ‘berapakah nilai variabel bit pertama kali?’.. 60 bukan. OK selanjutnya masuk ke looping yah… Apa syaratnya looping tetap dijalankan? ya… syaratnya jika nilai ‘bit’ tidak sama dengan 0. Atau dengan kata lain looping akan berhenti jika nilai ‘bit’ = 0. OK.. berarti dengan ini kita bisa menjawab pertanyaan : ‘Berapakah nilai bit setelah selesai looping?’. ya.. jawabannya adalah 0.

Trus.. saya tanya Anda lagi: ‘variabel apa yang mau ditampilkan outputnya?’ ya… dari program jelas tampak variabel yang mau ditampilkan adalah ‘bit’. Pertanyaan berikutnya: ‘Jadi… berapakah nilai bit saat ditampilkan?’ tentu Anda semua menjawab dengan berteriak keras… “NOOLLL” :-)

Dengan demikian jawaban dari soal di atas adalah D.


Kata kunci: komputer - olimipiade - pembahasan - soal -


 

Komentar Anda ...