Rabu, 31 Maret 2010

ARTIKEL DAN OPINI

Opsi Lain Menggenjot Pajak
Kamis, 06 Agustus 2009 07:44



Tugas berat menanti jajaran Ditjen Pajak dalam kurun waktu lima bulan ke depan. Salah
satunya-dan selalu menjadi indikator kebei hasilan ki-nerja-adalah pencapaian penerimaan
pajak tahun 2009. Akibat efek dari penurunan ekonomi global, penerimaan pajak turut
mengalami perlambatan. Sampai dengan semester I-2009, pajak baru mencapai 48 persen dari
target pajak 2009 sehingga mau tak mau jajaran Ditjen Pajak harus mengenjot penerimaan
pajak, setidaknya untuk menutupi kekurangan 2 persen tersebut Selain mainstream
ekstensifikasi Wajib Pajak dan Intensifikasi Pajak melalui kegiatan benchmarking, masih ada
program lain yang bersifat ad hoc yang dapat dilaksanakan oleh Ditjen Pajak. Tulisan ini akan
menawarkan cara (opsi) lain dalam mengenjot pajak.
Derta Potensial
Persoalan utama dalam mengali potensi pajak adalah ketersediaan data. Selain karena aturan
yang belum bersinergi, kebiasaan transaksi dengan kas (cosh) turut mendorong kurangnya
data yang diperoleh Ditjen Pajak. Data transaksi perbankan merupakan sumber data potensial
dan ampuh dalam menggali pajak. Namun, karena alasan kenyamanan nasabah dan rahasia
perbankan, seperti tertuang dalam Peraturan Bank Indonesia (BI) Nomor 2/19/PBI/2000 tentang
Persyaratan dan Tata Cara Pemberian Perintah dan/atau Izin Tertulis Membuka Rahasia Bank,
apabila Ditjen Pajak akan meminta data perbankan, pasti akan menjadi polemik nasional.
Untuk saat ini, setidaknya ada dua data yang dapat segera dimanfaatkan, yaitu data
penyumbang (donatur) parpol peserta Pemilu 2009 dan data pembeli (investor) Obligasi Ritel
Indonesia 2009. Data ini sangatberguna sekab dalam pengalian potensi perpajakan karena
dapat segera ditentukan apakah donatur tersebut sudah memiliki NPWP dan apakah dana
tersebut sudah dikenakan pajak atau belum.
Tujuan utama dikeluarkannya ORI006 adalah untuk menutupi defisit anggaran. Namun,
manfaat lain yang didapat adalah tersedianya data investor ORI006 tersebut Antusiasme
investor membeli ORI006 ini sangat fantastis, ditunjukkan oleh adanya permintaan tambahan
kuota dari bank penjual ORI006 kepada pemerintah.
Nilai penjualan ORI006 mencapai Rp 4,5 triliun (Senin, 3/8/2009). Dengan mengacu pada
aturan pembelian minimal Rp 5 juta dan maksimal Rp 3 milliar, diprediksi jumlah investor
mencapai 1.500-902.000 investor Kalau rata rata nilai pembelian Rp 100 juta, jumlah investor
diperkirakan mencapai 45.000 investor. Tentunya, investor di sini adalahorang yang memang
dapat dikatakan memiliki uang lebih atau tidak perlu diragukan lagi pasti penghasilannya di atas
Penghasilan Tidak Kena Pajak (PTKP).
Hambatan
Hambatan dalam memperoleh data tersebut dapat bersifat politis dan teknis. Bersifat politis
karena akan secara tidak langsung melibatkan berbagai kepentingan. Resistensi dari parpol
tentunya ada karena akan menganggu kenyamanan dari penyumbangnya.
1 / 3


Opsi Lain Menggenjot Pajak
Kamis, 06 Agustus 2009 07:44


Efek jangka panjangnya akan muncul keenganan dari penyumbang untuk berpartisipasi pada
pemilu berikutnya. Untuk ORI006, apabila data investor dibuka ke Ditjen Pajak, akan
berdampak buruk bagi posisi tawar pemerintah selanjutnya. Kepercayaan akan turun, akibatnya
investor tidak mau masuk lagi ke obligasi pemerintah walaupun imbal hasil {yield) lebih besar
dariperbankan dan pemotongan pajak final lebih kecil dari deposito/tabungan.
Secara teknis, hambatan muncul karena menganggap belum ada aturan yang jelas tentang hal
ini. UU Nomor 10 Tahun 2008 tentang Pemilu tidak mengatur kewajiban ber-NPWP bagi
penyumbang parpol. Hanya peraturan KPU yang mewajibkan bagi penyumbang parpol dengan
nilai di atas Rp 20 juta wajib mencantumkan NPWP-nya.
Walaupun secara teknis bagi Ditjen Pajak tidak bermasalah apakah mencantumkan NPWP
atau tidak asalkan identitas nama dan alamat penyumbang jelas, apabila setelah diteliti belum
ber-NPWP Ditjen Pajak secara jabatan dapat memberikan NPWP baru dan menentukan pajak
tentangnya.
Ditjen Pajak dapat menggunakan Pasal 35A UU Nomor 28 Tahun 2007 tentang Ketentuan
Umum dan Tata Cara Perpajakan (KUP) untuk men-gakses dan menghimpun data dan
informasi untuk kepentingan penerimaan negara. Disebutkan dalam pasal tersebut bahwa
setiap instansi (pemerintah dan swasta), asosiasi, dan pihak lain wajib memberikan data dan
informasi yang berkaitan dengan perpajakan kepada Ditjen Pajak. Sanksi bagi pihak ketiga
yang tidak memenuhi Pasal 35A tersebut nyata disebutkan dalam Pasal 41C yaitu dapat
berupa kurungan dan atau denda.
Perlunya SIN
Ketika APBN sangat tergantung kepada penerimaan pajak, sudah sepantasnya pemerintah
mendukung penuh setiap usaha menghimpun penerimaan pajak. Secara makro, pencapaian
penerimaan pajak juga akan berdampak pada kemampuan pemerintah dalam mengelola
anggaran untuk kepentingan publik. Dukungan yang sangat diperlukan saat ini adalah
membentuk Single Identity Number (SIN), yaitu identitastunggal yang dipergunakan setiap
warga negara ketika ingin mendapatkan pelayanan publik, termasuk jasa perbankan.
SIN ini akan mencakup identitas kependudukan, SIM, perbankan dan perpajakan. Karena
setiap instansi pemerintah/swasta mengeluarkan identitas sendiri dalam memberikan
pelayanan, langkah pertama yang harus dilakukan adalah koordinasi antar instansi
Koordinasi akan efektif jika ada aturan yang mengakomodasi ego setiap instansi terkait
Kemauan pemerintah dapat diwujudkan dalam inisiatif mengeluarkan RUU atau peraturan
pemerintah. SIN akan memberikan informasi menyeluruh kepada Ditjen Pajak untuk mengali
potensi pajak sehingga penulis yakin penerimaan pajak akan sesuai dengan potensi
sebenarnya.
2 / 3


Opsi Lain Menggenjot Pajak
Kamis, 06 Agustus 2009 07:44



Sumber : Sinar Harapan
Oleh Chandra Budi
Staf Direktorat Jenderal Pajak Departemen Keuangan
3
Opsi Lain Menggenjot Pajak
Kamis, 06 Agustus 2009 07:44



Tugas berat menanti jajaran Ditjen Pajak dalam kurun waktu lima bulan ke depan. Salah
satunya-dan selalu menjadi indikator kebei hasilan ki-nerja-adalah pencapaian penerimaan
pajak tahun 2009. Akibat efek dari penurunan ekonomi global, penerimaan pajak turut
mengalami perlambatan. Sampai dengan semester I-2009, pajak baru mencapai 48 persen dari
target pajak 2009 sehingga mau tak mau jajaran Ditjen Pajak harus mengenjot penerimaan
pajak, setidaknya untuk menutupi kekurangan 2 persen tersebut Selain mainstream
ekstensifikasi Wajib Pajak dan Intensifikasi Pajak melalui kegiatan benchmarking, masih ada
program lain yang bersifat ad hoc yang dapat dilaksanakan oleh Ditjen Pajak. Tulisan ini akan
menawarkan cara (opsi) lain dalam mengenjot pajak.
Derta Potensial
Persoalan utama dalam mengali potensi pajak adalah ketersediaan data. Selain karena aturan
yang belum bersinergi, kebiasaan transaksi dengan kas (cosh) turut mendorong kurangnya
data yang diperoleh Ditjen Pajak. Data transaksi perbankan merupakan sumber data potensial
dan ampuh dalam menggali pajak. Namun, karena alasan kenyamanan nasabah dan rahasia
perbankan, seperti tertuang dalam Peraturan Bank Indonesia (BI) Nomor 2/19/PBI/2000 tentang
Persyaratan dan Tata Cara Pemberian Perintah dan/atau Izin Tertulis Membuka Rahasia Bank,
apabila Ditjen Pajak akan meminta data perbankan, pasti akan menjadi polemik nasional.
Untuk saat ini, setidaknya ada dua data yang dapat segera dimanfaatkan, yaitu data
penyumbang (donatur) parpol peserta Pemilu 2009 dan data pembeli (investor) Obligasi Ritel
Indonesia 2009. Data ini sangatberguna sekab dalam pengalian potensi perpajakan karena
dapat segera ditentukan apakah donatur tersebut sudah memiliki NPWP dan apakah dana
tersebut sudah dikenakan pajak atau belum.
Tujuan utama dikeluarkannya ORI006 adalah untuk menutupi defisit anggaran. Namun,
manfaat lain yang didapat adalah tersedianya data investor ORI006 tersebut Antusiasme
investor membeli ORI006 ini sangat fantastis, ditunjukkan oleh adanya permintaan tambahan
kuota dari bank penjual ORI006 kepada pemerintah.
Nilai penjualan ORI006 mencapai Rp 4,5 triliun (Senin, 3/8/2009). Dengan mengacu pada
aturan pembelian minimal Rp 5 juta dan maksimal Rp 3 milliar, diprediksi jumlah investor
mencapai 1.500-902.000 investor Kalau rata rata nilai pembelian Rp 100 juta, jumlah investor
diperkirakan mencapai 45.000 investor. Tentunya, investor di sini adalahorang yang memang
dapat dikatakan memiliki uang lebih atau tidak perlu diragukan lagi pasti penghasilannya di atas
Penghasilan Tidak Kena Pajak (PTKP).
Hambatan
Hambatan dalam memperoleh data tersebut dapat bersifat politis dan teknis. Bersifat politis
karena akan secara tidak langsung melibatkan berbagai kepentingan. Resistensi dari parpol
tentunya ada karena akan menganggu kenyamanan dari penyumbangnya.
1 / 3


Opsi Lain Menggenjot Pajak
Kamis, 06 Agustus 2009 07:44


Efek jangka panjangnya akan muncul keenganan dari penyumbang untuk berpartisipasi pada
pemilu berikutnya. Untuk ORI006, apabila data investor dibuka ke Ditjen Pajak, akan
berdampak buruk bagi posisi tawar pemerintah selanjutnya. Kepercayaan akan turun, akibatnya
investor tidak mau masuk lagi ke obligasi pemerintah walaupun imbal hasil {yield) lebih besar
dariperbankan dan pemotongan pajak final lebih kecil dari deposito/tabungan.
Secara teknis, hambatan muncul karena menganggap belum ada aturan yang jelas tentang hal
ini. UU Nomor 10 Tahun 2008 tentang Pemilu tidak mengatur kewajiban ber-NPWP bagi
penyumbang parpol. Hanya peraturan KPU yang mewajibkan bagi penyumbang parpol dengan
nilai di atas Rp 20 juta wajib mencantumkan NPWP-nya.
Walaupun secara teknis bagi Ditjen Pajak tidak bermasalah apakah mencantumkan NPWP
atau tidak asalkan identitas nama dan alamat penyumbang jelas, apabila setelah diteliti belum
ber-NPWP Ditjen Pajak secara jabatan dapat memberikan NPWP baru dan menentukan pajak
tentangnya.
Ditjen Pajak dapat menggunakan Pasal 35A UU Nomor 28 Tahun 2007 tentang Ketentuan
Umum dan Tata Cara Perpajakan (KUP) untuk men-gakses dan menghimpun data dan
informasi untuk kepentingan penerimaan negara. Disebutkan dalam pasal tersebut bahwa
setiap instansi (pemerintah dan swasta), asosiasi, dan pihak lain wajib memberikan data dan
informasi yang berkaitan dengan perpajakan kepada Ditjen Pajak. Sanksi bagi pihak ketiga
yang tidak memenuhi Pasal 35A tersebut nyata disebutkan dalam Pasal 41C yaitu dapat
berupa kurungan dan atau denda.
Perlunya SIN
Ketika APBN sangat tergantung kepada penerimaan pajak, sudah sepantasnya pemerintah
mendukung penuh setiap usaha menghimpun penerimaan pajak. Secara makro, pencapaian
penerimaan pajak juga akan berdampak pada kemampuan pemerintah dalam mengelola
anggaran untuk kepentingan publik. Dukungan yang sangat diperlukan saat ini adalah
membentuk Single Identity Number (SIN), yaitu identitastunggal yang dipergunakan setiap
warga negara ketika ingin mendapatkan pelayanan publik, termasuk jasa perbankan.
SIN ini akan mencakup identitas kependudukan, SIM, perbankan dan perpajakan. Karena
setiap instansi pemerintah/swasta mengeluarkan identitas sendiri dalam memberikan
pelayanan, langkah pertama yang harus dilakukan adalah koordinasi antar instansi
Koordinasi akan efektif jika ada aturan yang mengakomodasi ego setiap instansi terkait
Kemauan pemerintah dapat diwujudkan dalam inisiatif mengeluarkan RUU atau peraturan
pemerintah. SIN akan memberikan informasi menyeluruh kepada Ditjen Pajak untuk mengali
potensi pajak sehingga penulis yakin penerimaan pajak akan sesuai dengan potensi
sebenarnya.
2 / 3


Opsi Lain Menggenjot Pajak
Kamis, 06 Agustus 2009 07:44



Sumber : Sinar Harapan
Oleh Chandra Budi
Staf Direktorat Jenderal Pajak Departemen Keuangan
3

Kamis, 18 Februari 2010

MEDALI OLYMPIADE DIBUAT DARI eWASTE

PERTAMA kalinya dalam sejarah olimpiade, medali yang akan diberikan untuk para pemenang terbuat dari logam yang terdapat dari komponen elektronik bekas.?Teck, perusahaan asal Kanada yang menjadi penyuplai metal untuk medali olimpiade musim dingin mengungkapkan, penggunaan bahan emas, perak dan tembaga yang dikumpulkan dari logam-logam yang terdapat dari barang elektronik bekas (eWaste) ini cukup membantu. Dalam kondisi langkanya komponen logam lain serta mengurangi resiko senyawa logam tidak dapat diperbaharukan.?Dilansir dari Cellular News, Rabu (17/2/2010)

Meskipun Teck hanya menggunakan logam dari eWaste ini dalam jumlah sekian persen, Teck mengupayakan agar medali tersebut pun dapat di daur ulang di kemudian hari.?Badan penanggulangan sampah dan perangkat elektronik di Eropa (WEEE) berupaya untuk menawarkan medali dengan bahan eWaste ini ke pertandingan-pertandingan lainnya.

Dengan meningkatnya jumlah eWaste di Eropa sekitar tiga hingga lima persen setiap tahunnya atau hampir mencapai tiga kali dari alur pengumpulan total sampah di Eropa, WEEE menggunakan kebijakan untuk tidak menyatukan sampah elektronik dengan sampah jenis lainnya.?? eWaste tersebut tidak didaur ulang melainkan di ekspor ke beberapa negara berkembang untuk dijadikan barang 'second' yang masih bisa digunakan. Beberapa pihak juga melakukan ekspor eWaste secara ilegal ke negara-negara seperti Ghana, Nigeria dan China.

Negara-negara tersebut umumnya tidak memiliki kemampuan untuk mendaur ulang eWaste tersebut secara aman dan bertanggung jawab. Akhirnya, negara berkembang yang menerima ekspor eWaste tersebut akan menjadi tempat pembuangan akhir eWaste dari Eropa. Padahal banyak dari perangkat elektronik ini yang mengandung komponen beracun yang dapat membahayakan kehidupan lingkungan dan manusia.***

Selasa, 16 Februari 2010

MATA UANG ASING

ritten by b0cah
Nov 18, 2007 at 07:00 AM

100IDR Uang yang kamu pakai hanya berlaku di Indonesia, kamu hanya bisa menggunakan uang kamu hanya di Indonesia, begitu juga orang dari luar negeri sana, jika mereka berkunjung ke negara kita, mereka tidak bisa menggunakan uang di negara asal mereka. Lalu gimana caranya kita bisa berbelanja jika kita kebetulan ke negeri orang? Atau gimana cara turis-turis itu berbelanja di negeri kita?

55010863 Kita ketahui bersama bahwa sebelum ada uang, orang melakukan ”jual-beli” dengan sistem BARTER, yaitu dengan menukarkan satu barang dengan jenis barang lain yang mereka sepakati memiliki nilai yang sama. Namun cara seperti itu dirasa kurang praktis, sehingga akhirnya muncul lah sistem pembayaran dengan mata uang.

currency+sample4 Tiap-tiap negara memiliki ”nilai” tersendiri dalam menentukan nilai mata uangnya, itulah yang menyebabkan mata uang satu negara hanya berlaku di negara tersebut. Misal Indonesia mata uangnya Rupiah, Inggris-Poundsterling, Amerika-US Dollar, negara eropa- Euro, dan sebagainya. Perbedaan nilai antara mata uang tersebut disebut KURS









Sejarah pertukaran mata uang sendiri dimulai sejak munculnya mata uang itu sendiri, pada mulanya tiap negara menggunakan standar EMAS untuk menjamin ketersediaan uang di negaranya. Sistem ini berlaku hingga Pecah perang Dunia I. Lalu atas prakarsa Amerika serikat diadakanlah pertemuan moneter dunia yaitu The Bretton Woods Conference pada tahun 1944 (dihadiri 44 negara). Hasil pertemuan tersebut menyepakati bahwa mata tiap negara menentukan nilai mata uangnya mengacu kepada dollar Amerika.

