Vector di C++. Array dinamis di Pascal???
Beberapa hari yang lalu, tumben lagi semangat coding. Mulai buka2 deh tutorial STL untuk C++. Kenapa STL? Karena konon katanya, STL C++ tuh isinya banyak tentang struktur data baru dan sintaks2 aneh lainnya. Bayangin aja, prosedur quicksort yang kalo koding di pascal bisa beberapa baris (rawan bug pula), bisa diselesaikan pake STL dengan hanya 1 baris sintaks, qsort().
Cukup sebel juga awalnya, kenapa di pascal kok gak bisa yah? Karena itu, terpaculah saya belajar STL. Yang pertama aku baca yaitu tentang vector. Vector nih bisa dibilang evolusinya array, atau aku sebut saja smart array. Kenapa? Antara lain, sifatnya sangat dinamis. vector ini bisa berkembang dan menyusut sewaktu-waktu dengan sintaks(atau mungkin lebih tepat disebut member, karena sepertinya vector itu sejenis class) yang simple. Sebut saja push_back(), yaitu menambahkan elemen baru sebagai elemen terakhir di vector, atau pop_back() yaitu menghapus/ memotong elemen terakhir dari vector. Dengan ini, kita bisa dengan mudah membuat dan mengolah struktur data , misal stack, tanpa harus repot memikirkan ukuran array. suatu vector juga dapat melaporkan ukurannya, yaitu dengan sintaks size(). Selain itu, masih banyak lagi member-member vector yang sangat amat berguna.
Dan ketika sedang terkagum-kagum dengan vector, esok harinya tiba-tiba Pak Janoe menjelaskan tentang deklarasi array dinamis di Pascal (????????).
Hah? ada ya?
Memang sih, cuma ada di beberapa compiler, Free Pascal misalnya. Tapi itu itu sudah cukup membuat saya shock. Deklarasinya mirip deklarasi array pada umumnya. Bedanya, ukuran array tidak ditentukan di awal, seperti ini :
var arr:array of integer;
Nah lo, ukurannya gimana? Ukuran array tersebut kemudian kita tentukan dengan sintaks
setlength(nama_array,ukuran);
Array dinamis ini pun bisa mengembang dan menyusut sewaktu-waktu, tentunya dengan menggunakan sintaks setlength beberapa kali. Bahkan, ketika arraynya kita perbesar, data yang kita masukkan sebelumnya tidak hilang!!
AArrgh!! Meringis hatiku! Coba aku tahu tentang array ini 2 tahun yang lalu! T_T
Hasil Olimpiade Sains Mahasiswa
Akhirnya, 13 Desember kemarin pengumuman resmi juara Olimpiade Sain Mahasiswa Yogyakarta keluar. Alhamdulillah dapet juara 1. Secara umum, perolehan juara di setiap bidang tampak didominasi oleh mahasiswa-mahasiswa UGM
Di bidang komputer sendiri pemenangnya adalah sebagai beriut :
1. Riza Oktavian, Ilmu Komuter UGM
2. Anugrah Galang P, Teknik Elektro UGM
3. Okie Primatyo, Teknik Elektro UGM
Yang menarik bagi saya, 2 teman sekontrakan saya yang juga mengikuti Olimpiade Sains Mahasiswa juga meraih juara di bidangnya masing-masing yaitu I Wayan Samayoga (Kedokteran Umum UGM), juara 3 bid Kimia dan Fajar Sofyantoro(Biologi UGM), juara 1 bid Biologi (perlu selametan se kontrakan nih ^_^).
Selamat kepada semua juara, semoga prestasi ini dapat menjadi pemacu untuk dapat berprestasi lebih tinggi di kemudian hari.
Perkalian Matriks
Soal 5 Olimpiade Sains Mahasiswa 2007, Yogyakarta.
Deskripsi Soal :
Diberikan sebuah perkalian matriks, P=A*B*C*D, dengan ordo/ ukuan masing-masing A(20X50), B(50X100), C(100X10), dan D(10X30). Ada beberapa cara melakukan perkalian matriks ini, dan tiap cara mempunyai jumlah operasi perkalian yang berbeda, antara lain :
1) P=(A*B)*C*D => (20*50*100)+(20*100*10)+(20*10*30) = 126000 perkalian
2) P=A*((B*C)*D) => (50*100*10)+(50*10*30)+(20*50*30) = 95000 perkalian
3) P=A*(B*C)*D => (50*100*10)+(20*50*10)+(20*10*30) = 66000 perkalian
Ternyata jumlah operasi perkalian terkecil yang mungkin terjadi adalah 66000 perkalian, yaitu dengan P=A*(B*C)*D. Buatlah program yang menerima input 2 baris. Baris pertama adalah jumlah matriks(N) dan baris kedua berisi N+1 bilangan asli yang menyatakan ukuran matriks pada perkalian. Program harus meng-outputkan jumlah opersi perkalian terkecildari perkalian matriks tersebut.
Game
Soal 4 Olimpiade Sains Mahasiswa 2007, Yogyakarta.
Deskripsi Soal :
Buatlah sebuah game 2 player antara Komputer Vs User dengan deskripsi game seperti berikut :
Ada dua buah kotak. Kotak pertama berisi sejumlah kelereng N. Secara bergantian, player 1 dan payer 2 memindahkan sejumlah kelereng dari kotak pertama ke kotak kedua dan tidak boleh melebihi jumlah maksimal pemindahan, M. M dijamin tidak melebih 10% dari total kelereng. Pemain yang berhasil memindahkan kelereng terakhir kali sehingga kotak pertama kosong, keluar sebagai pemenang.
Diberikan input N dan M. User memilih siapa yang menjadi player 1, komputer atau user, kemudian user menginputkan jumlah kelereng yang ingin dipindahkan setiap kali gilirannya. Program harus dibuat sehingga komputer selalu memenangkan game, kecuali jika player 1 adalah User dan User selalu mengambil langkah terbaik.
Tempat Pensil
Soal 3 Olimpiade Sains Mahasiswa 2007, Yogyakarta.
Deskripsi Soal :
Andi gemar mengoleksi pensil. Kian hari, koleksi pensilnya semakin banyak. Oleh karena itu dia berencana membeli tempat pensil baru di toko A untuk menampung N pensil koleksinya. Toko A menjual 2 jenis tempat pensil dengan harga dan kapasitas yang berbeda. Tempat pensil 1 berharga R1 dan dapat menyimpan J1 pensil, sedangkan tempat pensil 2 berharga R2 dan dapat menyimpan J2 pensil. Diberikan input N, R1, J1, R2, dan J2. Buatlah program yang mengoutputkan jumlah tempat pensil 1dan jumlah tempat pensil 2 yang harus dibeli Andi sehingga tempat pensil yang dibelinya tepat menampung N pensilnya. Jika tidak ada kombinasi sehingga tempat pensil yang dibelinya tepat menampung N pensil, maka outputkan ”Tidak jadi beli”
Segitiga Pascal
Soal 2 Olimpiade Sains Mahasiswa 2007, Yogyakarta.
Deskripsi Soal :
Buatlah program yang meminta input bilangan asli n dan mengoutputkan segitiga pascal dari baris 0 hingga baris n
Warna Dominan
Soal 1 Olimpiade Sains Mahasiswa 2007, Yogjakarta.
Deskripsi Soal :
Buatlah program yang menghasilkan sebuah matriks 5X6 yang elemennya adalah angka random 1 sampai 255. Outputkan juga warna dominan/ angka yang paling sering muncul dalam matriks tersebut. Jika ada lebih dari satu warna dominan, maka outputkanlah semua warna dominan. Jika tidak ada warna dominan, outputkan ”Tidak ada warna dominan”.