P Pascal dan Algoritma
Modul 3 dari 50 Roadmap
Modul 03 - Fase Dasar

Variabel, Konstanta, dan Tipe Data Dasar

Modul ini membahas inti dari penyimpanan data dalam program: variabel dan konstanta. Anda akan mempelajari aturan penamaan identifier, daftar reserved words, serta seluruh tipe data sederhana dalam Pascal mulai dari integer dan real hingga char, string, dan boolean. Setiap tipe dilengkapi rentang nilai, ukuran memori, dan kasus penggunaan yang tepat.

Estimasi 120 menit Tingkat Dasar 3 Flowchart 4 Program Pascal 5 Latihan
01

Tujuan Pembelajaran

Kompetensi yang ingin dicapai setelah menyelesaikan modul ini

Setelah menyelesaikan modul ini, mahasiswa diharapkan mampu:

  1. Membedakan konsep variabel dan konstanta serta menentukan kapan menggunakan masing-masing.
  2. Menerapkan aturan penamaan identifier yang sah dalam Pascal.
  3. Mengidentifikasi reserved words dan menghindari penggunaannya sebagai nama identifier.
  4. Menjelaskan perbedaan dan kegunaan setiap tipe data integer dalam Pascal.
  5. Memilih tipe data real yang tepat berdasarkan presisi dan efisiensi memori.
  6. Membedakan tipe char dan string serta batasan panjangnya.
  7. Menggunakan tipe data boolean dalam logika program.
  8. Mendeklarasikan konstanta tak bertipe dan konstanta bertipe sesuai kebutuhan.
  9. Menjelaskan nilai default variabel global di Pascal dan mengapa inisialisasi eksplisit tetap dianjurkan.
  10. Menghindari kesalahan umum terkait pemilihan tipe data dan overflow.
02

Capaian Pembelajaran

Indikator ketercapaian dan kaitan dengan modul selanjutnya

Capaian Pembelajaran Mata Kuliah

Mahasiswa mampu memodelkan data dari permasalahan nyata ke dalam variabel dan konstanta bertipe tepat, sehingga program yang dihasilkan akurat, efisien, dan mudah dipelihara.

Indikator Ketercapaian Modul

Kode Indikator Bukti
IK-3.1 Menulis identifier yang sah dan deskriptif Latihan 1, 2, dan 5
IK-3.2 Memilih tipe integer yang sesuai rentang data Latihan 3 dan 4
IK-3.3 Menggunakan konstanta bertipe dan tak bertipe secara tepat Latihan 4 dan studi kasus
IK-3.4 Membedakan perlakuan char dan string dalam program Latihan 2 dan 5
IK-3.5 Mengidentifikasi risiko overflow dan underflow Latihan 5
Kaitan dengan Modul Berikutnya

Tipe data yang dikuasai di modul ini akan menjadi dasar untuk pembahasan operator dan ekspresi pada Modul 4, pemformatan input/output pada Modul 5, serta pengembangan tipe bentukan (record, enumerasi, subrange) pada Modul 20 hingga 22.

03

Materi Teori

Variabel, konstanta, identifier, dan seluruh tipe data dasar Pascal

3.1 Variabel dan Konstanta: Perbedaan Mendasar

Dalam program, kita perlu menyimpan data sementara agar dapat diolah kembali. Ada dua wadah penyimpanan utama dalam Pascal: variabel dan konstanta.

Aspek Variabel Konstanta
Nilai Dapat berubah selama program berjalan Tetap, tidak dapat diubah setelah didefinisikan
Deklarasi Blok var Blok const
Nilai awal Default nol, kosong, atau tidak terdefinisi Wajib diberi nilai saat dideklarasikan
Penggunaan khas Menyimpan masukan, hasil perhitungan, akumulator Tarif pajak, nama lembaga, konstanta matematis
Keuntungan Fleksibel mengikuti alur program Mencegah perubahan tak sengaja dan memudahkan pemeliharaan

Perhatikan contoh berikut.

var_vs_const.pasPascal
const
  PPN = 0.11;              { konstanta: nilai tetap }
  NAMA_TOKO = 'Cendekia';

var
  hargaBarang: real;       { variabel: nilai bisa berubah }
  jumlahBeli: integer;     { variabel: nilai bisa berubah }
  totalBayar: real;        { variabel: nilai bisa berubah }

Bila Anda mencoba menuliskan PPN := 0.12; di dalam program, kompiler akan menolak karena PPN dideklarasikan sebagai konstanta. Inilah perlindungan yang diberikan konstanta: mencegah perubahan yang tidak disengaja.

3.2 Identifier: Nama untuk Variabel dan Konstanta

Identifier adalah nama yang Anda berikan kepada variabel, konstanta, tipe, prosedur, atau fungsi. Pascal memiliki aturan ketat untuk identifier yang sah.

Aturan Identifier yang Sah

  1. Dimulai dengan huruf (A-Z, a-z) atau garis bawah (_).
  2. Karakter berikutnya boleh huruf, angka, atau garis bawah.
  3. Tidak boleh mengandung spasi atau tanda baca khusus seperti @ # $ % - + =.
  4. Tidak boleh sama dengan reserved word (kata kunci bahasa).
  5. Bersifat case-insensitive: nilai, Nilai, dan NILAI dianggap sama.
  6. Panjang identifier bebas, namun disarankan maksimal 63 karakter untuk keterbacaan.
Identifier Sah? Alasan
totalBayarYaDimulai huruf, hanya huruf dan angka
_hargaYaGaris bawah di awal diizinkan
nilai2YaAngka di posisi bukan awal
2nilaiTidakDimulai dengan angka
total-bayarTidakMengandung tanda hubung
total bayarTidakMengandung spasi
beginTidakReserved word
integerTidakNama tipe standar, dianggap reserved
TotalBayarYaBeda huruf besar-kecil tidak berpengaruh, tetapi boleh dipakai
Konvensi Penamaan di Kursus Ini

Kami menggunakan camelCase untuk variabel (totalBayar) dan HURUF_BESAR_SEMUA untuk konstanta (PPN, NAMA_TOKO). Konvensi ini tidak wajib, tetapi konsistensi sangat membantu membaca kode.

3.3 Reserved Words dan Standard Identifiers

Pascal memiliki daftar kata yang sudah "dipesan" oleh bahasa dan tidak boleh dipakai sebagai identifier. Kata-kata ini terbagi menjadi dua kelompok besar.

