Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

LARIK (ARRAY).

Presentasi serupa


Presentasi berjudul: "LARIK (ARRAY)."— Transcript presentasi:

1 LARIK (ARRAY)

2 Pendahuluan Struktur data dasar yang sangat berdaya guna
Sekumpulan data sejenis, mudah dikelola. Pengoperasian yang sangat sederhana, fleksibel dan canggih.

3 Pendahuluan Dapat digunakan untuk mensimulasikan struktur data yang lain: Stack Queue Tree Graph

4 Pendahuluan Larik : Variabel yang terdiri dari beberapa bagian
Setiap bagian sama ukuran dan jenisnya serta dapat diolah sendiri-sendiri Masing-masing bagian larik disebut elemen atau unsur larik

5 Pendahuluan Ilustrasi: Kotak K terdiri dari 12 bagian K 1 2 3 4 5 6 7
8 9 10 11 12

6 Pendahuluan Perintah: “Taruh kelereng warna biru pada kotak K”
Dengan adanya pengkotakan dan penomoran maka perintah dapat diubah sehingga tidak membingungkan harus ditaruh dimana kelereng tersebut. Ubah Perintah: “Taruh kelereng warna biru pada kotak nomor 7.”

7 Pendahuluan Larik dibuat dengan perintah sebagai berikut: def
l : array of integer edef Akan muncul larik bernama l yang terdiri dari 12 elemen Setiap elemen diberi nomor 1 s.d 12. yang disebut indeks larik. Diisi oleh bilangan bulat. Bisa juga untuk aksara

8 Pendahuluan K 1 2 3 4 5 6 7 8 9 10 11 12 Untuk menyimpan bilangan 7681 pada elemen ke –3 larik 1, dibuat perintah sebagai berikut: 1[3] : = 7681

9 Pendahuluan Kotak pada ilustrasi sebelumnya dapat dianggap sebagai kumpulan kotak-kotak kecil berukuran sama yang disusun sehingga membentuk beberapa baris Susunan Kotak dua dimensi terdiri dari 12 elemen: def l : array [ 1..3, 1..4 ] of integer edef

10 Pendahuluan K 1 2 3 4 1 1 2 3 4 5 6 7 8 9 10 11 12 2 3 Untuk menyatakan kotak tertentu, kita dapat memberi nomor pada setiap kotak

11 Pendahuluan Perintah diatas menyatakan larik 1 terdiri dari 3 baris dan 4 kolom. Larik semcam ini dinamakan berdimensi dua sedang larik sebelumnya disebut berdimensi satu. Untuk mengisi elemen larik pada baris ke-2 kolom ke-3 dengan bilangan 81, cukup ditulis: 1 [2,3] : = 81

12 Pendahuluan Elemen larik pada baris ke-2 kolom ke-3 akan berisi bilangan 81 sedang yang lain tidak. l 1 2 3 4 1 ? 81 2 3

13 Pendahuluan Larik berdimensi 3 dibuat dengan perintah:
def 1 : array [1..3, 1..4, 1..7] of real edef Perintah tersebut akan membentuk larik dengan jumlah elemen sebanyak: 3*4*7* = 84 buah

14 Pendahuluan Ada 3 tingkat masing-masing berisi 4 baris dan 7 kolom kotak. Analog dengan kumpulan kotak yang tersusun pada beberapa bidang yang disusun membentuk tumpukan.

15 Membalik isi berkas b1 b2 60 65 71 78 85 85 78 71 65 60 Misalkan ada berkas runtut (sequential file) b1 yang berisi angka-angka dengan urutan membesar seprti pada gambar diatas.

16 Membalik isi berkas Urutan data dibalik meniadi mengecil dan disimpan pada gamabr b2. Pengembangan Algoritma Berkas runtut hanya dapat dibaca secara berturutan dan hanya dapat ditulis secara berturutan iuga. Menggunakan satu variabel, yaitu bill

17 Membalik isi berkas Membalikkan berkas dengan memakai variabel biasa:
memori disk a disk 60 b 65 60 65 71 78 85 85 78 71 65 60 c 71 d 78 e 85 berkas b2 berkas b1

18 Membalik isi berkas Algoritma untuk membaca semua data ke dalam larik 1 adalah sebagai berikut: read (b1, l[1]) read (b1, l[2]) read (b1, l[3]) read (b1, l[4]) read (b1, l[5]) Perintah read ( b1, l[1]) = membaca data dari berkas b1 dan menyimpan ke dalam larik l yang pertama. Ke-5 perintah adalah identik, kecuali yang kurung siku (nomor elemen larik)

