Algoritma & Pemograman 1 : Pemrosesan Teks

879 views
671 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
879
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
34
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Algoritma & Pemograman 1 : Pemrosesan Teks

  1. 1. Nama Kelompok : Yuda andika rahman Tri dian Ghiffari N M Muhammad maqbul Andriansyah
  2. 2. Pemprosesan Teks
  3. 3. • • • • Pemprosesan Teks Pernahkan anda melihat gambar slide yang diproyeksikan oleh slide proyector? Slide adalah sekumpulan film negatif yang tersusun secara beruntun (sequential), yang untuk melihat gambarnya, film tersebut digerakan satu per satu ke lubang lensa proyektor. Proyektor memproyeksikan gambar slide ke layar. Cara yang sama juga berlaku pada film bioskop, bedanya film bioskop digerakkan sangat cepat sehingga kesan mata kita menangkap gambar-gambar itu bergarak. Objek lain yang digerakkan secara beruntun adalah pita kaset. Kalau kita ingin mendengarkan lagu yang ada ditengah kaset, kita harus memutar pita dari posisi awal sampai pertengahan kaset. Kumpulan film negatif dalam slide itu dapat dianggap sebagai sekumpulan data yang tersusun secara beruntun. Tiap-tiap data dalam runtunan itu diakses satu per satu dari awal sampai akhir. Diakses artinya data tersebut dicapai lau diproses bergantung pada proses yang diinginkan. Model pengaksesan data yang tersusun secara beruntun itu dinamakan model pengkaksesan beruntun.
  4. 4. • • Susunan Teks Mengakses data yang tersusun secara beruntun ini akan sering kita jumpai dalam pemrograman. Contoh data seperti itu adalah larik,arsip beruntun (sequential file),arsip teks (text file) dan senari berkait(linked list). Arsip teks untuk selanjutnya kita sebut teks adalah arsip yang terdiri atas deretan karakter. Untaian karakter itu dapat membentuk sebuah “kata”. Yang dimaksud dengan kata adalah kelompok karakter yang dipisahkan dengan kelompok lain dengan satu atau lebih spasi. Pada implementasinya, di dalam teks ditambahkan akhir baris (end-of-line) yang membedakan sebuah baris teks dengan baris lainnya (end-of-line terdiri dari karakter line-feed). Contoh teks adalah program sumber (source program). Pascal (yaitu arsip *.PAS) atau C (arsip *.C), arsip README.TXT pada beberapa program aplikasi tertentu, arsip AUTOEXEC.BAT pada sistem operasi DOS, dan lain-lain. Teks dapat dibuat dengan pengolah kata teks, seperti Notepade, SlideKick, editor kompilator bahasa pemrogaman seperti Turbo Pascal atau Turbo C, atau dengan pengolah kata Microsof Word asalkan disimpan (save as)sebagai arsip teks (Teks Only).
  5. 5. • • Pemrosesan teks cukup banyak ditemui di dalam aplikasi pemrograman. Misalnya program pengolah kata (text editor) adalah program yang mengolah teks. Pemrosesan teks antara lain proses mencari (search) sebuah karakter atau string,menghitung jumlah karakter atau jumlah kata, menempatkan pointer pembacaan ke karkter/kata tertentu, dan sebagainya. Aplikasi lain yang memproses teks adalah kompilator bahasa pemrograman. Tugas pertama kompilator adalah membaca program sumber untuk mengambil simbol-simbol (keyword, peubah ,tetapan ,dsb). Komponen kompilator yang melakukan aktivitas ini dinamakan program scaner. Dalam meninjau model pengaksesan beruntun pada teks, kita tidak memandang sebuah teks disusun oleh baris-baris teks. Andaikan baris-baris sebuah teks dapat kita gunting lalu ujung kanan baris pertama kita sambung dengan ujung baris kedua , ujung kanan baris kedua disambung dengan ujung kiri baris ketiga, begitu seterusnya. Akhirnya , kita memperoleh sebuah “pita” yang berisi runtunan karakterkarakter, seperti yang di bawah ini : » Halo, apa kabar? Saya disini sedang belajar algoritma............. » Suatu teks P didefinisikan di dalam bagian DEKLARASI sebagai berikut : DEKLARASI P : teks ( P adalah perubah teks)
  6. 6. Tanda akhir Teks • • • • Pemrosesan teks yang utama adalah proses pembacaan. Karena teks berisi runtunan karakter, maka pembacaan teks adalah membaca karakter demi karakter secara beruntun, mulai dari awal teks sampai akhir teks. Akhir teks ditandai dengan sebuah karakter khusus, yang dibedakan dengan karakter-karakter lainnya. Bila pembacaan teks bertemu dengan karakter khusus tersebut, maka proses pembacaan teks dihentikan. Di dalam buku ini, kita mendefinisikan karakter titik (‘.’) sebagai akhir teks (tetapi, ini bukan satu-satunya karakter akhir teks yang dapat digunakan. Anda juga dapat menggunakan karakter lain seperti ‘#’,’*’,’$’, dan sebagainya, asalkan di dalam teks itu sendiri karakter tersebut tidak pernah digunakan ). Karakter titik ditaruh sesudah karakter terakhir. Kita mengartikan karakter titik bukan bagian dari elemen teks. Sekali lagi, karakter titik hanya sebagai penanda akhir arsip. Sembarang teks yang kita susun harus diakhiri dengan titik agar algoritma yang kita susun berlaku.  
  7. 7. Definisi Teks kosong • Pemrosesan teks selalu mempertimbangkan keadaan awal teks, yaitu kosong atau tidak kosong. Sebuah teks mungkin saja kosong. Pertama-tama kita harus mendefinisikan makna kosong itu sendiri. Karena kita telah membuat perjanjian bahwa sembarang teks harus diakhiri dengan karakter titik , maka teks kosong adalah teks yang hanya berisi karakter titik. Pada teks kosong, jumlah unsurnya adalah 0, seperti dibawah ini -
  8. 8. Pembacaan Teks • Pembacaan teks dimulai dari awal teks (dari “kiri” ke “kanan”). Kita mengandaikan ada sebuah pointer (dilambangkan dengan “”) yang menunjuk ke karakter yang akan dibaca. Setiap kali karakter yang ditunjuk oleh pointer selesai dibaca, pointer berpindah secara otomatis ke karakter berikutnya. Karakter yang sedang ditunjuk oleh pointer dinyatakan di dalam perubah C. KRMS9$SATE
  9. 9. • • Contoh di atas memperlihatkan pointer menunjuk karakter ‘M’. Jika karakter ini dibaca, maka C berisi ‘M’. Karakter ‘K’ dan karakter ‘R’ sudah dibaca sebelumnya, sedangkan karakter S,9,$, dan seterusnya belum dibaca. Pembacaan teks hanya dilakukan selama C≠’.’. jika C = ‘.’ Dikatakan akhir pita telah dicapai dan pembacaan pita dihentikan. Nama perubah C didefinisikan di dalam bagian DEKLARSI program utama, sehingga ia dikenal di seluruh bagian algoritma termasuk prosedur dan fungsi yang dipakai oleh algoritma. DEKLARASI C : char ( karakter yang sedang ditunjuk oleh pointer baca ) • Didefinisikan RESET_TEKS adalah prosedur universal untuk teks. RESET_TEKS menyebabkan pointer akan menunjuk pada karakter pertama di teks. Jika teks kosong,pointer menunjuk karakter titik. Procedure RESET_TEKS ( Menyiapkan teks pada posisi awal. ) ( K. Awal : sembarang ) ( K. Akhir : pointer menunjuk pada karakter pertama di dalam teks. Akibat pemanggilan prosedur ini, pointer menunjuk ke karakter pertama teks. Karakter yang ditunjuk mungkin ‘.’)
  10. 10. • Notasi yang digunakan untuk membaca karakter dari teks P adalah : Read(P;C) ( Membaca karakter yang ditunjuk oleh pointer baca dari Teks P. Karakter yang dibaca disimpan di dalampeubah C) • • Di bawah ini diberikan beberapa contoh kasus pemrosesan teks. Algoritmanya diyulis dalam bentuk prosedur atau fungsi. Pemanggilan prosedur dapat dilakukan dari program utama atau dari prosedur lain. Menghitung banyaknya karakter di dalam pita (tidak termasuk karakter ‘.’) Prosedure HITUNG_BANYAK_KAR (output n : integer) ( Menghitung banyaknya karakter di dalam teks. ) ( K. Awal : sembarang. ) ( K. Akhir : n berisi banyaknya karakter di dalam teks. ) DEKLARASI ( tidak ada ) DESKRIPSI : n0 RESET_TEKS Read (P:C) While C≠ ‘ . ‘ do nn+1 read (P,C) ( baca karakter berikutnya ) endwhile (c=‘.‘)
  11. 11. • Menghitung jumlah karakter ‘B’ di dalam teks. Prosedure HITUNG_BANYAK_KAR_B (output nb : integer) ( Menghitung banyaknya karakter ‘B’ di dalam teks. ) ( K. Awal : nb belum terdefinisi nilainya. ) ( K. Akhir : nb berisi banyaknya karakter ‘B’ di dalam pita. ) DEKLARASI ( tidak ada ) DESKRIPSI : nb0 RESET_TEKS Read (P:C) While C≠ ‘ . ‘ do If C= ’B’ then nbnb + 1 endif read (P,C) ( baca karakter berikutnya ) endwhile (c=‘.‘)
  12. 12. • Algoritma HITUNG_BANYAK_KAR_B diatas masih memiliki kelemahan. Baik pada teks kosong maupun pada teks yang sama sekali tidak berisi karakter ‘B’, nilai nb di akhir prosedur adalah nol. Karena itu, kita harus membedakan nilai nb untuk teks kosong dan nilai nb untuk teks yang tidak berisi karakter ‘B’. Kasus teks kosong harus ditangani secara khusus. Jika teks kosong, maka nb diisi dengan nilai -99. Prosedure HITUNG_BANYAK_KAR_B (output nb : integer) ( Menghitung banyak karakter ‘B’ di dalam teks. ) ( K. Awal : nb belum terdefinisi nilainya. ) ( K. Akhir : nb berisi banyaknya karakter ‘B’ di dalam teks ; jika teks kosong, maka nb diisi -99 ) DEKLARASI ( tidak ada ) DESKRIPSI : RESET_TEKS Read (P:C) if C= ‘ . ‘ then (teks kosong) nb -9999 else (C≠ ’.’ ) nb0 If C= ’B’ then nbnb + 1 endif read (P,C) ( karakter C berikutnya ) until C= ‘.’ Endif
  13. 13. • Pemanggilan HITUNG_BANYAK_KAR_B di dalam program utama adalah sebagai berikut : Program HITUNG_BANYAK_KARAKTER_B ( program utama untuk menghitung banyak karakter ‘B’ di dalam teks ) DEKLARASI C : char Cb : integer ( banyak hurup ‘B’ di dalam pita ) Procedure RESET_TEKS (menyiapkan teks pada posisi awal. Pointer baca menunjuk pada karakter pertama di dalam teks. Karakter pertama mungkin ‘.’ ) DESKRIPSI : HITUNG_BANYAK_KAR-B(cb) If cb=-99 then Write(‘teks kosong’) Else Write(cb) Endif – Menghitung banyak pasangan huruf’AN’ di dalam teks. Misalnya pada teks dibawah ini banyak ‘AN’ ada 3 buah, PANDANGAN J.
  14. 14. • • Versi 1 (SALAH) Gagasan algoritma ini adalah memeriksa apakah karakter yang sedang dibaca merupakan huruf ‘A’. Jika ya, maka baca karakter berikutnya. Jika karakter berikutnya adalah’N’, naikkan pencacah yang mencatat banyaknya ‘AN’. Procedure HITUNG_BANYAK_AN (output nAN : integer) ( Menghitung banyak pasangan huruf ‘AN’ di dalam teks. ) ( K. Awal : nAN belum terdefinisi nilainya. ) ( K. Akhir : nAN berisi banyaknya ‘AN’ di dalam teks. Jika teks kosong, maka nAN diisi nilai -99. ) DEKLARASI ( tidak ada ) DESKRIPSI : RESET_TEKS Read (P:C) if C=‘ . ‘ then ( teks kosong) nAN-99 else ( c≠ ‘.’ ) nAN  0 repeat If C= ’A’ then Read (P;C) If C = ‘N’ then nAN nAN +1 endif endif read (P,C) until C= ‘.’ endif
  15. 15. • Prosedure HITUNG_BANYAK_AN ini akan salah untuk kasus karakter sebelum titik adalah ‘A’, seperti pita berikut : KENTANGD UA. ▪ • Ketika karakter yang dibaca menunjuk ‘A’, teks dibaca lagi satu karkter. Pointer sekarang menunjuk ‘.’ Setelah pemeriksaan if c = ‘N’ teks dibaca lagi satu karakter, namun karena teks sudah dicapai, algoritma akan salah fatal ! Algoritma prosedure HITUNG_BANYAK_AN diperbaiki dengan membuat kalang while-do yang akan terus membaca teks selama karakter yang dibaca tidak sama dengan ‘A’ dan tidak sama dengan ‘.’.
  16. 16. Procedure HITUNG_BANYAK_AN (output nAN : integer) ( Menghitung banyak pasangan huruf ‘AN’ di dalam teks. ) ( K. Awal : nAN belum terdefinisi nilainya. ) ( K. Akhir : nAN berisi jumlah ‘AN’ di dalam teks. Jika teks kosong, maka nAN diisi nilai -99. ) DEKLARASI ( tidak ada ) DESKRIPSI : RESET_TEKS Read (P:C) if C=‘ . ‘ then ( teks kosong) nAN-99 else ( c≠ ‘.’ ) nAN  0 repeat (baca teks sampai ketemu ‘A’ atau ‘.’ ) while ( C≠ ‘A’) and (C≠ ‘.’ ) do read (P:C) endwhile (C= ’A’ or c = ‘.’ ) If C = ‘A’ then Read (P:C) If C= ‘N’ then nAN  nAN + 1 endif endif until C= ‘ .’ endif
  17. 17. • • Versi 2 (Benar) Gagasan Versi dua ini adalah dengan menggunakan dua buah nama peubah, c_yang_lalu dan c. Peubah pertama menyimpan karakter yang terakhir kali dibaca, sedangkan peubah kedua menyimpan karakter yang sedang ditunjuk oleh pointer baca. Setiap kali membaca teks periksa apakah c_yang_lalu=’A’ dan c=’N’. Peubah c_yang_lalu diinisialisasi dengan karakter spasi. Procedure HITUNG_BANYAK_AN (output nAN : integer ) ( menghitung banyak pasangan huruf ‘AN’ di dalam teks. ) ( K. Awal : nAN belum terdefinisi hasilnya ) ( K. Akhir : nAN berisi banyaknya ‘AN’ di dalam teks. Jika teks kosong. Maka nAN diisi nilai -99) DEKLARASI C_yang_lalu : char
  18. 18. END Thanks For Wacthing

×