2. ARRAY (LARIK)

Download Report

Transcript 2. ARRAY (LARIK)

Dasar Pemrograman
ARRAY/LARIK
1
ARRAY (LARIK)
1. Pengertian Array
Array adalah struktur data yang menyimpan
sekumpulan elemen yang bertipe sama.
Setiap elemen diakses langsung melalui
indeksnya. Indeks tersebut haruslah tipe data
yang mempunyai keterurutan, misalnya
integer atau karakter.
Nama lain array adalah larik, tabel, atau
vektor.
2
2. Cara Pendefinisian Array
Array adalah struktur data statik, artinya jumlah elemen
larik harus sudah diketahui sebelum program
dieksekusi.
Mendefinisikan array pada bagian deklarasi adalah :
 Mendefinisikan banyaknya elemen array
 Mendefinisikan tipe elemen array
Cara pendefinisian array pada bagian deklarasi
Dapat dilakukan dengan cara sebagai berikut :
3
a. Sebagai Peubah (Variabel)
Contoh :
Misalkan L adalah nama peubah array yang
mempunyai 100 elemen yang bertipe integer,
maka dapat dituliskan :
{Deklarasi}
var
L : array[1..100] of integer;
4
b.
Sebagai Tipe Baru
Misalkan LarikInt didefinisikan sebagai
sebuah tipe baru untuk array yang bertipe
integer. Banyak elemen array 100 buah elemen,
maka dapat ditulis sebagai berikut :
{Deklarasi}
type
LarikInt : array[1..100] of integer;
var
P : LarikInt;
5
c.
Mendefinisikan Ukuran Maksimum
Elemen Array Sebagai Sebuah Konstanta
Misalkan LarikInt didefinisikan sebagai nama
sebuah tipe baru untuk array yang bertipe
integer. Banyak elemen maksimum 100 elemen. P
adalah array bertipe integer
{Deklarasi}
const Nmaks = 100;
type LarikInt : array[1..Nmaks] of integer;
var
P : LarikInt;
6
3. Cara Mengacu Elemen Array
Elemen Array diacu melaui indeksnya. Nilai Indeks harus
terdefinisi.
Contoh cara mengacu elemen array :
L[5]
P[k], asalkan k telah terdefinisi
Contoh menggunakan elemen array :
L[4] :=10;
read(P[k]);
if HargaBarang[t]<1000 then
writeln(‘Harga Murah’)
else
writeln(‘Harga Mahal’);
7
4. Pemrosesan Array
Pemrosesan beruntun pada array adalah
pemrosesan mulai dari elemen pertama array
(yaitu elemen indeks terkecil, berturut-turut
elemen berikutnya, sampai elemen terakhir
dicapai, yaitu elemen dengan indeks terbesar)
Skema umum algoritma memproses array (disebut
juga skema mengunjungi/traversal array) adalah :
8
Algoritma_skema_umum_pemrosesan_array
{ Memproses setiap elemen array secara beruntun,
mulai dari indeks terkecil sampai indeks
terbesar}
Deklarasi
const Nmaks = 100 {banyaknya elemen array}
type LarikInt : array[1..Nmaks] of integer
var
A : LarikInt
k : integer
{indeks array}
9
Deskripsi
Inisialisasi
{Pemberian nilai awal}
k←1
{mulai dari elemen pertama}
while k ≤ Nmaks do
Pemrosesan terhadap A[k]
k ← k + 1 {tinjau elemen berikutnya}
endwhile
{akhir pengulangan k > Nmaks}
Terminasi
{Penulisan hasil}
10
Atau dapat juga menggunakan struktur for..do :
Deskripsi
Inisialisasi
{Pemberian nilai awal}
for k ←1 to Nmaks do
Pemrosesan terhadap A[k]
endfor
Terminasi
{Penulisan hasil}
11
4.1. Jumlah Elemen Efektif Array
Bila sebuah array A didefinisikan 100 elemen,
mungkin tidak seluruh seratus elemen yang
dipakai. Banyaknya elemen array yang
dipakai disebut jumlah elemen efektif
Jumlah elemen efektif disimpan dalam nama
peubah tertentu misalnya N
12
4.2. Array Bertipe Terstruktur
Elemen array dapat juga bertipe terstruktur.
Misalkan TabMhs adalah sebuah array yang
elemennya menyatakan nilai ujian seorang
mahasiswa untuk suatu mata kuliah (MK)
yang ia ambil.
Data setiap mahasiswa adalah NIM (Nomor Induk
Mahasiswa), Nama Mahasiswa, Mata Kuliah
yang diambil dan Nilai Mata Kuliah Tersebut.
13
Maka Pendefinisiannya adalah sbb :
Deklarasi
const Nmaks = 100
type Mahasiswa = record
<NIM : String
NamaMhs : String
KodeMK : String
Nilai : char
>
TabMhs : array[1..Nmaks] of Mahasiswa
14
Cara Mengacu Elemen TabMhs
Contoh cara mengacu elemen :
1. Elemen Kedua dari TabMhs
TabMhs[2]
2. Mengacu field NIM dari elemen kedua Array
TabMhs[2].NIM
3. Mengacu field KodeMK dari elemen kedua array
TabMhs[2].KodeMK
Karena record merupakan tipe terstruktur, pencetakan
elemen tidak dapat dilakukan dengan bentuk sebagai
berikut :
write(TabMhs[k])
15
Tapi harus dengan cara sebagai berikut :
write(TabMhs[k].NIM, TabMhs[k].NamaMhs,
TabMhs[k].KodeMK, TabMhs[k].Nilai)
Namun pengisian nilai elemen ke elemen berikutnya
Dengan penulisan berikut adalah benar :
TabMhs[k] ←TabMhs[k+1]
Bentuk tersebut sama dengan pengisian perfield Sbb :
TabMhs[k].NIM ← TabMhs[k+1].NIM
TabMhs[k].NamaMhs ← TabMhs[k+1].NamaMhs
TabMhs[k].KodeMK ← TabMhs[k+1].KodeMK
TabMhs[k].Nilai ← TabMhs[k+1].Nilai
16
4.3. Menginisialisasi Array
Menginisialisasi array adalah memberikan harga
awal untuk seluruh elemen array. Inisialisasi
elemen array misalnya mengosongkan
elemen array sebelum dipakai untuk proses
tertentu.
Menginisialisasi array bertipe numerik dapat
berupa pengisian elemen array dengan nol
sedangkan pada array karakter berarti
mengisi elemen array dengan spasi atau
karakter kosong
17
a. Menginisialisasi Elemen Array dengan 0 (nol)
Procedure Inisialisasi(output A : LarikInt, input N : integer)
{K. Awal : N adalah jumlah elemen efektif array, misalnya sudah
terdefinisi
K. Akhir : Seluruh elemen array A bernilai 0
Proses : Menginisialisasi setiap elemen array A[1..N] dengan 0 }
Deklarasi
k : integer
{pencatat indeks array}
Deskripsi
for k ←1 to N do
A[k] ← 0
endfor
18
b. Menginisialisasi Elemen Array masing-masing dengan 1,2,3,…N
Procedure Inisialisasi(output A : LarikInt, input N : integer)
{K. Awal : N adalah jumlah elemen efektif array, misalnya sudah
terdefinisi
K. Akhir : Seluruh elemen array A bernilai k
Proses
: Menginisialisasi setiap elemen array A[1..N] dengan
1,2,3…N }
Deklarasi
k : integer
{pencatat indeks array}
Deskripsi
for k ←1 to N do
A[k] ← k
endfor
19
4.4. Mengisi Elemen Array dari
Piranti Masukan
Procedure Baca(Input A : LarikInt, input N : integer)
{K. Awal : N adalah jumlah elemen efektif array, misalnya sudah
terdefinisi
K. Akhir : Seluruh elemen array A berisi nilai yang dibaca.
Proses
: Mengisi setiap elemen array A[1..N] dengan nilai yang
dibaca dari piranti masukan }
Deklarasi
k : integer
{pencatat indeks array}
Deskripsi
for k ←1 to N do
read(A[k])
endfor
20
4.5. Menulis Elemen Array Ke
Piranti Keluaran
Procedure Tulis(input A : LarikInt, input N : integer)
{K. Awal : N adalah jumlah elemen efektif array, misalnya sudah
terdefinisi
K. Akhir : Seluruh elemen array A telah tercetak.
Proses
: Mencetak setiap elemen array A[1..N] ke piranti
keluaran }
Deklarasi
k : integer
{pencatat indeks array}
Deskripsi
for k ←1 to N do
write(A[k])
endfor
21
Menghitung Nilai Rata-rata
Procedure HitungRata(input A : LarikInt ,
input N : integer, output u : real)
{K. Awal : N adalah jumlah elemen efektif
array, misalnya sudah terdefinisi
K. Akhir : U berisi rata-rata elemen array
Proses : Menghitung rata-rata elemen
array A[1..N] }
22
Mencari Nilai Maksimum Array
Procedure CariMaks(input A : LarikInt ,
input N : integer, output Maks : integer)
{K. Awal : N adalah jumlah elemen efektif
array, misalnya sudah terdefinisi
K. Akhir : Maks berisi elemen array yang maksimum
Proses : Mencari elemen array A[1..N] yang
maksimum }
23
Mencari Nilai Minimum Array
Procedure CariMin(input A : LarikInt ,
input N : integer, output Min : integer)
{K. Awal : N adalah jumlah elemen efektif
array, misalnya sudah terdefinisi
K. Akhir : Min berisi elemen array yang minimum
Proses : Mencari elemen array A[1..N] yang
minimum }
24
Contoh-contoh yg lebih kompleks
Misalkan akan disimpan data nilai-nilai mata kuliah
mahasiswa pada sebuah array bernama
TabMhs dengan field mahasiswa terdiri dari
NIM, NamaMHs, dan MataKuliah. Mata
kuliah yang diambil mempunyai field
KodeMk, NamaMK, dan Nilai.
Maka Algoritmanya adalah sebagai berikut :
25
Algoritma Baca_Array_Mahasiswa
{ Mengisi elemen array mahasiswa dengan data
yang dibaca ari piranti masukan }
Deklarasi
const Nmaks = 100
type MataKuliah = record
<KodeMK : String,
NamaMK : String,
Nilai : Char >
26
type Mahasiswa = record
<NIM : String,
NamaMhs : String,
MK : array[1..4] of MataKuliah >
TabMhs : array[1..Nmaks] of Mahasiswa
i, j : integer
N : integer
Deskripsi
27
read(N)
for i ← 1 to N do
read(TabMhs[i].NIM)
read(TabMhs[i].NamaMhs)
for j ← 1 to 4 do
read(TabMhs[i].MK[j].KodeMK)
read(TabMhs[i].MK[j].NamaMK)
read(TabMhs[i].MK[j].Nilai)
endfor
endfor
28
Soal-soal
1. Dalam rangka ulang tahun sebuah toserba
memberikan diskon sebesar 15% untuk seluruh
barang. Misalkan data Kode Barang dan Harga
Jual Barang tersebut telah diisikan ke dalam array
HargaJual. HargaJual bertipe LarikBarang.
Buatlah pendefinisian permasalahan tersebut
pada bagian deklarasi dan buatlah prosedur
untuk menurunkan harga barang tersebut.
29
2. Diberikan sebuah array integer A yang berukuran
N elemen. Array A sudah terdefinisi elemenelemennya. Buatlah prosedur untuk mencari
elemen X dalam array yang keluarannya adalah
indeks dari tempat elemen X ditemukan
3. Diberikan sebuah array integer A yang berukuran
N elemen. Array A sudah terdefinisi elemenelemennya. Buatlah prosedur untuk menghitung
banyaknya elemen ganjil dalam array yang
keluarannya adalah banyaknya elemen ganjil yang
ditemukan.
30
4. Diberikan sebuah array integer A yang
berukuran N elemen. Array A sudah terdefinisi
elemen-elemennya. Buatlah fungsi untuk
mengirimkan banyaknya elemen array.
5. Diberikan sebuah array integer A yang
berukuran N elemen. Array A sudah terdefinisi
elemen-elemennya. Buatlah fungsi untuk
menghitung jumlah elemen array.
31
6. Diberikan sebuah array integer A yang berukuran N
elemen. Array A sudah terdefinisi elemen-elemennya.
Elemen array tersebut tersusun terurut membesar.
Buatlah fungsi untuk mengirimkan elemen array yang
paling maksimum dan sebuah fungsi untuk
mengirimkan elemen array yang paling minimum.
7. Diberikan sebuah array integer A yang berukuran N
elemen. Array A sudah terdefinisi elemen-elemennya.
Buatlah Prosedur untuk menghitung jumlah elemen
array yang negatif.
32
8. Diberikan sebuah array integer A yang
berukuran N elemen. Array A sudah terdefinisi
elemen-elemennya. Buatlah prosedur untuk
menghitung rata-rata elemen array yang genap.
9. Diberikan sebuah array integer A yang
berukuran N elemen. Array A sudah terdefinisi
elemen-elemennya. Buatlah fungsi untuk
menghitung banyaknya elemen yang kelipatan 5
dan jumlah elemen array yang kelipatan 5.
33