Algoritma1 Modul5
Algoritma1 Modul5
5.1 Pendahuluan
Dalam bab sebelumnya telah diperkenalkan tipe data yang termasuk dalam
kelompok tipe data sederhana (simple data type) seperti integer, real dan karakter.
Tipe data sederhana adalah data yang nilai datanya hanya terdiri satu data atomik,
yaitu data yang hanya terdiri dari sebuah data tunggal yang tidak dapat dipecah-
pecah lagi. Dalam banyak situasi, perlu diproses sekelompok data yang saling
berhubungan seperti sederetan nilai ujian mahasiswa atau sekumpulan data hasil
percobaan atau sebuah matriks. Dalam situasi ini, pemrosesan akan sulit dilakukan
jika data tadi merupakan tipe data sederhana yang masing-masing berdiri sendiri.
Untuk mengatasi hal ini, disediakan tipe data terstruktur (structured data type)
seperti array, struct/record dan lainnya.
Dalam bab ini akan diperkenalkan konsep mengenai struktur data. Struktur
data didefinisikan sebagai kumpulan dari item data dan bagaimana data tersebut
saling berhubungan secara logik. Secara umum struktur data dikelompokkan
menjadi struktur data sederhana/primitif dan struktur data komposit/non primitif.
Struktur data primitif adalah struktur data dalam bentuk paling dasar yang
sudah dikodekan dalam memori komputer menjadi deretan angka biner.
Contohnya integer, real, karakter, logika, pointer, dan enumeration. Struktur data
non promitif/komposit adalah struktur data yang mengandung lebih dari satu
struktur data primitif, atau struktur data yang dapat diuraikan lebih lanjut menjadi
lebih dari satu atau struktur data primitif. Contohnya array, struct, file dan
sebagainya. Dalam bab ini hanya akan dibahas struktur data komposit yang paling
umum digunakan yaitu struktur data array atau dalam bahasa Indonesia disebut
sebagai larik.
134
Algoritma dan Pemrograman I
5.2 Array
Array atau larik didefinisikan sebagai sejumlah tertentu deretan data yang
homogen dan terdiri dari dua macam data yaitu:
a. Base/komponen: data yang disimpan dalam array, dapat bertipe integer, real,
karakter dan sebagainya.
b. Subscript/indeks: untuk menunjukkan posisi data dalam array, bertipe integer,
selalu dimulai dari angka 0.
Dari definisi di atas, dapat disimpulkan bahwa data yang disimpan dalam array:
a. tertentu jumlahnya (biasanya lebih dari satu),
b. mempunyai urutan, ada data yang pertama, kedua dan seterusnya
c. tipe datanya sama (homogen).
Array dapat dibayangkan sebagai suatu wadah besar yang mempunyai sekat-sekat
tempat menyimpan data. Tiap sekat hanya dapat menyimpan sebuah data. Masing-
masing sekat mempunyai nomor (indeks) yang berurutan sehingga suatu data
diambil atau disimpan berdasarkan nomor tersebut (lihat gambar 5.1).
6
3
2
1 5 9
8
4
7
Contoh data yang biasanya dibuat sebagai variabel array adalah sejumlah tertentu
data NPM mahasiswa (tipe datanya string), kumpulan data hasil percobaan (tipe
datanya real) dan sebagainya. Sebagai contoh, variabel NILAI_MHS adalah
variabel array yang menyimpan nilai dari 10 mahasiswa yang tipe data dari
nilainya adalah real. Maka ilustrasi dari array ini dapat dilihat pada gambar 5.2 di
halaman berikut ini.
NILAI_MHS:
Indeks: 0 1 2 3 4 5 6 7 8 9
Komponen: 78.5 59.2 93.8 45.9 65.1 72.5 57.3 42.4 84.7 61.6
tipe_data nama_array[limit]
dengan:
- tipe data : tipe data dari komponen array
- nama_array: nama dari array. Kriteria membuat nama array sama dengan kriteria
untuk membuat identifier
- limit: banyaknya komponen dalam array, merupakan bilangan integer.
REAL NILAI_MHS[10]
memori komputer:
..
..
NILAI[0]
NILAI[1]
NILAI[2]
... ..
..
... NILAI
..
...
..
...
NILAI[59]
..
..
Akan menyimpan angka 9.1 ke indeks 5 dari array NILAI, dan instruksi:
WRITE (NILAI[20])
Akan menampilkan data yang disimpan di indeks 20 dari array NILAI, lihat
ilustrasi pada gambar 5.4 berikut ini.
NILAI:
Indeks: 0 .... 4 5 6 … 20 21 … 59
Komponen: 7.5 …. 4.4 9.1 6.9 … 7.3 8.4 … 6.6
Ada beberapa hal yang perlu diperhatikan dalam menentukan indeks array
yaitu:
a. Banyaknya komponen array harus terbatas.
b. Karena indeks selalu dimulai dari 0 maka maksimum indeks array adalah
(banyaknya komponen – 1).
c. Jika array X adalah deretan komponen: X[L], X[L+1], …, X[H] dengan L dan
H adalah integer dan L H maka L disebut batas bawah array X dan H
disebut batas atas array X.
Contoh diketahui:
- X[0], X[1], ..., X[8] L =0;H=8
- Y[0], Y[1], Y[2], Y[3] L = 0; H = 3
Sebagai contoh diketahui deklarasi array VELO yang berisi data real seperti
berikut ini:
REAL VELO[10]
READ (VELO[0])
READ (VELO[1])
READ (VELO[2])
READ (VELO[3])
READ (VELO[4])
READ (VELO[5])
READ (VELO[6])
READ (VELO[7])
READ (VELO[8])
READ (VELO[9])
Atau
READ (VELO[0], VELO[1], VELO[2], VELO[3], VELO[4], VELO[5],
VELO[6], VELO[7], VELO[8], VELO[9])
b. Dengan menggunakan instruksi pengulangan:
Dari kedua cara di atas dapat dilihat bahwa cara yang pertama sama sekali tidak
praktis dan dapat menjadi sumber kesalahan terutama jika komponen array sangat
Menghitung nilai rata-rata dari sejumlah data mahasiswa (yang terdiri dari
nama mahasiswa dan nilainya), lalu mencetak daftar nama dan nilai
mahasiswa yang mempunyai nilai akhir di atas nilai rata-rata.
Algoritma CLASS_STAT
Algoritma untuk menghitung nilai rata-rata dari 5 mahasiswa.
Variabel NAME1, NAME2, NAME3, NAME4 dan NAME5 bertipe string.
Variabel GRADE1, GRADE2, GRADE3, GRADE4, GRADE5 dan
AVERAGE bertipe real. Sebagai output adalah nama dan nilai
mahasiswa yang nilainya nilai rata-rata.
1. [membaca data nama dan nilai dari 5 mahasiswa]
Read(NAME1, GRADE1, NAME2, GRADE2, NAME3, GRADE3,
NAME4, GRADE4, NAME5, GRADE5)
2. [menghitung rata-rata]
AVERAGE = (GRADE1 + GRADE2 + GRADE3 + GRADE4 +
GRADE5)/5
3. [Apakah nilai mahasiswa pertama nilai rata-rata ?]
If (GRADE1 AVERAGE)
{ [ya, cetak nama dan nilai mahasiswa]
Write(NAME1, GRADE1) }
4. [Apakah nilai mahasiswa ke dua nilai rata-rata ?]
If (GRADE2 AVERAGE)
{ [ya, cetak nama dan nilai mahasiswa]
Write(NAME2, GRADE2) }
5. [Apakah nilai mahasiswa ke tiga nilai rata-rata ?]
If (GRADE3 AVERAGE)
{ Write(NAME3, GRADE3) }
6. [Apakah nilai mahasiswa ke empat nilai rata-rata ?]
If (GRADE4 AVERAGE)
{ Write(NAME4, GRADE4) }
7. [Apakah nilai mahasiswa ke lima nilai rata-rata ?]
If (GRADE5 AVERAGE)
{ Write(NAME5, GRADE5)
}
8. [selesai]
Halt
Ilustrasi flowchart untuk algoritma CLASS_STAT ini dapat dilihat pada gambar
5.6 di halaman berikut.
Jika banyaknya mahasiswa berubah menjadi 100 orang, dengan cara yang
sama seperti di atas, maka diperlukan 200 variabel untuk menyimpan data nama
dan nilai mahasiswa. Dengan demikian algoritma di atas perlu direvisi menjadi
algoritma CLASS_STAT_revisi_1 seperti berikut:
Algoritma CLASS_STAT_revisi_1
Algoritma untuk menghitung nilai rata-rata dari 100 mahasiswa.
Variabel NAME1, NAME2, ..., NAME99 dan NAME100 bertipe string.
Variabel GRADE1, GRADE2, ..., GRADE99, GRADE100 dan AVERAGE
bertipe real. Sebagai output adalah nama dan nilai mahasiswa yang
nilainya nilai rata-rata.
1 [membaca data nama dan nilai dari 100 mahasiswa]
Read(NAME1, GRADE1, NAME2, GRADE2, NAME3, GRADE3, …,
NAME100, GRADE100)
2. [menghitung rata-rata]
AVERAGE = (GRADE1+GRADE2+GRADE3+ …+GRADE100)/100
3. [Apakah nilai mahasiswa pertama nilai rata-rata ?]
If (GRADE1 AVERAGE)
{ [ya, cetak nama dan nilai mahasiswa]
Write(NAME1, GRADE1)
}
4. [Apakah nilai mahasiswa ke dua nilai rata-rata ?]
If (GRADE2 AVERAGE)
{ [ya, cetak nama dan nilai mahasiswa]
Write(NAME2, GRADE2)
}
….
….
102. [Apakah nilai mahasiswa ke 100 nilai rata-rata ?]
If (GRADE100 AVERAGE)
{ [ya, cetak nama dan nilai mahasiswa]
Write(NAME100, GRADE100)
}
103. [selesai]
Halt
Start
TRUE
IF GRADE1 >=
Write (NAME1, GRADE1)
AVERAGE
FALSE
FALSE
FALSE
TRUE
IF GRADE4 >=
Write (NAME4, GRADE4)
AVERAGE
FALSE
TRUE
IF GRADE5 >=
Write (NAME5, GRADE5)
AVERAGE
FALSE
END
array NAME dan GRADE. Untuk menunjuk ke suatu data digunakan indeks yang
ditulis di antara kurung siku. Keistimewaan variabel array ini adalah indeks array
boleh berupa variabel. Dengan demikian algoritma CLASS_STAT direvisi
menjadi algoritma CLASS_STAT_revisi_2 yang menggunakan variabel array
untuk menyimpan data nama dan nilai mahasiswa.
Algoritma CLASS_STAT_revisi_2
Algoritma untuk menghitung nilai rata-rata dari 5 mahasiswa. Data
nama mahasiswa disimpan dalam variabel array NAME[5] yang
bertipe karakter string. Data nilai mahasiswa disimpan dalam
variabel array GRADE[5] yang bertipe real. Variabel NUMSTUDENT
dan K bertipe integer. Variabel SUM dan AVERAGE bertipe real.
Sebagai output adalah nama dan nilai mahasiswa yang nilainya
nilai rata-rata.
[deklarasi array]
CHARACTER NAME[5]
REAL GRADE[5]
1. [Inisialisasi jumlah mahasiswa = 5]
NUM_STUDENT = 5
2. [inisialisasi variabel SUM]
SUM = 0
3. [membuat loop untuk membaca data 5 mahasiswa]
For (K = 0 ; K < NUM_STUDENT ; K ++)
3.a. { [baca data mahasiswa ke K]
Read(NAME[K],GRADE[K])
3.b. [menjumlahkan nilai mahasiswa]
SUM = SUM + GRADE[K]
}
4. [menghitung rata-rata]
AVERAGE = SUM / NUM_STUDENT
5. [membuat loop untuk memeriksa nilai dan menampilkan data
mahasiswa]
For (K = 0 ; K < NUM_STUDENT ; K++)
5.a. { [Apakah nilai mahasiswa ke K nilai rata-rata ?]
If ( GRADE[K] AVERAGE )
{ [ya, cetak nama dan nilai mahasiswa]
Write(NAME[K],GRADE[K]) }
}
6. [selesai]
Halt
Perhatikan deklarasi untuk variabel NAME dan GRADE yang merupakan
variabel array. Perhatikan pula serta instuksi untuk membaca data (langkah 3) dan
proses untuk menentukan output (langkah 5), semuanya menggunakan instruksi
START
NUM_STUDENT = 5
SUM = 0
False TRUE
For (K = 1;K<= NUM_STUDENT;K++) Read (NAME[K], GRADE[K])
FALSE TRUE
For (K = 1;K<= NUM_STUDENT;K++)
FALSE
Write (NAME[K], GRADE[K])
END
2 Ben 8.3
3 Cie 9.5
4 Dik 8.6
5 Eis 7.4
Algoritma CLASS_STAT_revisi_3
Algoritma untuk menghitung nilai rata-rata dari maksimum 100
mahasiswa. Data nama mahasiswa disimpan dalam variabel array
NAME[100] yang bertipe karakter string. Data nilai mahasiswa
disimpan dalam variabel array GRADE[100] yang bertipe real.
Variabel NUMSTUDENT dan K bertipe integer. Variabel SUM dan
AVERAGE bertipe real. Sebagai output adalah nama dan nilai
mahasiswa yang nilainya nilai rata-rata.
[deklarasi array]
CHARACTER NAME[100]
REAL GRADE[100]
1. [Memasukkan data banyaknya mahasiswa, maksimum 100]
Read(NUM_STUDENT)
2. [inisialisasi variabel SUM]
SUM = 0
3. [membuat loop untuk membaca data mahasiswa]
For ( K = 0 ; K < NUM_STUDENT ; K++ )
{
3.a. [baca data mahasiswa ke K]
Read(NAME[K],GRADE[K])
3.b. [menjumlahkan nilai mahasiswa]
SUM = SUM + GRADE[K]
}
4. [menghitung rata-rata]
AVERAGE = SUM / NUM_STUDENT
5. [membuat loop untuk memeriksa nilai mahasiswa]
For ( K = 0 ; K < NUM_STUDENT ; K++ )
{
5.a. [Apakah nilai mahasiswa ke K nilai rata-rata ?]
If ( GRADE[K] AVERAGE )
{ Write(NAME[K], GRADE[K])
}
}
6. [selesai]
Halt
START
READ (NUM_STUDENT)
SUM = 0
FALSE TRUE
For (K = 1; K<= NUM_STUDENT;K++) Read (NAME[K], GRADE[K])
FALSE TRUE
For (K = 1;K<= NUM_STUDENT;K++)
FALSE
Write (NAME[K], GRADE[K])
END
Algoritma HITUNG
Algoritma untuk menerima data yang bertipe real (maksimum 500 buah) dan
menyimpannya dalam array DATA, lalu menghitung rata-rata, mencari data
dengan nilai terbesar dan menampilkan hasilnya. Variabel n untuk menyimpan
banyaknya data, bertipe integer. Variabel JUM, RATA, MAKS digunakan
berturut-turut untuk menyimpan hasil penjumlahan, rata-rata data dan nilai
maksimum data. Semua variabel tersebut bertipe real.
[deklarasi array]
Real DATA[500]
1. [membaca banyaknya data yang akan diproses, maksimum 500 buah]
Read (n)
2. [inisialisasi variabel jum dan maks]
JUM = 0
MAKS = 0
3. [membuat loop untuk menerima data dan menyimpannya ke array DATA,
serta menjumlahkannya]
For (i = 0 ; i < n ; i++)
{ Read (DATA[i])
JUM = JUM + DATA[i]
}
4. [menghitung rata-rata]
RATA = JUM / n
Ilustrasi flowchart untuk algoritma di atas dapat dilihat pada gamber 5.9 di
halaman berikut.
Sebagai contoh berikutnya dari penggunaan variabel array ini, akan dibuat
algoritma dan flowchart untuk menghitung jawaban dari sebuah hasil survey.
Diasumsikan banyaknya responden ada 40 orang. Tiap responden menjawab “Y”
jika ia setuju dengan pernyataan, atau “T” jika ia tidak setuju dengan pernyataan
atau “A” jika ia tidak mempunyai pendapat atas pertanyaan yang diajukan (tidak
menjawab). Jawaban responden disimpan dalam array JWB[40] yang bertipe
character. Algoritma akan menyimpan jawaban seluruh responden lebih dulu,
kemudian dianalisis hasil surveynya. Hasil analisis adalah banyaknya dan
persentase responden yang menjawab Y, T atau A.
Algoritma Survey
Algoritma untuk menyimpan data hasil survey yang bertipe charakter
(sebanyak 40 buah) dan menyimpannya dalam array JWB, lalu menghitung
banyaknya responden yang menjawab Y, atau T atau A serta persentasi dari
masing-masing jawaban. Variabel i untuk pengontrol loop, bertipe integer.
Variabel JUM1, JUM2, dan JUM3 bertipe integer dan digunakan berturut-turut
untuk menyimpan banyaknya responden yang menjawab Y, T, dan A. Variabel
P1, P2, dan P3 bertipe real dan digunakan untuk menyimpan persentasi dari
responden yang menjawab Y, T dan A.
[deklarasi array]
Character JWB[40]
START
Read (n)
Jum = 0
Maks = 0
false true
For (i = 0 ; i < n ; i++)
Rata = Jum/n
false true
For (i = 0 ; i < n ; i++)
true
false Maks < Data[i]
?
Maks = Data[i]
STOP
1. [inisialisasi variabel]
JUM1 = 0
JUM2 = 0
JUM3 = 0
2. [membuat loop untuk menyimpan hasil survey ke array JWB]
For (i = 0 ; i < 40 ; i++)
{ Read (JWB[i])
}
3. [membuat loop untuk menganalisis hasil survey]
For (i = 0 ; i < 40 ; i++)
{
3.a. If (JWB[i] == “Y”)
3.a.i. { JUM1= JUM1+1
}
Else
3.a.ii { If (JWB[i] == “T”)
{ JUM2= JUM2+1
}
Else
{ JUM3 = JUM3 + 1
}
}
}
4. [Menghitung persentasi jawaban]
P1 = JUM1*100/40
P2 = JUM2*100/40
P3 = JUM3*100/40
5. [menampilkan hasil]
Write (“Hasil survey terhadap 40 responden”)
Write (“Banyaknya responden yang menjawab YA = “, JUM1, “ atau “, P1,
“%”)
Write (“Banyaknya responden yang menjawab TIDAK = “, JUM2, “ atau “,
P2, “%”)
Write (“Banyaknya responden yang tidak menjawab = “, JUM3, “ atau “,
P3, “%”)
6. [selesai]
Halt
Flowchart untuk algoritma SURVEY ini dapat dilihat pada gambar 5.10 di
halaman berikut.
Sebagai contoh yang lain dari penggunaan struktur data ini akan dibuat
algoritma untuk membaca data curah hujan dari suatu stasiun pengamat cuaca dan
mengelompokkan stasiun pengamat cuaca berdasarkan curah hujan dan
menghitung banyaknya stasiun cuaca dalam suatu kelompok sesuai contoh tabel
5.2 di bawah ini. Diasumsikan curah hujan yang diukur oleh seluruh stasiun
berada di antara 0 sampai 49 cm.
START
Jum1 = 0
Jum2 = 0
Jum3 = 0
false true
For (i = 0 ; i < 40 ; i++)
Read (Jwb[i])
false true
For (i = 0 ; i < 40 ; i++)
false
Jwb[i] == “Y” Jwb[i] == “T” false
? ?
true true
Jum3 = Jum3 + 1
P1 = Jum1 * 100 / 40
P2 = Jum2 * 100 /40
P3 = Jum3 * 100 / 40
STOP
Sebagai input adalah nama stasiun dan curah hujan yang diukurnya. Contoh data
input dapat dilihat pada tabel 5.3 di bawah ini. Diasumsikan semua data bertipe
integer. Sebagai output adalah nomor kelompok dan banyaknya stasiun yang ada
dalam kelompok tersebut, format output dapat dilihat pada tabel 5.4 di bawah ini.
Untuk mengetahui kelompok dari suatu stasiun digunakan statement IF bertingkat.
Kondisi yang digunakan untuk mengelompokkan stasiun adalah range curah hujan
pada tabel 5.2 di atas.
Algoritma KELOMPOK_STASIUN
Algoritma untuk membaca curah hujan dari setiap stasiun pengamat cuaca,
lalu mengelompokkannya berdasarkan tabel 5.2 dan menampilkan banyaknya
stasiun pengamat cuaca yang ada dalam tiap kelompok. Variabel
NAMA_STASIUN adalah variabel string untuk menyimpan nama stasiun
pengamat cuaca. Variabel CURAH_HUJAN adalah variabel integer untuk
menyimpan data curah hujan. Variabel array KELOMPOK[9] bertipe integer
untuk menyimpan banyaknya stasiun dalam suatu kelompok, indeksnya
merupakan kelompok stasiun dan komponennya menyimpan banyaknya
stasiun dalam kelompok tersebut. Data nama stasiun dan curah hujan
disimpan dalam file sehingga digunakan sentinel eof untuk mengakhiri
pembacaan data. K adalah variabel integer.
[deklarasi array]
INTEGER KELOMPOK[9]
1. [inisialisasi array KELOMPOK, semua komponennya angka 0]
For ( K = 0 ; K <= 9 ; K++ )
{ KELOMPOK[K] =0
}
2. [membaca data nama stasiun dan curah hujan]
Read (NAMA_STASIUN, CURAH_HUJAN)
3. [membuat pengulangan untuk menentukan kelompok dan membaca data
berikutnya]
While ( not eof )
{
3.a [menentukan kelompok berdasarkan curah hujan]
If ( CURAH_HUJAN <=4 )
{ KELOMPOK[0] = KELOMPOK[0] + 1 }
else
{ if ( CURAH_HUJAN <= 9 )
{ KELOMPOK[1] = KELOMPOK[1] + 1 }
else
{ if ( CURAH_HUJAN <= 14 )
{ KELOMPOK[2] = KELOMPOK[2] + 1 }
else
{ if ( CURAH_HUJAN <= 19 )
{ KELOMPOK[3] = KELOMPOK[3] + 1 }
else
{ if ( CURAH_HUJAN <= 24 )
{ KELOMPOK[4] = KELOMPOK[4] + 1 }
else
{ if ( CURAH_HUJAN <= 29 )
{ KELOMPOK[5] = KELOMPOK[5] + 1 }
else
{ if ( CURAH_HUJAN <= 34 )
{ KELOMPOK[6] = KELOMPOK[6] + 1 }
else
{ if ( CURAH_HUJAN <= 39 )
{ KELOMPOK[7] = KELOMPOK[7] + 1 }
else
{ if ( CURAH_HUJAN <= 44 )
{ KELOMPOK[8] = KELOMPOK[8] + 1 }
else
{ if ( CURAH_HUJAN <= 49 )
{ KELOMPOK[9] = KELOMPOK[9] +
1}
else
{ Write(‘Salah memasukkan data’) }
}
}
}
}
}
}
}
}
}
3.b. [membaca data berikutnya]
Read (NAMA_STASIUN, CURAH_HUJAN)
}
4. [menuliskan judul tabel]
Write(‘Kelompok Banyak Stasiun’)
5. [menuliskan hasil pengelompokan]
For ( K = 0 ; K <= 9 ; K++ )
{ Write (K+1, KELOMPOK[K])
}
6. [selesai]
Halt
Penentuan kelompok suatu stasiun pada langkah 3.a di atas yang menggunakan
statement IF bertingkat, masih dapat disederhanakan dengan menggunakan
operator div. Caranya dengan membagi (div) angka curah hujan dengan 5
sehingga didapat kelompok dari curah hujan tersebut. Kelompok yang didapat
sekaligus merupakan indeks array yang digunakan untuk menentukan kelompok
suatu stasiun berdasarkan curah hujannya. Dengan demikian langkah 3.a dapat
ditulis menjadi berikut ini :
Algoritma KELOMPOK_STASIUN_revisi_1
Algoritma untuk membaca curah hujan dari setiap stasiun pengamat
cuaca, lalu mengelompokkannya berdasarkan tabel 5.2 dan menampilkan
banyaknya stasiun pengamat cuaca yang ada dalam tiap kelompok.
Variabel NAMA_STASIUN adalah variabel string untuk menyimpan nama
stasiun pengamat cuaca. Variabel CURAH_HUJAN adalah variabel integer
untuk menyimpan data curah hujan. Data nama stasiun dan curah hujan
disimpan dalam file sehingga digunakan sentinel eof untuk mengakhiri
pembacaan data. Variabel array KELOMPOK[9] bertipe integer untuk
menyimpan banyaknya stasiun dalam suatu kelompok, indeksnya
merupakan kelompok stasiun dan komponennya adalah banyaknya stasiun
dalam suatu kelompok tersebut. J dan K adalah variabel integer. J adalah
variabel yang menyimpan indeks yang didapat dari hasil pembagian
CURAH_HUJAN dengan angka 5.
[deklarasi array]
INTEGER KELOMPOK[10]
1. [inisialisasi array KELOMPOK, semua komponennya angka 0]
For ( K = 0 ; K <= 9 ; K++ )
{
KELOMPOK[K] =0
}
2. [membaca data nama stasiun dan curah hujan]
Read (NAMA_STASIUN, CURAH_HUJAN)
3. [membuat pengulangan untuk menentukan kelompok dan membaca data
berikutnya]
While ( not eof )
{
3.a [menentukan kelompok berdasarkan curah hujan]
J = CURAH_HUJAN div 5
KELOMPOK[J] = KELOMPOK[J] + 1
3.b. [membaca data berikutnya]
Read (NAMA_STASIUN, CURAH_HUJAN)
}
4. [menuliskan judul tabel]
Write(‘Kelompok Jumlah Stasiun’)
START
False TRUE
While not EOF
J = CURAH_HUJAN div 5
KELOMPOK[J] = KELOMPOK[J] + 1
FALSE TRUE
For (K=1;K<= 9; K++)
Write(K + 1, KELOMPOK[K])
END
atau
dengan :
- nama_fungsi: nama dari fungsi yang dibuat, aturan untuk membuat nama fungsi
sama dengan aturan untuk membuat identifier dan harus unik
Contoh:
- FUNGSI RATA (REAL[ ], INTEGER)
Nama fungsi: RATA, mempunyai 2 parameter, yaitu array 1 dimensi yang
berisi bilangan real dan data integer
- FUNGSI STD_DEV (REAL[ ], INTEGER, REAL)
Nama fungsi: STD_DEV, mempunyai 3 parameter, yaitu array 1 dimensi
yang berisi bilangan real, data integer dan data real
Bentuk umum dari definisi fungsi yang menggunakan array sebagai parameternya
adalah:
atau
dengan :
- nama_fungsi: nama dari fungsi yang dibuat, aturan untuk membuat nama fungsi
sama dengan aturan untuk membuat identifier dan harus unik
- nama_array [ ] : argumen yang menunjukkan nama dari array (variable dummy).
Tanda “[ ]” menunjukkan bahwa parameter ini adalah array
- banyak: parameter yang menunjukkan banyaknya komponen array (variable
dummy), tipe datanya integer
- parameter_lain : parameter lain yang digunakan oleh fungsi untuk menerima
data (variable dummy).
dengan:
SD=
√ ∑ ( xi −x )2
i =1
N −1
Algoritma DEVIASI_STANDAR
Algoritma untuk menghitung deviasi standar untuk maksimum 1000
data. Array DATA[1000] untuk menyimpan data yang bertipe real.
Fungsi RATA digunakan untuk menghitung rata-rata dari data yang
disimpan dalam array DATA. Fungsi STD_DEV digunakan untuk
menghitung deviasi standar dari data yang disimpan dalam array
DATA. Variabel SIZE menunjukkan banyaknya data yang akan
dihitung deviasi standarnya. Variabel K digunakan sebagai counter
(pencacah) data. Kedua variabel ini bertipe integer.
[deklarasi array]
REAL DATA[1000]
[deklarasi fungsi]
FUNGSI RATA (REAL[ ], INTEGER)
FUNGSI STD_DEV (REAL[ ], INTEGER, REAL)
1. [Memasukkan banyaknya data, maksimum 1000]
Read (SIZE)
2. [Membuat pengulangan untuk membaca data satu persatu lalu
disimpan dalam array DATA]
For ( K = 0 ; K< SIZE ; K++ )
{
Read(DATA[K])
}
3. [Memanggil fungsi RATA untuk menghitung rata-rata dari data
yang disimpan dalam array DATA]
AVERAGE = RATA(DATA, SIZE)
4. [Memanggil fungsi STD_DEV untuk menghitung deviasi standar
dari data yang disimpan dalam array DATA]
STDEV = STD_DEV(DATA, SIZE, AVERAGE)
5. [Mencetak hasil perhitungan]
Write(‘Standar Deviasi = ‘,STDEV)
6. [Selesai]
Halt
SUM = 0
2. [Membuat pengulangan untuk menghitung jumlah data]
For ( K = 0 ; K < BK; K++ )
{
SUM = SUM + NILAI[K]
}
3. [menghitung rata-rata]
AVER = SUM / BK
4. [mengembalikan hasil perhitungan]
Return(AVER)
}
Perhatikan definisi fungsi RATA dan fungsi STD_DEV, salah satu parameter
fungsi adalah array (lihat tanda sepasang kurung siku setelah nama parameter).
Banyaknya komponen array tidak didefinisikan bersama parameter array, tetapi
didefinisikan oleh parameter lain dalam fungsi tersebut, yaitu parameter BK untuk
fungsi RATA dan parameter VAL untuk fungsi STD_DEV
Ilustrasi flowchart untuk fungsi RATA dan fungsi STD_DEV dapat dilihat pada
gambar 5.12 sedang flowchart untuk algoritma DEVIASI_STANDAR dapat
dilihat pada gambar 5.13 di halaman berikut.
SUM = 0
EXIT
FoR ( K = 1;K<= TRUE
CLASS_SIZE;K++)
AVER = SUM/CLASS_SIZE
Return (AVER)
SUM = 0
DS = SQRT(SUM/(VAL – 1))
Return (DS)
START
READ (SIZE)
EXIT TRUE
For (K = 1 ;K<= SIZE;K++)
READ (DATA[K])
END
5.4 String
J a k a r t a \0
NAMA: A D I A N T O \0 ? ?
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] → indeks array
Sebagai contoh lihat ekspresi berikut ini. Variabel S dan T adalah variabel integer.
a. S = STRLEN(“Computer Science”) S = 16
b. T = 2 + 3 + STRLEN(“Computer Science”) T = 21
Algoritma LETTER_FREQUENCY
Algoritma untuk menghitung frekuensi suatu huruf dalam suatu
string. ALFABET adalah variabel string yang berisi daftar seluruh
huruf. TEXT adalah variabel string yang berisi string yang akan
diperiksa. FREKUENSI[26] adalah array linier yang menyimpan
persentasi banyaknya suatu karakter dalam string input; bertipe
real. Variabel TOTAL_HURUF untuk menyimpan banyaknya huruf
dalam variabel TEXT. Algoritma ini menggunakan built in
function STRLEN(s).
[deklarasi array]
Char ALFABET[26]
Char TEXT[50]
Real FREKUENSI[26]
1. [inisialisasi variabel string ]
ALFABET = “ABCDEFGHIJKLMNOPQRSTUVWXYZ”
2. [masukkan string yang akan diperiksa – dalam huruf besar]
Read (TEXT)
3. [inisialisasi variabel]
TOTAL_HURUF = 0
4. [menghitung panjang string input]
PANJANG_TEXT = STRLEN(TEXT)
5. [inisialisasi array FREKUENSI dengan 0]
For ( K = 0 ; K < 26 ; K++)
{ FREKUENSI[K] = 0
}
6. [loop untuk memeriksa string input huruf per huruf]
For ( K = 0 ; K <= PANJANG_TEXT ; K++ )
{
6.a [mengambil 1 huruf dari string input]
STRCPY(HURUF,TEXT[K])
6.b [mencari posisi HURUF]
For (J = 0; J < 26 ; J++)
{
6.c [Jika HURUF adalah alfabet]
If (HURUF == ALFABET[J] )
[increment nilai array FREKUENSI pada indeks J]
{ FREKUENSI[J] = FREKUENSI[J] + 1
TOTAL_HURUF = TOTAL_HURUF + 1
break
}
}
}
7. [loop untuk menampilkan isi array FREKUENSI]
For ( K = 0 ; K < 26 ; K++ )
{ [menghitung persentasi]
FREKUENSI[K] = FREKUENSI[K]/TOTAL_HURUF*100
Write(“Frekuensi dari huruf ke “, K+1, “ adalah “,
FREKUENSI[K])
}
8. Write (“Banyaknya huruf dalam string = “, TOTAL_HURUF”)
9. Halt
c. 1. I = 0
2. While ( I 10 )
2.a. { If (mod(I,3) = = 0)
2.a.i. { A[I] = 0 }
2.b Else
2.b.i. { A[I] = I }
d. 1. A[0] = 3
2. I = 1
3. While ( I < 10 )
3.a. { A[I] = A[I-1] + 1
3.b. I = I+1
3.c. Write (A[I]) }
e. 1. For ( I = 6 ; I < 10 ; I ++ )
1.a. { If (mod(I,2) = = 0)
1.a.i { B[I – 6] = 0
1.a.ii B[I] = 0 }
1.b Else
1.b.i. { B[I – 6] = 1.25 * I
1.b.ii. B[I] = 2.75 * I } }
f. 1. For ( I = 0 ; I < 10 ; I ++ )
1.a. { If (mod(I,4) = = 0)
1.a.i { C[I] =‘a’ }
Else
1.b. { If (mod(I,4) = = 1)
1.b.i { C[I] = ‘b’ }
Else
1.c. { If (mod(I,4) = = 2)
1.c.i { C[I] = ‘c’ }
Else
1.c.ii { C[I] = ‘d’ }
} } }
3. Buatlah deklarasi untuk array berikut lalu buat potongan algoritma untuk
membuat array berikut ini:
a. Array integer yang indeksnya adalah 0 sampai 8 dan berisi data yang adalah
urutan kebalikan dari indeksnya.
b. Array logika dengan banyaknya komponen 25 dan berisi data yang berupa
konstanta logika TRUE jika indeksnya bilangan ganjil atau FALSE jika
indeksnya bilangan genap.
c. Array real yang indeksnya adalah angka 0 sampai 359 dan komponennya
berupa nilai dari fungsi sinus dari indeksnya (sudut 0, 1, 2, ..., 359).
d. Array integer yang berisi banyaknya hari dalam tiap bulan dalam satu tahun.
Indeks array menyatakan angka bulan.
4. Diketahui A adalah array real yang terdiri dari 100 komponen dan
diasumsikan komponen array bersifat unik.
a. Buatlah algoritma untuk menentukan komponen yang terkecil dan kedua
terkecil dari array A ini.
b. Buatlah algoritma untuk menentukan selisih yang terbesar dari dua komponen
yang berurutan.
6.a. Buat fungsi TENGAH untuk mencetak string input di tengah halaman jika
diketahui lebar halaman adalah 120 karakter dan panjang string input < 120
karakter.
6.b. Buat pula algoritma utamanya.
7.a. Buat fungsi REVERSE untuk menerima string input dan menghasilkan
string output yang isinya adalah kebalikan urutan karakter dalam string
input. Sebagai contoh string input = “abcd”, maka string output = “dcba”.
Buat pula algoritma utamanya.
7.b. Buat pula algoritma utamanya
8.a. Palindrome adalah string yang dapat dibaca dari depan maupun dari
belakang. Contohnya adalah ”malam”, ”kodok” dan lain-lain. Buatlah fungsi
(rekursif dan iteratif) untuk menentukan apakah sebuah string input
termasuk palindron atau bukan. Diasumsikan string input berupa huruf kecil
semua. Buat pula algoritma utamanya.
8.b. Buat pula algoritma utamanya.
9. Buatlah fungsi untuk rumus statistik berikut ini jika diketahui X adalah array
real yang terdiri dari dari n komponen.
n n
1 1
n ∑|x i −x| x= n ∑ x i
a. Mean deviation (MD) = i =1 dengan i=1
n
n
∑ x1
b. Harmonic mean (HM) = i =1 i
c. Range (R) = maximum{x1, x2, ..., xn} - minimum{x1, x2, ..., xn}
d. Geometric mean (GM) = (x1 x2 ... xn)1/n
Array multi dimensi adalah array yang mempunyai lebih dari satu
indeks/subscript. Jumlah maksimum indeks tergantung dari bahasa pemrograman
yang digunakan, ada yang dapat menampung sampai 9 indeks atau array 9
dimensi. Dalam kuliah ini hanya dibahas array 2 dimensi yaitu bentuk yang paling
sederhana dari array multi dimensi
dengan:
- tipe data : tipe data dari komponen array
- nama_array: nama dari array. Kriteria membuat nama array sama dengan kriteria
untuk membuat identifier
Gambar 5.14 a dan b berikut menunjukkan ilustrasi dari kedua jenis urutan
untuk memproses array A yang terdiri dari 3 baris dan 4 kolom (A[3] [4]).
Perhatikan perbedaan urutan pemrosesan komponen array 2 dimensi dari kedua
cara tersebut. Urutan komponen array yang diproses juga menggambarkan urutan
penyimpanan komponen array di memori komputer. Pada umumnya, array
matriks disimpan secara rowwise, kecuali jika disebutkan secara khusus cara
penyimpanannya.
(a) Rowwise:
A[0][0] A[0][0] A[0][1] A[0][2] A[0][3]
A[0][1]
A[0][2]
A[0][3]
A[1][0] A[1][0] A[1][1] A[1][2] A[1][3]
A[1][1]
A[1][2]
A[1][3]
A[2][0] A[2][0] A[2][1] A[2][2] A[2][3]
A[2][1]
A[2][2]
A[2][3]
A[2][1]
A[0][2]
A[1][2] A[2][0] A[2][1] A[2][2] A[2][3]
A[2][2]
A[0][3]
A[1][3]
A[2][3]
Sebagai contoh, gunakan deklarasi array 2 dimensi yang terdiri dari 3 baris
dan 2 kolom seperti berikut:
Untuk membaca 6 buah data real lalu menyimpannya ke array matriks X, maka
instruksi yang dapat diberikan adalah:
1. Menggunakan nama array dan indeksnya:
a. Rowwise:
READ (X[0] [0])
READ (X[0] [1])
READ (X[1] [0])
READ (X[1] [1])
READ (X[2] [0])
READ (X[2] [1])
Atau
READ (X[0] [0], X[0] [1], X[1] [0], X[1] [2], X[2] [0], X[2] [1],)
b. Columnwise:
READ (X[0] [0])
READ (X[1] [0])
READ (X[2] [0])
READ (X[0] [1])
READ (X[1] [1])
READ (X[2] [1])
Atau
READ (X[0] [0], X[1] [0], X[2] [0], X[0] [1], X[1] [1], X[2] [1])
2. Menggunakan pengulangan bertingkat:
a. Rowwise:
For ( I = 0 ; I < 2 ; I++ )
{ For ( J = 0 ; J < 3 ; J++ )
Matriks A disimpan dalam array 2 dimensi A[3][5] dan vektor B disimpan dalam
array linier B[5], dan vektor C disimpan dalam array linier C[3].
ALGORITMA MATRIKS_KALI_VEKTOR
Algoritma untuk membaca data matriks A dan vektor B, kemudian
melakukan perkalian matriks dengan vektor lalu menampilkan hasil
perkalian. Matriks A disimpan dalam array A [3][5]. Vektor B
disimpan dalam array B[5]. Hasil perkalian disimpan dalam vektor
C[3]. Semua komponen array bertipe real. Variabel p dan q
digunakan sebagai pencacah, bertipe integer.
[deklarasi array]
REAL A[3][5]
REAL B[5]
REAL C[3]
Ilustrasi flowchart untuk perkalian matriks dengan vektor dapat dilihat pada
gambar 5.15 di halaman berikut.
START
false true
For (p = 0 ; p < 3 ; p++)
true
For (q = 0 ; q < 5 ; q++)
false
Read (A[p][q])
false true
For (p = 0 ; p < 5 ; p++)
Read (B[p])
false true
For (p = 0 ; p < 3 ; p++)
C[p] = 0
false true
For (q = 0 ; q < 5 ; q++)
Write (C[p])
STOP
selama 4 minggu. Dengan demikian diperlukan array 2 dimensi yang terdiri dari
50 baris dan 5 kolom. Contoh algoritma untuk memecahkan masalah ini dapat
dilihat pada Algoritma Penjualan berikut.
ALGORITMA PENJUALAN
Algoritma untuk menyimpan data penjualan tiap minggu dari 50
salesman. Data penjualan disimpan dalam array matriks JUAL[50]
[5] yang bertipe integer. Kolom pertama sampai ke empat berisi
data penjualan dari tiap salesman untuk minggu pertama sampai
ke empat. Dan kolom yang ke lima berisi total penjualan dalam 4
minggu. Data nama salesman disimpan dalam array lininer
}
7. [inisialiasai variabel]
max = 0
b=0
8. [Mencari total penjualan terbesar dalam 1 bulan]
For ( i = 0 ; i < 50 ; i++ )
{ if (JUAL[i][4] > max)
{ max = JUAL[i][4]
b=i
}
}
Write (“Penjualan terbesar pada bulan ini: ”, max)
Write (“oleh salesman “, NAMA[b])
9. [selesai]
Halt.
Sama seperti array 1 dimensi, array dua dimensi dapat pula digunakan
sebagai parameter fungsi. Dengan demikian data yang disimpan dalam arrray akan
“diserahkan” ke fungsi untuk diproses. Bentuk umum dari deklarasi fungsi yang
menggunakan array adalah sebagai berikut:
dengan :
- nama_fungsi: nama dari fungsi yang dibuat, aturan untuk membuat nama fungsi
sama dengan aturan untuk membuat identifier dan harus unik
- tipe_data_array [ ] [ ]: parameter yang menunjukkan tipe data dari komponen
array. Dua pasang tanda [ ] menunjukkan bahwa argumen ini adalah array dua
dimensi
- integer_1: parameter yang menunjukkan banyaknya baris dalam array, tipe
datanya integer
atau
dengan :
- nama_fungsi: nama dari fungsi yang dibuat, aturan untuk membuat nama fungsi
sama dengan aturan untuk membuat identifier dan harus unik
- nama_array [ ] [ ]: menunjukkan nama dari array (variable dummy). Dua pasang
tanda [ ] menunjukkan bahwa parameter ini adalah array dua dimensi
- baris: parameter yang menunjukkan banyaknya baris dari array (variable
dummy), tipe datanya integer
- kolom: parameter yang menunjukkan banyaknya kolom dari array (variable
dummy), tipe datanya integer
- parameter_lain : parameter-parameter lain yang digunakan oleh fungsi untuk
menerima data (variable dummy).
Sebagai contoh penggunaan array sebagai argumen dari fungsi, akan dibuat
algoritma untuk membaca data 2 buah matriks yang berukuran 3 x 3, melakukan
operasi tambah dan kali lalu menampilkan hasilnya. Seluruh proses dilakukan
oleh fungsi (fungsi BACA_DATA, fungsi TAMBAH, fungsi KALI dan fungsi
CETAK_MAT), sehingga algoritma utama (algoritma OPERASI_MATRIKS)
hanya berisi instruksi untuk memanggil fungsi. Hasil fungsi dikeluarkan melalui
parameter output fungsi. Perhatikan deklarasi masing-masing fungsi.
}
}
Algoritma OPERASI_MATRIKS
Algoritma untuk membaca data matriks A dan B yang masing-
masing berukuran 3 baris X 3 kolom. Kemudian melakukan operasi
tambah dan kali. Hasil operasi disimpan dalam matriks C dan D
yang berukuran 3 baris X 3 kolom. Seluruh operasi dilakukan oleh
fungsi. Fungsi BACA_DATA untuk membaca data matriks, fungsi
TAMBAH untuk melakukan operasi penambahan, fungsi KALI untuk
melakukan operasi perkalian dan fungsi CETAK_MAT untuk
menampilkan data matriks.
[deklarasi array]
REAL A[3] [3]
REAL B[3] [3]
REAL C[3] [3]
REAL D[3] [3]
[deklarasi fungsi]
VOID BACA_DATA (REAL [ ] [ ], INTEGER, INTEGER)
VOID TAMBAH (REAL [ ] [ ], REAL [ ] [ ], REAL& [ ] [ ], INTEGER,
INTEGER)
VOID KALI (REAL [ ] [ ], REAL [ ] [ ], REAL& [ ] [ ], INTEGER,
INTEGER, INTEGER, INTEGER)
VOID CETAK_MAT (REAL [ ] [ ], INTEGER, INTEGER)
1. [Tulis pesan untuk memasukkan data matriks A]
Write (“Masukkan data untuk matriks A[3,3]”)
2. [panggil fungsi BACA_DATA untuk membaca data matriks A]
BACA_DATA(A,3,3)
3. [Tulis pesan untuk memasukkan data matriks B]
Write (“Masukkan data untuk matriks B[3,3]”)
4. [panggil fungsi BACA_DATA untuk membaca data matriks B]
BACA_DATA(B,3,3)
5. [panggil fungsi TAMBAH untuk operasi matriks: C = A + B]
TAMBAH(A,B,C,3,3)
6. [Tulis pesan untuk mencetak hasil penambahan matriks ]
Write (“Hasil penambahan matriks A dan matriks B adalah ”)
TRUE
For (i = 0 ; i < BARIS, i++)
TRUE
For (j = 0 ; i < KOLOM, j++)
FALSE
READ (MAT[i][j])
Return
TRUE
For (i = 0 ; i < B, i++)
TRUE
For (j = 0 ; i < K, j++)
FALSE
Return
WRITE (MAT[I,J])
Return
FALSE
EXIT TRUE
For (I = 1; I = B1 ;I++)
EXIT TRUE
for (J = 1; J <= K2 ; J++)
SUM = 0
MAT_3[I,J] = SUM
Return
START
BACA_DATA(A, 3, 3)
BACA_DATA(B, 3, 3)
TAMBAH(A, B, C, 3, 3)
CETAK_MAT(C, 3, 3)
KALI(A, B, D, 3, 3)
CETAK_MAT(D, 3, 3)
END
Untuk contoh kedua dari aplikasi array 2 dimensi, akan dibuat algoritma
untuk masalah berikut ini:
Sebuah toko yang menjual alat rumah tangga ingin membuat laporan
penjualan bulanan berdasarkan jenis dan banyaknya alat yang dijual. Data
hasil penjualan tiap alat per minggu selama satu bulan dapat dilihat pada tabel
5.6 di bawah ini.
Tabel 5.6 tadi akan disimpan dalam array 2 dimensi REPORT yang berukuran 4
baris dan 5 kolom. Baris menunjukkan minggu dan kolom menunjukkan jenis alat
yang terjual. Perhitungan jumlah alat yang dijual akan dilakukan oleh fungsi
sehingga algoritma utama hanya berisi instruksi untuk membaca data dan
memanggil fungsi.
Algoritma LAPORAN
Algoritma untuk membuat laporan dari tiap jenis barang yang dijual
per bulan dan jumlah barang yang dijual per minggu. Data jumlah
barang yang dijual per jenis per minggu disimpan dalam array 2
dimensi REPORT yang berukuran 4 baris dan 5 kolom. BARIS
menunjukkan minggu dan KOLOM menunjukkan jenis barang.
REPORT, BARIS dan KOLOM bertipe integer. Fungsi WEEKLY_TOTAL
untuk menghitung jumlah barang yang dijual perminggu. Fungsi
UNIT_TOTAL untuk menghitung jumlah unit yang dijual per bulan
untuk tiap jenis barang.
[deklarasi array]
REPORT[4][5]
[deklarasi fungsi]
VOID WEEKLY_TOTAL (INTEGER[ ] [ ], INTEGER, INTEGER)
VOID UNIT_TOTAL (INTEGER[ ] [ ], INTEGER, INTEGER)
1. [Tulis pesan untuk memasukkan data array REPORT]
Write (“Masukkan data untuk array REPORT[4,5]”)
2. [membaca data untuk array REPORT]
For ( I = 0 ; I < 4 ; I ++ )
{ For ( J = 0 ; J < 5 ; J++)
{ Read(REPORT[I][J])
}
}
3. [panggil fungsi WEEKLY_TOTAL]
WEEKLY_TOTAL(REPORT, 4, 5)
4. [panggil fungsi UNIT_TOTAL]
UNIT_TOTAL(REPORT, 4, 5)
5. [selesai]
Halt
FALSE TRUE
for (WEEK = 1; WEEK < BARIS;
WEEK++)
TOTAL = 0
FALSE TRUE
for (APPL = 1 ; APPL <= KOLOM
; APPL++)
Return
FALSE TRUE
for (APPL = 1; APPL <= KOLOM
; APPL++)
TOTAL = 0
FALSE TRUE
for (WEEK = 1;WEEK <= BARIS
; WEEK++)
Return
START
FALSE TRUE
for (I = 1 ; I <= 4 ; I++)
WEEKLY_TOTAL(REPORT,4,5)
UNIT_TOTAL(REPORT, 4, 5)
END
Sebagai latihan buatlah tabel telusur untuk fungsi WEEKLY_TOTAL dan fungsi
UNIT_TOTAL dengan menggunakan data pada tabel 5.6.
{ B[I] = I
}
For ( I = 1 ; I <=3 ; I++ )
{ For (J = 0 ; J < 3 ; J++ )
{ A[I] [J] = B[I] + B[J]
}
}
f. For ( I = 0 ; I < 6 ; I++ )
{ B[I] = I
}
For { J = 0 ; J < 3 ; J++ )
{ A[1] [J] = J + 6
}
For ( I = 0 ; I < 2 ; I++ )
{ For ( J = 0 ; J < 3 ; J ++ )
{ A[B[I+1]] [B[J]] = B[I + J]
}
}
[ a 21
...
an 1
a22
.. .
a n2
...
...
...
[ a12 a 22
. . . . ..
a1m a 2m
. ..
. ..
. ..
an 2
. ..
a nm
]
Transpose matriks diperoleh dengan cara menukar kolom dengan baris. Buat
fungsi yang mempunyai input argumen-nya adalah matriks dan output
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
... ... ... ... ... ...
Secara umum sebuah elemen pada suatu baris diperoleh dengan cara
menjumlahkan dua elemen dari baris di atasnya. Buatlah algoritma untuk
membuat 10 baris segitiga Pascal ini.
BOBOT: 1 2 3
Buatlah algoritma untuk membaca nilai dari N siswa untuk M soal, membaca
bobot untuk masing-masing soal, lalu menghitung nilai akhir yang diperoleh
siswa.
7. Ujian akhir terdiri dari 100 soal pilihan ganda. Tiap soal mempunyai 5 pilihan
dan hanya satu jawaban yang benar. Hasil ujian dan informasi mahasiswa
dapat direpresentasikan sebagai berikut:
KUNCI:
1 2 3 4 .... 99 100
JAWABAN:
1 2 3 4 .... 99 100 NAMA:
1
2
...
...
N
Array KUNCI adalah array integer, berisi jawaban yang benar dari soal ujian
pilihan ganda (angka 1, 2, 3, 4, atau 5). Matriks JAWABAN[I,J] adalah array
integer, berisi jawaban dari siswa ke I untuk soal ke J. Array NAMA adalah
array string, berisi nama siswa yang mengikuti ujian. Jawaban ujian dikode
sebagai angka 1, 2, 3, 4 atau 5. Jika ada lebih dari suatu jawaban, maka dikode
sebagai angka 6. Jawaban yang benar bernilai 1 dan seorang siswa baru dapat
dinyatakan lulus jika mendapat nilai minimal 60.
Buatlah algoritma untuk mengisi array KUNCI, JAWABAN dan NAMA.
Telusurilah array KUNCI dan JAWABAN untuk menentukan nilai siswa,
simpan hasilnya dalam array NILAI. Output algoritma adalah semua nama
siswa dan nilainya yang mendapatkan predikat lulus.
8. Diketahui tabel ukuran diameter dan berat besi beton yang digunakan untuk
membangun gedung tinggi seperti berikut:
Buatlah algoritma untuk membaca data tabel ukuran diameter dan berat besi
beton di atas, menyimpannya dalam array, membaca kebutuhan kontraktor
lalu menghitung berat dari masing-masing besi beton dan berat total dari
seluruh besi beton yang dibutuhkan.
14 600
18 400
10. Di dalam teori pengolahan gambar digital, terdapat sebuah operasi yang
digunakan untuk mengabungkan gambar dengan cara menumpukkan satu
gambar pada gambar yang lain. Apabila gambar yang berada di atas memiliki
nilai transparansi = X maka gambar hasil gabungan yang tampak akan
merupakan perpaduan gambar yang di atas dengan gambar di bawahnya yang
akan bergantung pada nilai transparansi X tadi. Operasi ini dikenal sebagai
BLENDING. Sebuah gambar hitam putih (monokromatik) dalam format
digital akan memiliki nilai kemungkinan warna sebanyak 256 (dari 0 – 255)
dengan 0 mewakili warna hitam dan 255 mewakili warna putih, sedangkan
nilai di antaranya akan mewakili warna dari hitam ke putih (skala warna abu-
abu – grey scale). Gambar hitam putih dalam format digital disimpan sebagai
matriks yang masing-masing elemen mewakili komponen warna pada titik
(disebut juga pixel) tersebut.
Misalnya diketahui gambar berukuran 4 x 4 titik/pixel dengan nilai dari
masing-masing pixel seperti tabel berikut:
0 15 255 128
20 16 240 33
100 255 11 56
196 220 122 19
Anda diminta:
a. Buatlah sebuah fungsi BLENDING yang menerima input nilai transparansi
dari gambar kedua (di atas) dan 3 buah array yaitu array pertama dan
kedua mewakili gambar asal yang akan di-blend kemudian menghitung
warna hasil gabungan/blending dan menyimpan hasilnya pada array
ketiga. Fungsi juga menerima parameter banyaknya baris dan kolom yang
mewakili ukuran gambar yang akan dioperasikan. (Pada soal ini
diasumsikan bahwa ukuran kedua gambar sama).
11. Diketahui data gaji karyawan suatu perusahaan disimpan dalam array matriks.
Baris menunjukkan karyawan ke i, kolom pertama menyimpan jumlah hari
kerja dalam sebulan, kolom kedua menyimpan golongan karyawan dan kolom
ketiga menyimpan gaji yang diterima dalam 1 bulan. Gaji karyawan dalam 1
bulan dihitung berdasarkan golongan seperti tabel berikut:
11.a. Buatlah fungsi untuk menghitung gaji seorang karyawan berdasarkan tabel
di atas
11.b. Buatlah algoritma untuk memasukkan data karyawan (jumlah hari kerja
dan golongan) ke dalam ke array matriks lalu menghitung besar gaji untuk
tiap karyawan dengan menggunakan fungsi pada 11.a dan menampilkan
hasilnya dalam bentuk tabel. Banyaknya karyawan ditentukan sendiri.
Hitung pula total gaji dari seluruh karyawan.