19 Membalik isi berkas Larik dapat melakukan manipulasi index, karena index dapat berupa variabel iika indeks dinyatakan dengan variabel i , harga awal haruslah 1.

20 Membalik isi berkas Harga akan diubah dengan penambahan 1 pada setiap perintah read berikutnya, dapat dinyatakan sbb : i := 1 while not eof (b1) do read (b1, l[i]) i := i + 1 ewhile

21 Membalik isi berkas Perintah read (b1, l[i]) = baca data dari berkas dan menyimpannya di dalam elemen larik yang ke-i. Harga i yang pertama adalah 1, oleh karena itu 1[i] berarti 1[1], sehingga read (b1, 1[i]) yang pertama ekuivalen dengan perintah read (b1, 1[1]), dst. Untuk menuliskan isi larik 1 dengan urutan terbalik sama halnya dengan pembacaan data sebelumnya

22 Membalik isi berkas Jika i dianggap sebagai indeks, maka indeks i dimulai dari 5 dengan pengurangan 1. for i := 5 to 1 step –1 do write (b2, 1[i]) efor

23 Membalik isi berkas Rincian algoritma untuk membalik isi berkas b1 ke berkas b2 adalah sebagai berikut: proc Balik Berkas (b1, b2) def maksL : 100 l: array (1..maksL) of integer edef

24 Membalik isi berkas (baca isi berkas b1 dan simpan ke larik l) i := 1
while not eof (b1) do read (b1, l[i]) i := i +1 ewhile (tulis terbalik isi larik l ke berkas b2) for i := 5 to : step –1 do write (b2, l[i]) efor eproc

25 Membalik isi berkas b1 dan b2 didefinisikan pada program yang memanggil prosedur ini sebagai berikut: def b1, b2 : file edef

26 Membalik isi berkas Evaluasi Program
Program Balik berlaku untuk berkas yang datanya hanya 5 buah.

27 Membalik isi berkas Prosedur Balik dapat teriadi dua kesalahan:
Jika data b1 lebih dari 5 buah Untuk mengatasi ditambah satu perintah if untuk memeriksa apakah indeks larik melebihi 5, jika iya program dihentikan. Jika data b1 kurang dari 5 buah Program akan berhenti atau mengisi data dengan data yang tidak diharapkan

28 Membalik isi berkas Jika variabel yang mencatat banyaknya bilangan yang terbaca  n, maka algoritmanya menjadi : for i := n to step –1 do write (b2, l[i]) efor

29 Membalik isi berkas Harga variabel n harus ditentukan pada saat pembacaan data. Variabel i menyatakan index elemen larik yang siap diisi  n := i – 1 pada akhir pembacaan data. Algoritmanya sebagai berikut :

30 Membalik isi berkas proc BalikBerkas (b1, b2) def maksL : 100
l : array [1 .. maksL] of integer edef

31 Membalik isi berkas (baca isi berkas b1 dan simpan ke larik l) i := 1
While not eof (b1) do read (b1, l[i]) i := i +1 if i > maksL then write(‘Data tidak muat di dalam larik’) stop(menghentikan proses) eif ewhile n := i - 1

32 Membalik isi berkas (tulis terbalik isi larik l ke berkas b2)
for i := n to 1 step –1 do write(b2, l[i]) efor eporc prog P6_1() def b1, b2 : file edef BalikBerkas (b1, b2) eprog

33 Membalik Isi Larik Algoritma untuk membalik isi larik: 10 11 12 13 14
15 l (a) 15 14 13 12 11 10 l (b)

34 Membalik Isi Larik Pengembangan Algoritma
Diubah dengan mempertukarkan isi elemen larik pertama dengan isi elemen larik terakhir, kemudian tukar isi elemen larik yang kedua dengan isi elemen larik kedua dari akhir, dst.

35 Membalik Isi Larik 2 10 11 12 13 14 15 15 14 13 12 11 10 (a) Proses Pembalikan isi larik temp 1 3 (b) Proses pertukaran isi larik

36 Membalik Isi Larik Untuk menukar dua elemen larik diperlukan satu variabel yaitu temp dan tiga proses pemuatan (assignment) seperti pada gambar. Simpan isi elemen larik pertama ke variabel temp, kemudian salin isi elemen larik terakhir ke elemen pertama, dan akhirnya salin isi temp ke elemen terakhir. Bilangan n adalah indeks elemen terkahir

37 Membalik Isi Larik temp := l[1] l[1] := l[n] l[n] := temp Prosedur yang sama dilakukan untuk elemen ke-2,3,4 dst. Bila jumlah elemen larik adalah n maka nomor elemen tengah larik adalah t = n div 2, yaitu hasil bagi bilangan bulat bilangan n dengan 2. Contoh: 6 div 2 = 3 5 div 2 = 2

