Kamis, 28 Mei 2026

Belajar Pemrograman Scratch. Bab 8

8
Pemrosesan String

String adalah serangkaian karakter yang diperlakukan sebagai satu kesatuan. Anda dapat menulis program untuk menggabungkan, membandingkan, mengurutkan, mengenkripsi, dan memanipulasi string.

Berikut yang akan Anda pelajari dalam bab ini:

• Bagaimana Scratch menyimpan string

• Cara menggunakan blok manipulasi string yang tersedia di Scratch

• Beberapa teknik pemrosesan string

• Cara menulis program menarik yang memproses string

Kita akan mulai dengan melihat secara detail tipe data string, dan kemudian kita akan menulis prosedur untuk mengelola dan memanipulasi string. Prosedur tersebut akan menghapus dan mengganti karakter, menyisipkan dan mengekstrak substring, dan mengacak urutan karakter. Setelah itu, kita akan menggunakan prosedur ini dan menerapkan teknik ini untuk menulis beberapa aplikasi yang menyenangkan dan praktis.

Mengulas Kembali Tipe Data String
Seperti yang saya sebutkan di Bab 5, Scratch memiliki tiga tipe data: Boolean, angka, dan string. Pada dasarnya, string hanyalah urutan karakter yang teratur.

Karakter-karakter ini dapat mencakup huruf (baik huruf besar maupun kecil), angka, dan simbol lain yang dapat Anda ketik di keyboard Anda (+, -, &, @, dan seterusnya).

Anda dapat menggunakan string dalam program Anda untuk menyimpan nama, alamat, nomor telepon, judul buku, dan banyak lagi.

Di Scratch, karakter-karakter dalam sebuah string disimpan secara berurutan. Misalnya, jika Anda memiliki variabel bernama name, menjalankan perintah set name to Karen akan menyimpan karakter-karakter seperti yang diilustrasikan pada Gambar 8-1.


Gambar 8-1: Sebuah string disimpan sebagai urutan karakter.

Anda dapat mengakses karakter individual dari sebuah string dengan operator letter of.

Misalnya, blok letter 1 dari name mengembalikan huruf K, dan letter 5 dari name mengembalikan huruf n. Scratch juga menyediakan operator length of, yang mengembalikan jumlah karakter dalam sebuah string. Jika Anda menggunakan kedua operator ini dengan blok repeat, Anda dapat menghitung karakter, memeriksa beberapa karakter, dan melakukan banyak hal berguna lainnya, seperti yang akan saya demonstrasikan di subbagian berikut.

Menghitung Karakter Khusus dalam Sebuah String

Contoh skrip pertama kami, yang ditunjukkan pada Gambar 8-2, menghitung berapa banyak huruf vokal yang ada dalam sebuah string masukan. Skrip ini meminta pengguna untuk memasukkan sebuah string, kemudian menghitung dan menampilkan jumlah huruf vokal dalam string tersebut.


Gambar 8-2: Program penghitung huruf vokal



Program ini memeriksa setiap huruf dalam string input satu per satu dan mencari huruf vokal. Setiap kali menemukan huruf vokal, variabel bernama vowelCount akan bertambah 1. Skrip menggunakan variabel bernama pos (singkatan dari position) untuk melacak posisi karakter yang sedang diperiksa. Mari kita jelajahi skrip ini lebih detail.

Pertama, skrip meminta pengguna untuk memasukkan kalimat u. Scratch harus menyimpan string pengguna secara otomatis dalam variabel jawaban bawaan. Kemudian, ia mengatur vowelCount menjadi 0 (karena belum menemukan huruf vokal) dan mengatur pos menjadi 1 untuk mengakses huruf pertama dari string input.

Selanjutnya, loop pengulangan v memeriksa setiap huruf dalam string input. Operator length melaporkan jumlah karakter dalam string input, yaitu berapa kali loop harus diulang. Pada setiap putaran, loop menggunakan ch (singkatan dari character) untuk memeriksa satu karakter dari string input w. Pada iterasi pertama loop, ch diatur ke huruf pertama dari jawaban. Iterasi kedua menetapkan ch ke huruf kedua, dan dan seterusnya, hingga loop mencapai akhir string. Variabel pos digunakan untuk mengakses karakter yang diinginkan. Blok if kemudian memeriksa apakah karakter yang diperiksa adalah huruf vokal x. Jika karakter tersebut adalah huruf vokal, baik huruf besar maupun kecil, vowelCount akan ditambah 1. Setelah memeriksa satu karakter, loop menambah pos sebesar 1 y dan dimulai kembali untuk membaca karakter berikutnya. Ketika semua huruf dalam string input telah diperiksa, loop berakhir, dan program menampilkan jumlah huruf vokal yang dihitung menggunakan blok say.

Teknik yang digunakan dalam contoh ini akan diterapkan berkali-kali di sisa bab ini. Muat skrip VowelCount.sb2, jalankan beberapa kali, dan pastikan Anda memahaminya secara menyeluruh. Membandingkan Karakter String Contoh kedua kita memeriksa apakah bilangan bulat yang dimasukkan oleh pengguna adalah palindrom. Palindrom adalah angka (atau string teks) yang dibaca sama dari depan dan belakang. Misalnya, 1234321 dan 1122332211 adalah angka palindrom. Demikian pula, Racecar, Hannah, dan Bob adalah beberapa angka palindrom. Untuk mengilustrasikan algoritma pengujian palindrom kita, misalkan angka masukannya adalah 12344321, seperti yang diilustrasikan pada Gambar 8-3.


Gambar 8-3: Menggunakan dua variabel untuk memeriksa apakah suatu angka adalah palindrom atau bukan

Untuk memeriksa apakah suatu angka adalah palindrom, kita perlu membandingkan digit pertama dan kedelapan, digit kedua dan ketujuh, digit ketiga dan keenam, dan seterusnya. Jika ada perbandingan yang menghasilkan hasil yang salah (artinya kedua digit tersebut tidak sama), maka angka tersebut bukan palindrom. Sebuah program yang mengimplementasikan algoritma pengujian palindrom ini ditunjukkan pada Gambar 8-4.


Gambar 8-4: Program ini menguji apakah bilangan bulat yang dimasukkan oleh pengguna adalah palindrom.