a. Reserved Words (Tidak Bisa Ditimpa)

Kata-kata ini adalah bagian dari sintaks inti Pascal dan sama sekali tidak boleh dipakai sebagai nama variabel, konstanta, tipe, atau subprogram.

Daftar Reserved Words Pascal
andarraybegincaseconst
divdodowntoelseend
fileforfunctiongotoif
inlabelmodnilnot
oforpackedprocedureprogram
recordrepeatsetthento
typeuntilvarwhilewith

b. Standard Identifiers (Dapat Ditimpa, tetapi Tidak Disarankan)

Kata-kata berikut sudah didefinisikan sebagai bagian dari pustaka standar Pascal. Secara teknis Anda boleh memakai nama yang sama untuk variabel Anda sendiri, tetapi ini akan menutupi definisi aslinya dan sangat tidak disarankan.

Daftar Standard Identifiers (Contoh Umum)
integerrealcharstringboolean
truefalseabssqrsqrt
sincoslnexpround
truncordchrsuccpred
readreadlnwritewritelnlength
copyposinsertdeleteupcase
Bahaya Menimpa Standard Identifier

Bila Anda mendeklarasikan var integer: integer; maka kata integer di dalam blok berikutnya akan merujuk pada variabel Anda, bukan tipe data. Akibatnya, deklarasi variabel selanjutnya yang bertipe integer akan menghasilkan kesalahan kompilasi.

3.4 Tipe Data Integer

Tipe integer menyimpan bilangan bulat (tanpa titik desimal), baik positif, negatif, maupun nol. Pascal menyediakan beberapa tipe integer dengan rentang dan ukuran memori berbeda.

Tipe Ukuran Rentang Nilai Penggunaan Khas
ShortInt1 byte-128 s.d. 127Data sangat kecil, penghematan memori
Byte1 byte0 s.d. 255Nilai non-negatif kecil, warna RGB
SmallInt2 byte-32.768 s.d. 32.767Nilai sedang
Word2 byte0 s.d. 65.535Nilai non-negatif sedang
Integer2 atau 4 byteBergantung platformPilihan default untuk bilangan bulat umum
LongInt4 byte-2.147.483.648 s.d. 2.147.483.647Nilai besar
Cardinal4 byte0 s.d. 4.294.967.295Nilai besar non-negatif
Int648 byte-9,2 x 1018 s.d. 9,2 x 1018Nilai sangat besar
QWord8 byte0 s.d. 1,8 x 1019Nilai sangat besar non-negatif
Catatan Penting tentang Integer di Free Pascal

Pada Free Pascal untuk platform 32-bit dan 64-bit, tipe integer berukuran 4 byte dengan rentang sama seperti longint. Pada Turbo Pascal (16-bit), integer berukuran 2 byte. Perbedaan ini penting ketika Anda memindahkan kode lama.

3.5 Tipe Data Real

Tipe real menyimpan bilangan pecahan atau bilangan dengan titik desimal. Pascal menyediakan beberapa tipe real dengan tingkat presisi dan ukuran memori berbeda.

Tipe Ukuran Presisi Rentang (Perkiraan) Penggunaan Khas
Single4 byte7-8 digit±1,5 x 10-45 s.d. ±3,4 x 1038Grafik, pengukuran cepat
Real4 atau 8 byteBergantung platformBergantung platformDefault umum, namun kurang spesifik
Double8 byte15-16 digit±5,0 x 10-324 s.d. ±1,7 x 10308Perhitungan ilmiah umum
Extended10 byte19-20 digit±3,4 x 10-4932 s.d. ±1,1 x 104932Presisi sangat tinggi
Comp8 byte19-20 digit±9,2 x 1018Perhitungan uang dalam jumlah besar
Currency8 byte4 digit desimal±922.337.203.685.477,5807Transaksi keuangan, akuntansi
Jangan Gunakan Real untuk Uang

Tipe real menyimpan nilai secara pendekatan (floating point), sehingga operasi seperti 0.1 + 0.2 bisa menghasilkan 0.30000000000000004 alih-alih 0.3. Untuk keuangan, gunakan currency yang menyimpan nilai sebagai bilangan bulat dengan skala tetap.

3.6 Tipe Data Char

Tipe char menyimpan tepat satu karakter. Ukurannya 1 byte, dan setiap karakter berkorespondensi dengan kode ASCII (0-255).

contoh_char.pasPascal
var
  huruf: char;
  digit: char;
  simbol: char;

begin
  huruf := 'A';
  digit := '7';
  simbol := '#';

  writeln('Huruf  : ', huruf);
  writeln('Digit  : ', digit);
  writeln('Simbol : ', simbol);
end.

Perhatikan bahwa literal char ditulis dengan tanda petik tunggal, sama seperti string. Perbedaan terletak pada jumlah karakter: 'A' adalah char, sedangkan 'Andi' adalah string.

Fungsi ord mengubah char menjadi kode ASCII-nya, dan chr melakukan sebaliknya.

ord_chr.pasPascal
var
  kode: integer;
  karakter: char;

begin
  kode := ord('A');
  writeln('Kode ASCII dari A adalah ', kode);      { 65 }

  karakter := chr(66);
  writeln('Karakter dengan kode 66 adalah ', karakter); { B }
end.

3.7 Tipe Data String

String adalah kumpulan karakter. Pascal memiliki beberapa jenis string yang berbeda dalam kapasitas dan cara penyimpanan.

Tipe Panjang Maks Ukuran Keterangan
ShortString 255 karakter 256 byte tetap Gaya asli Turbo Pascal. Panjang disimpan di byte pertama.
AnsiString ~2 GB Dinamis Default Free Pascal modern. Berisi karakter 8-bit.
UnicodeString ~2 GB Dinamis Mendukung karakter Unicode (UTF-16).
WideString ~2 GB Dinamis Setara UnicodeString pada Windows.
PChar Tak terbatas Pointer Pointer ke array char diakhiri null. Untuk interoperabilitas C.

Notasi string[n] mendefinisikan string dengan panjang maksimal tertentu, misalnya string[30] untuk 30 karakter. Notasi ini kompatibel dengan semua mode Pascal dan berguna untuk menghemat memori.

Fungsi dan Prosedur String Umum

