Anda di halaman 1dari 16

ContohcontohdanPembahasan MateriUjiOlimpiadeSainsBidangInformatika/Komputer

Versi:(alpha070519) Oleh:SuryanaSetiawan,KoordinatorPembinaTOKIPusat

A.Pengantar
1.OlimpiadeSainsNasional Dalam beberapa tahun terakhir Departemen Pendidikan Nasional telah meyelenggarakanOlimpiadeSainsNasional(OSN)yangdiantaranyaterdapatbidang Informatika.PemilihanpesertayangakanbertandingdiOSNdilakukanmelaluiseleksi bejenjangdanserentakdiseluruhIndonesia,yaitu: tingkatkabupaten/kota,kemudian tingkatprovinsi. Tahun2006,untukbidanginformatikaditingkatprovinsitercatatdiikuti1480siswa pesertaseleksisementaraditingkatkabupaten/kotatentunyasekiankalilebihbanyak lagi(estimasikasaradadiatas8ribuansiswa1).Hasildariseleksitingkatpropinsi menentukansiapayangakanmenjadisalahseorangdarike90siswapesertaOSN. Selainsebagaiajangprestasitingkatnasional,OSNbertujuanjugauntukmendapatkan calonpesertapembinaandanseleksilebihlanjuthinggadipilihempatsiswaterbaik aliasanggotaTOKI(TeamKomputerIndonesia). Merekaitulahyangakanmewakili negaradanbangsauntukbertandingditingkatduniayaituInternationalOlympiadin Informatics(IOI). 2.InternationalOlympiadinInformatics IOIsendiriadalahlombayangmengujikemampuanpesertadalam problemsolving denganpemrogramankomputer2.Setiappesertadalamwaktuyangamatterbatasharus mengerjakan sejumlah masalah yang diberikan, mulai dari memahami masalahnya, merancangsolusinya,danmemindahkansolusinyadenganmenuliskannyasebagaisuatu program komputer. Pemecahan masalahnya harus komprehensif (meliputi berbagai kasus)yangharusdiidentifikasisendiriolehsetiappeserta,programnyaharusefisien saat dijalankan (dalam waktu yang singkat untuk setiap kasus), dan tentunya menghasilkankeluaranyangsesuaidenganyangdiharapkan. Kemampuandalamcoding(menulisprogram)hanyalahsalahsatuaspeksaja,yangsulit adalah dalam melakukan problemsolvingitusendiri termasuk memilih metodologi
1

Inihanyadugaansajakarenaditingkatkabupaten/kota,penyelenggaraanbesertaprosesseleksi diserahkankemasingmasingkabupaten/kotayangbersangkutansehinggadatapesertatidaktercatat denganlengkap.Sementara,ditingkatpropinsi,prosesseleksidilakukandipusatsehinggabisa diketahuijumlahkeseluruhanpeserta. 2 Harapbagianyangdigarisbawahitersebutdipahamisecaralengkap;bukanHANYAmenguji kemampuanmembuatprogramkomputer,bukanpulaHANYAmengujikemampuanmemecahkan masalah,tetapiKEDUANYA!!!

yangtepat.Pemilihanmetodologiakanmenentukanefisiensidariprogramyangdibuat saatdijalankan. 3.MetodadanProsesSeleksidiOSN ProsesseleksinyaidealnyaadalahmengacukeIOI.NamunberbedadenganbidangOSN lain sepertiFisika, Matematika,Kimia danBiologi, bidanginformatikakhususnya pemrogramanbelummenjadipelajaranresmi.Kalaupunada,hanyadisekolahsekolah tertentusajadanitupunbelumtentumengajarkanpemrograman.Olehsebabitu,materi ujidisesuaikanagarpesertapotensialsecaraakademis/skolastik tinggimasihdapat terjaringuntukdiberikanpembinaanyangintensif.Penyesuaiannyaadalahmengurangi aspek yang sangat bergantung pada ketrampilan peserta dalam pemrograman dan sebagaigantinya,digunakanmateriyangbiasanyadisebutsebagaimateriujianalisa danlogika.Padadasarnyamateriinimengujipotensiakademis/skolastikpesertayang menjadibagianterpentingdalamkemampuanproblemsolvingpeserta. 4.MetodadanProsesSeleksipraOSN Ditingkatkabupaten/kotasertapropinsikomponenujipemrogramantidakmungkin untuk diadakan mengingat sejumlah alasan tertentu sehingga uji pemrograman disubstitusi dengan materi uji kemampuan algoritmika.3 Selain itu, metoda pengujiannyapuntidakbisadihindaribersifattestobyektif(pilihanganda).Metodaini memangbanyaksekalikelemahannyayaitumemungkinkanjawabanasaltapibenar, namun, memungkinkan pemeriksaan yang segera. Dampak negatif tersebut bisa dikurangidenganpembuatansoaldanpilihanjawabanyangdirancangdenganmatang. 5.KlasifikasiSoalsoalNonprogramming Secaraumummateriujitertulisterbagiatastigakomponenutama:materiujianalitika danlogika,materiujiaritmatika,danmateriujialgoritmika. Materi analitika dan logika bertujuan untuk menguji potensi akademis (skolastik) peserta namun sedapat mungkin memiliki relevansi yang tinggi denganproblemsolvingdanelemenpentingdalammenguasaipemrograman komputer. Kemampuan ini merupakan faktor penting dalam memahami persoalanyangdiberikandanmerancangalgoritmapemecahanmasalahnya. Materiarimatikasebenarnyasejalandengananalitikadanlogikadiataskarena soal aritmatika disini bukan sekedar menguji ketrampilan dalam hitung menghitung, tetapi lebih pada cara berpikir yang logis dan analitis namun dengansoalbertemakanaritmatika Materi algoritmika bertujuan untuk menguji kemampuan peserta dalam memahamidanmenyusunsuatualgoritma. Aspekaspekyangterkaitdengan pengetahuandanbahasapemrogramandireduksiseminimalmungkinketingkat pseudocode.
3

