Pemrosesan data bertype bentukan :
2. Pemrosesan data bertype bentukan :
MHSNILAI : type <NIM: integer >0,MK:string, nilai : character ['A'..'E']> Karena konteksnya mahasiswa ITB, perancang mengetahui bahwa domain dari
mhs adalah sesuai dengan NIM mahasiswa ITB, dan tak satupun mahasiswa ITB bernomor pokok 9999999. Maka jika kita mempunyai sekumpulan informasi MHSNILAI yang dapat diakses secara sekuensial (tersimpan dalam tabel, atau dari sebuah sequential file) , dan misalnya data yang tersimpan adalah :
<8689001,”IF221”, 'A'>, <8689002,”IF221”, 'A'>, <8689007,”IF221”, 'B'>, <8690001,”IF223”, 'E'>, <8690001,”IF222”, 'C'>, <9999999,”XXXXX”, 'A'>,
Setiap elemen bertype MHSNILAI First_Elmt akan mengakibatkan Current_Elmt = <8689001,'IF221', 'A'> Next_Elmt akan mengakibatkan harga Current_Elmt yang baru
= <8689007,”IF221”, 'B'>
jika Current_Elmt = <8689002,”IF221”, 'A'> EOP akan bernilai true untuk Current_Elmt = <9999999,”XXXXX”, 'A'> Perhatikanlah bahwa elemen-elemen berkarakteristik seperti ini harus disimpan atau dibaca satu per satu dari piranti masukan, sebab dari sebuah Current_Elmt, nilai Next_Elmt nya tidak ada rumusnya.
Untuk semua teks algoritma yang merupakan skema pemrosesan sekuensial pada bab ini, dipakai prosedur-prosedur dan fungsi terdefinisi seperti yang dituliskan pada kamus sebagai berikut yang lebih ringkas daripada spesifikasi yang disertai catatan pada awal bab ini:
KAMUS
procedure Inisialisasi { Persiapan yang harus dilakukan
sebelum pemrosesan}
procedure First_Elmt { Memperoleh Current_Elmt yang pertama } procedure Proses_Current_Elmt
{ Proses thd Current-Elmt} procedure Next_Elmt
{ Memperoleh Current_Elmt yang baru } procedure Terminasi
{ Proses yang harus dilakukan setelah pemrosesan semua elemen selesai} EOP : boolean { true jika keadaan sudah mencapai akhir proses:
- pada model dengan mark:
Current element = mark (elemen mark/fiktif) - pada model tanpa maark :
Current element = elemen terakhir } procedure Proses_Kasus_Kosong
{Proses jika dijumpai kasus kosong:
misalnya menuliskan pesan }
procedure Proses_First_Elmt {Proses khusus untuk elemen I } }
Skema Pemrosesan Sekuensial Dengan Mark
SKEMA PEMROSESAN DENGAN MARK
{Tanpa penanganan kasus kosong secara khusus}
Skema :
Inisialisasi First_Elmt while not EOP do
Proses_Current_Elmt Next_Elmt
{ EOP } Terminasi
SKEMA PEMROSESAN DENGAN MARK
{Dengan penanganan kasus kosong}
Skema :
First_Elmt if (EOP) then
Proses-Kasus-Kosong else Inisialisasi repeat
Proses_Current-Elmt Next_Elmt
until ( EOP ) Terminasi
SKEMA PEMROSESAN DENGAN MARK
{Dengan kasus kosong, elemen pertama harus diproses khusus}
Skema :
First_Elmt if (EOP) then
Kasus-Kosong else Inisialisasi Proses_First Iterate
Next_Elmt Stop : EOP Proses_Current-Elmt Terminasi
Skema Pemrosesan Sekuensial Tanpa Mark
SKEMA PEMROSESAN TANPA MARK
{ Karena tanpa mark, tak ada kasus kosong}
Skema :
Inisialisasi First_Elmt iterate
Proses_Current-Elmt stop EOP Next_Elmt Terminasi
SKEMA PEMROSESAN TANPA MARK
{ Karena tanpa mark, tak ada kasus kosong. Akses elemen pertama tidak berbeda dengan akses Next_Elmt }
Skema :
Inisialisasi repeat
Next_Elmt Proses_Current-Elmt
until ( EOP ) Terminasi
SKEMA PEMROSESAN TANPA MARK
{ Karena tanpa mark, tak ada kasus kosong. Pemrosesan khusus terhadap element pertama Pemrosesan elemen kedua dan seterusnya mungkin kosong}
Skema :
Inisialisasi First_Elmt Proses_First_Elmt while (not EOP) do
Next_Elmt Proses_Current-Elmt
{ EOP } Terminasi
Studi Kasus Skema Pengulangan
JUMLAH 1 s/d N:
Buatlah algoritma yang membaca sebuah bilangan bulat positif N, menuliskan:
1,2,3... N dan menjumlahkan 1+2+3+...+N serta menuliskan hasil penjumlahan Berikut ini adalah beberapa versi solusi dan penjelasannya
Versi-1
Program SUMNBil1 {Menjumlahkan 1+2+3+...N, dengan N yang dibaca } {Model tanpa mark, tanpa penanganan kasus kosong}
KAMUS
i : integer { bilangan yang akan diproses } N : integer >0
{ banyaknya bilangan yang dijumlahkan } Sum : integer { jumlah}
ALGORITMA
input (N); Sum ← 0
{ Inisialisasi } i ←1 {First_Elmt: mulai dari 1}
iterate output (i) Sum ← Sum + i
stop( i=N ) {EOP} i ← i+1
{Next_Elmt}
output (Sum)
{Terminasi}
Penjelasan :
1. Pengontrol pengulangan adalah bilangan integer i
2. Analisis : pemrosesan sekuensial dari deret bilangan 1,2,3, ..N Model tanpa MARK, jika i adalah deret yang diproses, i adalah Current element, i bernilai 1,2,3..N
EOP adalah jika i=N; First_Elmt : 1; Next_Elmt : i +1 Proses : menulis setiap bilangan, dan pada akhir proses menulis jumlah
3. Program benar, dengan tambahan spesifikasi : N ≥ 1, sesuai dengan definisi domain i = 1..N
4. Nilai i mentaati definisi domain 1..N
Versi-2
Program SUMNBil2 {Menjumlahkan 1+2+3+...N, dengan N yang dibaca } {Model dengan mark, tanpa penanganan kasus kosong}
KAMUS
i : integer { bilangan yang akan dijumlahkan } N : integer >0
{ banyaknya bilangan yang dijumlahkan } Sum : integer { jumlah }
ALGORITMA
input (N); Sum ← 0
{ Inisialisasi }
i ←1 {First_Elmt} while (i ≤ N) do output (i) Sum ← Sum + i i ← i+1
{Next_Elmt}
{ i > N, I = N+1, Sum = 1 + 2+ 3+ ...+N } output (Sum) {Terminasi}
Penjelasan :
1. Pengontrol pengulangan adalah bilangan integer i
2. Analisis : pemrosesan sekuensial dari deret bilangan 1,2,3, ..N Model dengan MARK, jika i adalah deret yang diproses, nilai i adalah Next element,
i bernilai 1,2,3..N EOP adalah jika i > N, yaitu i = N+1 First_Elmt : 1; Next_Elmt : i +1 Proses : menulis setiap bilangan, dan pada akhir proses menulis jumlah
3. Program benar, tanpa batasan nilai N. Jika N ≤ 0, terjadi kasus kosong
4. Nilai i menjadi di luar domain, jika didefinisikan 1 .. N
Versi-3
Program SUMNBil3 {Menjumlahkan 1+2+3+...N, dengan N yang dibaca }
{Model dengan mark, dengan penanganan kasus kosong}
KAMUS
i : integer {bilangan yang akan dijumlahkan } N : integer >0
{ banyaknya bilangan yang dijumlahkan } Sum : integer { jumlah}
ALGORITMA
input (N); SUM ← 0
{ Inisialisasi } i ←1 {First_Elmt}
repeat output (i) Sum ← Sum + i i ← i+1
{Next_Elmt}
until ( i > N) {i>N
i = N+1, Sum = 1 + 2+ 3+ ...+N } output (Sum) {Terminasi}
Penjelasan :
1. Pengontrol pengulangan adalah bilangan integer i
2. Analisis : pemrosesan sekuensial dari deret bilangan 1,2,3, ..N Model dengan MARK (???)
jika i adalah deret yang diproses, i adalah Next element, i bernilai 1,2,3..N EOP adalah jika Ii= N + 1; First_Elmt : 1; Next_Elmt : i +1 Proses : menulis setiap bilangan, dan pada akhir proses menulis jumlah
3. Program benar, dengan tambahan spesifikasi : N ≥ 1, sesuai dengan definisi domain i = 1..N
4. Nilai i di luar definisi domain 1..N
5. Pemilihan skema tidak konsisten (bukan skema penanganan dengan kasus kosong!)
Versi-4
Program SUMNBil4 {Menjumlahkan 1+2+3+...N, dengan N yang dibaca } {Model tanpa mark}
KAMUS
i : integer
{ bilangan yang akan dijumlahkan }
N : integer >0 { banyaknya bilangan yang dijumlahkan } Sum : integer { jumlah}
ALGORITMA
input (N); SUM ← 0
{ Inisialisasi }
i traversal [1..N] output (i) Sum ← Sum + i
{ i = ? , Sum = 1 + 2+ 3+ ...+N } output (Sum) {Terminasi}
Penjelasan :
1. Pengontrol pengulangan adalah bilangan integer i
2. Analisis : pemrosesan sekuensial dari deret bilangan 1,2,3, ..N Model tanpa MARK
Jika i adalah nilai suku deret yang diproses, i adalah Current element, i bernilai 1,2,3..N EOP adalah jika i = N ; First_Elmt : 1; Next_Elmt : i +1 Proses : menulis setiap bilangan, dan pada akhir proses menulis jumlah
3. Program benar, dengan tambahan spesifikasi : N ≥ 1, sesuai dengan definisi domain i = 1..N
4. Nilai i sesuai definisi domain 1..N, namun setelah traversal tidak terdefinisi. Maka tidak boleh menggunakan nilai i setelah traversal berakhir
Penjumlahan Deret Bilangan:
Tuliskanlah sebuah program yang membaca nilai-nilai integer yang dibaca dari piranti masukan, dan menjumlahkan nilainya. Pemasukan nilai integer diakhiri dengan 9999.
Program JUMBilX {Menjumlahkan nilai-nilai X yang dibaca. Mark = 9999 } {Model dengan mark}
KAMUS
X : integer {sekumpulan bilangan integer yang dibaca utk dijumlahkan,
pembacaan diakhiri dg 9999}
Sum : integer { jumlah}
ALGORITMA
SUM ← 0 { Inisialisasi } input (X)
{First_Elmt}
while (X ≠ 9999) do output (X) Sum ← Sum + X input (X)
{Next_Elmt}
{ Sum = X1 + X2 + .... s+ ... Xi-1 } output (Sum) {Terminasi}
Penjelasan :
1. Pengontrol pengulangan (Current element) adalah nilai X.
2. Program ini memakai skema yang benar, tapi tidak menangani kasus kosong