Nama Jenis Fungsi
Length(S)FungsiMengembalikan panjang string S
Copy(S, i, n)FungsiMenyalin n karakter mulai dari posisi i
Pos(Sub, S)FungsiPosisi pertama Sub dalam S (0 bila tidak ditemukan)
Concat(S1, S2, ...)FungsiMenggabungkan string
UpCase(C)FungsiMengubah satu karakter menjadi huruf besar
Delete(S, i, n)ProsedurMenghapus n karakter mulai posisi i
Insert(Sub, S, i)ProsedurMenyisipkan Sub ke dalam S di posisi i
Str(N, S)ProsedurMengubah angka menjadi string
Val(S, N, kode)ProsedurMengubah string menjadi angka

Pengolahan string secara lengkap akan dibahas pada Modul 23.

3.8 Tipe Data Boolean

Tipe boolean hanya memiliki dua nilai: true (benar) atau false (salah). Ukurannya 1 byte. Tipe ini digunakan dalam pengambilan keputusan dan penyimpanan status.

contoh_boolean.pasPascal
var
  sudahLogin: boolean;
  lulus: boolean;
  nilai: integer;

begin
  sudahLogin := true;
  nilai := 78;
  lulus := nilai >= 70;

  writeln('Sudah login? ', sudahLogin);
  writeln('Nilai: ', nilai);
  writeln('Lulus? ', lulus);
end.

Keluaran:

Sudah login? TRUE
Nilai: 78
Lulus? TRUE

Perhatikan bahwa program menampilkan TRUE dan FALSE dalam huruf besar.

3.9 Konstanta: Tak Bertipe dan Bertipe

Pascal membedakan dua jenis konstanta.

a. Konstanta Tak Bertipe (Untyped Constant)

Bentuk yang paling umum: nama, tanda sama dengan, dan nilai. Tipe data ditentukan otomatis oleh kompiler.

const_tak_bertipe.pasPascal
const
  PPN = 0.11;
  NAMA_TOKO = 'Cendekia';
  MAKS_NILAI = 100;
  STATUS_AKTIF = true;

Konstanta ini memiliki tipe yang ditentukan dari bentuk nilainya: PPN bertipe real, NAMA_TOKO bertipe string, MAKS_NILAI bertipe integer, dan STATUS_AKTIF bertipe boolean.

b. Konstanta Bertipe (Typed Constant)

Konstanta yang dideklarasikan dengan tipe eksplisit. Meskipun disebut "konstanta", secara teknis konstanta bertipe dapat diubah isinya — namun ini sangat tidak disarankan.

const_bertipe.pasPascal
const
  BATAS: integer = 100;
  NAMA: string[20] = 'Budi';
  SUHU: real = 36.5;

Konstanta bertipe berguna ketika Anda ingin menentukan tipe secara eksplisit, misalnya untuk mengontrol ukuran string atau memastikan tipe integer tertentu.

3.10 Inisialisasi dan Nilai Default

Variabel global di Pascal secara default diinisialisasi ke nol (untuk tipe numerik), karakter kosong (untuk char), string kosong (untuk string), atau false (untuk boolean). Namun, jangan bergantung pada perilaku ini. Selalu inisialisasi variabel Anda secara eksplisit.

Tipe Nilai Default Global Nilai Default Lokal
Integer, LongInt, dsb.0Tidak terdefinisi
Real, Double, Extended0.0Tidak terdefinisi
Char#0 (null character)Tidak terdefinisi
String'' (kosong)Tidak terdefinisi
BooleanfalseTidak terdefinisi
Selalu Inisialisasi Eksplisit

Variabel lokal di dalam prosedur atau fungsi tidak dijamin bernilai nol. Bila Anda membacanya tanpa inisialisasi, Anda akan mendapatkan nilai acak dari sisa memori. Inisialisasi eksplisit seperti total := 0; adalah kebiasaan yang wajib dibangun sejak awal.

3.11 Panduan Memilih Tipe Data

Pertanyaan-pertanyaan berikut membantu memilih tipe data yang tepat.

  1. Apakah nilainya bilangan bulat? Bila ya, gunakan tipe integer yang sesuai rentangnya.
  2. Apakah nilainya memerlukan pecahan? Bila ya, tentukan tingkat presisi yang dibutuhkan.
  3. Apakah nilainya uang? Bila ya, gunakan currency, bukan real biasa.
  4. Apakah nilainya satu karakter? Gunakan char, bukan string satu karakter.
  5. Apakah nilainya logis ya/tidak? Gunakan boolean.
  6. Berapa rentang maksimumnya? Pilih tipe terkecil yang masih mencakup rentang tersebut untuk menghemat memori.

3.12 Kesalahan Umum Terkait Tipe Data

  1. Integer overflow. Menyimpan nilai yang melebihi rentang tipe. Contoh: byte hanya sampai 255; menyimpan 300 akan menghasilkan nilai yang tidak diharapkan.
  2. Pembagian integer. Operator / selalu menghasilkan real, sedangkan div menghasilkan integer. Tertukar keduanya adalah kesalahan umum.
  3. Membandingkan real dengan sama dengan. Karena real adalah pendekatan, 0.1 + 0.2 = 0.3 bisa bernilai false. Selalu bandingkan dengan toleransi.
  4. Menggunakan real untuk uang. Menyebabkan kesalahan pembulatan akumulatif. Gunakan currency.
  5. Menimpa nama tipe standar. Mendeklarasikan variabel bernama integer atau string akan menutupi tipe aslinya.
  6. Lupa panjang string. Pada mode Turbo Pascal, string default hanya 255 karakter. Melebihi batas ini akan memotong data secara diam-diam.
  7. Mengabaikan perbedaan char dan string satu karakter. 'A' (char) dan 'A' (string) secara literal sama, tetapi tipe datanya berbeda.
  8. Menggunakan boolean sebagai integer. Meskipun secara internal boolean disimpan sebagai 0/1, konversi eksplisit lebih disarankan.
Demonstrasi Overflow

Perhatikan program berikut. Nilai yang dicetak tidak seperti yang diharapkan karena overflow.

overflow.pasPascal
var
  kecil: byte;
begin
  kecil := 250;
  writeln('Sebelum: ', kecil);
  kecil := kecil + 10;       { 260 melebihi batas byte }
  writeln('Sesudah: ', kecil); { Hasil: 4, bukan 260 }
end.

Dengan direktif {$Q+}, overflow akan menghasilkan kesalahan runtime, bukan nilai yang salah.

04

Algoritma dan Flowchart

Pemilihan tipe data, alur deklarasi, dan konversi antar tipe