Ujipemrogramanditingkatprovinsi,apalagiditingkatkabupaten/kota,masihperlubeberapatahun lagihinggainfrastrukturdisetiapdaerahsudahmerata.

B.MateriUjiAritmatika
Sekali lagi, walaupun mengambil topik mengenai aritmatika, aspek terpenting dari materiinibukanpadahitungmenghitungnyatetapipadaujikemampuananalitisnya. Aspekaspekanalitisdalampersoalanaritmatikadijelaskanpadabagianberikutini. 1.MampuMembentukModelAritmatika/Matematikasertamelakukan deduksi/induksiModel Dalam problem solving, seringkali diperlukan tahapan pemodelan masalah yang sebagian menggunakan model matematika/aritmatika dan menyederhanakannya sehinggamenjadimodelyanglebihsederhanadansiapdikomputasikandalambentuk algoritma.Modelyangtidaktepatberakibatpadakegagalandalampemecahanmasalah. Contoh: UangAmirlebihbanyakdariuangAli.Jikadijumlahkanuangkeduanyalebih dari50riburupiah,sementaraselisihuangAmirdenganuangAlilebihdari30 riburupiah.BerapakahkemungkinanuangAmiryangpalingtepat? Modelpermasalahan:UangAmir=x,UangAli=y,dandarideskripsidiatas PersI:x>y PersII:x+y>50000 PersIII:|xy|>30000 DariPersIdanPersIII:menghasilkanPersIV:xy>30000 DariPersIIdanPersIV:jikadijumlahkanmenghasilkan2x>80000. Maka,x>40000 2.MemahamiSifatsifatBilangan Untuksejumlahmasalah,sifatsifatdaribilanganharusdipahamisecaralogis Contoh: Jikandanpadalahduabilanganbulat,dann+pberhargaganjil,manakahdari berikutinibilganjil? (A)np+1 (B)np (C)n2+p21 (D)3p+5n (E)(pn)(np) Abukan,karena(n+p)adalahganjilmakadari n dan p salahsatuganjildan yanglaingenap.Selisihantarandanppastiganjilsehinggajikaditambah1 menjadigenap. Bbulankarenaperkalianantarasuatubilangangenapdenganbilanganapapun akanmenjadigenap.

C bukan karena pangkat bulat positif berapapun dari bilangan genap, tetap genap,danganjiltetapganjil,kemudianganjilditambahgenapdandikurang ganjilmenjadigenap. D bukan karena pangkat bulat positif berapapun dari bilangan ganjil tetap bilanganganjil,danjumlahduabilanganganjilmenjadigenap. Ebenar,karenaperkalian antaradua bilanganganjil menghasilkanbilangan ganjil. 3.MengkaitkandenganKonteksMasalah Konteksdarisoalperludiperhatikandankontekstersebutkadangkadanghanyatersirat saja. Yangdimaksuddengankonteksdisiniadalahpemahamanumumakansesuatu yangsewajarnyadiketahuipula. Contoh: jikaloncengberdentangsetiap1detik,dalamjumlahdentangyangsesuaiwaktu yang ditunjukkan, maka tepat pada pukul berapa dentang terakhir yang menunjukkanjam6?Apakahpukul6:00:06? Salah, seharusnya pukul 6:00:05 karena dentangdentang tsb pada pukul 6:00:00,pukul6:00:01,pukul6:00:02,pukul6:00:03,pukul6:00:04danpukul 6:00:05!!Konteksdisiniadalahdentangpertamaterjadipadatepatpukul6,dan penomorandetik/menitdimulaidari0,1,...dst. 4.MemahamiFormulaRekursif Banyakmasalahpemodelandengantingkatkesulitanyangtinggiataupemrogramannya sendirimemerlukanpemecahandenganalgoritmarekursif.Pemahamanfungsirekursif membantudalampemahamanmemahamibagaimanabekerjanyaalgoritmarekursif. Contoh: Jika didefinisikan f(n) = n f(n1) untuk setiap n > 0 dan f(0) = 1, maka berapakahf(10)/(f(7)xf(6))? Pahamiperilakufungsirekursiftsb,sbb, f(n)= n.f(n1)= n.(n1).f(n2)= n.(n1).(n2).f(n3)=... = n(n1)(n2)(n 3)....2.1=n! Sehingga,f(10)=10!danf(7)=7!sertaf(6)=6!. 10!/7!=(10.9.8.7.6.5.4.3.2.1)/(7.6.5.4.3.2.1)=10.9.8 Dan(10.9.8)/(6.5.4.3.2.1)=1 5.EksplorasidalamMasalahKombinatorik Dalam problem solving seringkali masalah yang diberikan bersifat kombinatorik (mendapatkan setiap kemungkinan kombinasi / permutasi jawaban). Untuk memecahkannya terkadang seluruh kemungkinan tersebut harus diperiksa untuk mendapatkanpemecahanyangumum. Contoh:

