• Tidak ada hasil yang ditemukan

MESIN KARAKTER (Model akses sekuensial)

START KATA

while not EndKata do

LTotal ← LTotal + LKata NbKata ← NbKata + 1

ADVKata

{EndKata => semua karakter sudah diakuisisi } if (NbKata ≠ 0 ) then

Output (LTotal/NbKata) else { NbKata = 0 }

Output ('Pita tidak mengandung kata')

procedure Ignore_Blank{mengabaikan satu atau beberapa blank}

{ I.S. : CC sembarang }

{ F.S. : CC ≠ Blank, atau CC=mark}

Kamus: Algoritma :

{I.S. : CC sembarang}

while (CC =Blank) and (CC ≠ Mark) do

ADV

{F.S: CC ≠ Blank or CC= Mark }

procedure HITUNGPANJANG {menghitung panjang kata}

{I.S. : CC adalah karakter pertama dari kata,CC ≠ Blank dan CC ≠ Mark}

{ F.S. : CC=Blank, atau CC = Mark; CC adalah karakter sesudah huruf

terakhir kata yang diakuisisi ; LKata berisi panjang kata yang sudah diakuisisi.}

Kamus:

Algoritma :

LKata ← 1 {karena berada pada karakter pertama pita } iterate

ADV

stop : (CC=Mark) or (CC= Blank) LKata ← LKata + 1

{(CC=Mark)or(CC= Blank): Lkata = banyaknya karakter kata yang diakuisisi}

procedure STARTKATA {mengabaikan satu atau beberapa Blank}

{ I.S. : CC sembarang }

{ F.S. : EndKata true, dan CC = Mark; }

{ atau EndKata=false, LKata adalah panjang kata yang sudah diakuisisi,

CC karakter pertama . sesudah karakter terakhir kata} Kamus:

Algoritma : START

Ignore_Blank depend on CC

CC = Mark : EndKata ← true CC ≠ Mark : EndKata ← false HitungPanjang

procedure ADVKATA {mengabaikan satu atau beberapa Blank}

{ I.S. : EndKata = false; CC adalah karakter sesudah karakter terakhir kata yg sudah diakuisisi }

{ F.S. : EndKata true, dan CC = Mark; }

{ atau EndKata=false, LKata adalah panjang kata yang sudah diakuisisi, CC karakter }

{ pertama . sesudah karakter terakhir kata}

Kamus:

Algoritma : Ignore_Blank depend on CC

CC = Mark : EndKata ← true CC ≠ Mark : HitungPanjang

PANJANG RATA-RATA Versi -2 :

Akhir dari proses adalah sebuah kata yang 'kosong', yaitu panjangnya NOL. Model akuisisi kata sama dengan Versi 1

Program PANJANGRATAKATA2

Kamus:

constant Mark : character = ' .' constant Blank : character = ' '

LKata : integer { panjang kata terakhir yang sudah diakuisisi} NbKata : integer ( banyaknya kata pada pita}

LTotal : integer{ akumulasi panjang kata }

procedure Ignore_Blank {mengabaikan satu atau beberapa Blank} { I.S. : CC adalah sembarang }

{ F.S. : CC ≠ Blank, atau CC=Mark}

procedure HITUNGPANJANG {menghitung panjang kata} { I.S. : CC adalah karakter pertama dari kata }

{ F.S. : CC=Blank, atau CC = Mark; CC adalah karakter sesudah huruf terakhir kata yang diakuisisi ; LKata berisi panjang kata yang sudah diakuisisi, }

procedure STARTKATA {mengabaikan satu atau beberapa Blank} { I.S. : CC sembarang }

{ F.S. : LKata=0, dan CC = Mark; } { atau LKata ≠ 0,

LKata adalah panjang kata yang sudah diakuisisi, CC karakter pertama sesudah karakter terakhir kata}

procedure ADVKATA {mengabaikan satu atau beberapa Blank}

{ I.S. : LKata=0, CC adalah karakter sesudah karakter terakhir kata yang sudah diakuisisi }

{ F.S. : LKata = 0, dan CC = Mark; }

{ atau LKata ≠ 0, LKata adalah panjang kata yang sudah diakuisisi, CC karakter pertama . sesudah karakter terakhir kata}

Algoritma :

NbKata ← 0 {belum ada kata diakuisisi }