4.1 Flowchart Pemilihan Tipe Data Numerik

Diagram berikut memandu pemilihan tipe data numerik yang tepat berdasarkan sifat data yang akan disimpan.

flowchart TD
    A(["Data numerik?"]) --> B{"Butuh pecahan?"}
    B -- "Tidak" --> C{"Selalu non-negatif?"}
    B -- "Ya" --> D{"Data uang?"}
    C -- "Ya" --> E{"Nilai <= 255?"}
    C -- "Tidak" --> F{"Nilai <= 32767?"}
    E -- "Ya" --> G["Gunakan Byte"]
    E -- "Tidak" --> H["Gunakan Word"]
    F -- "Ya" --> I["Gunakan SmallInt"]
    F -- "Tidak" --> J["Gunakan Integer atau LongInt"]
    D -- "Ya" --> K["Gunakan Currency"]
    D -- "Tidak" --> L{"Presisi tinggi?"}
    L -- "Ya" --> M["Gunakan Extended"]
    L -- "Tidak" --> N["Gunakan Double"]
      

Gambar 4.1 - Pohon keputusan pemilihan tipe data numerik

4.2 Flowchart Alur Deklarasi dan Inisialisasi

Diagram ini menggambarkan alur internal ketika program mendeklarasikan variabel, menginisialisasinya, dan menggunakannya.