Jikadiketahui dalamperkalianmatriksA(mxn) denganB(nxp) diperlukan biaya mnp. Sementara untuk perkalian tiga matriks A.B.C dengan A(mxn), B(nxp)danC(pxq)ternyataterdapatduakemungkinanbiayayangbergantung padaurutannya: Urutan(A.B).C(yaituAdikaliBdahulukemudiandikaliC),dan urutanA.(B.C)(yaituBdikaliCdahulukemudiandikaliA). Urutan (A.B).C memerlukan harga mnp + mpq sementara urutan A.(B.C) memerlukanharganpq+mnq.Keduahargabisaberbedasesuaidenganharga harga m, n, p, q tsb. Pertanyaannya,untukperkalianempatmatriksA.B.C.D denganA(10x4),B(4x15),C(15x2),danD(2x20)manakahurutandenganbiaya minimum? Kemungkinankemungkinanurutanadalah(diperolehdenganpermutasiketiga tandaperkalian.): urutan(((A.B).C).D),biaya10x4x15+10x15x2+10x2x20=1300 urutan((A.B).(C.D)),biaya10x4x15+15x2x20+10x15x20=4200 urutan((A.(B.C)).D),biaya4x15x2+10x5x2+10x2x20=600 urutan(A.((B.C).D)),biaya4x15x2+4x2x20+10x4x20=1080 urutan((A.B).(C.D)),biaya15x2x20+10x4x15+10x15x20=4200 urutan(A.(B.(C.D))),biaya15x2x20+4x15x20+10x4x20=4200 6.BerpikirsecaraCerdas Jikamenghadapisuatumasalahkomputasiyangkelihatannyatidakmungkin,pastiada sesuatudibalikitu!!Dapatkanlahdenganbantuanpemahamanakansifatsifatoperasi aritmatikauntukmendapatkanmodelmatematisyanglebihsederhana. Contoh1: Berapadigit terakhir dari 22003? Apakah anda inginmenghitungnya sendiri (secaramanual)?Tentutidak,pastiadapenyederhanaannya.Denganmengubah n=1,2,3dst,perhitungan2nmenghasilkanderet1,2,4,8,16,32,64,128,256, 512, 1024, 2048, 4096, dst. Amati angka terakhir dari setiap bilangan, kita mendapatkanperulangandari6248padanmod4=0,1,2,3.Jadijika n=2003,diperoleh2003mod4=3,yaitumemilikidigitterakhir8. Contoh2: Ketigadigitawaldarihasilperkalian22002x52005jikadijumlahkanadalah?Ini jugatidakmungkindihitungmanual.Perhatikanbilangandasarnya2dan5yang jikadikalikanmenjadi10.Karenasetiappasangfaktor2dan5menghasilkan10 berartihanyamenambah0didigitterkanan.Ada2002pasangfaktorfaktortsb sehingga 22002 x52005 =53 x102002= 125102002.Penjumlahantiga digitawal 1+2+5=8 Contoh3: Hitunglah(80!x38!)/(77!x40!). Menggunakansifatsbbuntukadanbbulatpositif,a>b,makaa!/b!=a.(a 1).(a2)(b+1).Maka 5

(80!x38!)/(77!x40!)=(80!/77!)/(40!/38!) =(80x79x78)/(40x39) =(80/40)x(78/39)x79 =2x2x79=316 yangdapatdihitungtanpakalkulator.