Skrip mengakses angka-angka yang akan dibandingkan dengan dua variabel (pos1 dan pos2 pada Gambar 8-3) yang bergerak berlawanan arah. Variabel pertama (pos1) dimulai dari angka pertama dan bergerak maju, sedangkan variabel kedua (pos2) dimulai dari angka terakhir dan bergerak mundur. Jumlah perbandingan yang dibutuhkan paling banyak setengah dari jumlah angka dalam angka masukan. Dengan masukan 12344321, kita membutuhkan paling banyak empat perbandingan karena angka masukan memiliki delapan angka. (Logika yang sama berlaku jika bilangan bulat masukan memiliki jumlah angka ganjil, karena angka di tengah bilangan tidak perlu dibandingkan.) Setelah program menentukan apakah angka pengguna merupakan palindrom atau bukan, program akan menampilkan pesan dengan hasilnya.


Cobalah 8-1
Muat Palindrome.sb2 dan jalankan untuk memahami cara kerjanya. Karena cara Scratch menangani jumlah pengulangan desimal, jika angka masukan memiliki jumlah digit ganjil, skrip akan melakukan satu perbandingan tambahan dari dua digit yang mengelilingi digit tengah. Cobalah untuk memperbaiki program agar melakukan jumlah pengulangan yang benar ketika angka masukan memiliki jumlah digit ganjil.Program ini memeriksa setiap huruf dalam string input satu per satu dan 
mencari huruf vokal. Setiap kali menemukan huruf vokal, variabel bernama vowelCount akan bertambah 1. Skrip menggunakan variabel bernama pos (singkatan dari position) untuk melacak posisi karakter yang sedang diperiksa. Mari kita jelajahi skrip ini lebih detail.


Pertama, skrip meminta pengguna untuk memasukkan kalimat u. Scratch harus menyimpan string pengguna secara otomatis dalam variabel jawaban bawaan. Kemudian, ia mengatur vowelCount menjadi 0 (karena belum menemukan huruf vokal) dan mengatur pos menjadi 1 untuk mengakses huruf pertama dari string input.

Selanjutnya, loop pengulangan v memeriksa setiap huruf dalam string input. Operator length melaporkan jumlah karakter dalam string input, yaitu berapa kali loop harus diulang. Pada setiap putaran, loop menggunakan ch (singkatan dari character) untuk memeriksa satu karakter dari string input w. Pada iterasi pertama loop, ch diatur ke huruf pertama dari jawaban. Iterasi kedua menetapkan ch ke huruf kedua, dan dan seterusnya, hingga loop mencapai akhir string. Variabel pos digunakan untuk mengakses karakter yang diinginkan. Blok if kemudian memeriksa apakah karakter yang diperiksa adalah huruf vokal x. Jika karakter tersebut adalah huruf vokal, baik huruf besar maupun kecil, vowelCount akan ditambah 1. Setelah memeriksa satu karakter, loop menambah pos sebesar 1 y dan dimulai kembali untuk membaca karakter berikutnya. Ketika semua huruf dalam string input telah diperiksa, loop berakhir, dan program menampilkan jumlah huruf vokal yang dihitung menggunakan blok say.


Teknik yang digunakan dalam contoh ini akan diterapkan berkali-kali di sisa bab ini. Muat skrip VowelCount.sb2, jalankan beberapa kali, dan pastikan Anda memahaminya secara menyeluruh. Membandingkan Karakter String Contoh kedua kita memeriksa apakah bilangan bulat yang dimasukkan oleh pengguna adalah palindrom. Palindrom adalah angka (atau string teks) yang dibaca sama dari depan dan belakang. Misalnya, 1234321 dan 1122332211 adalah angka palindrom. Demikian pula, Racecar, Hannah, dan Bob adalah beberapa angka palindrom. Untuk mengilustrasikan algoritma pengujian palindrom kita, misalkan angka masukannya adalah 12344321, seperti yang diilustrasikan pada Gambar 8-3.


Gambar 8-3: Menggunakan dua variabel untuk memeriksa apakah suatu angka adalah palindrom atau bukan

Untuk memeriksa apakah suatu angka adalah palindrom, kita perlu membandingkan digit pertama dan kedelapan, digit kedua dan ketujuh, digit ketiga dan keenam, dan seterusnya. Jika ada perbandingan yang menghasilkan hasil yang salah (artinya kedua digit tersebut tidak sama), maka angka tersebut bukan palindrom. Sebuah program yang mengimplementasikan algoritma pengujian palindrom ini ditunjukkan pada Gambar 8-4.


Gambar 8-4: Program ini menguji apakah bilangan bulat yang dimasukkan oleh pengguna adalah palindrom.

Skrip mengakses angka-angka yang akan dibandingkan dengan dua variabel (pos1 dan pos2 pada Gambar 8-3) yang bergerak berlawanan arah. Variabel pertama (pos1) dimulai dari angka pertama dan bergerak maju, sedangkan variabel kedua (pos2) dimulai dari angka terakhir dan bergerak mundur. Jumlah perbandingan yang dibutuhkan paling banyak setengah dari jumlah angka dalam angka masukan. Dengan masukan 12344321, kita membutuhkan paling banyak empat perbandingan karena angka masukan memiliki delapan angka. (Logika yang sama berlaku jika bilangan bulat masukan memiliki jumlah angka ganjil, karena angka di tengah bilangan tidak perlu dibandingkan.) Setelah program menentukan apakah angka pengguna merupakan palindrom atau bukan, program akan menampilkan pesan dengan hasilnya.


Cobalah 8-1

Muat Palindrome.sb2 dan jalankan untuk memahami cara kerjanya. Karena cara Scratch menangani jumlah pengulangan desimal, jika angka masukan memiliki jumlah digit ganjil, skrip akan melakukan satu perbandingan tambahan dari dua digit yang mengelilingi digit tengah. Cobalah untuk memperbaiki program agar melakukan jumlah pengulangan yang benar ketika angka masukan memiliki jumlah digit ganjil.



Di bagian selanjutnya, kita akan menjelajahi beberapa operasi yang paling umum pada string dan melihat beberapa strategi untuk menulis prosedur manipulasi string di Scratch.

Contoh Manipulasi String
Operator 'letter of' hanya memungkinkan Anda membaca karakter individual dari sebuah string. Jika Anda ingin memasukkan karakter ke dalam (atau menghapus karakter dari) sebuah string, Anda harus melakukan semua pekerjaan sendiri. Di Scratch, Anda tidak dapat mengubah karakter dalam sebuah string, jadi satu-satunya cara untuk mengubah sebuah string adalah dengan membuat string baru. Misalnya, jika Anda ingin mengubah huruf pertama dalam string "jack" menjadi huruf kapital, Anda perlu membuat string baru yang berisi huruf J diikuti oleh huruf-huruf lainnya, ack. Idenya adalah menggunakan operator 'letter of' untuk membaca huruf-huruf dari string asli dan menambahkan huruf-huruf ini ke string baru, sesuai kebutuhan, menggunakan operator 'join'. Di bagian ini, kita akan mengembangkan beberapa aplikasi sederhana yang menunjukkan teknik manipulasi string umum.


