Pascal - Panduan Cepat
Pascal adalah bahasa tingkat tinggi dengan tujuan umum yang awalnya dikembangkan oleh Niklaus Wirth pada awal tahun 1970-an. Ini dikembangkan untuk pengajaran pemrograman sebagai disiplin sistematis dan untuk mengembangkan program yang andal dan efisien.
Pascal adalah bahasa berbasis Algol dan mencakup banyak konstruksi Algol. Algol 60 adalah bagian dari Pascal. Pascal menawarkan beberapa tipe data dan struktur pemrograman. Sangat mudah untuk memahami dan memelihara program Pascal.
Pascal semakin populer di arena pengajaran dan akademisi karena berbagai alasan:
- Mudah untuk dipelajari.
- Bahasa terstruktur.
- Ini menghasilkan program yang transparan, efisien dan andal.
- Ini dapat dikompilasi pada berbagai platform komputer.
Fitur Bahasa Pascal
Pascal memiliki beberapa fitur berikut -
- Pascal adalah bahasa yang diketik dengan kuat.
- Ini menawarkan pemeriksaan kesalahan ekstensif.
- Ini menawarkan beberapa tipe data seperti array, catatan, file, dan set.
- Ini menawarkan berbagai struktur pemrograman.
- Ini mendukung pemrograman terstruktur melalui fungsi dan prosedur.
- Ini mendukung pemrograman berorientasi objek.
Fakta tentang Pascal
Bahasa Pascal dinamai Blaise Pascal, matematikawan Prancis dan pelopor dalam pengembangan komputer.
Niklaus Wirth menyelesaikan pengembangan bahasa pemrograman Pascal asli pada tahun 1970.
Pascal didasarkan pada gaya terstruktur blok dari bahasa pemrograman Algol.
Pascal dikembangkan sebagai bahasa yang cocok untuk mengajar pemrograman sebagai disiplin sistematis, yang implementasinya dapat diandalkan dan efisien.
ISO 7185 Pascal Standard awalnya diterbitkan pada tahun 1983.
Pascal adalah bahasa tingkat tinggi utama yang digunakan untuk pengembangan di Apple Lisa, dan di tahun-tahun awal Mac.
Pada tahun 1986, Apple Computer merilis implementasi Object Pascal yang pertama, dan pada tahun 1993, Pascal Standards Committee menerbitkan sebuah Ekstensi Berorientasi Objek ke Pascal.
Mengapa menggunakan Pascal?
Pascal memungkinkan pemrogram untuk menentukan tipe data terstruktur yang kompleks dan membangun struktur data yang dinamis dan rekursif, seperti daftar, pohon, dan grafik. Pascal menawarkan fitur seperti record, enumeration, subranges, variabel yang dialokasikan secara dinamis dengan pointer dan set terkait.
Pascal memungkinkan definisi prosedur bersarang ke tingkat kedalaman apa pun. Ini benar-benar menyediakan lingkungan pemrograman yang bagus untuk mempelajari pemrograman sebagai disiplin sistematis berdasarkan konsep dasar.
Di antara implementasi Pascal yang paling menakjubkan adalah -
- Skype
- Komandan Total
- TeX
- Macromedia Captivate
- Apple Lisa
- Berbagai Game PC
- Sistem Tertanam
Ada beberapa kompiler dan interpreter Pascal yang tersedia untuk penggunaan umum. Diantaranya adalah -
Turbo Pascal - menyediakan IDE dan kompiler untuk menjalankan program Pascal pada CP / M, CP / M-86, DOS, Windows dan Macintosh.
Delphi- menyediakan kompiler untuk menjalankan Object Pascal dan menghasilkan kode asli untuk sistem operasi Windows 32 dan 64-bit, serta Mac OS X dan iOS 32-bit. Embarcadero berencana membangun dukungan untuk sistem operasi Linux dan Android.
Free Pascal- Ini adalah kompiler gratis untuk menjalankan program Pascal dan Object Pascal. Kompiler Pascal gratis adalah kompiler Pascal 32- dan 64-bit Turbo Pascal dan Delphi yang kompatibel untuk Linux, Windows, OS / 2, FreeBSD, Mac OS X, DOS dan beberapa platform lainnya.
Turbo51 - Ini adalah kompiler Pascal gratis untuk keluarga mikrokontroler 8051, dengan sintaks Turbo Pascal 7.
Oxygene - Ini adalah kompiler Object Pascal untuk platform .NET dan Mono.
GNU Pascal (GPC) - Ini adalah kompiler Pascal yang terdiri dari front end untuk GNU Compiler Collection.
Kami akan menggunakan Free Pascal dalam tutorial ini. Anda dapat mengunduh Pascal Gratis untuk sistem operasi Anda dari tautan: Unduh Pascal Gratis
Menginstal Pascal Gratis di Linux
Distribusi Linux Free Pascal hadir dalam tiga bentuk -
Sebuah tar.gz versi, juga tersedia sebagai file terpisah.
Sebuah .rpm Versi (Red Hat Package Manager).
Sebuah .deb (Debian) versi.
Kode instalasi untuk versi .rpm ::
rpm -i fpc-X.Y.Z-N.ARCH.rpm
Di mana XYZ adalah nomor versi dari file .rpm, dan ARCH adalah salah satu arsitektur yang didukung (i386, x86_64, dll.).
Kode instalasi untuk versi Debian (seperti Ubuntu) -
dpkg -i fpc-XXX.deb
Di mana XXX adalah nomor versi dari file .deb.
Untuk detailnya baca: Panduan Instalasi Pascal Gratis
Menginstal Pascal Gratis di Mac
Jika Anda menggunakan Mac OS X, cara termudah untuk menggunakan Free Pascal adalah mengunduh lingkungan pengembangan Xcode dari situs web Apple dan ikuti petunjuk penginstalan sederhana. Setelah Anda menyiapkan Xcode, Anda akan dapat menggunakan kompiler Free Pascal.
Menginstal Pascal Gratis di Windows
Untuk Windows, Anda akan mengunduh penginstal Windows, setup.exe. Ini adalah program instalasi biasa. Anda perlu mengambil langkah-langkah berikut untuk instalasi -
Pilih direktori.
Pilih bagian dari paket yang ingin Anda instal.
Secara opsional, pilih untuk mengaitkan ekstensi .pp atau .pas dengan Free Pascal IDE.
Untuk detailnya baca: Panduan Instalasi Pascal Gratis
Editor Teks
Ini akan digunakan untuk mengetik program Anda. Contoh beberapa editor termasuk Windows Notepad, perintah OS Edit, Brief, Epsilon, EMACS, dan vim atau vi.
Nama dan versi editor teks dapat berbeda pada sistem operasi yang berbeda. Misalnya, Notepad akan digunakan pada Windows dan vim atau vi dapat digunakan pada windows serta Linux atau UNIX.
File yang Anda buat dengan editor Anda disebut file sumber dan berisi kode sumber program. File sumber untuk program Pascal biasanya dinamai dengan ekstensi.pas.
Sebelum memulai pemrograman Anda, pastikan Anda memiliki satu editor teks dan Anda memiliki cukup pengalaman untuk menulis program komputer, simpan dalam sebuah file, kompilasi dan terakhir jalankan.
Sebelum kita mempelajari blok bangunan dasar dari bahasa pemrograman Pascal, mari kita lihat struktur program Pascal minimal sehingga kita dapat menjadikannya sebagai referensi di bab-bab selanjutnya.
Struktur Program Pascal
Program Pascal pada dasarnya terdiri dari bagian-bagian berikut -
- Nama program
- Menggunakan perintah
- Ketik deklarasi
- Deklarasi konstan
- Variabel deklarasi
- Deklarasi fungsi
- Deklarasi prosedur
- Blok program utama
- Pernyataan dan Ekspresi dalam setiap blok
- Comments
Setiap program pascal umumnya memiliki pernyataan heading, deklarasi dan bagian eksekusi secara ketat dalam urutan itu. Format berikut menunjukkan sintaks dasar untuk program Pascal -
program {name of the program}
uses {comma delimited names of libraries you use}
const {global constant declaration block}
var {global variable declaration block}
function {function declarations, if any}
{ local variables }
begin
...
end;
procedure { procedure declarations, if any}
{ local variables }
begin
...
end;
begin { main program block starts}
...
end. { the end of main program block }
Contoh Pascal Hello World
Berikut ini adalah kode pascal sederhana yang akan mencetak kata-kata "Halo, Dunia!" -
program HelloWorld;
uses crt;
(* Here the main program block starts *)
begin
writeln('Hello, World!');
readkey;
end.
Ini akan menghasilkan hasil sebagai berikut -
Hello, World!
Mari kita lihat berbagai bagian dari program di atas -
Baris pertama program program HelloWorld; menunjukkan nama program.
Baris kedua program uses crt; adalah perintah preprocessor, yang memberi tahu kompilator untuk memasukkan unit crt sebelum pergi ke kompilasi sebenarnya.
Baris berikutnya yang disertakan dalam pernyataan begin dan end adalah blok program utama. Setiap blok di Pascal diapit dalam abegin pernyataan dan endpernyataan. Namun, pernyataan akhir yang menunjukkan akhir dari program utama diikuti dengan tanda titik (.), Bukan titik koma (;).
Itu begin Pernyataan dari blok program utama adalah tempat eksekusi program dimulai.
Garis di dalamnya (*...*) akan diabaikan oleh kompilator dan telah dimasukkan untuk menambahkan comment dalam program.
Pernyataan writeln('Hello, World!');menggunakan fungsi writeln yang tersedia di Pascal yang menyebabkan pesan "Hello, World!" untuk ditampilkan di layar.
Pernyataan readkey;memungkinkan tampilan untuk berhenti sampai pengguna menekan sebuah tombol. Ini adalah bagian dari unit crt. Sebuah unit seperti perpustakaan di Pascal.
Pernyataan terakhir end. mengakhiri program Anda.
Kompilasi dan Jalankan Program Pascal
Buka editor teks dan tambahkan kode yang disebutkan di atas.
Simpan file sebagai hello.pas
Buka prompt perintah dan buka direktori tempat Anda menyimpan file.
Ketik fpc hello.pas pada command prompt dan tekan enter untuk mengkompilasi kode Anda.
Jika tidak ada kesalahan dalam kode Anda, prompt perintah akan membawa Anda ke baris berikutnya dan akan menghasilkan hello file yang dapat dieksekusi dan hello.o file objek.
Sekarang, ketik hello di command prompt untuk menjalankan program Anda.
Anda akan dapat melihat "Hello World" tercetak di layar dan program menunggu sampai Anda menekan tombol apa saja.
$ fpc hello.pas Free Pascal Compiler version 2.6.0 [2011/12/23] for x86_64 Copyright (c) 1993-2011 by Florian Klaempfl and others Target OS: Linux for x86-64 Compiling hello.pas Linking hello 8 lines compiled, 0.1 sec $ ./hello
Hello, World!
Pastikan bahwa kompiler pascal gratis fpc ada di jalur Anda dan Anda menjalankannya di direktori yang berisi file sumber hello.pas.
Anda telah melihat struktur dasar program pascal, sehingga akan mudah untuk memahami blok bangunan dasar lainnya dari bahasa pemrograman pascal.
Variabel
Definisi variabel diletakkan di dalam blok yang diawali dengan a var kata kunci, diikuti dengan definisi variabel sebagai berikut:
var
A_Variable, B_Variable ... : Variable_Type;
Variabel pascal dideklarasikan di luar code-body dari fungsi yang berarti variabel tersebut tidak dideklarasikan di dalam begin dan end pasangan, tetapi mereka dideklarasikan setelah definisi dari prosedur / fungsi dan sebelum beginkata kunci. Untuk variabel global, mereka ditentukan setelah header program.
Fungsi / Prosedur
Di Pascal, a procedure adalah set instruksi yang akan dieksekusi, tanpa nilai kembali dan a functionadalah prosedur dengan nilai pengembalian. Definisi fungsi / prosedur adalah sebagai berikut -
Function Func_Name(params...) : Return_Value;
Procedure Proc_Name(params...);
Komentar
Komentar multiline diapit oleh tanda kurung kurawal dan tanda bintang sebagai (* ... *). Pascal mengizinkan komentar baris tunggal yang diapit dalam tanda kurung kurawal {...}.
(* This is a multi-line comments
and it will span multiple lines. *)
{ This is a single line comment in pascal }
Sensitivitas Kasus
Pascal adalah bahasa case non-sensitive, yang berarti Anda dapat menulis variabel, fungsi, dan prosedur Anda dalam kedua case. Seperti variabel A_Variable, a_variable dan A_VARIABLE memiliki arti yang sama dalam Pascal.
Pernyataan Pascal
Program Pascal terbuat dari pernyataan. Setiap pernyataan menentukan pekerjaan pasti dari program tersebut. Pekerjaan ini bisa berupa deklarasi, tugas, membaca data, menulis data, mengambil keputusan logis, mentransfer kontrol aliran program, dll.
Misalnya -
readln (a, b, c);
s := (a + b + c)/2.0;
area := sqrt(s * (s - a)*(s-b)*(s-c));
writeln(area);
Kata Cadangan di Pascal
Pernyataan dalam Pascal dirancang dengan beberapa kata Pascal tertentu, yang disebut kata yang dipesan. Misalnya, kata-kata, program, input, output, var, real, begin, readline, writeline dan end semuanya merupakan kata-kata yang dipesan.
Berikut adalah daftar kata-kata yang tersedia di Pascal.
dan | Himpunan | mulai | kasus | const |
div | melakukan | ke | lain | akhir |
mengajukan | untuk | fungsi | pergi ke | jika |
di | label | mod | nol | tidak |
dari | atau | penuh sesak | prosedur | program |
merekam | ulang | set | kemudian | untuk |
Tipe | sampai | var | sementara | dengan |
Kumpulan karakter dan Pengenal di Pascal
Kumpulan karakter Pascal terdiri dari -
Semua huruf besar (AZ)
Semua huruf kecil (az)
Semua digit (0-9)
Simbol khusus - + * /: =,. ;. () [] = {} `spasi
Entitas dalam program Pascal seperti variabel dan konstanta, tipe, fungsi, prosedur, dan catatan, dll., Memiliki nama atau pengenal. Pengenal adalah urutan huruf dan angka, dimulai dengan huruf. Simbol khusus dan kosong tidak boleh digunakan dalam pengenal.
Jenis data dari suatu entitas menunjukkan arti, batasan, nilai yang mungkin, operasi, fungsi dan mode penyimpanan yang terkait dengannya.
Tipe integer, real, Boolean, dan karakter disebut sebagai tipe data standar. Tipe data dapat dikategorikan sebagai tipe data skalar, pointer dan terstruktur. Contoh tipe data skalar adalah integer, real, Boolean, character, subrange dan enumerated. Tipe data terstruktur dibuat dari tipe skalar; misalnya, array, record, file, dan set. Kita akan membahas tipe data pointer nanti.
Jenis Data Pascal
Tipe data Pascal dapat diringkas seperti di bawah ini pada diagram berikut -
Ketik Deklarasi
Deklarasi type digunakan untuk mendeklarasikan tipe data dari sebuah identifier. Sintaks dari deklarasi tipe adalah -
type-identifier-1, type-identfier-2 = type-specifier;
Misalnya, deklarasi berikut mendefinisikan variabel hari dan usia sebagai tipe integer, yes dan true sebagai tipe Boolean, nama dan kota sebagai tipe string, biaya dan pengeluaran sebagai tipe nyata.
type
days, age = integer;
yes, true = boolean;
name, city = string;
fees, expenses = real;
Jenis Integer
Tabel berikut memberi Anda detail tentang tipe integer standar dengan ukuran penyimpanan dan rentang nilai yang digunakan di Object Pascal -
Tipe | Minimum | Maksimum | Format |
---|---|---|---|
Bilangan bulat | -2147483648 | 2147483647 | ditandatangani 32-bit |
Kardinal | 0 | 4294967295 | unsigned 32-bit |
Shortint | -128 | 127 | ditandatangani 8-bit |
Smallint | -32768 | 32767 | ditandatangani 16-bit |
Longint | -2147483648 | 2147483647 | ditandatangani 32-bit |
Int64 | -2 ^ 63 | 2 ^ 63 - 1 | ditandatangani 64-bit |
Byte | 0 | 255 | unsigned 8-bit |
Kata | 0 | 65535 | unsigned 16-bit |
Kata panjang | 0 | 4294967295 | unsigned 32-bit |
Konstanta
Penggunaan konstanta membuat program lebih mudah dibaca dan membantu menjaga jumlah khusus di satu tempat di awal program. Pascal memungkinkan konstanta numerik, logika, string dan karakter . Konstanta dapat dideklarasikan di bagian deklarasi program dengan menentukanconst pernyataan.
Sintaks deklarasi tipe konstan adalah sebagai berikut -
const
Identifier = contant_value;
Berikut adalah beberapa contoh deklarasi konstan -
VELOCITY_LIGHT = 3.0E=10;
PIE = 3.141592;
NAME = 'Stuart Little';
CHOICE = yes;
OPERATOR = '+';
Semua deklarasi konstan harus diberikan sebelum deklarasi variabel.
Jenis yang disebutkan
Tipe data yang dihitung adalah tipe data yang ditentukan pengguna. Mereka memungkinkan nilai ditentukan dalam daftar. Hanya operator penugasan dan operator relasional yang diizinkan pada tipe data yang disebutkan. Tipe data yang dicacah dapat dideklarasikan sebagai berikut -
type
enum-identifier = (item1, item2, item3, ... )
Berikut adalah beberapa contoh deklarasi tipe enumerasi -
type
SUMMER = (April, May, June, July, September);
COLORS = (Red, Green, Blue, Yellow, Magenta, Cyan, Black, White);
TRANSPORT = (Bus, Train, Airplane, Ship);
Urutan item yang terdaftar dalam domain dari jenis enumerasi menentukan urutan item. Misalnya, pada tipe SUMMER yang dicacah, April datang sebelum Mei, Mei datang sebelum Juni, dan seterusnya. Domain pengenal jenis yang disebutkan tidak boleh terdiri dari konstanta numerik atau karakter.
Jenis Subrange
Jenis subrange memungkinkan variabel untuk mengasumsikan nilai yang berada dalam kisaran tertentu. Misalnya, jika usia pemilih harus antara 18 hingga 100 tahun, variabel bernama usia dapat dideklarasikan sebagai -
var
age: 18 ... 100;
Kami akan melihat deklarasi variabel secara rinci di bagian selanjutnya. Anda juga dapat menentukan tipe subrange menggunakan deklarasi type. Sintaks untuk mendeklarasikan tipe subrange adalah sebagai berikut -
type
subrange-identifier = lower-limit ... upper-limit;
Berikut adalah beberapa contoh deklarasi tipe subrange -
const
P = 18;
Q = 90;
type
Number = 1 ... 100;
Value = P ... Q;
Tipe subrange dapat dibuat dari subset tipe enumerasi yang sudah ditentukan, Misalnya -
type
months = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec);
Summer = Apr ... Aug;
Winter = Oct ... Dec;
Variabel tidak lain adalah nama yang diberikan ke area penyimpanan yang dapat dimanipulasi oleh program kami. Setiap variabel di Pascal memiliki tipe tertentu, yang menentukan ukuran dan tata letak memori variabel; kisaran nilai yang dapat disimpan dalam memori itu; dan set operasi yang dapat diterapkan ke variabel.
Nama variabel dapat terdiri dari huruf, angka, dan karakter garis bawah. Ini harus dimulai dengan huruf atau garis bawah. Pascal adalahnot case-sensitive, jadi huruf besar dan kecil artinya sama di sini. Berdasarkan tipe dasar yang dijelaskan pada bab sebelumnya, akan ada tipe variabel dasar berikut -
Variabel Dasar di Pascal
Sr Tidak | Jenis & Deskripsi |
---|---|
1 | Character Biasanya satu oktet (satu byte). Ini adalah tipe integer. |
2 | Integer Ukuran bilangan bulat paling alami untuk mesin. |
3 | Real Nilai floating point presisi tunggal. |
4 | Boolean Menentukan nilai logika benar atau salah. Ini juga merupakan tipe integer. |
5 | Enumerated Menentukan daftar yang ditentukan pengguna. |
6 | Subrange Merepresentasikan variabel, yang nilainya berada dalam suatu rentang. |
7 | String Menyimpan serangkaian karakter. |
Bahasa pemrograman Pascal juga memungkinkan untuk mendefinisikan berbagai jenis variabel lainnya, yang akan kita bahas pada bab-bab selanjutnya seperti Pointer, Array, Records, Set, dan File, dll. Untuk bab ini, mari kita pelajari hanya tipe variabel dasar.
Deklarasi Variabel di Pascal
Semua variabel harus dideklarasikan sebelum digunakan dalam program Pascal. Semua deklarasi variabel diikuti oleh kata kunci var . Deklarasi menentukan daftar variabel, diikuti oleh titik dua (:) dan tipe. Sintaks deklarasi variabel adalah -
var
variable_list : type;
Di sini, tipe harus merupakan tipe data Pascal yang valid termasuk karakter, integer, real, boolean, atau tipe data yang ditentukan pengguna, dll., Dan variable_list dapat terdiri dari satu atau lebih nama pengenal yang dipisahkan dengan koma. Beberapa deklarasi variabel yang valid ditampilkan di sini -
var
age, weekdays : integer;
taxrate, net_income: real;
choice, isready: boolean;
initials, grade: char;
name, surname : string;
Dalam tutorial sebelumnya, kita telah membahas bahwa Pascal memungkinkan untuk mendeklarasikan sebuah tipe. Suatu tipe dapat diidentifikasi dengan nama atau pengenal. Jenis ini dapat digunakan untuk mendefinisikan variabel jenis itu. Sebagai contoh,
type
days, age = integer;
yes, true = boolean;
name, city = string;
fees, expenses = real;
Sekarang, tipe yang didefinisikan dapat digunakan dalam deklarasi variabel -
var
weekdays, holidays : days;
choice: yes;
student_name, emp_name : name;
capital: city;
cost: expenses;
Perhatikan perbedaan antara deklarasi tipe dan deklarasi var . Deklarasi tipe menunjukkan kategori atau kelas dari tipe seperti integer, real, dll., Sedangkan spesifikasi variabel menunjukkan tipe nilai yang dapat diambil variabel. Anda dapat membandingkan deklarasi tipe di Pascal dengan typedef di C. Yang terpenting, nama variabel mengacu pada lokasi memori di mana nilai variabel akan disimpan. Ini tidak terjadi dengan deklarasi type.
Variabel Inisialisasi di Pascal
Variabel diberi nilai dengan titik dua dan tanda sama dengan, diikuti dengan ekspresi konstan. Bentuk umum pemberian nilai adalah -
variable_name := value;
Secara default, variabel di Pascal tidak diinisialisasi dengan nol. Mereka mungkin mengandung nilai sampah. Jadi ini adalah praktik yang lebih baik untuk menginisialisasi variabel dalam program. Variabel dapat diinisialisasi (diberi nilai awal) dalam deklarasi mereka. Inisialisasi diikuti olehvar kata kunci dan sintaks inisialisasi adalah sebagai berikut -
var
variable_name : type = value;
Beberapa contohnya adalah -
age: integer = 15;
taxrate: real = 0.5;
grade: char = 'A';
name: string = 'John Smith';
Mari kita lihat contoh, yang menggunakan berbagai jenis variabel yang dibahas sejauh ini -
program Greetings;
const
message = ' Welcome to the world of Pascal ';
type
name = string;
var
firstname, surname: name;
begin
writeln('Please enter your first name: ');
readln(firstname);
writeln('Please enter your surname: ');
readln(surname);
writeln;
writeln(message, ' ', firstname, ' ', surname);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Please enter your first name:
John
Please enter your surname:
Smith
Welcome to the world of Pascal John Smith
Variabel yang Dihitung
Anda telah melihat bagaimana menggunakan tipe variabel sederhana seperti integer, real dan boolean. Sekarang, mari kita lihat variabel tipe enumerasi, yang dapat didefinisikan sebagai -
var
var1, var2, ... : enum-identifier;
Ketika Anda telah mendeklarasikan tipe enumerasi, Anda dapat mendeklarasikan variabel tipe itu. Sebagai contoh,
type
months = (January, February, March, April, May, June, July, August, September, October, November, December);
Var
m: months;
...
M := January;
Contoh berikut menggambarkan konsep -
program exEnumeration;
type
beverage = (coffee, tea, milk, water, coke, limejuice);
var
drink:beverage;
begin
writeln('Which drink do you want?');
drink := limejuice;
writeln('You can drink ', drink);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Which drink do you want?
You can drink limejuice
Variabel Subrange
Variabel subrange dideklarasikan sebagai -
var
subrange-name : lowerlim ... uperlim;
Contoh variabel subrange adalah -
var
marks: 1 ... 100;
grade: 'A' ... 'E';
age: 1 ... 25;
Program berikut menggambarkan konsep -
program exSubrange;
var
marks: 1 .. 100;
grade: 'A' .. 'E';
begin
writeln( 'Enter your marks(1 - 100): ');
readln(marks);
writeln( 'Enter your grade(A - E): ');
readln(grade);
writeln('Marks: ' , marks, ' Grade: ', grade);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Enter your marks(1 - 100):
100
Enter your grade(A - E):
A
Marks: 100 Grade: A
Konstanta adalah entitas yang tetap tidak berubah selama eksekusi program. Pascal hanya mengizinkan konstanta dari tipe berikut untuk dideklarasikan -
- Jenis ordinal
- Jenis set
- Jenis penunjuk (tetapi satu-satunya nilai yang diizinkan adalah Nihil).
- Tipe nyata
- Char
- String
Mendeklarasikan Konstanta
Sintaks untuk mendeklarasikan konstanta adalah sebagai berikut -
const
identifier = constant_value;
Tabel berikut memberikan contoh beberapa deklarasi konstanta yang valid -
Real type constant
Sr Tidak | Jenis & Contoh Konstan |
---|---|
1 | Ordinal(Integer)type constant valid_age = 21; |
2 | Set type constant Vokal = himpunan (A, E, I, O, U); |
3 | Pointer type constant P = NIL; |
4 | e = 2,7182818; velocity_light = 3,0E + 10; |
5 | Character type constant Operator = '+'; |
6 | String type constant presiden = 'Johnny Depp'; |
Contoh berikut menggambarkan konsep -
program const_circle (input,output);
const
PI = 3.141592654;
var
r, d, c : real; {variable declaration: radius, dia, circumference}
begin
writeln('Enter the radius of the circle');
readln(r);
d := 2 * r;
c := PI * d;
writeln('The circumference of the circle is ',c:7:2);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Enter the radius of the circle
23
The circumference of the circle is 144.51
Amati pemformatan dalam pernyataan output program. Variabel c harus diformat dengan jumlah digit 7 dan 2 digit setelah tanda desimal. Pascal memungkinkan format keluaran seperti itu dengan variabel numerik.
Operator adalah simbol yang memberi tahu kompiler untuk melakukan manipulasi matematika atau logika tertentu. Pascal mengizinkan jenis operator berikut -
- Operator aritmatika
- Operator relasional
- Operator Boolean
- Operator bit
- Atur operator
- Operator string
Mari kita bahas operator aritmatika, relasional, Boolean dan bit satu per satu. Kami akan membahas operator set dan operasi string nanti.
Operator Aritmatika
Tabel berikut menunjukkan semua operator aritmatika yang didukung oleh Pascal. Asumsikan variabelA memegang 10 dan variabel B memegang 20, lalu -
Tunjukkan Contoh
Operator | Deskripsi | Contoh |
---|---|---|
+ | Menambahkan dua operan | A + B akan menghasilkan 30 |
- | Mengurangi operan kedua dari yang pertama | A - B akan memberi -10 |
* | Menggandakan kedua operan | A * B akan memberi 200 |
/ | Membagi pembilang dengan penyebut | B / A akan memberi 2 |
% | Modulus Operator dan sisa setelah pembagian integer | B% A akan memberi 0 |
Operator Relasional
Tabel berikut menunjukkan semua operator relasional yang didukung oleh Pascal. Asumsikan variabelA memegang 10 dan variabel B memegang 20, lalu -
Tunjukkan Contoh
Operator | Deskripsi | Contoh |
---|---|---|
= | Memeriksa apakah nilai dari dua operan sama atau tidak, jika ya, maka kondisi menjadi benar. | (A = B) tidak benar. |
<> | Memeriksa apakah nilai dari dua operan sama atau tidak, jika nilainya tidak sama, maka kondisi menjadi benar. | (A <> B) benar. |
> | Memeriksa apakah nilai operan kiri lebih besar dari nilai operan kanan, jika ya, maka kondisi menjadi benar. | (A> B) tidak benar. |
< | Memeriksa apakah nilai operan kiri kurang dari nilai operan kanan, jika ya, maka kondisi menjadi benar. | (A <B) benar. |
> = | Memeriksa apakah nilai operan kiri lebih besar dari atau sama dengan nilai operan kanan, jika ya, maka kondisi menjadi benar. | (A> = B) tidak benar. |
<= | Memeriksa apakah nilai operan kiri kurang dari atau sama dengan nilai operan kanan, jika ya, maka kondisi menjadi benar. | (A <= B) benar. |
Operator Boolean
Tabel berikut menunjukkan semua operator Boolean yang didukung oleh bahasa Pascal. Semua operator ini bekerja pada operan Boolean dan menghasilkan hasil Boolean. Asumsikan variabelA berlaku dan variabel B memegang salah, lalu -
Tunjukkan Contoh
Operator | Deskripsi | Contoh |
---|---|---|
dan | Disebut operator Boolean AND. Jika kedua operan bernilai true, maka condition menjadi true. | (A dan B) salah. |
lalu | Ini mirip dengan operator AND, namun, ini menjamin urutan compiler mengevaluasi ekspresi logis. Operan kiri ke kanan dan kanan dievaluasi hanya jika perlu. | (A dan kemudian B) salah. |
atau | Disebut Boolean OR Operator. Jika salah satu dari dua operan benar, maka kondisi menjadi benar. | (A atau B) benar. |
atau | Ini mirip dengan Boolean OR, namun, ini menjamin urutan compiler mengevaluasi ekspresi logis. Operan kiri ke kanan dan kanan dievaluasi hanya jika perlu. | (A atau B) benar. |
tidak | Disebut Boolean NOT Operator. Digunakan untuk membalikkan keadaan logis operannya. Jika kondisi benar, maka operator NOT akan membuatnya salah. | tidak (A dan B) benar. |
Operator Bit
Operator bitwise bekerja pada bit dan melakukan operasi bit demi bit. Semua operator ini bekerja pada operan integer dan menghasilkan hasil integer. Tabel kebenaran untuk bitwise dan (&), bitwise atau (|), dan bitwise not (~) adalah sebagai berikut -
p | q | p & q | p | q | ~ p | ~ q |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 0 | 0 |
1 | 0 | 0 | 1 | 0 | 1 |
Asumsikan jika A = 60; dan B = 13; sekarang dalam format biner mereka akan menjadi sebagai berikut -
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A ^ B = 0011 0001
~ A = 1100 0011
Operator Bitwise yang didukung oleh Pascal tercantum dalam tabel berikut. Asumsikan variabel A memiliki 60 dan variabel B memiliki 13, maka:
Tunjukkan Contoh
Operator | Deskripsi | Contoh |
---|---|---|
& | Biner AND Operator menyalin sedikit ke hasil jika ada di kedua operan. | (A & B) akan menghasilkan 12, yaitu 0000 1100 |
| | Biner ATAU Operator menyalin sedikit jika ada di salah satu operan. | (A | B) akan menghasilkan 61, yaitu 0011 1101 |
! | Biner ATAU Operator menyalin sedikit jika ada di salah satu operan. Ini sama dengan | operator. | (A! B) akan menghasilkan 61, yaitu 0011 1101 |
~ | Operator Pelengkap Binary Ones adalah unary dan memiliki efek bit 'membalik'. | (~ A) akan memberikan -61, yaitu 1100 0011 dalam bentuk komplemen 2 karena bilangan biner bertanda. |
<< | Operator Binary Left Shift. Nilai operan kiri dipindahkan ke kiri dengan jumlah bit yang ditentukan oleh operan kanan. | A << 2 akan menghasilkan 240, yaitu 1111 0000 |
>> | Operator Pergeseran Kanan Biner. Nilai operan kiri dipindahkan ke kanan dengan jumlah bit yang ditentukan oleh operan kanan. | A >> 2 akan menghasilkan 15, yaitu 0000 1111 |
Harap dicatat bahwa implementasi Pascal berbeda dalam operator bitwise. Free Pascal, kompiler yang kami gunakan di sini, bagaimanapun, mendukung operator bitwise berikut -
Operator | Operasi |
---|---|
tidak | Bitwise TIDAK |
dan | Bitwise DAN |
atau | Bitwise ATAU |
xor | Eksklusif bitwise ATAU |
shl | Sedikit bergeser ke kiri |
Shr | Sedikit bergeser ke kanan |
<< | Sedikit bergeser ke kiri |
>> | Sedikit bergeser ke kanan |
Diutamakan Operator di Pascal
Prioritas operator menentukan pengelompokan istilah dalam ekspresi. Ini memengaruhi bagaimana ekspresi dievaluasi. Operator tertentu memiliki prioritas lebih tinggi daripada yang lain; Misalnya, operator perkalian memiliki prioritas lebih tinggi daripada operator penjumlahan.
Misalnya x = 7 + 3 * 2; di sini, x ditetapkan 13, bukan 20 karena operator * memiliki prioritas lebih tinggi dari +, jadi pertama-tama dikalikan dengan 3 * 2 dan kemudian dijumlahkan menjadi 7.
Di sini, operator dengan prioritas tertinggi muncul di bagian atas tabel, operator dengan prioritas terendah muncul di bagian bawah. Dalam ekspresi, operator dengan prioritas lebih tinggi akan dievaluasi terlebih dahulu.
Tunjukkan Contoh
Operator | Hak lebih tinggi |
---|---|
~, tidak, | Paling tinggi |
*, /, div, mod, dan, & | |
|,!, +, -, atau, | |
=, <>, <, <=,>,> =, in | |
atau yang lain, lalu | Terendah |
Struktur pengambilan keputusan mengharuskan pemrogram menentukan satu atau lebih kondisi untuk dievaluasi atau diuji oleh program, bersama dengan pernyataan atau pernyataan yang akan dieksekusi jika kondisi ditentukan benar, dan secara opsional, pernyataan lain akan dijalankan jika kondisinya ditentukan sebagai salah.
Berikut ini adalah bentuk umum dari struktur pengambilan keputusan khas yang ditemukan di sebagian besar bahasa pemrograman -
Bahasa pemrograman Pascal menyediakan jenis pernyataan pengambilan keputusan berikut. Klik tautan berikut untuk memeriksa detailnya.
Sr Tidak | Pernyataan & Deskripsi |
---|---|
1 | jika - maka pernyataan Sebuah if - then statement terdiri dari ekspresi boolean yang diikuti oleh satu atau beberapa pernyataan. |
2 | Pernyataan If-then-else Sebuah if - then statement bisa diikuti dengan opsional else statement, yang dijalankan jika ekspresi boolean salah. |
3 | pernyataan if bersarang Anda bisa menggunakannya if atau else if pernyataan di dalam yang lain if atau else if pernyataan. |
4 | pernyataan kasus SEBUAH case pernyataan memungkinkan variabel untuk diuji kesetaraan terhadap daftar nilai. |
5 | case - pernyataan lain Ini mirip dengan if-then-else pernyataan. Di sini, sebuahelse istilah mengikuti case statement. |
6 | pernyataan kasus bersarang Anda bisa menggunakannya case pernyataan di dalam yang lain case pernyataan. |
Mungkin ada situasi, ketika Anda perlu mengeksekusi blok kode beberapa kali. Secara umum, pernyataan dieksekusi secara berurutan: Pernyataan pertama dalam suatu fungsi dijalankan pertama, diikuti oleh yang kedua, dan seterusnya.
Bahasa pemrograman menyediakan berbagai struktur kontrol yang memungkinkan jalur eksekusi yang lebih rumit.
Pernyataan loop memungkinkan kita untuk mengeksekusi pernyataan atau sekelompok pernyataan beberapa kali dan berikut adalah bentuk umum dari pernyataan loop di sebagian besar bahasa pemrograman -
Bahasa pemrograman Pascal menyediakan jenis konstruksi loop berikut untuk menangani persyaratan perulangan. Klik tautan berikut untuk memeriksa detailnya.
Sr Tidak | Jenis & Deskripsi Loop |
---|---|
1 | while-do loop Mengulangi pernyataan atau sekelompok pernyataan saat kondisi tertentu benar. Ini menguji kondisi sebelum menjalankan badan perulangan. |
2 | for-do loop Menjalankan urutan pernyataan beberapa kali dan menyingkat kode yang mengelola variabel loop. |
3 | ulangi sampai loop Seperti pernyataan while, kecuali pernyataan itu menguji kondisi di akhir badan perulangan. |
4 | loop bersarang Anda dapat menggunakan satu atau lebih loop di dalam waktu lain, untuk, atau ulangi sampai loop. |
Pernyataan Kontrol Loop
Pernyataan kontrol loop mengubah eksekusi dari urutan normalnya. Saat eksekusi meninggalkan ruang lingkup, semua objek otomatis yang dibuat dalam lingkup itu dimusnahkan.
Pascal mendukung pernyataan kontrol berikut. Klik tautan berikut untuk memeriksa detailnya.
Sr Tidak | Pernyataan & Deskripsi Kontrol |
---|---|
1 | pernyataan istirahat Menghentikan loop atau case pernyataan dan transfer eksekusi ke pernyataan segera setelah perulangan atau pernyataan kasus. |
2 | lanjutkan pernyataan Menyebabkan loop melewatkan sisa tubuhnya dan segera menguji ulang kondisinya sebelum mengulangi. |
3 | pernyataan goto Transfer kontrol ke pernyataan berlabel. Meskipun tidak disarankan untuk menggunakan pernyataan goto dalam program Anda. |
Subprogram
Subprogram adalah unit / modul program yang melakukan tugas tertentu. Subprogram ini digabungkan untuk membentuk program yang lebih besar. Ini pada dasarnya disebut 'Desain modular'. Sebuah subprogram dapat dipanggil oleh subprogram / program, yang disebut program pemanggil.
Pascal menyediakan dua jenis subprogram -
Functions - subprogram ini mengembalikan satu nilai.
Procedures - subprogram ini tidak mengembalikan nilai secara langsung.
Fungsi
SEBUAH functionadalah sekelompok pernyataan yang bersama-sama melakukan tugas. Setiap program Pascal memiliki setidaknya satu fungsi, yaitu program itu sendiri, dan semua program yang paling remeh dapat mendefinisikan fungsi tambahan.
Sebuah fungsi declarationmemberi tahu kompilator tentang nama fungsi, tipe kembalian, dan parameter. Sebuah fungsidefinition menyediakan tubuh sebenarnya dari fungsi tersebut.
Pustaka standar Pascal menyediakan banyak fungsi bawaan yang dapat dipanggil oleh program Anda. Misalnya fungsiAppendStr() menambahkan dua string, function New() secara dinamis mengalokasikan memori ke variabel dan banyak fungsi lainnya.
Mendefinisikan Fungsi
Di Pascal, a functiondidefinisikan menggunakan kata kunci fungsi. Bentuk umum dari definisi fungsi adalah sebagai berikut -
function name(argument(s): type1; argument(s): type2; ...): function_type;
local declarations;
begin
...
< statements >
...
name:= expression;
end;
Definisi fungsi dalam Pascal terdiri dari sebuah fungsi header, lokal declarations dan sebuah fungsi body. Header fungsi terdiri dari fungsi kata kunci dan anamediberikan untuk fungsi tersebut. Inilah semua bagian dari sebuah fungsi -
Arguments- Argumen menetapkan hubungan antara program pemanggil dan pengidentifikasi fungsi dan juga disebut parameter formal. Parameter seperti placeholder. Saat suatu fungsi dipanggil, Anda meneruskan nilai ke parameter. Nilai ini disebut sebagai parameter atau argumen aktual. Daftar parameter mengacu pada jenis, urutan, dan jumlah parameter suatu fungsi. Penggunaan parameter formal semacam itu bersifat opsional. Parameter ini mungkin memiliki tipe data standar, tipe data yang ditentukan pengguna atau tipe data subrange.
Daftar parameter formal yang muncul dalam pernyataan fungsi dapat berupa variabel sederhana atau bersubstitusi, array atau variabel terstruktur, atau subprogram.
Return Type- Semua fungsi harus mengembalikan nilai, jadi semua fungsi harus diberi tipe. Itufunction-typeadalah tipe data dari nilai yang dikembalikan fungsi. Ini mungkin tipe standar, skalar atau subrange yang ditentukan pengguna tetapi tidak dapat menjadi tipe terstruktur.
Local declarations - Deklarasi lokal mengacu pada deklarasi untuk label, konstanta, variabel, fungsi, dan prosedur, yang hanya diterapkan pada badan fungsi.
Function Body- Badan fungsi berisi kumpulan pernyataan yang menentukan apa yang dilakukan fungsi. Itu harus selalu diapit di antara kata-kata awal dan akhir yang dipesan. Ini adalah bagian dari fungsi tempat semua penghitungan selesai. Harus ada pernyataan tugas jenis -name := expression;di badan fungsi yang memberikan nilai ke nama fungsi. Nilai ini dikembalikan saat dan saat fungsi dijalankan. Pernyataan terakhir dalam tubuh harus merupakan pernyataan akhir.
Berikut adalah contoh yang menunjukkan bagaimana mendefinisikan suatu fungsi dalam pascal -
(* function returning the max between two numbers *)
function max(num1, num2: integer): integer;
var
(* local variable declaration *)
result: integer;
begin
if (num1 > num2) then
result := num1
else
result := num2;
max := result;
end;
Deklarasi Fungsi
Sebuah fungsi declarationmemberi tahu compiler tentang nama fungsi dan cara memanggil fungsi tersebut. Badan sebenarnya dari fungsi tersebut dapat ditentukan secara terpisah.
Deklarasi fungsi memiliki bagian-bagian berikut -
function name(argument(s): type1; argument(s): type2; ...): function_type;
Untuk fungsi max () yang didefinisikan di atas, berikut adalah deklarasi fungsinya -
function max(num1, num2: integer): integer;
Deklarasi fungsi diperlukan saat Anda menentukan fungsi dalam satu file sumber dan Anda memanggil fungsi itu di file lain. Dalam kasus seperti itu, Anda harus mendeklarasikan fungsi di bagian atas file yang memanggil fungsi tersebut.
Memanggil Fungsi
Saat membuat fungsi, Anda memberikan definisi tentang apa yang harus dilakukan fungsi tersebut. Untuk menggunakan suatu fungsi, Anda harus memanggil fungsi itu untuk melakukan tugas yang ditentukan. Ketika program memanggil suatu fungsi, kontrol program dipindahkan ke fungsi yang dipanggil. Fungsi yang dipanggil melakukan tugas yang ditentukan, dan ketika pernyataan kembaliannya dijalankan atau ketika pernyataan akhir terakhir tercapai, ia mengembalikan kontrol program ke program utama.
Untuk memanggil suatu fungsi, Anda hanya perlu meneruskan parameter yang diperlukan bersama dengan nama fungsi, dan jika fungsi mengembalikan nilai, maka Anda dapat menyimpan nilai yang dikembalikan. Berikut adalah contoh sederhana untuk menunjukkan penggunaan -
program exFunction;
var
a, b, ret : integer;
(*function definition *)
function max(num1, num2: integer): integer;
var
(* local variable declaration *)
result: integer;
begin
if (num1 > num2) then
result := num1
else
result := num2;
max := result;
end;
begin
a := 100;
b := 200;
(* calling a function to get max value *)
ret := max(a, b);
writeln( 'Max value is : ', ret );
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Max value is : 200
Procedures adalah subprogram yang, alih-alih mengembalikan satu nilai, memungkinkan untuk mendapatkan sekelompok hasil.
Mendefinisikan Prosedur
Dalam Pascal, sebuah prosedur didefinisikan menggunakan procedurekata kunci. Bentuk umum dari definisi prosedur adalah sebagai berikut -
procedure name(argument(s): type1, argument(s): type 2, ... );
< local declarations >
begin
< procedure body >
end;
Sebuah prosedur definition di Pascal terdiri dari a header, lokal declarations dan a bodydari prosedur. Header prosedur terdiri dari kata kunciproceduredan nama yang diberikan untuk prosedur tersebut. Berikut adalah semua bagian dari prosedur -
Arguments- Argumen menetapkan hubungan antara program pemanggil dan pengenal prosedur dan juga disebut parameter formal. Aturan untuk argumen dalam prosedur sama dengan aturan untuk fungsi.
Local declarations - Deklarasi lokal mengacu pada deklarasi untuk label, konstanta, variabel, fungsi, dan prosedur, yang dapat diterapkan ke bagian isi prosedur saja.
Procedure Body- Badan prosedur berisi kumpulan pernyataan yang menentukan apa yang dilakukan prosedur. Itu harus selalu diapit di antara kata-kata awal dan akhir yang dipesan. Ini adalah bagian dari prosedur di mana semua penghitungan dilakukan.
Berikut ini adalah kode sumber untuk prosedur yang disebut findMin () . Prosedur ini mengambil 4 parameter x, y, z dan m dan menyimpan minimum di antara tiga variabel pertama dalam variabel bernama m. Variabel m dilewatireference (kita akan membahas argumen lewat dengan referensi nanti) -
procedure findMin(x, y, z: integer; var m: integer);
(* Finds the minimum of the 3 values *)
begin
if x < y then
m := x
else
m := y;
if z <m then
m := z;
end; { end of procedure findMin }
Deklarasi Prosedur
Sebuah prosedur declarationmemberi tahu kompiler tentang nama prosedur dan cara memanggil prosedur. Bagian sebenarnya dari prosedur dapat ditentukan secara terpisah.
Deklarasi prosedur memiliki sintaks berikut -
procedure name(argument(s): type1, argument(s): type 2, ... );
Harap dicatat bahwa name of the procedure is not associated with any type. Untuk prosedur yang ditentukan di atas findMin () , berikut adalah deklarasi -
procedure findMin(x, y, z: integer; var m: integer);
Memanggil Prosedur
Saat membuat prosedur, Anda memberikan definisi tentang apa yang harus dilakukan prosedur. Untuk menggunakan prosedur, Anda harus memanggil prosedur itu untuk melakukan tugas yang ditentukan. Ketika program memanggil prosedur, kontrol program ditransfer ke prosedur yang dipanggil. Prosedur yang dipanggil melakukan tugas yang ditentukan, dan ketika pernyataan akhir terakhirnya tercapai, ia mengembalikan kontrol ke program pemanggil.
Untuk memanggil suatu prosedur, Anda hanya perlu meneruskan parameter yang diperlukan bersama dengan nama prosedur seperti yang ditunjukkan di bawah ini -
program exProcedure;
var
a, b, c, min: integer;
procedure findMin(x, y, z: integer; var m: integer);
(* Finds the minimum of the 3 values *)
begin
if x < y then
m:= x
else
m:= y;
if z < m then
m:= z;
end; { end of procedure findMin }
begin
writeln(' Enter three numbers: ');
readln( a, b, c);
findMin(a, b, c, min); (* Procedure call *)
writeln(' Minimum: ', min);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Enter three numbers:
89 45 67
Minimum: 45
Subprogram Rekursif
Kita telah melihat bahwa suatu program atau subprogram dapat memanggil subprogram lain. Ketika subprogram memanggil dirinya sendiri, itu disebut sebagai panggilan rekursif dan prosesnya dikenal sebagai rekursi.
Untuk mengilustrasikan konsep tersebut, mari kita menghitung faktorial sebuah bilangan. Faktorial bilangan n didefinisikan sebagai -
n! = n*(n-1)!
= n*(n-1)*(n-2)!
...
= n*(n-1)*(n-2)*(n-3)... 1
Program berikut menghitung faktorial dari bilangan tertentu dengan memanggil dirinya sendiri secara rekursif.
program exRecursion;
var
num, f: integer;
function fact(x: integer): integer; (* calculates factorial of x - x! *)
begin
if x=0 then
fact := 1
else
fact := x * fact(x-1); (* recursive call *)
end; { end of function fact}
begin
writeln(' Enter a number: ');
readln(num);
f := fact(num);
writeln(' Factorial ', num, ' is: ' , f);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Enter a number:
5
Factorial 5 is: 120
Berikut adalah contoh lain, yang menghasilkan file Fibonacci Series untuk nomor tertentu menggunakan a recursive fungsi -
program recursiveFibonacci;
var
i: integer;
function fibonacci(n: integer): integer;
begin
if n=1 then
fibonacci := 0
else if n=2 then
fibonacci := 1
else
fibonacci := fibonacci(n-1) + fibonacci(n-2);
end;
begin
for i:= 1 to 10 do
write(fibonacci (i), ' ');
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
0 1 1 2 3 5 8 13 21 34
Argumen Subprogram
Jika sebuah subprogram (function or procedure) adalah dengan menggunakan argumen, ia harus mendeklarasikan variabel yang menerima nilai argumen. Variabel ini disebutformal parameters dari subprogram.
Parameter formal berperilaku seperti variabel lokal lain di dalam subprogram dan dibuat saat masuk ke subprogram dan dimusnahkan saat keluar.
Saat memanggil subprogram, ada dua cara argumen dapat diteruskan ke subprogram -
Sr Tidak | Jenis & Deskripsi Panggilan |
---|---|
1 | Panggilan berdasarkan nilai Metode ini menyalin nilai sebenarnya dari sebuah argumen ke dalam parameter formal subprogram. Dalam kasus ini, perubahan yang dilakukan pada parameter di dalam subprogram tidak berpengaruh pada argumen. |
2 | Panggil dengan referensi Metode ini menyalin alamat argumen ke dalam parameter formal. Di dalam subprogram, alamat digunakan untuk mengakses argumen sebenarnya yang digunakan dalam panggilan. Ini berarti bahwa perubahan yang dilakukan pada parameter mempengaruhi argumen. |
Secara default, Pascal menggunakan call by valueuntuk menyampaikan argumen. Secara umum, ini berarti bahwa kode di dalam subprogram tidak dapat mengubah argumen yang digunakan untuk memanggil subprogram. Program contoh yang kita gunakan dalam bab 'Pascal - Functions' memanggil fungsi bernama max () usingcall by value.
Sedangkan, program contoh yang disediakan di sini ( exProcedure ) memanggil prosedur findMin () menggunakancall by reference.
Cakupan dalam pemrograman apa pun adalah wilayah program di mana variabel yang ditentukan dapat memiliki keberadaannya dan di luar variabel itu tidak dapat diakses. Ada tiga tempat di mana variabel dapat dideklarasikan dalam bahasa pemrograman Pascal -
Di dalam subprogram atau blok yang disebut variabel lokal
Di luar semua subprogram yang disebut variabel global
Dalam definisi parameter subprogram disebut parameter formal
Mari kita jelaskan apa itu local dan global variabel dan parameter formal.
Variabel Lokal
Variabel yang dideklarasikan di dalam subprogram atau blok disebut variabel lokal. Mereka hanya dapat digunakan oleh pernyataan yang ada di dalam subprogram atau blok kode itu. Variabel lokal tidak diketahui subprogram di luar miliknya sendiri. Berikut adalah contoh penggunaan variabel lokal. Di sini, semua variabel a , b dan c lokal ke program bernama exLocal .
program exLocal;
var
a, b, c: integer;
begin
(* actual initialization *)
a := 10;
b := 20;
c := a + b;
writeln('value of a = ', a , ' b = ', b, ' and c = ', c);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
value of a = 10 b = 20 c = 30
Sekarang, mari kita memperluas program sedikit lagi, mari kita buat prosedur bernama display, yang akan memiliki kumpulan variabel a , b dan c sendiri dan menampilkan nilainya, langsung dari program exLocal .
program exLocal;
var
a, b, c: integer;
procedure display;
var
a, b, c: integer;
begin
(* local variables *)
a := 10;
b := 20;
c := a + b;
writeln('Winthin the procedure display');
writeln('value of a = ', a , ' b = ', b, ' and c = ', c);
end;
begin
a:= 100;
b:= 200;
c:= a + b;
writeln('Winthin the program exlocal');
writeln('value of a = ', a , ' b = ', b, ' and c = ', c);
display();
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Within the program exlocal
value of a = 100 b = 200 c = 300
Within the procedure display
value of a = 10 b = 20 c = 30
Variabel Global
Variabel global didefinisikan di luar fungsi, biasanya di atas program. Variabel global akan memegang nilainya sepanjang masa program Anda dan mereka dapat diakses di dalam salah satu fungsi yang ditentukan untuk program.
SEBUAH globalvariabel dapat diakses oleh fungsi apa pun. Artinya, variabel global tersedia untuk digunakan di seluruh program Anda setelah deklarasi. Berikut adalah contoh penggunaanglobal dan local variabel -
program exGlobal;
var
a, b, c: integer;
procedure display;
var
x, y, z: integer;
begin
(* local variables *)
x := 10;
y := 20;
z := x + y;
(*global variables *)
a := 30;
b:= 40;
c:= a + b;
writeln('Winthin the procedure display');
writeln(' Displaying the global variables a, b, and c');
writeln('value of a = ', a , ' b = ', b, ' and c = ', c);
writeln('Displaying the local variables x, y, and z');
writeln('value of x = ', x , ' y = ', y, ' and z = ', z);
end;
begin
a:= 100;
b:= 200;
c:= 300;
writeln('Winthin the program exlocal');
writeln('value of a = ', a , ' b = ', b, ' and c = ', c);
display();
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Within the program exlocal
value of a = 100 b = 200 c = 300
Within the procedure display
Displaying the global variables a, b, and c
value of a = 30 b = 40 c = 70
Displaying the local variables x, y, and z
value of x = 10 y = 20 z = 30
Harap dicatat bahwa tampilan prosedur memiliki akses ke variabel a, b dan c, yang merupakan variabel global sehubungan dengan tampilan serta variabel lokalnya sendiri. Suatu program dapat memiliki nama yang sama untuk variabel lokal dan global tetapi nilai variabel lokal di dalam suatu fungsi akan lebih diutamakan.
Mari kita ubah sedikit contoh sebelumnya, sekarang variabel lokal untuk tampilan prosedur memiliki nama yang sama dengan a , b , c -
program exGlobal;
var
a, b, c: integer;
procedure display;
var
a, b, c: integer;
begin
(* local variables *)
a := 10;
b := 20;
c := a + b;
writeln('Winthin the procedure display');
writeln(' Displaying the global variables a, b, and c');
writeln('value of a = ', a , ' b = ', b, ' and c = ', c);
writeln('Displaying the local variables a, b, and c');
writeln('value of a = ', a , ' b = ', b, ' and c = ', c);
end;
begin
a:= 100;
b:= 200;
c:= 300;
writeln('Winthin the program exlocal');
writeln('value of a = ', a , ' b = ', b, ' and c = ', c);
display();
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Within the program exlocal
value of a = 100 b = 200 c = 300
Within the procedure display
Displaying the global variables a, b, and c
value of a = 10 b = 20 c = 30
Displaying the local variables a, b, and c
value of a = 10 b = 20 c = 30
String di Pascal sebenarnya adalah urutan karakter dengan spesifikasi ukuran opsional. Karakter bisa berupa angka, huruf, kosong, karakter khusus atau kombinasi semuanya. Extended Pascal menyediakan banyak tipe objek string tergantung pada sistem dan implementasinya. Kami akan membahas jenis string yang lebih umum digunakan dalam program.
Anda dapat mendefinisikan string dengan banyak cara -
Character arrays - Ini adalah string karakter yang merupakan urutan dari nol atau lebih karakter berukuran byte yang diapit oleh tanda kutip tunggal.
String variables - Variabel tipe String, seperti yang didefinisikan di Turbo Pascal.
Short strings - Variabel tipe String dengan spesifikasi ukuran.
Null terminated strings - Variabel pchar Tipe.
AnsiStrings - Ansistring adalah string yang tidak memiliki batas panjang.
Pascal hanya menyediakan satu operator string, operator penggabungan string (+).
Contoh
Program berikut mencetak empat jenis string pertama. Kami akan menggunakan AnsiStrings di contoh berikutnya.
program exString;
var
greetings: string;
name: packed array [1..10] of char;
organisation: string[10];
message: pchar;
begin
greetings := 'Hello ';
message := 'Good Day!';
writeln('Please Enter your Name');
readln(name);
writeln('Please Enter the name of your Organisation');
readln(organisation);
writeln(greetings, name, ' from ', organisation);
writeln(message);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Please Enter your Name
John Smith
Please Enter the name of your Organisation
Infotech
Hello John Smith from Infotech
Contoh berikut menggunakan beberapa fungsi lagi, mari kita lihat -
program exString;
uses sysutils;
var
str1, str2, str3 : ansistring;
str4: string;
len: integer;
begin
str1 := 'Hello ';
str2 := 'There!';
(* copy str1 into str3 *)
str3 := str1;
writeln('appendstr( str3, str1) : ', str3 );
(* concatenates str1 and str2 *)
appendstr( str1, str2);
writeln( 'appendstr( str1, str2) ' , str1 );
str4 := str1 + str2;
writeln('Now str4 is: ', str4);
(* total lenghth of str4 after concatenation *)
len := byte(str4[0]);
writeln('Length of the final string str4: ', len);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
appendstr( str3, str1) : Hello
appendstr( str1, str2) : Hello There!
Now str4 is: Hello There! There!
Length of the final string str4: 18
Fungsi dan Prosedur Pascal String
Pascal mendukung berbagai fungsi dan prosedur yang memanipulasi string. Subprogram ini bervariasi dalam penerapannya. Di sini, kami membuat daftar berbagai subprogram manipulasi string yang disediakan oleh Free Pascal -
Sr.No. | Fungsi & Tujuan |
---|---|
1 | function AnsiCompareStr(const S1: ; const S2:):Integer; Membandingkan dua string |
2 | function AnsiCompareText(const S1: ; const S2:):Integer; Membandingkan dua string, case insensitive |
3 | function AnsiExtractQuotedStr(var Src: PChar; Quote: Char):; Menghapus kutipan dari string |
4 | function AnsiLastChar(const S:):PChar; Mendapat karakter terakhir dari string |
5 | function AnsiLowerCase(const s:): Mengonversi string menjadi huruf kecil semua |
6 | function AnsiQuotedStr(const S: ; Quote: Char):; Mengutip string |
7 | function AnsiStrComp(S1: PChar;S2: PChar):Integer; Membandingkan string yang peka huruf besar kecil |
8 | function AnsiStrIComp(S1: PChar; S2: PChar):Integer; Membandingkan string peka huruf besar kecil |
9 | function AnsiStrLComp(S1: PChar; S2: PChar; MaxLen: Cardinal):Integer; Membandingkan karakter L dari string case sensitive |
10 | function AnsiStrLIComp(S1: PChar; S2: PChar; MaxLen: Cardinal):Integer; Membandingkan karakter L dari string case insensitive |
11 | function AnsiStrLastChar(Str: PChar):PChar; Mendapat karakter terakhir dari string |
12 | function AnsiStrLower(Str: PChar):PChar; Mengonversi string menjadi huruf kecil semua |
13 | function AnsiStrUpper(Str: PChar):PChar; Mengonversi string menjadi huruf besar semua |
14 | function AnsiUpperCase(const s:):; Mengonversi string menjadi huruf besar semua |
15 | procedure AppendStr(var Dest: ; const S:); Menambahkan 2 string |
16 | procedure AssignStr(var P: PString; const S:); Menetapkan nilai string di heap |
17 | function CompareStr(const S1: ; const S2:):Integer; overload; Membandingkan dua string case sensitive |
18 | function CompareText(const S1: ; const S2:):Integer; Membandingkan dua string tidak peka huruf besar / kecil |
19 | procedure DisposeStr(S: PString); overload; Menghapus string dari heap |
20 | procedure DisposeStr(S: PShortString); overload; Menghapus string dari heap |
21 | function IsValidIdent( const Ident:):Boolean; Apakah string pengenal pascal yang valid |
22 | function LastDelimiter(const Delimiters: ; const S:):Integer; Kemunculan terakhir karakter dalam string |
23 | function LeftStr(const S: ; Count: Integer):; Mendapat karakter N pertama dari sebuah string |
24 | function LoadStr(Ident: Integer):; Memuat string dari sumber daya |
25 | function LowerCase(const s: ):; overload; Mengonversi string menjadi huruf kecil semua |
26 | function LowerCase(const V: variant ):; overload; Mengonversi string menjadi huruf kecil semua |
27 | function NewStr(const S:):PString; overload; Mengalokasikan string baru di heap |
28 | function RightStr(const S: ; Count: Integer):; Mendapat karakter N terakhir dari sebuah string |
29 | function StrAlloc(Size: Cardinal):PChar; Mengalokasikan memori untuk string |
30 | function StrBufSize(Str: PChar):SizeUInt; Menyimpan memori untuk string |
31 | procedure StrDispose(Str: PChar); Menghapus string dari heap |
32 | function StrPas(Str: PChar):; Mengonversi PChar menjadi string pascal |
33 | function StrPCopy(Dest: PChar; Source:):PChar; Menyalin string pascal |
34 | function StrPLCopy(Dest: PChar; Source: ; MaxLen: SizeUInt):PChar; Menyalin N byte dari string pascal |
35 | function UpperCase(const s:):; Mengonversi string menjadi huruf besar semua |
Pascal menyediakan tipe data Boolean yang memungkinkan pemrogram untuk mendefinisikan, menyimpan dan memanipulasi entitas logis, seperti konstanta, variabel, fungsi dan ekspresi, dll.
Nilai Boolean pada dasarnya adalah tipe integer. Variabel jenis Boolean memiliki dua kemungkinan nilai yang telah ditentukan sebelumnyaTrue dan False. Ekspresi yang menyelesaikan nilai Boolean juga bisa ditetapkan ke tipe Boolean.
Pascal gratis juga mendukung ByteBool, WordBool dan LongBooljenis. Ini adalah tipe Byte, Word atau Longint.
Nilai False setara dengan 0 (nol) dan nilai bukan nol apa pun dianggap True saat mengonversi ke nilai Boolean. Nilai Boolean True diubah menjadi -1 dalam hal ini ditetapkan ke variabel jenis LongBool.
Perlu dicatat bahwa operator logis and, or dan not ditentukan untuk tipe data Boolean.
Deklarasi Tipe Data Boolean
Variabel tipe Boolean dideklarasikan menggunakan kata kunci var.
var
boolean-identifier: boolean;
sebagai contoh,
var
choice: boolean;
Contoh
program exBoolean;
var
exit: boolean;
choice: char;
begin
writeln('Do you want to continue? ');
writeln('Enter Y/y for yes, and N/n for no');
readln(choice);
if(choice = 'n') then
exit := true
else
exit := false;
if (exit) then
writeln(' Good Bye!')
else
writeln('Please Continue');
readln;
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Do you want to continue?
Enter Y/y for yes, and N/n for no
N
Good Bye!
Y
Please Continue
Bahasa pemrograman Pascal menyediakan struktur data yang disebut array, yang dapat menyimpan kumpulan elemen berurutan berukuran tetap dengan tipe yang sama. Sebuah array digunakan untuk menyimpan kumpulan data, tetapi seringkali lebih berguna untuk menganggap array sebagai kumpulan variabel dengan tipe yang sama.
Alih-alih mendeklarasikan variabel individu, seperti number1, number2, ..., dan number100, Anda mendeklarasikan satu variabel array seperti angka dan menggunakan angka [1], angka [2], dan ..., angka [100] untuk mewakili variabel individu. Elemen tertentu dalam array diakses oleh indeks.
Semua array terdiri dari lokasi memori yang berdekatan. Alamat terendah sesuai dengan elemen pertama dan alamat tertinggi untuk elemen terakhir.
Harap dicatat bahwa jika Anda menginginkan array gaya C yang dimulai dari indeks 0, Anda hanya perlu memulai indeks dari 0, bukan 1.
Mendeklarasikan Array
Untuk mendeklarasikan sebuah array dalam Pascal, seorang programmer dapat mendeklarasikan tipe dan kemudian membuat variabel dari array tersebut atau secara langsung mendeklarasikan variabel array tersebut.
Bentuk umum deklarasi tipe array satu dimensi adalah -
type
array-identifier = array[index-type] of element-type;
Dimana,
array-identifier - menunjukkan nama tipe array.
index-type- menentukan subskrip dari array; ini dapat berupa tipe data skalar apa pun kecuali nyata
element-type - menentukan jenis nilai yang akan disimpan
Sebagai contoh,
type
vector = array [ 1..25] of real;
var
velocity: vector;
Sekarang, kecepatan adalah larik variabel berjenis vektor, yang cukup untuk menampung hingga 25 bilangan real.
Untuk memulai array dari indeks 0, deklarasinya adalah -
type
vector = array [ 0..24] of real;
var
velocity: vector;
Jenis Subskrip Array
Dalam Pascal, subskrip array dapat berupa jenis skalar apa pun seperti, integer, Boolean, enumerated atau subrange, kecuali real. Subskrip array bisa memiliki nilai negatif juga.
Sebagai contoh,
type
temperature = array [-10 .. 50] of real;
var
day_temp, night_temp: temperature;
Mari kita ambil contoh lain di mana subskrip adalah tipe karakter -
type
ch_array = array[char] of 1..26;
var
alphabet: ch_array;
Subskrip bisa dari jenis yang disebutkan -
type
color = ( red, black, blue, silver, beige);
car_color = array of [color] of boolean;
var
car_body: car_color;
Menginisialisasi Array
Dalam Pascal, array diinisialisasi melalui penugasan, baik dengan menetapkan subskrip tertentu atau menggunakan for-do loop.
Misalnya -
type
ch_array = array[char] of 1..26;
var
alphabet: ch_array;
c: char;
begin
...
for c:= 'A' to 'Z' do
alphabet[c] := ord[m];
(* the ord() function returns the ordinal values *)
Mengakses Elemen Array
Sebuah elemen diakses dengan mengindeks nama array. Ini dilakukan dengan menempatkan indeks elemen dalam tanda kurung siku setelah nama array. Misalnya -
a: integer;
a: = alphabet['A'];
Pernyataan di atas akan mengambil elemen pertama dari array bernama alfabet dan menetapkan nilai ke variabel a.
Berikut ini adalah contoh, yang akan menggunakan semua tiga konsep yang disebutkan di atas yaitu. deklarasi, tugas dan mengakses array -
program exArrays;
var
n: array [1..10] of integer; (* n is an array of 10 integers *)
i, j: integer;
begin
(* initialize elements of array n to 0 *)
for i := 1 to 10 do
n[ i ] := i + 100; (* set element at location i to i + 100 *)
(* output each array element's value *)
for j:= 1 to 10 do
writeln('Element[', j, '] = ', n[j] );
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109
Element[10] = 110
Array Pascal secara Detail
Array penting untuk Pascal dan membutuhkan lebih banyak detail. Ada beberapa konsep penting yang berhubungan dengan array yang harus jelas bagi programmer Pascal -
Sr Tidak | Konsep & Deskripsi |
---|---|
1 | Array multi-dimensi Pascal mendukung array multidimensi. Bentuk paling sederhana dari larik multidimensi adalah larik dua dimensi. |
2 | Array dinamis Dalam tipe array ini, panjang awal adalah nol. Panjang sebenarnya dari array harus diatur dengan standarSetLength fungsi. |
3 | Array yang dikemas Array ini dikemas dengan bit, yaitu, setiap karakter atau nilai kebenaran disimpan dalam byte yang berurutan daripada menggunakan satu unit penyimpanan, biasanya satu kata (4 byte atau lebih). |
4 | Meneruskan array ke subprogram Anda bisa meneruskan ke subprogram sebuah pointer ke sebuah array dengan menentukan nama array tanpa indeks. |
Pointer di Pascal mudah dan menyenangkan untuk dipelajari. Beberapa tugas pemrograman Pascal dilakukan lebih mudah dengan pointer, dan tugas lain, seperti alokasi memori dinamis, tidak dapat dilakukan tanpa menggunakan pointer. Jadi penting untuk mempelajari pointer untuk menjadi programmer Pascal yang sempurna. Mari mulai mempelajarinya dengan langkah-langkah sederhana dan mudah.
Seperti yang Anda ketahui, setiap variabel adalah lokasi memori dan setiap lokasi memori memiliki alamat yang ditentukan yang dapat diakses menggunakan nama variabel penunjuk, yang menunjukkan alamat di memori.
Apa Itu Pointer?
Pointer adalah variabel dinamis, yang nilainya adalah alamat variabel lain, yaitu alamat langsung dari lokasi memori. Seperti variabel atau konstanta apa pun, Anda harus mendeklarasikan sebuah pointer sebelum Anda dapat menggunakannya untuk menyimpan alamat variabel apa pun. Bentuk umum dari deklarasi variabel pointer adalah -
type
ptr-identifier = ^base-variable-type;
Jenis penunjuk ditentukan dengan mengawali tanda panah atas dari simbol tanda sisipan (^) dengan jenis dasar. Tipe dasar mendefinisikan tipe item data. Setelah variabel penunjuk didefinisikan sebagai jenis tertentu, ia dapat menunjukkan item data dari jenis itu saja. Setelah tipe pointer telah didefinisikan, kita dapat menggunakanvar deklarasi untuk mendeklarasikan variabel pointer.
var
p1, p2, ... : ptr-identifier;
Berikut adalah beberapa deklarasi penunjuk yang valid -
type
Rptr = ^real;
Cptr = ^char;
Bptr = ^ Boolean;
Aptr = ^array[1..5] of real;
date-ptr = ^ date;
Date = record
Day: 1..31;
Month: 1..12;
Year: 1900..3000;
End;
var
a, b : Rptr;
d: date-ptr;
Variabel penunjuk didereferensi dengan menggunakan simbol tanda sisipan yang sama (^). Misalnya, variabel terkait yang dirujuk oleh pointer rptr , adalah rptr ^ . Itu dapat diakses sebagai -
rptr^ := 234.56;
Contoh berikut akan menggambarkan konsep ini -
program exPointers;
var
number: integer;
iptr: ^integer;
begin
number := 100;
writeln('Number is: ', number);
iptr := @number;
writeln('iptr points to a value: ', iptr^);
iptr^ := 200;
writeln('Number is: ', number);
writeln('iptr points to a value: ', iptr^);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Number is: 100
iptr points to a value: 100
Number is: 200
iptr points to a value: 200
Mencetak Alamat Memori di Pascal
Di Pascal, kita dapat menetapkan alamat variabel ke variabel pointer menggunakan operator alamat (@). Kami menggunakan pointer ini untuk memanipulasi dan mengakses item data. Namun, jika karena alasan tertentu, kita perlu bekerja dengan alamat memori itu sendiri, kita perlu menyimpannya dalam variabel tipe kata.
Mari kita memperluas contoh di atas untuk mencetak alamat memori yang disimpan di pointer iptr -
program exPointers;
var
number: integer;
iptr: ^integer;
y: ^word;
begin
number := 100;
writeln('Number is: ', number);
iptr := @number;
writeln('iptr points to a value: ', iptr^);
iptr^ := 200;
writeln('Number is: ', number);
writeln('iptr points to a value: ', iptr^);
y := addr(iptr);
writeln(y^);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Number is: 100
iptr points to a value: 100
Number is: 200
iptr points to a value: 200
45504
NIL Pointer
Menugaskan file NILnilai ke variabel penunjuk jika Anda tidak memiliki alamat yang tepat untuk ditetapkan. Ini dilakukan pada saat deklarasi variabel. Sebuah penunjuk yang diberikanNILmenunjuk ke mana-mana. Pertimbangkan program berikut -
program exPointers;
var
number: integer;
iptr: ^integer;
y: ^word;
begin
iptr := nil;
y := addr(iptr);
writeln('the vaule of iptr is ', y^);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
The value of ptr is 0
Untuk memeriksa a nil pointer Anda dapat menggunakan pernyataan if sebagai berikut -
if(ptr <> nill )then (* succeeds if p is not null *)
if(ptr = nill)then (* succeeds if p is null *)
Pointer Pascal secara Detail
Pointer memiliki banyak konsep tetapi mudah dan sangat penting untuk pemrograman Pascal. Ada beberapa konsep pointer penting berikut, yang harus jelas bagi programmer Pascal -
Sr Tidak | Konsep & Deskripsi |
---|---|
1 | Pascal - Aritmatika penunjuk Ada empat operator aritmatika yang dapat digunakan pada pointer: increment, decrement, +, - |
2 | Pascal - Array pointer Anda dapat menentukan array untuk menampung sejumlah pointer. |
3 | Pascal - Pointer ke pointer Pascal memungkinkan Anda untuk memiliki pointer pada sebuah pointer dan seterusnya. |
4 | Meneruskan pointer ke subprogram di Pascal Meneruskan argumen dengan referensi atau dengan alamat keduanya memungkinkan argumen yang diteruskan diubah dalam subprogram pemanggil oleh subprogram yang dipanggil. |
5 | Kembalikan pointer dari subprogram di Pascal Pascal memungkinkan subprogram untuk mengembalikan pointer. |
Array pascal memungkinkan Anda untuk menentukan tipe variabel yang dapat menampung beberapa item data dari jenis yang sama tetapi record adalah tipe data lain yang ditentukan pengguna yang tersedia di Pascal yang memungkinkan Anda untuk menggabungkan item data dari berbagai jenis.
Rekaman terdiri dari bidang yang berbeda. Misalkan Anda ingin melacak buku Anda di perpustakaan, Anda mungkin ingin melacak atribut berikut tentang setiap buku -
- Title
- Author
- Subject
- ID Buku
Mendefinisikan Record
Untuk menentukan tipe rekaman, Anda dapat menggunakan pernyataan deklarasi tipe. Jenis rekaman didefinisikan sebagai -
type
record-name = record
field-1: field-type1;
field-2: field-type2;
...
field-n: field-typen;
end;
Inilah cara Anda mendeklarasikan Book record -
type
Books = record
title: packed array [1..50] of char;
author: packed array [1..50] of char;
subject: packed array [1..100] of char;
book_id: integer;
end;
Variabel record didefinisikan dengan cara biasa seperti
var
r1, r2, ... : record-name;
Alternatifnya, Anda dapat langsung menentukan variabel tipe record sebagai -
var
Books : record
title: packed array [1..50] of char;
author: packed array [1..50] of char;
subject: packed array [1..100] of char;
book_id: integer;
end;
Mengakses Fields of a Record
Untuk mengakses bidang rekaman apa pun, kami menggunakan operator akses anggota (.). Operator akses anggota dikodekan sebagai periode antara nama variabel record dan field yang ingin kita akses. Berikut adalah contoh untuk menjelaskan penggunaan struktur -
program exRecords;
type
Books = record
title: packed array [1..50] of char;
author: packed array [1..50] of char;
subject: packed array [1..100] of char;
book_id: longint;
end;
var
Book1, Book2: Books; (* Declare Book1 and Book2 of type Books *)
begin
(* book 1 specification *)
Book1.title := 'C Programming';
Book1.author := 'Nuha Ali ';
Book1.subject := 'C Programming Tutorial';
Book1.book_id := 6495407;
(* book 2 specification *)
Book2.title := 'Telecom Billing';
Book2.author := 'Zara Ali';
Book2.subject := 'Telecom Billing Tutorial';
Book2.book_id := 6495700;
(* print Book1 info *)
writeln ('Book 1 title : ', Book1.title);
writeln('Book 1 author : ', Book1.author);
writeln( 'Book 1 subject : ', Book1.subject);
writeln( 'Book 1 book_id : ', Book1.book_id);
writeln;
(* print Book2 info *)
writeln ('Book 2 title : ', Book2.title);
writeln('Book 2 author : ', Book2.author);
writeln( 'Book 2 subject : ', Book2.subject);
writeln( 'Book 2 book_id : ', Book2.book_id);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700
Rekaman sebagai Argumen Subprogram
Anda bisa melewatkan record sebagai argumen subprogram dengan cara yang sangat mirip seperti Anda melewatkan variabel atau pointer lainnya. Anda akan mengakses kolom record dengan cara yang sama seperti yang Anda akses pada contoh di atas -
program exRecords;
type
Books = record
title: packed array [1..50] of char;
author: packed array [1..50] of char;
subject: packed array [1..100] of char;
book_id: longint;
end;
var
Book1, Book2: Books; (* Declare Book1 and Book2 of type Books *)
(* procedure declaration *)
procedure printBook( var book: Books );
begin
(* print Book info *)
writeln ('Book title : ', book.title);
writeln('Book author : ', book.author);
writeln( 'Book subject : ', book.subject);
writeln( 'Book book_id : ', book.book_id);
end;
begin
(* book 1 specification *)
Book1.title := 'C Programming';
Book1.author := 'Nuha Ali ';
Book1.subject := 'C Programming Tutorial';
Book1.book_id := 6495407;
(* book 2 specification *)
Book2.title := 'Telecom Billing';
Book2.author := 'Zara Ali';
Book2.subject := 'Telecom Billing Tutorial';
Book2.book_id := 6495700;
(* print Book1 info *)
printbook(Book1);
writeln;
(* print Book2 info *)
printbook(Book2);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700
Petunjuk ke Rekaman
Anda dapat menentukan pointer ke record dengan cara yang sangat mirip seperti Anda mendefinisikan pointer ke variabel lain sebagai berikut -
type
record-ptr = ^ record-name;
record-name = record
field-1: field-type1;
field-2: field-type2;
...
field-n: field-typen;
end;
Sekarang, Anda dapat menyimpan alamat variabel tipe record di variabel pointer yang ditentukan di atas. Untuk mendeklarasikan variabel dari tipe pointer yang dibuat, Anda menggunakan kata kunci var -
var
r1, r2, ... : record-ptr;
Sebelum menggunakan pointer ini, Anda harus membuat penyimpanan untuk variabel tipe record-name, yang akan dimanipulasi oleh pointer ini.
new(r1);
new(r2);
Untuk mengakses anggota rekaman menggunakan penunjuk ke rekaman itu, Anda harus menggunakan ^. operator sebagai berikut -
r1^.feild1 := value1;
r1^.feild2 := value2;
...
r1^fieldn := valuen;
Terakhir, jangan lupa untuk membuang penyimpanan bekas, jika tidak lagi digunakan -
dispose(r1);
dispose(r2);
Mari kita tulis ulang contoh pertama menggunakan penunjuk ke catatan Buku. Semoga mudah bagi Anda untuk memahami konsepnya -
program exRecords;
type
BooksPtr = ^ Books;
Books = record
title: packed array [1..50] of char;
author: packed array [1..50] of char;
subject: packed array [1..100] of char;
book_id: longint;
end;
var
(* Declare Book1 and Book2 of pointer type that refers to Book type *)
Book1, Book2: BooksPtr;
begin
new(Book1);
new(book2);
(* book 1 specification *)
Book1^.title := 'C Programming';
Book1^.author := 'Nuha Ali ';
Book1^.subject := 'C Programming Tutorial';
Book1^.book_id := 6495407;
(* book 2 specification *)
Book2^.title := 'Telecom Billing';
Book2^.author := 'Zara Ali';
Book2^.subject := 'Telecom Billing Tutorial';
Book2^.book_id := 6495700;
(* print Book1 info *)
writeln ('Book 1 title : ', Book1^.title);
writeln('Book 1 author : ', Book1^.author);
writeln( 'Book 1 subject : ', Book1^.subject);
writeln( 'Book 1 book_id : ', Book1^.book_id);
(* print Book2 info *)
writeln ('Book 2 title : ', Book2^.title);
writeln('Book 2 author : ', Book2^.author);
writeln( 'Book 2 subject : ', Book2^.subject);
writeln( 'Book 2 book_id : ', Book2^.book_id);
dispose(Book1);
dispose(Book2);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700
Pernyataan With
Kami telah membahas bahwa anggota rekaman dapat diakses menggunakan operator akses anggota (.). Dengan cara ini nama variabel record harus ditulis setiap saat. ItuWith Pernyataan memberikan cara alternatif untuk melakukan itu.
Lihatlah potongan kode berikut yang diambil dari contoh pertama kami -
(* book 1 specification *)
Book1.title := 'C Programming';
Book1.author := 'Nuha Ali ';
Book1.subject := 'C Programming Tutorial';
Book1.book_id := 6495407;
Tugas yang sama dapat ditulis menggunakan With pernyataan sebagai -
(* book 1 specification *)
With Book1 do
begin
title := 'C Programming';
author := 'Nuha Ali ';
subject := 'C Programming Tutorial';
book_id := 6495407;
end;
Pascal mendukung jenis penyimpanan unik bernama varian. Anda dapat menetapkan jenis nilai sederhana apa pun dalam variabel varian. Jenis nilai yang disimpan dalam varian hanya ditentukan pada waktu proses. Hampir semua tipe sederhana dapat ditetapkan ke varian: tipe ordinal, tipe string, tipe int64.
Tipe terstruktur seperti set, record, array, file, objek, dan kelas tidak kompatibel dengan penugasan dengan varian. Anda juga dapat menetapkan penunjuk ke varian.
Varian dukungan Pascal gratis.
Mendeklarasikan Varian
Anda dapat mendeklarasikan tipe varian seperti tipe lainnya menggunakan varkata kunci. Sintaks untuk mendeklarasikan tipe varian adalah -
var
v: variant;
Sekarang, variabel varian v ini dapat diberikan ke hampir semua tipe sederhana termasuk tipe enumerasi dan sebaliknya.
type
color = (red, black, white);
var
v : variant;
i : integer;
b : byte;
w : word;
q : int64;
e : extended;
d : double;
en : color;
as : ansistring;
ws : widestring;
begin
v := i;
v := b;
v := w;
v := q;
v := e;
v := en;
v := d:
v := as;
v := ws;
end;
Contoh
Contoh berikut akan mengilustrasikan konsep -
Program exVariant;
uses variants;
type
color = (red, black, white);
var
v : variant;
i : integer;
r: real;
c : color;
as : ansistring;
begin
i := 100;
v:= i;
writeln('Variant as Integer: ', v);
r:= 234.345;
v:= r;
writeln('Variant as real: ', v);
c := red;
v := c;
writeln('Variant as Enumerated data: ', v);
as:= ' I am an AnsiString';
v:= as;
writeln('Variant as AnsiString: ', v);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Variant as Integer: 100
Variant as real: 234.345
Variant as Enumerated data: 0
Variant as AnsiString: I am an AnsiString
Satu set adalah kumpulan elemen dengan tipe yang sama. Pascal memungkinkan pendefinisian tipe data set. Unsur-unsur dalam himpunan disebut anggotanya. Dalam matematika, himpunan direpresentasikan dengan mengapit anggota dalam tanda kurung {} . Namun, dalam Pascal, elemen himpunan diapit dalam tanda kurung siku [], yang disebut sebagai konstruktor himpunan.
Mendefinisikan Jenis dan Variabel Set
Jenis Pascal Set didefinisikan sebagai
type
set-identifier = set of base type;
Variabel dari jenis himpunan didefinisikan sebagai
var
s1, s2, ...: set-identifier;
atau,
s1, s2...: set of base type;
Contoh dari beberapa deklarasi tipe set yang valid adalah -
type
Days = (mon, tue, wed, thu, fri, sat, sun);
Letters = set of char;
DaySet = set of days;
Alphabets = set of 'A' .. 'Z';
studentAge = set of 13..20;
Atur Operator
Anda dapat melakukan operasi set berikut pada set Pascal.
Sr Tidak | Operasi & Deskripsi |
---|---|
1 | Union Ini menggabungkan dua set dan memberikan satu set baru dengan anggota dari kedua set. |
2 | Difference Mendapat perbedaan dua himpunan dan memberikan himpunan baru dengan elemen yang tidak umum untuk kedua himpunan. |
3 | Intersection Mendapat perpotongan dua himpunan dan memberikan himpunan baru dengan elemen yang sama untuk kedua himpunan. |
4 | Inclusion Himpunan P termasuk dalam himpunan Q, jika semua item di P juga ada di Q tapi tidak sebaliknya. |
5 | Symmetric difference Mendapat perbedaan simetris dari dua himpunan dan memberikan himpunan elemen, yang berada di salah satu himpunan dan bukan di persimpangannya. |
6 | In Ia memeriksa keanggotaan. |
Tabel berikut menunjukkan semua operator set yang didukung oleh Free Pascal. Asumsikan bahwaS1 dan S2 adalah dua himpunan karakter, sehingga -
S1: = ['a', 'b', 'c'];
S2: = ['c', 'd', 'e'];
Operator | Deskripsi | Contoh |
---|---|---|
+ | Gabungan dua set | S1 + S2 akan memberikan satu set ['a', 'b', 'c', 'd', 'e'] |
- | Selisih dua set | S1 - S2 akan memberikan satu set ['a', 'b'] |
* | Persimpangan dua set | S1 * S2 akan memberikan satu set ['c'] |
> < | Perbedaan simetris dari dua set | S1> <S2 akan memberikan himpunan ['a', 'b', 'd', 'e'] |
= | Memeriksa kesetaraan dua set | S1 = S2 akan memberikan nilai boolean False |
<> | Memeriksa ketidaksetaraan dua set | S1 <> S2 akan memberikan nilai boolean True |
<= | Berisi (Memeriksa apakah satu set adalah bagian dari yang lain) | S1 <= S2 akan memberikan nilai boolean False |
Sertakan | Termasuk elemen di set; pada dasarnya ini adalah gabungan dari satu set dan elemen dengan tipe dasar yang sama | Sertakan (S1, ['d']) akan memberikan satu set ['a', 'b', 'c', 'd'] |
Mengecualikan | Mengecualikan elemen dari set; pada dasarnya itu adalah Perbedaan himpunan dan elemen dengan tipe dasar yang sama | Kecualikan (S2, ['d']) akan memberikan satu set ['c', 'e'] |
Di | Memeriksa keanggotaan set suatu elemen dalam satu set | ['e'] di S2 memberikan nilai boolean True |
Contoh
Contoh berikut menggambarkan penggunaan beberapa operator ini -
program setColors;
type
color = (red, blue, yellow, green, white, black, orange);
colors = set of color;
procedure displayColors(c : colors);
const
names : array [color] of String[7]
= ('red', 'blue', 'yellow', 'green', 'white', 'black', 'orange');
var
cl : color;
s : String;
begin
s:= ' ';
for cl:=red to orange do
if cl in c then
begin
if (s<>' ') then s :=s +' , ';
s:=s+names[cl];
end;
writeln('[',s,']');
end;
var
c : colors;
begin
c:= [red, blue, yellow, green, white, black, orange];
displayColors(c);
c:=[red, blue]+[yellow, green];
displayColors(c);
c:=[red, blue, yellow, green, white, black, orange] - [green, white];
displayColors(c);
c:= [red, blue, yellow, green, white, black, orange]*[green, white];
displayColors(c);
c:= [red, blue, yellow, green]><[yellow, green, white, black];
displayColors(c);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
[ red , blue , yellow , green , white , black , orange]
[ red , blue , yellow , green]
[ red , blue , yellow , black , orange]
[ green , white]
[ red , blue , white , black]
Pascal memperlakukan file sebagai urutan komponen, yang harus memiliki tipe yang seragam. Jenis file ditentukan oleh jenis komponennya. Tipe data file didefinisikan sebagai -
type
file-name = file of base-type;
Di mana, tipe dasar menunjukkan tipe komponen file. Jenis dasar dapat berupa apa saja seperti, integer, real, Boolean, enumerated, subrange, record, array dan set kecuali jenis file lain. Variabel dari jenis file dibuat menggunakan deklarasi var -
var
f1, f2,...: file-name;
Berikut adalah beberapa contoh mendefinisikan beberapa jenis file dan variabel file -
type
rfile = file of real;
ifile = file of integer;
bfile = file of boolean;
datafile = file of record
arrfile = file of array[1..4] of integer;
var
marks: arrfile;
studentdata: datafile;
rainfalldata: rfile;
tempdata: ifile;
choices: bfile;
Membuat dan Menulis ke File
Mari kita tulis program yang akan membuat file data untuk catatan siswa. Itu akan membuat file bernama students.dat dan menulis data siswa ke dalamnya -
program DataFiles;
type
StudentRecord = Record
s_name: String;
s_addr: String;
s_batchcode: String;
end;
var
Student: StudentRecord;
f: file of StudentRecord;
begin
Assign(f,'students.dat');
Rewrite(f);
Student.s_name := 'John Smith';
Student.s_addr := 'United States of America';
Student.s_batchcode := 'Computer Science';
Write(f,Student);
Close(f);
end.
Saat dikompilasi dan dijalankan, program akan membuat file bernama students.dat ke dalam direktori kerja. Anda dapat membuka file menggunakan editor teks, seperti notepad, untuk melihat data John Smith.
Membaca dari File
Kami baru saja membuat dan menulis ke dalam file bernama students.dat. Sekarang, mari kita tulis program yang akan membaca data siswa dari file -
program DataFiles;
type
StudentRecord = Record
s_name: String;
s_addr: String;
s_batchcode: String;
end;
var
Student: StudentRecord;
f: file of StudentRecord;
begin
assign(f, 'students.dat');
reset(f);
while not eof(f) do
begin
read(f,Student);
writeln('Name: ',Student.s_name);
writeln('Address: ',Student.s_addr);
writeln('Batch Code: ', Student.s_batchcode);
end;
close(f);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Name: John Smith
Address: United States of America
Batch Code: Computer Science
File sebagai Parameter Subprogram
Pascal memungkinkan variabel file untuk digunakan sebagai parameter dalam subprogram standar dan yang ditentukan pengguna. Contoh berikut menggambarkan konsep ini. Program ini membuat file bernama rain.txt dan menyimpan beberapa data curah hujan. Selanjutnya, ia membuka file, membaca data dan menghitung curah hujan rata-rata.
Harap dicatat bahwa, if you use a file parameter with subprograms, it must be declared as a var parameter.
program addFiledata;
const
MAX = 4;
type
raindata = file of real;
var
rainfile: raindata;
filename: string;
procedure writedata(var f: raindata);
var
data: real;
i: integer;
begin
rewrite(f, sizeof(data));
for i:=1 to MAX do
begin
writeln('Enter rainfall data: ');
readln(data);
write(f, data);
end;
close(f);
end;
procedure computeAverage(var x: raindata);
var
d, sum: real;
average: real;
begin
reset(x);
sum:= 0.0;
while not eof(x) do
begin
read(x, d);
sum := sum + d;
end;
average := sum/MAX;
close(x);
writeln('Average Rainfall: ', average:7:2);
end;
begin
writeln('Enter the File Name: ');
readln(filename);
assign(rainfile, filename);
writedata(rainfile);
computeAverage(rainfile);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Enter the File Name:
rainfall.txt
Enter rainfall data:
34
Enter rainfall data:
45
Enter rainfall data:
56
Enter rainfall data:
78
Average Rainfall: 53.25
File Teks
File teks, di Pascal, terdiri dari baris-baris karakter di mana setiap baris diakhiri dengan penanda akhir baris. Anda dapat mendeklarasikan dan mendefinisikan file seperti -
type
file-name = text;
Perbedaan antara file karakter normal dan file teks adalah file teks dibagi menjadi beberapa baris, masing-masing diakhiri oleh penanda akhir baris khusus, yang secara otomatis dimasukkan oleh sistem. Contoh berikut membuat dan menulis ke dalam file teks bernama contact.txt -
program exText;
var
filename, data: string;
myfile: text;
begin
writeln('Enter the file name: ');
readln(filename);
assign(myfile, filename);
rewrite(myfile);
writeln(myfile, 'Note to Students: ');
writeln(myfile, 'For details information on Pascal Programming');
writeln(myfile, 'Contact: Tutorials Point');
writeln('Completed writing');
close(myfile);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Enter the file name:
contact.txt
Completed writing
Menambahkan ke File
Menambahkan ke file berarti menulis ke file yang sudah ada yang sudah memiliki beberapa data tanpa menimpa file tersebut. Program berikut menggambarkan hal ini -
program exAppendfile;
var
myfile: text;
info: string;
begin
assign(myfile, 'contact.txt');
append(myfile);
writeln('Contact Details');
writeln('[email protected]');
close(myfile);
(* let us read from this file *)
assign(myfile, 'contact.txt');
reset(myfile);
while not eof(myfile) do
begin
readln(myfile, info);
writeln(info);
end;
close(myfile);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Contact Details
[email protected]
Note to Students:
For details information on Pascal Programming
Contact: Tutorials Point
Fungsi Penanganan File
Free Pascal menyediakan fungsi / prosedur berikut untuk penanganan file -
Sr.No. | Nama & Deskripsi Fungsi |
---|---|
1 | procedure Append(var t: Text); Membuka file dalam mode append |
2 | procedure Assign(out f: file; const Name:); Memberi nama ke file |
3 | procedure Assign(out f: file; p: PChar); Memberi nama ke file |
4 | procedure Assign(out f: file; c: Char); Memberi nama ke file |
5 | procedure Assign(out f: TypedFile; const Name:); Memberi nama ke file |
6 | procedure Assign(out f: TypedFile; p: PChar); Memberi nama ke file |
7 | procedure Assign(out f: TypedFile; c: Char); Memberi nama ke file |
8 | procedure Assign(out t: Text; const s:); Memberi nama ke file |
9 | procedure Assign(out t: Text; p: PChar); Memberi nama ke file |
10 | procedure Assign(out t: Text; c: Char); Memberi nama ke file |
11 | procedure BlockRead(var f: file; var Buf; count: Int64; var Result: Int64); Membaca data dari file ke dalam memori |
12 | procedure BlockRead(var f: file; var Buf; count: LongInt; var Result: LongInt); Membaca data dari file ke dalam memori |
13 | procedure BlockRead(var f: file; var Buf; count: Cardinal; var Result: Cardinal); Membaca data dari file ke dalam memori |
14 | procedure BlockRead(var f: file; var Buf; count: Word; var Result: Word); Membaca data dari file ke dalam memori |
15 | procedure BlockRead(var f: file; var Buf; count: Word; var Result: Integer); Membaca data dari file ke dalam memori |
16 | procedure BlockRead(var f: file; var Buf; count: Int64); Membaca data dari file ke dalam memori |
17 | procedure BlockWrite(var f: file; const Buf; Count: Int64; var Result: Int64); Menulis data dari memori ke file |
18 | procedure BlockWrite(var f: file; const Buf; Count: LongInt; var Result: LongInt); Menulis data dari memori ke file |
19 | procedure BlockWrite(var f: file; const Buf; Count: Cardinal; var Result: Cardinal); Menulis data dari memori ke file |
20 | procedure BlockWrite(var f: file; const Buf; Count: Word; var Result: Word); Menulis data dari memori ke file |
21 | procedure BlockWrite(var f: file; const Buf; Count: Word; var Result: Integer); Menulis data dari memori ke file |
22 | procedure BlockWrite(var f: file; const Buf; Count: LongInt); Menulis data dari memori ke file |
23 | procedure Close(var f: file); Menutup file |
24 | procedure Close(var t: Text); Menutup file |
25 | function EOF(var f: file):Boolean; Memeriksa akhir file |
26 | function EOF(var t: Text):Boolean; Memeriksa akhir file |
27 | function EOF: Boolean; Memeriksa akhir file |
28 | function EOLn(var t: Text):Boolean; Memeriksa garis akhir |
29 | function EOLn: Boolean; Memeriksa garis akhir |
30 | procedure Erase(var f: file); Menghapus file dari disk |
31 | procedure Erase(var t: Text); Menghapus file dari disk |
32 | function FilePos( var f: file):Int64; Posisi dalam file |
33 | function FileSize(var f: file):Int64; Ukuran file |
34 | procedure Flush(var t: Text); Menulis file buffer ke disk |
35 | function IOResult: Word; Mengembalikan hasil operasi IO file terakhir |
36 | procedure Read(var F: Text; Args: Arguments); Membaca dari file menjadi variabel |
37 | procedure Read(Args: Arguments); Membaca dari file menjadi variabel |
38 | procedure ReadLn(var F: Text; Args: Arguments); Membaca dari file ke dalam variabel dan pergi ke baris berikutnya |
39 | procedure ReadLn(Args: Arguments); Membaca dari file ke dalam variabel dan pergi ke baris berikutnya |
40 | procedure Rename(var f: file; const s:); Ubah nama file pada disk |
41 | procedure Rename(var f: file; p: PChar); Ubah nama file pada disk |
42 | procedure Rename(var f: file; c: Char); Ubah nama file pada disk |
43 | procedure Rename(var t: Text; const s); Ubah nama file pada disk |
44 | procedure Rename(var t: Text; p: PChar); Ubah nama file pada disk |
45 | procedure Rename( var t: Text; c: Char); Ubah nama file pada disk |
46 | procedure Reset(var f: file; l: LongInt); Membuka file untuk membaca |
47 | procedure Reset(var f: file); Membuka file untuk membaca |
48 | procedure Reset(var f: TypedFile); Membuka file untuk membaca |
49 | procedure Reset(var t: Text); Membuka file untuk membaca |
50 | procedure Rewrite(var f: file; l: LongInt); Membuka file untuk menulis |
51 | procedure Rewrite(var f: file); Membuka file untuk menulis |
52 | procedure Rewrite(var f: TypedFile); Membuka file untuk menulis |
53 | procedure Rewrite(var t: Text); Membuka file untuk menulis |
54 | procedure Seek(var f: file; Pos: Int64); Atur posisi file |
55 | function SeekEOF(var t: Text):Boolean; Set posisi file ke akhir file |
56 | function SeekEOF: Boolean; Set posisi file ke akhir file |
57 | function SeekEOLn(var t: Text):Boolean; Set posisi file ke akhir baris |
58 | function SeekEOLn: Boolean; Set posisi file ke akhir baris |
59 | procedure SetTextBuf(var f: Text; var Buf); Set ukuran buffer file |
60 | procedure SetTextBuf(var f: Text; var Buf; Size: SizeInt); Set ukuran buffer file |
61 | procedure Truncate(var F: file); Potong file di posisi |
62 | procedure Write(Args: Arguments); Menulis variabel ke file |
63 | procedure Write(var F: Text; Args: Arguments); Tulis variabel ke file |
64 | procedure Writeln(Args: Arguments); Menulis variabel ke file dan menambahkan baris baru |
65 | procedure WriteLn(var F: Text; Args: Arguments); Menulis variabel ke file dan menambahkan baris baru |
Bab ini menjelaskan manajemen memori dinamis di Pascal. Bahasa pemrograman Pascal menyediakan beberapa fungsi untuk alokasi dan manajemen memori.
Mengalokasikan Memori Secara Dinamis
Saat melakukan pemrograman, jika Anda mengetahui ukuran sebuah array, maka itu mudah dan Anda dapat mendefinisikannya sebagai array. Misalnya, untuk menyimpan nama seseorang, dapat mencapai maksimal 100 karakter sehingga Anda dapat menentukan sesuatu sebagai berikut -
var
name: array[1..100] of char;
Tapi sekarang, mari kita pertimbangkan situasi, di mana Anda tidak tahu panjang teks yang perlu Anda simpan, misalnya, Anda ingin menyimpan deskripsi rinci tentang suatu topik. Di sini, kita perlu mendefinisikan pointer ke string tanpa menentukan berapa banyak memori yang dibutuhkan.
Pascal menyediakan prosedur newuntuk membuat variabel penunjuk.
program exMemory;
var
name: array[1..100] of char;
description: ^string;
begin
name:= 'Zara Ali';
new(description);
if not assigned(description) then
writeln(' Error - unable to allocate required memory')
else
description^ := 'Zara ali a DPS student in class 10th';
writeln('Name = ', name );
writeln('Description: ', description^ );
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Name = Zara Ali
Description: Zara ali a DPS student in class 10th
Sekarang, jika Anda perlu mendefinisikan sebuah pointer dengan jumlah byte tertentu untuk dirujuk nanti, Anda harus menggunakan getmem fungsi atau getmem prosedur, yang memiliki sintaks berikut -
procedure Getmem(
out p: pointer;
Size: PtrUInt
);
function GetMem(
size: PtrUInt
):pointer;
Dalam contoh sebelumnya, kami mendeklarasikan pointer ke string. Sebuah string memiliki nilai maksimum 255 byte. Jika Anda benar-benar tidak membutuhkan banyak ruang, atau ruang yang lebih besar, dalam hal byte, subprogram getmem memungkinkan untuk menentukannya. Mari kita tulis ulang contoh sebelumnya, menggunakan getmem -
program exMemory;
var
name: array[1..100] of char;
description: ^string;
begin
name:= 'Zara Ali';
description := getmem(200);
if not assigned(description) then
writeln(' Error - unable to allocate required memory')
else
description^ := 'Zara ali a DPS student in class 10th';
writeln('Name = ', name );
writeln('Description: ', description^ );
freemem(description);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Name = Zara Ali
Description: Zara ali a DPS student in class 10th
Jadi, Anda memiliki kendali penuh dan Anda dapat meneruskan nilai ukuran apa pun sambil mengalokasikan memori tidak seperti array, di mana setelah Anda menentukan ukurannya tidak dapat diubah.
Mengubah Ukuran dan Melepaskan Memori
Ketika program Anda keluar, sistem operasi secara otomatis melepaskan semua memori yang dialokasikan oleh program Anda, tetapi sebagai praktik yang baik ketika Anda tidak membutuhkan memori lagi, maka Anda harus melepaskan memori itu.
Pascal menyediakan prosedurnya dispose untuk membebaskan variabel yang dibuat secara dinamis menggunakan prosedur new. Jika Anda telah mengalokasikan memori menggunakan getmem subprogram, maka Anda perlu menggunakan subprogram freememuntuk membebaskan memori ini. The FreeMem subprogram memiliki sintaks berikut -
procedure Freemem(
p: pointer;
Size: PtrUInt
);
function Freemem(
p: pointer
):PtrUInt;
Atau, Anda dapat menambah atau mengurangi ukuran blok memori yang dialokasikan dengan memanggil fungsi ReAllocMem . Mari kita periksa program di atas sekali lagi dan gunakan subprogram ReAllocMem dan freemem . Berikut ini adalah sintaks untuk ReAllocMem -
function ReAllocMem(
var p: pointer;
Size: PtrUInt
):pointer;
Berikut adalah contoh yang menggunakan subprogram ReAllocMem dan freemem -
program exMemory;
var
name: array[1..100] of char;
description: ^string;
desp: string;
begin
name:= 'Zara Ali';
desp := 'Zara ali a DPS student.';
description := getmem(30);
if not assigned(description) then
writeln('Error - unable to allocate required memory')
else
description^ := desp;
(* Suppose you want to store bigger description *)
description := reallocmem(description, 100);
desp := desp + ' She is in class 10th.';
description^:= desp;
writeln('Name = ', name );
writeln('Description: ', description^ );
freemem(description);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Name = Zara Ali
Description: Zara ali a DPS student. She is in class 10th
Fungsi Manajemen Memori
Pascal menyediakan kumpulan fungsi manajemen memori yang digunakan dalam mengimplementasikan berbagai struktur data dan mengimplementasikan pemrograman tingkat rendah di Pascal. Banyak dari fungsi ini bergantung pada implementasi. Free Pascal menyediakan fungsi dan prosedur berikut untuk manajemen memori -
SN | Nama & Deskripsi Fungsi |
---|---|
1 | function Addr(X: TAnytype):Pointer; Mengembalikan alamat variabel |
2 | function Assigned(P: Pointer):Boolean; Memeriksa apakah sebuah pointer valid |
3 | function CompareByte(const buf1; const buf2; len: SizeInt):SizeInt; Membandingkan 2 byte buffer memori per byte |
4 | function CompareChar(const buf1; const buf2; len: SizeInt):SizeInt; Membandingkan 2 byte buffer memori per byte |
5 | function CompareDWord(const buf1; const buf2; len: SizeInt):SizeInt; Membandingkan 2 byte buffer memori per byte |
6 | function CompareWord(const buf1; const buf2; len: SizeInt):SizeInt; Membandingkan 2 byte buffer memori per byte |
7 | function Cseg: Word; Mengembalikan segmen kode |
8 | procedure Dispose(P: Pointer); Membebaskan memori yang dialokasikan secara dinamis |
9 | procedure Dispose(P: TypedPointer; Des: TProcedure); Membebaskan memori yang dialokasikan secara dinamis |
10 | function Dseg: Word; Mengembalikan segmen data |
11 | procedure FillByte(var x; count: SizeInt; value: Byte); Mengisi wilayah memori dengan pola 8-bit |
12 | procedure FillChar( var x; count: SizeInt; Value: Byte|Boolean|Char); Mengisi wilayah memori dengan karakter tertentu |
13 | procedure FillDWord( var x; count: SizeInt; value: DWord); Mengisi wilayah memori dengan pola 32-bit |
14 | procedure FillQWord( var x; count: SizeInt; value: QWord); Mengisi wilayah memori dengan pola 64-bit |
15 | procedure FillWord( var x; count: SizeInt; Value: Word); Mengisi wilayah memori dengan pola 16-bit |
16 | procedure Freemem( p: pointer; Size: PtrUInt); Merilis memori yang dialokasikan |
17 | procedure Freemem( p: pointer ); Merilis memori yang dialokasikan |
18 | procedure Getmem( out p: pointer; Size: PtrUInt); Mengalokasikan memori baru |
19 | procedure Getmem( out p: pointer); Mengalokasikan memori baru |
20 | procedure GetMemoryManager( var MemMgr: TMemoryManager); Mengembalikan pengelola memori saat ini |
21 | function High( Arg: TypeOrVariable):TOrdinal; Mengembalikan indeks tertinggi dari larik terbuka atau disebutkan |
22 | function IndexByte( const buf; len: SizeInt; b: Byte):SizeInt; Menemukan nilai berukuran byte dalam rentang memori |
23 | function IndexChar( const buf; len: SizeInt; b: Char):SizeInt; Menemukan nilai seukuran karakter dalam rentang memori |
24 | function IndexDWord( const buf; len: SizeInt; b: DWord):SizeInt; Menemukan nilai berukuran DWord (32-bit) dalam rentang memori |
25 | function IndexQWord( const buf; len: SizeInt; b: QWord):SizeInt; Menemukan nilai berukuran QWord dalam rentang memori |
26 | function Indexword( const buf; len: SizeInt; b: Word):SizeInt; Menemukan nilai seukuran kata dalam rentang memori |
27 | function IsMemoryManagerSet: Boolean; Apakah set pengelola memori |
28 | function Low( Arg: TypeOrVariable ):TOrdinal; Mengembalikan indeks terendah dari larik terbuka atau disebutkan |
29 | procedure Move( const source; var dest; count: SizeInt ); Memindahkan data dari satu lokasi di memori ke yang lain |
30 | procedure MoveChar0( const buf1; var buf2; len: SizeInt); Memindahkan data hingga karakter nol pertama |
31 | procedure New( var P: Pointer); Alokasikan memori untuk variabel secara dinamis |
32 | procedure New( var P: Pointer; Cons: TProcedure); Secara dinamis mengalokasikan memori untuk variabel |
33 | function Ofs( var X ):LongInt; Mengembalikan offset variabel |
34 | function ptr( sel: LongInt; off: LongInt):farpointer; Menggabungkan segmen dan offset ke penunjuk |
35 | function ReAllocMem( var p: pointer; Size: PtrUInt):pointer; Mengubah ukuran blok memori di heap |
36 | function Seg( var X):LongInt; Mengembalikan segmen |
37 | procedure SetMemoryManager( const MemMgr: TMemoryManager ); Mengatur pengelola memori |
38 | function Sptr: Pointer; Mengembalikan penunjuk tumpukan saat ini |
39 | function Sseg: Word; Mengembalikan nilai register segmen tumpukan |
Program Pascal dapat terdiri dari modul yang disebut unit. Sebuah unit mungkin terdiri dari beberapa blok kode, yang pada gilirannya terdiri dari variabel dan deklarasi tipe, pernyataan, prosedur, dll. Ada banyak unit bawaan di Pascal dan Pascal memungkinkan pemrogram untuk mendefinisikan dan menulis unit mereka sendiri untuk digunakan kemudian di berbagai program.
Menggunakan Unit Bawaan
Baik unit bawaan dan unit yang ditentukan pengguna termasuk dalam program dengan klausul penggunaan. Kami telah menggunakan unit varian di Pascal - tutorial Varian . Tutorial ini menjelaskan cara membuat dan memasukkan unit yang ditentukan pengguna. Namun, pertama-tama mari kita lihat cara menyertakan unit bawaancrt dalam program Anda -
program myprog;
uses crt;
Contoh berikut menggambarkan penggunaan crt unit -
Program Calculate_Area (input, output);
uses crt;
var
a, b, c, s, area: real;
begin
textbackground(white); (* gives a white background *)
clrscr; (*clears the screen *)
textcolor(green); (* text color is green *)
gotoxy(30, 4); (* takes the pointer to the 4th line and 30th column)
writeln('This program calculates area of a triangle:');
writeln('Area = area = sqrt(s(s-a)(s-b)(s-c))');
writeln('S stands for semi-perimeter');
writeln('a, b, c are sides of the triangle');
writeln('Press any key when you are ready');
readkey;
clrscr;
gotoxy(20,3);
write('Enter a: ');
readln(a);
gotoxy(20,5);
write('Enter b:');
readln(b);
gotoxy(20, 7);
write('Enter c: ');
readln(c);
s := (a + b + c)/2.0;
area := sqrt(s * (s - a)*(s-b)*(s-c));
gotoxy(20, 9);
writeln('Area: ',area:10:3);
readkey;
end.
Ini adalah program yang sama yang kami gunakan tepat di awal tutorial Pascal, kompilasi dan jalankan untuk menemukan efek perubahan.
Membuat dan Menggunakan Unit Pascal
Untuk membuat unit, Anda perlu menulis modul atau subprogram yang ingin Anda simpan di dalamnya dan menyimpannya dalam file dengan .pasperpanjangan. Baris pertama dari file ini harus dimulai dengan unit kata kunci diikuti dengan nama unit. Misalnya -
unit calculateArea;
Berikut adalah tiga langkah penting dalam membuat unit Pascal -
Nama file dan nama unit harus sama persis. Jadi, unit hitung kami akan disimpan dalam file bernama hitungArea.pas.
Baris berikutnya harus terdiri dari satu kata kunci interface. Setelah baris ini, Anda akan menulis deklarasi untuk semua fungsi dan prosedur yang akan disertakan di unit ini.
Tepat setelah deklarasi fungsi, tulis kata tersebut implementation, yang juga merupakan kata kunci. Setelah baris berisi implementasi kata kunci, berikan definisi semua subprogram.
Program berikut membuat unit bernama hitungArea -
unit CalculateArea;
interface
function RectangleArea( length, width: real): real;
function CircleArea(radius: real) : real;
function TriangleArea( side1, side2, side3: real): real;
implementation
function RectangleArea( length, width: real): real;
begin
RectangleArea := length * width;
end;
function CircleArea(radius: real) : real;
const
PI = 3.14159;
begin
CircleArea := PI * radius * radius;
end;
function TriangleArea( side1, side2, side3: real): real;
var
s, area: real;
begin
s := (side1 + side2 + side3)/2.0;
area := sqrt(s * (s - side1)*(s-side2)*(s-side3));
TriangleArea := area;
end;
end.
Selanjutnya, mari kita tulis program sederhana yang akan menggunakan unit yang kita definisikan di atas -
program AreaCalculation;
uses CalculateArea,crt;
var
l, w, r, a, b, c, area: real;
begin
clrscr;
l := 5.4;
w := 4.7;
area := RectangleArea(l, w);
writeln('Area of Rectangle 5.4 x 4.7 is: ', area:7:3);
r:= 7.0;
area:= CircleArea(r);
writeln('Area of Circle with radius 7.0 is: ', area:7:3);
a := 3.0;
b:= 4.0;
c:= 5.0;
area:= TriangleArea(a, b, c);
writeln('Area of Triangle 3.0 by 4.0 by 5.0 is: ', area:7:3);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Area of Rectangle 5.4 x 4.7 is: 25.380
Area of Circle with radius 7.0 is: 153.938
Area of Triangle 3.0 by 4.0 by 5.0 is: 6.000
Sebagian besar perangkat lunak yang Anda tulis perlu menerapkan beberapa bentuk fungsi tanggal yang mengembalikan tanggal dan waktu saat ini. Kurma adalah bagian penting dari kehidupan sehari-hari sehingga menjadi mudah untuk bekerja dengannya tanpa berpikir. Pascal juga menyediakan alat canggih untuk aritmatika tanggal yang memudahkan manipulasi tanggal. Namun, nama sebenarnya dan cara kerja fungsi ini berbeda untuk penyusun yang berbeda.
Mendapatkan Tanggal & Waktu Saat Ini
Fungsi TimeToString Pascal memberi Anda waktu saat ini dalam bentuk dipisahkan titik dua (:). Contoh berikut menunjukkan bagaimana mendapatkan waktu saat ini -
program TimeDemo;
uses sysutils;
begin
writeln ('Current time : ',TimeToStr(Time));
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Current time : 18:33:08
Itu Date fungsi mengembalikan tanggal saat ini di TDateTimeformat. TDateTime adalah nilai ganda, yang membutuhkan beberapa decoding dan format. Program berikut menunjukkan bagaimana menggunakannya dalam program Anda untuk menampilkan tanggal sekarang -
Program DateDemo;
uses sysutils;
var
YY,MM,DD : Word;
begin
writeln ('Date : ',Date);
DeCodeDate (Date,YY,MM,DD);
writeln (format ('Today is (DD/MM/YY): %d/%d/%d ',[dd,mm,yy]));
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Date: 4.111300000000000E+004
Today is (DD/MM/YY):23/7/2012
Fungsi Now mengembalikan tanggal dan waktu saat ini -
Program DatenTimeDemo;
uses sysutils;
begin
writeln ('Date and Time at the time of writing : ',DateTimeToStr(Now));
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Date and Time at the time of writing : 23/7/2012 18:51:
Free Pascal menyediakan struktur stempel waktu sederhana bernama TTimeStamp, yang memiliki format berikut -
type TTimeStamp = record
Time: Integer;
Date: Integer;
end;
Berbagai Fungsi Tanggal & Waktu
Pascal gratis menyediakan fungsi tanggal dan waktu berikut -
Sr.No. | Nama & Deskripsi Fungsi |
---|---|
1 | function DateTimeToFileDate(DateTime: TDateTime):LongInt; Mengonversi jenis DateTime ke tanggal file. |
2 | function DateTimeToStr( DateTime: TDateTime):; Membangun representasi string DateTime |
3 | function DateTimeToStr(DateTime: TDateTime; const FormatSettings: TFormatSettings):; Membangun representasi string DateTime |
4 | procedure DateTimeToString(out Result: ;const FormatStr: ;const DateTime: TDateTime); Membangun representasi string DateTime |
5 | procedure DateTimeToString(out Result: ; const FormatStr: ; const DateTime: TDateTime; const FormatSettings: TFormatSettings); Membangun representasi string DateTime |
6 | procedure DateTimeToSystemTime(DateTime: TDateTime; out SystemTime: TSystemTime); Mengubah DateTime menjadi waktu sistem |
7 | function DateTimeToTimeStamp( DateTime: TDateTime):TTimeStamp;Mengubah DateTime menjadi timestamp |
8 | function DateToStr(Date: TDateTime):; Membangun representasi string dari tanggal |
9 | function DateToStr(Date: TDateTime; const FormatSettings: TFormatSettings):; Membangun representasi string dari tanggal |
10 | function Date: TDateTime; Mendapat tanggal sekarang |
11 | function DayOfWeek(DateTime: TDateTime):Integer; Mendapatkan hari dalam seminggu |
12 | procedure DecodeDate(Date: TDateTime; out Year: Word; out Month: Word; out Day: Word); Decode DateTime ke tahun bulan dan hari |
13 | procedure DecodeTime(Time: TDateTime; out Hour: Word; out Minute: Word; out Second: Word; out MilliSecond: Word); Mendekode DateTime menjadi jam, menit dan detik |
14 | function EncodeDate(Year: Word; Month: Word; Day: Word):TDateTime; Mengkodekan tahun, hari dan bulan ke DateTime |
15 | function EncodeTime(Hour: Word; Minute: Word; Second: Word; MilliSecond: Word):TDateTime; Mengkodekan jam, menit dan detik ke DateTime |
16 | function FormatDateTime(const FormatStr: ; DateTime: TDateTime):; Mengembalikan representasi string DateTime |
17 | function FormatDateTime(const FormatStr: ; DateTime: TDateTime; const FormatSettings: TFormatSettings):; Mengembalikan representasi string DateTime |
18 | function IncMonth(const DateTime: TDateTime; NumberOfMonths: Integer = 1):TDateTime; Menambahkan 1 ke bulan |
19 | function IsLeapYear(Year: Word):Boolean; Menentukan apakah tahun adalah tahun kabisat |
20 | function MSecsToTimeStamp(MSecs: Comp):TTimeStamp; Mengonversi jumlah milidetik menjadi stempel waktu |
21 | function Now: TDateTime; Mendapatkan tanggal dan waktu saat ini |
22 | function StrToDateTime(const S:):TDateTime; Mengonversi string menjadi DateTime |
23 | function StrToDateTime(const s: ShortString; const FormatSettings: TFormatSettings):TDateTime; Mengonversi string menjadi DateTime |
24 | function StrToDateTime(const s: AnsiString; const FormatSettings: TFormatSettings):TDateTime; Mengonversi string menjadi DateTime |
25 | function StrToDate(const S: ShortString):TDateTime; Mengonversi string menjadi tanggal |
26 | function StrToDate(const S: Ansistring):TDateTime; Mengonversi string menjadi tanggal |
27 | function StrToDate(const S: ShortString; separator: Char):TDateTime; Mengonversi string menjadi tanggal |
28 | function StrToDate(const S: AnsiString; separator: Char):TDateTime; Mengonversi string menjadi tanggal |
29 | function StrToDate(const S: ShortString; const useformat: ; separator: Char):TDateTime; Mengonversi string menjadi tanggal |
30 | function StrToDate(const S: AnsiString; const useformat: ; separator: Char):TDateTime; Mengonversi string menjadi tanggal |
31 | function StrToDate(const S: PChar; Len: Integer; const useformat: ; separator: Char = #0):TDateTime; Mengonversi string menjadi tanggal |
32 | function StrToTime(const S: Shortstring):TDateTime; Mengonversi string menjadi waktu |
33 | function StrToTime(const S: Ansistring):TDateTime; Mengonversi string menjadi waktu |
34 | function StrToTime(const S: ShortString; separator: Char):TDateTime; Mengonversi string menjadi waktu |
35 | function StrToTime(const S: AnsiString; separator: Char):TDateTime; Mengonversi string menjadi waktu |
36 | function StrToTime(const S: ; FormatSettings: TFormatSettings):TDateTime; Mengonversi string menjadi waktu |
37 | function StrToTime(const S: PChar; Len: Integer; separator: Char = #0):TDateTime; Mengonversi string menjadi waktu |
38 | function SystemTimeToDateTime(const SystemTime: TSystemTime):TDateTime; Mengonversi waktu sistem ke waktu tanggal |
39 | function TimeStampToDateTime(const TimeStamp: TTimeStamp):TDateTime; Mengubah cap waktu menjadi DateTime |
40 | function TimeStampToMSecs(const TimeStamp: TTimeStamp):comp; Mengonversi Stempel Waktu ke jumlah milidetik |
41 | function TimeToStr(Time: TDateTime):; Mengembalikan representasi string dari Waktu |
42 | function TimeToStr(Time: TDateTime; const FormatSettings: TFormatSettings):; Mengembalikan representasi string dari Waktu |
43 | function Time: TDateTime; Dapatkan waktu saat ini |
Contoh berikut mengilustrasikan penggunaan beberapa fungsi di atas -
Program DatenTimeDemo;
uses sysutils;
var
year, month, day, hr, min, sec, ms: Word;
begin
writeln ('Date and Time at the time of writing : ',DateTimeToStr(Now));
writeln('Today is ',LongDayNames[DayOfWeek(Date)]);
writeln;
writeln('Details of Date: ');
DecodeDate(Date,year,month,day);
writeln (Format ('Day: %d',[day]));
writeln (Format ('Month: %d',[month]));
writeln (Format ('Year: %d',[year]));
writeln;
writeln('Details of Time: ');
DecodeTime(Time,hr, min, sec, ms);
writeln (format('Hour: %d:',[hr]));
writeln (format('Minutes: %d:',[min]));
writeln (format('Seconds: %d:',[sec]));
writeln (format('Milliseconds: %d:',[hr]));
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut:
Date and Time at the time of writing : 7/24/2012 8:26:
Today is Tuesday
Details of Date:
Day:24
Month:7
Year: 2012
Details of Time:
Hour: 8
Minutes: 26
Seconds: 21
Milliseconds: 8
Kita bisa membayangkan alam semesta kita terbuat dari objek yang berbeda seperti matahari, bumi, bulan, dll. Demikian pula, kita bisa membayangkan mobil kita terbuat dari objek yang berbeda seperti roda, kemudi, roda gigi, dll. Sama halnya, ada konsep pemrograman berorientasi objek, yaitu menganggap semuanya sebagai objek dan mengimplementasikan perangkat lunak menggunakan objek yang berbeda. Di Pascal, ada dua tipe data struktural yang digunakan untuk mengimplementasikan objek dunia nyata -
- Jenis objek
- Jenis kelas
Konsep Berorientasi Objek
Sebelum kita membahas secara rinci, mari kita definisikan istilah Pascal penting yang terkait dengan Pascal Berorientasi Objek.
Object- Objek adalah jenis rekaman khusus yang berisi bidang seperti rekaman; Namun, tidak seperti record, objek berisi prosedur dan fungsi sebagai bagian dari objek. Prosedur dan fungsi ini diadakan sebagai penunjuk ke metode yang terkait dengan tipe objek.
Class- Kelas didefinisikan dengan cara yang hampir sama seperti Objek, tetapi ada perbedaan dalam cara pembuatannya. Kelas dialokasikan di Heap program, sedangkan Objek dialokasikan di Stack. Ini adalah penunjuk ke objek, bukan objek itu sendiri.
Instantiation of a class- Instansiasi berarti membuat variabel dari jenis kelas itu. Karena sebuah kelas hanyalah sebuah pointer, ketika sebuah variabel dari sebuah tipe kelas dideklarasikan, ada memori yang dialokasikan hanya untuk pointer tersebut, bukan untuk seluruh objek. Hanya jika dibuat instance-nya menggunakan salah satu konstruktornya, memori dialokasikan untuk objek tersebut. Instance dari sebuah kelas juga disebut 'object', tapi jangan bingung dengan Object Pascal Objects. Dalam tutorial ini, kita akan menulis 'Objek' untuk Objek Pascal dan 'objek' untuk objek konseptual atau instance kelas.
Member Variables - Ini adalah variabel yang ditentukan di dalam Kelas atau Objek.
Member Functions - Ini adalah fungsi atau prosedur yang ditentukan di dalam Kelas atau Objek dan digunakan untuk mengakses data objek.
Visibility of Members- Anggota Object atau Class juga disebut field. Bidang ini memiliki visibilitas yang berbeda. Visibilitas mengacu pada aksesibilitas anggota, yaitu di mana tepatnya anggota ini dapat diakses. Objek memiliki tiga tingkat visibilitas: publik, pribadi, dan dilindungi. Kelas memiliki lima jenis visibilitas: publik, privat, sangat privat, dilindungi dan dipublikasikan. Kami akan membahas visibilitas secara detail.
Inheritance- Ketika Kelas didefinisikan dengan mewarisi fungsionalitas yang ada dari Kelas induk, maka itu dikatakan diwariskan. Di sini kelas anak akan mewarisi semua atau beberapa fungsi dan variabel anggota dari kelas induk. Objek juga bisa diwarisi.
Parent Class- Kelas yang diwarisi oleh Kelas lain. Ini juga disebut kelas dasar atau kelas super.
Child Class- Kelas yang diwarisi dari kelas lain. Ini juga disebut subclass atau kelas turunan.
Polymorphism- Ini adalah konsep berorientasi objek di mana fungsi yang sama dapat digunakan untuk tujuan yang berbeda. Misalnya, nama fungsi akan tetap sama tetapi mungkin menggunakan jumlah argumen yang berbeda dan dapat melakukan tugas yang berbeda. Kelas Pascal menerapkan polimorfisme. Objek tidak menerapkan polimorfisme.
Overloading- Ini adalah jenis polimorfisme di mana beberapa atau semua operator memiliki implementasi yang berbeda tergantung pada jenis argumen mereka. Fungsi yang sama juga dapat kelebihan beban dengan implementasi yang berbeda. Kelas Pascal mengimplementasikan overloading, tetapi Object tidak.
Data Abstraction - Representasi data apa pun di mana detail implementasinya disembunyikan (abstrak).
Encapsulation - Mengacu pada konsep di mana kita merangkum semua data dan fungsi anggota bersama-sama untuk membentuk suatu objek.
Constructor - Mengacu pada jenis fungsi khusus yang akan dipanggil secara otomatis setiap kali ada formasi objek dari kelas atau Objek.
Destructor - Mengacu pada jenis fungsi khusus yang akan dipanggil secara otomatis setiap kali Objek atau Kelas dihapus atau keluar dari ruang lingkup.
Mendefinisikan Objek Pascal
Sebuah objek dideklarasikan menggunakan deklarasi type. Bentuk umum deklarasi objek adalah sebagai berikut -
type object-identifier = object
private
field1 : field-type;
field2 : field-type;
...
public
procedure proc1;
function f1(): function-type;
end;
var objectvar : object-identifier;
Mari kita definisikan Objek Persegi Panjang yang memiliki dua anggota data tipe integer - length dan width dan beberapa fungsi anggota untuk memanipulasi anggota data ini dan prosedur untuk menggambar persegi panjang.
type
Rectangle = object
private
length, width: integer;
public
constructor init;
destructor done;
procedure setlength(l: inteter);
function getlength(): integer;
procedure setwidth(w: integer);
function getwidth(): integer;
procedure draw;
end;
var
r1: Rectangle;
pr1: ^Rectangle;
Setelah membuat objek, Anda akan dapat memanggil fungsi anggota yang terkait dengan objek itu. Satu fungsi anggota hanya dapat memproses variabel anggota dari objek terkait.
Contoh berikut menunjukkan cara menyetel panjang dan lebar untuk dua objek persegi panjang dan menggambarnya dengan memanggil fungsi anggota.
r1.setlength(3);
r1.setwidth(7);
writeln(' Draw a rectangle: ', r1.getlength(), ' by ' , r1.getwidth());
r1.draw;
new(pr1);
pr1^.setlength(5);
pr1^.setwidth(4);
writeln(' Draw a rectangle: ', pr1^.getlength(), ' by ' ,pr1^.getwidth());
pr1^.draw;
dispose(pr1);
Berikut adalah contoh lengkap untuk menunjukkan bagaimana menggunakan objek di Pascal -
program exObjects;
type
Rectangle = object
private
length, width: integer;
public
procedure setlength(l: integer);
function getlength(): integer;
procedure setwidth(w: integer);
function getwidth(): integer;
procedure draw;
end;
var
r1: Rectangle;
pr1: ^Rectangle;
procedure Rectangle.setlength(l: integer);
begin
length := l;
end;
procedure Rectangle.setwidth(w: integer);
begin
width :=w;
end;
function Rectangle.getlength(): integer;
begin
getlength := length;
end;
function Rectangle.getwidth(): integer;
begin
getwidth := width;
end;
procedure Rectangle.draw;
var
i, j: integer;
begin
for i:= 1 to length do
begin
for j:= 1 to width do
write(' * ');
writeln;
end;
end;
begin
r1.setlength(3);
r1.setwidth(7);
writeln('Draw a rectangle:', r1.getlength(), ' by ' , r1.getwidth());
r1.draw;
new(pr1);
pr1^.setlength(5);
pr1^.setwidth(4);
writeln('Draw a rectangle:', pr1^.getlength(), ' by ' ,pr1^.getwidth());
pr1^.draw;
dispose(pr1);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Draw a rectangle: 3 by 7
* * * * * * *
* * * * * * *
* * * * * * *
Draw a rectangle: 5 by 4
* * * *
* * * *
* * * *
* * * *
* * * *
Visibilitas Anggota Objek
Visibilitas menunjukkan aksesibilitas anggota objek. Anggota objek Pascal memiliki tiga jenis visibilitas -
Sr Tidak | Visibilitas & Aksesibilitas |
---|---|
1 | Public Anggota dapat digunakan oleh unit lain di luar unit program |
2 | Private Anggota hanya dapat diakses di unit saat ini. |
3 | Protected Anggota hanya tersedia untuk objek yang diturunkan dari objek induk. |
Secara default, bidang dan metode objek bersifat publik dan diekspor ke luar unit saat ini.
Konstruktor dan Destruktor untuk Benda Pascal -
Constructorsadalah tipe metode khusus, yang dipanggil secara otomatis setiap kali sebuah objek dibuat. Anda membuat konstruktor di Pascal hanya dengan mendeklarasikan metode dengan konstruktor kata kunci. Biasanya, nama metode adalah Init, namun, Anda dapat memberikan pengenal Anda sendiri yang valid. Anda dapat meneruskan argumen sebanyak yang Anda suka ke dalam fungsi konstruktor.
Destructorsadalah metode yang dipanggil selama penghancuran objek. Metode destruktor menghancurkan alokasi memori yang dibuat oleh konstruktor.
Contoh berikut akan menyediakan konstruktor dan destruktor untuk kelas Persegi Panjang yang akan menginisialisasi panjang dan lebar persegi panjang pada saat pembuatan objek dan menghancurkannya saat keluar dari ruang lingkup.
program exObjects;
type
Rectangle = object
private
length, width: integer;
public
constructor init(l, w: integer);
destructor done;
procedure setlength(l: integer);
function getlength(): integer;
procedure setwidth(w: integer);
function getwidth(): integer;
procedure draw;
end;
var
r1: Rectangle;
pr1: ^Rectangle;
constructor Rectangle.init(l, w: integer);
begin
length := l;
width := w;
end;
destructor Rectangle.done;
begin
writeln(' Desctructor Called');
end;
procedure Rectangle.setlength(l: integer);
begin
length := l;
end;
procedure Rectangle.setwidth(w: integer);
begin
width :=w;
end;
function Rectangle.getlength(): integer;
begin
getlength := length;
end;
function Rectangle.getwidth(): integer;
begin
getwidth := width;
end;
procedure Rectangle.draw;
var
i, j: integer;
begin
for i:= 1 to length do
begin
for j:= 1 to width do
write(' * ');
writeln;
end;
end;
begin
r1.init(3, 7);
writeln('Draw a rectangle:', r1.getlength(), ' by ' , r1.getwidth());
r1.draw;
new(pr1, init(5, 4));
writeln('Draw a rectangle:', pr1^.getlength(), ' by ',pr1^.getwidth());
pr1^.draw;
pr1^.init(7, 9);
writeln('Draw a rectangle:', pr1^.getlength(), ' by ' ,pr1^.getwidth());
pr1^.draw;
dispose(pr1);
r1.done;
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Draw a rectangle: 3 by 7
* * * * * * *
* * * * * * *
* * * * * * *
Draw a rectangle: 5 by 4
* * * *
* * * *
* * * *
* * * *
* * * *
Draw a rectangle: 7 by 9
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
* * * * * * * * *
Destructor Called
Warisan untuk Objek Pascal
Objek Pascal secara opsional dapat mewarisi dari objek induk. Program berikut menggambarkan pewarisan di Pascal Objects. Mari kita buat objek lain bernamaTableTop, yang diwarisi dari objek Rectangle.
program exObjects;
type
Rectangle = object
private
length, width: integer;
public
procedure setlength(l: integer);
function getlength(): integer;
procedure setwidth(w: integer);
function getwidth(): integer;
procedure draw;
end;
TableTop = object (Rectangle)
private
material: string;
public
function getmaterial(): string;
procedure setmaterial( m: string);
procedure displaydetails;
procedure draw;
end;
var
tt1: TableTop;
procedure Rectangle.setlength(l: integer);
begin
length := l;
end;
procedure Rectangle.setwidth(w: integer);
begin
width :=w;
end;
function Rectangle.getlength(): integer;
begin
getlength := length;
end;
function Rectangle.getwidth():integer;
begin
getwidth := width;
end;
procedure Rectangle.draw;
var
i, j: integer;
begin
for i:= 1 to length do
begin
for j:= 1 to width do
write(' * ');
writeln;
end;
end;
function TableTop.getmaterial(): string;
begin
getmaterial := material;
end;
procedure TableTop.setmaterial( m: string);
begin
material := m;
end;
procedure TableTop.displaydetails;
begin
writeln('Table Top: ', self.getlength(), ' by ' , self.getwidth());
writeln('Material: ', self.getmaterial());
end;
procedure TableTop.draw();
var
i, j: integer;
begin
for i:= 1 to length do
begin
for j:= 1 to width do
write(' * ');
writeln;
end;
writeln('Material: ', material);
end;
begin
tt1.setlength(3);
tt1.setwidth(7);
tt1.setmaterial('Wood');
tt1.displaydetails();
writeln;
writeln('Calling the Draw method');
tt1.draw();
end.
Berikut adalah poin-poin penting yang harus dicatat -
Objek Tabletop mewarisi semua anggota objek Rectangle.
Ada juga metode menggambar di TableTop . Ketika imbang metode ini disebut menggunakan meja objek, imbang meja ini akan dipanggil.
Ada contoh implisit bernama self yang mengacu pada contoh objek saat ini.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Table Top: 3 by 7
Material: Wood
Calling the Draw Method
* * * * * * *
* * * * * * *
* * * * * * *
Material: Wood
Anda telah melihat bahwa Pascal Objects menunjukkan beberapa karakteristik paradigma berorientasi objek. Mereka menerapkan enkapsulasi, penyembunyian data dan pewarisan, tetapi mereka juga memiliki keterbatasan. Misalnya, Objek Pascal tidak mengambil bagian dalam polimorfisme. Jadi kelas banyak digunakan untuk mengimplementasikan perilaku berorientasi objek yang tepat dalam suatu program, terutama perangkat lunak berbasis GUI.
Kelas didefinisikan dengan cara yang hampir sama sebagai Objek, tetapi merupakan penunjuk ke Objek daripada Objek itu sendiri. Secara teknis, ini berarti bahwa Kelas dialokasikan di Heap program, sedangkan Objek dialokasikan di Stack. Dengan kata lain, ketika Anda mendeklarasikan variabel sebagai tipe objek, itu akan memakan banyak ruang di tumpukan sebagai ukuran objek, tetapi ketika Anda mendeklarasikan variabel tipe kelas, itu akan selalu mengambil ukuran sebuah pointer di tumpukan. Data kelas yang sebenarnya akan ada di heap.
Mendefinisikan Kelas Pascal
Kelas dideklarasikan dengan cara yang sama seperti objek, menggunakan deklarasi type. Bentuk umum deklarasi kelas adalah sebagai berikut -
type class-identifier = class
private
field1 : field-type;
field2 : field-type;
...
public
constructor create();
procedure proc1;
function f1(): function-type;
end;
var classvar : class-identifier;
Perlu diperhatikan poin-poin penting berikut -
Definisi kelas harus berada di bawah bagian deklarasi tipe program saja.
Kelas ditentukan menggunakan class kata kunci.
Bidang adalah item data yang ada di setiap contoh kelas.
Metode dideklarasikan dalam definisi kelas.
Ada konstruktor standar yang disebut Createdi kelas Root. Setiap kelas abstrak dan setiap kelas beton adalah turunan dari Root, jadi semua kelas memiliki setidaknya satu konstruktor.
Ada destruktor standar yang disebut Destroydi kelas Root. Setiap kelas abstrak dan setiap kelas beton adalah turunan dari Root, jadi, semua kelas memiliki setidaknya satu destruktor.
Mari kita definisikan kelas Rectangle yang memiliki dua anggota data tipe integer - panjang dan lebar dan beberapa fungsi anggota untuk memanipulasi anggota data ini dan prosedur untuk menggambar persegi panjang.
type
Rectangle = class
private
length, width: integer;
public
constructor create(l, w: integer);
procedure setlength(l: integer);
function getlength(): integer;
procedure setwidth(w: integer);
function getwidth(): integer;
procedure draw;
end;
Mari kita tulis program lengkap yang akan membuat turunan dari kelas persegi panjang dan menggambar persegi panjang tersebut. Ini adalah contoh yang sama yang kami gunakan saat mendiskusikan Objek Pascal. Anda akan menemukan kedua program hampir sama, dengan pengecualian berikut -
Anda perlu menyertakan direktif {$ mode objfpc} untuk menggunakan kelas.
Anda perlu menyertakan direktif {$ m +} untuk menggunakan konstruktor.
Instansiasi kelas berbeda dengan instansiasi objek. Hanya mendeklarasikan variabel tidak membuat ruang untuk instance, Anda akan menggunakan konstruktor create untuk mengalokasikan memori.
Berikut adalah contoh lengkapnya -
{$mode objfpc} // directive to be used for defining classes {$m+} // directive to be used for using constructor
program exClass;
type
Rectangle = class
private
length, width: integer;
public
constructor create(l, w: integer);
procedure setlength(l: integer);
function getlength(): integer;
procedure setwidth(w: integer);
function getwidth(): integer;
procedure draw;
end;
var
r1: Rectangle;
constructor Rectangle.create(l, w: integer);
begin
length := l;
width := w;
end;
procedure Rectangle.setlength(l: integer);
begin
length := l;
end;
procedure Rectangle.setwidth(w: integer);
begin
width :=w;
end;
function Rectangle.getlength(): integer;
begin
getlength := length;
end;
function Rectangle.getwidth(): integer;
begin
getwidth := width;
end;
procedure Rectangle.draw;
var
i, j: integer;
begin
for i:= 1 to length do
begin
for j:= 1 to width do
write(' * ');
writeln;
end;
end;
begin
r1:= Rectangle.create(3, 7);
writeln(' Draw Rectangle: ', r1.getlength(), ' by ' , r1.getwidth());
r1.draw;
r1.setlength(4);
r1.setwidth(6);
writeln(' Draw Rectangle: ', r1.getlength(), ' by ' , r1.getwidth());
r1.draw;
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Draw Rectangle: 3 by 7
* * * * * * *
* * * * * * *
* * * * * * *
Draw Rectangle: 4 by 6
* * * * * *
* * * * * *
* * * * * *
* * * * * *
Visibilitas Anggota Kelas
Visibilitas menunjukkan aksesibilitas anggota kelas. Anggota kelas Pascal memiliki lima jenis visibilitas -
Sr Tidak | Visibilitas & Aksesibilitas |
---|---|
1 | Public Anggota ini selalu dapat diakses. |
2 | Private Anggota ini hanya dapat diakses di modul atau unit yang berisi definisi kelas. Mereka dapat diakses dari dalam metode kelas atau dari luarnya. |
3 | Strict Private Anggota ini hanya dapat diakses dari metode kelas itu sendiri. Kelas lain atau kelas turunan dalam unit yang sama tidak dapat mengaksesnya. |
4 | Protected Ini sama dengan privat, kecuali, anggota ini dapat diakses oleh tipe turunan, meskipun mereka diimplementasikan di modul lain. |
5 | Published Ini sama dengan Public, tetapi compiler menghasilkan informasi tipe yang diperlukan untuk streaming otomatis kelas-kelas ini jika compiler dalam status {$ M +}. Bidang yang ditentukan di bagian yang diterbitkan harus dari jenis kelas. |
Konstruktor dan Destruktor untuk Kelas Pascal
Konstruktor adalah metode khusus, yang dipanggil secara otomatis setiap kali objek dibuat. Jadi kami memanfaatkan sepenuhnya perilaku ini dengan menginisialisasi banyak hal melalui fungsi konstruktor.
Pascal menyediakan fungsi khusus yang disebut create () untuk mendefinisikan konstruktor. Anda dapat meneruskan argumen sebanyak yang Anda suka ke dalam fungsi konstruktor.
Contoh berikut akan membuat satu konstruktor untuk kelas bernama Books dan itu akan menginisialisasi harga dan judul buku pada saat pembuatan objek.
program classExample;
{$MODE OBJFPC} //directive to be used for creating classes
{$M+} //directive that allows class constructors and destructors
type
Books = Class
private
title : String;
price: real;
public
constructor Create(t : String; p: real); //default constructor
procedure setTitle(t : String); //sets title for a book
function getTitle() : String; //retrieves title
procedure setPrice(p : real); //sets price for a book
function getPrice() : real; //retrieves price
procedure Display(); // display details of a book
end;
var
physics, chemistry, maths: Books;
//default constructor
constructor Books.Create(t : String; p: real);
begin
title := t;
price := p;
end;
procedure Books.setTitle(t : String); //sets title for a book
begin
title := t;
end;
function Books.getTitle() : String; //retrieves title
begin
getTitle := title;
end;
procedure Books.setPrice(p : real); //sets price for a book
begin
price := p;
end;
function Books.getPrice() : real; //retrieves price
begin
getPrice:= price;
end;
procedure Books.Display();
begin
writeln('Title: ', title);
writeln('Price: ', price:5:2);
end;
begin
physics := Books.Create('Physics for High School', 10);
chemistry := Books.Create('Advanced Chemistry', 15);
maths := Books.Create('Algebra', 7);
physics.Display;
chemistry.Display;
maths.Display;
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Title: Physics for High School
Price: 10
Title: Advanced Chemistry
Price: 15
Title: Algebra
Price: 7
Seperti konstruktor implisit bernama create, ada juga metode destruktor implisit yang digunakan untuk menghancurkan yang Anda dapat melepaskan semua sumber daya yang digunakan di kelas.
Warisan
Definisi kelas Pascal secara opsional dapat mewarisi dari definisi kelas induk. Sintaksnya adalah sebagai berikut -
type
childClas-identifier = class(baseClass-identifier)
< members >
end;
Contoh berikut menyediakan kelas novel, yang mewarisi kelas Buku dan menambahkan lebih banyak fungsionalitas berdasarkan kebutuhan.
program inheritanceExample;
{$MODE OBJFPC} //directive to be used for creating classes
{$M+} //directive that allows class constructors and destructors
type
Books = Class
protected
title : String;
price: real;
public
constructor Create(t : String; p: real); //default constructor
procedure setTitle(t : String); //sets title for a book
function getTitle() : String; //retrieves title
procedure setPrice(p : real); //sets price for a book
function getPrice() : real; //retrieves price
procedure Display(); virtual; // display details of a book
end;
(* Creating a derived class *)
type
Novels = Class(Books)
private
author: String;
public
constructor Create(t: String); overload;
constructor Create(a: String; t: String; p: real); overload;
procedure setAuthor(a: String); // sets author for a book
function getAuthor(): String; // retrieves author name
procedure Display(); override;
end;
var
n1, n2: Novels;
//default constructor
constructor Books.Create(t : String; p: real);
begin
title := t;
price := p;
end;
procedure Books.setTitle(t : String); //sets title for a book
begin
title := t;
end;
function Books.getTitle() : String; //retrieves title
begin
getTitle := title;
end;
procedure Books.setPrice(p : real); //sets price for a book
begin
price := p;
end;
function Books.getPrice() : real; //retrieves price
begin
getPrice:= price;
end;
procedure Books.Display();
begin
writeln('Title: ', title);
writeln('Price: ', price);
end;
(* Now the derived class methods *)
constructor Novels.Create(t: String);
begin
inherited Create(t, 0.0);
author:= ' ';
end;
constructor Novels.Create(a: String; t: String; p: real);
begin
inherited Create(t, p);
author:= a;
end;
procedure Novels.setAuthor(a : String); //sets author for a book
begin
author := a;
end;
function Novels.getAuthor() : String; //retrieves author
begin
getAuthor := author;
end;
procedure Novels.Display();
begin
writeln('Title: ', title);
writeln('Price: ', price:5:2);
writeln('Author: ', author);
end;
begin
n1 := Novels.Create('Gone with the Wind');
n2 := Novels.Create('Ayn Rand','Atlas Shrugged', 467.75);
n1.setAuthor('Margaret Mitchell');
n1.setPrice(375.99);
n1.Display;
n2.Display;
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Title: Gone with the Wind
Price: 375.99
Author: Margaret Mitchell
Title: Atlas Shrugged
Price: 467.75
Author: Ayn Rand
Perlu diperhatikan poin-poin penting berikut -
Anggota kelas Buku memiliki protected visibilitas.
Kelas Novel memiliki dua konstruktor, jadi overload operator digunakan untuk kelebihan beban fungsi.
Prosedur Books.Display telah diumumkan virtual, sehingga metode yang sama dari kelas Novel bisa override Itu.
Konstruktor Novels.Create memanggil konstruktor kelas dasar menggunakan inherited kata kunci.
Antarmuka
Antarmuka didefinisikan untuk memberikan nama fungsi yang umum bagi pelaksana. Pelaksana yang berbeda dapat mengimplementasikan antarmuka tersebut sesuai dengan kebutuhan mereka. Bisa dibilang, interface adalah kerangka, yang diimplementasikan oleh developer. Berikut adalah contoh antarmuka -
type
Mail = Interface
Procedure SendMail;
Procedure GetMail;
end;
Report = Class(TInterfacedObject, Mail)
Procedure SendMail;
Procedure GetMail;
end;
Harap dicatat bahwa, ketika sebuah kelas mengimplementasikan sebuah antarmuka, ia harus mengimplementasikan semua metode dari antarmuka tersebut. Jika metode antarmuka tidak diimplementasikan, maka compiler akan memberikan kesalahan.
Kelas Abstrak
Kelas abstrak adalah kelas yang tidak bisa dibuat instance-nya, hanya diturunkan. Kelas abstrak ditentukan dengan memasukkan kata simbol abstrak dalam definisi kelas, seperti ini -
type
Shape = ABSTRACT CLASS (Root)
Procedure draw; ABSTRACT;
...
end;
Saat mewarisi dari kelas abstrak, semua metode yang ditandai abstrak di deklarasi kelas induk harus ditentukan oleh anak; selain itu, metode ini harus ditentukan dengan visibilitas yang sama.
Kata Kunci Statis
Mendeklarasikan anggota kelas atau metode sebagai statis membuatnya dapat diakses tanpa memerlukan pembuatan instance kelas. Anggota yang dideklarasikan sebagai statis tidak dapat diakses dengan objek kelas yang dipakai (meskipun metode statis dapat). Contoh berikut menggambarkan konsep -
program StaticExample;
{$mode objfpc}
{$static on}
type
myclass=class
num : integer;static;
end;
var
n1, n2 : myclass;
begin
n1:= myclass.create;
n2:= myclass.create;
n1.num := 12;
writeln(n2.num);
n2.num := 31;
writeln(n1.num);
writeln(myclass.num);
myclass.num := myclass.num + 20;
writeln(n1.num);
writeln(n2.num);
end.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
12
31
31
51
51
Anda harus menggunakan direktif {$ static on} untuk menggunakan anggota statis.