 |
 |
| |
|
Search Engine |
|
Manfaatkan Google untuk memperoleh sejumlah informasi
yang Anda inginkan dalam hansmichael.com.
|
|
| Kutipan |
If you try to make something beautiful, it is often ugly. If you try to make something useful, it is often beautiful.
Oscar Wilde
|
|
|
Tokoh Hari Ini
|
|
David A. Huffman
Dikenal sebagai penemu Huffman Code yang digunakan untuk kompresi data digital pada komputer, facsimile, modem, televisi dan banyak peripheral lainnya. Ia meninggal pada 7 Oktober 1999 dalam usia 74 tahun. Huffman Code disajikannya melalui sebuah paper saat ia kuliah di M.I.T. Ia menerima Golden Jubilee Award untuk inovasi teknologi dari IEEE Information Theory Society pada tahun 1998. Ia juga menerima Medali Richard W. Hamming dari IEEE pada tahun 1999 untuk kontribusinya yang luar biasa di Information Sciences. Pada akhir hidupnya Huffman adalah staf Departemen Computer Science di University of California di Santa Cruz, Amerika Serikat.
|
|
|
|
|
Algoritma dan Pemrograman 1 (CB106)
Semester
Gasal 2007-2008 - Kelas B dan C
Text Book
- An Introduction to Computer Science - An Algorithmic Approach,
Jean-Paul Tremblay dan Richard B. Bunt, McGraw-Hill, 1981, 635 halaman.
Komponen Penilaian
- 20% Nilai Quiz 1 (setelah Minggu IV)
- 30% Nilai Ujian Tengah Semester (UTS)
- 20% Nilai Quiz 2
- 30% Nilai Ujian Tengah Semester (UAS)
- 10% Nilai Tugas Mingguan dan Tugas Kelompok
Jadwal Kuliah Semester Gasal 2007/2008
Link-link Menarik (Khususnya Internet)
Contoh Soal
|
A. Sequence |
|
A1. |
Tulislah
flowchart dan program melalui VBScript untuk menghitung dan
mencetak keliling (k) dan luas (l) dari sebuah segitiga
siku-siku. Sepasang nilai real single precision untuk alas (a)
dan tinggi (t) segitiga siku-siku diisi melalui keyboard. |
|
A2. |
Tulislah flowchart dan program melalui VBScript untuk menghitung dan mencetak keliling (k)
dan luas (l) dari sebuah bujur sangkar. Nilai real single
precision untuk sisi (s) diisikan melalui keyboard. |
|
A3. |
Tulislah
flowchart dan program untuk mengisikan nilai jari-jari sebuah lingkaran, dan kemudian mencetak
keliling dan luas lingkaran tersebut.
|
|
A4. |
Mengisikan ketiga panjang sisi dari sebuah segitiga (S1, S2, dan S3),
dan kemudian mencetak nilai luas (L) segitiga tersebut, yang dapat
diperoleh dari rumus:

dimana
|
|
A5. |
Nilai tukar (kurs tengah) valuta asing
terhadap rupiah pada suatu hari di tahun 2007 tertulis sebagai berikut: 1
US$ = Rp 9.375 = 1,0435 Euro = 1,725 SG$ = 0,6525 Pound Inggris.
Masukkan nilai Rupiah dan kemudian tampilkan
nilai-nilai yang setara dalam satuan mata uang US$, Euro, Singapore$ (SG$),
dan Poundsterling Inggris.
|
|
A6. |
Suatu sistem persamaan linier dalam bentuk:
ax + by = c
dx + ey = f
dapat diselesaikan dengan menggunakan rumus-rumus:

dan

