Tujuan Pembelajaran
Kompetensi yang ingin dicapai setelah menyelesaikan modul ini
Setelah menyelesaikan modul ini, mahasiswa diharapkan mampu:
- Memasang Free Pascal beserta IDE pada sistem operasi Windows, Linux, atau macOS.
- Menjalankan perintah kompilasi
fpcdari terminal maupun dari dalam IDE. - Menjelaskan alur kompilasi dari kode sumber
.pashingga berkas.exe. - Mengidentifikasi dan menuliskan tujuh bagian struktur program Pascal secara benar.
- Membedakan kedudukan blok
const,type, danvardi dalam program. - Menggunakan komentar dengan tiga gaya yang didukung Pascal.
- Menjelaskan perbedaan mendasar Free Pascal dengan Turbo Pascal, termasuk mode kompilasi.
- Menggunakan direktif kompilator sederhana seperti
{$mode tp}dan{$H+}. - Membaca dan menafsirkan pesan kesalahan kompilator untuk memperbaiki kode secara sistematis.
Capaian Pembelajaran
Indikator ketercapaian dan kaitan dengan modul selanjutnya
Capaian Pembelajaran Mata Kuliah
Mahasiswa mampu menyiapkan lingkungan pengembangan Pascal, menulis program dengan struktur yang benar, mengompilasi, menjalankan, dan memecahkan masalah kompilasi dasar secara mandiri.
Indikator Ketercapaian Modul
| Kode | Indikator | Bukti |
|---|---|---|
| IK-2.1 | Berhasil memasang dan menjalankan Free Pascal di perangkat sendiri | Latihan 1 |
| IK-2.2 | Mengompilasi dan menjalankan program dari terminal | Latihan 1 dan 2 |
| IK-2.3 | Menulis program dengan urutan blok deklarasi yang benar | Latihan 3 dan 4 |
| IK-2.4 | Membaca pesan kompilator dan mengidentifikasi sumber kesalahan | Latihan 5 |
| IK-2.5 | Menjelaskan perbedaan Free Pascal dan Turbo Pascal secara tepat | Jawaban latihan teori |
Kemampuan kompilasi dan penulisan struktur program menjadi prasyarat
mutlak untuk seluruh modul selanjutnya. Modul 3 akan mulai membahas
variabel dan tipe data secara mendalam, memanfaatkan blok
var yang baru saja kita kuasai di sini.
Materi Teori
Persiapan lingkungan, alur kompilasi, dan anatomi program Pascal
3.1 Mengapa Free Pascal
Free Pascal Compiler (FPC) adalah kompiler Pascal modern yang bersifat open source dan tersedia gratis. Proyek ini dimulai pada 1993 oleh Florian Klämpfl dan kini mendukung berbagai platform: Windows, Linux, macOS, FreeBSD, dan beberapa arsitektur prosesor. Terdapat beberapa alasan FPC menjadi pilihan utama untuk pembelajaran:
- Gratis dan terbuka. Tidak ada batasan lisensi untuk penggunaan pendidikan maupun komersial.
- Lintas platform. Kode yang sama dapat dikompilasi di Windows, Linux, dan macOS.
- Kompatibel dengan Turbo Pascal. Mode
{$mode tp}memungkinkan menjalankan kode lama hampir tanpa perubahan. - Mendukung Object Pascal penuh. Penting untuk fase lanjutan pada Modul 36 hingga 50.
- Aktif dikembangkan. Rilis stabil dikeluarkan secara berkala dan komunitasnya masih hidup.
3.2 Pilihan Editor dan IDE
Anda dapat menulis Pascal dengan beberapa pilihan lingkungan kerja. Tidak ada yang paling benar, semuanya bergantung pada kenyamanan dan kebutuhan Anda.
| Pilihan | Kelebihan | Kekurangan |
|---|---|---|
| FP IDE (fp.exe / fp) | Sudah menyatu dengan instalasi FPC, ringan, tampilan mirip Turbo Pascal | Antarmuka berbasis teks, terasa kuno bagi pemula |
| Lazarus IDE | IDE grafis lengkap dengan form designer, debugger, dan manajemen proyek | Instalasi lebih besar, agak berat untuk komputer tua |
| Visual Studio Code | Ringan, kaya ekstensi, mendukung banyak bahasa sekaligus | Perlu konfigurasi ekstensi Pascal dan task build secara manual |
| Notepad++ / Geany / Kate | Ringan, cepat, penyorotan sintaks dasar sudah tersedia | Tidak ada fitur debugger atau autocomplete lanjutan |
Untuk mengikuti modul ini, kami menyarankan dua opsi. Bila Anda menginginkan pengalaman grafis, pasang Lazarus — instalasinya otomatis menyertakan FPC. Bila Anda lebih suka pendekatan minimalis dan memahami proses kompilasi dari terminal, pasang FPC saja dan gunakan editor teks favorit Anda.
3.3 Instalasi Free Pascal di Windows
Prosedur berikut berlaku untuk Windows 10 dan Windows 11. Estimasi waktu pemasangan sekitar 5 hingga 10 menit.
-
Unduh pemasang FPC.
Buka freepascal.org/download.html,
pilih platform Windows, lalu unduh berkas
fpc-x.y.z.i386-win32.exeatau versi 64-bitfpc-x.y.z.x86_64-win64.exe. Untuk komputer modern, pilih versi 64-bit. - Jalankan pemasang. Klik dua kali berkas yang telah diunduh. Bila muncul peringatan User Account Control, pilih Yes. Pilih bahasa instalasi lalu klik OK.
-
Ikuti wizard instalasi.
Terima lisensi, pilih folder instalasi (default
C:\FPC\x.y.zsudah sesuai), dan pilih Full installation agar IDE dan dokumentasi tersedia. - Selesaikan instalasi. Klik Install dan tunggu hingga proses selesai. Pastikan opsi Add FPC to PATH tercentang bila tersedia.
-
Verifikasi dari Command Prompt.
Buka Command Prompt baru, lalu jalankan:
Bila terpasang benar, akan muncul nomor versi, misalnyaCommand PromptShell
fpc -iV3.2.2.
3.4 Instalasi Free Pascal di Linux
Di sebagian besar distribusi Linux, FPC tersedia di repositori resmi. Buka terminal dan jalankan perintah sesuai distribusi Anda.
sudo apt update
sudo apt install fpc
sudo dnf install fpc
sudo pacman -S fpc
Setelah pemasangan selesai, verifikasi dengan perintah
fpc -iV. Untuk pengalaman grafis, Anda
dapat menambahkan Lazarus melalui repositori distribusi atau
mengunduh versi resmi dari lazarus-ide.org.
3.5 Instalasi Free Pascal di macOS
Pada macOS, ada dua jalur utama. Pertama, melalui paket resmi
.dmg dari situs Free Pascal. Kedua,
melalui Homebrew bagi pengguna yang sudah terbiasa dengan
manajer paket tersebut.
brew install fpc
Pada Mac dengan chip M1, M2, atau M3, paket Homebrew FPC untuk arsitektur ARM sudah tersedia. Bila Anda mengunduh paket resmi dari situs Free Pascal, pastikan memilih versi yang sesuai dengan arsitektur prosesor Anda.
3.6 Alur Kompilasi Program Pascal
Memahami apa yang terjadi ketika Anda menekan tombol kompilasi akan sangat membantu ketika muncul kesalahan. Secara garis besar, kompiler Pascal menerjemahkan kode sumber menjadi program yang dapat dieksekusi melalui beberapa tahap.
flowchart LR
A["Kode Sumber
program.pas"] --> B["Preprocessing
direktif kompilator"]
B --> C["Analisis Leksikal
tokenisasi"]
C --> D["Analisis Sintaks
pohon parsing"]
D --> E["Analisis Semantik
cek tipe dan scope"]
E --> F["Pembangkitan Kode
assembly"]
F --> G["Assembler"]
G --> H["Linker
menyatukan unit"]
H --> I["Program
program.exe"]
Gambar 3.1 - Alur kompilasi dari kode sumber hingga berkas eksekusi
Pada praktiknya, seluruh tahap di atas dipicu oleh satu perintah
fpc nama_berkas.pas. Free Pascal juga
menghasilkan berkas antara seperti .o
(object) dan .ppu (unit), namun
untuk keperluan pembelajaran, Anda cukup fokus pada berkas
.pas sebagai input dan
.exe (Windows) atau berkas tanpa
ekstensi (Linux/macOS) sebagai output.
3.7 Struktur Lengkap Program Pascal
Program Pascal memiliki struktur bertingkat yang sangat ketat. Secara lengkap, ada tujuh bagian yang perlu Anda ketahui, meskipun sebagian di antaranya bersifat opsional.
program NamaProgram; { 1. Judul program }
uses NamaUnit1, NamaUnit2; { 2. Klausa uses }
const { 3. Blok konstanta }
KONSTANTA_1 = nilai;
KONSTANTA_2 = nilai;
type { 4. Blok tipe bentukan }
NamaTipe = definisi;
var { 5. Blok variabel global }
variabel_1 : tipe;
variabel_2 : tipe;
procedure NamaProsedur; { 6. Subprogram (opsional) }
begin
{ ... }
end;
begin { 7. Blok pernyataan utama }
pernyataan;
pernyataan;
end.
Berikut penjelasan setiap bagian.
| No | Bagian | Wajib | Keterangan |
|---|---|---|---|
| 1 | Judul program | Tidak |
Diawali kata kunci program, diikuti
nama program dan titik koma. Diabaikan oleh sebagian kompiler,
tetapi berguna sebagai dokumentasi.
|
| 2 | Klausa uses |
Tidak |
Mendaftarkan unit yang akan dipakai. Unit standar seperti
crt perlu didaftarkan bila Anda
ingin memakai fungsi seperti clrscr.
|
| 3 | Blok const |
Tidak | Mendefinisikan nilai tetap yang tidak dapat diubah selama program berjalan. |
| 4 | Blok type |
Tidak | Mendefinisikan tipe bentukan seperti record, enumerasi, atau subrange. Dibahas lengkap pada Modul 20 hingga 22. |
| 5 | Blok var |
Tidak | Mendeklarasikan variabel. Bila program tidak memakai variabel, blok ini boleh dihilangkan. |
| 6 | Subprogram | Tidak | Deklarasi prosedur dan fungsi. Dibahas mulai Modul 11. |
| 7 | Blok utama | Ya |
Diawali begin dan diakhiri
end. dengan titik. Wajib ada
di setiap program.
|
Blok const harus mendahului
type, yang harus mendahului
var. Menukar urutan ini akan
menyebabkan kesalahan kompilasi. Ini adalah salah satu kesalahan
paling umum pada mahasiswa baru.
3.8 Aturan Penulisan Sintaks
a. Titik koma dan titik
Pascal membedakan dengan jelas tiga jenis pemisah:
- Titik koma (
;) memisahkan pernyataan di dalam blok. - Titik dua (
:) memisahkan nama variabel dari tipe datanya di blok deklarasi. - Titik (
.) hanya muncul sekali, yaitu setelahendterakhir program.
b. Titik koma sebelum end
Secara aturan, pernyataan terakhir sebelum end
boleh tanpa titik koma. Namun, banyak programmer tetap menuliskannya
untuk mencegah kesalahan saat menyisipkan pernyataan baru di kemudian hari.
Kami menyarankan kebiasaan menuliskan titik koma di setiap akhir pernyataan.
c. Pemisah antar pernyataan dan antar blok
Perhatikan bahwa setelah end yang menutup
blok begin...end di dalam program,
diikuti titik koma. Namun setelah end
yang menutup program secara keseluruhan, diikuti titik.
3.9 Komentar dalam Pascal
Pascal mendukung tiga gaya komentar. Ketiganya berfungsi sama, yaitu diabaikan oleh kompiler.
program TigaGayaKomentar;
{ Ini komentar gaya kurung kurawal.
Dapat menempati beberapa baris sekaligus. }
(* Ini komentar gaya kurung bintang.
Sering dipakai untuk memblok kode sementara. *)
// Ini komentar gaya garis miring ganda.
// Hanya berlaku sampai akhir baris.
begin
writeln('Program ini mendemonstrasikan tiga gaya komentar.');
end.
| Gaya | Dukungan | Keterangan |
|---|---|---|
{ ... } |
Semua Pascal | Gaya asli, dapat multi-baris |
(* ... *) |
Semua Pascal | Berguna bila kode Anda mengandung kurawal di dalam string |
// ... |
FPC, Delphi, Turbo Pascal 7+ | Bergaya C, hanya satu baris |
Komentar gaya { ... } tidak
dapat disarangkan. Bila Anda menulis
{ komentar { dalam } }, kompiler
akan menganggap komentar berakhir pada kurawal tutup pertama,
dan sisa teks dianggap sebagai kode. Untuk menonaktifkan blok
yang mengandung komentar, gunakan (* ... *).
3.10 Direktif Kompilator
Direktif kompilator adalah perintah khusus yang disampaikan kepada
kompiler, bukan kepada program yang dihasilkan. Sintaksnya sama dengan
komentar, yaitu di dalam { ... }, tetapi
diawali karakter dolar $.
| Direktif | Fungsi | Nilai Umum |
|---|---|---|
{$mode tp} |
Mengaktifkan mode kompatibilitas Turbo Pascal | — |
{$mode delphi} |
Mengaktifkan mode kompatibilitas Delphi | — |
{$mode objfpc} |
Mode default Free Pascal dengan Object Pascal | — |
{$H+} |
Mengaktifkan string dinamis (ansistring) sebagai default | + aktif, - nonaktif |
{$R+} |
Pemeriksaan rentang nilai saat runtime | + aktif, - nonaktif |
{$I-} |
Mematikan pemeriksaan kesalahan input/output otomatis | + aktif, - nonaktif |
Direktif ditulis pada baris tersendiri, biasanya di bagian atas program sebelum deklarasi. Contoh penggunaannya:
{$mode tp}
{$R+}
program ContohDirektif;
var
nilai: integer;
begin
write('Masukkan nilai: ');
readln(nilai);
writeln('Nilai yang Anda masukkan: ', nilai);
end.
3.11 Perbedaan Free Pascal dan Turbo Pascal
Pemahaman terhadap perbedaan ini penting ketika Anda menemukan referensi atau kode lama dari era Turbo Pascal.
| Aspek | Turbo Pascal | Free Pascal |
|---|---|---|
| Pengembang | Borland International | Komunitas open source |
| Tahun rilis awal | 1983 | 1993 |
| Arsitektur | 16-bit, MS-DOS | 32-bit dan 64-bit, multi-platform |
| Ukuran memori program | Terbatas 640 KB | Memanfaatkan memori sistem secara penuh |
| Tipe string default | ShortString (maks 255 karakter) | AnsiString (dinamis) |
Sintaks case |
Dengan else |
Dengan else (sama) |
| Object Pascal | Terbatas sejak TP 5.5 | Penuh, termasuk class, interface, generic |
| IDE | Terintegrasi, berbasis teks biru | FP IDE, Lazarus, atau editor eksternal |
| Ketersediaan | Sudah tidak dijual lagi | Gratis dan aktif dikembangkan |
3.12 Membaca Pesan Kesalahan Kompilator
Kompiler Free Pascal melaporkan kesalahan dalam format yang teratur:
nama_berkas.pas(baris, kolom) Error: pesan kesalahan nama_berkas.pas(baris, kolom) Warning: pesan peringatan nama_berkas.pas(baris, kolom) Fatal: kesalahan yang menghentikan kompilasi nama_berkas.pas(baris, kolom) Note: catatan informasi
Empat tingkat keparahan yang perlu Anda ketahui:
- Note — informasi saja, tidak menghentikan kompilasi.
- Warning — ada masalah yang sebaiknya diperbaiki, tetapi program masih dapat dikompilasi.
- Error — ada kesalahan yang mencegah kompilasi. Program tidak dihasilkan.
- Fatal — kesalahan serius yang menghentikan proses lebih awal, sering kali karena berkas tidak ditemukan.
Berikut beberapa pesan kesalahan yang paling sering muncul.
| Pesan Kompilator | Penyebab Umum | Perbaikan |
|---|---|---|
| Fatal: Can't find unit X | Unit yang didaftarkan di uses tidak ada |
Periksa ejaan nama unit atau pasang paket yang diperlukan |
| Error: Identifier not found "X" | Variabel atau fungsi belum dideklarasikan | Tambahkan deklarasi di blok var |
| Error: Illegal character | Karakter tidak sah, sering karena karakter aneh dari copy-paste | Hapus dan ketik ulang baris bermasalah |
| Error: ; expected but X found | Lupa titik koma pada baris sebelumnya | Tambahkan titik koma di akhir pernyataan sebelumnya |
| Error: Incompatible types | Menugaskan tipe yang tidak kompatibel | Konversi tipe atau gunakan variabel dengan tipe yang sesuai |
| Fatal: Syntax error, "." expected but ";" found | Menuliskan end; sebagai penutup program |
Ganti dengan end. |
| Warning: Variable "X" does not seem to be initialized | Variabel dipakai sebelum diberi nilai | Berikan nilai awal sebelum dipakai |
Kompiler Pascal kadang menunjuk baris setelah kesalahan sebenarnya. Bila pesan menunjuk baris ke-12, periksa juga baris ke-11 dan ke-10. Sering kali penyebabnya ada di baris sebelumnya yang lupa diberi titik koma.
Algoritma dan Flowchart
Alur kompilasi dan siklus pengembangan program
Flowchart pada bagian ini menggambarkan alur kerja yang akan Anda lakukan berulang-ulang sepanjang kursus: menulis kode, mengompilasi, memperbaiki kesalahan, menjalankan, dan menguji.
4.1 Flowchart Siklus Menulis-Kompilasi-Jalankan
flowchart TD
A(["Mulai"]) --> B["Tulis atau ubah
kode sumber .pas"]
B --> C["Jalankan perintah
fpc nama_berkas.pas"]
C --> D{"Kompilasi
berhasil?"}
D -- "Tidak" --> E["Baca pesan kesalahan
di terminal"]
E --> F["Identifikasi baris
dan jenis kesalahan"]
F --> G["Perbaiki kode sumber"]
G --> B
D -- "Ya" --> H["Jalankan
program hasil kompilasi"]
H --> I{"Hasil sesuai
yang diharapkan?"}
I -- "Tidak" --> J["Analisis logika
dan data uji"]
J --> B
I -- "Ya" --> K(["Selesai"])
Gambar 4.1 - Siklus pengembangan program Pascal dari penulisan hingga pengujian
4.2 Flowchart Alur Kompilasi Berkas .pas Menjadi .exe
Diagram berikut memperlihatkan secara lebih teknis apa yang terjadi di dalam kompiler FPC ketika Anda menjalankannya.
flowchart TD
A(["Perintah fpc dijalankan"]) --> B["Baca berkas sumber .pas"]
B --> C{"Berkas
ditemukan?"}
C -- "Tidak" --> X["Fatal: can't open file"]
X --> Z(["Selesai dengan kesalahan"])
C -- "Ya" --> D["Proses direktif kompilator"]
D --> E["Analisis leksikal dan sintaks"]
E --> F{"Ada kesalahan
sintaks?"}
F -- "Ya" --> Y["Tampilkan pesan error"]
Y --> Z
F -- "Tidak" --> G["Analisis semantik dan tipe"]
G --> H{"Ada kesalahan
tipe atau scope?"}
H -- "Ya" --> Y
H -- "Tidak" --> I["Bangkitkan kode objek .o"]
I --> J["Link dengan unit yang dipakai"]
J --> K["Hasilkan berkas .exe"]
K --> L(["Selesai dengan sukses"])
Gambar 4.2 - Alur internal kompilasi Free Pascal
Pseudocode
Representasi algoritmik dari struktur dan alur kompilasi
Karena modul ini lebih menekankan aspek persiapan lingkungan dan struktur, pseudocode yang disajikan berbentuk algoritma prosedural yang menggambarkan langkah-langkah instalasi dan kompilasi.
5.1 Pseudocode Memasang dan Memverifikasi Free Pascal
PROGRAM VerifikasiInstalasiFPC
{ Memastikan Free Pascal terpasang dan dapat dipanggil dari terminal }
DEKLARASI
versiFPC : string
ALGORITMA
write("Membuka terminal atau Command Prompt...")
write("Menjalankan perintah: fpc -iV")
read(versiFPC)
jika versiFPC kosong maka
write("Free Pascal belum terpasang atau tidak ada di PATH.")
write("Periksa kembali langkah instalasi.")
selain itu
write("Free Pascal terpasang dengan versi: ", versiFPC)
write("Instalasi berhasil.")
akhir jika
END
5.2 Pseudocode Mengompilasi dan Menjalankan Program
PROGRAM KompilasiDanJalankan
{ Alur mengompilasi berkas .pas dan menjalankan hasilnya }
DEKLARASI
namaBerkas : string
berhasil : boolean
ALGORITMA
write("Nama berkas sumber (tanpa ekstensi): ")
read(namaBerkas)
write("Menjalankan: fpc ", namaBerkas, ".pas")
berhasil <- jalankanKompilasi(namaBerkas)
jika berhasil = false maka
write("Kompilasi gagal. Baca pesan kesalahan di layar.")
write("Perbaiki kode sumber lalu ulangi.")
selain itu
write("Kompilasi berhasil. Menjalankan program...")
jalankanProgram(namaBerkas)
akhir jika
END
5.3 Pseudocode Struktur Program Sederhana
PROGRAM StrukturProgramContoh
{ Mendemonstrasikan urutan blok deklarasi dan pernyataan }
KONSTANTA
BATAS_MAKS = 100
DEKLARASI
nilaiAktual : integer
namaProgram : string
ALGORITMA
namaProgram <- "StrukturProgramContoh"
write("Nama program: ", namaProgram)
nilaiAktual <- BATAS_MAKS
write("Nilai batas maksimum: ", nilaiAktual)
END
Contoh Kode Pascal Lengkap
Empat program untuk menguji struktur dan fitur Pascal
6.1 Program Minimal: Struktur Paling Sederhana
Program berikut adalah bentuk paling minimal dari program Pascal yang sah. Baris judul dan deklarasi dihilangkan, hanya menyisakan blok utama.
begin
writeln('Program Pascal paling minimal.');
end.
Program ini tidak memiliki judul, tidak memakai variabel, dan tidak menerima masukan. Namun, program ini sudah lengkap dan dapat dikompilasi serta dijalankan.
6.2 Program dengan Struktur Lengkap
Program berikut mendemonstrasikan semua bagian struktur Pascal
kecuali subprogram: judul, klausa uses,
blok const, blok
type, blok var,
dan blok utama.
program StrukturLengkap;
{ Mendemonstrasikan struktur lengkap program Pascal
tanpa subprogram }
uses
crt;
const
NAMA_APLIKASI = 'Demo Struktur Pascal';
VERSI = '1.0.0';
TAHUN = 2025;
type
Suhu = -100..100;
var
namaPengguna: string;
umur: integer;
suhuRuang: Suhu;
sudahLogin: boolean;
begin
clrscr;
writeln('==========================================');
writeln(NAMA_APLIKASI);
writeln('Versi ', VERSI, ' - Tahun ', TAHUN);
writeln('==========================================');
writeln;
write('Siapa nama Anda? ');
readln(namaPengguna);
write('Berapa umur Anda? ');
readln(umur);
write('Suhu ruangan (Celsius, -100 s.d. 100)? ');
readln(suhuRuang);
sudahLogin := true;
writeln;
writeln('==========================================');
writeln('Ringkasan Data');
writeln('==========================================');
writeln('Nama : ', namaPengguna);
writeln('Umur : ', umur, ' tahun');
writeln('Suhu ruang : ', suhuRuang, ' derajat Celsius');
writeln('Status : ', sudahLogin);
writeln('==========================================');
end.
Contoh keluaran:
========================================== Demo Struktur Pascal Versi 1.0.0 - Tahun 2025 ========================================== Siapa nama Anda? Andi Berapa umur Anda? 20 Suhu ruangan (Celsius, -100 s.d. 100)? 24 ========================================== Ringkasan Data ========================================== Nama : Andi Umur : 20 tahun Suhu ruang : 24 derajat Celsius Status : TRUE ==========================================
6.3 Program dengan Direktif Kompilator Mode Turbo Pascal
Program ini menambahkan direktif {$mode tp}
di baris paling atas agar perilaku kompilasi menyerupai Turbo Pascal.
Perhatikan bahwa string maksimal 255 karakter pada mode ini.
{$mode tp}
{$R+}
program ModeTurboPascal;
{ Mendemonstrasikan penggunaan direktif kompilator }
const
MAKS_NILAI = 100;
MIN_NILAI = 0;
var
namaSiswa: string[30];
nilai: integer;
begin
write('Nama siswa (maks 30 karakter): ');
readln(namaSiswa);
write('Nilai ujian (0 sampai 100): ');
readln(nilai);
writeln;
writeln('Nama : ', namaSiswa);
writeln('Nilai : ', nilai);
if (nilai >= MIN_NILAI) and (nilai <= MAKS_NILAI) then
writeln('Status: Nilai valid')
else
writeln('Status: Nilai di luar rentang yang diizinkan');
end.
Direktif {$R+} mengaktifkan pemeriksaan
rentang saat runtime. Bila pengguna memasukkan nilai di luar rentang
yang ditentukan untuk variabel subrange, program akan menghentikan
eksekusi dengan pesan kesalahan yang jelas. Ini sangat berguna
untuk mendeteksi bug lebih awal.
6.4 Program dengan Subprogram Sederhana
Sebagai pratinjau Modul 11, program berikut menambahkan satu prosedur sederhana. Perhatikan bahwa prosedur harus dideklarasikan sebelum blok utama.
program DenganProsedur;
{ Pratinjau subprogram: prosedur sederhana }
const
GARIS = '==========================================';
var
nama: string;
procedure TampilkanHeader;
begin
writeln(GARIS);
writeln(' Program dengan Subprogram Sederhana');
writeln(GARIS);
end;
procedure SapaPengguna(namaSapa: string);
begin
writeln('Selamat datang, ', namaSapa, '!');
end;
begin
TampilkanHeader;
write('Siapa nama Anda? ');
readln(nama);
SapaPengguna(nama);
writeln('Prosedur selesai dijalankan.');
writeln(GARIS);
end.
Program ini menunjukkan tiga hal penting: (1) subprogram
dideklarasikan setelah blok var dan
sebelum blok utama, (2) prosedur dapat dipanggil dari blok utama,
(3) konstanta yang dideklarasikan di tingkat program dapat diakses
dari dalam prosedur.
Penjelasan Kode Baris per Baris
Membedah program StrukturLengkap dan ModeTurboPascal secara rinci
7.1 Program StrukturLengkap
| Baris | Kode | Penjelasan |
|---|---|---|
| 1 | program StrukturLengkap; |
Judul program. Nama program bebas, namun sebaiknya sama dengan nama berkas agar tidak membingungkan. Diakhiri titik koma. |
| 2-3 | { Mendemonstrasikan struktur ... } |
Komentar multi-baris yang menjelaskan tujuan program. Komentar semacam ini sangat membantu ketika program dibaca orang lain atau dibaca kembali setelah beberapa bulan. |
| 5-6 | uses |
Klausa uses mendaftarkan unit
crt, yang menyediakan prosedur
seperti clrscr untuk membersihkan
layar. Bila tidak memakainya, unit ini dapat dihilangkan.
Perhatikan bahwa unit diakhiri titik koma.
|
| 8 | const |
Pembuka blok konstanta. Semua konstanta yang didefinisikan dalam blok ini bernilai tetap selama program berjalan dan tidak dapat diubah. |
| 9 | NAMA_APLIKASI = 'Demo Struktur Pascal'; |
Konstanta string. Konvensi penamaan konstanta di kursus ini
memakai huruf kapital semua dengan pemisah garis bawah.
Tanda = di sini bukan penugasan,
melainkan pemberian nilai awal pada konstanta.
|
| 10-11 | VERSI = '1.0.0'; |
Dua konstanta lagi, satu bertipe string dan satu bertipe integer. Tipe data ditentukan otomatis oleh kompiler berdasarkan nilai yang diberikan. |
| 13 | type |
Pembuka blok tipe bentukan. Di sini kita mendefinisikan
tipe buatan sendiri. Blok ini wajib berada setelah
const dan sebelum
var.
|
| 14 | Suhu = -100..100; |
Mendefinisikan tipe Suhu sebagai
subrange dari -100 hingga 100. Tipe ini membatasi nilai
yang sah. Bila program mencoba menyimpan nilai di luar
rentang, akan muncul kesalahan (dengan {$R+}).
|
| 16 | var |
Pembuka blok variabel. Semua variabel yang akan dipakai harus terdaftar di sini sebelum blok utama. |
| 17-20 | namaPengguna: string; |
Empat deklarasi variabel dengan empat tipe berbeda.
Perhatikan bahwa suhuRuang
memakai tipe Suhu yang baru
didefinisikan di blok type.
Setiap deklarasi diakhiri titik koma.
|
| 22 | begin |
Pembuka blok utama program. Semua pernyataan yang
akan dieksekusi berada di antara baris ini dan
end. di baris terakhir.
|
| 23 | clrscr; |
Prosedur dari unit crt untuk
membersihkan layar. Tanpa unit crt
di klausa uses, baris ini akan
menghasilkan kesalahan kompilasi "Identifier not found".
|
| 25-27 | writeln('====='); |
Menampilkan tiga baris header. Perhatikan baris ketiga
mencampur teks literal dengan konstanta
VERSI dan
TAHUN yang dipisahkan koma.
Argumen kedua dan seterusnya tidak perlu diapit tanda petik
karena mereka adalah ekspresi, bukan teks.
|
| 30-32 | write('Siapa nama Anda? '); |
Pola standar prompt then read. Prosedur
write menampilkan pertanyaan
tanpa baris baru, sehingga pengguna dapat mengetik di
baris yang sama. readln
menunggu masukan dan menyimpannya ke variabel.
|
| 33-36 | write('Berapa umur Anda? '); |
Pola yang sama diulang untuk umur
dan suhuRuang.
Perhatikan bahwa kompiler akan mencoba mengkonversi masukan
teks menjadi tipe yang sesuai; bila pengguna mengetik
"dua puluh" untuk umur,
akan muncul kesalahan saat runtime.
|
| 38 | sudahLogin := true; |
Penugasan nilai boolean. Operator :=
adalah penugasan, sedangkan =
adalah pembanding. Konstanta boolean true
dan false adalah reserved word.
|
| 40-48 | writeln; |
Blok keluaran ringkasan. Perhatikan
writeln; tanpa argumen
menghasilkan satu baris kosong, sehingga ringkasan
terpisah rapi dari bagian masukan.
|
| 49 | end. |
Menutup blok utama dan mengakhiri program. Titik setelah
end bersifat wajib dan hanya
boleh muncul sekali di seluruh program.
|
7.2 Program ModeTurboPascal
| Baris | Kode | Penjelasan |
|---|---|---|
| 1 | {$mode tp} |
Direktif kompilator. Harus berada di baris paling atas
sebelum kata kunci program.
Mengaktifkan mode kompatibilitas Turbo Pascal, sehingga
tipe string default menjadi ShortString (maksimal 255
karakter) dan beberapa perilaku lain menyerupai TP.
|
| 2 | {$R+} |
Direktif untuk mengaktifkan pemeriksaan rentang saat runtime. Bila variabel subrange diberi nilai di luar rentangnya, program akan berhenti dengan pesan kesalahan yang jelas, bukan diam-diam menghasilkan nilai yang salah. |
| 4 | program ModeTurboPascal; |
Judul program. Meskipun opsional, penulisan judul membantu ketika program dibaca oleh orang lain. |
| 6-7 | { Mendemonstrasikan ... } |
Komentar yang menjelaskan tujuan program. |
| 9-11 | const |
Dua konstanta integer. Dengan adanya
{$R+}, rentang ini dapat
dipakai untuk memvalidasi masukan pengguna.
|
| 13-14 | var |
Deklarasi variabel string dengan panjang maksimal 30
karakter. Notasi string[30]
valid di semua mode Pascal dan berguna untuk membatasi
penggunaan memori. Pada mode tp,
ini adalah bentuk deklarasi string yang paling umum.
|
| 15 | nilai: integer; |
Variabel integer untuk menyimpan nilai ujian. |
| 20-24 | if (nilai >= MIN_NILAI) and |
Struktur percabangan. Meskipun percabangan dibahas
secara mendalam pada Modul 6, kode ini menunjukkan
bagaimana operator pembanding >=
dan <= dipadukan dengan
operator logika and.
Tanda kurung di sekeliling setiap perbandingan
sangat dianjurkan untuk kejelasan.
|
7.3 Jejak Eksekusi Program StrukturLengkap
Tabel berikut menunjukkan jejak eksekusi program
StrukturLengkap dengan masukan
nama = Andi, umur = 20,
suhu = 24.
| Baris | Pernyataan | Efek |
|---|---|---|
| 23 | clrscr | Layar dibersihkan |
| 25-27 | writeln header | Header tampil: 3 baris |
| 30-31 | prompt dan readln nama | namaPengguna = "Andi" |
| 33-34 | prompt dan readln umur | umur = 20 |
| 36-37 | prompt dan readln suhu | suhuRuang = 24 |
| 38 | sudahLogin := true | sudahLogin = TRUE |
| 40-48 | writeln ringkasan | Ringkasan tampil di layar |
| 49 | end. | Program selesai |
Perhatikan bahwa dalam program yang benar, urutan blok adalah
program →
uses →
const →
type →
var →
(subprogram) →
begin...end..
Urutan ini tidak boleh diubah. Bila ada satu saja yang keliru
urutannya, kompiler akan menolak.
Latihan Soal
Lima soal dengan tingkat kesulitan bertingkat
Instalasi dan Kompilasi Pertama
Mudah
Pasang Free Pascal di perangkat Anda. Setelah selesai, buat program
dengan nama berkas uji_instalasi.pas
yang menampilkan pesan berikut:
Uji Instalasi Free Pascal Versi 1.0 Hari ini saya belajar mengompilasi program Pascal.
Langkah yang harus Anda lakukan:
- Buka terminal atau Command Prompt.
- Pindah ke direktori tempat berkas
uji_instalasi.pasdisimpan. - Jalankan perintah
fpc uji_instalasi.pas. - Perhatikan pesan yang muncul. Apakah kompilasi berhasil?
- Jalankan program hasil kompilasi.
- Catat perintah yang Anda gunakan di setiap langkah.
Pertanyaan tambahan: berapa baris pesan yang dihasilkan kompiler ketika kompilasi berhasil? Berapa baris ketika gagal?
Mengenal Pesan Kesalahan Kompilator
Mudah
Salin program berikut ke berkas error_latihan.pas,
kemudian kompilasi. Amati pesan kesalahan yang muncul,
lalu perbaiki satu per satu.
program ErrorLatihan
const
NAMA = 'Latihan'
var
angka: integer
begin
angka := 10
writeln('Nama: ', NAMA)
writeln('Angka: ', angka)
end;
Ketentuan:
- Catat setiap pesan kesalahan yang muncul, lengkap dengan nomor baris dan jenisnya (Error, Warning, Fatal).
- Perbaiki satu kesalahan pada satu waktu, kompilasi ulang setelah setiap perbaikan.
- Berapa jumlah kesalahan yang berhasil Anda identifikasi?
Pertanyaan analisis: mengapa kompiler berhenti pada kesalahan pertama dan tidak melaporkan seluruh kesalahan sekaligus?
Program Profil Mahasiswa
Sedang
Buat program dengan nama profil_mahasiswa.pas
yang meminta masukan nama, NIM, program studi, dan angkatan,
kemudian menampilkannya dalam format kartu profil.
Ketentuan:
- Gunakan blok
constuntuk menyimpan nama universitas dan nama fakultas. - Gunakan blok
varuntuk empat masukan pengguna. - Gunakan blok
typeuntuk mendefinisikan tipe subrangeTahunAngkatan = 2000..2100. - Tampilkan garis pemisah yang rapi menggunakan konstanta.
- Setiap masukan diberi prompt yang jelas sebelum
readln.
Contoh keluaran yang diharapkan:
========================================== KARTU PROFIL MAHASISWA Universitas Nusantara Fakultas Ilmu Komputer ========================================== Nama : Budi Santoso NIM : 2025010001 Program Studi: Teknik Informatika Angkatan : 2025 ==========================================
Demonstrasi Direktif Kompilator
Sedang
Buat dua versi program yang sama, satu dengan
{$mode tp} di baris paling atas
dan satu tanpa direktif tersebut. Kedua program membaca
nama pengguna dan menampilkannya.
Ketentuan:
- Beri nama berkas
tanpa_mode.pasdandengan_mode.pas. - Kompilasi keduanya dan bandingkan ukuran berkas hasil kompilasi.
- Catat perbedaan yang Anda amati dari segi pesan kompilasi dan perilaku program.
Pertanyaan analisis: berdasarkan dokumentasi
Free Pascal, apa perbedaan perilaku yang paling nyata antara
mode Turbo Pascal dan mode objfpc untuk tipe data
string?
Deteksi Kesalahan Struktur
SulitProgram berikut memiliki enam kesalahan baik sintaks maupun struktur. Temukan semuanya, lalu tuliskan versi yang benar.
var
total: integer;
nama: string;
program Kacau;
const
PAJAK = 0.11
type
Nilai = 0..100;
begin
write('Nama: ')
readln(nama);
write('Total: ');
readln(total);
writeln('Nama: ', nama);
writeln('Total: ', total);
end.
Ketentuan:
- Sebutkan nomor baris setiap kesalahan yang Anda temukan.
- Jelaskan jenis kesalahan: apakah sintaks, struktur, atau logika.
- Tuliskan versi perbaikan lengkap yang dapat dikompilasi.
Pertanyaan analisis: setelah kesalahan diperbaiki,
program tetap menampilkan peringatan bahwa konstanta
PAJAK tidak dipakai. Apa yang sebaiknya
Anda lakukan: menghapus konstanta tersebut, atau menambahkannya
ke dalam perhitungan?
Studi Kasus
Kartu Pendaftaran Pelatihan Pemrograman
9.1 Deskripsi Masalah
Sebuah lembaga kursus pemrograman menerima pendaftaran peserta melalui program sederhana. Setiap peserta diminta memasukkan data berikut: nama lengkap, usia, asal kota, dan pilihan bahasa pemrograman. Program akan menampilkan kembali data tersebut dalam bentuk kartu peserta, lengkap dengan nomor urut otomatis.
Studi kasus ini melatih penggunaan lengkap struktur program: konstanta, tipe bentukan, variabel, dan blok utama dengan masukan serta keluaran terformat.
9.2 Analisis dengan Berpikir Komputasional
| Pilar | Penerapan pada Kasus Ini |
|---|---|
| Dekomposisi | Terbagi menjadi tiga sub-tugas: (1) membaca empat data peserta, (2) memvalidasi usia dalam rentang wajar, (3) menampilkan kartu peserta terformat. |
| Pengenalan Pola | Pola prompt, readln yang sama diulang empat kali. Pola ini akan menjadi ciri khas dari program-program awal pada beberapa modul berikutnya. |
| Abstraksi | Detail yang diabaikan: alamat lengkap, nomor telepon, email. Yang disimpan hanya empat data inti yang relevan untuk keperluan identifikasi awal. |
| Algoritma | Alur sederhana: baca → susun kartu → tampilkan. Belum ada percabangan maupun perulangan. |
9.3 Flowchart Studi Kasus
flowchart TD
A(["Mulai"]) --> B[/"Baca nama, usia, kota, pilihan bahasa"/]
B --> C["Susun nomor peserta = 1"]
C --> D["Siapkan garis pemisah dari konstanta"]
D --> E[/"Tampilkan kartu peserta"/]
E --> F(["Selesai"])
Gambar 9.1 - Flowchart pendaftaran peserta pelatihan
9.4 Pseudocode Studi Kasus
PROGRAM KartuPesertaPelatihan
{ Menerima data peserta dan menampilkan kartu pendaftaran }
KONSTANTA
NAMA_LEMBAGA = "Lembaga Kursus Pemrograman Nusantara"
GARIS_GANDA = "=========================================="
GARIS_TUNGGAL= "------------------------------------------"
TIPE
UsiaPeserta = 10..80
DEKLARASI
namaPeserta : string
usia : UsiaPeserta
asalKota : string
bahasaPilihan : string
nomorPeserta : integer
ALGORITMA
nomorPeserta <- 1
write("Nama lengkap : ")
read(namaPeserta)
write("Usia : ")
read(usia)
write("Asal kota : ")
read(asalKota)
write("Bahasa pemrograman: ")
read(bahasaPilihan)
write(GARIS_GANDA)
write(NAMA_LEMBAGA)
write(GARIS_GANDA)
write("Nomor Peserta : ", nomorPeserta)
write("Nama : ", namaPeserta)
write("Usia : ", usia, " tahun")
write("Asal Kota : ", asalKota)
write("Bahasa Pilihan : ", bahasaPilihan)
write(GARIS_TUNGGAL)
write("Status : TERDAFTAR")
write(GARIS_GANDA)
END
9.5 Implementasi dalam Pascal
program KartuPesertaPelatihan;
{ Studi Kasus Modul 2 - Kartu pendaftaran peserta pelatihan }
const
NAMA_LEMBAGA = 'Lembaga Kursus Pemrograman Nusantara';
GARIS_GANDA = '==========================================';
GARIS_TUNGGAL = '------------------------------------------';
type
UsiaPeserta = 10..80;
var
namaPeserta : string;
usia : UsiaPeserta;
asalKota : string;
bahasaPilihan : string;
nomorPeserta : integer;
begin
nomorPeserta := 1;
writeln('Formulir Pendaftaran Peserta');
writeln(GARIS_TUNGGAL);
writeln;
write('Nama lengkap : ');
readln(namaPeserta);
write('Usia (10-80) : ');
readln(usia);
write('Asal kota : ');
readln(asalKota);
write('Bahasa pemrograman: ');
readln(bahasaPilihan);
writeln;
writeln(GARIS_GANDA);
writeln(NAMA_LEMBAGA);
writeln(GARIS_GANDA);
writeln('Nomor Peserta : ', nomorPeserta);
writeln('Nama : ', namaPeserta);
writeln('Usia : ', usia, ' tahun');
writeln('Asal Kota : ', asalKota);
writeln('Bahasa Pilihan : ', bahasaPilihan);
writeln(GARIS_TUNGGAL);
writeln('Status : TERDAFTAR');
writeln(GARIS_GANDA);
end.
9.6 Contoh Keluaran
Formulir Pendaftaran Peserta ------------------------------------------ Nama lengkap : Siti Nurhaliza Usia (10-80) : 22 Asal kota : Bandung Bahasa pemrograman: Pascal ========================================== Lembaga Kursus Pemrograman Nusantara ========================================== Nomor Peserta : 1 Nama : Siti Nurhaliza Usia : 22 tahun Asal Kota : Bandung Bahasa Pilihan : Pascal ------------------------------------------ Status : TERDAFTAR ==========================================
9.7 Pembahasan
Perhatikan keputusan perancangan berikut.
-
Konstanta untuk garis pemisah. Alih-alih
menuliskan
'====='berkali-kali, kita definisikan sekali sebagaiGARIS_GANDAdanGARIS_TUNGGAL. Bila nanti ingin mengubah panjang garis, cukup satu tempat yang diubah. -
Tipe subrange untuk usia. Dengan mendefinisikan
UsiaPeserta = 10..80, kita menyatakan secara eksplisit rentang usia yang sah. Bila nanti ditambahkan direktif{$R+}, kompiler akan memvalidasi masukan secara otomatis. -
Blok keluaran terstruktur. Setiap baris kartu
ditulis dengan
writelntunggal. Ini membuat kode mudah dibaca dan dimodifikasi. -
Pemisah visual. Menyisipkan
writeln;tanpa argumen memisahkan formulir dari kartu hasil dengan rapi.
9.8 Pengembangan Selanjutnya
Program ini akan berkembang pada modul-modul berikutnya.
| Modul | Pengembangan |
|---|---|
| Modul 5 | Memperhalus pemformatan keluaran dengan pengaturan lebar field |
| Modul 6 | Menambahkan validasi bersyarat untuk setiap masukan |
| Modul 8 | Mendaftarkan banyak peserta sekaligus dengan perulangan FOR |
| Modul 16 | Menyimpan seluruh peserta dalam array |
| Modul 20 | Mengelompokkan data peserta dalam record |
| Modul 25 | Menyimpan daftar peserta ke berkas teks |
Rangkuman
Poin-poin kunci yang perlu diingat dari Modul 2
- Free Pascal adalah kompiler Pascal modern, gratis, open source, dan lintas platform. Tersedia untuk Windows, Linux, dan macOS.
-
Pemasangan FPC dapat dilakukan melalui pemasang grafis di
Windows, manajer paket di Linux, dan Homebrew atau paket
.dmgdi macOS. Verifikasi dengan perintahfpc -iV. -
Alur kompilasi melibatkan analisis leksikal, sintaks, semantik,
pembangkitan kode, assembling, dan linking. Satu perintah
fpc nama_berkas.pasmenjalankan seluruh tahap tersebut. -
Struktur program Pascal terdiri atas tujuh
bagian: judul program, klausa
uses, blokconst, bloktype, blokvar, subprogram, dan blok utama. Urutannya bersifat mengikat. -
Titik koma memisahkan pernyataan;
titik dua memisahkan nama variabel dari tipe;
titik hanya muncul sekali, setelah
endpenutup program. -
Pascal mendukung tiga gaya komentar:
{ ... },(* ... *), dan// ...(khusus FPC dan Delphi). Komentar gaya kurawal tidak dapat disarangkan. -
Direktif kompilator ditulis dalam
{ $... }. Yang paling penting:{$mode tp},{$mode delphi},{$mode objfpc}, dan{$R+}. - Perbedaan utama Free Pascal dan Turbo Pascal terletak pada arsitektur (16-bit vs 32/64-bit), dukungan Object Pascal, tipe string default, dan ketersediaan saat ini.
- Pesan kesalahan kompilator memiliki empat tingkat: Note, Warning, Error, dan Fatal. Bila pesan menunjuk baris tertentu, periksa juga baris sebelumnya karena penyebab sering ada di sana.
-
Bila ingin perilaku semirip mungkin dengan Turbo Pascal,
gunakan
{$mode tp}. Bila ingin memanfaatkan fitur modern seperti string dinamis dan class, gunakan{$mode objfpc}atau{$mode delphi}.
Pastikan Anda telah berhasil mengompilasi setidaknya satu program di perangkat Anda sendiri, dan Anda sudah memahami struktur blok program Pascal. Bila masih ada keraguan, ulangi Latihan 1 dan Latihan 5. Modul 3 akan mulai membahas variabel dan tipe data secara mendalam.
Referensi
Sumber rujukan yang digunakan dalam penyusunan modul ini
Buku Teks
- Wirth, N. (1971). "The Programming Language Pascal." Acta Informatica, 1(1), 35-63. Makalah asli yang mendefinisikan bahasa Pascal.
- Jensen, K., & Wirth, N. (1991). Pascal User Manual and Report (4th ed.). Springer-Verlag. Referensi standar definisi Pascal.
- Cooper, D., & Clancy, M. (1982). Oh! Pascal! W. W. Norton & Company. Buku pengantar klasik yang sangat baik untuk pemula.
- Cantu, M. (2020). Object Pascal Handbook. Marco Cantu. Referensi modern untuk Free Pascal dan Delphi.
- Grogono, P. (1995). Programming with Pascal. Addison-Wesley. Buku teks akademik yang membahas struktur program secara rinci.
Dokumentasi Resmi
- Free Pascal Team. Free Pascal Programmer's Guide. Tersedia di freepascal.org/docs.html.
- Free Pascal Team. Free Pascal Reference Guide. Berisi daftar lengkap reserved words, direktif kompilator, dan tipe data standar.
- Free Pascal Team. Free Pascal User's Guide. Berisi petunjuk instalasi untuk berbagai platform.
- Lazarus IDE Documentation. Tersedia di wiki.lazarus.freepascal.org.
Sumber Daring
- Free Pascal Official Website. https://www.freepascal.org.
- Lazarus IDE Official Website. https://www.lazarus-ide.org.
- Pascal Central. Kumpulan sumber daya, tutorial, dan referensi Pascal.
-
Stack Overflow - Tag
pascaldanfreepascal. Komunitas tanya-jawab yang aktif untuk permasalahan praktis.