180px-Goldkey_logo_removed Sistem tersebut berubah lagi pada tahun 1971, diberlakukan sistem nilai tukat mengambang, jadi tidak harus mengacu kepada dollar Amerika.









currency-exchange-480 Misal kamu ingin ke Singapura, maka kamu bisa menukarkan uang Rupah kamu dengan uang dollar Singapura di tempat bank atau tempat penukaran uang ”money changer”, disana kamu bisa melihat berapa nilai tukar yang berlaku untuk tiap-tiap negara.

Nah adakah diantara kamu yang gemar mengkoleksi mata uang dari negara lain? Menarik juga lho.***

(dari berbagai sumber)
(sumber foto : dkimages, bi, wikimedia)
E-mail

TROFI PIALA DUNIA FIFA 2010 MAMPIR DI INDONESIA

INDONESIA mendapatkan kesempatan untuk melihat secara langsung trofi Piala Dunia FIFA. Dalam tur keliling dunia yang merupakan kerjasama FIFA dan Coca-cola, trofi itu tidak hanya berkeliling ke negara-negara yang memiliki tim sepakbola nasional dengan prestasi dunia, juga mengunjungi ke negara-negara yang tim nasional sepakbolanya belum pernah lolos ke Final Piala Dunia FIFA.

Pada awal tahun 2010, trofi Piala Dunia FIFA akan hadir di Indonesia. "Jakarta untuk pertama kalinya dikunjungi Trofi Piala Dunia FIFA tahun 2006 dan tahun 2010 merupakan kunjungan kedua di Indonesia. Coca-cola Indonesia akan menggelar berbagai event menarik untuk menyambut kedatangan Trofi yang bergensi itu," dikatakan Bobby Suadi, Senior Brand Manager Coca-cola Indonesia saat jumpa pemenang Piala Coca-cola 2009 di Jakarta.

Selain itu, Coca-cola mengirimkan tiga orang yaitu pemain terbaik, pelatih terbaik dan suporter beruntung pada Piala Coca-cola 2009 yang digelar di Jakarta, Bandung dan Surabaya. Ketiga orang itu Andi Gunawan (pelatih terbaik) dari SMA 16 Bandung, Dedi Kusnendar (pemain terbaik) dari SMA Darussalam Ciputat, dan Muhammad Yhuki Safarullah (suporter) dari SMA 1 Batujajar Bandung mendapat kesempatan menyaksikan secara langsung babak empat besar final Piala Dunia 2010 di Afrika Selatan.***

(dari berbagai sumber)
TROFI PIALA DUNIA FIFA 2010 MAMPIR DI INDONESIA
E-mail

Minggu, 15 November 2009

Keep Dreaming Keep ACtion

KEEP DREAMING KEEP ACTIONBagikan
21 September 2009 jam 5:58
** SELAMAT IDUL FITRI 1430H BAGI YG MERAYAKAN **


Einstein mengatakan bahwa: “Ada dua cara menjalani hidup, yaitu menjalaninya dengan keajaiban-keajaiban atau menjalaninya dengan biasa-biasa saja“.

Sekarang ini banyak selogan yang dikeluarkan oleh banyak orang yang topiknya seolah membius kita: “Stop Dreaming Start Action“. Saya mengatakan bahwa slogan itu sepenuhnya tidak benar.

Mengapa? Coba kita bayangkan, segala sesuatu yang Anda jalani saat ini adalah tidak lepas dari ‘dream’ atau mimpi Anda entah beberapa tahun yang lalu kan?

Sejarah pesawat terbang yang menjadi angkutan favorit saat ini berawal dari sebuah mimpi yang menjadi kenyataan. Thomas Alfa Edison juga menemukan bolam lampu dari mimpi besar dia untuk menerangi dunia.

Jadi totally kita semua harus tetap memupuk mimpi-mimpi besar kita untuk membuat perubahan yang membantu terwujudnya dunia yang lebih maju dan bermanfaat bagi orang banyak.

Jadi dua cara untuk untuk menjalani kehidupan ini dan keduanya benar.

Dengan penuh keajaiban karena kita menyerahkan totally kepada Kuasa Tuhan Yang Maha Kuasa, dan

Dengan biasa-biasa saja, karena yaaa… memang beginilah kehidupan ini.

Sikap Kita Menentukan Segala_a

Sikap Kita Menentukan Segalanya
August 14th, 2009

KATA MUTIARA

Beberapa tahun yang lalu, saat saya melakukan perjalanan ke Amerika Serikat, saya sedang menanti di ruang tunggu bandara ketika saya membaca sebuah puisi yang dimuat di sebuah majalan.

Saya percaya, bahwa secara keseluruhan puisi ini merangkum peranan kita dalam mencapai masa depan yang sukses.

SIKAP

Semakin lama saya hidup, semakin saya sadar
Akan pengaruh sikap dalam kehidupan

Sikap lebih penting daripada ilmu,
daripada uang, daripada kesempatan,
daripada kegagalan, daripada keberhasilan,
daripada apapun yang mungkin dikatakan
atau dilakukan seseorang.

Sikap lebih penting
daripada penampilan, karunia, atau keahlian.
Hal yang paling menakjubkan adalah
Kita memiliki pilihan untuk menghasilkan
sikap yang kita miliki pada hari itu.

Kita tidak dapat mengubah masa lalu
Kita tidak dapat mengubah tingkah laku orang
Kita tidak dapat mengubah apa yang pasti terjadi

Satu hal yang dapat kita ubah
adalah satu hal yang dapat kita kontrol,
dan itu adalah sikap kita.

Saya semakin yakin bahwa hidup adalah
10 persen dari apa yang sebenarnya terjadi pada diri kita,
dan 90 persen adalah bagaimana sikap kita menghadapinya.

Akhirnya: Seluruh pilihan terletak di tangan Anda, tidak ada JIKA atau TETAPI. Andalah pengemudinya. Andalah yang menentukan JALAN HIDUP ANDA…!

Ditulis kembali oleh: Kata-Kata Mutiara

Sikap Kita Menentukan Segala_a

Sikap Kita Menentukan Segalanya
August 14th, 2009

KATA MUTIARA

Beberapa tahun yang lalu, saat saya melakukan perjalanan ke Amerika Serikat, saya sedang menanti di ruang tunggu bandara ketika saya membaca sebuah puisi yang dimuat di sebuah majalan.

Saya percaya, bahwa secara keseluruhan puisi ini merangkum peranan kita dalam mencapai masa depan yang sukses.

SIKAP

Semakin lama saya hidup, semakin saya sadar
Akan pengaruh sikap dalam kehidupan

Sikap lebih penting daripada ilmu,
daripada uang, daripada kesempatan,
daripada kegagalan, daripada keberhasilan,
daripada apapun yang mungkin dikatakan
atau dilakukan seseorang.

Sikap lebih penting
daripada penampilan, karunia, atau keahlian.
Hal yang paling menakjubkan adalah
Kita memiliki pilihan untuk menghasilkan
sikap yang kita miliki pada hari itu.

Kita tidak dapat mengubah masa lalu
Kita tidak dapat mengubah tingkah laku orang
Kita tidak dapat mengubah apa yang pasti terjadi

Satu hal yang dapat kita ubah
adalah satu hal yang dapat kita kontrol,
dan itu adalah sikap kita.

Saya semakin yakin bahwa hidup adalah
10 persen dari apa yang sebenarnya terjadi pada diri kita,
dan 90 persen adalah bagaimana sikap kita menghadapinya.

Akhirnya: Seluruh pilihan terletak di tangan Anda, tidak ada JIKA atau TETAPI. Andalah pengemudinya. Andalah yang menentukan JALAN HIDUP ANDA…!

Ditulis kembali oleh: Kata-Kata Mutiara

Anda Dan Pertarungan Hidup

Anda dan Pertarungan Hidup
August 11th, 2009


kata mutiara

Apapun yang Anda perjuangkan melalui pertarungan – pasti merupakan sesuatu yang penting bagi Anda. Itu sebabnya Anda dikenal dari apa yang Anda pertarungkan. (Mario Teguh)

Dalam hidup Anda sering menghadapi pertarungan. Berbagai macam pertarungan telah Anda lewati bukan? Mulai dari Anda mencari pacar, jodoh, mencari pekerjaan, mempertahankan prestasi di depan supervisor Anda … semuanya adalah pertarungan yang membutuhkan talenta Anda di dalamnya.

Sayangnya tidak semua orang bisa memilah dan memilih, mana-mana pertarungan yang mengharuskan kita untuk terjun di dalamnya atau justru kita hindari.

Hal-hal sepele (peanut) yang tidak penting, yang membuat nyali tarung Anda menggelora dan memaksa Anda untuk bertarung dengan orang lain menunjukkan dengan sesungguhnya bahwa SEPELE lah dan kecillah Anda.

Lain halnya jika yang Anda pertarungkan hal-hal yang SANGAT BAIK dan BERNILAI, maka begitulah orang lain akan menganggap Anda.

Hidup memang harus memilih, demikian juga dengan ‘pertarungan’ dalam kehidupan Anda. Oleh karenanya, janganlah membuang setiap detik dari waktu Anda untuk bertarung dengan hal-hal yang sepele. Naikkanlah KELAS Anda dengan hanya bertarung pada hal-hal yang BERNILAI dan BERGUNA paling tidak untuk diri Anda sendiri dan untuk selanjutnya bagi yang lain.

Akhirnya saya harus katakan bahwa: YOU ARE STRONGER THAN YOU THINK YOU ARE

Anda Dan Pertarungan Hidup

Anda dan Pertarungan Hidup
August 11th, 2009


kata mutiara

Apapun yang Anda perjuangkan melalui pertarungan – pasti merupakan sesuatu yang penting bagi Anda. Itu sebabnya Anda dikenal dari apa yang Anda pertarungkan. (Mario Teguh)

Dalam hidup Anda sering menghadapi pertarungan. Berbagai macam pertarungan telah Anda lewati bukan? Mulai dari Anda mencari pacar, jodoh, mencari pekerjaan, mempertahankan prestasi di depan supervisor Anda … semuanya adalah pertarungan yang membutuhkan talenta Anda di dalamnya.

Sayangnya tidak semua orang bisa memilah dan memilih, mana-mana pertarungan yang mengharuskan kita untuk terjun di dalamnya atau justru kita hindari.

Hal-hal sepele (peanut) yang tidak penting, yang membuat nyali tarung Anda menggelora dan memaksa Anda untuk bertarung dengan orang lain menunjukkan dengan sesungguhnya bahwa SEPELE lah dan kecillah Anda.

Lain halnya jika yang Anda pertarungkan hal-hal yang SANGAT BAIK dan BERNILAI, maka begitulah orang lain akan menganggap Anda.

Hidup memang harus memilih, demikian juga dengan ‘pertarungan’ dalam kehidupan Anda. Oleh karenanya, janganlah membuang setiap detik dari waktu Anda untuk bertarung dengan hal-hal yang sepele. Naikkanlah KELAS Anda dengan hanya bertarung pada hal-hal yang BERNILAI dan BERGUNA paling tidak untuk diri Anda sendiri dan untuk selanjutnya bagi yang lain.

Akhirnya saya harus katakan bahwa: YOU ARE STRONGER THAN YOU THINK YOU ARE

Anda Dan Pertarungan Hidup

Anda dan Pertarungan Hidup
August 11th, 2009


kata mutiara

Apapun yang Anda perjuangkan melalui pertarungan – pasti merupakan sesuatu yang penting bagi Anda. Itu sebabnya Anda dikenal dari apa yang Anda pertarungkan. (Mario Teguh)

Dalam hidup Anda sering menghadapi pertarungan. Berbagai macam pertarungan telah Anda lewati bukan? Mulai dari Anda mencari pacar, jodoh, mencari pekerjaan, mempertahankan prestasi di depan supervisor Anda … semuanya adalah pertarungan yang membutuhkan talenta Anda di dalamnya.

Sayangnya tidak semua orang bisa memilah dan memilih, mana-mana pertarungan yang mengharuskan kita untuk terjun di dalamnya atau justru kita hindari.

Hal-hal sepele (peanut) yang tidak penting, yang membuat nyali tarung Anda menggelora dan memaksa Anda untuk bertarung dengan orang lain menunjukkan dengan sesungguhnya bahwa SEPELE lah dan kecillah Anda.

Lain halnya jika yang Anda pertarungkan hal-hal yang SANGAT BAIK dan BERNILAI, maka begitulah orang lain akan menganggap Anda.

Hidup memang harus memilih, demikian juga dengan ‘pertarungan’ dalam kehidupan Anda. Oleh karenanya, janganlah membuang setiap detik dari waktu Anda untuk bertarung dengan hal-hal yang sepele. Naikkanlah KELAS Anda dengan hanya bertarung pada hal-hal yang BERNILAI dan BERGUNA paling tidak untuk diri Anda sendiri dan untuk selanjutnya bagi yang lain.

Akhirnya saya harus katakan bahwa: YOU ARE STRONGER THAN YOU THINK YOU ARE

Jangan Mati Bersama Musik Anda

hanya ada satu kehidupan
bagi kita masing-masing
hidup kita sendiri
—Euripides
Seorang musisi harus
menciptakan musik, seorang
seniman harus melukis,
seorang penyair harus
menulis, jika ia ingin merasa
damai dengan dirinya sendiri.
Apa yang seseorang bisa
lakukan, harus ia lakukan.
—Abraham Maslow

Saat ini Anda tinggal di dunia yang seluruh sistem serta elemennya digerakkan oleh satu dengan yang lainnya. Masing-masing bagian di dalam dunia ini tidak bisa hidup sendiri, semua saling bergantung satu dengan yang lainnya.

At top of that ada Daya yang sungguh luar biasa yang mengatur semuanya, yaitu Tuhan Yang Maha Kuasa. Dia menjalankan semua elemen itu dengan seimbang dan sangat sempurna.

Perlu Anda ketahui juga bahwa, Anda dan kita semua adalah bagian sistem yang bergerak itu. Anda merasa bahwa Anda adalah sistem yang paling penting dari seluruh yang ada di jagad raya ini. Sebetulnya tidak.

Anda muncul di dunia juga adalah bagian dari proses sistem yang sangat rumit itu. Tepat waktu, pada tempat yang sesuai dan dengan cara yang sudah ditentukan dengan benar oleh Dia Yang Maha Kuasa.

So what? Saya ingin mengajak kepada Anda bahwa di dunia ini tidak ada yang tidak pas. Mungkin Anda merasa bahwa pekerjaan, keluarga, isteri, anak dan suasana yang Anda jalani tidak pas menurut logis Anda. Tapi tidak kawan, semua itu sudah terdetailkan oleh sistem rumit itu. Dan tidak ada yang luput dari perhatiannya.

Semua yang dari awal hingga akhir nanti semuanya sudah didesain sedemikian rupa sehingga selaras dengan jalannya sistem detail yang lain.

Semua telah selaras, tepat dan sudah dapat dipastikan semuanya sesuai dengan hukum kemauan-Nya. Tinggal tugas Anda lah saat ini untuk memainkan peran Anda dengan optimal mungkin. Jangan sia-siakan peranan Anda itu.

Sehingga, menyesali apapun yang terjadi di Anda atau sekeliling Anda tidaklah ada artinya sama sekali.

by: Kata-Kata Mutiara

Jangan Mati Bersama Musik Anda



hanya ada satu kehidupan
bagi kita masing-masing
hidup kita sendiri
—Euripides
Seorang musisi harus
menciptakan musik, seorang
seniman harus melukis,
seorang penyair harus
menulis, jika ia ingin merasa
damai dengan dirinya sendiri.
Apa yang seseorang bisa
lakukan, harus ia lakukan.
—Abraham Maslow

Saat ini Anda tinggal di dunia yang seluruh sistem serta elemennya digerakkan oleh satu dengan yang lainnya. Masing-masing bagian di dalam dunia ini tidak bisa hidup sendiri, semua saling bergantung satu dengan yang lainnya.

At top of that ada Daya yang sungguh luar biasa yang mengatur semuanya, yaitu Tuhan Yang Maha Kuasa. Dia menjalankan semua elemen itu dengan seimbang dan sangat sempurna.

Perlu Anda ketahui juga bahwa, Anda dan kita semua adalah bagian sistem yang bergerak itu. Anda merasa bahwa Anda adalah sistem yang paling penting dari seluruh yang ada di jagad raya ini. Sebetulnya tidak.

Anda muncul di dunia juga adalah bagian dari proses sistem yang sangat rumit itu. Tepat waktu, pada tempat yang sesuai dan dengan cara yang sudah ditentukan dengan benar oleh Dia Yang Maha Kuasa.

So what? Saya ingin mengajak kepada Anda bahwa di dunia ini tidak ada yang tidak pas. Mungkin Anda merasa bahwa pekerjaan, keluarga, isteri, anak dan suasana yang Anda jalani tidak pas menurut logis Anda. Tapi tidak kawan, semua itu sudah terdetailkan oleh sistem rumit itu. Dan tidak ada yang luput dari perhatiannya.

Semua yang dari awal hingga akhir nanti semuanya sudah didesain sedemikian rupa sehingga selaras dengan jalannya sistem detail yang lain.

Semua telah selaras, tepat dan sudah dapat dipastikan semuanya sesuai dengan hukum kemauan-Nya. Tinggal tugas Anda lah saat ini untuk memainkan peran Anda dengan optimal mungkin. Jangan sia-siakan peranan Anda itu.

Sehingga, menyesali apapun yang terjadi di Anda atau sekeliling Anda tidaklah ada artinya sama sekali.

by: Kata-Kata Mutiara

Sabtu, 14 November 2009

h

Menu Dan Editor Turbo Pascal


1.1 Menu
Menu adalah daftar pilihan utama yang terdapat pada Menu Bar (bagian atas) jendela Turbo Pascal, yaitu; File, Edit, Search, Run dan seterusnya.
Sedangkan Editor adalah tempat mengetik listing program itu sendiri. Untuk lebih jelasnya lihatlah keterangan pada Gambar 1.1 dibawah ini



GAMBAR 1-1

Jika Anda berada dalam editor (mengetik listing program) Anda bisa menekan tombol F10 untuk mengakses menu atau menekan tombol ALT kemudian diikuti huruf pertama dari menu yang akan dipilih, dan ESC untuk krmbali ke Editor lebih lengkapnya sebagi berikut :