Bacalah koefisien-koefisien dari
sepasang persamaan yang diberikan (a, b, c, dan d, e, f) dan
kemudian mencetak solusi untuk nilai x dan y. Periksalah
dengan seksama, adakah kasus khusus yang menyebabkan flowchart dan program
Anda tidak dapat bekerja dengan baik?
|
|
A7. |
-
Masukkan sebuah bilangan dan kemudian
cetaklah nilai satuan, puluhan,
dan ratusan dari bilangan tersebut.
- Ulangi soal (a) untuk masalah yang lebih umum, yaitu mencetak digit
yang ke-i (yang dihitung mulai dari digit terkanan) dari sebuah
bilangan n. Nilai n dan i dimasukkan melalui keyboard.
Sebagai contoh, untuk nilai n=4627985 dan i=3, yang akan
tercetak adalah 9.
|
|
A8. |
Masukkan dari keyboard nilai
dari 2 buah variabel, A and B, kemudian tukarlah pasangan nilainya.
Sebelum dan sesudah proses pertukaran, cetaklah isi kedua variabel
tersebut ke layar.
|
|
B. Selection |
|
B1. |
Masukkan sebuah bilangan melalui keyboard,
kemudian tampilkan keterangan pada layar komputer, apakah bilangan
tersebut adalah gasal atau genap. |
|
B2. |
Masukkan sebuah bilangan melalui keyboard,
kemudian tampilkan keterangan pada layar komputer, apakah bilangan
tersebut adalah Positif, Negatif, atau Nol. |
|
B3. |
Masukkan 3 (tiga) buah bilangan melalui keyboard, kemudian
tentukan bilangan yang terbesar dari ketiga bilangan yang dimasukkan
tersebut. |
|
B4. |
Masukkan 3 (tiga) buah bilangan melalui
keyboard, kemudian tampilkan urutan ketiga bilangan tersebut mulai dari
yang terkecil sampai yang terbesar (ascending order). |
|
B5. |
Untuk
konversi satuan panjang, diketahui bahwa 1 Kilometer = 3281 Feets =
0,6214 Miles. Tulislah sebuah flowchart yang berguna untuk memasukkan
nilai panjang yang akan dikonversi dan menampilkan 2 buah hasil konversi
lainnya. Dengan demikian flowchart juga harus menerima input kode satuan
panjang asal, yaitu salah satu dari 'K' (untuk Kilometer), 'F' (untuk
Feets), atau 'M' (untuk Miles). Anggap bahwa kode yang diisi selalu benar,
yaitu selalu salah satu dari 'K' , 'F' , dan
'M'. |
|
B6. |
Untuk konversi mata uang,
diketahui bahwa nilai tukar (kurs tengah) valuta asing pada suatu hari
adalah sebagai berikut: 1 USD = Rp 9325 = 3,85 Ringgit Malaysia.
Gambarlah sebuah flowchart yang berguna untuk memasukkan nilai uang (u)
yang akan dikonversi dan mencetak 4 buah hasil konversi lainnya. Dengan
demikian flowchart juga akan menerima input kodemata uang asal (k),
yaitu salah satu dari "DA" (Dollar Amerika), "RI" (Rupiah Indonesia), atau "RM"
(Ringgit Malaysia). Anggap bahwa kode yang diisi selalu benar, yaitu selalu
salah satu dari "DA", "RI" dan "RM". |
|
B7. |
Gambarlah
sebuah flowchart untuk program komputer mewujudkan sebuah kalkulator yang
sangat sederhana. Program akan meminta user untuk mengisi 2 buah nilai
numerik (v1 dan v2) dan sebuah operator (opr) melalui
keyboard, dan kemudian menampilkan sebuah nilai hasil perhitungannya bila v1
dan v2 dioperasikan dengan menggunakan operator opr. Operator yang dapat
digunakan hanyalah +, -, *, /, atau ^.
Anda tidak perlu melakukan test validitas input untuk memeriksa
apakah opr diisi selain 5 karakter yang diijinkan. Sebagai contoh,
jika v1=5, v2=2 dan opr="^", maka yang ditampilkan adalah 125.
Sedangkan jika v1=15, v2=8 dan opr="+", maka outputnya 23. |
|
B8. |
Terdapat sejumlah data karyawan yang
masing-masing menyimpan informasi :
- Jenis kelamin; nama variabel adalah jk
(character);
yang hanya boleh diisi 'P', 'p', 'W', atau 'w'.
- Umur, nama variabel adalah umur (integer).
Nyatakan kalimat berikut ini dalam sebuah ekspresi logika yang
benar: "karyawan pria yang berumur 25-40 tahun atau karyawan
wanita yang berumur 20-30 tahun". |
|
B9. |
Sebuah
integer maksimal 4 digit dapat digunakan untuk menyajikan waktu dalam format
jam:menit, sebagai contoh 1741 -- integer seribu duaratus empat puluh
satu -- menunjukkan jam 17:41 WIB., sedangkan 905 menunjukkan jam 09:05 WIB.
Gambarlah sebuah flowchart untuk menghitung selisih dalam satuan menit
antara dua buah waktu (w1 dan w2) yang diinputkan melalui
keyboard. Sebagai contoh, jika w1=550 dan w2=2005, maka selisih waktunya 855
menit. Jika w2 "lebih awal" daripada w1, misal w1=2005 dan w2=550, maka
dianggap w2 berada pada hari berikutnya, sehingga selisih waktunya 585 menit.
Anda tidak perlu melakukan test validitas input untuk memeriksa
apakah w1 dan w2 diisi dengan waktu yang tidak valid, misalnya
26:10 atau -9.65, dan sebagainya. |
|
B10. |
Write a flowchart that print all real solutions to
the quadratic equation ax2+bx+c=0. Read in
a, b, and c. If the discriminant b2-4ac
is negative, display a message stating that there are no real solutions.
|
|
B11. |
Read the lengths of three sides of a triangle (S1,
S2, and S3) and determine what type of triangle it is, based on the
following cases. Let A denote the largest of S1, S2, and S3, and B and C
the other two. Then
- If A >= B+C No triangle is formed
- If A2 = B2+C2 A right-angled triangle is formed
- If A2 > B2+C2 An obstuse triangle is formed
- If A2 < B2+C2 An acute triangle is formed
|
|
B12. |
Perusahaan Daerah Air Minum mengenakan biaya
retribusi air minum pelanggannya dengan memperhatikan jumlah pemakaian air
pelanggan (dalam meter kubik, m3) dan kode pelanggan ('F' untuk
Fasilitas Umum; 'R' untuk peRumahan biasa, dan 'N' untuk Niaga),
yang mana biaya per meter kubik air dihitung berdasarkan tabel berikut:
|
Kode/Ukuran
|
s.d.
50 m3
|
51m3
s.d. 100m3
|
lebih
dari 100 m3
|
|
F
|
100
|
150
|
250
|
|
R
|
400
|
700
|
1000
|
|
N
|
750
|
1000
|
1350
|
Isikan kode
pelanggan dan jumlah pemakaian airnya, dan kemudian menampilkan biaya
retribusi yang dikenakan kepada pelanggan berdasarkan tabel di atas. |
|
B13. |
Gambarlah flowchart unuk
membantu seorang kasir menentukan jumlah uang yang harus dibayar pembeli
pada suatu penjualan berdiscount. Pembelian di bawah Rp. 100.000,-- tidak
diberikan discount. Discount 7,5% akan diberikan untuk pembelian Rp.
100.000,-- s.d. 200.000,--. Discount 10% akan diberikan untuk pembelian Rp.
200.000,-- s.d. 350.000,--. Discount 15% akan diberikan untuk pembelian di
atas Rp. 350.000,-- Sebagai data input adalah total nilai penjualan,
sednagkan output adalah uang yang harus dibayar pembeli setelah discount (jika
ada) diberikan. |
|
B14. |
Triplet Phytagoras
adalah pasangan 3 buah bilangan yang memenuhi rumus kuadrat bilangan
terbesarnya sama dengan total kuadrat kedua bilangan lainnya yang lebih
kecil. Tulislah sebuah flowchart untuk memasukkan 3 buah bilangan, dan
menampilkan keterangan sebagai outputnya, bahwa bilangan yang diisikan
merupakan triplet phytagoras, atau sebaliknya: bukan merupakan
triplet phytagoras. Perhatikan bahwa 3 data input dapat diberikan secara
tidak urut. Contoh: 4,3,5 adalah triplet Phytagoras,
demikian pula dengan 10,6,8. |
|
C. Iteration |
|
C1. |
Gambarlah flowchart dan tulislah program
melalui VBScript untuk mencetak deret 0,1,3,6,10,15,21,28,... yang
secara logika tidak akan berhenti atau infinite loop. |
|
C2. |
Gambarlah flowchart dan tulislah program
melalui VBScript untuk mencetak deret Fibonacci yang secara logika tidak
akan pernah berhenti atau infinite loop seperti berikut ini:
0,1,1,2,3,5,8,13,21,34,55,... Perhatikan bahwa sebuah bilangan pada
deret Fibonacci adalah hasil penjumlahan dua bilangan sebelumnya, kecuali
dua bilangan pertama. |
|
C3. |
Tulislah 3 (tiga) buah flowchart dan program untuk
tujuan yang sama, yaitu mencetak deret bilangan berikut:
100, 95, 90,
85, .......... , -140, -145, -150
Anda tidak harus memakai koma
untuk memisahkan angka-angkanya. Pastikan semua flowchart Anda hanya memakai angka-angka 100, -150, dan -5. Jangan memakai
angka-angka lainnya.
- Menggunakan
counted loop.
- Menggunakan conditional loop
dengan bottom-tested
iteration (mode until).
- Menggunakan conditional loop
dengan top-tested
iteration (mode while).
|
|
C4. |