C.MateriUjiAnalitikadanLogika
Dalam pemodelan masalah pemrograman selain dengan model aritmatika, juga keterhubungan antara entitas/aspek dalam masalah perlu dipahami secara relational untuk mendapatkan model algoritmis yang lebih akurat. Kemampuan analitis tsb diperlukandalammenghasilkanmodelketerhubungan/relasionaltsb. Sayangnya tidak ada metodologi yang sistematik karena pada dasarnya sangat bergantungpadakreatifitaspesertauji.Namun,adakesamaanumumdalampemecahan masalahnya,yaitu penggunaan model diagram sangat membantu untuk menggambarkan keterhubungannya secara menyeluruh berdasarkan keterhubungan yang fragmental (dari pernyataanpernyataan terpisah atau asumsiasumsi yang dibuat), keterhubunganitusendiriseringkalibersifatimplisitsehinggaperlupemahaman yanghatihatidanperlupemahamanakangayabahasapenceritaannya, khususnyauntukasumsiyangdibuatsegeradieliminasijikakontradiksidengan modeldiagram,dan model diagram yang telah dibentuk perlu diverifikasi (dikaji ulang) dengan pernyatanpernyataanyangdiberikanagarterjagakonsistensi,dan Selaluberpikiradanyakemungkinanyangtertinggalatautersamaryangbelum dikajikedalammodel Contoh1: Terdapat 7 bilangan bulat A, B, C, D, E, F, dan G yang jika diurutkan membentuk deret bilangan cacah berurutan (misalnya 4,5,6,) dengan pernyataanpernyataanberikut: (1)Dberharga3kurangnyadariA (2)Badalahangkaditengahjikasemuadiurutkan (3)KurangnyaFdariB=kurangnyaDdariC (4)GlebihbesardariF Jikadiurutkan,urutannyaadalah? Untukmemudahkanurutantsbmisalnya[x1x2x3x4x5x6x7] Dariperny.(2)diketahuix4=B,makamenjadi[x1x2x3Bx5x6x7] Dariperny.(3)FberadadiruassebelahkiriB(bisax1,x2ataux2). JikaF=x1maka Dadalahx2danCadalahx5([FDx3BCx6x7]),atau Dadalahx3danCadalahx6([Fx2DBx5Cx7]).

Akantetapidariperny.(1)membatalkankeduakemungk.asumsiinikarenaA harusberada3posisidikananDyangsudahditempatiC. JikaF=x2maka Dadalahx1danCadalahx3([DFCBx5x6x7]),atau Dadalahx3danCadalahx5([x1FDBCx6x7]),atau Dadalahx5danCadalahx7([x1Fx3BDx6C]). Akan tetapi dari perny. (1) hanya yang kedua yang mungkin karena yang pertamaposisiA=posisiBatauyangketigaposisiAberadadiluar(setelah x7).Untuksementara[x1FDBCAx7]dicatatsebagaisalahsatusolusi. JikaF=x3maka Dadalahx1danCadalahx2([DCFBx5x6x7]),atau Dadalahx5danCadalahx6([x1x2FBDCx7]),atau Dadalahx6danCadalahx7([x1x2FBx5DC]). tetapidari(1)semuatidakmungkin(yangpertamaposisiA=posisiB,kedua yanglainposisiAadadiluar). Jaditernyatahanyatinggalsatukemungkinanyaitu[x1FDBCAx7]. Dari perny. (4) diperoleh G=x7, sehingga diperoleh juga E=x1. Hasilnya diketahuiurutannyaadalahE,F,D,B,C,A,G Contoh2: DelegasidelegasidarinegaraWdannegaraRdudukberhadaphadapanpada mejaperundingan.Masingmasingdelegasiterdiriatasseorangketua,duaatase militer dan dua wakil kamar dagang negara masingmasing. Delegasi W beranggotakanA,B,C,D,danE.DelegasiRberanggotakanF,G,H,I,danJ. Masingmasingdelegasiberadapadasisisisimemanjangberlainan(satunegara padasisiyangsamadanketuadudukditengahdelegasinya). Batasandalam mengatururutandudukmereka: (1)DelegasiWmenempatkanAdanBdikeduaujungbarisannya. (2)KupingkananGtulishgiaharuspalingkanandaridelegasiR. (3)BaikDmaupunFbukanketua. (4)ParaatasemiliterW,salahseorangnyaB,didudukkanberdampingan,dan tidakadasatupunyangberseberangandenganatasemiliterR (5)Gbukanatasemiliter. (6)Cwakildarikamardagang,dudukberseberangandenganH. ManakahyangpalingmungkinmengenaiFberikut? (A)WakilkamardagangyangdudukdisebelahI (B)WakilkamardagangyangdudukdisebelahH (C)WakilkamardagangyangdudukberseberangandenganB (D)AtasemiliteryangdudukdisebelahI (E)AtasemiliteryangdudukdisebelahJ Sepertipadacontohsebelumnya,dibuatdiagramsbb x1x2x3x4x5negaraW y1y2y3y4y5negaraR Dari(1)kemungkinan{x1,x5}adalah{A,B}atau{B,A} 7

Dari(2)makay5=Gyangkarenapernyataan(4)dan(5)(Gbukana.mdanB adalaha.m)menyebabkanx5=B,sehingga(atasemiliterdenganbold) Ax2x3 x4B y1y2y3y4G Daripernyataan(6)dan(4)diperolehC=x2dany2=H,sehingga ACx3 x4B y1Hy3y4G Daripernyataan(3)dandiagramdiatasD=x4danF=y1atauy4 ACE DB y1Hy3y4G Jadi tinggal 2 kemungkinan F=y1 (atase militer), atau F=y4 (wakil kamar dagang).Jikaatasemilitermaka(D)dan(E)salahkarenasebelahy1adalahH. Jikawakilkamardagangmaka(B)salahkarenaHatasemiliterdan(C)salah karenaBadadidepanG.Jaditinggalpilihan(A)yangpalingmungkin.(Note: inibukansatusatunyakemungkinan.Kemungkinanlainnyamasihadatapitidak adadikelimapilihanitu).