38 Membalik Isi Larik Algoritma pembalikan isi larik dapat diformulasikan sbb: t := n div 2 (t adalah nomor tengah larik ) for i := to t do (tukar elemen ke-i dengan elemen ke-i dari akhir ). Elemen ke-i adalah l[i] sedang elemen i dari akhir adalah l[j] dimana j mulai dari n dengan pengurangan 1, sedang i mulai dari dengan pertambahan 1.

39 Membalik Isi Larik Algoritma lengkap pembalikan isi larik adalah:
proc Balik (l, n) t := n div 2 (nomor tengah larik). j := n (indeks elemen terakhir) for i := 1 to t do temp := l[i] l[i] := l[j] l[j] := temp j := j-1 efor eproc

40 Membalik Isi Larik Pemanggilan prosedur Balik dengan perintah Balik (l,n) akan membalik susunan data didalam larik l, yang elemennya terdiri dari n buah. Contoh algoritma untuk membaca data dari berkas b dan menyimpannya ke dalam larik l, kemudian membalik isi larik tersebut :

41 Membalik Isi Larik prog P6 : 2 () Baca berkas (b, l, n)
(baca berkas b dan simpan ke larik l) (catat banyaknya data yang didalam n) Balik Larik (l,n) (balik isi larik l berelemen sebanyak n) Tulis Larik (l,n) (tulskan semua elemen larik l) eprog

42 Membalik Isi Larik proc Baca Berkas (b, l, n) i := 1 read (b, bil)
while not eof (b) do l[i] := bil i := i +1 ewhile n := i – 1 eproc

43 Membalik Isi Larik proc Balik (l,n) t := n div 2 (nomor tengah larik)
j := n (indeks elemen terakhir) for i := 1 to t do temp := l[i] l[i] := l[j] l[j] := temp j := j – 1 efor eproc

44 Membalik Isi Larik proc TulisLArik (l,n) for i := 1 to n do
write (l[i]) efor eproc

45 Menghilangkan Duplikasi
Untuk menghilangkan duplikasi data yang ada didalam suatu larik akan dibuat algoritma. Contoh: Terdapat duplikasi L 10 10 10 14 15 16 16 17 17 19 (a) L 10 14 15 16 17 19 (b) tanpa duplikasi

46 Menghilangkan Duplikasi
Pengembangan Algoritma Periksa elemen yang sama pada larik Hilangkan elemen tersebut dengan menimpa dengan elemen berikut

47 Menghilangkan Duplikasi
Algoritmanya: proc BuangDuplikasi (l, m, n) (Buang duplikasi didalam larik l yang elemennya sebanyak m. Banyaknya elemen setelah duplikasi dibuang adalah n) [mulai dari elemen pertama] while [belum semua data diperiksa] do

48 Menghilangkan Duplikasi
if [elemen itu sama dengan elemen sebelumnya] then [lewati saia] else [timpa data ganda dengan data yang berbeda] eif [laniutkan ke elemen berikutnya] ewhile eproc

49 Menghilangkan Duplikasi
Untuk algoritma rinci perlu dua variabel, misal i dan j. Variabel i mencatat sampai dimana pembuangan duplikasi

50 Menghilangkan Duplikasi
Variabel j mencatat elemen mana yang sedang diperiksa (duplikasi atau bukan) L 10 10 10 14 15 16 16 17 17 19 (a) j L 10 14 15 16 17 19 (b) i Suatu keadaan, saat proses pembuangan duplikasi didalam suatu larik

51 Menghilangkan Duplikasi
Variabel j akan maju terus selama data yang ditemukan tetap sama, sementara i diam. Jika ada data yang berbeda, yaitu l[j] tidak sama dengan l[i] maka i ditambah satu Data yang baru ditemukan ditempatkan pada elemen ke-i.

52 Menghilangkan Duplikasi
proc BuangDuplikasi (l, m, n) (Buang duplikasi dalam larik l yang elemennya sebanyak m. Banyaknya elemen setelah duplikasi dibuang adalah n) i := 1(duplikasi sudah dibuang sampai elemen ke-i) j := 2 (elemen ke-j sedang diperiksa) while j <= m do if l[j] = l[i] then j := j + 1 (lewati saia)

53 Menghilangkan Duplikasi
else (timpa data ganda dengan data yg berbeda) i := i + 1 l[i] := l[j] j := j + 1 eif ewhile n := i eproc