F10 Mengakses menu, kemudian tekan anak panah untuk memilih menu atau submenu yang lain.
Esc Kembali ke Editor
ALT+ F Mengakses menu File
ALT + E Mengakses menu Edit
ALT + S Mengakses menu Search
ALT + R Mengakses menu Run
ALT + C Mengakses menu Compile
ALT + D Mengakses menu Debug
ALT + T Mengakses menu Tools
ALT + O Mengakses menu Options
ALT + W Mengakses menu Windows
ALT + H Mengakses menu Help



MENU FILE
New Membuat program baru
Open Memanggil program dari disk
Save Menyimpan program dengan nama yang sama
Save As Menyimpan program dengan nama yang lain
Save All Menyimpan semua program yang ada di layar
Cahange dir Mengubah drive aktif untuk penyimpanan dan pemanggilan file. Jika anda mengubah drive dengan perintah ini, dan anda sedang bekerja dengan program grafik, jangan lupa untuk menyatukan data dengan semua file unit ( yaitu semua file yang berakhiran tpu), jika tidak, bisa terjadi “error”, Turbo Pascal tidak dapat menemukan File-file TPU karena lokasi diubah dengan change dir.
Print Untuk mencetak
Printer setup Pengaturan printer
DOS Shell Masuk ke DOS untuk sementara, untuk kembali ke Turbo Pascal ketik Exit kemudian Enter.
Exit Keluar dari Turbo Pascal ( Menutup Turbo Pascal).

MENU EDIT

Undo Mengembalikan yang terhapus terakhir
Redo Menghapus kembali yang di-Undo
Cut Menghapus blok
Copy Mengcopy blok
Paste Memanggil (Mengeluarkan) isi Clipboard
Clear Menghapus blok
Show Clipboard Menampilkan isi Clipboard

PERINTAH-PERINTAH TOMBOL

Esc Keluar dari suatu pilihan proses
F1 Help (Bantuan)
F2 Save (Menyimpan file/program)
F3 Open (Memanggil program dari disk)
F4 Go to cursor (Jalankan program hingga ke posisi kursor)
F5 Zoom (Memperkecil/memperbesar jendela)
F6 Next (Ke program berikutnya – berpindah antar program/jendela)
F7 Trace info (Menjalankan program statement–by–statement)
F8 Step over (Menjalankan procedure yang sedang di-debug)
F9 Make (Membuat file .EXE)
F10 Mengakses menu Turbo Pascal
Alt + 0 (nol) List (Menampilkan daftar program yang pernah dipanggil)
Alt + F1 Previous topic (Ke topik sebelumnya – Help)
Alt + F3 Close (Menutup program)
Alt + F5 User screen (Melihat hasil Run pada layar)
Alt + F7 Go to previous (Tools)
Alt + F8 Go to next (Tools)
Alt + F9 Compile (Mengkompilasi Program)
Alt + X Exit (Keluar/menutup Turbo Pascal)
Alt + Backspace Undo (Mengembalikan yang terhapus terakhir)
Shift + F1 Index (Bantuan dengan menu abjad)
Shift + F2 Grep (Untuk menginstalasi tool)
Shift + F6 Previous (Ke program sebelumnya jika di layar ada beberapa program)
Shift + Del Cut (Menghapus blok)
Shift + Ins Paste (Memanggil isi Clipboard)
Control + F1 Topic search (Bantuan untuk topik utama – Help untuk Language)
Control + F2 Program reset (Menjalankan kembalo program dari awal)
Control + F3 Call stack (Memanggil stack)
Control + F4 Evaluate/ modify (Mengevaluasi variabel atau ekspresi)
Control + F5 Size/ Move (Memindahkan atau mengubah ukuran jendela)
Control + F7 Add watch (Untuk debug)
Control + F8 Membuat atau menghapus ‘breakpoint’
Control + F9 Run (Menjalankan program)
Control + Ins Copy (Mengcopy blok)
Control + Del Clear(Menghapus blok)

EDITOR

PERINTAH MENGAKSES MENU

F10 Mengakses menu
Ctrl + KS atau F2 Menyimpan program ke disk
F3 Memanggil program dari disk
Alt + F3 Menutup program atau jendela yang sedang aktif

PERINTAH- PERINTAH MEMINDAH KURSOR

Ctrl + S atau Anak Panah Kiri Satu karakter ke kiri
Ctrl + D atau Anak Panah Kanan Satu karakter ke kanan
Ctrl + A atau Anak Panah Kiri Satu kata ke kiri
Ctrl + F atau Anak Panah Kanan Satu kata ke kanan
Ctrl + E atau Anak Panah Atas Satu karakter ke Atas
Ctrl + X atau Anak Panah Bawah Satu karakter ke Bawah
Ctrl + W Menggulung satu layar ke atas
Ctrl + Z Menggulung satu layar ke bawah
Ctrl + R Atau PgUp Menggulung satu halaman ke atas
Ctrl + C atau PgDn Menggulung satu halaman ke bawah

PERINTAH-PERINTAH MENYISIP DAN MENGHAPUS
Ctrl + V atau Ins Mematikan/menghidupkan mode insert
Ctrl + N Menyisip baris
Ctrl + Y Menghapus baris
Ctrl + QY Hapus hingga ke akhir baris
Ctrl + H atau Backspace Menghapus satu karakter ke kiri
Ctrl + G atau Del Menghapus satu karakter ke kanan
Ctrl + T Menghapus satu kata ke kanan




MENCARI DAN MENGGANTI KATA

Ctrl + QF Mencari kata
Ctrl + QA Mencari dan mengganti kata


PERINTAH-PERINTAH BLOK

Ctrl + KB Menandai awal blok
Ctrl + KK Menandai akhir blok
Ctrl + KT Menandai sebuah kata
Ctrl + KC Mengcopy blok
Ctrl + KV Memindah blok
Ctrl + KY Menghapus blok
Ctrl + KR Membaca blok dari disk
Ctrl + KW Menulis blok dari disk
Ctrl + KH Menyembunyikan atau memunculkan tanda blok
Ctrl + KP Mencetak blok ke printer
Ctrl + KI Mengindentasi blok
Ctrl + KU Meng-undindentasi blok
Ctrl + QB Memindahkan kursor ke awal blok
Ctrl + QK Memindahkan kursor ke akhir blok
Ctrl + KD Keluar dari menu
Ctrl + KL Menandai garis (mark line)
Ctrl + Ins Mengcopy blok ke Clipboard
Shift + Del Hapus blok dan kirim (copy) ke Clipboard
Ctrl + Del Menghapus Blok
Shift + Ins Panggil Isi Clipboard










Elemen-Elemen Bahasa
(Languge Elements)


Sebelum kita membuat program, maka terlebih dahulu kita harus mengerti tentang elemen-elemen bahasa (language Elements) Turbo Pascal seperti Reserved Word, Statement, Type, Constants, variable, Tipe data, Label, Operator dan lain-lain.

2.1 Reserved Word
Reserved word adalah kata-kata yang tidak dapat dijadikan menjadi identifier (Pengenal), karena kata-kata tersebut sudah mempunyai arti tersendiri dalam turbo pascal.
Adapun kata-kata yang termasuk ke dalam identifier adalah :
And, asm, array, begin, case, const, constructor, destructor, div, do, downto, else, and, exports, file, for, function, go to, if , implementation, in, inherited, inline, interface, label, library, mod, nil, not, object, of, or, packed, procedure, program, record, repear, set, shl, shr, string, then, to, type, unit, until, uses, var, while, with xor

2.2 Statemen
Statemen adalah salah satu dari berikut ini :
Assignment(:=)
Begin…end
Case…of…else…end
For..to/downto…do
Goto
If…then…else
Inline(…)
Procedure call
Repeat…until
While…do
With…do

2.3 Type
Bentuk Umum :
Type
Pengenal = Tipe data;

Pengenal = Tipe Data;
Apa saja yang termasuk ke dalam Tipe Data dapat dilihat pada bagian berikutnya.

2.4 Const (Conctant)
Constant yang disingkat dengan Const adalah nilai konstanta(nilai tetap) yang dipasang dalam program.
Bentuk Umum :
Const
Pengenal = Ekspresi

Pengenal = Ekspresi
Const
Pengenal : Type = Nilai;

Pengenal: Type = Nilai;
Contoh :
Const
Tahun = 2000
MaksData = 1024 * 64 – 16;
Karakter = Ord(‘Z’)-Ord(‘A’) + 1;
Pesan = “ Tekan sembarang tombol untuk lanjut …’



2.5 Var (Variable)
Jika Constant adalah nilai tetap, maka variabel adalah nilai yang isinya dapat berubah-ubah. Dalam program, variabel disingkat dengan Var.
Bentuk Umum :
Var
Pengenal,…Pengenal : Tipe Data;

Pengenal,…Pengenal : Tipe Data;
Contoh:
Var
X,Y,Z : Real;
P,Q,R : Integer;
Nama : String[15];
Alamat:string[20];
Benar,salah : boolean;
Matrix : array[1..10, 1..10] of real;
Baca,tulis :text;
Huruf : set of ‘A’…’Z’;
W :color;
Digit : 0..9;
Operator tambah, kurang, kali)
HariIni : date;

2.6 Tipe Data
Tipe atau jenis data dalam Turbo Pascal dibagi ke dalam 6 kelompok besar, antara lain :
2.6.1 Tipe Simple
2.6.1.1 Tipe ordinal
Tipe Ordinal masih dibagi ke dalam 5 tipe :
Tipe Range Size
Shortint 128..127 8- bit
Integer -32768..32767 16-bit
Longint -2147483648..2147483647 32-bit
Byte 0..255 8-bit
Word 0..65535 16-bit




2.6.1.2 Tipe Integer
Tipe Integer masih dibagi ke dalam 5 tipe, antara lain :
Tipe Range Size
Shortint 128..127 8- bit bertanda
Integer -32768..32767 16-bit bertanda
Longint -2147483648..2147483647 32-bit bertanda
Byte 0..255 8-bit tak bertanda
Word 0..65535 16-bit tak bertanda

2.6.1.3 Tipe Real
Tipe Real masih dibagi ke dalam 5 tipe, antara lain :
Tipe Range Digit Byte

Real 2.9e…1.7e28 11-12 6
Single 1.5e-45…4e39 7-8 4
Double 5.0e-324…1.7e308 15-16 8
Extended 3.4e-4932…1.1e4932 19-20 10
Comp -92e18…9.2e18 19-20 8

Turbo Pascal juga menyediakan dua model floating-point:
 Software floating ponit,{$N-}
 80x87 floating point, {$N+}


2.6.1.4 Tipe char
Char (character) adalah semua tombol yang terdapat paqda keyboard, atau lengkapnya semua karakter yang terdapat pada kode ASCII.
Contoh penggunaan :char;
Var A,sembarang tombol,Ya tidak:char;
Const Tombol :char = ‘Q’
Apabila type char dijadikan konstanta, maka karakter yang dimasukkan harus diapit oleh tanda kutip satu. Dan apabila karakter tersebut berupa tanda kutip satu, maka harus diapit oleh dua tanda kutip satu seperti ‘ ” ’

2.6.1.5 Tipe Boolean
Ada empat yang termasuk kedalam type Boolean: Bololean, WordBool, LongBol, dan ByteBool. WordBool, longBool, dan ByteBool adalah type untuk kompabilitas dengan Windosw
Bentuk Umum:
Type
Boolean = (False, true); {Byte-8 bit}
WordBool = (False,True); {Word-16 bit}
LongBool = (False,True); {Longint-32 bit)
ByteBool = (False,True); {Byte-8 bit}
Boolean juga dapat diperbandingkan atau sejenisnya :
False >True
Ord (False) =0
Ord (False) =1
Succ (False) =True
Pred (True) =False
Operator penghubung untuk type boolean:
= < > > < > = < = IN
boolean akan menghasilkan false jika nilai =0 ; dan menghasilkan true jika nilai <> 0.

2.6.1.6 Tipe Enumerated
Bentuk Umum :
Type
Nama = (Pengenal,
Pengenal,..,
Pengenal ) ;
Contoh :
Type
Jawa Timur = (Surabaya, Malang, Mangetan, Greasik);
Sehingga dengan fungsi berikut:
Ord (Surabaya) =0
. Ord (Malang) =1
Ord (Gresik) =2
Dan seterusnya…………

2.6.1.7 Tipe Subrange
Bentuk Umum:
Constant1….Constant2
Contoh:
{Subrange}
0…99
-128…127

2.6.2 Tipe String
String adalah kumpulan dari beberapa karakter dan panjangnya tidak melebihi 255 karakter. Jika string mengandung tanda kutip satu, maka tanda kutip tersebut harus diberi tanda kutip lagbi, lihat pemberian tanda kutip pada contoh di bawah.
Contoh string:
 ‘Anton setiadi’
 ‘Jum’’at’
Bentuk Umum:
String[constant]
Atau
String
Contoh Dalam Program:
Cost
Panjang =79;
Type
Nama = string[25];
Garis = String[Panjang];
Cost
Judul:String[14] = ‘Selamat Datang’;
Barisbaru : String[2] =#13#10;
Ciri-ciri:
Apabila panjang string tidak ditentukan maka panjangnya dianggap 255 karakter. Oleh karena itu, untuk menghemat memori, bisakan lah selalu menentukan panjang string yang anda buat.
2.6.3 Tipe Struktur
Tipe struktured adalah tipe yang terdiri dari lebih dari satu nilai. Sedangkan tipe struktured terdiri dari 5 tipe:
Tipe Array
Tipe File
Tipe Object
Type Record
Tipe Set

2.6.3.1 Type array
Untuk membuat data ber-array.
Bentuk Umum:
Array[Indeks] of tipe data
Contoh:
Tipe
Bilangan =Array[1…100]of integer;
Karakter =Array[‘A..’Z’]of Byte;
Matrix =Array[0..9, 0..9]of Real;
Cosnt
Digit: Array[0..9]of Char =’0123456789;
NamaFile =Array[0..79]of Char =’COBA.PAS’

2.6.3.2 Tipe File
Untuk membuat sebuah file bertype
Bentuk Umum :
File of type
Atau
File
Contoh :
Type
Karyawan = Record
Nama : String[15];
Alamat : String[20];
Umur: word;
End;
FileKaryawan = file of karyawan;
NomorFile = file of integer;
SwapFile = File;

2.6.3.3. Tipe Object
Tipe Objek adalah data berstruktur yang berisi komponen bilangan fixed.
Bentuk Umum :
Object
Field;
Field;

Method;
Method;
End;
2.6.3.4 Tipe Record
Sebuah record dapat berisi komponen bilangan atau field.
Bentuk Umum:
Record
Field;
Field;

Field;
End;
Atau
Record
Field;

Case tag : type of
Case : (Field);

Case : (Field)
End;

Contoh :
Type
Point =record
X, Y : Real;
End;
Vektor = array[0..1] of Point;
Bulan =(jan, peb, mar, apr, mei, jun, jul, aug, sep, okt, nop, des);
Tanggal = record
Tgl:1..31;
Bln:bulan;
Thn:1900..1999;
End;
Const
Origin : Point = (X:0.0; Y:0.0);
Garis : Vektor =((X: -3.1; Y: 1.5), (X:5.8; Y:3.0))
SuatuHari : Tanggal = (Tgl:2; Bln: Des; Thn: 1961);
2.6.3.5. Tipe Set
Bentuk umum :
Set of tipe Data
Contoh :
Type
SetKar = Set of Char;
Hari = ( Minggu, senin, selasa, Rabu, kamis, Jumat, Sabtu);
NamaHari = Set of hari ;
Type
Digit = set of 0..9;
Huruf = set of ‘A’ .. ‘Z’;
Const
DigitGenap : Digit = [0,2,4,6,8]
HurufHidup : huruf = [‘A’,’E’,’I’,’O’,’U’,’Y’];
2.6.4. Tipe Pointer
Tipe Pointer adalah tipe yang berisi alamat memori, dan berlambang ^. Anda dpat menunjukkan sebuah nilai ke dalam variabel pointer dengan :
 Procedur New atau GetMem
 Operator @
 Fungsi Ptr
Contoh :
Type
PtrByte = ^Byte;
PtrWord =^Word;
PtrIdent =^IndentRec;
RecIdent=Record
Ident:string[5];
RefCount : Word;
Next : IdentPtr;
End;

2.6.5 Tipe Procedural
Procedure atau Function adalah bagian turbo pascal dalam membuat sebuah program yang terstruktur.
Melalui Tipe Procedural, maka anda dapat memperlakukan Procedure dan Function sebagai objek sehingga dapat dimasukkan ke dalam sebuah variabel dan paramater.
Contoh :
Type
Proc =procedure;
SwapProc =Procedure(Var X, Y : Integer);
StrProc =Procedure(S:String)
MathFunc=Function(X:Real):Real;
DeviceFunc =Function (Var F: text) : Integer;
MaxFunc = Function (A,B : Real; F : MathFunc) : Real;
Hasil function haruslah berupa String, real, Integer, Char, Boolean atau Pointer.