D.MateriUjiAlgoritmika
Sebagaimana dalam penjelasan awal, materi uji algoritmika adalah selain menguji kemampuan dalam memahami suatu algoritma yang diberikan, juga menguji kemampuanmerancangsuatualgoritmapemecahanmasalahyangdiberikan.Namun, untuktingkatOSK/OSPpadasaatinibelummemungkinkanuntukdilakukanterutama terkendala masalah teknis pemeriksaan kebenaran jawabannya. Kemampuan dalam perancangantersebutbaruakandiujikankemudianditingkatOSN. Karena pada tingkat OSK/OSN ini peserta harus dapat memahami algoritma yang diberikanmakahalyangpentinguntukdikuasaiadalahpenulisannotasialgoritmayang digunakan oleh soalsoal. Penulisan algoritma mungkin menggunakan suatu cerita (bahasa seharihari) atau mengikuti notasi/tatacara yang didefinisikan sebagai pseudopascal4.Prosesdarialgoritmaumumnyabersifatprosedural/imperatifsaja5. Aspekaspekyangbiasanyadiujikanadalah: 1. penggunaan variabel (berarti sifatsifatnya juga) dalam kaitannya dengan prosesalgoritmatetapitidakberkaitandengansifatvariabelyangspesifik padabahasapemrogramantertentu6.
4

Lebihtepatnya,TOKIPsudopascaldengandokumenyangdipostingdiwebitedenganURLdi http://www.toki.or.id/toki2006/pseudopascal.pdf 5 HinggaIOI2006soalsoalyangdiujikanmasihmementingkanefisiensidalamproblemsolvingnya sehinggarancanganyangobjectorientedataupundeklaratifbelumperlu(ataumalahtidakdisarankan demiefisiensisolusi)untukdigunakan.BahasapemrogramanyangpopulerdiIOIadalahFreePascal,C danC++.KhususnyaC++digunakanterutamauntukmemudahkansejumlahcodingnyasaja,bukan karenaaspekobjectorientednya. 6 DalambahasaCterdapatkerumitandefinisimengenaiarrayyangtidakterjadidalambahasaPascal. DalambahasaJavacharacteryangdigunakandalamStringadalahunicode(16bit)sementaradalam

2. alirankendaliproses7:blokbeginend,pecabanganifthen,pencabanganif thenelse,pencabangancaseoption,loopwhiledo,looprepeatuntil,dan loopfor. 3. ekspresilojikdenganoperatorlojikand,or,xor,not, 4. pemanggilanprosedurdanfungsidan 5. aliranprosesdarialgoritma(prosedurataufungsi)rekursif 6. strukturarray(satudimensiataulebih) Contohcontoh 1. Diberikanfungsiberikut


functionapaini(a:integer;b:integer):integer; varx,y,r:integer; begin x:=a; y:=b; while(y<>0)do begin r:=xmody; x:=y; y:=r; end; apaini:=x; end; Pertanyaan:Jikafungsitsbdipanggildenganwriteln(apaini(414,662));berapakah yangdicetaknya? Pembahasan:Pemanggilantsbakandijalankandenganvariabelamulamulaberharga 414danbberharga662.Keduavariabeldalamalgoritmatidakmengalamiperubahan apapun,jadifungsinyahanyamenyampaikanharganyakevariabelxdanymasing masing.Dalamfungsitersebutterdapatstrukturloopwhiledodenganvariabelyang aktif(berubahubah)dalamlooptersebutbernamaxdany.Terdapatvariabellainyaitu ryangberfungsisebagaivariabelpembanduoperasi.Dalamstrukturbeginenddi dalamloopwhiledotsbterjadiperubahanhargaxdigantidenganydanydiganti denganhargaryangsebelumxdanyberubahrdiisixmody.Jadialgoritmainisaling memodulokanduabilangan.Dalammemahamiloopwhiledo,pentingdiperhatikan inisialisasidankondisiiterasiberakhir.Inisialisasinyaadalahmengisivariabelxdengan 414danydengan662.Iterasiakanberakhirapabilaysebagaivariabelyangakan memodulokanxberharga0.Jadiurutannya: 414mod662=414 662mod414=248 414mod248=166 248mod166=82 166mod82=2 82mod2=0

bahasaCatauPascaladalahbyte(8bit).DalambahasaPascalterdapatvariabeltipestringstandard pascalyangbyteke0berisipanjanglogicalstringdidalamnyasementaradalamCvariabelString adalaharraycharacterdenganindeksdari0.DalambahasaPascalarraybisaberindekssuaturange bilanganbulatapasajatermasukbulatnegatif,jugadapatmenggunakanindeksnonnumerik. 7 Dalamedisipseudopascalyadsedangdipertimbangkanstrukturexceptionhandlingtrycatch.Untuk edisisekarangbelumtermasuk.