flowchart TD
    A(["Mulai Program"]) --> B["Kompiler membaca blok var"]
    B --> C["Alokasi memori untuk setiap variabel"]
    C --> D["Inisialisasi default (nol atau kosong)"]
    D --> E["Masuk ke blok begin"]
    E --> F{"Variabel akan diisi
dari input?"} F -- "Ya" --> G["readln(variabel)"] F -- "Tidak" --> H["variabel := nilai awal"] G --> I["Proses perhitungan"] H --> I I --> J["writeln(variabel)"] J --> K(["Selesai"])

Gambar 4.2 - Alur deklarasi, inisialisasi, dan penggunaan variabel

4.3 Flowchart Konversi Suhu dengan Pemilihan Tipe

Contoh konkret penggunaan tipe data: konversi suhu dari Celsius ke Fahrenheit, Reamur, dan Kelvin. Semua hasil menggunakan tipe real.

flowchart TD
    A(["Mulai"]) --> B[/"Baca celsius (real)"/]
    B --> C["fahrenheit = (celsius * 9 / 5) + 32"]
    C --> D["reamur = celsius * 4 / 5"]
    D --> E["kelvin = celsius + 273.15"]
    E --> F[/"Tampilkan fahrenheit, reamur, kelvin"/]
    F --> G(["Selesai"])
      

Gambar 4.3 - Flowchart konversi suhu dengan tipe real

05

Pseudocode

Representasi algoritmik dari deklarasi dan penggunaan tipe data

5.1 Pseudocode Konversi Suhu

PROGRAM KonversiSuhu
{ Mengkonversi suhu dari Celsius ke tiga satuan lain }

DEKLARASI
  celsius    : real
  fahrenheit : real
  reamur     : real
  kelvin     : real

ALGORITMA
  write("Masukkan suhu dalam Celsius: ")
  read(celsius)

  fahrenheit <- (celsius * 9 / 5) + 32
  reamur     <- celsius * 4 / 5
  kelvin     <- celsius + 273.15

  write("Suhu dalam Fahrenheit: ", fahrenheit)
  write("Suhu dalam Reamur    : ", reamur)
  write("Suhu dalam Kelvin    : ", kelvin)
END

5.2 Pseudocode Data Mahasiswa dengan Tipe Beragam

PROGRAM DataMahasiswa
{ Mendemonstrasikan penggunaan berbagai tipe data dasar }

KONSTANTA
  MAKS_NILAI = 100
  NAMA_KAMPUS = "Universitas Nusantara"

DEKLARASI
  nama          : string
  nim           : string
  angkatan      : integer
  nilaiUjian    : real
  nilaiHuruf    : char
  terdaftar     : boolean

ALGORITMA
  write("Nama mahasiswa    : ")
  read(nama)
  write("NIM               : ")
  read(nim)
  write("Angkatan          : ")
  read(angkatan)
  write("Nilai ujian       : ")
  read(nilaiUjian)

  nilaiHuruf <- tentukanHurufMutu(nilaiUjian)
  terdaftar <- true

  write("====================================")
  write(NAMA_KAMPUS)
  write("====================================")
  write("Nama     : ", nama)
  write("NIM      : ", nim)
  write("Angkatan : ", angkatan)
  write("Nilai    : ", nilaiUjian)
  write("Huruf    : ", nilaiHuruf)
  write("Status   : ", terdaftar)
END

5.3 Pseudocode Validasi Rentang Nilai

PROGRAM ValidasiNilaiUjian
{ Memastikan nilai masukan berada dalam rentang yang sah }

KONSTANTA
  NILAI_MIN = 0
  NILAI_MAKS = 100

DEKLARASI
  nilai : integer

ALGORITMA
  write("Masukkan nilai ujian (0-100): ")
  read(nilai)

  jika nilai < NILAI_MIN atau nilai > NILAI_MAKS maka
    write("Kesalahan: nilai di luar rentang yang sah.")
  selain itu
    write("Nilai valid: ", nilai)
  akhir jika
END
06

Contoh Kode Pascal Lengkap

Empat program untuk mendemonstrasikan tipe data dan konstanta

6.1 Program Demonstrasi Semua Tipe Data Dasar

Program ini mendeklarasikan dan menampilkan nilai dari seluruh tipe data dasar yang dibahas pada modul ini.

demo_tipe_data.pas Pascal
program DemoTipeData;
{ Mendemonstrasikan tipe data dasar Pascal }

var
  kecilNegatif : shortint;
  kecilPositif : byte;
  sedangInt    : smallint;
  besarInt     : longint;
  nilaiReal    : double;
  nilaiUang    : currency;
  satuHuruf    : char;
  namaLengkap  : string;
  sudahLulus   : boolean;

begin
  kecilNegatif := -100;
  kecilPositif := 200;
  sedangInt    := -30000;
  besarInt     := 2000000000;
  nilaiReal    := 3.14159265358979;
  nilaiUang    := 125000.75;
  satuHuruf    := 'A';
  namaLengkap  := 'Budi Santoso';
  sudahLulus   := true;

  writeln('=== Demonstrasi Tipe Data Dasar Pascal ===');
  writeln;
  writeln('ShortInt : ', kecilNegatif);
  writeln('Byte     : ', kecilPositif);
  writeln('SmallInt : ', sedangInt);
  writeln('LongInt  : ', besarInt);
  writeln('Double   : ', nilaiReal:0:14);
  writeln('Currency : ', nilaiUang:0:2);
  writeln('Char     : ', satuHuruf);
  writeln('String   : ', namaLengkap);
  writeln('Boolean  : ', sudahLulus);
end.

Keluaran yang diharapkan:

=== Demonstrasi Tipe Data Dasar Pascal ===

ShortInt : -100
Byte     : 200
SmallInt : -30000
LongInt  : 2000000000
Double   : 3.14159265358979
Currency : 125000.75
Char     : A
String   : Budi Santoso
Boolean  : TRUE

6.2 Program Konversi Suhu dengan Tipe Real

Program ini menerapkan tipe double untuk presisi yang memadai dalam perhitungan konversi suhu.

konversi_suhu.pas Pascal
program KonversiSuhu;
{ Mengkonversi suhu dari Celsius ke Fahrenheit, Reamur, dan Kelvin }

const
  TITIK_BEKU_KELVIN = 273.15;

var
  celsius    : double;
  fahrenheit : double;
  reamur     : double;
  kelvin     : double;

begin
  write('Masukkan suhu dalam Celsius: ');
  readln(celsius);

  fahrenheit := (celsius * 9 / 5) + 32;
  reamur     := celsius * 4 / 5;
  kelvin     := celsius + TITIK_BEKU_KELVIN;

  writeln;
  writeln('=== Hasil Konversi ===');
  writeln('Celsius    : ', celsius:0:2, ' derajat');
  writeln('Fahrenheit : ', fahrenheit:0:2, ' derajat');
  writeln('Reamur     : ', reamur:0:2, ' derajat');
  writeln('Kelvin     : ', kelvin:0:2, ' Kelvin');
end.

Contoh keluaran:

Masukkan suhu dalam Celsius: 25

=== Hasil Konversi ===
Celsius    : 25.00 derajat
Fahrenheit : 77.00 derajat
Reamur     : 20.00 derajat
Kelvin     : 298.15 Kelvin

6.3 Program dengan Konstanta Bertipe

Program ini mendemonstrasikan penggunaan konstanta bertipe untuk mendefinisikan pengaturan aplikasi kecil.

konstanta_bertipe.pas Pascal
program KonstantaBertipe;
{ Mendemonstrasikan konstanta bertipe }

const
  NAMA_APLIKASI  : string[30] = 'Sistem Penilaian v1.0';
  BATAS_LULUS    : integer    = 70;
  PPN_PERSEN     : real       = 0.11;
  MAKS_SKS       : byte       = 24;
  STATUS_DEFAULT : boolean    = false;

var
  namaMahasiswa : string;
  nilai         : integer;
  sks           : byte;
  sudahTerdaftar: boolean;

begin
  writeln(NAMA_APLIKASI);
  writeln('----------------------------------------');

  write('Nama mahasiswa : ');
  readln(namaMahasiswa);

  write('Nilai ujian    : ');
  readln(nilai);

  write('SKS diambil    : ');
  readln(sks);

  sudahTerdaftar := true;

  writeln;
  writeln('Ringkasan:');
  writeln('Nama         : ', namaMahasiswa);
  writeln('Nilai        : ', nilai);
  writeln('Batas lulus  : ', BATAS_LULUS);
  writeln('SKS          : ', sks, ' dari maks ', MAKS_SKS);
  writeln('Terdaftar    : ', sudahTerdaftar);

  if nilai >= BATAS_LULUS then
    writeln('Status       : LULUS')
  else
    writeln('Status       : BELUM LULUS');
end.

6.4 Program Perbandingan Tipe Char dan String

Program ini menunjukkan perbedaan praktis antara char dan string dalam penggunaan sehari-hari.

char_vs_string.pas Pascal
program CharVsString;
{ Membandingkan perilaku tipe char dan string }

var
  satuKarakter  : char;
  satuHurufStr  : string;
  namaLengkap   : string;
  inisial       : char;

begin
  satuKarakter := 'A';
  satuHurufStr := 'A';
  namaLengkap  := 'Andi Wijaya';
  inisial      := namaLengkap[1];

  writeln('=== Perbandingan Char dan String ===');
  writeln;
  writeln('satuKarakter  (char)   : ', satuKarakter);
  writeln('satuHurufStr  (string) : ', satuHurufStr);
  writeln('namaLengkap   (string) : ', namaLengkap);
  writeln('inisial       (char)   : ', inisial);
  writeln;
  writeln('Panjang namaLengkap    : ', length(namaLengkap));
  writeln('Kode ASCII satuKarakter: ', ord(satuKarakter));
  writeln('Kode ASCII inisial     : ', ord(inisial));
end.

Keluaran:

=== Perbandingan Char dan String ===

satuKarakter  (char)   : A
satuHurufStr  (string) : A
namaLengkap   (string) : Andi Wijaya
inisial       (char)   : A

Panjang namaLengkap    : 11
Kode ASCII satuKarakter: 65
Kode ASCII inisial     : 65
07

Penjelasan Kode Baris per Baris

Membedah program DemoTipeData dan KonstantaBertipe secara rinci

7.1 Program DemoTipeData

Baris Kode Penjelasan
1-2 program DemoTipeData;
{ Mendemonstrasikan ... }
Judul program diikuti komentar yang menjelaskan tujuan.
5 kecilNegatif : shortint; Variabel bertipe shortint (1 byte) dengan rentang -128 hingga 127. Cocok untuk nilai kecil negatif.
6 kecilPositif : byte; Variabel bertipe byte (1 byte) dengan rentang 0 hingga 255. Tidak dapat menyimpan nilai negatif.
7 sedangInt : smallint; Variabel bertipe smallint (2 byte), rentang sekitar -32 ribu hingga +32 ribu.
8 besarInt : longint; Variabel bertipe longint (4 byte), rentang hingga lebih dari 2 miliar.
9 nilaiReal : double; Variabel bertipe double (8 byte) untuk bilangan pecahan dengan presisi tinggi.
10 nilaiUang : currency; Variabel bertipe currency untuk nilai uang. Menyimpan 4 angka desimal secara eksak.
11 satuHuruf : char; Variabel bertipe char untuk menyimpan satu karakter.
12 namaLengkap : string; Variabel bertipe string dinamis (AnsiString di Free Pascal). Panjang menyesuaikan isi.
13 sudahLulus : boolean; Variabel bertipe boolean, bernilai true atau false.
16-24 kecilNegatif := -100;
...
Pemberian nilai awal ke setiap variabel. Perhatikan bahwa literal real memakai titik (.), bukan koma seperti di Indonesia. Literal char diapit petik tunggal.
26-35 writeln('ShortInt : ', kecilNegatif);
...
Menampilkan setiap nilai. Perhatikan pemformatan :0:14 untuk double agar 14 angka desimal tercetak, dan :0:2 untuk currency agar 2 angka desimal tercetak.

7.2 Program KonstantaBertipe

Baris Kode Penjelasan
5 NAMA_APLIKASI : string[30] = 'Sistem Penilaian v1.0'; Konstanta bertipe string dengan panjang maksimum 30 karakter. Notasi string[30] membatasi panjang dan memakai memori tetap. Bila nilai yang diberikan lebih panjang, akan dipotong.
6 BATAS_LULUS : integer = 70; Konstanta bertipe integer. Berbeda dengan konstanta tak bertipe, tipe data ditulis eksplisit sebelum tanda =.
7 PPN_PERSEN : real = 0.11; Konstanta bertipe real. Karena sudah didefinisikan sebagai konstanta, nilai PPN_PERSEN tidak dapat diubah di dalam program.
8 MAKS_SKS : byte = 24; Konstanta bertipe byte. Nilai 24 berada dalam rentang byte (0-255), sehingga tipe ini lebih hemat memori dibandingkan integer.
9 STATUS_DEFAULT : boolean = false; Konstanta bertipe boolean. Meskipun tidak dipakai di program ini, contoh ini menunjukkan bahwa boolean juga dapat dijadikan konstanta bertipe.
25-26 if nilai >= BATAS_LULUS then
writeln('Status : LULUS')
Perbandingan nilai dengan konstanta. Karena BATAS_LULUS adalah konstanta, bila suatu saat batas lulus berubah, cukup satu baris yang perlu diubah, bukan setiap tempat yang membandingkan.

7.3 Jejak Eksekusi KonstantaBertipe

Tabel berikut menunjukkan jejak eksekusi dengan masukan nama = Rina, nilai = 78, sks = 20.

Baris Pernyataan Efek
13-14writeln headerHeader tampil
16-17readln namaMahasiswanamaMahasiswa = "Rina"
19-20readln nilainilai = 78
22-23readln skssks = 20
25sudahTerdaftar := truesudahTerdaftar = TRUE
29-33writeln ringkasanRingkasan tampil
35-38if nilai >= 70Karena 78 >= 70, cetak "LULUS"
Pelajaran Kunci

Perhatikan bahwa setiap tipe data memiliki rentang dan kegunaan spesifik. Memilih tipe yang tepat sejak awal bukan hanya soal efisiensi memori, tetapi juga soal kejelasan maksud program. Ketika Anda menuliskan byte, Anda sudah menyatakan bahwa nilai ini tidak akan pernah negatif.

08

Latihan Soal

Lima soal dengan tingkat kesulitan bertingkat

1

Validasi Identifier

Mudah

Periksa setiap identifier berikut. Tentukan mana yang sah dan mana yang tidak, serta jelaskan alasannya.

  1. totalHarga
  2. 2total
  3. _namaPengguna
  4. harga-barang
  5. nilai Ujian
  6. NILAI_AKHIR
  7. const
  8. integer
  9. dataKu$
  10. hitungTotalBayar2025

Pertanyaan tambahan: mengapa Pascal memperbolehkan identifier seperti NILAI_AKHIR dan nilai_akhir sekaligus, dan apa implikasinya terhadap gaya penulisan kode?

2

Kartu Data Diri

Mudah

Buat program kartu_data_diri.pas yang membaca data berikut dari pengguna dan menampilkannya kembali:

  • Nama lengkap (string)
  • Inisial nama (char)
  • Usia (byte)
  • Tinggi badan dalam cm (real)
  • Berat badan dalam kg (real)
  • Sudah menikah atau belum (boolean)

Ketentuan:

  • Gunakan tipe data yang tepat untuk setiap field.
  • Definisikan konstanta untuk garis pemisah.
  • Untuk tinggi dan berat, tampilkan dua angka desimal.
  • Untuk usia, gunakan byte karena tidak mungkin negatif dan tidak lebih dari 255.
3

Konversi Mata Uang

Sedang

Buat program yang mengkonversi nilai rupiah ke tiga mata uang asing. Kurs disimpan sebagai konstanta.

Kurs yang digunakan:

  • 1 USD = 15.750 IDR
  • 1 EUR = 17.200 IDR
  • 1 SGD = 11.800 IDR

Ketentuan:

  • Simpan setiap kurs sebagai konstanta bertipe real.
  • Simpan nilai rupiah dalam variabel bertipe int64 agar dapat menampung nilai besar.
  • Tampilkan setiap hasil konversi dengan dua angka desimal.

Pertanyaan analisis: mengapa kita tidak menggunakan tipe real untuk menyimpan nilai rupiah dalam program ini, padahal nilainya bisa sangat besar?

4

Sistem Nilai Akademik

Sedang

Buat program yang menerima nama mahasiswa, nilai ujian, dan nilai tugas, lalu menghitung nilai akhir dengan bobot 60 persen ujian dan 40 persen tugas. Tentukan juga huruf mutu berdasarkan nilai akhir.

Aturan huruf mutu:

  • A: nilai akhir >= 85
  • B: 70 <= nilai akhir < 85
  • C: 60 <= nilai akhir < 70
  • D: 50 <= nilai akhir < 60
  • E: nilai akhir < 50

Ketentuan:

  • Simpan bobot sebagai konstanta bertipe real.
  • Simpan huruf mutu sebagai variabel bertipe char.
  • Simpan nama dan NIM sebagai string.

Pertanyaan analisis: bila nilai ujian = 80 dan nilai tugas = 90, berapa nilai akhirnya? Manfaatkan tabel jejak untuk memverifikasi perhitungan Anda.

5

Deteksi Kesalahan Tipe Data

Sulit

Program berikut memiliki tujuh kesalahan terkait tipe data, identifier, atau konstanta. Temukan semuanya, lalu tuliskan versi yang benar.

kacau_tipe.pasPascal
program KacauTipe;

const
  PPN = 0.11
  nama_toko = 'Cendekia';

var
  integer: byte;
  harga barang: real;
  jumlahBeli: integer;
  totalBayar: currency;
  huruf: string;

begin
  harga barang := 125000;
  jumlahBeli := 3;
  totalBayar := harga barang * jumlahBeli;
  PPN := 0.12;
  huruf := 'A';
  integer := 100;

  writeln('Total: ', totalBayar);
end.

Ketentuan:

  • Sebutkan nomor baris setiap kesalahan.
  • Jelaskan mengapa baris tersebut salah.
  • Tuliskan versi perbaikan lengkap yang dapat dikompilasi.

Pertanyaan analisis: setelah semua kesalahan diperbaiki, apakah program menghasilkan keluaran yang benar? Bila nilai PPN seharusnya 0.12, bagaimana cara yang benar mengubahnya? (Petunjuk: konstanta tidak dapat diubah; solusinya adalah mengubah definisi konstanta itu sendiri.)

09

Studi Kasus

Sistem Inventaris Toko Elektronik

9.1 Deskripsi Masalah

Toko elektronik "Elektro Jaya" ingin mendata barang yang masuk. Setiap barang memiliki: kode barang, nama barang, kategori, jumlah stok, harga satuan, dan status ketersediaan. Program menerima data ini lalu menampilkan ringkasan dalam bentuk kartu inventaris.

9.2 Analisis Tipe Data

Sebelum menulis kode, kita petakan setiap field ke tipe data yang tepat.

Field Sifat Data Tipe Terpilih Alasan
Kode barang Kombinasi huruf dan angka, misal "ELK-001" string[10] Lebih dari satu karakter dan panjang terbatas
Nama barang Teks panjang, misal "Laptop ASUS VivoBook" string[50] Cukup menampung nama panjang
Kategori Satu karakter, misal 'L' untuk Laptop char Hanya satu karakter
Jumlah stok Bilangan bulat non-negatif, umumnya < 1000 word Tidak negatif, rentang 0-65535 sudah cukup
Harga satuan Nilai uang, misal 8.500.000,00 currency Presisi eksak untuk keuangan
Status ketersediaan Ya/tidak boolean Hanya dua nilai logis

9.3 Flowchart Studi Kasus

flowchart TD
    A(["Mulai"]) --> B[/"Baca kode, nama, kategori, stok, harga"/]
    B --> C["Tentukan status berdasarkan stok"]
    C --> D{"Stok > 0?"}
    D -- "Ya" --> E["status = TERSEDIA"]
    D -- "Tidak" --> F["status = HABIS"]
    E --> G["Hitung nilai inventaris
= stok * harga"] F --> G G --> H[/"Tampilkan kartu inventaris"/] H --> I(["Selesai"])

Gambar 9.1 - Flowchart pendataan inventaris toko elektronik

9.4 Pseudocode Studi Kasus

PROGRAM InventarisTokoElektronik
{ Mencatat satu barang masuk dan menampilkan kartu inventaris }

KONSTANTA
  NAMA_TOKO    = "Elektro Jaya"
  GARIS_GANDA  = "=========================================="
  GARIS_TUNGGAL= "------------------------------------------"

DEKLARASI
  kodeBarang    : string
  namaBarang    : string
  kategori      : char
  jumlahStok    : word
  hargaSatuan   : currency
  nilaiInventaris : currency
  tersedia      : boolean

ALGORITMA
  write("Kode barang    : ")
  read(kodeBarang)
  write("Nama barang    : ")
  read(namaBarang)
  write("Kategori (1 huruf): ")
  read(kategori)
  write("Jumlah stok    : ")
  read(jumlahStok)
  write("Harga satuan   : ")
  read(hargaSatuan)

  tersedia <- jumlahStok > 0
  nilaiInventaris <- jumlahStok * hargaSatuan

  write(GARIS_GANDA)
  write(NAMA_TOKO)
  write(GARIS_GANDA)
  write("Kode Barang    : ", kodeBarang)
  write("Nama Barang    : ", namaBarang)
  write("Kategori       : ", kategori)
  write("Stok           : ", jumlahStok, " unit")
  write("Harga Satuan   : Rp ", hargaSatuan)
  write("Nilai Total    : Rp ", nilaiInventaris)
  write(GARIS_TUNGGAL)
  jika tersedia = true maka
    write("Status         : TERSEDIA")
  selain itu
    write("Status         : HABIS")
  akhir jika
  write(GARIS_GANDA)
END

9.5 Implementasi dalam Pascal

inventaris_elektronik.pas Pascal
program InventarisTokoElektronik;
{ Studi Kasus Modul 3 - Pendataan inventaris toko elektronik }

const
  NAMA_TOKO     : string[20] = 'Elektro Jaya';
  GARIS_GANDA   = '==========================================';
  GARIS_TUNGGAL = '------------------------------------------';

var
  kodeBarang      : string[10];
  namaBarang      : string[50];
  kategori        : char;
  jumlahStok      : word;
  hargaSatuan     : currency;
  nilaiInventaris : currency;
  tersedia        : boolean;

begin
  writeln('Formulir Pendataan Barang');
  writeln(GARIS_TUNGGAL);
  writeln;

  write('Kode barang        : ');
  readln(kodeBarang);

  write('Nama barang        : ');
  readln(namaBarang);

  write('Kategori (1 huruf) : ');
  readln(kategori);

  write('Jumlah stok        : ');
  readln(jumlahStok);

  write('Harga satuan (Rp)  : ');
  readln(hargaSatuan);

  tersedia := jumlahStok > 0;
  nilaiInventaris := jumlahStok * hargaSatuan;

  writeln;
  writeln(GARIS_GANDA);
  writeln(NAMA_TOKO);
  writeln(GARIS_GANDA);
  writeln('Kode Barang    : ', kodeBarang);
  writeln('Nama Barang    : ', namaBarang);
  writeln('Kategori       : ', kategori);
  writeln('Stok           : ', jumlahStok, ' unit');
  writeln('Harga Satuan   : Rp ', hargaSatuan:0:2);
  writeln('Nilai Total    : Rp ', nilaiInventaris:0:2);
  writeln(GARIS_TUNGGAL);

  if tersedia then
    writeln('Status         : TERSEDIA')
  else
    writeln('Status         : HABIS');

  writeln(GARIS_GANDA);
end.

9.6 Contoh Keluaran

Formulir Pendataan Barang
------------------------------------------

Kode barang        : ELK-001
Nama barang        : Laptop ASUS VivoBook 14
Kategori (1 huruf) : L
Jumlah stok        : 15
Harga satuan (Rp)  : 8500000

==========================================
Elektro Jaya
==========================================
Kode Barang    : ELK-001
Nama Barang    : Laptop ASUS VivoBook 14
Kategori       : L
Stok           : 15 unit
Harga Satuan   : Rp 8500000.00
Nilai Total    : Rp 127500000.00
------------------------------------------
Status         : TERSEDIA
==========================================

9.7 Pembahasan

Beberapa keputusan perancangan penting pada program ini.

  1. Tipe currency untuk harga. Nilai 8.500.000 dikalikan 15 menghasilkan 127.500.000. Bila memakai tipe real, hasilnya bisa sedikit menyimpang karena presisi floating point. Dengan currency, hasilnya eksak.
  2. Tipe word untuk stok. Jumlah stok tidak mungkin negatif dan tidak lebih dari 65.535. Tipe word memilih rentang tepat sekaligus mendokumentasikan bahwa nilai ini tidak boleh negatif.
  3. Tipe char untuk kategori. Karena kategori hanya satu huruf, char lebih tepat dan lebih hemat memori daripada string.
  4. Konstanta bertipe untuk nama toko. Panjang nama dibatasi 20 karakter dengan notasi string[20]. Ini menghindari penggunaan memori berlebihan dan memastikan format konsisten.
  5. Boolean untuk status. Meskipun status bisa disimpan sebagai string "TERSEDIA"/"HABIS", menyimpannya sebagai boolean tersedia memisahkan data dari penyajian. Nanti, ketika kita memerlukan format tampilan berbeda, kita cukup mengubah blok keluaran tanpa menyentuh logika.

9.8 Pengembangan Selanjutnya

Modul Pengembangan
Modul 4Menambahkan perhitungan diskon dan pajak dengan operator
Modul 5Memperhalus format tampilan dengan lebar field
Modul 6Menambahkan validasi rentang untuk setiap masukan
Modul 8Mendata banyak barang sekaligus dengan perulangan
Modul 20Mengelompokkan field ke dalam record Barang
Modul 25Menyimpan data inventaris ke berkas
10

Rangkuman

Poin-poin kunci yang perlu diingat dari Modul 3

  1. Variabel menyimpan nilai yang dapat berubah selama program berjalan, dideklarasikan di blok var.
  2. Konstanta menyimpan nilai tetap yang tidak dapat diubah setelah dideklarasikan, dideklarasikan di blok const.
  3. Identifier harus dimulai dengan huruf atau garis bawah, diikuti huruf, angka, atau garis bawah. Tidak boleh mengandung spasi atau tanda baca. Pascal bersifat case-insensitive.
  4. Reserved words seperti begin, end, var, const tidak boleh dipakai sebagai identifier.
  5. Tipe integer tersedia dalam berbagai ukuran: byte, shortint, smallint, word, integer, longint, int64. Pilih berdasarkan rentang nilai.
  6. Tipe real meliputi single, double, extended, comp, dan currency. Untuk uang, gunakan currency.
  7. Char menyimpan satu karakter (1 byte), sedangkan string menyimpan banyak karakter. Notasi string[n] membatasi panjang maksimal.
  8. Boolean hanya memiliki nilai true atau false.
  9. Konstanta tak bertipe mendefinisikan nilai tanpa tipe eksplisit. Konstanta bertipe menuliskan tipe secara eksplisit dan berguna untuk mengontrol ukuran memori.
  10. Selalu inisialisasi eksplisit. Jangan bergantung pada nilai default, terutama untuk variabel lokal.
  11. Waspadai overflow. Pilih tipe yang cukup besar untuk rentang nilai Anda. Gunakan {$Q+} untuk mendeteksi overflow saat runtime.
  12. Jangan pakai real untuk uang. Gunakan currency agar tidak ada kesalahan pembulatan.
Sebelum Melanjutkan

Pastikan Anda sudah terbiasa memilih tipe data yang tepat untuk setiap situasi. Cobalah melihat program-program kecil di sekitar Anda dan pikirkan tipe data apa yang cocok untuk setiap field. Modul 4 akan membahas operator dan ekspresi, termasuk konversi antar tipe.

11

Referensi

Sumber rujukan yang digunakan dalam penyusunan modul ini

Buku Teks

  1. Jensen, K., & Wirth, N. (1991). Pascal User Manual and Report (4th ed.). Springer-Verlag. Bab 6 membahas tipe data sederhana secara formal.
  2. Cantu, M. (2020). Object Pascal Handbook. Marco Cantu. Bab 3 dan 4 membahas tipe data dan variabel pada Free Pascal dan Delphi modern.
  3. Cooper, D., & Clancy, M. (1982). Oh! Pascal! W. W. Norton & Company. Bab tentang variabel dan konstanta dengan pendekatan pedagogis yang sangat baik.
  4. Grogono, P. (1995). Programming with Pascal. Addison-Wesley. Bab 3 membahas tipe data dan deklarasi.
  5. Savitch, W. (2009). Problem Solving with C++ (7th ed.). Pearson. Meskipun bukan tentang Pascal, bab tentang tipe data dan representasi bilangan sangat relevan.

Dokumentasi Resmi

  1. Free Pascal Team. Free Pascal Reference Guide. Bab tentang tipe data, variabel, dan konstanta. Tersedia di freepascal.org/docs.html.
  2. Free Pascal Team. Free Pascal Programmer's Guide. Bab tentang identifier, reserved words, dan direktif kompilator.
  3. Lazarus IDE Documentation. Panduan penggunaan IDE dan pengenalan tipe data. Tersedia di wiki.lazarus.freepascal.org.

Artikel dan Sumber Daring

  1. IEEE Computer Society. (1990). IEEE Standard for Pascal (IEEE Std 770-1983). Bab tentang tipe data dan deklarasi.
  2. Goldberg, D. (1991). "What Every Computer Scientist Should Know About Floating-Point Arithmetic." ACM Computing Surveys, 23(1), 5-48. Artikel klasik yang menjelaskan mengapa real tidak cocok untuk uang.
  3. Free Pascal Community Forum. Diskusi tentang perbedaan tipe integer di berbagai platform.