2.7 Komentar
Anda dapat membuat/ menyisipkan suatu komentar atau keterangan atau keterangan pada program dengan mengawali dan mengakhiri komentar dengan lambang { atau (*. Sehingga setiap kali program dijalankan, maka seluruh teks yang berada dalam tanda tersebut tidak akan dibaca atau dikompilasi. Sebab itu hanya dianggap suatu keterangan saja.
Contoh ;
{Nama Program : Super Media}
{Programmer : Media Pascal}
Atau
(*Nama Program : Super Media*)
(*Programmer : Media Pascal*)






























Perintah Dasar Trubo Pascal
Menulis Dan Membaca




Sebelum kita membuat program yang kompleks, maka terlebih dahulu kita harus memahami perintah-perintah dasar (eleman) dari turbo pascal, yaitu meliputi Write, writeln, read, readln serta semua statemen Turbo Pascal.
Sekaranga, cobalah buka Turbo Pascal Anda seperti biasa, kemudian cobalah perintah-perintah berikut satu persatu.

3.1 Write
Write adalah perintah untuk mencetak hasil pada layar, dan hasilnya dicetak pada baris yang sama, bukan pada baris berikutnya.
Contoh 1
{Nama Program : WRITE.PAS}
Begin
Write(‘Aku’);
Write(‘dan’);
Write(‘Dia’);
End.
Jalankan program dengan menekan tombol F10, pilih Run kemudian Enter, pilih lagi Run kemudian tekan Enter. Atau semuanya singkat dengan menekan tombol Ctrl + F9. Kemudian tekan ALT + F5 agar hasilnya nampak. Maka Anda akan mendapatkan hasil seperti di bawah ini :

AkudanDia

Perhatikan hasilnya dicetak pada baris yang sama. Jika antara string (teks) ingin dimasukan spasi, pada akhir string masukkan spasi.
Contoh :
{Nama Program : WRITE2.PAS}
Begin
Write(‘Aku~’); {~=Artinya tekan tombol spasi}
Write(‘dan~’); {~=Artinya tekan tombol spasi}
Write(‘Dia’);
End.
Contoh 2:
{Nama Program : WRITE3.PAS}
begin
Write(‘2+3’); { Angka berupa string ( dianggap huruf))
Write(2+3); {Numeric (Angka dianggap perhitungan}
End.
Jalankan program dengan menekan tombol F10, pilih Run kemudian Enter, pilih lagi Run kemudian tekan Enter. Atau semuanya singkat dengan menekan tombol Ctrl + F9. Kemudian tekan ALT + F5 agar hasilnya nampak. Maka Anda akan mendapatkan hasil seperti di bawah ini :
2+3 = 5


Catatan :
 String adalah berupa huruf (teks) dan diapit oleh kutip satu. Contoh : ‘Aku’, ‘dia’, juga ‘2+3’ sudah merupakan data string. Karena sudah diapait oleh tanda kutip. Kemudian contoh lain yang berupa variable string S =”Aku’; A=’2’; B=’3’; C=’5+8’; D=’4-2’ dan lain-lain.
 Sedangkan Numeric adalah data berupa angka. Contoh: 2; 3; 2+3; 6-4 dan lain-lain.

3.2 Writeln
Jika Write adalah perintah untuk mencetak hasil pada baris yang sama, maka wruteln adalah mencetak hasil pada layar pada baris berikutnya.
Contoh 1:
{Nama Program : WRITELN.PAS}
Begin
Writeln(‘Aku’);
Writeln; {Membuat baris kosong}
Write(‘Dia’);
End.
Run (Ctrl + F9) kemudian Alt + F5. Maka hasilnya adalah :
Aku
Dia

Contoh 2:
{Nama Program : WRITELN2.PAS}
Var
A:String[3];
B:string[3];
Begin
A:=’Aku’;
B:=’Dia’;
Writeln(A); {Aku}
Writeln(B); {Dia}
Writeln(A + ‘ dan’ + B); { Aku dan Dia}
End.
Run (Ctrl + F9) kemudian Alt + F5. Maka hasilnya adalah :
Aku
Dia
Aku dan Dia

Contoh 3:
Mohon jangan salah ketik yang mana koma(,) dan titik koma (;) :
{ Nama Program : WRITELN3.PAS }
Var
A : Integer;
B : Integer;
Begin
A := 10;
B := 20;
Writeln('A=',A);
Writeln('B=",B);
Writeln('A+B=',A+B);
Writeln(A,'+',B,'=',A+B);
Writeln(A,'-',B,'=',A-B);
Writeln(B,'',A,'=',B/A);
Writeln(A,'x',B,'=',A*B);
End
Run (Ctrl + F9), kemudian ALT + F5. Maka hasilnya adalah :
A=10
B=20
A+B=30
10+20=30
10-20=-10
20/10=5.0000000000E-01 (Perhatikan berapa digit ini!)
10x20=200

Contoh 4:
{ Nama Program : WRITELN4.PAS }
Var
A,B : Integer;
Begin
A :=6;
B :=3;
Writeln(A,'', B,'=', A/B);
Writeln(A,'', B,'=', A/B:0:0);
Writeln(A,'div', B,'=', A divB);
End.
Run (Ctrl+F9), kemudian ALT + F5. Maka hasilnya adalah :
62= 2.0000000000E+00
63= 2.0E+00
6 div 3 = 2
Anda dapat mengubah jumlah desimal dengan menambah :0:0 pada akhir perhitungan atau variable jika ingin tanpa desimal. Contoh: AB:0:1 jika ingin satu, AB:0:2 jika ingin dua desimal, AB0:0:3 jika ingin tiga desimal, dan seterusnya… Sedangkan angka pertama (0) adalah menyatakan spasi (jarak) percetakan.

Contoh 5
{ Nama Program : WRITELN5.PAS }
Begin
Clrscr;
Writeln(2+3*5-4 div 2); { 2 + 15 – 2 = 15 }
End.
Run (Ctrl+F9), kemudian ALT + F5. Maka hasilnya adalah : 15
Kenapa? Karena urutan pengerjaan (hirarki) operator adalah sebagai berikut :
  (bagi) atau div (pembagian Integer) dan * (kali)
 + dan –
Sehingga persamaan di atas menjadi :
2 + (3*5) _ (4 div 2) = 2 + 15 – 2 = 17 – 2 = 15


3.3 Read
Read adalah perintah untuk membaca data yang dimasukkan si pemakai.

Contoh 1:
{ Nama Program : READ.PAS }
Var
X, Y, Z : Integer;
Begin
Write('Masukkan 3 buah angka bulat:'); Read (X, Y, Z);
Writeln;
Writeln('Angka pertama = ',X);
Writeln('Angka kedua = ',Y);
Writeln('Angka ketiga = ',Z);
End.
Run (Ctrl+F9). Maka hasilnya adalah :
Masukkan 3 buah angka bulat : 3 4 5
(Masukkanlah 3 buah angka, misalnya 3 kemudian spasi, 4 kemudian spasi, 5 kemudian Enter)
Angka pertama = 3
Angka kedua = 4
Angka ketiga = 5
Coba jalankan kembali program, kemudian isikan dengan angka yang berbeda.

Contoh 2:
{ Nama Program : READ2.PAS }
Var
Nama : String[20];
Umur : Byte;
Begin
Write('Ketik nama: '); Read (Nama);
Write('Ketik umur: '); Read (Umur);
Writeln;
Writeln('Nama : ', Nama);
Writeln('Umur : ', Umur);
End.
Run (Ctrl+F9). Maka hasilnya adalah :
Ketik nama : Anton   ketik sembarang nama lalu Enter
Ketik umur : 23   ketik sembarang umur lalu Enter
Nama : Anton
Umur : 23

3.4 Readln
Sama dengan Read, Readln juga adalah perintah untuk membaca data yang dimasukkan si pemakai. Perbedaannya nanti adalah ketika bekerja dengan File Teks (Teks File), File Bertipe (Typed File) atau File Tak Bertipe (Untyped File).

Contoh 1
{Nama Program : READLN.PAS }
Var
X, Y, Z : Integer;
Begin
Write('Masukkan 3 buah angka bulat:'); Readln (X, Y, Z);
Writeln;
Writeln('Angka pertama =',X);
Writeln('Angka kedua =',Y);
Writeln('Angka ketiga =',Z);
Readln; { Menunggu Enter ditekan }
End.
Run (Ctrl+F9). Maka hasilnya adalah:
Masukkan 3 buah angka bulat: 3 4 5
(Masukkanlah 3 buah angka, misalnya 3 kemudian spasi, 4 kemudian spasi, 5 kemudian Enter)
Maka akan keluar :
Angka pertama = 3
Angka kedua = 4
Angka ketiga = 5
Coba jalankan kembali program, kemudian isikan dengan angka yang berbeda.

Contoh 2:
{ Nama Program : READLN2.PAS }
Var
Nama : String[20];
Umur : Byte;
Begin
Write('Ketik nama: '); Readln(Nama);
Write('Ketik umur: '); Readln(Umur);
Writeln;
Writeln('Nama : ', Nama);
Writeln('Umur : ', Umur);
Readln; { Menunggu Enter ditekan }
End.
Run (Ctrl+F9). Maka hasilnya adalah :
Ketik nama : Anton   ketik sembarang nama lalu Enter
Ketik umur : 23   ketik sembarang umur lalu Enter
Nama : Anton
Umur : 23
Contoh 3:
Readln juga bisa digunakan untuk menghentikan program (menunggu tombol Enter ditekan).
{ Nama Program : READLN3.PAS }
Var
S: String;
Begin
Write('Ketik sembarang teks:'); Readln(S);
Writeln('Anda telah mengetik:',S);
Writeln('Tekan Enter untuk kembali ke editor..');
Readln; { Menunggu Enter ditekan }
End.
Juga lihat Contoh –1 dan contoh –2 di atas.
Perintah Dasaar Turbo Pascal
Pengulangan (Loop)


4.1. Repeat… Until
Perintah Repeat …. Until adalah perintah untuk membuat pengulangan (loop).
Contoh 1:
{Nama Program : UNTILIPAS }
Uses Crt : {Menggunakan Unit CRT}
Var
B: Byte :
Begin
Clrscr: {Unit Crt : Menghapus layar}
Writeln (' Tekan sembaramg tombol untuk selesai…' ) :
Writeln (' Sekarang tekan Enter untuk memulai …' ) :
Readln :
REPEAT
Writeln (' Aku ' ) :
UNTIL Key Pressed : {Unit crt : Hingga sembarang Tombol di tekan}
End.
Run ( Ctrl + F9 ), maka anda akn mendapatkan teks ‘ Aku ‘ dicetak terus menerus. Dan program hanya berhenti apabila sembarang tombol ditekan.
Catatan :
Karena program menggunakakn Unit Crt, yaitu Cl5rscr dan Key Pressed, maka pada awal program harus diberikan perintah Uses Crt.
Contoh 2:
{ Nama program : UNTIL 2 . PAS}
Uses Crt : { Menggunakan Unit CRT }
Var
B : Byte :
Begin
ClrScn : { Unit Crt : Menghapus layar }
B : = 1 : { Nilai awal untuk B diberi 1 }
REPEAT
Writeeln ( E ) :
Inc ( B ) : { Taambahkan B debgan nilai 1. B = B + 1
Delay ( 50 ) : { Perlambat Proses }
UNTIL Key Pressed : { Unit Crt : Hingga sembarang tombol do tekan }
End.
Run ( Ctrl + F9 ), maka Anda akan dicetak angka 1 sampai 255. Kenapa hanya sampai 255 saja ? Karena range bilangan yang termasuk kedalam Byte adalah 0….255. Lihat kembali Elemen – Elemen Bahasa, lihat pasal yang bejudul TIPE ORDINAL atau TIPE INTEGER.
Setelah paham, cobalah ganti variabel B dengan Integer, Byte dan lain-lain, dan perhatikanlah range angka yang diberikan .



4.2 While….Do
While ….Do adalah juga perintah untuk melakukan pengulangan ( loop ), tetapio dengan menggunakan persyaratan : Selama tidak dipenuhi …kerjakanlah ini….
Contoh 1:
{ Nama Program : WHILE 1. PAS }
Uses Crt :
Var Sandi 1, Sandi 2, : String :
Begin
ClrScr :
Sandi 1 := ' AKU ' :
Write ( ' ketik kata sandi Anda : ' ) :
While Sandi 1 <> Sandi 2 do Readln ( Sandi 2 ) :
Writeln ( ' Benar Anda Sudah memasukan sandi yang benar : ) :
Writeln ( ' Anda dapat meneruskan program….'):
Readln :
End.
Run ( Ctrl + F9 ), maka anda diminta untuk memasukan kada sandi (password). Dalam program kata sandi sudah ditentukan dengan kata AKU. Oleh karena itu isikanlah (ketik) AKU dalam huruf besar. Jika Anda ingin mengisikan kata yang lain, termasuk kata aku dalam huruf kecil, program akan tetap menolak dan meminta kata sandi yang benar.

Contoh 2:
{ Nama Program : WHILE2.PAS }
Uses Crt;
Begin
ClrScr;
Writeln('Tekan sembarang tombol untuk memulai……');
{ Buat suara selama tombol belum ditekan untuk memulai program }
While Not KeyPressed do { Selama tombol belum ditekan }
Begin
Sound(600);
Delay(30);
NoSound;
End;
Writeln('Barulah mulai program..');
End.

4.3 With…Do
Perintah With…Do adalah perintah untuk memasukkan sekelompok data dalam sebuah variabel. Pada umumnya perintah ini digunakan untuk memasukkan data-data ke dalam sebuah file bertipe (Typed File).
Contoh Singkat
{ Nama Program : WITH.PAS }
Uses Crt;
Type
Saya = Record
Nama : String[15];
Umur : Byte;
Alamat : String[20];
End;
Var
DataSaya : Saya;
Begin
ClrScr;
With DataSaya do
Begin
Write('Ketik nama :'); Readln(Nama);
Write('Ketik umur :'); Readln(Umur);
Write('Ketik alamat :'); Readln(Alamat);
ClrScr;
Writeln('Selanjutnya data-data sudah dapat');
Writeln('disimpan ke dalam sebuah file: ');
Writeln;
Writeln('Nama : ', Nama);
Writeln('Umur : ', Umur);
Writeln('Alamat : ', Alamat);
Readln;
End;
End.
Run (Ctrl + F9), maka program akan meminta data untuk Nama, Umur, Alamat. Setelah diisi, maka data-data tersebut sudah dapat disimpan ke dalam sebuah file bertipe (Typed File).

4.4 For…To/Down…Do
For…To/Down..Do adalah perintah untuk membuat pengulangan (loop) sebanyak angka yang diberikan pada variabel awal dan akhir. Perintah To digunakan untuk angka menaik, sedangkan DownTo digunakan untuk angka menurun.
Contoh 1:
{ Nama Program : FOR.PAS }
Uses Crt;
Var I : Integer;
Begin
ClrsScr;
For I := 1 to 3 do Writeln('Kalimat ini dicetak 3 kali.');
For I := 1 to 10 Writeln('No: ',I);
For I := 500 to 600 do { Angka menaik }
Begin
Sound(I); Delay(10); NoSound;
End;
For I := 600 to 500 do { Angka menurun }
Begin
Sound(I); Delay(10); NoSound;
End;
Readln;
End.

Contoh 2:
{ Nama Program : FOR2.PAS }
Uses Crt;
Var I : Integer;
Begin
ClrScr;
For I := 1 to 20 do Writeln('Nomor : ', I);
Write('Tekan Enter untuk melanjut…'); Readln;
ClrScr;
For I := 20 downto 1 do Writeln('Nomor: ',I);
Write('Tekan Enter untuk melanjut…'); Readln;
ClrScr;
For I := 1990 tp 2010 do Writeln('Tahun: ', I);
Write('Tekan Enter untuk selesai…');
Readln;
End.



























Perintah Dasar Turbo Pascal
Perbandingan


5.1 If…Then…Else
Perintah If…Then…Else adalah perintah untuk melakukan perbandingan.
Bentuk Umum
IF perbandingan dipenuhi THEN lakukan ini
atau
IF perbandingan dipenuhi THEN lakukan ini ELSE jika tidak
atau
IF perbandingan dipenuhi THEN
Begin
Lakukan sekelompok instruksi ini
………………
………………
End;
atau
IF perbandingan dipenuhi THEN
Begin
Lakukan semua instruksi ini
………………
………………
End { Di sini tidak boleh titik koma }
ELSE
Begin
Lakukan semua ini
………………
………………
End;

Contoh 1:
{ Nama Program : IF-1.PAS }
Uses Crt;
Var Nama : String;
Begin
ClrScr;
Write('Ketik nama Anda:'); Readln(Nama);
If Nama =' ' then Writeln ('Isi dulu, dong. Main enter aza!');
Readln;
End.
Run (Ctrl+F9), maka program akan meminta masukkan nama. Jika Anda menekan Enter (tidak mengisi nama), maka program akan mengontrolnya.

Contoh 2:
{ Nama Program : IF-2.PAS }
Uses Crt;
Var Nama : String;
Begin
ClrScr;
Write('Ketik nama Anda:'); Readln(Nama);
If Nama = ' ' then Writeln 9'Wah, Isi dulu, dong, sayang!')
Else Writeln('Nama bagus:', Nama, +'Tambunan');
Readln;
End.

Contoh 3:
{ Nama Program : IF-3.PAS }
Uses Crt;
Var umur : Byte;
Begin
ClrScr;
Write('Ketik umur Anda : '); Readln(umur);
Writeln('Umur yang Anda masukkan:', umur);
If umur in [1..16] THEN { Jika umur antara 0 sampai 16 }
Begin
Writeln('Termasuk golongan remaja');
End { Jangan ada titik koma di sini }
ELSE
Begin
Writeln('Termasuk golongan dewasa');
End;
Readln;
End.

5.2 Case…OF…Else…End
Perintah Case..Of..Else..End adalah perintah untuk memilih kelompok data.
Contoh
{ Nama Program CASE.PAS }
Uses Crt;
Var Kar : Char;
Begin
ClrScr;
Write('Tekan sembarang tombol: '); Kar := Readkey;
Writeln;
CASE Kar OF
'A'..'Z','a'..'z' : Write('Anda telah menekan huruf ', Kar);
'0'..'9' : Writeln('Anda telah menekan angka', Kar);
'+', '-', '*', '/' : Writeln('Anda telah menekan operator ', Kar);
ELSE
Writeln('Anda telah menekan karakter khusus');
END;
Readln;
End.


5.3 Goto
Perintah Goto adalah perintah untuk membuat percabangan dalam program. Tetapi pada awal program harus diberi tahu nama-nama percabangan yang akan dibuat dengan perintah Label. Bisa dalam huruf atau angka.
Contoh:
Uses Crt;
Var Nama: Array[1..100] of String;
No, I : Byte;
Kar : Char;
Label Awal, 10;
Begin
Awal:
ClrScr;
No :=1;
10:
Write('Ketik nama ', No, ':'); Readln(Nama[No]);
Write('Isi nama lagi (Y/T) ?'); kar := Readley;
Writeln;
IF Upcase(Kar)='Y' Then Begin Inc(No); Goto 10; End;
For I := 1 to No do
Begin
Writeln('Nama ',I, ':', Nama[I]);
End;
Write('Mau diulang (Y/T) ?'); Kar := Readkey;
IF UpCase(Kar) = 'Y' then Goto Awal;
End.


ARRAY




Array adalah suatu tipe data terstruktur yang terdapat dalam memori yang terdiri dari sejumlah elemen (tempat) yang mempunyai tipe data yang sama dan merupakan gabungan dari beberapa variabel sejenis serta memiliki jumlah komponen yang jumlah tetap.
Elemen-elemen dari array tersusun secara sequential dalam memori komputer. Array dapat berupa satu dimensi, dua dimensi, tiga dimensi ataupun banyak dimensi.

6.1 Array Satu Dimensi
Array satu dimensi tidak lain adalah kumpulan elemen-elemen yang identik, yang tersusun dalam satu baris. Elemen-elemen tersebut memiliki tipe data yang sama, tetapi isi dari elemen tersebut boleh berbeda.
Untuk lebih jelasnya perhatikan gambar berikut :

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
17 21 33 1 48 0 2 16 72 9
Gambar-6.1. Konsep array satu dimensi

Bentuk Umum :
type
= array[IndexArray] of TipeData;
Contoh :
type
Gaji = array[1..10] of LongInt;
Logika = array[boolean] of integer;
Pendeklarasian array diawali dengan kata baku type dan diikuti dengan nama array dan tanda sama dengan (=), lalu kata baku array beserta range index dan diakhiri dengan kata baku of beserta tipe datanya.
Anda dapat mendeklarasikan sebuah tipe data baru yang terdiri dari elemen yang Anda sebutkan satu per satu untuk kemudian dipakai sebagai Index Array. Tipe data tersebut disebut sebagai tipe data enumerasi. Perhatikan contoh berikut :
type
Hari = (Senin, Selasa, Rabu, Kamis, Jumat, Sabtu);
PendapatanHarian = array[Hari] of Real;
Selain itu Anda juga dapat mendeklarasikan sebuah tipe data berupa subrange bilangan untuk kemudian dipakai sebagai index dari suatu array seperti berikut.
type
Tinggi = 145..210;
TinggiOrang = array[Tinggi] of byte;
Atau Anda dapat juga menggunakan konstanta untuk kemudian dipakai dalam index array. Untuk menggunakan konstanta perlu diawali dengan kata baku const. Untuk lebih jelasnya perhatikan contoh berikut.
const
Min = 1;
type;
Arr = array[Min..Max] of byte;
Var
Point : Arr;

Contoh Soal :
Uses Crt;
Type
Kalimat = Array[1..3] of String;
Var
i : byte;
Kal: Kalimat
Begin
ClrScr;
For I := 1 to 3 do
Begin
Write('Masukkan Kata ke-' , I , ':'); Readln(Kal[I]);
End;
End.

6.2 Array Dua Dimensi
Array dua dimensi, yang sering digambarkan sebagai sebuah matriks adalah merupakan perluasan dari sebuah array satu dimensi. Jika pada array satu dimensi hanya terdiri dari sebuah baris dengan beberapa kolom elemen maka pada array dua dimensi terdiri dari beberapa baris dan beberapa kolom elemen yang bertipe sama sehingga dapat digambarkan seperti berikut.

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10]
[1] 10 2 32 54 84 1 2 65 5 4
[2] 21 45 65 98 23 28 44 99 10 14
[3] 13 95 27 71 73 6 7 88 9 11
[4] 31 33 25 52 55 69 87 73 49 93
[5] 66 22 17 85 29 85 83 30 20 19
[6] 49 36 58 77 48 86 82 3 65 14
Gambar-6.2. Konsep array dua dimensi

Bentuk Umum :
Type
= array[IndexArray1, IndexArray2] of TipeData;
Contoh :
Type
Matriks = array[1..2,1..3] of byte;
Logika = array[1..5, boolean] of integer;
Type
Baris = 1..2;
Kolom = 1..3;
Ordo = array[Baris, Kolom] of byte;
Var
Matrix : Ordo;
Array dua dimensi dapat dianggap sebagai array dalam array sehingga array dua dimensi dapat juga dituliskan sebagai berikut :
Var
Matrix : array[1..2] of array[1..3] of byte;
Pendeklarasian array dua dimensi hampir sama dengan pendeklarasian array satu dimensi, kecuali para array dua dimensi terdapat dua index array yang terdapat di dalam kurung siku dan masing-masing index boleh berbeda tipe. Untuk lebih jelasnya perhatikan contoh berikut ini.
Type
Kegiatan = (Main, Belajar, Nonton, Berenang);
Hari = (Senin, Selasa, Rabu, Kamis, Jumat, Sabtu);
AktivitasAnak = array[Hari, Kegiatan] of byte;
Var
A : AktivitasAnak;
Pendeklarasian array AktivitasAnak di atas menggunakan dua buah tipe data yang masing-masing didefinisikan sendiri yaitu kegiatan dan hari. Jika digambarkan struktur dari array AktivitasAnak tersebut akan nampak seperti berikut.

[Main [Belajar] [Nonton] [Berenang]
10 12 23 35 [Senin]
21 5 11 44 [Selasa]
32 2 29 8 [Rabu]
20 13 16 6 [Kamis]
14 4 18 25 [Jumat]
26 9 17 22 [Sabtu]
Gambar-6.3. Struktur array AktivitasAnak

Untuk dapat mengakses masing-masing elemen dari array AktivitasAnak di atas Anda harus mengetahui posisi baris dan kolom dari elemen yang ingin diakses tersebut. Sebagai contohnya jika Anda ingin mengakses data yang dipertebal diatas (5) dapat Anda deklarasikan sebagai berikut :
A[Selasa, Belajar]
Awas! Jika Anda terbalik menuliskan baris dan kolom index array maka akan terjadi error.

6.3 Array Tiga Dimensi
Deklarasi pada array tiga dimensi tidak berbeda dengan deklarasi pada array satu dimensi dan dua dimensi yang telah dijelaskan sebelumnya, kecuali pada index array.

Bentuk Umum :
Type
= array[IndexArray1, IndexArray2, IndexArray3] of TipeData;
Contoh:
Type
Kalender = array[Tanggal, Bulan, Tahun] of Byte;
Logika = array[1..10, boolean, 2..15] of integer;

6.4 Array Banyak Dimensi
Sebenarnya array banyak dimensi ini tidak terlalu sering dipakai seperti halnya array satu dimensi, dua dimensi, dan tiga dimensi.
Namun hal itu tidak berarti pascal tidak memperbolehkan Anda untuk memakainya. Array banyak dimensi ini pada dasarnya sama dengan array sebelumnya kecuali pada jumlah dimensinya saja.
Bentuk Umum :
Type
= array[IndexArray1, IndexArray2,…,IndexArrayN] of TipeData;
Contoh:
Type
Kalender = array[Tahun, Bulan, Tanggal, Jam] of Integer;

Contoh Soal :
Penjumlahan Matriks

Program matrix;

Uses crt;

Var

i, j, lok, lok2 : byte;
hsl, mat1, mat2 : array [1..2, 1..2] of byte;

procedure Input
begin
clrscr;
gotoxy(30,1); write('Penjumlahan Matrix');
gotoxy(28,2); write('------------------------------');
gotoxy(30,3); write('Ordo Matrix : 2 x 2');
gotoxy(28,4); write('------------------------------');
gotoxy(3 , 6); write('Masukkan Nilai : ' );

lok:=1;
for i := 1 to 2 do
for j := 1 to 2 do
begin
gotoxy(2,lok+8); write(' A (', i, ', ', j , ') = ');
readln(mat1 [i,j]);
lok := lok + 1;
end;

lok := 1;
for i := 1 to 2 do
for j := 1 to 2 do
begin
gotoxy(30),lok+8); write ( ‘B( ‘,I,’ ’, , j , ‘ ) = ‘ ) ;
readln (mat2[I,j]);
lok := lok+1;
end;
end;

procedure hitung;
begin
lok := 1;
for I := 1 to 2 do
for j := 1 to 2 do
begin
gotoxy (60, lok+8); write ( ‘c ( ‘,I, ‘ ,’, j,’ )= ‘ );
write (hsl [I, j ] );
gotoxy (8+4 * j, 15+2 * I ); write (mat 1[I, j ] );
gotoxy (35+4 * j, 15+2 * I ); write (mat 2[I, j ] );
gotoxy (62+4 * j, 15+2 * I ); write (hsl [I, j ] );
lok := lok +1;
end;
gotxy (14, 15 ); write ( ‘A’ );
gotxy (41, 15 ); write ( ‘B’ );
gotxy (61, 15 ); write ( ‘C’ );
gotxy (27, 18 ); write ( ‘+’ );
gotxy (54, 18 ); write ( ‘=’ );

lok := 1;
lok := 2;
repeat
gotoxy ( 9 * lok, 16 ); write ( ‘[ ‘ );
gotoxy ( 9 * lok, 17 ); write ( ‘[ ‘ );
gotoxy ( 9 * lok, 18 ); write ( ‘[ ‘ );
gotoxy ( 9 * lok, 19 ); write ( ‘[ ‘ );
gotoxy ( 9 * lok, 20 ); write ( ‘[ ‘ );
gotoxy ( 19 + lok2 * 27, 16 ); write ( ‘ ] ‘ );
gotoxy ( 19 + lok2 * 27, 17 ); write ( ‘ ] ‘ );
gotoxy ( 19 + lok2 * 27, 18 ); write ( ‘ ] ‘ );
gotoxy ( 19 + lok2 * 27, 19 ); write ( ‘ ] ‘ );
gotoxy ( 19 + lok2 * 27, 20 ); write ( ‘ ] ‘ );
lok := lok +3;
lok2 := lok2 +1;
until ( lok >=9 );
end;
begin
input;
hitung;
output;
readkey;
end.















Operasi




Set merupakan tipe data terstruktur yang terdiri dari elemen yang disebut Anggota Set. Anggota set ini tidak memiliki urutan dan tidak boleh ada dua anggota set yang sama. Sebuah set dalam pascal hanya dapat memuat maksimal 255 anggota .
Bentuk Umum :
Type
= set of ;
Contoh :
Type
Karakter = set of char;
Angka = set of integer;
Tanggal =set of 1..31;
Hari = set of (senin, selasa, rabu, kamis, jumat, sabtu, minggu);
Var
Kar : karakter;
Bil : angka;
Tgl : tanggal;
Seminggu : hari;

7.1 Penulisan nilai di dalam suatu Set
Nilai-nilai dalam suatu set dapat dituliskan dengan beberapa cara, yaitu disebutkan satu per satu (enumerasi), atau dituliskan dalam rentang tertentu.

7.1.1 Notasi Set anumerasi
Elemen-elemen yang terdapat di dalam set dinyatakan satu persatu.
Bentuk Umum :
Nama Var := [elemen1, elemen2, …. , elemenN];
Contoh :
Angka := [1, 2, 3, 4, 5, 6 ];
Huruf := [‘A’ , ’B’ , ’C’ , ’D’ , ’E’ ];

7.1.2 Notasi Set Rentang
Bentuk Umum :
Nama Var := [rentang1, rentang2, … ,rentang N ];
Contoh :
Anngka := [ 1..6 ];
Angka-angka := [1..5, 10..15, 35..50 ];
Huruf := [‘A’..’C’ , ‘G’..’Z’ ];
Memberikan Nilai pada Variabel Set :
Type
Karakter = set of char;
Angka = set of integer;
Tanggal = set of 1..31;
Var
Kar : karakter;
Bil : angka;
Tgl :tanggal;
Begin
Kar := [‘a’ , ‘b’ ];
Bil := [1..10, 20..50 ];
Tgl := [1,2,3,4 ];
End.

7.2 Operai – operasi dalam Set
Salah satu proses dasar dalam set ialah menyatakan apakah suatu nilai tertentumerupakan anggota dari set tersebut. Operator set ‘in’digunakan untuk tujuan tersebut
Bentuk Umum :
Suatu Nilai in suatu Set
Contoh :
If (‘z’ in huruf ) then {statement}
While not (Nilaiset in Angkaset ) do {statement}
Operator ‘in’ dapat digunakan untuk membandingkan anggota dari suatu set dengan set yang lain. Hasil yang muncul, true jika elemen merupakan anggota set, False jika tidak. Operasi set dalam mematikan seperti gabungan, irisan, dan selisih dapat digunakan dalam pascal dan memperbolehkan untuk membuat set baru dari set yang telah ada.

7.2.1 Operasi Gabungan (Union)
Adalah oprasi yang menggabungkan dua set menjadi satu. Anggota dari dua set tersebut, dijadikan satu dan menghasilkan set baru dan tidak menghasilkan duplikassi anggota set.
Notasi : +
Contoh :
[ 1, 2, 3 ] + [ 4, 5, 6 ] → [ 1, 2, 3, 4, 5, 6 ]
[ 1, 2, 3 ] + [ 2, 3, 5, 6, 7 ] → [ 1, 2, 3, 5, 6, 7 ]
[ ] + [ ] → [ ]
[ 1, 3, 7, 9 ] + [ ] → [ 1, 3, 7, 9 ]

7.2.2 OPerasi selisih (difference)
Adalah operasi yang terjadi pada dua set, apabila elemen set pertama ada pada set kedua maka elemen yang sama terssebut pada set pertama akan dihapus. Sehingga menghasilkan isi set pertama setelah penghapusan.
Notasi : -
[ 1, 2, 3, 4, 5, 6, 7 ] – [ 1, 3, 5, 7 ] → [ 2, 4, 6 ]
[ 1, 2, 3, 4, 5 ] – [ 1, 2, 3, 4, 5 ] → [ ]
[ 1, 2, 3 ] – [ 7, 8, 9 ] → [ 1, 2, 3 ]
[ ] – [5, 6, 7 ] → [ ]
Urutan dalam operasi selisih sangat penting. Perhatikan contoh berikut ini :
[ 1, 2, 3, 4, 5, ] – [ 4, 5, 6, 7, 8 ] → [ 1, 2, 3 ]
[ 4, 5, 6, 7, 8 ] – [ 1, 2, 3, 4, 5 ] → [ 6, 7, 8

7.2.3 Operasi Irisan ( interection )
Adalah operasi yang membentuk set dengan keanggotaan dari dua set yang memiliki anggota yang sama.

Notasi : *
Contoh :
[ 1, 2, 3 ] * [ 7, 8, 9 ] → [ ]
[ 1, 2, 3, 4, 5, 6 ] – [ 5, 6, 7, 8, 9, 10 ] → [ 5, 6 ]
[ ] * [ ] → [ ]
[ 1, 2, 3 ] * [ 1, 2, 3 ] → [ 1, 2, 3 ]

7.2.4 Operasi Relasi (Relation )
Selain operasi diatas, operasi relasi juga dapat digunakan dalam set.

7.2.4.1 Notasi < = (kurang atau sama dari)
Terjadi jika semua anggota set pertama adalah anggota set kedua.
Definisi : A <= B, jika dan hanya jika A – B = [ ]
Contoh :
[‘a’ , ‘b’ , ‘c’ , ‘d’] <= [‘a’ , ‘b’ , ‘c’ , ‘d’ , ‘f’ , ‘]
[ ‘a’ , ‘b’] <= [‘a’ , ‘b’]

7.2.4.2 Notasi < (kurang)
Terjadi jika semua anggota set pertama adalah anggota dari set kedua, namun menimal ada satu anggota set kedua yang bukan anggota set pertama.
Definisi : A < B, jika dan jika hanya jika A - B = [ ] dan B – A < > [ ]
Contoh :
[‘a’ , ‘b’ , ‘c’ , ‘d’ , ‘e’ ] < [‘a’ , ‘b’ , ‘c’ , ‘d’ , ‘f’]

7.3. Latihan soal beserta jawaban (Listing Program) dan penyelesaian
1. Buatlah sebuah program untuk menampilkan sebuah grafik batang vertical yang mewakili besar data-data yang diinputkan. (grafik.pas)
User Crt;
Type
Tahun =array [ 1..6 ] of byte ;
Procedure input (var thn : Tahun) ;
Vari i : = byte ;
Begin
Clrscr ;
GotoXy (5.1) : Write (‘Data : (Dalam jutaan)’ );
For i : = 1 to 6 do
Begin
Repeat
GotoXY (5, 2+i) ; Write ( ‘tahun ‘, I,’ : ‘ );
GotoXY (17, 2+i) ; ClrEol;
GotoXY (17, 2+i) ; Readln(Thn [i] );
Until ( Thn[i] >0) and (Thn [i] < 16 );
End;
End;

Procedure Gambar (Thn : Tahun);
Var i, j : byte ;
Begin
For i : = 0 to 14 do
Begin
GotoXY (35, 2 + i) ; Wite (15-I:, ‘ /’ );
End;
GotoXY (36, 17); write (0, ‘ L ‘) ;
For i : = 1 to 35 do write ( ‘ - ‘ );
GotoXY (39, 18 ) ; write (‘1995 1996 1997 1998 1999 200 ‘ ) ;
For i : = 1 to 6 do
For j : = 1 to Thn [ i ] do
Begin
GotoXY (33 + i * 6, 17 – j ) ; wite (#####) ;
End;
Readkey;
End;

Var Data : Tahun ;

Begin
Input (Data) ;
Gambar (Data) ;
End;


2. Input Himpunan A dan B dengan karakter ‘A’..’Z’ {max 5 char} dan lakukan validasi jika karakter yang diinput bukan karakter ‘A’..’Z’ . kemudian lakukan operasi- operasi berikut pada kedua himpunan A dan B : Intersection (Irisan), Union (gabungan), Difference (selisih) (himpunan . pas)
Program Himpunan_Bagian ;
Uses Crt;

Type
Sets = set of char;
Var A , B,
Irisan , Union,
Selisih1, Selisih2 : Sets : {variable untuk menambung sets }
Lagi vhar : Char : {huruf}

Procedure Input (Var N : Sets : Y : byte);
Var i : byte;
Ch : char;
Begin
For i : = 1 to 5 do;
Begin
GotoXy (22 +i*3, y); ch := Upcase (readkey) ;
N : = N + [ch] ;
If i : = 5 then ;
Begin
GotoXy (22 +i*3) ; write (ch, ‘ } ‘ ) ;
End else
Begin
GotoXy (22+i*3,Y ) ; write (ch, ‘ , ‘ );
End;
End;
End;
End;


Procedure Input data;
Var i : byte;
Begin
GotoXy (25, 1) ; write ( ‘ OPERASI HIMPUNAN ‘ );
GotoXy (25, 2) ; write ( ‘ =============== ‘ );
GotoXy (10, 8) ; write ( ‘ Himpunan A : {‘ ) : input (A, 8);
GotoXy (10, 10) ; write ( ‘ himpunan B : {‘ ) : Input (B. 10);
End;

{procedure untuk cetak I si sets ke layer }
Procedure cetak (N :sets : y : byte );
Var i : char;
Begin
GotoXy (30, Y);
For i := #00 to # 255 do {untuk penjelasan baca note halaman berikutnya}
If N * [ i ] = [ i ] then write ( ‘ ‘ , i , ‘ ‘ ) ;
Write (‘ } ‘ ) ;
End;

Procedure Tampilkan;
Begin
GotoXy (10, 15 ) ; write (‘ Intersection (A, B) = {‘ ) ;
GotoXy (10, 17 ) ; write (‘ Union (A, B = {‘ ) ;
GotoXy (10, 19 ) ;write (‘ Difference (A, B) = {‘ ) ;
GotoXy (10, 21 ) ;write (‘ Difference (B, A) = {‘ ) ;
Cetak (Irisan, 15 ) ; Cetak (‘ Union, 17 ) ;
Cetak (Selisih1, 19) ; Cetak ( ‘Selisih2, 21);
End;

Procedure proses ;
Begin
Union := A + B ; {Sets untuk Union }
Irisan := A * B ; {Sets untuk Intesection}
Selisih1 := A - B ; {Sets untuk Difference A-B }
Selisih2 := B - B ; {Sets untuk Difference B-A }
Tampilkan
Repeat
GotoXy (20, 33 ) ; Write ( ‘ Coba lagi (Y/T) : ‘ ) ;
Lagi := UpCase (readkey ) ;
Until lagi in [‘ Y ‘ , ‘ ]
End;

Begin {Program Utama }
While lagi <> ‘ T do
Begin
A := [ ] ;
B := [ ] ; {sets dikosongkan , agar saat program }
Clrscr;
Input Data :Proses ;
End;
End.


Record





Record adalah kumpulan elemen-elemen data yang digabungkan. Masing-masing elemen data tersebut dikenal dengan sebutan field. Field data tersebut dapat memiliki tipe data yang sama ataupun berbeda. Walaupun field-field tersebut berada dalam satu kesatuan record, maupun masing-masing field tersebut tetap dapat di akses secara individual.

Field-field tersebut digabungkan menjadi satu record dengan tujuan untuk memudahkan. Misalnya anda ingin mencatat data-data mahasiswa dan pelajar dalam sebuah program. Maka untuk membedakannya, Anda dapat membuat record mahasiswa yang terdiri field-field NIM, nama, alamat, IPK. Dan sebuah record pelajar yang terdiri dari field-field Nama, Nomor Urut, alamat, Jumlah Nilai. Dengan demikian anda akan lebih mudah membedakan antara keduanya.

8.1 Deklarasi Record
Bentuk Umum :
Type
= record
: ;
: ;
……………
: ;
end;
var
: ;

Deklarasi record pada umumnya diawali dengan kata baku type, namun Anda juga dapat mendeklarasikan record langsung dengan menggunakan kata baku Var seperti berikut ini.
Var
= record
: < type1> ;
: < type2> ;
…………..
: < typeN> ;
End;
Contoh :
Type
Mahasiswa = record
Nim : String[ 10 ] ;
Nama : String [ 20 ] ;
Alamat : String [30 ] ;
IPK : Real ;
End;
Var
Mhs : mahasiswa ;
Pendeklarasian record selalu diawali oleh nama record, tanda sama ( = ) dan kata baku record serta diakhiri dengan kata baku end. Field- field dari record tersebut diletakkan di antara kata baku record dan end.
Di dalam suatu recod jika terdapat field-field yang bertipe sama dapat dideklarasikan bersamaan dengan dipisahkan oleh tanda koma ( , ) sehingga anda tidak perlu menuliskan tipe datanya berulang-ulang. Perhatikan contoh dibawah ini !
Type
Volume Balok = record
Panjang
Lebar, Tinggi : byte
End

8.2 Pemakaian Record
Untuk menggunakan Record tersebut, maka harus ditulis nama record beserta dengan fieldnya yang dipisahkan dengan tanda ( . ). Misalnya Anda ingin menulis NIM seorang mahasiswa kelayar maka penulisan yang benar adalah sebagai berikut :
Write (Mhs. NIM)
Atau dapat juga dengan menggunakan kata baku with-do.
With Mhs do
Write (NIM) ;

Contoh Soal :
Uses crt ;
Type
Mahasiswa = Record
Nama : string [30 ] ;
NIM : string [10 ] ;
Alamat : string [50 ] ;
IPK : real ;
End;
Var
Mhs : Mahasiswa ;
Begin
ClrScr ;
Write (‘ Nama : ‘ ) ; readln (Mhs. Nama );
Write (‘ NIM : ‘ ) ; readln (Mhs. NIM );
Write (‘ Alamat : ‘ ) ; readln (Mhs. Alamat );
Write (‘ IPK : ‘ ) ; readln (Mhs. IPK );
Writeln;
Write (‘ Nama Anda : ‘ , Mhs.Nama);
Write (‘ NIM Anda :‘ , Mhs.NIM);
Write (‘ Alamat Anda : ‘ , Mhs. Alamat);
Write (‘ IPK Anda : ‘ , Mhs. IPK);
End.
Apabila dengan menggunakan reserved word with – do maka akan tampak seperti contoh berikut :
Uses Crt ;
Type
Mahasiswa = Record
Nama : string [ 30 ];
NIM : string [ 10 ];
Alamat : string [ 50 ];
IPK : real ;
End;
Var
Mhs : Mahasiswa ;
Begin
ClrScr;
With Msh do
Begin
Write (‘Nama : ‘ ) ; readln (Nama);
Write (‘NIM : ‘ ) ; readln (NIM);
Write (‘Alamat : ‘ ) ; readln (Alamat);
Write (‘IPK : ‘ ) ; readln (IPK);
Writeln;
Write (‘Nama Anda : ‘ , Nama);
Write (‘NIM Anda : ‘ , NIM );
Write (‘Alamat : ‘ , Alamat);
Write (‘IPK : ‘ , IPK);
end.
End.

Record dan array merupakan suatu type data struktur yang terdiri atas elemen yang lebih sederhana. Perbedaan utama antara array dan record adalah bahwa elemen-elemen pada array harus bertipe data sama (homogen), sedangkan field-field pada record dapat berbeda tipe datanya.


8.3 Latihan Soal beserta Jawaban (Listing Program) dan Penyelesaian.
1. Anda diminta membuat sebuah program untuk mencatat data-data siswa-siswi suatu sekolah yang terdiri dari field nama, alamat, telepon, jenis kelamin dan tanggal lahir.
Tampilan seluruh data yang ada dalam bentuk table .
Jawaban :
Uses Crt;
Type
Data = record
Name : string [ 25 ];
Alam : string [ 30 ];
Jk : string;
Telp : string [ 10 ];
Tgl : string [ 20 ];
End;
Var
Tanya : char;
i, j : integer;
siswa : array [ 1…25 ] data;

procedure Input;
begin
i : = 1;
repeat
ClrScr;
GotoXY (20, 4); write ( ‘ Nama siswa : ‘ ) ;
Readln ( siswa [ i ]. Name);
GotoXY (20, 6); write ( ‘ alamat siswa : ‘ );
Readln ( siswa [ i ]. Alm);
GotoXy (20, 8) ; write ( ‘ jenis Kelamin : ‘ );
Readln ( siswa [ i ]. jk);
GotoXY (20, 10) ; write ( ‘ No. Telepon : ‘ );
Readln ( siswa [ i ]. telp);
GotoXY (20, 12) ; write (‘ Tanggal lahir : ‘ );
Readln ( siswa [ i ]. tgl);
GotoXY (18,15) ; write (‘ Ingin tambah data lagi [ Y/ T ] ? : ‘ );
Readln ( tanya) ; Tanya := Upcase (Tanya);
If ( ( Tanya < > ‘Y’ and Tanya < > ‘T ) ) then
Begin
Repeat
GotoXy (20, 17) ; write (‘ lagi [ Y/T ] ? : ‘ );
GotoXY (18, 60) ; readln (Tanya);
Until (Upcase (Tanya) = ‘ Y’ ) and ( Upcase (Tanya) = ‘ T );
End;
inc ( i );
until Tanya = ‘T;
end

procedure Tampil;
begin
GotoXY (26, 1) ; writeln ( ‘ =================== ‘ );
GotoXY (26, 2) ; writeln ( ‘ = DAFTAR SISWA / I SMU = ‘ );
GotoXY (26, 1) ; writeln ( ‘ = MEDAN-SUMUT = ‘ );
GotoXY (26, 1) ; writeln ( ‘ =================== );
GotoXY (26, 1) ; writeln ( ‘ ********************************* ‘ );
GotoXY (26, 1) ; writeln ( ‘ No Nama Alamat Telepon Tgl Lahir ‘ );
For j := 1 to i – 1 do
Begin
GotoXY (2, j + 9 ); writeln (j);
GotoXY (11, j + 9 ); Writeln ( siswa [ j]. name);
GotoXY (29, j + 9 ); Writeln ( siswa [ j]. alm);
GotoXY (51, j + 9 ); Writeln ( siswa [ j]. telp);
GotoXY (63, j + 9 ); Writeln ( siswa [ j]. tgl);
end;
GotoXY (2, j + 11); writeln ( ‘=====================’ );
End;
Begin
Text background (15);
Textbackground (4);
Clrscr : Input ;
Clrscr : Tampil ;
Readln ;
End.

2. Buatlah program untuk mencatat data-data karyawan suatu perusahaan, yang terdiri dari field jumlah karyawan, nama, gaji/bulan, serta statusnya (belum menikah, menikah, atau duda/janda). Jika sudah menikah , Tanya berapa anaknya. Jika duda/janda,Tanya akan menikah lagi. Tampilkan seluruh data yang dicatat dalam sebuah table.
Jawaban :
Uses Crt;
Type
Status = (S, M, C)
Kariawan = record
Nama : string [ 25 ];
Gaji : long Int;
Case status_kar : status of;
S : ( );
M : (anak : byte);
C : (nikah : char);
end
arr = array [1..20 ] of karyawan;
var
I, jumlah : byte;
Kar : arr;
Stat : char;

Procedure Input ;
Begin
ClrScr;
GotoXY (15, 10) ;write (‘ jumlah data : ‘ ) ; readln (jumlah);
For i := 1 to jumlah do
Begin
ClrScr;
With kar [ i ] do
Begin
GotoXY (15, 10) ;write (‘ Nama Karyawan : ‘ );
Readln (nama);
GotoXY (15, 10) ;write (‘ Gaji tiap bulan : ‘ );
Readln (gaji);
GotoXY (15, 10) ;write (‘ Status Karyawan : (S/M/C) : ‘ );
Stat := Upcase (readkey);
Case stat of
‘ S ‘ : status_kar : =S;
‘ M ‘ : status_ kar : = M;
‘ C ‘ : status_ kar : =C;
end
if Stat = ‘ M ‘ then
begin
GotoXy (17, 16 ) ; write ( ‘ jumlah Anak : ‘ );
Readln (kar [ i ]. Anak );
End else
If stat = ‘ C ‘then
Begin
GotoXy (17, 16 ) ; write ( ‘ Akan nikah lagi ? ‘ );
Readln (kar [ i ]. nikah);
End;
End;
End;
End;
Procedure Sort (var kar :arr ; n : byte);
Var
i, j, lok : byte;
temp : karyawan;
begin
for i := 1 to n-1 do
begin
lok := i;
for j := i+ 1 to n do
begin
if kar [look]. Nama > kar [ j ]. Nama then
begin
lok := j;
temp := kar[ i ];
kar [ i ] := kar [ lok ];
kar [lok] := temp;
end;
end;
end;
end;
procedure output (jumlah :byte);
var I, j : byte;
begin
ClrScr;
GotoXY (33, 1) ; write ( ‘ DATA KARYAWAN ‘ );
GotoXY (33, 2) ; write ( ‘ ===================== ‘ );
GotoXY (33, 5) ; write ( ‘ -------------------------------------------- ‘ );
GotoXY (1, 5 ) ; write ( ‘ No Nama Karyawan Gaji Status
Jumlah anak Nikah lagi ‘ );
GotoXY (33, 1) ; write ( ‘ -------------------------------------------- ‘ );
j : = 1;
for I := 1 to jumlah do
begin
GotoXY (3, i + 7) ; write (j);
GotoXY (10, i + 7) ; write (kar[ i ].nama);
GotoXY (26, i + 7) ; write (kar[ i ].gaji);
Case kar[ i ].status_kar of
S : begin
GotoXY (38, i + 7) ; write ( ‘ S ‘ );
M : begin
GotoXY (38, i + 7) ; write ( ‘ M ‘, kar[ i ].anak:12);
C : begin
GotoXY (38, i + 7) ; write ( ‘ C ‘ , kar[ i ].nikah:27);
end;
end;
inc ( j );
end;
GotoXY (1, i + 8 ) ; write ( ‘ -------------------------------------------------------- ‘ );
begin
Input;
Sort (kar, jumlah);
Output (jumlah);
Readkey;
End;

3. Anda diminta untuk membuat program untuk menampilkan bola pantul. Pertama user diminta untuk memasukkan jumlah bola yang ingin ditampilkan, validasikan antara 1 s/d 10. Posisi awal dari masing-masing bola ditentukan secara acak, dan disimpan pada array.
Jawaban :
Uses Crt;
Type
Isi = record
x, y, : byte;
ax, ay : shortint;
end;
var
bola : array [1..10] of isi;
jumlah, i : byte;
procedure Int;
begin
randomize: {buat benih nilai acak}
write ( ‘ Masukkan jumlah bola : ‘ ) ; readln ( jumlah );
for i := 1 to jumlah do
begin
with bola[ i ] do
begin
x := random ( 80) + 1;
y := random ( 25) +1;
repeat
ax := random (2) – 1;
ay := random (2) ¬– 1;
until (ax <> 0) and (ay <> 0);
end;
end;
end;

procedure Anim ;
begin
ClrScr;
Repeat
For i := 1 to jumlah do
Begin
With bola[ i ] do
Begin
GotoXy (x, y) ; write (‘ ‘);
{memantulkan bola jika sampai batas x }
if (x <79) or (x<2) then ax := -ax;
{memantulkan bola jika sampai batas}
if (y >24) or (y<2) then ay := -ay;
x :=x + ax;
y :=y + ay;
GotoXY (x, y) ; write (‘ 0 ‘);
end;

end;
delay(50) ;
until Key Pressed ;
end;

begin
ClrSCr ;
Init ;
Anim ;
End.









Modul Procedure




Modul
Apabila program yang Anda buat sudah terlalu panjang, maka anda akan sulit untuk membaca dan mengerti jalannya program tersebut. Untuk itu ada baiknya anda memecahnya menjadi beberapa bagian (modul) yang tentunya akan lebih memudahkan Anda di dalam mencari kesalahan program dan memperbaikinya serta membuat dekomentasinya. Untuk membuat modul, Pascal menyediakan dua pilihan yaitu:
1. Procedure
2. Function

Procedure berguna untuk mengumpulkan statement – statement yang dapat dijalankan menjadi satu dalam suatu blok dan untuk menjalankannya kembali hanya dengan menuliskan nama procedure yang menampungnya.
Selain itu procedure juga banyak dipakai untuk menampung garis – garis perintah yang sering dipakai dalam sebuah program.
Untuk mendeklarasikan procedure dapat dilakukan dengan dua cara, yaitu:
1. Header Procedure tanpa parameter
2. Header Procedure dengan parameter

9.1. Header Procedure Tanpa Parameter
Bentuk Umum :
Procedure
Contoh :
Procedure Buat Kotak ;
Procedure Input ;
Procedure Output ;
Penulisan Header procedure tanpa parameter diawali dengan kata baku Procedure dan diikuti dengan nama procedure serta diakhiri dengan tanda titik koma (;).
Berikut digambarkan struktur blok program beserta procedure tanpa parameter.


P







Contoh Soal :
Pemanfaatan procedure tanpa parameter
Program Hitung ;
Var p,q,x,y : byte
Procedure TambahKali ;
Begin
P := x +y ;
q := x * y ;
Writeln ( ‘x + y = ‘, p);
Writeln ( ‘x * y = ‘, p);
End;
Begin
Write (‘x = ‘) ; Readln (x);
Write (‘y = ‘) ; Readln (y);
TambahKali; {untuk menjalankan procedure TambahKali}
End.
Dari listing program diatas, Anda dapat melihat dengan jelas bahwa Procedure TambahKali hanya berisi baris – baris program yang dapat dijalankan, dan pada procedure itu sendiri tidak ada hasil yang ditampungnya. Bandingkan dengan function pada bagian selanjutnya dalam bab ini juga.

9.2 Header Procedure Dengan Parameter
Bentuk Umum :
Procedure ();
Contoh:
Procedure Hitung(a,b : byte; c:real);
Procedure lingkaran(x,y,jari:integer);
Pennulisan header procedure dengan parameter hampir sama dengan procedure tanpa parameter yaitu diawali dengan kata baku Procedure, lalu nama procedure dan diikuti dengan parameter – parameter (yang berada didalam kurung) yang masing – masing dipisahkan dengan koma beserta dengan tipenya yang dipisahkan dengan titik dua (:) serta diakhiri dengan tanda titik koma (;).
Berikut digambarkan struktur blok program beserta procedure dengan parameter.
Program







Begin
….



Contoh Soal :
Pemanfaatan procedure dengan parameter;
Program Hitung;
Var p,q,x,y : byte
Procedure Tambahkali (a,b: byte);
Begin
P := a + b ;
q := a * b ;
Writeln ( ‘x + y = ‘,p);
Writeln ( ‘x * y = ‘,q);
End;
Begin {Main Program}
Write (‘x =’); Readln (x);
Write (‘y =’);Readln (y);
Tambah Kali (x,y);
End.

9.3 Parameter Formal dan Aktual
Jika sebuah modul, baik procedure ataupun function memiliki parameter yang berada di dalam kurung(), maka parameter tersebut disebut sebagai parameter formal, sedangkan parametr yang terdapat pada baris perintah pemanggil modul disebut sebagai parameter aktual.
Untuk lebih jelasnya perhatikan penjelasan di bawah ini.
Program Hitung Luas;

Procedure Hitung(a,b:byte;c:integer);
begin
…...
end;

{Program Utama}
begin
……
end;

{Program Utama}
var hasil:byte;
Begin
Hitung (3,7,hasil);
…..
End.
Pada contoh di atas procedure Hitung memiliki parameter a,b dan c yang disebut sebagai parameter formal. Procedure hitung tersebut dipanggil pada program utama dengan parameter 3,7 dan hasil. Parameter 3,7 dan hasil dikenal dengan sebutan parameter actual. Kemudian parameter aktual 3,7 dan hasil tesebut masing – masing ditransfer kepada parameter formal a,b, dan c sesuai dengan urutannya. Sehingga pada procedure hitung a bernilai 3, b bernilai 7, dan c berisi variable penampung hasil.
Transfer parameter akan dijelaskan lebih lanjut pada bagian berikut.
Program Gambar;

Function CheckPosisi (x,y:byte;Data;string);
begin
….
End;

{ Program Utama }
Begin
If Check Posisi(3,5,’*’) then
Write(‘Posisi Anda benar’);
….
End.


Pengertian parameter formal dan actual pada function tidak berbeda dengan yang dijelaskan sebelumnya pada procedure.
Function ChechPosisi mempunyai parameter X, Y, dan Data. Ketiga parameter itu dikenal sebagai parameter formal. Function Check Posisi dipanggil dalam program utama dengan parameter 3,5 dan ‘*’, Parameter 3,5 dan ‘*’ tersebut dikenal dengan parameter actual. Pada saat function Check Posisi dijalankan, parameter x akan berisi nilai 3, Y berisi nilai 5, dan Data berisi karakter *, setelah function selesai dijalankan, hasil akhir dari proses function Check Posisi akan disimpan pada function itu sendiri, yaitu pada “Check Posisi” yang bertipe Boolean. Karena Check Posisi bertipe Boolean, maka sudah dapat dipastikan bahwa nilai yang ditampungnya adalah True atau False. Lalu nilai true atau false itu akan dikirimkan kembali pada baris program pemanggilannya, yaitu :

If checkposisi(3,5’*’) then
Write(‘Posisi Anda benar’);

Jika Checkposisi bernilai True maka pada layer akan dicetak “Posisi Anda benar.

9.4 Transfer Parameter
Pada saat kita memanggil suatu modul (procedure / function) dengan parameter, sebenarnya telah terjadi pengiriman parameter dari parameter actual (yang terdapat pemanggil procedure / function) ke parameter formal yang terdapat pada procedure atau function tersebut),. Pengiriman parameter tersebut dapat dilakukan dengan dua cara, yaitu:
 Transfer parameter by value (secara nilai)
 Transfer parameter by location / reference (secara acuan)














9.4.1 Transfer Parameter by Value
Nilai yang tersimpan dalam parameter dikirim ke modul (procedure / function) untuk diolah, tetapi minta hasil olahan tersebut untuk dikembalikan. Dalam mode ini, terjadi aliran 1 arah, yaitu dari pemanggil procedure ke procedure itu.
Contoh Soal :

Transfer parameter by value #1
Program Hitung ;
Var x, y: byte;
Procedure TambahKali (p,q : byte);
Begin
P := x = y ;
Q := x =*y;
Writeln (‘x + y = ‘P);
Writeln (‘x* y = ‘q);
End;
Begin
Write (‘x = ‘) ; Readln (x);
Write (‘y = ‘) ; Readln (y);
TambahKali(x, y);
End;

Transfer parameter by value #2
Program Hitung ;
Var x, y : byte;
Function Kali (p,q : byte): byte;
Begin
Kali :=x * y ;
End;
Function Tambah (P,q; byte):byte;
Begin
Tambah := x + y ;
End ;
Begin
Write (‘x = ‘); Readln (x);
Write (‘y = ‘); Readln (y);
Writeln (‘x + y = ‘, Tambah(x, y);
Writeln (‘x * y = ‘, kali (x, y);
End.




9.4.2 Transfer Parameter by Location
Transfer parameter by location sering juga dengan transfer parameter by reference (secara acuan). Dalam kasus ini, yang ditransfer hanya lokasinya saja (dapat berisi data ataupun kosong) untuk diolah, dan meminta hasil olahan tersebut untuk dikembalikan dan disimpan pada lokasi yang telah ditransfer tersebut. Dalam mode ini, dapat terjadi aliran 2 arah dari pemanggil procedure,ke procedure itu dan sebaliknya.
Contoh soal :
Transfer parameter by location
Program hitung;
Var x, y : byte;
Procedure tambahkali ( var p, q : byte); byte;
Begin
P := x + y ;
Q:= x * y ;
End;
Begin
Write (‘x = ‘) ; Readln(x);
Write (‘y = ‘) ; Readln(y);
TambahKali(x, y);
Writeln (‘x + y =’,x);
Writeln (‘x + y =’,y);
End.

Perlu anda perhatikan bahwa transfer parameter by location ditandai dengan penggunaan kata baku var, sedangkan transfer parameter by value tidak.

9.4 Nester Procedure (Procedure Tersarang)
Nested Procedure adalah procedure yang terdapat di dalam procedure yang lainnya.
Bentuk umum :



















Contoh Soal :
Nested Procedure
Procedure ProcSatu;
Procedure ProcDua;
begin
Write ( ‘ saya ‘);
end;
Procedure Proc Tiga;
begin
Write ( ‘James Bond’ );
end;
{Awal ProcSatu}
begin
Write ( ‘Nama’);
ProcDua;
ProcTiga;
end;
{ Program Utama }
Begin
Write ( ‘ Hi,’ );
ProcSatu;
End.








Modul Function




Function tidak hanya dapat dipakai untuk mengelompokkan baris-baris perintah serpeti halnya procedure, tetapi Function itu sendiri dapat menampung nilai yang disimpan pada nama Function. Di sinilah letak perbedaan utama antara procedure dan Function. Seperti procedure, penulisan header function pun dapat dilakukan dengan dua cara ( sesuaikan kebutuhan), yaitu :
• Header function tanpa parameter
• Header function dengan parameter.

10.1 Header Function Tanpa Parameter
Bentuk Umum :
Function : TipeData;
Contoh :
Function Hitung : Integer;
Function nama : String;
Function Check : Boolean;
Header function selalu diawali dengan kata baku Function dan diikuti dengan nama function serta tipe datanya yang dipisahkan dengan tanda titik dua ( : ), berikut digambarkan struktur blok program beserta function tanpa parameter.











Contoh Soal :
Pemanfaatan function tanpa parameter
Program Hitung;
Var X,Y : byte;
Function Tambah : byte;
Begin
Tambah := X+ Y;
End;
Functin kali :byte;
Begin
Kali:=X*Y;
End;
Begin
Write(‘X=”);Readln(X);
Write(‘Y=”);Readln(Y);
Writeln(‘X+Y=’, Tambah);
Writeln(‘X+Y=’, Kali);
End.

Contoh program hitung diatas adalah salah satu contoh program memakai function tanpa parameter. Function tambah dan kali pada contoh diatas dapat menampung hasil dari perkalian anatara x dan y sehingga varaiabel P dan Q hanya dipakai sebagai penampung sementara, sedangkan pada procedure tidak dapat demikian.
Inilah salah satu perbedaan function dengan procedure seperti yang telah dijelaskan sebelumnya.



10.2 Header Function dengan

Bentuk Umum :
Function () : TipeData;
Contoh :
Function Hitung(a,b:Byte):integer;
Function CheckPosisi(x,y : integer):Boolean;












Perbedaan anatar function dan procedure, sebagai berikut:
• Jika Anda membuat suatu procedure maka Anda harus mendeklarasikan dengan reserved word “Procedure”, sedangkan jika Anda ingin membuat suatu function maka Anda harus mendeklarasikan dengan reserved word “Function”.
• Function harus dideklarasikan dengan tipenya, sedangkan procedure tidak. Hal ini menunjukkan bahawa pada function itu sendiri dapat menampung nilai, sedangkan procedure tidak.

Kesamaan procedure dan Function terletak pada fungsinya, sebagi berikut :
• Memecahkan sebuah program besar menjadi beberapa bagian (modul) sehingga memudahkan pembagian tugas jika program tersebut dibuat oleh lebih dari 1 orang. Selain itu juga mempermudah pengecekan kesalahan / error.
• Jika terdapat perintah-perintah yang sama yang akan Anda pakai dalam suatu program, maka sebaiknya perintah-perintah tersebut dipisahkan dalam suatu modul program dengan bantuan procedure, sehingga jika Anda ingin memakainya kita hanya tinggal memanggil nama procedure tersebut.
• Mempermudah proses dokumentasi.



Contoh Soal :
Pemanfaatan Function dengan parameter:
Program Hitung;
Function Tambah(x,y :byte):byte;
Begin
Tambah :=x+y;
End;
Function kali(x,y : byte):byte;
Begin
Kali:=x*y;
End;
Var x,y :byte;
Begin
Write(‘X=’);Readln(X);
Write(‘Y=”);Readln(Y);
Writeln(‘X+Y=’, Tambah);
Writeln(‘X+Y=’, Kali);
End.

10.3 Varaiabel dan Konstanta Lokal
Pada listing contoh soal pemanfaatan procedure tanpa parameter dan contoh soal pemanfaatan procedure dengan parameter varaiabel p,q,x dan y, semuanya bersifat global sehingga dapat dikenal baik pada program utama dan pada procedure TambahKali sedangkan pada listing pada contoh soal pemanfaatan function tanpa parameter variable x dan y juga bersifat global namun variable pdan q tidak diperlukan lagi karena digantikan oleh function itu sendiri yang juga dapat menampung suatu nilai.
Ada baiknya Anda membatasi suatau varaibael atau konstanta hanya pada batas lokal saja karena beberapa factor seperti kemudahan dalam mengecek jika terjadi kesalahan, memudahkan pengontrolan, dapat memakai variable dengan nama yang sama tetapi dengan fungsi atau procedure yang berbeda dan sebagainya.
Jika Anda mendeklarasikan variable atau konstanta local di dalam suatu procedure atau function yang bersangkutan dan tidak dapat digunakan pada procedure atau function lainnya ataupun pada program utama.
Contoh soal :
Pemanfatan variable Global dan local #1
Transfer parameter by location

Var x,y : byte;
Procedure Tambahkali;
Var P,Q : byte;
Begin
P:= x+y;
Q:=X*Y;
Writeln(‘X + Y=’,P);
Writeln(‘X + Y=’,Q);
End;
Begin
Write(‘X=’);Readln(X);
Write(‘Y=’):Readln(Y);
Tambahkali;
End.
Pemanfaatan Variabel Global dan Lokal #2
Program Hitung ;
Var x, y : byte;
Function Tambah : byte;


Var P : byte;
Begin
P :=x + y ;
Tambah :=P;
End;
Function Kali :byte;
Var Q : Byte;
Begin
Q := x * y ;
Kali :=Q;
End ;
Begin
Write (‘x = ‘); Readln (x);
Write (‘y = ‘); Readln (y);
Writeln (‘x + y = ‘, Tambah);
Writeln (‘x * y = ‘, kali );
End.

Pada kedua contoh program di atas variable X dan Y bersifat global sehingga dapat dikenal baik pada program utama maupun pada procedure TambahKali/ Function Tambah dan Kali. Sedangkah Variabel P dan Q pada listing #1 bersifat local, sehingga hanya dapat dikenal pada procedure TambahKali saja. Sedangkan pada listring #2, P hanya dikenal pada Function Tambah dan Q hanya dikenal pada Function Kali. Dan Apabila Local Varaiabel tersebut dipaksakan dipakai pada main program maka pascal akan memberikan pesan error “ Unknown Indentifier’ yang menandakan bahwa variable P dan Q tersebut tidak dikenal pada program Utama.

10.4 Procedure/ Function Rekursif
Procedure/ Function Rekursif adalah procedure /function yang dapat memanggil dirinya sendiri. Procedure/ Function Rekursif dipakai karena memiliki kelebihan yaitu penulisan baris program dapat menjadi lebih singkat, tetapi juga memiliki kekurangan yang membutuhkan banyak memory, kerana setiap kali program bagian dipanggil oleh dirinya sendiri, dibutuhkan sejumlah ruang memori tambahan.
Procedure Rekursif :
Var n : byte
Procedure Rekursif
Begin
Writeln(n);
N:=n-1;
If n> 0 then Rekursif;
End;
{program Utama}
Begin
N:=10;
Rekursif;
End.

Function Rekursif :
Function Fibonanci (n:byte) : integer;
Begin
If n<= 2 then fibonanci := 1 else
Fibonanci :=fibonanci(n-1) + fibonanci(n-2);
End;








































SORT (Pengurutan)




Sort adalah proses pengurutan data yang sebelumnya disusun secara acak sehingga menjadi tersusun secara teratur menurut suatu aturan tertentu.
Pada umumnya terdapat 2 jenis pengurutan :
• Ascending (naik)
• Desending (turun).
Contoh :
Data Acak : 5 6 8 1 3 25 10
Data terurut Ascending : 1 3 5 6 8 10 25
Data terurut Descending : 25 10 8 6 5 3 1
Untuk melakukan proses pengurutan tersebut dapat digunakan berbagai macam cara/ metode. Beberapa metode diantaranya:
1. Bubble/ Exchange Sort
2. Selection Sort
3. Insertion Sort
4. Quick Sort

11.1 Bubble/ Exchange Sort
membandingkan elemen yang sekarang dengan elemen berikutnya, jika elemen sekarang > elemen berikutnya, maka tukar.
Proses :
Langkah 1 :










Langkah 2 :












Langkah 3 : Langkah 4:






Proses Pengecekan pada langkah 3 dan seterusnya sama dengan langkah sebelumnya.
Langkah 5 : Terurut :





Diatas adalah pengurutan data dengan metode bubble ascending. Untuk yang Descending adalah kebalikan dari proses diatas. Berikut penggalan listing program Procedure Tukar Data dan Procedure Bubble Sort.
Procedure Tukar Data
Procedure Tukar Data (Var a, b : word );
Var c: word;
begin
c:=a;
a:=b;
b:=c;
end;
Procedure Buble sort Ascending
Procedure Asc_Buble (var data : array ; jmldata : integer);
Var
i,j : integer;
begin
for i:=2 to jmldata do
for j:=jmldata downto I do
if data[j] < data [j-1);
end;
Untuk pengurutan secara descending anda hanya perlu mengganti baris ke-6 dengan berikut ini:
If data[j] > data[j-1] then

11.2. Selection Sort
Membandingkan elemen yang sekarang dengan elemen yang berikutnya sampai dengan elemen yang terakhir. Jika ditemukan elemen lain yang lebih kecil dari elemen sekarang maka dicatat posisinya dan kemudian ditukar. Dan begitu








Proses
Langkah 1 : Langkah 2 :
:
Langkah 1 :










Langkah 3 : Langkah 4 :












Langkah 5 : Terurut :









Proses pengurutan diatas adalah dengan metoda serlection Ascending. Untuk Descendinghanyalah kebalikan dari proses diatas. Berikut penggalan listing program procedure Selection Sort secara ascending.
Procedure Selection Sort Ascending.
Procedure Asc_Selection;
Var
Min, pos :byte;
Begin
For i := 1 to max du
Begin
Pos := i;
For j := i + 1 max do
If data[j] < data[pos] then pos := j;
If i <> pos then tukar data (data[i], data[pos] );
end;
end;
Untuk pengurutan secara descending, anda hanya perlu mengganti baris ke-8 sebagai berikut:
If data[pos] < data[j] then pos := j;
Procedure tukar data adalah sama seperti yang telah dituliskan sebelumnya.

11.3.1 Insert Sort
Pengurutan dilakukan dengan cara membandingkan data ke-i (dimana i dimulai dari data ke-2 sampai dengan data terakhir ) dengan data berikutnya . Jika ditemukan data yang lebih kecil maka data tersebut disisipkan kedepan sesuai dengan posisi yang seharusnya

Proses :
Langkah 1 : Langkah 2 :










Langkah 3 : Langkah 4:
















Langkah 5 : Terurut :












Procedure Asc_insert;
Var
I,j, temp : byte;
Begin
For I := 2 to max do
Begin
Temp := data[I];
J:=I+1;
While (data[j]>temp) and (j>0) do
Begin
Data[j+1] :=data[j];
Dec[j];
End;
Data[j+1] :=temp;
End;
End.

Untuk pengurutan secara descending anda tinggal mengganti baris ke 8 dengan bari berikut :
While(data[ j ] < temp) and (j>0) do

11.4 Quick Sort
Membandingkan suatu elemn (disebut Pivot) dengan elemen yang lain dan menyusunnya sedemikian rupa sehingga elemen-elemen lain yang lebih kecil daripada pivot tersebut terletak di sebelah kirinya dan elemen-lemen lain yang besar daripada pivot tersebut terletak di sebelah kanannya. Sehingga dengan demikian telah terbentuk dua sublist, yang terletak disebelah kiri dan kanan dari pivot. Lalu pada sublist kiri dan sublist kanan kita anggap sebuah list baru dan kita kerjakan proses yang sama seperti sebelumnya. Demikian seterusnya sampai tidak terdapat sublist lagi. Sehingga di dalamnya telah terjadi proses Rekursif.

Proses :
Bilangan yang di dalam kurung merupakan pivot.
Persegi panjang yang digambarkan dengan garis terputus-putus menunjukkan sublist.
I bergerak dari sudut kiri ke kanan sampai mendapatkan nilai yang > = pivot
J bergerak dari sudut kanan ke kiri sampai menemukan nilai yang < pivot.


Langkah 1 :









I berhenti pada index ke-1 karena langsung mendapatkan nilai yang > dari pivot (15).
J berhenti pada index ke-6 karena juga langsung mendapatkan nilai yang < dari pivot.
Karena I < j maka data yang ditunjuk oleh I ditukar dengan data yang ditunjuk oleh j sehingga menjadi :
2 10 15 3 15 22



Langkah 2:










I berhenti pada index ke –3 (pivot) karena tidak menemukan bilangan yang > dari pivot.
J berhenti pada index ke-5 menunjuk pada nilai yang < dari pivot.
Karena I< j maka data ditunjuk oleh I (pivot) ditukar dengan kata yang ditunjuk oleh j sehingga menjadi :
2 10 8 3 15 22










Pada yang sama seperti sebelumnya dilakukan terhadap 2 buah sublist yang baru ( ditandai dengan persegi panjnag dengan garis terputus-putus).


Atau dapat juga digambarkan dalam bentuk tree dibawah ini dengan pivot yang ditandai dengan huruf tebal. Kemudian setelah terurut dibaca secara inorder.










3


10

Procedure Quick Sort dengan nilai paling kiri sebagi pembanding (pivot).
Procedure Asc_Quick (L,R : Integer);
Var
I,j : Integer;
Begin
If L Begin
I:= L; j := R +1;
Repeat
Repeat inc( i ) until data[ I ] < = data[ I ];
Repeat dec( i ) until data[ I ] < = data[ I ];
If I < j then Tukardata(dta[ I], data[ j]);
Until I < j;
Tukardata(data[ I], data [ j ]);
Asc_quick(L, j-1);
Asc_quick (j + 1, R0;
End;
End.

Untuk pengurutan secara descending anda tinggal mengganti tanda aritmatik pada baris ke 8 dan 9 sehingga menjadi seperti berikut ini :
Repeat inc( i ) until data[ I ] < = data[ I ];
Repeat dec( i ) until data[ I ] < = data[ I ];
Procedure Quick Sort dengan nilai tengah sebagi pembanding (pivot)
Procedure Asc_Quick (L,R : integer);
Var
mid,I,j :integer;
begin
I:= L; J := R; mid:= data[(L+R) div 2]
Repeat
While data[ I ]< mid do inc[ I ]
While data[ j ]< mid do dec[ j ]
If I <= then;
Begin
Change(data[ I], data[ I ]);
Inc( I ); dec( j);
End;
Until I > j;
If L < J then ASC_Quick (L,J);
If I < R then ASC_quick (I,R);
End;
Untuk pengurutan secara descending, anda hanya perlu mengganti baris ke 6 dan 7 sebagi berikut:
While data[ I ]< mid do inc[ I ]
While data[ j ]< mid do dec[ j ]
















































Tipe Data Pointer dan
Linked List


12.1 Variabel Pointer
Pada bab sebelumnya telah dijelaskan mengenai variable bertipe array, suatu tipe data yang bersifat statis ( ukuran dan urutannya sudah pasti). Selain itu ruang memori yang dipakai olehnya tidak dapat dihapus bila variable bertipe array tersebut sudah tidak digunakan lagi pada saat program dijalankan. Untuk memecahkan masalah tersebut, kita dapat menggunakan variable pointer. Tipe data pointer bersifat dinamis, variable akan dialokasikan kembali.

12.1.1 Array vs Pointer
Berikut table dibawah ini diberikan perbedaan antara variable bertipe array dengan variable bertipe pointer.
Kriteria
Array Pointer
Sifat Statis Dinamis
Ukuran Pasti Sesuai Kebutuhan
Alokasi Variabel Saat program dijalankan sampai selesai Dapat diatur sesuai kebutuhan

12.1.2 Deklarasi Variabel Pointer
Bentuk Umum :
Var : <^TipeData>
Contoh :
Var
Jumlahdata : ^integer;
NamaSiswa :^string[25];
nilaiSiswa :^Real;

Pendeklarasi varaaibel pointer tidak jauh berbeda dengan pendeklarasian variable biasa, hanya perlu ditambahkan symbol topi (^) sebelum tipe datanya. Simbol topi tersebut menandakan bahwa varaibel tersebut menunjuk ke lokasi tertentu pada memori. Anda juga dapat membuat variable pointer bertipe record yang anda defenisikan sendiri.
Pendeklarasiannya adalah seperti berikut :

Bentuk Umum :
Type
=<^NamaPointer>;
= Record
:;
:;

:;
end;

Var
:;

Contoh :
Type
PointMhs = ^RecMhs;
RecMhs = Record
Nama: string[25];
NIM:String[10];
Alm : String[30];
IPK : Real;
End;
Var
DataMahasiswa : PointMhs;
12.1.3 Variabel Biasa vs Variabel Pointer
variable pointer adalah suatu variable yang menunjuk ke alamat memori yang digunakan untuk menampung data yang akan diproses, seperti digambarkan di bawah ini:





Aku





P adalah variable yang menunjuk ke alamat memori 100 yang berisi data bertipe string “ Aku”. Apabila Anda ingin menambahkan data dengan menggunakan variable yang berbeda, maka Anda dapat mendeklarasikan variable pointer baru misalnya Q dan R dan seterusnya tampak sebagi berikut :


Aku

Belajar

Pointer










Untuk membedakan anatara variable pointer dengan variable biasa, perhatikan contoh berikut :

















































Analogi Variabel Pointer
Memasukan data pada variable pointer dapat dianalogikan pada saat Anda ingin menyewa saving box pada sebuah bank.
Analogikan gambar saving box diatas sebagi memori pada computer dan nomor saving box sebagi alamat dari memori. Pada keadaan mula-mula keadaan saving adalah kosong. Misalkan irsan ingin mengisinya ( menyewanya ) maka ia harus membayar sejumlah dana pada pihak bank, begitu pula jika anda ingin mengisikan data pada variable pointer maka anda harus membayarnya dengan melakukan deklarasi new (< Nama VarPointer>) Baru setelah itu pihak bank akan memilihkan nomor saving box yang dapat di pakai oleh irsan dengan catatan saving box tersebut belum di sewa orang lain, begitu juga dengan variable pointer akan bebas untuk memilih lokasi memori mana yang akan ia sewa (tunjuk) dengan catatan lokasi tersebut belum dipakai oleh program lain. Jadi jika anda tidak usah memikirkan lokasi memori mana yang akan dipakai oleh pariabel pointer tersebut.




Setelah mendapat nomor saving box dari bank yaitu A101, maka irsan akan mulai memasukkan barang-barang berharga miliknya ke dalamnya, begitu pula dengan variable pointer akan memasukkannya ke dalam tempat yang telah ditunjuknya. Ternyata saving box telah penuh namun masih ada barang berharga irsan yang masih belum tersimpan, maka ia dapat menyewa saving box yang lain. Begitu pula dengan variable pointer, jika anda masih ingin memasukkan data maka variable pointer akan menunjuk lokasi memori lain seperti langkah sebelumbya. Kali ini irsan mendapat sacing box nomor A102.
Untuk jelanya perhatikan gambar berikut .
Jika tempatnya masih kurang memenuhi maka irsan dapat menyewa kembali seperti sebelumnya sampai tidak ada lagi saving box yang tersisa, begitupula dengan variable pointer akan menunjuk ke lokasi memori yang masih kosong sampai semua lokasi pada memori terisi penuh.

Gambar

12.2 Single Linked List
Apabila setiap kali anda menambahkan data selalu dengan menggunakan variable pointer yang baru, anda membutuhkan banyak sekali variable pointer (penunjuk). Oleh karena itu ada baiknya jika anda hanya menggunakan satu variable pointer saja untuk menyimpan banyak data dengan metode yang kita sebut dengan Linked List. Jika diterjemahkan, maka berarti suatu daftar isi yang saling berhubungan. Untuk lebih jelasnya perhatikan gambar dibawah ini :

Pada gambar di atas tampak bahwa sebuah data terletak pada sebuah lokasi memory area. Tempat yang disediakan pada suatu area memory tertentu untuk menyimpan data dikenal dengan sebuatan node/simpul. Pada setiap node memiliki pointer (penunjuk) yang menunjuk ke simpul berikutnya sehingga terbentuk suatu untaian dan dengan demikian hanya diperlukan sebuah variable pointer. Susunan berupa untaian semacam ini disebut single linked list. (ket: Nil tak memiliki nilai apapun. Biasanya linked list pada titik akhirnya akan menunjuk ke Nil).
Dalam pembuatan single linked list dapat menggunakan 2 metode:
 LIFO (Last In First Out) aplikasinya : Stack (Tumpukan).
 FIFO (First In First Out), aplikasinga : Queue(antrian).


12.3 LIFO (Last In First Out)
LIFO adalah suatu metode pembuatan linked list dimana data yang dimasukkan paling akhir adalah data yang keluar paling awaal. Hal ini dapat dianalogikan (dalam kehiduapan sehari-hari) pada saat Anda menumpukan barang, seperti digambarkan dibawah ini.







(Keadaan mula-mula
adalah kosong)











Pembuatan sebuah simpul dalam suatu linked list seperti gambar diatas disebut dengan istilah INSERT. Jika linked list dibuat dengan metoda LIFO, maka terjadi penambahan/Insert simpul di belakang.

12.3.1 Procedure Insert
Istilah Insert berarti menambahkan sebuah simpul baru kedalam suatu linked list. Berikut dibawah ini adalah penggalan listing procedure insert untuk LIFO beserta contoh dan penjelasan cara kerjanya.


























Penggalan Deklarasi tipe data dan variabel diatas ini akan dipakai pada penjelasan procedure-procedure selanjutnya.












Penggalan Procedure INSERT untuk LIFO







Head






Ket : head mula-mula selalu dideklarasikan sebagai nil)






Now




















Now Head














Now

















Now Head




























Now Head










12.4 FIFO (First In First Out)
FIFO adalah suatu metoda pembuatan linked dimana data yang masuk paling awal adalah data yang keluar paling awal juga. Hal ini dapat di analogikan (dalam kehidupan sehari-hari) misalnya saat sekelompok yang datang (ENQUEUE) mengantri hedak membeli tiket diloket. Jika linked list dibuat dengan metoda FIFO, maka terjadi penambahan/ Insert simpul di depan.







12.4.1 Procedure Insert
Penggalan Procedure
INSERT untuk FIFO



















Head









(head mula-mula selalu diidentifikasikan sebagai nil)
















Now Head Tail























Now

Head Tail



















Now





Head Tail
















Tail

Head Now






Head Now Tail























Head Now Tail













Head Now Tail



















































S T A C K (Tumpukan)




Stack adalah suatu tumpukan dari benda. Konsep utamanya adalah LIFO ( Last In First Out), benda terakhir masuk dalam stack akan menjadi benda pertama yang dikeluarkan dari stack. Ilustarinya bisa dilihat pada gambar di bawah ini :

(Setelah ditumpuk)



(keadaan mula-
mula adalah
kosong)







Pada gambar di atas, jika ingin mengambil sesuatu dari tumpukan, maka harus diambil dari benda paling atas dulu, yakni compo. Jika misalnya diambil VCD secara langsung, maka compo akan jatuh. Prinsip stack ini bisa diterapkan dalam pemrograman. Di pascal, ada dua cara penerapan prinsip stack yakni dengan array dan linked list.

13.1 Single Stack dengan Array
Sesuai dengan sifat stack, maka pengembalian/ penghapusan elemen dari stack harus dimulai dari elemen teratas. Ilustrasinya dalah sebagai berikut :

Max 7

6

5

4

3

2

Top 1


Diatas tampak visualisasi stack dengan array, dimana indeks array ke-1 diisi ole TV, indeks ke-2 diisi oleh VCD, dan seterusnya. Top dianggap sebagai puncak dari stack. Harus di ingat bahwa banyak stack yang mungkin ada harus dibatasi karena lokasi memori pada array bersifat statis dan terbatas (di atas, banyak stack max. adalah7).
Berikut diberikan contoh deklarasikan konstanta, tipe data variabel yang akan dipakai dalam penjelasan operasi-operasi stack dengan array.
Cost
Max = 7
Tipe
TipeData = byte;
Stack = array [1..Max] of TipeData;
Var
Top : TipeData

13.1.1. Operasi –operasi pada Single Stack dengan Array
 Create : Membuat sebuah stack baru yang masih kosong.









(ket : konsepnya adalh bahwa top menunjukkan tingginya tumpukkan stack. Jika tinggi tumpukkan adalah 0, berarti adalah 0, berarti tumpukkan kosong).


Max 7

6

5

4

3

2

1

Top 0




 Full : Function untuk memeriksa apakah stack yang ada sudah penuh.











 Push : Menambahkan sebuah elemen kedalam stack. Tidak bisa dilakukan jika stack sudah penuh.






















{keadaan top mula-mula adalah 0, lihat proc. Create}.













Max 7

6

5

4

3

2

1

Top 0






Max 7

6

5

4

3

2

1

Top 0





Max 7

6

5

4

3

2

1

Top 0


 Empty : Function untuk menentukan apakah stack kosong atau tidak.








 Pop : Mengambil elemen teratas dari stack. Stack tidak boleh kosong.









































Max 7

6

5

4

3

2

1

Top 0


(ket : jika posisi sudah dibawah sebuah elemen, maka elemen tersebut dianggap sudah hilang, jadi dalam kasus diatas 13 sudah dihapus)


 Clear : Mengosongkan stack (ket : jika Top = 0, stack dianggap kosong)








Max
7
Max
6

5

4

3

2

1

Top 0





13.2 Double Stack dengan Array
Adalah tehnik khusus yang di kembangkan untuk menghemat pemakaian memori dalam pembuatan dua stack dengan array. Intinya adalah hanya penggunaan hanya sebuah array untuk menampung dua stack. Untuk mudahnya, lihat lah gambar dibawah ini.


STACK KOSONG

1 TOP MAX

Visualisasi single stack dengan array









1 TOP 1 TOP 2 MAX

Visualisasi double stack dengan array

Tampak jelas bahwa sebuah array dapat dibagi untuk dua stack, stack 1 bergerak kekanan dan stack 2 bergerak kekiri. Jika Top 1 (elemen teratas dari stack 1) bertemu dengan Top2 (elemen teratas dari stack 2), maka double stack telah penuh.
Berikut diberikan contoh deklarasi konstanta, tipe, dan pariabel yang akan dipakai dalam penjelasan operasi- operasi double stack dengan array.

Const
Max = 8;
Tye
TipeData = integer
Stack = array [1..max] of Byte;
Var
Top : array [1...2] of Byte;

Implementasi double stack dengan array dalam pascal adalah dengan memanfaatkan operasi-operasi yang tidak berbeda jauh dengan operasi single stack dengan array.

13.2.1 Operasi-operassi pada Double Stack Dengan Array

 Create : Membuat stack baru yang masih kosong


















Top2 8

Max 7

6

5

4

3

2

1

Top 0

 Full : Memeriksa apakah double stack sudah penuh.









 Push : Memasukkan sebuah elemen ke salah satu stack.
































Top Top2 8

Max 7

6

5

4

3

2

Top1 1

0






Top2 8
Max,Top2 7

6

5

4

3

2

Top1 1

0




8

Max, Top2 7

6

5

4

3

2

Top 1

0

8

Max 7

Top2 6

5

4

3

Top 2

1

0




8

Max 7

Top2 6

5

4

3

Top 2

1

0







 Empty : Function yang memeriksa apakah stack 1 atau stack 2 kosong.














 Pop : Mengeluarkan elemen teratas dari salah satu stac.














{keadaan double stack mula-mula}

8

Max 7

Top2 6

5

4

Top1 3

2

1

0







8

Max,Top2 7

6

5

4

Top1 3

2

1

0








8

Max,Top2 7

6

5

4

3

2
Top1
1

0

 Clear : Mengosongkan salah satu stack.











8

Max, Top2 7

6

5

4

3

2

1

Top1 0



13.3 Latihan Soal beserta Jawaban (Listing Program) dan Penjelasan
1. Anda diminta untuk membuat sebuah p[rogram animasi stack. Gambarkan sebuah wadah dan beri tiga pilihan : Push, pop, dan quit. Jika dipilih Push, program akan meminta user menginput sebuah karakter yang akan dimasukkan kedalam wadah tersebut, (Misalnya 10 karakter dalam wadah). Jika dipilih pop maka karakter teratas akan dikeluarkan dari wadah. Jika dipilih quit maka program selesai (stack. Pas).

Jawaban :
Program ArrayStack ;
User crt;

Cost
Max = 10;
Var
Top, i : bite;
Pil, tempe : char;
Stack : array[1…max] of char;

Procedure PushAnim: {anim mengisi isi tumpukan}
Begin
For i := 1 to 18 do
begin
GotoXy(23+i, 7) ; Write (temp); delay(30);
GotoXy(23, 7) ; ClrEol;
end
For i := 1 to 14-top do
begin
delay(30);
GotoXy(41,6+i) ; Write ( ‘ ‘ );
GotoXy(41, 7+i) ; Write (temp);
end;
end;
Procedure PopAnim(temp:char); {animasi mengeluarkan isi}
begin {tumpukan}
for i := 1 to 14-top do
begin
delay(30);
GotoXy(41+i,7) ; Write (temp); delay(30);
GotoXy(16, 7) ; ClrEol;
End;
End;
Procedure Push (e:char); {mengisitumpukan}
begin
inc(top);
Stack[top] := e;
PushAnim;
end;
Procedure Pop(e : char); {mengeluarkan tumpukan}
begin
if top<> 0 the
begin
e := stack[top]; PopAnim(e);
dec(top);
end else
begin {peringatan jika stack telah kosong}
GotoXy(1,7) ; Write (‘Stack Telah Kosong’); readkey;
GotoXy(1,7) ; ClrEol;
end;
end;

begin {main program}
ClrScr;
Writeln{‘ANIMASI STACK’);
Writeln(‘1. Push ‘);
Writeln(‘2. Pop ‘);
Writeln(‘3. Quit ‘);
Writeln(‘{‘ Pilihan [1/2/3] = ‘ );
GotoXy(59,6) ; Write (‘\’);
GotoXy(59,8) ; Write(‘/’);
GotoXy(37,10) ; Write (‘\ /’);
For i := 1 to 11 do
begin
GotoXY(38,10+i);
if I = 11 then write( ‘ ‘) else write( ‘ . ‘);
end;
Top := 0
Repeat
GotoXY(19,5); ClrEol;
Pil := readkey; Write(pil);
if pil = ‘1’ then
begin
if top<> max then
GotoXY(1,7); Write(‘ masukkan suatu huruf; ‘ );
Temp := readkey; write(temp);
Push(temp);
GotoXy(1,7); ClrEol;
end else
begin
GotoXY(1,7); write(‘Stack telah penuh’); readkey;
GotoXy(1,7); ClrEol;
end;
end else
if pil=’2’ tehn pop(tem);
until pil=’3’ ;
End.