Iterasiberhentikarenayberikutnyaberharga0.Terminasialgoritmamengembalikan hargaxyaitu2kepemanggilfungsi.Terakhir,pemanggilfungsimelakukanpencetakan hargayangdiperolehdaripemanggilantersebutyaitu2. Jadijawabnyaadalah2.

2. Diberikanfungsiberikut
functionapaitu(a:integer;b:integer):integer; begin count:=count+1; if(a>b)thenapaitu:=apaitu(b,a) elseif(a=0)thenapaitu:=b elseapaitu:=apaitu(bmoda,a) end; Pertanyaan:Jikafungsitsbdipanggildenganwriteln(apaitu(1001,1331));berapakah yangdicetaknya? Pembahasan: Fungsitersebutadalahfungsirekursif dengannama apaitu.Itu

ditandaiadanyapemanggilanfungsibernamasamadengandirinya.Didalam fungsi ada struktur bersarang (nested structure) ifthenelse membentuk 3 pencabangan. Cabangpertama,jikahargadalamvariabelalebihbesardarib,algoritma akanmelakukanpemanggilanrekursifdenganpenukaranposisivariabela menjadibdanbmenjadia. Cabangkedua,jikaaberharga0makaakandikembalikanhargab. Cabangketiga,tentuuntukalebihkecildarib,akanmemanggilsecara rekursifdenganposisihargaadiberiharga(bmoda)danposisihargab diberihargaa. Untuk semua cabang, tidak ada operasi lain sehingga hasilnya langsung dikembalikan ke pemanggil sebelumnya. Operasi pada variabel count tidak berartiapaapaberkenaandenganpertanyaanini. Pemanggilan apaitu(1001, 1331) akan membawa ke cabang ketiga lalu memanggiapaitu(330,1001).Kemudianakanmembawakecabangketigalagi lalumemanggilapaitu(11,330).Kembalilagikecabangketigadanmemanggil apaitu(0, 11). Pemanggilan terakhir ini akan memberikan harga variabel b menjadihargayangdikembalikandarifungsitersebut,kemudianditeruskanke pemanggilansebelumnya,hinggakepemanggilanpertama.Jadijawabannya11. Catatan:Jikaandadapatmemahamialgoritmaalgoritmapadakeduacontohdi atasdenganbaik,makacontohinidancontohdiatasmenghasilkanhargafungsi yangtepatsama. 3. Diberikanfungsiberikut
if(aandb)or((notc)andd)then if((aornotb)andc)or(band(nota))then writeln(1) else if(aor(dandb))and(notb)then writeln(2) else writeln(4) else

10

ifnot(dandc)and(nota)then writeln(5) else writeln(6); Pertanyaan:Jikadijalankandanternyatamencetakkanharga4makaurutanhargaharga a,b,c,dyangmungkinadalah? (A) TRUE,FALSE,TRUE,FALSE (B) TRUE,TRUE,TRUE,FALSE (C) FALSE,FALSE,TRUE,TRUE (D) TRUE,TRUE,FALSE,FALSE (E) TRUE,FALSE,FALSE,TRUE

Pembahasan: Untuk soal ini pilihan harus diujikan pada setiap ekspresi boolean/lojikdalamalgoritmadiatas.UntukmemudahkankitasebutE1,E2,E3 danE4untukkeempatekspresilojikdiatasdimulaidariekspresipalingatas. Pilihan (A): E1 berharga FALSE, lalu memeriksa E4 yang juga FALSE sehinggamenjalankanwriteln(6). Pilihan(B):E1berhargaTRUE,lalumemeriksaE2danjugaTRUE,kemudian menjalankanwriteln(1). Pilihan (C): E1berharga FALSE, lalu memeriksa E4 yangberhargaTRUE, kemudianmenjalankanwriteln(5). Pilihan(D):E1berharga TRUE, lalumemeriksaE2yang berharga FALSE, kemudianE3berhargaFALSEkemudianmenjalankanwriteln(4).Jadiuntuk mencetak4,makapilihanDyangbenar. Untukcrosscheckdanmasihadawaktudalammelakukannya,pilihan(E)bisa diperiksa:E1berhargaTRUElalumemeriksaE2yangberhargaFALSEdan kemudianE3TRUEsehinggamenjalankanwriteln(2). Catatan: untuk pemeriksaan ekspresi lojik, jika cukup berlatih maka pemeriksaantersebutbisadipercepatdenganhanyamemeriksasebagiandari ekspresi. Misalnya operator or hanya mensyaratkan salah satu dari kedua operand yang TRUE menyebabkan ekspresi tersebut TRUE, sebaliknya jika salahsatuoperanddarioperator and berhargaFALSEmakaekspresitersebut menjadiFALSE. 4. Suatu robot berdasarkan harga a bilangan positif yang diberikan, akan menjalankan sederetan perintah berikut (algoritma dengan penulisan bahasa seharihari): begin melangkahdenganjarakakedepan, memutararahkekanantegaklurus, melangkahsepanjang2a, memutarkearahkiritegaklurus, melangkahsepanjanga, memutarkearahkiritegaklurus, melangkahsepanjang3a, memutarkearahkiritegaklurus, 11