54 Menghilangkan Duplikasi
Perintah j := j + 1 didalam blok then dan blok else dapat disatukan dengan menuliskannya dibawah eif ,sehingga menjadi: proc BuangDuplikasi (l, m, n) (Buang duplikasi dalam larik l yang elemennya sebanyak m. Banyaknya elemen setelah duplikasi dibuang adalah n)

55 Menghilangkan Duplikasi
(duplikasi sudah dibuang sampai elemen ke-i) j := 2 (elemen ke-j sedang diperiksa) while j <= m do if l[j] = l[i] then else

56 Menghilangkan Duplikasi
(timpa data ganda dengan data yg berbeda) i := i + 1 l[i] := l[j] eif j := j + 1 ewhile n := i eproc

57 Menghilangkan Duplikasi
Penulisan if – then – else – eif seperti ini tidak baik, sebaiknya ditulis menjadi:

58 Menghilangkan Duplikasi
proc BuangDuplikasi (l, m, n) (Buang duplikasi dalam larik l yang elemennya sebanyak m. Banyaknya elemen setelah duplikasi dibuang adalah n) i := 1(duplikasi sudah dibuang sampai elemen ke-i) j := 2 (elemen ke-j sedang diperiksa)

59 Menghilangkan Duplikasi
while j <= m do if l[j] < > l[i] then (timpa data ganda dengan data yg berbeda) i := i + 1 l[i] := l[j] eif j := j + 1 ewhile n := i eproc

60 Menghilangkan Duplikasi
jika tidak ada duplikasi, algoritma tsb akan menimpa elemen ke-i dengan elemen ke-j (i = j) Seharusnya penimpaan dilakukan iika i tidak sama dengan j Pengubahan pada algoritma:

61 Menghilangkan Duplikasi
proc BuangDuplikasi (l, m, n) (Buang duplikasi dalam larik l yang elemennya sebanyak m. Banyaknya elemen setelah duplikasi dibuang adalah n)

62 Menghilangkan Duplikasi
i := 1(duplikasi sudah dibuang sampai elemen ke-i) j := 2 (elemen ke-j sedang diperiksa) while j <= m do if l[j] < > l[i] and (i + 1) < > j then (timpa data ganda dengan data yg berbeda) i := i + 1 l[i] := l[j] eif j := j + 1 ewhile n := i eproc

63 Menghilangkan Duplikasi
Pemeriksaan i dan j tidak perlu dilakukan berkali-kali ((i+1) < > j). Tentukan duplikasi yang pertama kemudian penimpaan akan selalu dilakukan pada setiap data berikutnya. Pengubahan algoritmanya:

64 Menghilangkan Duplikasi
proc BuangDuplikasi (l, m, n) (Buang duplikasi dalam larik l yang elemennya sebanyak m. Banyaknya elemen setelah duplikasi dibuang adalah n)

65 Menghilangkan Duplikasi
(cari dupliksai pertma) i := 1(duplikasi sudah dibuang sampai elemen ke-i) j := 2 (elemen ke-j sedang diperiksa) while j <= m and l[j] < > l[i] do i := i +1 j := j + 1 ewhile (buang data dan cari duplikasi berikutnya) while j <= m do if l[j] < > l[i] then

66 Menghilangkan Duplikasi
(timpa data ganda dengan data yg berbeda) i := i + 1 l[i] := l[j] eif j := j + 1 ewhile n := i eproc

67 Menghilangkan Duplikasi
Penulisan while j <= m and l[j] < > l[i] do tidak boleh dituliskan terbalik. Menyebabkan pelaksanaan perbandingan untuk l[j] dimana l lebih besar dari m.

68 Larik Sebagai Variabel Majemuk
Contoh kasus: Data kepegawaian yang dihimpun dalam berkas bernama pegawai yang cantumannya terdiri ruas: nip, nama, tgl. Lahir, dan lain-lain. Hitung jumlah pegawai untuk setiap umur berikut (tabel).Umur dihitung berdasarkan tgl lahir seperti yang tercantum dalam berkas pegawai dan tgl.pembuatan laporan yg dibaca dari papan kunci.

69 Larik Sebagai Variabel Majemuk
Umur jumlah Pegawai 25 ……………….. 26 ………………. 27 …. 55 Selain itu

70 Larik Sebagai Variabel Majemuk
Pengembangan Algoritma Diperlukan Variabel 32 buah untuk menyimpan banyaknya pegawai sesuai dengan umurnya