Igpay Atinlay
Bagaimana jika sprite kita dapat berbicara dalam bahasa rahasia? Di bagian ini, kita akan mengajari mereka bahasa kode yang disebut pig latin. Aturan kita untuk membuat kata pig latin akan sederhana. Untuk mengubah sebuah kata menjadi pig latin, pindahkan huruf pertama ke akhir dan tambahkan huruf ay. Jadi, kata talk menjadi alktay, fun menjadi unfay, dan seterusnya. Sekarang setelah Anda mengetahui aturannya, dapatkah Anda menebak apa yang judul bagian ini awalnya katakan?


Strategi yang akan kita gunakan untuk mengubah sebuah kata menjadi pig latin diilustrasikan pada Gambar 8-5, menggunakan kata scratch.


Gambar 8-5: Cara menerjemahkan kata bahasa Inggris ke dalam pig latin

Pertama-tama kita akan menambahkan semua huruf (kecuali huruf pertama), satu per satu, dari kata masukan ke kata keluaran u. Kemudian kita menambahkan huruf pertama dalam kata masukan ke kata keluaran v, diikuti oleh ay w. Prosedur PigLatin kita yang menerapkan

langkah-langkah ini ditunjukkan pada Gambar 8-6.


Prosedur ini menggunakan tiga variabel untuk membuat kata-kata berkode kita. Variabel `outWord` menyimpan string keluaran sebagaimana telah dirakit. Sebuah penghitung bernama `pos` (untuk posisi) memberi tahu skrip karakter mana dari string asli yang akan ditambahkan ke `outWord`. Terakhir, sebuah variabel bernama `ch` menyimpan satu karakter dari string masukan. Prosedur ini mengambil kata yang ingin Anda terjemahkan ke dalam bahasa Pig Latin sebagai parameter, bernama `word`.


Gambar 8-6: Prosedur PigLatin

Pertama, prosedur ini membuat string kosong untuk `outWord` dan mengatur `pos` menjadi 2u. (String kosong adalah string yang tidak berisi karakter apa pun; panjangnya adalah 0.) Prosedur ini kemudian menggunakan blok pengulangan untuk menambahkan semua huruf kecuali huruf pertama dari string masukan (`word`) ke string keluaran (`outWord`) `v`.

Kami melewatkan karakter pertama, sehingga jumlah pengulangan kurang dari panjang string masukan. Untuk setiap iterasi loop, satu karakter dari `word` ditambahkan ke `outWord`. Di akhir loop, huruf pertama dari kata ditambahkan ke outWord w, bersama dengan huruf a dan x. Gambar 8-6: Prosedur PigLatin

Pertama, prosedur membuat string kosong untuk outWord dan mengatur pos menjadi 2u. (String kosong adalah string yang tidak berisi karakter apa pun; panjangnya adalah 0.) Prosedur kemudian menggunakan blok pengulangan untuk menambahkan semua huruf kecuali huruf pertama dari string input (word) ke string output (outWord) v.

Kami melewatkan karakter pertama, sehingga jumlah pengulangan kurang dari panjang string input. Untuk setiap iterasi loop, satu karakter dari kata ditambahkan ke outWord. Di akhir loop, huruf pertama dari kata ditambahkan ke outWord w, bersama dengan huruf a dan x.


Cobalah 8-2
Muat PigLatin.sb2 dan jalankan untuk menguji prosedur ini. Aplikasi meminta input kata dan kemudian mengucapkan terjemahan Pig Latinnya. Ubahlah untuk menerjemahkan sebuah frasa, seperti “Apakah Anda ingin jus?” ke dalam bahasa Pig Latin. (Petunjuk: Panggil PigLatin untuk setiap kata untuk merakit frasa keluaran.) Sebagai tantangan lain, tulis prosedur yang mengambil kata Pig Latin sebagai masukan dan menampilkan kata bahasa Inggris aslinya.


Perbaiki Ejaan Saya
Di bagian ini, kita akan mengembangkan permainan sederhana yang menghasilkan kata-kata yang salah eja dan meminta pemain untuk memasukkan ejaan yang benar. Permainan akan membuat kata-kata yang salah eja dengan memasukkan huruf acak pada posisi acak dalam sebuah kata bahasa Inggris. Tentu saja, mungkin ada lebih dari satu ejaan yang benar untuk kata-kata sederhana yang salah eja. Misalnya, jika kata aslinya adalah wall dan permainan menghasilkan mwall, maka mall atau wall akan benar. Untuk menjaga agar permainan kita tetap sederhana, kita akan mengabaikan kemungkinan itu dan bersikeras pada ejaan tertentu untuk jawaban yang benar.

Pertama, mari kita buat prosedur umum untuk menyisipkan karakter pada posisi tertentu dalam sebuah string. Prosedur ini, yang disebut Insert, mengambil tiga parameter: kata masukan (strIn), string (atau karakter) yang akan disisipkan (strAdd), dan posisi di mana Anda menginginkan karakter baru tersebut (charPos). Prosedur inimenghasilkan string baru (strOut) dengan strAdd yang disisipkan ke dalam strIn pada posisi yang benar,seperti yang diilustrasikan dalam contoh Gambar 8-7.


Gambar 8-7: Mengilustrasikan prosedur Insert

Kita akan menambahkan karakter dari strIn, satu per satu, ke dalam strOut. Ketika kita mencapai charPos, kita hanya akan menambahkan karakter dari strAdd ke strOut sebelum menambahkan huruf pada charPos dari strIn. Prosedur lengkapnya ditunjukkan pada Gambar 8-8.


Gambar 8-8: Prosedur Insert

Pertama, prosedur ini menginisialisasi strOut ke string kosong dan mengatur pos ke 1 untuk mengakses huruf pertama dari string masukan u. Kemudian, ia memulai perulangan loop untuk menambahkan huruf-huruf strIn, satu per satu, ke strOut v. Setiap iterasi mengambil huruf strIn berikutnya dan menempatkannya dalam variabel ch w. Jika posisi karakter saat ini cocok dengan charPos, prosedur menambahkan strAdd ke strOut x. Dalam semua kasus, ch ditambahkan ke strOut y, dan pos ditambah untuk mengakses huruf strIn z berikutnya.

Sekarang kita memiliki prosedur Insert, mari kita lihat skrip utama permainan, yang ditunjukkan pada Gambar 8-9.


Gambar 8-9: Skrip utama untuk permainan Fix My Spelling