LTotal ← 0 {belum ada kata diakuisisi: # kata=0 }

STARTKATA

while ( LKata ≠ 0) do

LTotal ← LTotal + LKata; NbKata ← NbKata + 1

ADVKata

{ Lkata = 0 ==> mark } depend on NbKata

NbKata ≠ 0 : Output (LTotal/NbKata)

procedure Ignore_Blank {mengabaikan satu atau beberapa Blank} { I.S. : CC adalah sembarang }

{ F.S. : CC ≠ Blank, atau CC=Mark}

Kamus:

Algoritma :

{I.S. : CC sembarang}

while (CC =Blank) and (CC ≠ Mark) do

ADV

{F.S: CC ≠ Blank or CC = Mark }

procedure HITUNGPANJANG {menghitung panjang kata}

{ I.S. : CC adalah karakter pertama dari kata atau CC=Mark}

{ F.S. : CC=Blank, atau CC = Mark; CC adalah karakter sesudah huruf

terakhir kata yang diakuisisi; LKata berisi panjang kata yang sudah diakuisisi, }

{ Catatan : modul ini berbeda dengan Versi 1 }

Kamus:

Algoritma :

LKata ← 0

while (CC ≠ Mark)and (CC ≠ Blank)do {kenapa dipakai WHILE ?} LKata ← LKata + 1

ADV

{ CC = Mark or CC=Blank }

procedure STARTKATA {mengabaikan satu atau beberapa Blank}

{ I.S. : CC sembarang }

{ F.S. : LKata=0, dan CC = Mark; }

{ LKata ≠ 0, LKata adalah panjang kata yang sudah

diakuisisi, CC karakter pertama sesudah karakter terakhir kata}

Kamus:

Algoritma : START

Ignore_Blank

HitungPanjang

procedure ADVKATA {mengabaikan satu atau beberapa Blank}

{ I.S. : LKata ≠ 0; CC adalah karakter sesudah karakter terakhir

kata yg sudah diakuisisi }

{ F.S. : LKata = 0, dan CC = Mark; }

{ atau LKata ≠ 0, LKata adalah panjang kata yang sudah

diakuisisi, CC karakter pertama sesudah karakter terakhir kata}

Kamus:

Algoritma :

Ignore_Blank

Hitung panjang rata-rataVersi 3 :

Mengabaikan Blank pada awal pita, dan memproses sisanya. Versi ini menggunakan model akuisisi kata yang berbeda dengan versi1 dan versi 2, yaitu model akuisisi kata TANPA MARK, artinya kata yang diakuisisi tidak pernah merupakan kata 'kosong'. Akuisisi kata dimulai dengan karakter pertama dari suatu kata sampai dengan karakter pertama dari kata berikutnya (atau titik jika merupakan kata terkahir). Model akuisisi ini mengharuskan adanya suatu prosedur INITAKSES, yang memposisikan CC pada karakter pertama kata pertama (berarti mengabaikan Blank sebelum karakter pertama yang ada pada pita).

Initakses

Program PANJANGRATAKATA3

{Versi 3 : SKEMA PEMROSESAN tanpa Mark} Kamus:

constant Mark : constant character = ' .' constant Blank : constant character = ' '

LKata : integer { panjang kata terakhir yang susah diakuisisi} NbKata : integer ( banyaknya kata pada pita}

LTotal : integer { akumulasi panjang kata }

procedure Ignore_Blank {mengabaikan satu atau beberapa Blank} { I.S. : CC adalah sembarang }

{ F.S. : CC ≠ Blank, atau CC=Mark}

procedure HITUNGPANJANG {menghitung panjang kata} { I.S. : CC adalah karakter pertama dari kata }

{ F.S. : CC=Blank, atau CC = Mark; CC adalah karakter sesudah huruf terakhir kata yang diakuisisi ; LKata bebisi panjang kata yang sudah diakuisisi }

procedure INITAKSES {mengabaikan satu atau beberapa Blank pada awal pita} { I.S. : CC sembarang }

{ F.S. : CC = Mark; atau CC = karakter pertama dari kata yang akan diakuisisi}

procedure ADVKATA {mengabaikan satu atau beberapa Blank} { I.S. : CC adalah karakter pertama kata yg akan diakuisisi }

{ F.S. : LKata adalah panjang kata yang sudah diakuisisi, CC karakter } { pertama .pertama kata yang berikutnya, mungkin Mark}

Algoritma : INITAKSES LTotal ← 0 NbKata ← 0 while ( CC ≠ Mark) do ADVKata

LTotal ← LTotal + LKata; NbKata ← NbKata + 1

depend on NbKata

NbKata ≠ 0 : Output (LTotal/NbKata)

NbKata = 0 : Output ('Pita tidak mengandung kata')

Penjelasan:

Pada skema di atas, yang menggunakan WHILE, ADVKata dilakukan sebelum proses (bukannya sesudah proses). Hal ini disebabkan karena akuisisi kata dilakukan di dalam badan pengulangan.

procedure Ignore_Blank {mengabaikan satu atau beberapa Blank} { I.S. : CC adalah sembarang }

{ F.S. : CC ≠ Blank, atau CC=Mark}

Kamus:

Algoritma :

{I.S. : CC sembarang}

while (CC =Blank) and (CC ≠ Mark) do

ADV

{F.S: CC ≠ Blank or CC = Mark }

procedure HITUNGPANJANG {menghitung panjang kata}

{ I.S. : CC adalah karakter pertama dari kata , CC ≠ Mark}

{ F.S. : CC=Blank, atau CC = Mark; CC adalah karakter sesudah huruf

terakhir kata yang diakuisisi ; LKata berisi panjang kata yang sudah diakuisisi, }

Kamus:

Algoritma :

LKata ← 1 { CC adalah karakter pertama pita! } iterate

ADV

stop : (CC=Mark) or (CC= Blank) LKata ← LKata + 1

{ CC = Mark or CC=Blank }

procedure INITAKSES

{mengabaikan satu atau beberapa Blank pada awal pita}

{ I.S. : CC sembarang }

{ F.S. : CC = Mark; atau CC = karakter pertama dari kata yang akan diakuisisi} Kamus: Algoritma : START Ignore_Blank procedure ADVKATA

{mengabaikan satu atau beberapa Blank}

{ I.S. : CC adalah karakter pertama kata yg akan diakuisisi } { F.S. : LKata adalah panjang kata yang sudah diakuisisi, CC karakter pertama kata yang berikutnya, mungkin Mark}

Kamus:

Algoritma :

HitungPanjang Ignore_Blank