melangkahsepanjanga. memutarkearahkanantegaklurus. end; Pertanyaan:ikaposisiawaladadi(0,0)danrobotsedangmenghadapkearah sumbuypositif,dengana=2makaposisiakhirrobotadalah? Pembahasan:Perhatikandiagramlintasantsb.Ternyata,robotpadasaatawaldi (0,0) menghadap ke sumbuy, setelah menjalani lintasannya akan berada di (1.5a,0.5a)danmenghadapkekiri(270o)darisemula.Dengana=2makaakan beradadi(3,1). DeretanlangkahdiatasdigambarkanpadaGambar1ternyataefeknyasamasaja dengan hanya melakukan langkahlangkah seperti pada Gambar 2. Jadi selanjutnya, cukup memperhatikan kondisi awal dan kondisi akhir tersebut, kemudianputarkankekanan90o.

(1.5a,1.5a)

(2a,1.5a)

(0,a) (2a,a) (1.5a,0.5a)

(0,0)

Gambar1

(1.5a,0.5a)

(0,0)

Gambar2 Pertanyaan:Sekarangdenganpertanyaanbaru:jikaposisiawaladadi(0,0)dan robot sedang menghadap ke arah sumbux positif, dengan a = 4 maka dimanakahposisiakhirnya? Pembahasan:DenganmemutarkanGambar2makadiperolehposisiakhirdi (0.5a, 1.5a) seperti terlihat pada Gambar 3. Dengan a = 4, posisi menjadi menjadi(2,3)danmenghadapkesumbuypositif.

12

(0.5a , 1.5a)

(b+0.5 a, c+1.5a ) (b,c )

Pertanyaan: Kalau posisi awal bukan di (0,0) melainkan di (b, c) maka dimanakahposisiakhirtsb? Pembahasan:SederhanasajasepertiterlihatpadaGambar4,tinggalgeserposisi awaldari(0,0)ke(b,c),menjadi(b+0.5a,c+1.5a). Pertanyaan:Jikaposisiawaladadi(0,0)danrobotsedangmenghadapkearah sumbuxpositif,deretanperintahtersebutdilakukansecaraberulangsebanyak2 kali(3kali,4kali,dst)makaposisiakhirrobotadalah? Pembahasan:Jadiingatuntukselalumemperhatikanposisiawaldanakhirsaja sepertipadaGambar2: Pertama: arah sumbux positif, posisi (0,0) berhenti di (0.5a, 1.5a), denganarahsumbuypositif Kedua:arahsumbuypositif,posisi(0.5,1.5a)berhentidi, denganarah Ketiga: arah ...., posisi berhenti di , denganarah Pertanyaan:Jikaposisiawaladadi(0,0)danrobotsedangmenghadapkearah sumbux positif,deretanperintahtersebutdilakukanberulangsebanyak3kali dengan harga a pertama = 2 , harga a kedua = 4dan harga a ketiga = 1. Dimanakanposisiakhirrobot? Pertanyaan:Jikaposisiakhiradadi(0,0)denganrobotsedangmenghadapke arah sumbuy positif setelah deretan perintah tersebut dilakukan berulang sebanyak5kalidengana=4,beradadimanakahrobotitusebelumnya? Pembahasan:Silakanmencobamenjawabkeduapertanyaantersebut.

E.MateriUjiProgramming

(0, 0)

Gambar3

Gambar4

13

Pada tingkat OSNpeserta akan diuji dalam materi pemrograman yang sebenarnya. Selain peserta harus menguasai pemrogramandenganbahasayangdigunakanyaitu FreePascal atauC atauC++,tetapi jugapeserta harus mampumelakukan problem solving itu sendiri. Soalsoal yang diberikan bukan berupa soal spesifikasi pemrograman yang eksplisit, namun permasalahan yang mana pemrograman hanya sebagai alat dalam pemecahan masalah itu sendiri. Kemampuan analitikal peserta diperlukankarenaprogramyangnantinyadituliskanakandijalankandenganmasukan yangsangatekstrimsehinggadengancarayangnaif(tanpaanalisismendalam)program peserta tidak akan dapat berjalan dalam batas waktu yang diberikan. Aspek pertandinganlainnyaadalahbahwapesertaharusmengerjakansoalinidalamwaktu yangterbataspula! Permasalahan:buatlahprogramyangdapatmenghitungberapabanyak0dibelakang bilanganN!denganhargaNyangsangatbesarsekali(misalnya1030)? Pembahasan: Jika anda menjawabnya dengan memperkalikansemua bilangan N.(N 1).(N2)....2.1dstmakaandahanyaberhasilmenjawabuntuk N yangkecil(sebatas ukuranhargaterbesardaribilanganbulatyangdisediakansertabataswaktukomputasi yangdiberikan). Jadiandaperlumelakukananalisissbb.Karenabanyaknyaangkanoldibelakangsuatu angkabergantungpadaberapabanyakkemunculanfaktor2danfaktor5(mengapa? karena2kali5adalah10).Dankhususnya,untuksuatubilanganN!dapatdibuktikan banyaknyakemunculanfaktor5tidakakanlebihbanyakdaribanyaknyakemunculan faktor 2. Maka, pertanyaan di atas dapat dijawab dengan hanya menghitung total banyaknyakemunculanfaktor5daribilanganbilanganpembentuk N!Bilanganyang berisifaktor5adalahbilanganbilangankelipatan5sajajadicukupkitamemperhatikan bilanganbilangankelipatan5ini. Misalnyadalam10!hanyaadaduabilanganyangmemilikifaktor5yaitu5dan10 sendirisehingga.Contohlain,dalam29!ada5,10,15,20,25yangberisifaktor5,dan karenapada25faktor5munculduakalimenyebabkan29!berisikemunculanfaktor5 sebanyak6kali(jadiada6noldibelakang29!).Denganmengiterasi i dari5ke N dengan kelipatan 5, dan mendapatkan berapa banyak faktor 5 dari bilangan i, lalu menjumlahkannya,makaandadapatmenjawabnyadenganbaikuntuklevelOSN!
i:=5; count:=0; whilei<=Ndo begin //menghitungberapabanyakkemunculanfaktor5dalam i j:=i; while(jmod5)=0dobegin j:=jdiv5; count:=count+1; end; i:=i+5; end;