String alpha berisi semua huruf alfabet. Ini akan memberikan huruf acak untuk dimasukkan ke dalam kata yang ingin kita salah eja u. Skrip secara acak memilih kata dari daftar yang sudah dibuat dan menyimpan kata itu sebagai inWord v. Anda akan mempelajari lebih lanjut tentang daftar di bab berikutnya; untuk saat ini, anggap saja daftar ini sebagai bank kata. Skrip kemudian memilih huruf acak (randChar) dari alpha w dan posisi acak (randPos) untuk menempatkan huruf ini ke dalam inWord x.


Skrip kemudian memanggil prosedur Insert kita untuk membuat kata yang salah eja (strOut) y. Setelah itu, skrip memulai perulangan untuk mendapatkan jawaban pemain z.


Di dalam perulangan, skrip meminta pemain untuk memasukkan ejaan yang benar {, dan menggunakan blok if/else untuk memeriksa jawaban |. Jika jawaban pemain cocok dengan kata asli (inWord), permainan berakhir; jika tidak, pemain harus mencoba lagi.


Cobalah 8-3
Muat FixMySpelling.sb2 dan mainkan beberapa kali untuk memahami cara kerjanya. Bisakah Anda memodifikasi permainan sehingga kata yang salah eja berisi dua huruf tambahan bukan hanya satu?

Menguraikan
Contoh terakhir kita menyajikan permainan kata lain yang sedikit lebih menantang untuk dimainkan. Kita akan mulai dengan sebuah kata bahasa Inggris, mengacak huruf-hurufnya, dan meminta pemain untuk menebak kata aslinya.


Mari kita mulai dengan membuat prosedur yang menyusun ulang karakter dari sebuah string yang diberikan secara acak. Pemanggil menetapkan string input (strIn), dan prosedur, yang bernama Randomize, memodifikasinya sehingga karakter-karakternya diacak, seperti yang diilustrasikan pada Gambar 8-10.


Gambar 8-10: Mengilustrasikan prosedur Randomize

Kita akan memilih huruf acak dari strIn dan menambahkan huruf itu ke string sementara, str1. (String sementara ini, yang awalnya kosong, adalah tempat kita akan menyimpan kata yang diacak saat kita membuatnya.) Kemudian kita akan menghapus huruf itu dari strIn agar tidak digunakan kembali dan mengulangi seluruh proses hingga strIn kosong.

Prosedur Randomize mengimplementasikan langkah-langkah ini seperti yang ditunjukkan pada Gambar 8-11.


Gambar 8-11: Prosedur Randomize

Pertama, Randomize mengatur len ke panjang string input, strIn, dan mengosongkan string sementara, str1 u. Prosedur kemudian memulai loop pengulangan untuk menyusun kata acak v. Jumlah pengulangan sama dengan panjang string input. Untuk setiap iterasi loop, kita memilih posisi acak di strIn w dan menambahkan huruf itu ke str1 x. Perhatikan bahwa kita menggunakan panjang pada langkah w karena strIn dan panjangnya akan berubah di dalam loop. Setelah itu, kita memanggil prosedur bernama Remove untuk menghapus karakter yang baru saja kita gunakan dari strIn y. Ketika loop selesai mengacak huruf, strIn diatur ke kata acak (str1) z.


Prosedur Remove, yang memungkinkan kita menghindari penambahan huruf yang sama ke kata acak kita dua kali, ditunjukkan pada Gambar 8-12. Prosedur ini menghapus karakter dari strIn pada posisi yang Anda tentukan dengan parameter charPos.


Gambar 8-12: Prosedur Hapus

Prosedur ini menggunakan string sementara lain, bernama str2, untuk membangun string baru yang ingin kita buat. Prosedur ini dimulai dengan mengosongkan str2 dan mengatur penghitung loop, n, menjadi 1 untuk mengakses karakter pertama dari strIn u. Prosedur kemudian memulai loop berulang untuk menyusun string keluaran v. Jika kita tidak ingin menghapus karakter saat ini, kita menambahkannya ke str2 w. Penghitung loop kemudian ditambah untuk mengakses huruf berikutnya dari strIn x. Ketika prosedur selesai, strIn diatur ke kata baru (str2) y.


Sekarang kita siap untuk menjelajahi skrip utama permainan, yang ditunjukkan pada Gambar 8-13.


Gambar 8-13: Skrip utama permainan Unscramble.


Skrip memilih sebuah kata secara acak dari sebuah daftar dan menyimpan kata tersebut

dalam inWord u. Kemudian, skrip mengatur strIn sama dengan inWord v dan memanggil Randomize untuk

mengacak karakter strIn w. Setelah itu, skrip memulai sebuah loop untuk mendapatkan

jawaban pemain x. Di dalam loop, skrip meminta pemain untuk memasukkan

kata yang telah diacak y dan menggunakan blok if/else untuk memeriksa jawaban z. Bagian ini

identik dengan apa yang telah kita lakukan dalam permainan Fix My Spelling di bagian sebelumnya.


Contoh-contoh sebelumnya hanyalah sebagian kecil dari berbagai operasi

yang dapat Anda lakukan pada string. Cobalah menggunakan teknik yang sama untuk mengubah string dalam

proyek Anda sendiri!


Di sisa bab ini, kita akan menjelajahi beberapa program yang menggunakan string

untuk memecahkan masalah yang menarik.


Proyek Scratch

Prosedur yang baru saja Anda lihat menunjukkan dasar-dasar pemrosesan string.


Di bagian ini, kita akan menerapkan apa yang telah kita pelajari untuk menulis beberapa aplikasi praktis.


Sepanjang permainan, Anda akan mempelajari beberapa trik pemrograman baru yang dapat Anda gunakan dalam kreasi Anda sendiri.


Permainan Tembak

Permainan ini bertujuan untuk mengajarkan konsep gerak relatif dengan cara yang menyenangkan dan menarik. Tujuan permainan ini adalah untuk memperkirakan sudut belok dan jarak tempuh antara dua objek di Panggung. Antarmuka pengguna untuk permainan ini diilustrasikan pada Gambar 8-14.


Gambar 8-14: Antarmuka pengguna permainan Tembak

Saat permainan dimulai, ia menempatkan sprite Pemain dan Target di lokasi acak di Panggung. Selanjutnya, ia meminta pemain untuk memperkirakan sudut belok dan jarak yang perlu ditempuh sprite Pemain untuk mengenai Target. Sprite Pemain kemudian digerakkan sesuai dengan angka yang dimasukkan oleh pemain. Jika sprite berhenti dalam radius tertentu dari Target, pemain memenangkan permainan. Jika tidak, sprite Pemain kembali ke posisi awalnya, dan pemain dapat mencoba lagi. Saat ikon bendera hijau diklik untuk memulai permainan, sprite Pemain menjalankan skrip yang ditunjukkan pada Gambar 8-15. Gambar 8-15: Skrip sprite Pemain yang berjalan saat ikon bendera hijau diklik

Skrip tersebut menyiarkan NewGame untuk menginstruksikan sprite Pembantu untuk menetapkan lokasi baru untuk sprite Pemain dan Target u. Sprite Pembantu menjalankan prosedur sederhana (tidak ditampilkan) yang memperbarui lima variabel berikut dengan angka acak yang akan membuat Pemain dan Target tetap terlihat (dan terpisah dengan jarak tertentu) di Panggung:

XPlayer dan YPlayer Koordinat x dan y dari sprite Pemain
XTarget dan YTarget Koordinat x dan y dari sprite Target
initAngle Arah awal sprite Pemain

Setelah skrip memiliki posisi baru untuk Pemain dan Target, ia menyiarkan StartGame untuk memindahkan sprite Target ke lokasi barunya v. (Skrip untuk sprite Target tidak ditampilkan di sini.) Kemudian skrip memasuki loop tak terbatas untuk memberi pemain beberapa kesempatan untuk mengenai target w. Perulangan akan dihentikan dengan perintah stop all (dalam prosedur CheckAnswers) ketika pemain mengenai target.

Setiap iterasi perulangan menetapkan posisi dan arah awal sprite Pemain dan menghapus semua tanda pena dari Stage x untuk menghapus jejak yang tertinggal dari tebakan sebelumnya. Skrip kemudian menyiarkan GetAnswers y, dan sebagai respons, sprite Pembantu meminta pemain untuk memasukkan jawaban, seperti yang ditunjukkan pada Gambar 8-16. Sprite Pembantu kemudian membagi jawaban menjadi dua bagian (sebelum dan sesudah koma) dan memperbarui sudut dan jarak sesuai dengan itu.

Ikuti komentar pada Gambar 8-16 untuk melihat cara kerja skrip ini. Sprite Pemain kemudian digerakkan, dengan pena diturunkan, seperti yang diarahkan oleh pemain z. Ini meninggalkan jejak visual dari rute pergerakan yang dapat digunakan pemain untuk menyempurnakan perkiraannya untuk putaran berikutnya.


Gambar 8-16: Skrip GetAnswers

Terakhir, sprite Pemain menjalankan prosedur CheckAnswers untuk melihat apakah ia cukup dekat dengan target.

Permainan berakhir hanya jika sprite Pemain berada dalam jarak yang sangat dekat dengan target. Gambar 8-17 menunjukkan bagaimana sprite Pemain memeriksa jaraknya dari target.


Sprite Pemain menggunakan jarak ke blok untuk memeriksa seberapa dekat ia dengan sprite Target. Jika jaraknya kurang dari 20 langkah, permainan menganggap ini sebagai tembakan yang mengenai sasaran dan mengatakan, “Anda menang!” Jika tidak, percobaan menembak dianggap meleset, loop selamanya dimulai lagi, dan pemain mendapat kesempatan lain.


Gambar 8-17: Prosedur CheckAnswers dari sprite Pemain.


coba 8-4
Modifikasi permainan Tembak untuk melacak jumlah kali pemain perlu mengenai sasaran dan memberikan skor kepada pemain sesuai dengan itu.


Konverter Biner ke Desimal

Bilangan biner (basis-2) hanya memiliki dua digit yang mungkin: 0 dan 1. Sebagian besar komputer beroperasi dan berkomunikasi dengan bilangan biner. Namun, manusia lebih suka bekerja dengan bilangan dalam sistem desimal (basis-10). Di bagian ini, Anda akan mengembangkan aplikasi yang mengkonversi bilangan biner ke ekuivalen desimalnya. Nantinya, Anda dapat menggunakannya sebagai permainan untuk menguji kemampuan Anda untuk melakukan konversi tersebut.

Mari kita bahas terlebih dahulu cara mengkonversi dari biner ke desimal. Gambar 8-18 menunjukkan contoh menggunakan bilangan biner 10011011.


Gambar 8-18: Mengonversi bilangan biner ke bilangan desimal

Yang harus kita lakukan adalah mengalikan setiap digit biner dengan nilai posisinya yang sesuai dan menambahkan hasil perkaliannya. Nilai posisi sesuai dengan pangkat basis yang meningkat dari kanan ke kiri, dengan posisi pertama memiliki pangkat 0. Karena biner berbasis 2, digit paling kanan memiliki nilai posisi 20 = 1, jadi Anda akan mengalikan digit tersebut dengan 1. Anda akan mengalikan digit berikutnya dengan 21 = 2, digit berikutnya dengan 22 = 4, dan seterusnya.

Gambar 8-19 mengilustrasikan antarmuka pengguna aplikasi konversi biner ke desimal. Program meminta pengguna untuk memasukkan angka biner 8-bit. Kemudian program menampilkan angka masukan di Panggung dengan sprite Bit, yang menggunakan dua kostum untuk mewakili 0 dan 1. Program juga menghitung angka desimal yang setara, dan sprite Driver, yang memiliki kostum komputer, menampilkan nilai tersebut kepada pengguna.


Gambar 8-19: Program konversi biner ke desimal


Cobalah 8-5
Untuk memeriksa pemahaman Anda, praktikkan konversi biner ke desimal berikut: (a) 1010100, (b) 1101001, dan (c) 1100001. Program dimulai ketika ikon bendera hijau diklik. Kejadian ini ditangkap oleh sprite Driver, yang menjalankan skrip yang ditunjukkan dan dijelaskan pada Gambar 8-20.

Gambar 8-20: Skrip untuk sprite Driver

Skrip ini mempersiapkan Stage dan meminta pengguna untuk memasukkan angka biner agar sprite Bit dapat memulai putaran konversi baru. Ketika sprite Bit menyelesaikan pekerjaannya, sprite Driver menunjukkan kepada pengguna nilai desimal, yang dihitung dan disimpan oleh sprite Bit dalam variabel bersama bernama decimal. Skrip yang dijalankan sprite Bit sebagai respons terhadap pesan Initialize diilustrasikan pada Gambar 8-21.


Gambar 8-21: Skrip Inisialisasi untuk sprite Bit

Skrip ini menggambar pola bit yang mewakili delapan angka nol pada Stage. Seperti yang akan Anda lihat sebentar lagi, di mana pun angka biner 1 muncul dalam string input pengguna, skrip harus memberi tanda berupa angka 1 di atas bit yang sesuai. Ketika pengguna memasukkan angka biner yang akan dikonversi, sprite Bit harus menerima pesan BinaryToDecimal dan menjalankan skrip yang ditunjukkan pada Gambar 8-22.


Gambar 8-22: Skrip BinaryToDecimal untuk sprite Bit

Pertama, prosedur konversi menginisialisasi semua variabel yang akan digunakannya:

  • length adalah jumlah bit dalam angka biner pengguna.
  • pos menunjuk ke digit paling kanan dari angka input.
  • weight dimulai pada nilai posisi digit biner paling kanan.
  • decimal diatur ke 0 tetapi akan menyimpan hasil konversi pada akhirnya.
  • xPos dimulai pada koordinat x dari gambar digit biner paling kanan.

Di dalam loop pengulangan v, prosedur memeriksa setiap digit untuk melihat apakah itu adalah 1 atau 0. Jika loop menemukan 1 w, ia menambahkan nilai bobot saat ini ke desimal dan mencetak kostum digit-1 di atas gambar digit-0. Di akhir loop, skrip memperbarui beberapa variabel sebelum beralih ke iterasi berikutnya:

  • pos diperbarui untuk menunjuk ke digit di sebelah kiri digit yang baru saja kita proses.
  • xPos disejajarkan dengan pusat gambar digit berikutnya, untuk berjaga-jaga jika kita perlu mencetak gambar baru.
  • bobot dikalikan dengan 2, yang berarti akan mengambil nilai 1, 2, 4, 8, 16, dan seterusnya saat loop berulang.
Cobalah 8-6
Buat sprite Driver memvalidasi angka yang dimasukkan oleh pengguna sebelum menyiarkan pesan BinaryToDecimal ke sprite Bit. Anda harus memverifikasi bahwa (1) angka yang dimasukkan oleh pengguna adalah bilangan biner (yaitu, hanya berisi angka satu dan nol) dan (2) panjang input paling banyak delapan digit.

Hangman
Pada bagian ini, kita akan menulis permainan Hangman klasik. Gambar 8-23 menunjukkan
permainan tersebut.


Gambar 8-23: Antarmuka pengguna untuk permainan Hangman

Program secara acak memilih kata rahasia enam huruf dan menampilkan satu tanda tanya untuk setiap huruf. Pemain memiliki delapan kesempatan untuk menebak huruf dalam kata tersebut. Jika pemain menebak huruf dengan benar, program akan menampilkan semua kemunculan huruf tersebut dalam kata rahasia. Jika tidak, program akan menampilkan bagian baru dari figur yang tergantung (kepala, badan, lengan kiri, dan seterusnya).

Setelah delapan tebakan salah, program menyelesaikan gambar tersebut, dan pemain kalah dalam permainan. Jika pemain menebak kata rahasia dalam delapan percobaan atau kurang, hasilnya adalah kemenangan. Aplikasi ini memiliki empat sprite berikut:
Pengemudi Sprite ini menyembunyikan dirinya saat permainan dimulai, meminta pemain untuk memasukkan tebakan, dan memproses jawaban pemain. Saat permainan berakhir, sprite menampilkan salah satu dari dua kostum berikut:
Penggantung Sprite ini menampilkan gambar penggantung yang berkembang. Ia memiliki total sembilan kostum, masing-masing menunjukkan bagian tambahan dari tubuh penggantung, seperti yang digambarkan pada Gambar 8-24.


Gambar 8-24: Sembilan kostum sprite Penggantung

Baru Sprite ini menampilkan tombol Baru di Panggung. Pembantu Sprite tak terlihat ini menampilkan huruf yang ditebak oleh pemain serta jumlah percobaan yang tersisa. Ia menggunakan tujuh variabel dengan monitor yang dikonfigurasi sebagai layar besar dan diposisikan di lokasi yang tepat di Panggung. Menggunakan sprite yang berbeda untuk memperbarui tampilan memisahkan logika permainan dari antarmuka pengguna. Misalnya, Anda dapat mengubah sprite ini untuk menampilkan huruf yang lebih menarik di Stage tanpa memengaruhi bagian aplikasi lainnya.

Ketika pemain menekan sprite Baru (tombol Baru), ia menyiarkan pesan NewGame untuk memberi tahu sprite Driver bahwa permainan baru telah dimulai. Ketika sprite Driver menerima pesan ini, ia menjalankan skrip yang ditunjukkan pada Gambar 8-25.


Gambar 8-25: Skrip NewGame dari sprite Driver

Skrip tersebut mengatur ulang antarmuka pengguna permainan u dan memulai loop v untuk membaca tebakan huruf. Prosedur lain yang dipanggil oleh sprite Driver akan mengakhiri loop ini melalui blok stop all ketika kondisi akhir permainan terdeteksi.


Dalam setiap iterasi loop, sprite Driver meminta pemain untuk menebak sebuah huruf dan menunggu input w. Ketika pemain memasukkan tebakan, skrip memanggil ProcessAnswer, yang akan memperbarui sebuah flag (bernama gotLetter) untuk menunjukkan apakah huruf tersebut benar atau salah.

Ketika ProcessAnswer kembali, skrip memeriksa flag gotLetter x dan bertindak berdasarkan apakah tebakan pemain benar atau salah. Saya akan menjelaskan prosedur yang dipanggil oleh NewGame selanjutnya, dimulai dengan skrip pada Gambar 8-26.


Gambar 8-26: Skrip yang dipicu dari prosedur Initialize

Selama inisialisasi, sprite Driver menyembunyikan dirinya, menginisialisasi displayWord ke sebuah string dengan enam tanda tanya, dan mengatur remAttempts (berapa banyak tebakan yang tersisa bagi pemain) menjadi 8. Kemudian ia memilih secretWord dari daftar kata enam huruf yang telah ditentukan sebelumnya. Selanjutnya, prosedur tersebut menyiarkan Update sehingga Helper sprite akan menetapkan variabelnya (yang monitornya terlihat di Stage) ke nilai yang benar. Instruksi terakhir menyiarkan pesan Reset ke sprite Hangman. Ketika sprite Hangman menerima pesan ini, ia beralih ke kostum awalnya, yang menunjukkan tiang gantungan kosong.

Sekarang mari kita pertimbangkan contoh sederhana untuk membantu kita memahami apa yang dilakukan prosedur ProcessAnswer (lihat Gambar 8-27). Asumsikan kata rahasianya adalah "cross" dan ini adalah ronde pertama permainan (yang berarti displayWord adalah "??????"). Jika tebakan pertama pemain adalah r, ProcessAnswer harus mengatur gotLetter ke 1 untuk menunjukkan tebakan yang benar, mengatur displayWord ke "??r???" untuk menunjukkan posisi huruf, dan mengatur qmarkCount (jumlah tanda tanya dalam string tampilan yang diperbarui) ke 5. Ketika qmarkCount mencapai 0, pemain telah menebak semua huruf dalam kata rahasia. ProcessAnswer termasuk dalam sprite Driver, dan Anda dapat melihat skrip lengkapnya pada Gambar 8-27 (kiri).

ProcessAnswer dimulai dengan mengatur ulang flag gotLetter dan qmarkCount menjadi 0. qmarkCount akan bertambah 1 untuk setiap huruf yang tidak diketahui dalam kata rahasia. Variabel sementara, temp, yang digunakan untuk membuat string tampilan setelah setiap tebakan, diinisialisasi dengan string kosong. Variabel pos digunakan sebagai penghitung loop.

Gambar 8-27: Prosedur ProcessAnswer

Loop memeriksa setiap huruf dari secretWord, menggunakan pos sebagai indeks. Jika huruf yang diperiksa (disimpan dalam char) sama dengan huruf yang ditebak (disimpan dalam variabel jawaban bawaan Scratch), flag gotLetter diatur ke 1. Jika tidak, variabel char diatur ke huruf pada posisi yang sesuai dalam variabel displayWord. Bagaimanapun, skrip menambahkan karakter ke akhir variabel sementara, seperti yang diilustrasikan pada Gambar 8-27 (kanan).

Ketika loop berakhir, variabel displayWord akan berisi enam huruf yang akan ditampilkan di Panggung, dengan mempertimbangkan tebakan terbaru pengguna. Loop juga melacak jumlah tanda tanya dalam string tampilan. Jika tidak ada, maka pengguna telah berhasil menebak kata rahasia.

Ketika ProcessAnswer kembali, penangan pesan NewGame memeriksa gotLetter untuk melihat apakah pemain menebak dengan benar. Jika tidak, ia akan memanggil ProcessWrongGuess, seperti yang ditunjukkan pada Gambar 8-28. Prosedur ini menyiarkan WrongGuess untuk memberi tahu sprite Hangman agar menampilkan kostum berikutnya, dan kemudian mengurangi jumlah tebakan yang tersisa sebanyak 1. Jika pengguna kehabisan tebakan, skrip akan mengungkapkan kata rahasia dan mengakhiri permainan. Jika tidak, ia akan menyiarkan pesan Update untuk menunjukkan berapa banyak percobaan yang tersisa bagi pemain.



Gambar 8-28: Prosedur ProcessWrongGuess

Jika huruf yang ditebak pemain benar, ProcessCorrectGuess yang ditunjukkan pada Gambar 8-29 harus dipanggil sebagai pengganti ProcessWrongGuess.


Gambar 8-29: Prosedur ProcessCorrectGuess

ProcessCorrectGuess menyiarkan Update untuk menunjukkan huruf yang ditebak pemain dengan benar. Kemudian memeriksa nilai qmarkCount. Jika qmarkCount adalah 0, pemain telah menebak semua huruf dengan benar, sehingga sprite Driver menampilkan kostum kemenangannya dan mengakhiri permainan.
coba 8-7 Program Hangman tidak memvalidasi input pengguna; Anda dapat memasukkan karakter non-alfabetis atau bahkan seluruh kata. Ubah program agar menolak input yang tidak valid dari pengguna.
Tutor Pecahan Untuk contoh terakhir kami, kami akan menyajikan permainan edukatif untuk mengajarkan pecahan. Antarmuka untuk permainan ini ditunjukkan pada Gambar 8-30. Pemain dapat memilih operasi (+, −, ×, atau ÷) dan mengklik tombol Baru untuk membuat soal baru. Ketika pemain memasukkan jawaban dan mengklik tombol Periksa, sprite Guru (gambar seorang wanita) memeriksa jawaban tersebut dan memberikan pesan umpan balik yang sesuai.


Gambar 8-30: Antarmuka pengguna untuk aplikasi Fraction Tutor

Aplikasi ini berisi enam sprite. Operasi memungkinkan pemain untuk memilih operasi matematika. Baca menunjukkan tombol entri jawaban, Baru menunjukkan tombol Baru, dan Periksa menunjukkan tombol Periksa. Sprite Guru memeriksa jawaban pemain, dan sprite tak terlihat bernama Angka memberi cap
angka yang sesuai dengan soal saat ini di Panggung. Ketika pemain mengklik sprite Baru (tombol Baru), ia menjalankan skrip yang ditunjukkan pada Gambar 8-31. Skrip tersebut menetapkan nilai acak antara 1 dan 9 untuk pembilang dan penyebut dari kedua operand, yang diwakili oleh empat variabel num1, den1, num2, dan den2. Kemudian, skrip tersebut menyiarkan pesan NewProblem untuk memberi tahu sprite Digit agar mencetak angka-angka ini di Stage.


Gambar 8-31: Skrip untuk sprite New


Pertama, pengguna diminta untuk memasukkan jawaban dalam bentuk pecahan (misalnya, 3/5 atau –7/8). Skrip kemudian mengekstrak pembilang dan penyebut dari string jawaban (yang dipisahkan oleh tanda pembagian) dan menetapkannya ke variabel num3 dan den3, masing-masing. Misalnya, jika pengguna
memasukkan –23/15, num3 akan diatur ke –23 dan den3 akan diatur ke 15. Setelah itu, skrip menyiarkan pesan GotAnswer untuk memberi tahu sprite Digit agar menampilkan jawaban pengguna di Stage. Ketika sprite Digit menerima pesan ini, ia menandai digit num3 dan den3 pada posisi yang tepat di Stage
dengan cara yang sama seperti menampilkan pembilang dan penyebut dari kedua operand. Anda dapat memeriksa file FractionTutor.sb2 untuk detailnya.

Setelah memasukkan jawaban, pengguna dapat mengklik tombol Periksa untuk melihat apakah jawabannya benar. Skrip untuk sprite Check menyiarkan pesan CheckAnswer untuk memberi tahu sprite lain tentang permintaan pengguna. Pesan ini ditangkap dan diproses oleh sprite Teacher, yang akan menjalankan skrip yang ditunjukkan pada Gambar 8-34.


Gambar 8-34: Skrip CheckAnswer

Kostum sprite Operation saat ini memberi tahu prosedur operasi mana (Tambah, Kurang, Kali, atau Bagi) yang akan dijalankan. Operasi tersebut mengambil num1, den1, num2, dan den2 sebagai input dan menetapkan nilai ansNum dan ansDen, yang masing-masing mewakili pembilang dan penyebut dari jawaban yang benar. Keempat prosedur tersebut ditunjukkan pada Gambar 8-35.

Setelah menemukan jawabannya, CheckAnswer perlu menyederhanakannya menjadi bentuk yang paling sederhana. Misalnya, 2/4 harus disederhanakan menjadi 1/2. Untuk melakukan reduksi ini, skrip pertama-tama mencari faktor persekutuan terbesar (FPB), juga dikenal sebagai faktor persekutuan terbesar, dari pembilang dan penyebut v. (Kita akan melihat prosedur ini sebentar lagi.)



Gambar 8-35: Prosedur Penambahan, Pengurangan, Perkalian, dan Pembagian pada sprite Guru

Setelah menemukan FPB, skrip membagi ansNum dan ansDen dengan nilai w tersebut dan memanggil GiveFeedback x untuk menampilkan apakah jawaban pengguna benar atau salah.

Sekarang mari kita lihat lebih detail prosedur ini, dimulai dengan empat prosedur operasi yang ditunjukkan pada Gambar 8-35. Prosedur ini menghitung hasil dari melakukan operasi dalam bentuk dan menyimpan hasilnya dalam dua variabel (ansNum dan ansDen) yang sesuai dengan pembilang dan penyebut jawaban. Sekarang mari kita beralih ke prosedur FindGCD, yang ditunjukkan pada Gambar 8-36.


Gambar 8-36: Prosedur FindGCD dari sprite Guru

Mari kita telusuri operasi FindGCD ketika num1 = –10 dan num2 = 6. Kita perlu menemukan bilangan bulat positif terbesar yang membagi num1 dan num2 tanpa sisa. Prosedur dimulai dengan menetapkan gcd, hasilnya, ke nilai absolut yang lebih kecil dari kedua angka tersebut, −6 dalam contoh kita. Kemudian, sebuah loop menguji angka 6, 5, 4, dan seterusnya, hingga num1 dan num2 habis dibagi oleh angka yang diperiksa. Inilah hasil yang kita inginkan. Dalam contoh ini, gcd akan ditetapkan menjadi 2 karena kedua angka (–10 dan 6) habis dibagi 2 tanpa sisa. Prosedur terakhir yang perlu diperiksa adalah prosedur GiveFeedback, yang membandingkan jawaban pengguna dengan jawaban yang benar dan menampilkan pesan yang sesuai, seperti yang ditunjukkan pada Gambar 8-37. Gambar tersebut juga menunjukkan beberapa contoh yang mendemonstrasikan berbagai kasus struktur if/else.


Gambar 8-37: Prosedur GiveFeedback dari sprite Guru

coba 8-8
Modifikasi program tutor pecahan untuk melacak jumlah jawaban yang benar dan salah.
Rancang skema untuk menghitung skor dan menampilkannya kepada pengguna.

Ringkasan
Pemrosesan string adalah keterampilan pemrograman yang penting. Dalam bab ini, Anda telah mempelajari cara mengakses karakter individual dari sebuah string untuk menggabungkannya, membandingkannya, menghapusnya, dan mengacaknya.

Kita mulai dengan melihat secara detail tipe data string dan bagaimana string disimpan sebagai urutan karakter. Kemudian kita menulis beberapa prosedur yang mendemonstrasikan teknik manipulasi string dasar. Setelah itu, kita menggunakan teknik ini untuk menulis beberapa aplikasi yang menarik dan praktis. Konsep yang dikembangkan dalam proyek-proyek ini dapat diterapkan di banyak bidang lain, dan saya sangat berharap konsep-konsep ini akan membantu Anda memikirkan proyek Anda sendiri.

Pada bab selanjutnya, Anda akan mempelajari tentang list dan cara menggunakannya untuk menyimpan
dan memanipulasi sejumlah nilai. Dengan struktur data baru ini, Anda akan memiliki semua alat yang Anda butuhkan untuk menulis program profesional di Scratch.

Soal
1. Tulis program yang meminta pengguna untuk memasukkan sebuah kata dan kemudian mengucapkan kata tersebut sebanyak N kali, di mana N adalah jumlah huruf dalam kata masukan.

2. Tulis program yang meminta pengguna untuk memasukkan sebuah kata. Program tersebut kemudian
menentukan jumlah kemunculan huruf a dalam kata masukan.

3. Tulis program yang membaca kata benda tunggal bahasa Inggris dari pengguna. Program tersebut kemudian menghasilkan bentuk jamak dari kata benda tersebut. (Petunjuk: Periksa huruf terakhir dan huruf kedua dari belakang dari kata masukan.) Untuk menjaga agar program tetap sederhana, pertimbangkan hanya aturan berikut: Jika kata tersebut berakhir dengan ch, x, atau s, tambahkan es untuk bentuk jamaknya, jika tidak, cukup tambahkan s.

4. Tulis program yang membaca satu karakter (antara a dan z) dari pengguna dan menampilkan posisi karakter tersebut dalam alfabet (a = 1, b = 2, c = 3, dan seterusnya). Huruf besar dan huruf kecil
harus diperlakukan sama. (Petunjuk: Definisikan variabel bernama alpha yang menyimpan huruf-huruf alfabet, seperti yang kita lakukan pada Gambar 8-9, dan kemudian gunakan loop untuk menemukan posisi karakter masukan di dalam variabel alpha.)

5. Tulis program yang meminta pengguna untuk memasukkan huruf alfabet dan kemudian menampilkan huruf yang mendahului huruf masukan tersebut. (Petunjuk: Gunakan teknik yang sama seperti pada soal sebelumnya.)

6. Tulis program yang membaca bilangan bulat positif dari pengguna kemudian menemukan dan menampilkan jumlah digitnya. Misalnya, jika pengguna memasukkan 3582, program harus menampilkan 18 (3 + 5 + 8 + 2).

7. Tulis program yang membaca sebuah kata dari pengguna dan kemudian menampilkan huruf-hurufnya secara terbalik menggunakan blok say.

8. Tulis program yang mendapatkan angka dari pengguna dan kemudian menyisipkan spasi di antara setiap pasangan angka. Misalnya, jika angka masukannya adalah 1234, string keluarannya seharusnya 1 2 3 4. (Petunjuk: Buat variabel keluaran dengan menggabungkan huruf-huruf individual dari angka masukan dengan spasi.)

9. Dalam soal ini, Anda akan membuat permainan yang memungkinkan pemain membandingkan pecahan.

Antarmuka pengguna ditampilkan di sebelah kanan. Saat tombol Baru diklik, permainan akan secara acak memilih dua pecahan untuk dibandingkan.

Pengguna memilih kurang dari (<), lebih besar dari (>), atau sama dengan (=) dengan mengklik tombol operator. Saat pengguna mengklik tombol Periksa, permainan akan memeriksa jawabannya dan memberikan umpan balik. Buka file CompareFractions.sb2 dan tambahkan skrip yang diperlukan untuk menyelesaikan permainan.