- Apabila semua nilai I pada flowchart A, B, C, D semula sama
dengan 0. Hitung berapa banyak PROSES yang dijalankan
pada masing-masing gambar flowchart untuk N yang sama jika kondisi
untuk semua decision adalah I >= N.
- Supaya PROSES pada keempat flowchart tersebut dijalankan sama
banyaknya, misalnya n kali, tulislah kondisi untuk decision pada
masing-masing flowchart.
- Yang manakah dari keempat flowchart di atas yang dapat disebut
sebagai "algoritma yang terstruktur"
|
|
C5. |
Write a flowchart that shows the sum of 1 to n for
every n from 1 to 50. That is, the flowchart prints 1, 3 (the sum of 1 and
2), 6 (the sum of 1, 2, and 3), and so on.
|
|
C6. |
Menghitung nilai deret
berikut: 2 + 4 + 8 + 16 + ....... + 8192. Perhatikan
bahwa 8192=213 |
|
C7. |
Menghitung nilai deret
berikut:
1001 - 1 + 2 - 4 + 8 - 16 ..... ± 2N
N adalah data input yang harus bulat positif. |
|
C8. |
Compute the sum of the following series to 50
term:
|
|
C9. |
Tulislah algoritma atau
box diagram untuk mencetak deret Fibonnacci dalam range 1 s.d. 1000
dengan format:
0
(GENAP)
1
(GASAL)
1
(GASAL)
2
(GENAP)
3
(GASAL)
5
(GASAL)
8
(GENAP)
:
:
:
987
(GASAL)
|
|
C10. |
Menghitung pangkat
3 dari suatu bilangan bulat positif yang dibaca melalui keyboard,
dengan cara menjumlahkan sejumlah bilangan tertentu. Perhatikan contoh
berikut:
53 = 21 + 23 + 25 + 27 + 29 = 125
di mana : 21 = 5 * (5-1) + 1
83 = 57 + 59 + 61 + 63 + 65 + 67 + 69 + 71 = 512
di mana : 57 = 8 * (8-1) + 1 |
|
C11. |
A sales company pays its employees strictly
on the commission from sales. Each week, data is prepared for each
employee. This data consist of the employee's identification number
followed by the amounts of each sale that employee made in the past week.
The last amount for each employee is followed by a sentinel value of zero.
The commission rate is 3.45 percent. Write a program or flowchart to read
and add up the sales total for each employee and compute the commission
for each salesperson. |
|
C12. |
Gambarlah sebuah flowchart untuk menghitung
h yaitu hasil deposito setelah t tahun, jika nilai awal yang
disetorkan sebesar n rupiah, dengan bunga sebesar b % per
tahun. Pemerintah mengenakan pajak penghasilan untuk bunga deposito
sebesar 15% per tahun. Bank penyelenggara deposito akan membantu
pemerintah dengan mengambil nilai pajak ini pada setiap akhir tahun
selama masa deposito. Diasumsikan bahwa selama t tahun, uang yang
didepositokan tidak pernah diambil sehingga bunga yang diperoleh pada
sebuah tahun (setelah dipotong pajak) akan diinvestasikan juga pada tahun
berikutnya. Nilai-nilai h, t, dan n diinputkan melalui keyboard dengan
syarat ketiganya harus bilangan positif, sehingga jika tidak dipenuhi maka
pengisian data harus diulang. |
|
C13. |
Gambarlah flowchart untuk memasukkan nama
mahasiswa, nilai UTS, nilai UAS, dan nilai Tugas dari N mahasiswa melalui
keyboard. Nilai N sendiri diisi sebelumnya melalui keyboard juga dengan
validitas harus bilangan positif. Flowchart akan menghitung dan
menampilkan rata-rata nilai akhir, nilai akhir terbesar dan nama mahasiswa
yang memperolehnya, nilai akhir terkecil dan nama mahasiswa yang
memperolehnya. Perhatikan bahwa: Nilai akhir untuk seorang mahasiswa
diperoleh dari 10% Nilai Tugas + 45% Nilai UTS + 45% Nilai UAS. |
|
C14. |
Bilangan-bilangan
seperti 153 dan 370 memiliki sifat yang menarik, disebut Bilangan yang
Mencintai Dirinya Sendiri, karena total pangkat tiga dari digit-digit
penyusunnya adalah bilangan itu sendiri:
153
= 13 + 53 + 33 = 1 + 125 + 27 = 153
370
= 33 + 73 + 03 = 27 + 343 + 0 = 370
Mencetak semua bilangan dalam range 1 s.d. 500
yang memiliki sifat yang sama. |
|
C15. |
The value of ex can be computed as the power series:
1 + x + x2/2!
+ x3/3! + .....
Write a flowchart that computes ex using this
formula. Of course, you can't compute an infinite sum. Just keep adding
values until an individual summand (term) is less that a certain threshold
(0.0000001).
|
|
C16. |
Pada peringatan Proklamasi kemerdekaan 17 Agustus
2045 diadakan Lomba "Lompat Karung Terjauh dalam 10 Menit".
Karena teknologi saat itu sudah sedemikian majunya, pelaksanaan lomba akan
dikendalikan oleh sebuah komputer yang dilengkapi dengan sensor penglihat
dari sebuah satelit. Anggaplah area lombanya berada pada suatu grafik
Cartesius dengan satuan jarak meter. Semua peserta berangkat dari garis
start yang sama, dengan persamaan garis Ax+By+C=0. Karena harus
melompat dengan kaki di dalam karung, maka peserta tidak dapat bergerak
menuju arah yang sama, bahkan dapat berpencar ke berbagai titik yang
berbeda, termasuk berlawanan arah. Tidak menjadi masalah, karena hal ini
diijinkan. Diketahui bahwa rumus untuk menghitung jarak antara titik (m,n)
dengan garis yang memiliki persamaan Ax+By+C=0 adalah:

Kriteria hadiah bagi peserta lomba yang akan
ditransfer secara langsung oleh komputer ke rekening masing-masing peserta
lomba adalah:
|
Menempuh jarak
(dalam meter) |
Hadiah
(Rp) |
|
10,00
s.d. 50,00 meter
|
Rp. 100.000,--
|
|
>50,00 s.d. 100,00 meter
|
Rp. 250.000,--
|
|
>100,00 meter
|
Rp. 500.000,--
|
|
Khusus bagi seorang
pemenang saja dengan jarak terjauh akan mendapatkan hadiah Rp.
1.000.000,--
|
Buat prototype program komputer dengan untuk
menangani masalah ini. Inputkan nomor peserta lomba, nama peserta, dan
pasangan titik koordinat (m,n) yang menunjukkan dimana seorang peserta
harus berhenti saat peluit akhir permainan ditiup. Semua inputan nomor
peserta lomba tidak diijinkan menggunakan bilangan negatif, akan tetapi
nomor lomba 0 digunakan secara khusus untuk menghentikan inputan data
peserta.
Pada akhir proses, program komputer akan
menghitung:
- Jumlah peserta yang mendapat hadiah
Rp.
100.000,--
- Jumlah peserta yang mendapat hadiah
Rp.
250.000,--
- Jumlah peserta yang mendapat hadiah
Rp.
500.000,--
- Nama seorang pemenang yang mencapai jarak
terjauh
- Total uang yang dikeluarkan panitia
untuk membayar semua hadiah
- Jumlah peserta lomba
Bantuan untuk Anda:
- Untuk mendapatkan harga mutlak, gunakan fungsi
ABS( )
- Nilai A, B, dan C dari persamaan garis start
dimasukkan pertama, dan sekali saja, sebelum entry semua data peserta
lomba.
|
|
C17. |
Sebuah mini market ingin menggunakan
komputer sebagai cash register untuk menangani seluruh penjualan
dalam satu hari kerja. Untuk setiap pembeli, kasir
mengisikan sebuah nomor nota penjualan. Selain itu
untuk seorang pembeli kasir juga mengisikan sejumlah (satu
atau lebih) kode barang, nama barang, banyaknya
barang, dan harga satuan. Spesifikasi prosesnya sebagai berikut:
-
Proses input data
barang untuk seorang pembeli diakhiri dengan mengisi string '###'
pada kode barang.
-
Output yang dicetak untuk seorang pembeli adalah semua data
barang yang dibeli dan total uang yang harus dibayar
pembeli itu.
Untuk mengakhir proses penjualan
-- ketika mini market akan tutup -- kasir mengisikan nilai 0
pada nomor nota penjualan. Saat proses diakhiri, program
komputer yang dibuat diminta untuk mencetak jumlah uang yang
diterima oleh mini market tersebut. Semua data diinputkan melalui keyboard.
Tulislah flowchart dan programnya. |
|
D. Array |
|
D1. |
Given a vector a( ) of n real numbers, draw
a flowchart to obtain the largest difference and smallest difference
between two consecutive elements of this vector. |
|
D2. |
Consider the following problem. Given arrays
A and B which each have n elements. The elements in the arrays are not
necessarily in sorted order and each array can contain repeated elements
We define A and B to be disjoint if they contain no elements in common.
For example, the arrays [1,7,2,5,2] and [6,7,8,9,6] are not disjoint
because they both contain the number. However the arrays [2,1,7,2,5] and
[8,8,9,6,9] are disjoint. Draw a flowchart to determine whether arrays A
and B are disjoint. If the arrays are disjoint the algorithm should return
a pair (i,j) such that A[i]=B[j]. Otherwise the algorithm should return
(0,0). |
|
D3. |
Tulislah sebuah flowchart
untuk menggeser n elemen vektor v[ ] sejauh p. Nilai-nilai n, p, dan
seluruh elemen vektor v[ ] diisi melalui keyboard (syarat: n>0, p<>0, dan
n>|p|). Jika p positif pergeseran ke kanan, sebaliknya jika negatif
arahnya ke kiri. Contoh untuk v[ ] = 12, 98, 56, 73, 77, 45, 32, 42, 90
(n=9):
jika p = - 6 maka vektor v[ ]
akan menjadi : 32, 42, 90, 12, 98, 56, 73, 77, 45
jika p = + 4 maka vektor v[ ]
akan menjadi : 45, 32, 42, 90, 12, 98, 56, 73, 77
Cetak susunan elemen vektor sebelum dan
sesudah pergeseran. Untuk mencetak sebaiknya gunakan modul. |
|
D4. |
The Sieve of Eratosthenes, named
after a third-century Greek astronomer and geographer, is a technique for
generating prime number. We begin by writing all the odd integers from 3
up to N, then crossing out every third element after 3, every fifth
element after 5, and so on until multiples of all odd integers less than
vN have been eliminated. The integers remaining in the list are exactly
the prime numbers from 3 to N. Draw a flowchart to generate the prime
numbers from 3 to 1,000 using the sieve technique. |
|
D5. |
Hilangkan
elemen yang kembar (double-check) pada sebuah vektor seperti contoh
berikut:
Jika jumlah
elemen vektor diisi 10, dan masing-masing elemennya adalah:
A1
A2 A3 A4 A5 A6 A7 A8 A9
A10
15
31 23 15 75 23 41 15 31
85
Maka output
algoritma / program ini adalah informasi bahwa jumlah elemen vektor baru
adalah 6 dan masing-masing elemennya adalah:
A1
A2 A3 A4 A5 A6
15
31 23 75 41 85
|
|
D6. |
Hasilkan teks ejaan dari suatu bilangan dalam bahasa
Indonesia yang baik dan benar . Range bilangan yang dapat dimasukkan
adalah mulai 1 sampai 99999.
Beberapa
contoh:
Masukkan
bilangan : 11712
Teks
Ejaannya : sebelas ribu tujuh ratus dua belas
Masukkan
bilangan : 2052
Teks
Ejaannya : dua ribu lima puluh dua
Masukkan bilangan : 5555
Teks
Ejaannya : lima ribu lima ratus lima
puluh lima
|
|
D7. |
Membuat matriks identitas A[I , J] berukuran N x
N. Sebagai input adalah n yang harus dalam range 2 sampai dengan 50. Jika
tidak memenuhi syarat ini, maka pengisian nilai n harus diulang. Matriks
identitas adalah matriks bujursangkar (N x N) yang semua elemennya berisi
0, kecuali elemen diagonal utama yang berisi 1.
|
|
D8. |
An array is a palindrome if it reads the same in
both directions. For example,
3 5 7 2 4
is not a palindrome; however, the following one is.
4 2 6 2 4
Write a program that reads in an array and checks if it is a
palindrome.
|
|
D9. |
Ingatlah baik-baik
problem Knight Tour yang anda pelajari:
Tunjukkan perjalanan kuda
sampai mati langkah dengan menggambar papan catur (6 x 6) yang diisi
angka-angka mulai 1,2,3 dan seterusnya, untuk masing-masing perintah di
bawah ini:
-
Kuda berangkat dari
posisi Y=5, X=3, dengan prioritas gerakan kuda mulai V = +2, H = -1,
yang memutar berlawanan dengan jarum jam.
-
Kuda berangkat dari
posisi Y=5, X=3, dengan prioritas gerakan kuda mulai V = +2, H = -1,
yang memutar berlawanan dengan jarum jam, namun demikian baris
terakhir pada segmen algoritma di bawah ini tidak ditulis:
IF
KOTAK[ Y+V[P], X+H[P] ] <> 0
THEN
P <--- P+1
ELSE
NOLANGKAH <--- NOLANGKAH + 1
Y <--- Y + V[P]
X <--- X + H[P]
KOTAK[Y,X] <--- NOLANGKAH
P <--- 1 {baris ini saja
yang tidak ditulis}
|
|
D10. |
A vector of length n is an ordered list of n
elements, V = [ v1, v2, ... vn ], and can be represented in a program as a
one-dimensional array of length n. Consider
two vectors A and B, both of length n. The dot product of A and B, denoted
A . B, is the sum of the n pairwise products of the vectors' elements:
A . B = a1.b1 + a2.b2 +
... + an.bn
Write a program that:
- prompts the user and inputs an integer representing the length of
both of the vectors;
- dynamically allocates memory for both of the vectors;
- prompts the user and inputs all of the elements of the first vector;
- prompts the user and inputs all of the elements of the second
vector;
- calculates the dot product of the two vectors;
- outputs the dot product of the two vectors.
For this exam problem, you are not required to have comments, idiotproofing
or a greeting (though you should prompt the user for input), and you may
use numeric literal constants in the body of your program; otherwise, all
rules for programming projects apply. Note
that the array elements are numbers but are not constrained to be
integers.
|
|
D11. |
Write a program that reverses the order of the
elements of a given array. For example, if the given array contains five
elements:
56, 78, 10, 3, 50, 7, 21, 4, 89
after reversing the order of elements, the result is
89, 4, 21, 7, 50, 3, 10, 78, 56
|
|
D12. |
Isilah vektor A[ ] dengan N elemen bilangan bulat.
Periksa validitasnya bahwa nilai N harus dalam range 2 sampai dengan 100.
Selain itu periksa pula validitas semua elemen A[i] bahwa 0<A[i]<=50.
Jika tidak memenuhi syarat pengisian data harus diulangi. Kemudian lakukan
pengelompokkan ke dalam vektor B[ ] dengan cara semua elemen
yang gasal ke kiri dan semua elemen yang genap ke kanan, sedangkan urutan
antara elemen tak berubah, jadi vektor B[ ] tetap sebanyak N elemen.
Sebagai contoh:
Jika A[ ] diisi
dengan:
2, 49, 47, 36, 15, 8, 20, 24, 26, 19,
10, 17, 38, 48, 19, 50
maka vektor B[ ] akan berisi:
49, 47, 15, 19, 17, 19,
2,
36, 8, 20, 24, 26, 10, 38, 48, 50
Syarat: Hanya boleh menggunakan sebuah
loop REPEAT-FOR, tidak boleh menggunakan tambahan loop lainnya, dengan
kategori apapun.
|
|
E. Modularity: Procedures &
Functions |
|
E1 |
Write a procedure named printTable
that accepts a height and a width as parameters and then prints a table of
those dimensions, where the table follows the following pattern:
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
The above table is the result of calling
printTable(4, 5). |
|
E2. |
Tulis flowchart untuk masing-masing
modul di bawah ini. Untuk setiap flowchart jawabannya, tulislah
parameternya secara lengkap.
- Sebuah Function Max untuk
mendapatkan nilai maximal dari 2 buah bilangan, dan
- Sebuah Procedure CariMax yang
juga untuk mendapatkan nilai maximal dari 2 buah bilangan.
|
|
E3. |
Tulis flowchart untuk masing-masing
modul di bawah ini. Untuk setiap flowchart jawabannya, tulislah
parameternya secara lengkap.
- Sebuah Function RataRata untuk
mendapatkan rata-rata dari 3 buah bilangan.
- Sebuah Procedure CariRataRata
yang juga untuk mendapatkan rata-rata dari 3 buah bilangan.
|
|
E4. |
Tulis flowchart untuk masing-masing
modul di bawah ini. Untuk setiap flowchart jawabannya, tulislah
parameternya secara lengkap.
- Sebuah Function Total untuk
mendapatkan total penjumlahan dari 3 buah bilangan.
- Sebuah Procedure CariTotal ,
juga untuk mendapatkan total penjumlahan dari 3 buah bilangan.
|
|
E5. |
Algoritma Function SIMETRIS(M[ ] , N)
yang akan memeriksa apakah M adalah matriks yang simetris? Output fungsi
boolean ini akan TRUE, jika dan hanya jika M adalah matriks yang simetris.
Matriks M disebut simetris jika pada semua elemen di dalamnya berlaku
M[i,j]=M[j,i]. Sebagai contoh, matriks berikut ini adalah simetris:
8
29 45 10
29 57
100 0
45 100
13 15
10
0 15 -99
Syarat proses: Sebuah elemen tidak boleh
diperiksa lebih dari sekali.
|
|
E6. |
Design a procedure to
compute Sigma, the summation of the n elements of a vector x( ) and
Prod, the product of the n elements of x( ), an integer vector. x(
) and n are parameters of the procedure. |
|
E7. |
Algoritma Function Odd(N) yang akan memeriksa bilangan N
genap atau gasal? Function boolean ini akan bernilai TRUE, jika dan
hanya jika N bilangan gasal.
|
|
E8. |
Write a function NumberOfDigit that
takes an integer number as an argument and returns the number of digits in
its decimal representation. For example, the integer 1023 has four digits. |
|
E9. |
Write a Boolean Function isPerfect()
that takes a non-negative integer n and returns true if n is
a perfect number and false otherwise. A perfect number n is a number that
equal to the sum of all the numbers that smaller than n, AND divisible by
the smaller number. For example:
6 is a perfect number, because 6 = 1 +
2 + 3
28 is a perfect number, because 28 = 1
+ 2 + 4 + 7 + 14
however, 4 is not a perfect number
because 4 <> 1 + 2.
|
|
E10. |
Algoritma Procedure MaxMin(A[ ], N,
max, min) yang akan mendapatkan nilai maksimal dan sekaligus
minimal dari vektor A[] sejumlah N elemen. Nilai maksimal akan disimpan
ke dalam variabel max, sedangkan nilai minimal akan disimpan ke
dalam variabel min.
|
|
E11. |
Algoritma Procedure NewSelectionSort(A[ ], N,
FIRST, LAST) yang adalah modifikasi metode sorting
Selection Sort untuk mengurutkan vektor A[ ] sebanyak N elemen secara
descending. Parameter FIRST dan LAST, masing-masing adalah posisi awal dan
akhir range (daerah) yang diurutkan, artinya semua elemen di luar range
ini tidak diurutkan atau dibiarkan seperti keadaan semula. Sebagai
contoh, jika vektor V[ ] adalah 100, 10, 1, 50,
500, 555, 5, 111, 505, 0, 55, 501, 0, 55, 500, 55, maka CALL
NewSelectionSort(V[ ], 16, 6, 13) akan menyebabkan susunan vektor
V[ ] menjadi:
100, 10, 1, 50,
500, 0, 0, 5, 55, 111, 501, 505, 555, 55, 500, 55
Dalam procedure ini harus diperiksa lebih dahulu, jika
FIRST dan LAST bukan nilai-nilai dalam range 1 s.d. N, ataupun FIRST >
LAST, maka procedure ini tidak melakukan proses apapun.
|
|
E12. |
Dengan menggunakan box diagram,
tulislah Function Range (v[] , n) yang berguna untuk mendapatkan
nilai range sebuah vektor. Range diperoleh dengan menghitung selisih nilai
maksimal dan minimal vektor v[] sejumlah n elemen. Sebagai contoh, jika
isi vektor v[] adalah (34, 77, 83, 23, 11, 10, 35), maka nilai rangenya
adalah nilai maksimal (83) - nilai minimal (10) atau 73. |
|
E13. |
Given a continuous equation f(x)=0 and two values a
and b (a < b), if f(a)*f(b) < 0 (i.e., f(a) and f(b) have opposite
signs), it can be proved that there exists a root of f(x)=0 between a and
b. More precisely, there exists a c, a <= c <= b, such that f(c)=0
holds. This result provides us with a method
for solving equations. If we take the midpoint of a and b, c=(a+b)/2, and
computes its function value f(c), we have the following cases:
If f(c) is very small (i.e., smaller than a tolerance value), then c
can be considered as a root of f(x)=0 and we are done.
Otherwise, since f(a) and f(b) have opposite signs, the sign of f(c) is
either identical to that of f(a) or that of f(b).
- If the sign of f(c) is different from that of f(a), then since f(a)
and f(c) have opposite signs, f(x)=0 has a root in the range of a and
c.
- If the sign of f(c) is different from that of f(b), then since f(b)
and f(c) have opposite signs, f(x)=0 has a root in the range of c and
b.
Therefore, if the original interval [a,b] is replaced with [a,c] in the
first case or replaced with [c,b] in the second case, the length of the
interval is reduced by half. If continue this process, after a number of
steps, the length of the interval could be very small. However, since this
small interval still contains a root of f(x)=0, we actually find an
approximation of that root!
Write a program that contains two functions: (1) Funct() - the function
f(x) and (2) Solve() - the equation solver based on the above theory.
Then, reads in a and b and uses function Solve() to find a root in the
range of a and b. Note that before calling Solve, your program should
check if f(a)*f(b)<0 holds. Since this
process keeps dividing the intervals into two equal halves, it is usually
referred to as the Bisection method. It is also known as Bozano's
method.
|
|
E14. |
Tulislah flowchart untuk Procedure
GanjilGenap(V( ) , N , jumlahGanjil, jumlahGenap, totalGanjil, totalGenap)
yang berguna untuk menghitung jumlah bilangan yang ganjil dan yang genap,
serta total bilangan yang ganjil dan yang genap dari N elemen vektor V( ).
Contoh untuk V( )=(12, 56, 11, 10, 12, 10, 19) dengan N=7, maka
jumlahGanjil=2, jumlahGenap=5, totalGanjil=30 (dari 11+19), dan totalGenap=100
(dari 12+56+10+12+10). |
|
E15. |
Dengan menggunakan pseudo code,
tulislah Procedure GetFactors(x, f[], n) yang berguna untuk
mendapatkan daftar faktor / divisor, yang akan diletakkan dalam vektor f[]
sejumlah n, dari sebuah bilangan integer x. Angka 1 selalu menjadi faktor
x apapun, tetapi nilai x sendiri tidak menjadi anggota vektor output.
Sebagai contoh jika x=220 maka n=11 dan vektor f[] akan berisi
elemen-elemen: 1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110. Contoh lainnya
jika x=36, maka f[] berisi 1, 2, 3, 4, 6, 9, 12, 18.
Catatan: Jika soal nomor E15 ini
tidak dapat dikerjakan, nomor E16 dan nomor E17 tetap dapat dikerjakan. |
|
E16. |
Dengan memanfaatkan Procedure GetFactors
(dari soal nomor E15), tulislah sebuah flowchart untuk
memasukkan sebuah bilangan melalui keyboard -- pastikan bahwa bilangan ini
harus positif, kemudian menampilkan keterangan bahwa bilangan tersebut
prima atau bukan prima. |
|
E17. |
Pasangan bilangan amicable adalah
suatu pasangan bilangan dimana jumlah semua faktor dari bilangan pertama
adalah bilangan kedua, dan sebaliknya. Bilangan 220 dan 284 adalah contoh
pasangan bilangan amicable terkecil, karena faktor dari 220 = 1, 2, 4, 5,
10, 11, 20, 22, 44, 55, 110 (Jumlahnya adalah 284) sedangkan faktor dari
284 = 1, 2, 4, 71, 142 (Jumlahnya adalah 220). Asumsikan telah tersedia
Function Sum yang berguna untuk mendapatkan total elemen sebuah vektor.
FUNCTION Sum (v[], n)
1. acc <--- 0
2. REPEAT FOR c = 1, 2, 3,
....., n
acc <--- acc + v[c]
3. Sum <--- acc
Tulislah sebuah flowchart
untuk mencetak semua pasangan bilangan amicable yang mungkin dalam range 1
sampai 100000, dengan memanfaatkan Function Sum dan Procedure
GetFactors (dari soal nomor E15). |
|
F. Sorting & Searching |
|
F1. |
Perhatikan
unordered vector (vektor yang belum diurutkan) berikut ini:
100,
10, 1, 50, 500, 505, 501, 0, 111, 5, 555, 55, 0, 55, 500, 55
Tunjukkan
perubahan susunan vektor pada masing-masing pass, jika data diurutkan
dengan:
Setelah
unordered vector di atas telah diurutkan secara ascending order, tabelkan
perubahan semua nilai low, mid dan high pada metode
pencarian data:
-
Binary
Search, jika data yang dicari adalah 15.
-
Fibonacci
Search, jika data yang dicari adalah 55.
|
|
F2. |
Pada setiap bulan sebuah perusahaan menyimpan data
penjualan produknya dalam sebuah file. Asumsikan struktur recordnya
sangatlah sederhana, yaitu Kode Produk, Nama Produk dan Jumlah Produk
Terjual dalam Bulan Tersebut. Akibatnya sampai hari ini perusahaan
telah memiliki sejumlah file yang strukturnya sama. Untuk evaluasi unjuk
kerja perusahaan, pimpinan ingin memperoleh Daftar Penjualan Produknya
selama dua bulan terakhir, yang mana untuk setiap produk hanya diperlukan
informasi Total Jumlah Produk Terjual Selama Dua Bulan.Pada kasus
seperti ini teknik penggabungan data seperti apakah yang harus dipakai? Simple
Merge ? Mailing List? atau justru Bukan
Keduanya ? Jelaskan jawaban anda.
|
|
G. Stepwise Refinement |
|
G1. |
Bilangan 38 ditambah 83 menghasilkan 121, yang bersifat
palindrom, sebab bila dibaca dari depan atau belakang hasilnya sama
saja. Sedangkan 68 ditambah dengan 86 hasilnya 154 dan bukan palindrom,
tetapi jika diulang terus (hasilnya ditambah dengan kebalikannya) pada
satu saat akan diperoleh bilangan yang palindrom, sebagai contoh:
68
+ 86 = 154 (bukan palindrom, lanjutkan!)
154
+ 451 = 605 (bukan palindrom, lanjutkan!)
605
+ 506 = 1111 (palindrom, hentikan!)
Isilah sebuah bilangan dan mencetak rangkaian bilangan
hasil penjumlahannya terus-menerus sampai menghasilkan palindrom. Contoh
lain, bila inputnya 1872, flowchart akan mencetak: 4653, 8217,
15345, 69696 (berhenti, karena bilangan yang terakhir adalah
palindrom).
Lakukan pengembangan sebuah algoritma -- flowchart atau
Box-Diagram -- dengan stepwise refinement untuk menyelesaikan masalah ini.
|
|
G2. |
"Tantangan Rantai".
Guru Karen dan Alan, Pak Khan,
menyuruh mereka menyelidiki rantai bilangan berikut: "Mulai dengan
sembarang bilangan cacah, menambah satu jika bilangan itu ganjil; atau
membagi dua bila bilangan itu genap", dan begitu seterusnya
sampai berakhir menjadi 1. Misalnya:
13 ---> 14 ---> 7
---> 8 ---> 4 ---> 2 ---> 1
yang mulai dengan angka 13
dan berakhir menjadi 1 setelah 6 langkah. Beberapa waktu kemudian Pak Khan
menantang mereka untuk menemukan bilangan kurang dari 2000 yang
menghasilkan rantai terpanjang. Segera Alan menghidupkan komputernya,
membuat program untuk keperluan ini.
Soal: Lakukan stepwise
refinement dengan box diagram untuk membuat flowchart dari
program yang dirancang Alan untuk keperluan ini, yaitu mendapatkan
bilangan mana (kurang dari 2000) yang menghasilkan rantai terpanjang.
|
KITA PEDULI
Di Yayasan Pendidikan Tuna
Wisma dan Cacat (YPTK) "Pelayanan Kasih" Simpang Darmo Permai
Selatan XV/121 Surabaya terdapat kurang lebih 150 penderita cacat -- buta,
tuli, gangguan mental -- dan tuna wisma dari berbagai usia yang berbeda.
Di sana tinggal bayi-bayi
beberapa bulan sampai manula delapan puluhan tahun,
yang mungkin disia-siakan
keluarganya.....
Rencana Allah saja --
dalam misteri keadilanNya yang tak pernah kita ketahui -- yang membawa mereka
ada di sana, sedangkan kita ada di sini.
Kunjungilah
Tuhan..... Di sana!
|
 |
 |