71 Larik Sebagai Variabel Majemuk
Gunakan larik sebagai variabel majemuk. Struktur data: proses DistribusiUmur (pegawai, jumlah) Nolkan (jumlah, 32) {inisiasi larik jumlah dengan 0} Baca (tglProses) {baca tanggal pemrosesan} read (pegawai, nip, nama, tgl.lahir) while not eof (pegawai) do umur := Kurangkan (tglLahir, tglProses) if umur < 25 or umur > 55 then jumlah [32] := jumlah [32] +1

72 Larik Sebagai Variabel Majemuk
else kelompok :=26 while umur <> kelompok do kelompok := kelompok + 1 ewhile i := kelompok – 25 jumlah [I] := jumlah [i] +1 eif read (pegawai, nip, nama, tglLahir) eproc

73 Larik Sebagai Variabel Majemuk
proc TulisDaftar (jumlah) write (‘………………………………’) write (‘Umur jumlah pegawai’) for i := 1 to 31 do write (i + 25,’ ‘,jumlah [i]) efor write (‘selain itu ‘,jumlah [i]) write (‘……………………………….’) eproc

74 Struktur Data Program Ditribusi Umur Pegawai
1 jumlah pegawai yang berumur 25 2 jumlah pegawai yang berumur 26 3 ……… 4 32 jumlah pegawai yang berumur diluar itu

75 Larik Sebagai Tabel Referrensi
Kegunaan dari larik yang penting : sebagai Tabel Referensi Perlu pengkodean dalam setiap pemasukan data. Contoh: Sebuah perusahaan mengkomputerisasi data kepegawaiannya. Semua data telah tersimpan dalam komputer. Buatlah algoritma untuk menghitung daftar gaji pegawai

76 Larik Sebagai Tabel Referrensi
Masukan. Terdiri dari dua berkas : pegawai dan tabel Berkas pegawai terdiri dari: - nip, 7 digit - nama, 20 aksara - golongan, 1 digit, dari 1 sampai 9 - gaji pokok dalam rupiah, maksimal - status kawin, 1 aksara, K = Kawin, B = Belum Kawin, J = janda, D = Duda - jumlah anak yang masih tanggungan, maksimal 3

77 Larik Sebagai Tabel Referrensi
Berkas tabel terdiri dari: Golongan dari 1 – 9 tunjangan istri, dalam persen tunjangan anak, dalam persen pajak, dalam persen

78 Larik Sebagai Tabel Referrensi
Keluaran Hasil gaji untuk setiap pegawai (gaji, tunjangan, dan pajak) informasi yang dimuat terdiri dari

79 Larik Sebagai Tabel Referrensi
- nip - nama - golongan - gaji pokok - tunjangan istri (tdk sama untuk semua pegawai tapi tergantung golongan pegawai ybs) - tunjangan anak (-idem- dgn tunjangan istri) - pajak = persentasi pajak * gaji total - gaji bersih = gaji total - pajak

80 Larik Sebagai Tabel Referrensi
Struktur Data Persentase tunjangan istri, tunjangan anak serta pajak berlainan pada setiap golongan dan tidak mempunyai keteraturan perbedaan, maka angka-angka persentase tsb disimpan dalam larik pti, pta dan pp yang elemennya sebanyak jumlah golongan.(seperti pada gambar)

81 Larik Sebagai Tabel Referrensi
pti pta pp 1 1 1 2 2 2 3 3 3 9 9 9

82 Larik Sebagai Tabel Referensi
Pengembangan Algoritma prog Hitunggaji ( ) {baca data dari berkas tabel dan simpan pada larik} for i := 1 to 9 do read (tabel, gol, pti[i], pta[i], pp[i]) efor {proses semua data pada berkas pegawai}

83 Larik Sebagai Tabel Referrensi
read (pegawai, nip, nama , golongan, gajiPokok, statusKawin, jumlahAnak) while not eof (pegawai)do write (nip) write (nama) write (golongan) write (gajiPokok)

84 Larik Sebagai Tabel Referrensi
if statusKawin = ‘K’ then tunjanganIstri = pti[golongan]/100*gajiPokok tunjanganAnak = pta[golongan]/100*gajiPokok else tunjanganistri := 0 tunjanganAnak := 0 eif

85 Larik Sebagai Tabel Referrensi
gajiTotal := gajiPokok + tunjanganIstri + tunjanganAnak pajak := pp[golongan]*gajiTotal gajiBersih := gajiTotal – pajak write (tunjanganIstri) write (pajak)

86 Larik Sebagai Tabel Referrensi
write(gajiBersih) read (pegawai, nip, nama, golongan, gajiPokok, statusKawin,jumlahAnak) ewhile eprog


Download ppt "LARIK (ARRAY)."

Presentasi serupa


Iklan oleh Google