Rabu, 10 Januari 2018

Bab6 (Array dan Tipe Data Bentukan)

   Dalam dunia nyata, struktur data yang dihadapi sangat beragam dan
penggunaan variabel dengan tipe data dasar memiliki keterbatasan pada
banyaknya nilai yang dapat disimpan. Dengan menggunakan array dan tipe data
bentukan, dapat dilakukan pemodelan struktur data dengan lebih baik bahkan
untuk struktur data yang relatif kompleks.\

          1. Memahami tipe data array dan keuntungan yang dapat diberikan
          2. Memahami array yang memiliki dimensi lebih dari satu
          3. Dapat meng-implementasikan tipe data array dalam program
          4. Memahami cara menentukan tipe data bentukan dan menggunakannya
              dalam program

   Array
Tipe data array adalah tipe data terstruktur yang merujuk kepada sebuah atau
sekumpulan elemen yang mempunyai tipe data yang sama melalui indeks.
Array biasanya disebut juga sebagai tabel, vektor atau larik.

Elemen dari array dapat diakses langsung jika dan hanya jika indeks terdefinisi
(telah ditentukan nilainya sesuai dengan domain yang didefinisikan untuk indeks
tersebut). Struktur data array disimpan dengan urutan yang sesuai dengan
definisi indeks secara kontigu (berurutan) dalam memori
komputer. Karena itu indeks haruslah merupakan suatu tipe data yang memiliki

keterurutan (ada suksesor dan predesesor), misal tipe integer dan karakter.

Dilihat dari dimensinya, array dapat dibagi menjadi Array Satu Dimensi, Array
Dua Dimensi dan Array Multi-Dimensi

   Untuk mendeklarasikan variabel dengan tipe data array satu dimensi
pada notasi algoritma, digunakan pola sebagai
berikut:
...
KAMUS DATA
Nama_variabel : array [x..y] of tipe_data
...

Keterangan:
   Nilai x merupakan nilai awal indeks pada array, dan nilai y merupakan nilai
akhir pada indeks array.
Algoritma
...
Kamus data
arrHari : array [1..7] of string
arrJmlBulan : array [1..12] of integer
arrFrekuensi : array [‘a’..’z’] of integer
...

   Karena array tersebut mempunyai nama yang sama, yaitu A, maka setiap
   elemen diberi sebutan nama yang berbeda dengan memberikan nomor
   indeks, sehingga masing-masing menjadi: A[0], A[1], sampai dengan A[4], yang
   dapat dibaca dengan:
      A dengan indeks 0 atau A nol
      A dengan indeks 1 atau A satu
          dan seterusnya...

   Untuk menyimpan nilai dalam array satu dimensi, dapat dilakukan dengan cara
   sebagai berikut:
                         A[0] ⬅ 4 /*simpan nilai 4 dalam array A pada indeks 0 */
                         A[1] ⬅ 8 /*simpan nilai 8 dalam array A pada indeks 1*/
                         A[2] ⬅ 6 /*simpan nilai 6 dalam array A pada indeks 2*/
                         A[3] ⬅ A[0] +A[1] /*tambahkan nilai dalam array A indeks 0
                                                            dengan nilai array A indeks 1 dan simpan
                                                            hasilnya pada array A indeks 3*/
                         A[4] ⬅ A[2] /*isikan array A indeks 4 dengan nilai pada array A
                                                  indeks 2*/


    Pseudocode lengkapnya adalah sebagai berikut:
1.ALGORITMA
2./* Menyiapkan dan memasukkan nilai dalam array satu dimensi
3. I.S : array dalam keadaan kosong
4. F.S : menampilkan nilai yang disimpan dalam array dengan menggunakan struktur
5. pengulangan */
6.KAMUS DATA
7. A : array[0..4] of integer
8. i : integer
9.BEGIN
10. A[0]  4 /*simpan 4 dalam array A indeks 0*/
11. A[1]  8 /*simpan 8 dalam array A indeks 1*/
12. A[2]  6
13. A[3]  A[0] + A[1]
14. A[4]  A[2]
15. /*menampilkan kembali nilai dalam array*/
16. For (i=0; i<=4; i++)
17. output(“A[“,i,”] = “ ,A[i])
18. EndFor
19.END.

    Dalam Bahasa C:
1./*Menyiapkan dan memasukkan nilai dalam array satu dimensi
2. I.S : array dalam keadaan kosong
3. F.S : menampilkan nilai yang disimpan dalam array dengan menggunakan struktur
4. pengulangan */
5.
6.#include <stdio.h>
7.#include <conio.h>
8.
9.void main()
10.{
11. int A[5]; /*deklarasi array A dengan 5 elemen*/
12. int i;
13. A[0] = 4; /*simpan 4 dalam array A indeks 0*/
14. A[1] = 8;
15. A[2] = 6;
16. A[3] = A[0] + A[1];
17. A[4] = A[2];
18. /*menampilkan kembali nilai dalam array*/
19. for(i=0;i<=4;i++)
20. {
21. printf("A[%i] = %i\n",i,A[i]);
22. }
23. printf("Tekan Ent
24. getch(); /* menahan tampilan pada layar */
25.}er...");

    Array Dua Dimensi
 Array dua dimensi merupakan array yang terdiri dari m buah baris (row)
dan n buah kolom (column). Bentuk array semacam ini menggunakan 2 (dua)
buah kelompok indeks yang masing-masing direpresentasikan sebagai indeks
baris dan kolom. Jika ingin memasukkan atau membaca sebuah nilai pada
matriks maka, harus diketahui terlebih dahulu indeks baris dan kolomnya.
   Untuk mendeklarasikan variabel dengan tipe data array dua dimensi
pada notasi algoritma, digunakan pola sebagai
berikut:
...
KAMUS DATA
Nama_variabel : array [x..y,t..u] of tipe_data
...
    Keterangan:
    Nilai x merupakan nilai awal indeks baris pada array, dan nilai y merupakan
    nilai akhir indeks baris array. Nilai t merupakan nilai awal indeks kolom pada
    array, dan nilai u merupakan nilai akhir indeks kolom array.

Mengakses data array dua dimensi:
Seperti array satu dimensi, array dua dimensi juga diakses melalui indeksnya.
Contoh: A[1,2], menunjuk pada posisi nilai array pada baris 1, kolom 2.
Untuk menyimpan nilai dalam array dua dimensi, dapat dilakukan dengan cara
sebagai berikut:
                               A[0,0] ⬅ 2 /*simpan 2 pada array A baris 0,kolom 0*/
                               A[0,1] ⬅ 4 /*simpan 3 pada array A baris 0,kolom 1*/
                               A[1,2] ⬅ 8 /*simpan 5 pada array A baris 1,kolom 2*/
                               A[2,2] ⬅  A[0,0] + A[1,2] /*tambahkan nilai pada array A baris
                                0,kolom 0 dengan nilai pada array A
                                baris 1,kolom 2 dan simpan hasilnya
                                pada array A baris 2,kolom 2 */

Contoh pseudocode untuk menyimpan dan menampilkan nilai pada array dua
dimensi:
1.ALGORITMA
2./* Menyiapkan dan memasukkan nilai dalam array dua dimensi
3. I.S : array dalam keadaan kosong
4. F.S : menampilkan nilai yang disimpan dalam array dengan menggunakan struktur
5. pengulangan */
6.KAMUS DATA
7. A : array[0..2,0..4] of integer
8. i,j,k : integer
9.BEGIN
10. k=0;
11. /*memasukkan nilai dalam array*/
12. for(i=0;i<=3;i++)
13. for(j=0;j<=4;j++)
14. A[i,j]=k+2;
15. k=k+2;
16. endfor
17. endfor
18. /*menampilkan kembali nilai pada array*/
19. for(i=0;i<=3;i++)
20. for(j=0;j<=4;j++)
21. output(‘A[‘,i,j,’]= ’,A[i,j])
22. endfor
23. endfor
24.END.
     Pseudocode di atas menggambarkan proses menyimpan array dua dimensi,
     dimana nilai yang dimasukkan merupakan penambahan dengan 2.

   Dalam Bahasa C
1. /*Menyiapkan dan memasukkan nilai dalam array dua dimensi
2. I.S : array dalam keadaan kosong
3. F.S : menampilkan nilai yang disimpan dalam array dengan menggunakan struktur
4. pengulangan */
5. #include <stdio.h>
6. #include <conio.h>
7. void main()
8. {
9. int A[3][5]; /*deklarasi array dua dimensi*/
10. int i,j,k;
11. k=0;
12. /*memasukkan data dalam array dua dimensi*/
13. for(i=0;i<=2;i++)
14. { for(j=0;j<=4;j++)
15. { A[i][j] = k + 2;
16. k+=2; } /* endfor loop j */
17. } /* endfor loop i */
18. /*menampilkan kembali nilai array dua dimensi*/
19. for(i=0;i<=2;i++)
20. { for(j=0;j<=4;j++)
21. { printf("A[%i,%i] = %i\n",i,j,A[i][j]);
22. } /*endfor loop j*/
23. } /*endfor loop i*/
24. printf("tekan Enter...");
25. getch(); /* menahan tampilan pada layar*/
26. }

   Array Multi-Dimensi
Dalam menggambarkan array multidimensi, hanya terbatas hingga
dimensi ke-3, yakni dengan menggunakan bangun ruang, namun dalam
kenyataannya, tipe data array ini dapat dibentuk menjadi lebih dari tiga
dimensi atau menjadi n-dimensi.

   Penulisan notasi algoritma untuk mendeklarasikan tipe data array
multidimensi cukup dengan memodifikasi deklarasi array satu dimensi, yakni
dengan menambahkan tanda koma “,” pada bagian definisi banyaknya elemen
array dan menambahkan ukuran elemen yang diinginkan.

   Untuk mendeklarasikan variabel dengan tipe data array n-dimensi pada
notasi algoritma, digunakan pola sebagai
berikut: 
...
KAMUS DATA
Nama_variabel:array [a..b,t..u,x..y,..] of tipe_data
...

   Tipe Data Bentukan
Dalam membuat program, kadangkala akan dihadapkan dengan
struktur data yang tidak sederhana dan apabila hanya ditangani dengan tipe
data dasar saja, maka pembuat program akan kesulitan merumuskan
komposisinya.
   Sebagai contoh, program yang akan dibuat melibatkan data tentang
mahasiswa, maka untuk variabel mahasiswa akan sulit ditentukan tipe datanya
karena pada mahasiswa terdapat beberapa elemen yaitu, nama, nomor induk
mahasiswa, jenis kelamin, alamat, dan elemen-elemen yang lainnya.
   Tantangan berikutnya adalah bagaimana cara menyimpan data-data
mahasiswa tersebut jika jumlah mahasiswa lebih dari satu? Tentunya hal ini
akan sangat sulit jika harus diselesaikan dengan tipe data dasar saja. Oleh karena
itu diperlukan adanya suatu tipe data baru yang digunakan untuk menangani
kasus di atas, yaitu dengan menggunakan tipe data bentukan.
   Tipe data bentukan merupakan suatu tipe data yang
dirancang/dibentuk (dan diberi nama) dari beberapa elemen bertipe tertentu
yang sudah dikenal. Jadi di dalam tipe data bentukan akan terdapat elemen
dengan tipe data dasar dan dapat juga terdapat tipe data bentukan lain yang
telah didefinisikan sebelumnya.
   Tujuan digunakannya tipe data bentukan adalah supaya perancang
program mendapatkan suatu tipe data dimana seluruh komponennya secara
keseluruhan memiliki makna semantik dan di dalamnya terdapat keterkaitan
antar komponen. Pada data mahasiswa telah dijabarkan beberapa elemen yang
ada maka, dengan menggunakan tipe data bentukan ini, perancang program
dapat mendefinisikannya ke dalam program.
   Implementasi tipe data bentukan dalam bahasa pemrograman sangat
bervariasi tergantung dari struktur bahasa pemrograman itu sendiri. Dalam
notasi algoritmik, sebuah tipe bentukan (tipe komposisi) dapat disusun
sebagai berikut :
   type nama_type < elemen1 : type_data1,
                    elemen2 : type_data2,
                    ...>

Contoh pada data mahasiswa dapat dijabarkan elemen-elemennya sebagai
berikut:
      1. Nim bertipe longint
      2. Nama bertipe string
      3. Umur bertipe word
Jika dituliskan dalam notasi algoritmik maka, akan menjadi:
    type Mahasiswa : <nim : integer,
    nama : string,
    umur : integer>

   Operasi dalam menggunakan tipe data bentukan memiliki perilaku yang
sama dengan operasi pada tipe data dasar, hanya perbedaannya adalah pada
cara mengaksesnya. Tipe data bentukan memiliki beberapa variabel/elemen
yang berada di dalamnya, oleh karena itu cara mengaksesnya menggunakan
tanda dot/titik ‘.’
   Contoh:
  Jika akan mendefinisikan nama variabel Mhs dengan tipe data Mahasiswa maka
  pendeklarasiannya adalah:
            Kamus data
              Mhs : Mahasiswa
Jika akan mengisi elemen nim pada variabel Mhs maka:
     Mhs.nim  30107001
Atau dengan perintah masukan sebagai berikut:
     input(Mhs.nim)
Jika akan menampilkan isi dari elemen nim pada variabel Mhs maka:
     output(Mhs.nim)
Berikut adalah contoh penggunaan tipe data bentukan secara
lengkap:
1.ALGORITMA
2. /*contoh algoritma penggunaan tipe data bentukan sederhana*/
3.KAMUS DATA
4. type Mahasiswa : <nim : integer,
5. nama: string,
6. umur: integer>
7. /*Menggunakan tipe data Mahasiswa pada variabel Mhs*/
8. Mhs : Mahasiswa
9. Begin
10. /*mengisi elemen-elemen dalam variabel Mhs*/
11. input(Mhs.nim)
12. input(Mhs.nama)
13. input(Mhs.umur)
14. /*menampilkan isi elemen-elemen dalam Mhs*/
15. output(Mhs.nim)
16. output(Mhs.nama)
17. output(Mhs.umur)
18.End.

Dalam bahasa C:
1. #include <stdio.h>
2. #include <conio.h>
3. /*deklarasi record mahasiswa*/
4. struct mahasiswa { long nim;
5. char nama[20];
6. short umur; };
7. struct mahasiswa Mhs;
8.
9. main()
10. {
11. printf(“Masukkan Data Mahasiswa\n”);
12. printf(“NIM = “); scanf(“%i”,&Mhs.nim);
13. printf(“Nama = “); scanf(“%s”,&Mhs.nama);
14. printf(“Umur = “); scanf(“%i”,&Mhs.umur);
15.
16. /*menampilkan isi elemen-elemen dalam Mhs*/
17. printf(“\n\nHasil masukan Anda adalah: \n”);
18. printf("Nim Anda = %i\n",Mhs.nim);
19. printf("Nama Anda = %s\n",Mhs.nama);
20. printf("Umur Anda = %i\n",Mhs.umur);
21. printf("tekan Enter...");
22. getche(); /*menahan tampilan pada layar*/
23. }

        Kombinasi Tipe Bentukan dan Array

   Tipe Data Bentukan di dalam array
Permasalahan yang berikutnya adalah bagaimana caranya memasukkan
data mahasiswa dengan jumlah yang banyak? Di sini dapat digunakan array
sebagai sarana untuk menyimpan data mahasiswa dalam satu variabel.
Cara mendeklarasikannya adalah sebagai
berikut:
KAMUS DATA
type Mahasiswa : <nim : integer,
nama : string,
umur : integer 
Mhs : array [0..49] of Mahasiswa

   Array di dalam Tipe Data Bentukan
Pada contoh sebelumnya telah ditunjukkan bahwa di dalam sebuah
elemen array dapat diisi dengan suatu nilai yang memiliki tipe data bentukan.
Jika kondisi yang dihadapi oleh perancang program adalah kondisi yang
sebaliknya, yaitu memasukkan variabel bertipe array menjadi salah satu atau
beberapa elemen di dalam variabel yang memiliki tipe data bentukan,
bagaimanakah cara mendefinisikan dan mengoperasikan variabel tersebut?
Di dalam tipe data bentukan, satu atau beberapa elemennya
diperbolehkan untuk menggunakan tipe data array. Salah satu contoh
kasusnya adalah bagaimana mendefinisikan data mahasiswa yang mempunyai
beberapa nilai.
   Dalam hal ini yang memiliki tipe data array adalah elemen di dalam tipe data
bentukan, oleh karena itu cara mengakses elemen array yang terdapat di
dalam tipe Mahasiswa adalah sebagai berikut:
            Mhs.nilai[0] ⬅ 100
     Mhs.nilai[1]  8
     Mhs.nilai[2]  88
Atau dengan perintah masukan sebagai berikut:
     input(Mhs.nilai[0])
     input(Mhs.nilai[1])
     input(Mhs.nilai[2])

Contoh pseudocode lengkapnya:
1.ALGORITMA
2. /*contoh algoritma penggunaan array dalam tipe data bentukan*/
3.KAMUS DATA
4. type Mahasiswa: <nim : integer,
5. nama : string,
6. nilai: array[0..2] of integer>
7./*Menggunakan tipe data Mahasiswa pada variabel Mhs*/
8. Mhs : Mahasiswa
9. i,a : integer
10.Begin
11./*mengisielemen-elemen dalam variabel Mhs*/
12. output(“Memasukkan nilai dalam array”)
13. output(“Nim = “); input(Mhs.nim)
14. output(“Nama= “); input(Mhs.nama)
15. a=1;
16. for(i=0;i<=2;i++)
17. output(“Nilai ke “,a,” = ”)
18. input(Mhs.nilai[i])
19. a=a+1
20. endfor
21./*menampilkan isi elemen-elemen dalam Mhs*/
22. output(“Nim Anda : “,Mhs.nim,” dan Nama
23. Anda: ”,Mhs.nama)
24. output(“Nilai Anda adalah:”)
25. for(i=0;i<=2;i++)
26. output(Mhs.nilai[i])
27. endFor
28.End.

     Dalam bahasa C:
1./*contoh program array dalam tipe data bentukan*/
2.#include <stdio.h>
3.#include <conio.h>
4. /*deklarasi record dan variabel*/
5.struct mahasiswa {long nim;
6. char nama[20];
7. int nilai[3];};
8.struct mahasiswa mhs;
9.int i,a;
10.
11.main()
12.{
13. printf("Memasukkan nilai dalam array\n");
14. printf("NIM = "); scanf("%i",&mhs.nim);
15. printf("Nama = "); scanf("%s",&mhs.nama);
16. a=1;
17. for(i=0;i<=2;i++)
18. {
19. printf("Nilai ke-%i = ",a);
20. scanf("%i",&mhs.nilai[i]);
21. a++;
22. }
23. /*menampilkan kembali data dalam array */
24. printf("\nNIM Anda : %i dan Nama Anda :
25. %s\n",mhs.nim,mhs.nama);
26. printf("\nNilai Anda adalah:\n");
27. a=1;
28. for(i=0;i<=2;i++)
29. {
30. printf("Nilai ke-%i : %i\n",a,mhs.nilai[i]);
31. a++;
32. }
33. printf("\nTekan Enter........");
34. getche();
35.}

   Array dari Tipe Bentukan yang Mengandung Array
Pada kasus ini tujuannya adalah mendefinisikan tipe data untuk
menyimpan data dengan tipe data bentukan dan di dalam tipe data bentukan
tersebut terdapat elemen dengan tipe array.
Pada contoh kasus di sub bab 6.3.2 ditunjukkan seorang mahasiswa
memiliki nilai lebih dari satu. Pertanyaan berikutnya adalah bagaimana jika
jumlah mahasiswanya lebih dari satu?
Caranya adalah dengan membuat variabel bertipe array dimana array
tersebut memiliki tipe data bentukan yang di dalamnya terdapat array.
    type Mahasiswa : <nim : integer,
    nama : string,
    nilai: array [0..2] of integer>
Kamus data
    Mhs : array [0..49] of Mahasiswa

Bab8 (Mesin Karakter)

   Dalam menyelesaikan masalah yang relatif kompleks perlu dilakukan
penggambaran atau analogi dengan suatu hal yang bersifat nyata. Tujuan
penggambaran ini agar mempermudah menentukan kebutuhan proses atau
mekanisme tertentu, sehingga pada akhirnya seluruh mekanisme dapat
teridentifikasi untuk menyelesaikan masalah.

     1. Memahami perlunya analogi dalam mendefinisikan suatu permasalahan
     2. Mempelajari mekanisme mesin abstrak
     3. Mempelajari mekanisme mesin pencacah (mesin integer)
     4. Mempelajari mekanisme mesin karakter
     5. Mempelajari penggunaan mesin integer dan mesin karakter dalam
         menyelesaikan suatu kasus.

    Mesin
 Mesin merupakan mekanisme yang terdefinisi dan mengerti serta
mampu untuk mengeksekusi aksi-aksi primitif yang terdefinisi untuk mesin
tersebut.
   Aksi-aksi primitif disini dapat dianalogikan sebagai fungsi dan prosedur
yang terdefinisi dari segi input, proses dan output. Sebagai contoh sederhana
adalah mesin kendaran bermotor. Pada mesin tersebut terdapat karburator,
busi, blok mesin, dan katup mesin sebagai jalur masuk bahan bakar atau
sebagai jalur keluar gas sisa pembakaran.
Jika karburator bekerja dengan baik maka, karburator dapat dengan lancar
mengalirkan bahan bakar menuju ke blok mesin. Jika katup mesin dapat bekerja
dengan baik maka, jalur masuk bahan bakar dan jalur keluar gas sisa pembakaran
dapat dialirkan dengan lancar. Jika busi dapat bekerja dengan baik maka, busi
dapat menghasilkan percikan api yang berguna untuk meletupkan bahan bakar
yang ada dalam blok mesin, sehingga gerigi-gerigi yang ada dalam blok mesin
akan bekerja.
   Oleh karena itu, sebuah mesin dapat dikatakan sebagai mekanisme
karena memiliki primitif-primitif yang terdefinisi dengan baik fungsi-fungsinya
sehingga dapat menghasilkan sesuatu.

   Mesin Abstrak
Mesin abstrak adalah mesin yang dianggap ada dan diasumsikan dapat
melakukan mekanisme yang didefinisikan untuk mesin tersebut. Mesin abstrak
ini digunakan untuk memodelkan suatu mekanisme tertentu supaya dapat
lebih mudah dipelajari. Dengan menggunakan mesin abstrak, perancang
program dapat dengan mudah membuat suatu mekanisme dari mesin yang akan
dibuat.
   Dalam pemrograman, mesin abstrak ini diciptakan pada tahap
konseptual dan belum menjadi sesuatu yang riil. Perancang program seringkali
harus mendefinisikan mesin-mesin abstrak untuk memecahkan masalah secara
bertahap, sehingga pada akhirnya nanti seluruh primitif serta mekanisme
dapat terdefinisi dengan baik. Setelah mesin abstrak ini terdefinisi dengan baik
(termasuk fungsi dan prosedur yang terlibat), barulah kode-kode program
dituliskan untuk menerapkan sesuatu yang abstrak menjadi produk yang nyata
(riil) yaitu yang disebut sebagai mesin riil.
   Dalam buku ini akan dibahas mengenai suatu bentuk mesin yang umum
digunakan, yakni mesin integer dan mesin karakter.

    Mesin Integer (Pencacah)
 Mesin integer merupakan sebuah mesin yang terdiri dari :
   1. Satu buah tombol RESET
   2. Satu buah tombol INC (singkatan dari increment yang berarti
       menambahkan)
   3. Sebuah jendela yang menunjukkan angka integer yang sedang diingat,
       oleh karena itu angka yang sedang muncul di jendela disebut sebagai
      Current Integer (CI).
Masing-masing tombol merupakan analogi dari procedure, jika tombol
RESET ditekan artinya procedure RESET dipanggil, demikian juga untuk tombol
INC.
   Tombol RESET berguna untuk mengembalikan CI pada angka nol.
Sedangkan tombol INC berguna untuk menambahkan angka 1 pada CI, jika CI
bernilai 0 maka setelah tombol INC ditekan maka, CI akan bernilai satu. Nilai
pada CI akan terus bertambah jika tombol INC selalu ditekan.
Mesin integer merupakan sebuah mesin yang terdiri dari :
1. Satu buah tombol RESET
2. Satu buah tombol INC (singkatan dari increment yang berarti
menambahkan)
3. Sebuah jendela yang menunjukkan angka integer yang sedang diingat,
oleh karena itu angka yang sedang muncul di jendela disebut sebagai
Current Integer (CI).
Masing-masing tombol merupakan analogi dari procedure, jika tombol
RESET ditekan artinya procedure RESET dipanggil, demikian juga untuk tombol
INC.
Tombol RESET berguna untuk mengembalikan CI pada angka nol.
Sedangkan tombol INC berguna untuk menambahkan angka 1 pada CI, jika CI
bernilai 0 maka setelah tombol INC ditekan maka, CI akan bernilai satu. Nilai
pada CI akan terus bertambah jika tombol INC selalu ditekan.

PROCEDURE RESET
{mengembalikan isi dari pencacah CI menjadi nol
CI merupakan variabel global
I.S.: sembarang
F.S.: CI = 0}
BEGIN
CI  0
ENDPROCEDURE

PROCEDURE INC
{menambahkan isi variabel CI dengan satu
I.S.: CI = nilai saat ini
F.S.: CI = CI + 1}
BEGIN
CI  CI + 1
ENDPROCEDURE

   Mesin Karakter
Mesin karakter merupakan mesin abstrak yang di dalamnya terdiri dari
beberapa komponen, yaitu:
   1. Pita yang berisi deretan karakter dan diakhiri dengan tanda titik ’.’.
       Pita yang hanya berisi tanda titik ’.’ akan disebut sebagai pita kosong.
       Pita dalam mesin ini sebagai penggambaran dari array dengan tipe
      \data char (karakter). Dalam lingkungan pemrograman dengan bahasa
       Pascal, tipe data ’string’ dapat diperlakukan sama dengan array
       dengan tipe data karakter.
   2. Dua buah tombol yakni tombol START dan ADV (singkatan dari
       kata advance yang berarti memajukan)
   3. Sebuah lampu EOP (End Of Position). Lampu ini akan menyala jika
       tanda titik ’.’ sudah terbaca, artinya sudah berada pada posisi
       terakhir. Penggambaran lampu menyala adalah kondisi dimana status
       padaa saat itu bernilai TRUE dan lampu padam adalah FALSE.
    4. Sebuah ”jendela” yang ukurannya sebesar satu karakter saja. Hanya
        karakter yang sedang berada di jendela disebut sebagai Current
        Character (CC) dan dapat dibaca sedangkan karakter lain tidak
        terlihat.

    Penggunaan Mesin

   Menghitung Jumlah Karakter
Kedua mesin ini (mesin integer dan mesin karakter) dapat digunakan
secara bersama-sama untuk menyelesaikan beberapa kasus. Sebagai contoh jika
terdapat sebuah pita karakter yang berisi data sebagai berikut:

”P”
”O”
”L”
“I”
“T’
“E”
“K”
“N”
“I”
“K”
“.”

Jika jumlah karakter dalam pita tersebut akan dihitung, maka dalam
pengoperasian kedua mesin ini adalah:

Tombol yang ditekan
CC
CI
START, RESET
”P”
0
ADV, INC
”O”
1
ADV, INC
”L”
2
ADV, INC
”I”
3
ADV, INC
”T”
4
ADV, INC
”E”
5
ADV, INC
”K”
6
ADV, INC
”N”
7
ADV, INC
”I”
8
ADV, INC
”K”
9
ADV, INC
”.”
10

   Berikut ini adalah algoritma proses penghitungan huruf:
Algoritma Hitung_Huruf
{Menghitung banyaknya huruf dalam pita karakter}
Kamus data
CI : integer, CC : char, EOP : boolean
BEGIN
START
RESET
WHILE (cc ≠ '.') DO
INC
ADV
ENDWHILE
OUTPUT(CI)
END


            BAHASA C:
#include <stdio.h>
#include <conio.h>
#include "mesinkar.inc"
/*Menghitung banyaknya huruf dalam pita karakter*/
void main() {
START();
RESET();
while (!EOP) {
INC();
ADV();
}
printf("Banyak huruf dalam pita = %d \n",ci);
getche();
}
              Catatan:
              Jika CC=’.’, maka EOP menyala, karena itu CC=’.’ bisa diganti EOP saja dan
              CC≠’.’ dapat diganti not EOP, demikian juga sebaliknya .


  Menghitung Jumlah Karakter Tertentu
Kombinasi penggunaan mesin karakter dan mesin integer dapat juga
dimanfaatkan untuk menghitung jumlah karakter tertentu, misalnya untuk
menghitung jumlah huruf ’A’ dalam suatu pita karakter.
Cara menangani kasus ini yaitu dengan mengkombinasikannya dengan
operasi if..then..else. Jika CC menunjukkan huruf ’A’, maka tombol INC pada
mesin integer akan ditekan, jika bukan huruf ’A’, maka akan memajukan pita
karakter menggunakan tombol ADV.

Berikut adalah algoritma dan program untuk menghitung banyaknya
huruf ’A’:
Algoritma
Algoritma Hitung_Huruf_A
{Menghitung banyaknya huruf A dalam pita karakter}
Kamus data
CI : integer, CC : char, EOP : boolean
BEGIN
RESET
START
WHILE (CC≠”.”) DO
IF CC = “A” THEN
INC
ENDIF
ADV
ENDWHILE
OUTPUT(CI)
END
Bahasa C
#include <conio.h>
#include <stdio.h>
#include "mesinkar.inc"
/*Menghitung banyaknya huruf A dlam pita karakter*/
void main() {
START();
RESET();
while (cc!='.') {
if (cc=='A') {
INC();
}
ADV();
}
printf("Banyak huruf A = %d \n",ci);
getche();
}

Menghitung Jumlah Kata
Sekilas terbayang menghitung jumlah kata adalah sesuatu yang amat
sulit, padahal jumlah kata tidak lain adalah jumlah spasi ditambah I.

   Contoh isi pita:
HARI INI HARI SENIN
3 spasi = 4 kata
HARI INI HUJAN TURUN LAGI
4 spasi = 5 kata

  Namun persoalan akan makin rumit bila dimungkinkan antar kata lebih dari 1
  spasi. Untuk ini dapat dibuat prosedur mengabaikan spasi yang berlebihan.

Contoh isi pita karakter
                ” HARI INI HUJAN TURUN LAGI .”

Algoritma berikut prosedurnya sbb:
Algoritma
PROCEDURE IGNORE_BLANK
{mengabaikan/membuang spasi berlebihan}
BEGIN
while (cc==' ') do
ADV
endwhile
ENDPROCEDURE
Algoritma Hitung_Kata
{Menghitung banyaknya kata dalam pita karakter}
Kamus data
CI : integer, CC : char, EOP : boolean
BEGIN
RESET
START
WHILE (not EOP) DO
IF CC=' ' THEN
INC
IGNORE_BLANK
ELSE
ADV
ENDIF
ENDWHILE
INC
OUTPUT(CI)
END

BAHASA C
void IGNORE_BLANK() {
while (cc==' ') {
ADV();
}
}
int main() {
START();
RESET();
IGNORE_BLANK();
while (cc!='.') {
if (cc==' ') {
INC();
IGNORE_BLANK();
}
else {
ADV();
}
}
/* banyak kata = banyak spasi + 1 */
INC();
printf("Banyak kata = %d \n",ci);
getche();
}

  Studi Kasus Mesin Karakter : Palindrom
Palindrom adalah istilah yang digunakan untuk kata atau kalimat yang
apabila dibaca dari depan ke belakang atau sebaliknya, memiliki arti yang sama.
     Contoh palindrom:
                                   KATAK
                                   KASUR RUSAK
                                   KASUR NABABAN RUSAK

Untuk memeriksa apakah kata yang dimasukkan merupakan palindrom maka,
dapat dibuat sebuah function yang memiliki tipe data boolean. Function ini akan
mengembalikan nilai TRUE jika kata termasuk palindrom, dan akan
mengembalikan nilai FALSE untuk kondisi
sebaliknya.
Algoritma
FUNCTION IsPalindrom (kt : string) ➔ boolean
{akan mengembalikan nilai TRUE jika k adalah
palindrom}
Kamus data
i,j : integer
temp : string
BEGIN
{mengisi temporer disingkat temp dengan string
kosong}
temp ⟵ ””
{mengisi j dengan lebar kata}
j ⟵ length(kt)
WHILE (j>0) DO
{operasi konkatenasi}
temp ⟵ temp + kt[j]
j ⟵ j – 1
ENDWHILE
{membandingkan isi temporer, dengan kt}
IF temp = kt THEN
return TRUE
ELSE
return FALSE
ENDIF
ENDFUNCTION FUNCTION IsPalindrom (kt : string)  boolean
{akan mengembalikan nilai TRUE jika k adalah
palindrom}
Kamus data
i,j : integer
temp : string
BEGIN
{mengisi temporer disingkat temp dengan string
kosong}
temp ⟵ ””
{mengisi j dengan lebar kata}
j ⟵ length(kt)
WHILE (j>0) DO
{operasi konkatenasi}
temp ⟵ temp + kt[j]
j ⟵ j – 1
ENDWHILE
{membandingkan isi temporer, dengan kt}
IF temp = kt THEN
return TRUE
ELSE
return FALSE
ENDIF
ENDFUNCTION
Bahasa C
bool IsPalindrom(char kt[]){
char ss[]={0,0};
int i,j;
char temp[30];
strcpy(temp,"");
j=strlen(kt)-1;
while (j>=0) {
*ss=kt[j];
strcat(temp,ss);
j=j-1;
}
if (strcmp(temp,kt)==0)
return true;
else {
return false;

}