14

Untuk tingkat OSNini dengancara demikian andadapat memperolehnilai penuh. NAMUN,untuktingkatlebihlanjutmungkinhargaNbisadiberikanjauhlebihbesar misalnya N =1012,algoritmaharusberiterasiluar(while)sebanyak2.1011 kalidan untuk setiap harga i akan diperlukan sekian kali lagi beriterasi untuk menghitung banyaknyafaktor5dalam i yangakhirnyaakanmemerlukanwaktukomputasiyang besar!. Apalagi jika waktu eksekusi lebih dibatasi jelas solusi tsb tidak akan memberikannilaipenuh.Untukituandaharusmenggaliidelebihlanjutlagisbb. Perhatikanbahwa:

bilanganbilanganberfaktor5adalahsemuabilangankelipatan5.JikaJ1adalah jumlahbilangankelipatan5yangNtersebutmakaJ1=Ndiv5. diantarabilanganbilanganituterdapatbilanganbilangankelipatan25,yaitu yang menyumbang faktor 5 sebanyak dua kali. Jika J2 adalah banyaknya kemunculanbilangankelipatan25yangN,makaJ2=Ndiv25. diantarabilanganbilanganituterdapatbilanganbilangankelipatan125,yaitu yang menyumbang faktor 5 tiga kali. Jika J3 adalah banyaknya kemunculan bilangankelipatan125yangNmakaJ3=Ndiv125. ...dst.

Maka,jumlahfaktor5padaN!=J1+J2+J3+...=(Ndiv5)+(Ndiv25)+(Ndiv125) + ... berdasarkan analisis ini anda cukup membuat iterasi untuk menghitung dan mentotalkan(N div i)dengan i deret5,25,125,...selama i N.Algoritmayang diperoleh hanya berisi 8 baris saja sebagai berikut. Untuk N = 1012, iterasi hanya dilakukan kurang dari 18 kali (log5(1012) < 18). Jadi program yang efisien untuk menjawabmasalahdiatasadalahprogramyangsangatpendeksebagaiberikut.
readln(N); i:=5; count:=0; whilei<=Ndobegin count:=count+(Ndivi); i:=i*5; end; writeln(count);

Dengancontohini,hendakditunjukkanbahwa masalahyangdiberikandalammateri pemrograman bukanlah semata masalah pemrograman itu saja melainkan masalah analitikayangmendalamkemudianpemrogramanhanyalahsebagairealisasinyayang seringkalihanyadenganpembuatanprogramyangsingkat/pendeksemata. PadatingkatkesulitanyanglebihtinggihinggatingkatOlimpiadeInternasional,berlaku cara berfikir demikian. (Lihat pembahasan sejumlah soal contoh di website http://www.toki.or.id).

15

F.Penutup
Melalui dokumen ini penulis berharap peserta ataupun pembina peserta dapat menemukan intisari dan tujuan mengenai soalsoal seleksi mulai dari tingkat Kabupaten/Kotamadya,tingkatProvinsidantingkatNasional.Pesertayangloloske TingkatPelatihanNasional(Pelatnas)diharapkanmerupakanpesertayangmemiliki kemampuananalitikaldanmerancangalgoritmayangtinggi.Referensimengenaihal tersebutjauhlebihsulitditemukandaripadareferensiuntukpemrogramanitusendiri. Tulisan awal ini merupakan versi yang perlu diolah lebih lanjut agar bisa menjadi referensiyangmembantuparapesertanamundiharapkanbisamemenuhikebutuhan, sekurangnya sebagai petunjuk, bagaimana soalsoal seleksi olimpiade sains bidang informatika dan komputer ini dibuat. Masukan untuk menyempurnakan tulisan ini sangat diharapkan untuk meningkatkan manfaat terutama para calon peserta dan pembinapesertadalammempersiapkandirimenghadapiprosesseleksi.

16

Anda mungkin juga menyukai