Showing posts with label Pemrograman. Show all posts
Showing posts with label Pemrograman. Show all posts

Sunday, January 30, 2011

Kalkulus Relasional Tupel Dan Kalkulus Relasional Domain

  • Kalkulus Relasional Tupel

Kalkulus relasional tupel adalah bahasa query yang non prosedural. Bahasa ini mendeskripsikan informasi yang diinginkan tanpa memberi prosedurnya secara detil untuk mendapatkan informasi tersebut. Kalkulus relasional tupel merupakan basis untuk bahasa query QUEL.

Sebuah query dalam bahasa ini ditulis :

{ t | P(t) }

artinya, semua tuple t sedemikian sehingga predikat P adalah benar untuk t. Dengan mengikuti notasi terdahulu, kita gunakan t[A] untuk menyatakan nilai tuple t pada atribut A, dan t ∈ r untuk menyatakan bahwa tuple t berada dalam relasi r.

Dalam kalkulus relasional ada 2 notasi yang penting, yang pertama adalah “terdapat beberapa (there exists)” yang ditulis :

∃ t ∈ r ( Q(t) )

artinya, terdapat beberapa tuple t anggota relasi r sedemikian sehingga bahwa predikat Q(t) adalah benar.

Yang kedua adalah “untuk seluruh (for all)” yang ditulis :

∀ t ∈ r ( Q(t) )

artinya, untuk seluruh tupel t anggota relasi r sedemikian sehingga bahwa predikat Q(t) adalah benar.

  • Kalkulus Relasional Domain

Kalkulus relasional domain juga adalah bahasa query yang non prosedural dan karenanya berhubungan dekat dengan kalkulus relasional tupel. Berbeda dengan kalkulus relasional tupel, bahasa ini menggunakan variabel domain yang mengambil nilai dari domain atribut, bukan dari nilai seluruh tupel. Kalkulus relasional domain merupakan basis untuk bahasa query QBE.

Sebuah ekspresi dalam kalkulus relasional domain adalah berbentuk :

{ < x1, x2, . . . , xn > | P(x1, x2, . . . , xn) }

dimana x1, x2, . . . , xn merepresentasikan variabel-variabel domain. P merepresentasikan sebuah formula yang terdiri dari atom-atom. Sebuah atom dalam kalkulus relasional domain dapat berupa salah satu dari bentuk berikut ini :

-    < x1, x2, . . . , xn > ∈ r, dimana r adalah relasi dengan n atribut dan x1, x2, . . . , xn adalah variabel domain atau konstanta domain.

-    x ϴ y, dimana x dan y adalah variabel domain dan ϴ adalah operator relasional (≤, <, =, ≠, >, ≥). Kita membutuhkan atribut x dan y mempunyai domain yang bisa diperbandingkan dengan ϴ.

-    x ϴ c, dimana x adalah variabel domain, ϴ adalah operator relasional, dan c adalah sebuah konstanta.

Dalam kalkulus relasional domain, seperti halnya dalam kalkulus relasional tupel, kita juga menggunakan notasi “terdapat beberapa (there exists)” dilambangkan dengan “∃” dan “untuk seluruh (for all)” dilambangkan dengan “∀”.

Referensi :

- Database System Concepts Silberschatz-Korth-Sudarshan, McGraw Hill, Fourth Edition, 2002

Aljabar Relasional, Model Data Relasional Dalam Basis Data Terdistribusi

Menyambung bahasan sebelumnya, yaitu Pengenalan Model Data Relasional, sekarang akan dibahas mengenai bahasanya. Tabel relasi yang digunakan pada bahasan ini akan menggunakan tabel sebelumnya.

Bahasa yang dipakai pada model relasional disebut dengan bahasa query. Bahasa Query adalah suatu bahasa yang menyediakan fasilitas bagi user untuk mengakses informasi dari basis data. Pada umumnya level bahasa ini lebih tinggi dari bahasa pemrograman standar. Bahasa query dapat dikategorikan sebagai prosedural & non-prosedural.

Dalam bahasa prosedural, user menginstruksikan ke sistem agar membentuk serangkaian operasi dalam basis data untuk mengeluarkan hasil yang diinginkan. Dalam bahasa non-prosedural, user mendeskripsikan informasi yang diinginkan tanpa memberikan prosedur detail untuk menghasilkan informasi tersebut. Aljabar relasional merupakan bahasa query prosedural, sedangkan kalkulus relasional tupel dan kalkulus relasional domain adalah non-prosedural.

  • Aljabar Relasional

Aljabar relasional adalah sebuah bahasa query prosedural yang terdiri dari sekumpulan operasi dimana masukkannya adalah satu atau dua relasi dan keluarannya adalah sebuah relasi baru sebagai hasil dari operasi tersebut. Operasi-operasi dasar dalam aljabar relasional adalah : select, project, union, set difference, dan cartesian product. Disamping operasi-operasi dasar terdapat beberapa operasi tambahan seperti set intersection, natural join, division dan theta join.

Operasi-operasi Dasar

-       Select

Operasi select berfungsi untuk menyeleksi tuple-tuple yang memenuhi predikat yang diberikan dari sebuah tabel relasi. Simbol sigma “σ” digunakan untuk menunjukkan operasi select. Predikat muncul sebagai subscript dari σ dan kondisi yang diinginkan yang ditulis dalam predikat. Argumen diberikan dalam tanda kurung yang mengikuti σ dan berisi tabel relasi yang dimaksud.

Contoh penggunaan operasi select :

σNPM = 10296832(NILAI)

Perintah diatas berarti memilih tupel-tupel dari tabel NILAI yang memiliki atribut NPM bernilai 10296832. Hasil dari operasi diatas adalah :

10296832
KK021
60
75

10296832
KD132
40
30

-       Project

Operasi project berfungsi untuk memilih nilai atribut-atribut tertentu saja dari sebuah tabel relasi. Simbol phi “Π” digunakan untuk menunjukkan operasi project. Predikat muncul sebagai subscript dari Π dan hanya nama atribut yang diinginkan yang ditulis dalam predikat. Argumen diberikan dalam tanda kurung yang mengikuti Π dan berisi tabel relasi yang dimaksud.

Contoh penggunaan operasi project :

Π KDMK,SKS(MKUL)

Perintah diatas berarti memilih nilai atribut KDMK dan SKS dari tabel MKUL. Hasil dari operasi diatas adalah :

KK021
2

KD132
3

KU122
2

-       Union

Operasi union berfungsi untuk mendapatkan gabungan nilai atribut dari sebuah tabel relasi dengan nilai atribut dari tabel relasi lainnya. Simbol “∪” digunakan untuk menunjukkan operasi union. Operasi union bernilai benar bila terpenuhi 2 kondisi, yaitu : Derajat dari 2 tabel relasi yang dioperasikan harus sama dan domain dari atribut yang dioperasikan juga harus sama.

Contoh penggunaan operasi union :

Misalkan terdapat 2 tabel relasi bernama ASLABSI dan ASLABTI seperti dibawah :

ASLABSI

NPM
Nama
Kelas

10107591
Eko Putra
3KA07

10107971
Keque Irfan
3KA07

18108012
Riza Rulham
3KA07

ASLABTI

NPM
Nama
Kelas

11107891
M. Ali Nurdin
3KA07

18108012
Riza Rulham
3KA07

11107611
Soli Kurniawan
3KA07

dan dari 2 tabel relasi diatas dilakukan operasi union sebagai berikut :

Π Nama(ASLABSI) ∪ Π Nama(ASLABTI)

Perintah diatas berarti menggabungkan hasil dari operasi project terhadap tabel ASLABSI dengan hasil dari operasi project terhadap tabel ASLABTI. Hasil dari operasi diatas adalah :

Eko Putra

Keque Irfan

M. Ali Nurdin

Riza Rulham

Soli Kurniawan

Perhatikan bahwa nama Riza Rulham hanya muncul sekali pada hasil operasi, ini karena relasi adalah set sehingga nilai duplikat dihilangkan.

-       Set Difference

Operasi set difference berfungsi untuk mendapatkan nilai yang ada dalam sebuah tabel relasi, tapi tidak ada dalam tabel relasi lainnya. Simbol “-“ digunakan untuk menunjukkan operasi set difference.

Contoh penggunaan operasi set difference :

Π Nama(ASLABSI) – Π Nama(ASLABTI)

Perintah diatas berarti mendapatkan nilai atribut Nama yang terdapat di tabel ASLABSI, tapi tidak terdapat di tabel ASLABTI. Hasil dari operasi diatas adalah :

Eko Putra

Keque Irfan

-       Cartesian Product

Operasi cartesian product berfungsi untuk mengkombinasikan informasi yang ada dalam 2 tabel relasi dan menghasilkan sebuah tabel relasi yang baru. Simbol “x“ digunakan untuk menunjukkan operasi set difference.

Contoh penggunaan operasi cartesian product :

ASLABTI x MKUL ⟹ tabel relasi baru

Perintah diatas berarti mengkombinasikan seluruh tupel yang ada pada tabel ASLABTI dengan tabel MKUL. Hasil dari operasi diatas adalah :

11107891
M. Ali Nurdin
3KA07
KK021
P. Basis Data
2

11107891
M. Ali Nurdin
3KA07
KD132
SIM
3

11107891
M. Ali Nurdin
3KA07
KU122
Pancasila
2

18108012
Riza Rulham
3KA07
KK021
P. Basis Data
2

18108012
Riza Rulham
3KA07
KD132
SIM
3

18108012
Riza Rulham
3KA07
KU122
Pancasila
2

11107611
Soli Kurniawan
3KA07
KK021
P. Basis Data
2

11107611
Soli Kurniawan
3KA07
KD132
SIM
3

11107611
Soli Kurniawan
3KA07
KU122
Pancasila
2

Operasi-operasi Tambahan

-       Set Intersection

Operasi set intersection berfungsi untuk mendapatkan nilai yang ada dalam sebuah tabel relasi dan juga ada dalam tabel relasi lainnya. Simbol “∩“ digunakan untuk menunjukkan operasi set intersection.

Contoh penggunaan operasi set intersection :

Π Nama(ASLABSI) ∩ Π Nama(ASLABTI)

Perintah diatas berarti mendapatkan nilai atribut Nama yang terdapat di tabel ASLABSI dan juga terdapat di tabel ASLABTI. Hasil dari operasi diatas adalah :

Riza Rulham

-       Natural Join

Operasi natural join memungkinkan kita untuk menggabungkan operasi select dan cartesian product menjadi hanya 1 operasi saja. Simbol “⋈“ digunakan untuk menunjukkan operasi natural join. Operasi natural join hanya menghasilkan tupel yang mempunyai nilai yang sama pada 2 atribut yang bernama sama pada 2 tabel relasi yang berbeda.

Contoh penggunaan operasi natural join :

Π NPM,KDMK,MID(MHS ⋈ NILAI)

Perintah diatas berarti mendapatkan nilai dari operasi project dengan predikat NPM, KDMK, dan MID dan argumen hasil dari operasi natural join antara tabel MHS dengan tabel NILAI. Hasil dari operasi diatas adalah :

10296832
KK021
60

10296832
KD132
40

10296126
KD132
70

31296500
KK021
55

41296525
KU122
90

50096487
KD132
80

21196353
KU122
75

-       Division

Operasi division berfungsi untuk query yang memasukkan frase “untuk semua/seluruh”. Simbol “÷“ digunakan untuk menunjukkan operasi division.

Contoh penggunaan operasi division :

Misalkan terdapat 3 tabel relasi bernama ACCOUNT, BRANCH, dan DEPOSITOR seperti dibawah :

acc

dan dari 3 tabel relasi diatas dilakukan operasi division sebagai berikut :

Π customer-name,branch-name(DEPOSITOR ⋈ ACCOUNT) ÷ Π branch-namebranch-city=”Brooklyn”(BRANCH))

Dengan asumsi operasi project awal adalah relasi r1 dan akhir adalah r2, perintah diatas berarti mendapatkan nama pelanggan yang muncul pada hasil relasi r2 untuk semua nama cabang hasil relasi r1. Hasil dari operasi diatas adalah :

Johnson

-       Theta Join

Operasi theta join berfungsi jika kita ingin mengkombinasikan tupel dari 2 tabel relasi dimana kondisi dari kombinasi tersebut tidak hanya kesamaan nilai dari 2 atribut bernama sama, tetapi kondisi yang diinginkan juga bisa menggunakan operator relasional (≤, <, =, >, ≥). Operasi theta join merupakan ekstensi dari natural join.

Referensi :

- Database System Concepts Silberschatz-Korth-Sudarshan, McGraw Hill, Fourth Edition, 2002

http://rizarulham.wordpress.com

Database Relasional Dalam Basis Data Terdistribusi

I. Pengertian Model Relasional, Contoh Tabel, dan Keterhubungannya.

Sebuah database relasional terdiri dari koleksi dari tabel-tabel, yang masing-masing diberikan nama yang unik. Sebuah baris dalam tabel merepresentasikan sebuah keterhubungan/relationship dari beberapa nilai yang ada.

Contoh tabel dan keterhubungannya :

Contoh tabel relasi

II. Kelebihan Model Relasional

Model Relasional merupakan model data yang paling banyak digunakan saat ini. Hal ini disebabkan oleh bentuknya yang sederhana dibandingkan dengan model jaringan/network atau model hirarki. Bentuk yang sederhana ini membuat pekerjaan seorang programmer menjadi lebih mudah, yaitu dalam melakukan berbagai operasi data (query, insert, update, delete, dan lainnya).

III. Istilah-Istilah dalam Model Relasional

  • Relasi

berdasarkan definisi matematika, adalah sebuah himpunan bagian dari perkalian kartesian dari sekumpulan domain. Dalam model relasional, relasi dapat direpresentasikan dengan tabel.

  • Atribut

adalah kepala/header dari setiap kolom yang ada dalam tabel relasi. Berdasarkan contoh tabel MHS sebelumnya, atribut yang ada adalah NPM, Nama, dan Alamat.

  • Tupel

adalah sebuah baris dalam tabel relasi. Berdasarkan contoh tabel MKUL sebelumnya, salah satu tupelnya adalah (KU122, Pancasila, 2).

  • Domain

adalah sekumpulan nilai yang valid untuk setiap atribut yang ada dalam tabel relasi. Berdasarkan contoh tabel NILAI sebelumnya, domain dari atribut FINAL adalah angka 0 sampai 100.

  • Derajat

adalah jumlah atribut yang ada dalam tabel relasi. Berdasarkan contoh tabel MHS sebelumnya, derajat dari relasinya adalah 3.

  • Kardinalitas

adalah jumlah tupel yang ada dalam tabel relasi. Berdasarkan contoh tabel MKUL sebelumnya, kardinalitas dari relasinya adalah 3.

IV. Relational Keys

  • Super Key

adalah sebuah atau sekumpulan atribut yang secara unik mengidentifikasi sebuah tupel dalam tabel relasi. Berdasarkan contoh tabel MHS sebelumnya, super key yang mungkin adalah (NPM), (NPM, Nama), (NPM, Alamat), (Nama, Alamat), dan (NPM, Nama, Alamat).

  • Candidate Key

adalah super key yang himpunan bagian yang sebenarnya tidak ada yang menjadi super key juga. Berdasarkan contoh super key sebelumnya, candidate key yang mungkin adalah (NPM) dan (Nama, Alamat). Atribut Nama dan Alamat dapat dijadikan candidate key jika kombinasi keduanya bisa menjadi pengidentifikasi yang unik untuk sebuah tabel relasi.  

  • Primary Key

adalah candidate key yang dipilih sebagai pengidentifikasi unik untuk sebuah tabel relasi. Berdasarkan contoh candidate key sebelumnya, primary key yang dipilih adalah (NPM), karena nilai NPM sangat unik dan tidak ada 2 mahasiswa yang memiliki NPM yang sama.

  • Alternate Key

adalah candidate key yang tidak dipilih sebagai primary key. Berdasarkan contoh candidate key sebelumnya, alternate key adalah (Nama, Alamat).

V. Relational Integrity Rules

  • NULL

adalah nilai sebuah atribut yang tidak diketahui atau tidak ada pada sebuah tupel dalam tabel relasi. Misalnya pada contoh tabel MHS sebelumnya, seorang mahasiswa tidak diketahui alamatnya sehingga pada tupel yang mengidentifikasi mahasiswa tersebut nilai dari atribut alamat diisi dengan NULL.

  • Entity Integrity

adalah sebuah peraturan integritas yang menyatakan bahwa setiap tabel relasi harus mempunyai sebuah primary key, dan atribut/sekumpulan atribut yang dipilih sebagai primary key harus mempunyai nilai dan nilai tersebut harus unik dan tidak NULL.

  • Referential Integrity

adalah sebuah peraturan integritas yang menyatakan bahwa setiap atribut sebuah tabel relasi yang menunjuk ke tabel relasi lainnya harus merupakan hubungan yang valid. Berdasarkan contoh tabel MKUL dan NILAI sebelumnya, nilai atribut KDMK pada tabel NILAI harus merupakan data yang ada dan valid pada tabel MKUL yang ditunjuknya.

 

Referensi :

- Database System Concepts Silberschatz-Korth-Sudarshan, McGraw Hill, Fourth Edition, 2002.

- http://rizarulham.wordpress.com

Wednesday, March 31, 2010

Mengetahui Nama Hari Pada Tanggal Tertentu dengan PHP

Pada artikel ini akan dibahas mengenai cara pembuatan script PHP untuk menampilkan nama hari pada tanggal tertentu. Dalam PHP belum ada suatu perintah langsung untuk mengetahui nama hari pada tanggal tertentu. Untuk itu kita harus membuat scriptnya sendiri.

Sebagai pendahuluan, terlebih dahulu saya kenalkan dengan suatu function dalam PHP untuk menampilkan nama hari pada current date (tanggal saat ini). Function ini adalah:

date("l");

dengan parameter l (L kecil) merupakan format specifier untuk menampilkan nama hari.  Sedangkan date() sendiri adalah function untuk memperoleh current date. Sehingga apabila diberikan script berikut ini

<?php
echo date("l");
?>

akan menghasilkan output Monday (dengan asumsi tanggal pada saat menjalankan script adalah tanggal 28 Juli 2008).

Lantas bagaimana jika ingin menampilkan hari pada tanggal tertentu?  Sabar… kita membuat cara lain untuk mengakalinya.

Dalam PHP, kita bisa menampilkan nama hari pada n hari ke depan atau ke belakang setelah hari ini (current date), yaitu dengan menggunakan function mktime(). Contoh:

<?php
// menampilkan nama hari pada 2 hari ke depan
$x  = mktime(0, 0, 0, date("m"), date("d")+1,  date("Y"));
echo date("l", $x);

// menampilkan nama hari pada 5 hari sebelumnya
$x  = mktime(0, 0, 0, date("m"), date("d")-5,  date("Y"));
echo date("l", $x);

?>

Sehingga dari keterangan di atas, dapat disimpulkan bahwa untuk mendapatkan nama hari pada tanggal tertentu dengan menggunakan mktime() kita harus tahu terlebih dahulu selisih hari antara tanggal tertentu tersebut dengan tanggal pada hari ini (current date). Dengan demikian rumus umum mktime() nya adalah

mktime(0, 0, 0, date("m"), date("d")+n,  date("Y"));

Yang menjadi pertanyaan sekarang adalah, bagaimana cara menentukan selisih hari antara current date dengan tanggal tertentu, jika tanggal tersebut sudah diketahui? Nah… kita manfaatkan saja query SQL sebagai mana yang telah dibahas pada artikel PHP tentang Pencarian Selisih Waktu.

Berdasarkan logika di atas, sudah dapat kita buat script untuk menampilkan nama hari pada tanggal tertentu.

<?php
mysql_connect("namahost","dbuser","dbpass");
mysql_select_db("dbname");

$tanggal = "2001-09-11"; // tgl yang akan dicari nama harinya

$query = "SELECT datediff('$tanggal', CURDATE()) as selisih";
$hasil = mysql_query($query);
$data  = mysql_fetch_array($hasil);

$selisih = $data['selisih'];

$x  = mktime(0, 0, 0, date("m"), date("d")+$selisih, date("Y"));
echo date("l", $x);
?>

dengan CURDATE() adalah function dalam SQL untuk mendapatkan current date.

Setelah script di atas dijalankan, akan diperoleh nama hari pada tanggal 11 september 2001 adalah hari Tuesday (dalam bhs Inggris). Sekarang bagaimana jika menginginkan output nama harinya dalam bahasa Indonesia? Ya… tinggal gunakan IF saja

<?php
mysql_connect("namahost","dbuser","dbpass");
mysql_select_db("dbname");

$tanggal = "2001-09-11"; // tgl yang akan dicari nama harinya

$query = "SELECT datediff('$tanggal', CURDATE()) as selisih";
$hasil = mysql_query($query);
$data  = mysql_fetch_array($hasil);

$selisih = $data['selisih'];

$x  = mktime(0, 0, 0, date("m"), date("d")+$selisih, date("Y"));
$namahari = date("l", $x);

if ($namahari == "Sunday") $namahari = "Minggu";
else if ($namahari == "Monday") $namahari = "Senin";
else if ($namahari == "Tuesday") $namahari = "Selasa";
else if ($namahari == "Wednesday") $namahari = "Rabu";
else if ($namahari == "Thursday") $namahari = "Kamis";
else if ($namahari == "Friday") $namahari = "Jumat";
else if ($namahari == "Saturday") $namahari = "Sabtu";

echo $namahari;

?>

Mudah bukan membuatnya?

 

Source: http://blog.rosihanari.net/mengetahui-nama-hari-pada-tanggal-tertentu-dengan-php

Script PHP untuk Menghitung Selisih Waktu dan Tanggal

Pada artikel ini akan dibahas bagaimana cara membuat script PHP untuk mencari selisih waktu dan tanggal. Proses pencarian selisih ini menggunakan perintah SQL.

Simak artikel ini dengan cermat…

Sebagai contoh, akan dibuat script untuk mencari selisih hari dari tanggal 20/10/2008 sampai dengan 23/10/2008.

<?php
$tglAwal = "2008-10-20";
$tglAkhir = "2008-10-23";

mysql_connect("namahost","namauser","pass");
mysql_select_db("namadb");

$query = "SELECT datediff('$tglAkhir', '$tglAwal') as selisih";
$hasil = mysql_query($query);
$data = mysql_fetch_array($hasil);

echo "Selisih hari antara tanggal ".$tglAwal.
       " sampai tanggal ".$tglAkhir." adalah ".$data['selisih'].
       " hari";

?>

Bagaimana script untuk mencari selisih waktu? pada prinsipnya hampir sama dengan script di atas, bedanya hanya pada statement SQL nya saja, yaitu menggunakan timediff().

 

Source: http://blog.rosihanari.net/script-php-untuk-mencari-selisih-waktu-dan-tanggal

Membuat Konversi Bilangan Desimal ke Biner

Bingung membuat program konversi bilangan desimal ke bilangan biner? Hmm… simak artikel ini selanjutnya, karena pada artikel ini akan dijelaskan konsep perhitungan sampai dengan implementasi pembuatan programnya dengan Pascal.

Pada bagian awal ini akan dijelaskan dahulu konsep perhitungan konversi dari desimal ke biner. Misalkan diberikan bilangan desimal 17. Untuk langkah konversinya adalah sbb:

Step 1. 17 dibagi 2 mendapatkan 8 sisa 1
Step 2. 8 dibagi 2 mendapatkan 4 sisa 0
Step 3. 4 dibagi 2 mendapatkan 2 sisa 0
Step 4. 2 dibagi 2 mendapatkan 1 sisa 0

Karena pada step terakhir hasil pembagiannya sudah sama dengan 1 (atau dengan kata lain perulangan masih terus dilakukan selama hasil baginya >= 1). Sekarang perhatikan sisa-sisa pembagian pada setiap step. Langkah selanjutnya, susun sisa-sisa bilangan itu mulai dari step terakhir sampai dengan step pertama dan diperoleh  0001. Langkah terakhir adalah menambahkan digit 1 di depan 0001 menjadi 10001. Nah diperoleh bilangan biner dari 17 adalah 10001.

Sekarang konsep di atas akan diimplementasikan ke dalam program Pascal. Yang menjadi pertanyaan adalah bagaimana cara membagi bilangan dengan 2 supaya diperoleh hasil bulat (seperti pada perhitungan 17 dibagi 2 mendapatkan 8). Jangan khawatir… dalam Pascal tersedia operator div. Operator ini digunakan untuk membagi dua bilangan bertipe bulat dan menghasilkan hasil pembagian berupa bilangan bulat pula.

Selanjutnya, karena proses perhitungan di atas dilakukan berulang-ulang maka nantinya akan digunakan perulangan/looping dalam program. Lantas, statement loopingnya menggunakan apa? FOR, WHILE atau REPEAT? Jenis perulangan yang digunakan sebaiknya jangan menggunakan FOR karena jumlah perulangannya tidak jelas. Sehingga nantinya akan kesulitan dalam menentukan syarat berhentinya perulangan.

Berikut ini adalah program Pascal untuk mengkonversi bilangan desimal ke biner:

program konversiDecToBin;
var bilangan : integer;
function decToBin(desimal : integer) : string;
var hasilBagi, sisa : integer;
     bin : char;
     bilBiner : string;
begin
     hasilBagi := desimal div 2;
     bilBiner := '';
     { syarat perulangan : selama hasil bagi lebih besar sama dengan 1 }
     while (hasilBagi >= 1) do
     begin
          sisa := desimal mod 2;
          if (sisa = 0) then bin := '0'
               else if (sisa = 1) then bin := '1';
          { menggabung sisa pada setiap perulangan untuk membentuk digit biner}
          bilBiner := bin + bilBiner;
          desimal := hasilBagi;
          hasilBagi := desimal div 2;
     end;
     decToBin := '1' + bilBiner;
end;
begin
     bilangan := 200;
     write('Bilangan binernya : ', decToBin(bilangan));
     readln;
end.

Source: http://blog.rosihanari.net/membuat-program-konversi-bilangan-desimal-ke-biner-dengan-pascal

algoritma membalik string (string reverse)

Pada artikel ini kita akan membahas mengenai algoritma “string reverse”. Misalkan diberikan suatu string ‘KOMPUTER’, dan kita ingin membalik string tersebut sehingga menjadi ‘RETUPMOK’, bagaimana algoritmanya?

Ya… secara logika untuk membalik suatu string dengan panjang karakter sejumlah n, cukup menukar posisi karakter ke – 1 dengan karakter ke-n, dan karakter ke-2 ditukar posisi dengan karakter ke n-1, dst. Sekarang yang menjadi masalah adalah… sampai berapa kali proses penukaran ini dilakukan, apakah n kali? Coba kita cek proses ini bila diterapkan pada string ‘KOMPUTER’ tsb, dalam hal ini n = 8 (panjang string 8 karakter).

Penukaran ke-1, tukar posisi karakter ke-1 dg ke-8, hasilnya ‘ROMPUTEK‘
Penukaran ke-2, tukar posisi karakter ke-2 dg ke-7, hasilnya ‘REMPUTOK’
Penukaran ke-3, tukar posisi karakter ke-3 dg ke-6, hasilnya ‘RETPUMOK’
Penukaran ke-4, tukar posisi karakter ke-4 dg ke-5, hasilnya ‘RETUPMOK’
Penukaran ke-5, tukar posisi karakter ke-5 dg ke-4, hasilnya ‘RETPUMOK’
Penukaran ke-6, tukar posisi karakter ke-6 dg ke-3, hasilnya ‘REMPUTOK’
Penukaran ke-7, tukar posisi karakter ke-7 dg ke-2, hasilnya ‘ROMPUTEK’
Penukaran ke-8, tukar posisi karakter ke-8 dg ke-1, hasilnya ‘KOMPUTER‘

Bila proses penukaran dilakukan n kali, ternyata hasil akhir string tetap kembali ke string semula. So… salah donk. Dengan demikian, kita tidak bisa menulis algoritmanya sbb:

{ x adalah string yang akan ditukar }
n := length(x); { n = panjang string }
for i = 1 to n do
begin
    //
tukar antara karakter ke-i dengan karakter ke- (n+1-i)
    temp := x[i];
    x[i] := x[n+1-i];
    x[n+1-1] := x[i];
end;

Jadi… sampai berapa kali proses penukarannya? Anda perhatikan pada proses penukaran tahap demi tahap di atas. Pada langkah berapakah stringnya menjadi ‘RETUPMOK’? Ya tepat sekali, yaitu pada langkah ke-4.

OK… dari contoh ini bisa kita catat, bahwa untuk n = 8, kita butuh 4 kali langkah penukaran. Sekarang bagaimana bila n = 10? Coba selidiki… dan ternyata butuh 5 kali penukaran. Nah… dari sini bisa kita simpulkan bahwa untuk n genap, proses penukaran yang dibutuhkan ada n/2 kali.

Sekarang bagaimana dengan n ganjil? Kita ambil contoh misal n = 7. Berapakah jumlah proses penukarannya? Coba selidiki… dan ternyata butuh 3 kali. Lho apa tidak 4 kali? Mmmm… untuk yang ke-4 boleh kita tidak lakukan karena karakter ke-4 adalah karakter yang berada di tengah string, so… gak perlu ditukar. Untuk n = 9, akan butuh 4 kali penukaran. dan seterusnya… Dengan demikian untuk n ganjil, proses penukaran yang dilakukan juga sejumlah n/2 kali, tapi n/2 di sini dibulatkan ke bawah.

Untuk n genap pun, jumlah proses penukaran karakter juga dapat diterapkan pembulatan ke bawah dari n/2, karena misal n= 8, dan hasil n/2 kalau dibulatkan ke bawah juga menghasilkan 4.

So… algoritma yang benar untuk membalik string adalah:

{ x adalah string yang akan ditukar }
n := length(x); { n = panjang string }
for i = 1 to floor(n/2) do {maksud floor adalah pembulatan ke bawah}
begin
// tukar antara karakter ke-i dengan karakter ke- (n+1-i)
temp := x[i];
x[i] := x[n+1-i];
x[n+1-1] := x[i];
end;


Nah… sekarang kita implementasikan algoritma di atas ke PHP. Bagaimana bentuk script untuk membalik string? O… iya… ingat bahwa dalam PHP, karakter pertama dari suatu string itu dimulai dari nomor indeks ke-0, sehingga harap hati-hati. Ini dia scriptnya:



<?php
$x = 'KOMPUTER';
$n = strlen($x);
for ($i = 0; $i<=floor(($n-1)/2); $i++)
{
$temp = $x[$i];
$x[$i] = $x[$n-1-$i];
$x[$n-1-$i] = $temp;
}
echo $x;
?>


dan ini dia implementasi ke dalam program Pascal:



program balikstring;

var x : string; i, n : integer; temp : char;

begin


    x := 'KOMPUTER';


    n := length(x);


    for i:=1 to trunc(n/2) do


    begin


        temp := x[i];


        x[i] := x[n+1-i];


        x[n+1-1] := x[i];


    end;


    write(x);


end.



Mmmm…. secara sekilas sih ‘kayaknya’ bisa. Tapi kalau Anda yakin jawabannya ‘bisa’, silakan buat ke dalam program algoritma tersebut dan lihatlah hasilnya. Tentu hasilnya di luar dugaan dan Anda akan dibuat tercengang dibuatnya. Kok bisa ya? :-)



Oya, satu lagi, khusus di PHP, Anda tidak perlu repot-repot membuat script untuk membalik string karena telah disediakan function khusus untuk melakukan hal itu. Function yang dimaksud adalah strrev(). Berikut ini contoh penggunaannya:



<?php
echo strrev("Hello world!"); // outputnya "!dlrow olleH"
?>


OK, met membolak balik string yaa….



Source: http://blog.rosihanari.net/algoritma-membalik-string-string-reverse

Wednesday, March 17, 2010

Tutorial PHP (1)

Pada artikel kali ini, kita akan membahas studi kasus mengenai program  sederhana  untuk  men-generate sel  tabel  secara  fleksibel.
Tekniknya: buat sebuah fungsi yang menerima argumen berupa jumlah sel dan jumlah kolom. Jadi, pembentukan sel tabel didasarkan pada nilai jumlah sel dan jumlah kolom yang diberikan. Sebagai contoh, hasil program dengan argumen 12 (sel) dan 3 (kolom) diperlihatkan seperti Gambar 1.

1

Gambar 1. Pembuatan sel dengan argumen 12 dan 3

Untuk contoh argumen 10 dan 4 diperlihatkan pada Gambar 2.

2 Gambar 2. Pembuatan sel dengan argumen 10 dan 4

 

Berikut adalah pembahasannya:

1. Buat sebuah file php dan simpan dengan code.php. Berikut source code-nya:

2. Buat sebuah file HTML yang didalamnya terintegrasi dengan java script. Berikut Source Code-nya:

3. Simpan file PHP dan HTML dalam satu folder, sehingga jika dijalankan akan seperti gambar berikut:

a. Tampilan awal untuk menentukan jumlah baris, kolom dan banyaknya sel yang akan ditampilkan

3

b.  Jika dimasukkan nilai row dan columns maka dalam sel Max Cells akan muncul nilai maksimal yang dapat ditampilkan

image

c. Jika kita masukkan nilai yang < nilai max cells dan kemudian di klik generate, maka akan muncul halaman ke dua seperti berikut:

 imageDimana pada tampilan ini, muncul  beberapa informasi mengenai jumlah baris, jumlah kolom dan juga jumlah sel yang ditampilkan.

d. Namun jika nilai cell Total yang kita inputkan > nilai max cells maka akan muncul peringatan seperti berikut:

6Muncul message box yang memberitahukan bahwa jumlah sel yang dimasukkan terlalu besar

Selamat belajar….

Passing by value and by Reference (PHP 1)

Pada tutorial kali ini kita akan mebahas mengenai perbedaan passing by value and by reference. Disini akan saya kaji secara umum agar lebih mudah untuk dipahami.

 

----start begin----

 

passing by  value,

secara  default, semua nilai yang di-pass masuk atau keluar dari fungsi  adalah passing by value, bukan by reference. ini berarti PHP membuat  kopian dari nilai original dan nilai kopian itulah yang kita akses  dan kita manipulasi, bukan nilai originalnya.

dengan  begitu bagaimanapun kita ubah nilai itu, tidak akan mengubah nilai  originalnya…

contoh:

<?php

function jumlah($nilai) {

$nilai++;

}

$input=5;

jumlah($input);

echo $input;

?>

Penjelasan:

Pada  saat fungsi jumlah dipanggil,

jumlah($input);

fungsi  tersebut akan memasukkan nilai dari variabel $input kedalam  argumennya, jadi disini argumen fungsi jumlah adalah 5 (ini adalah  nilai aslinya). selanjutnya PHP meng-copy nilai asli tersebut,  kemudian hasil copy-nya digunakan untuk proses manipulasi fungsi,  sedangkan nilai yang asli dibiarkan tidak berubah. Proses  manipulasinya sbb:

$nilai++;

$nilai = $nilai + 1

$nilai = 5  + 1

$nilai = 6

Untuk  output,

echo $input;

nilai  variabel $input yang diambil disini adalah nilai variabel aslinya,  sehingga hasil manipulasi fungsi tadi tidak dipakai, karena bukan  nilai asli. Jadi outputnya adalah 5

Tampilan output:

5

tetapi  apabila menggunakan passing by reference akan bernilai 6.

bagaimana  outputnya akan bernilai 6? akan saya jelaskan lebih dahulu tentang  passing by reference.

 

passing by  reference,

berbeda  dengan passing by value yang bersifat mengkopi, passing by reference  memberikan nilai aslinya untuk diakses dan dimanipulasi, dengan  contoh yang sama seperti diatas, kita akan modifikasi menjadi  mekanisme passing by reference.

Untuk  mengubah jadi passing by reference, kita hanya cukup menambahkan  operator & pada argumennya.

<?php

function jumlah(&$nilai)  {

$nilai++;

}

$input=5;

jumlah($input);

echo $input;

?>

Penjelasan:

Sesuai  dengan penjelasan passing by reference diatas, nilai yang diakses &  dimanipulasi adalah nilai aslinya, dengan begitu hasil manipulasi  fungsilah yang gunakan sebagai outputnya, yaitu 6.

Tampilan  Outputnya:

6

 

Source: http://www.ilmuwebsite.com/belajar-php/passing-by-value-vs-passing-by-reference

Monday, February 2, 2009

LINIER LIST USING POINTER FOR EXAMPLE USED FOR LIBRARY PROGRAM

Latar Belakang

Istilah teknologi informasi (selanjutnya disingkat TI), sering dijumpai, baik dalam media grafik, seperti surat kabar dan majalah, maupun media elektronik, seperti radio dan televisi. Istilah tersebut merupakan gabungan dua istilah dasar yaitu teknologi dan informasi. Teknologi dapat diartikan sebagai pelaksanaan ilmu, sinonim dengan ilmu terapan. Sedangkan pengertian informasi menurut Oxfoord English Dictionary, adalah "that of which one is apprised or told; intelligence, news". Kamus lain menyatakan bahwa, informasi adalah sesuatu yang dapat diketahui. Namun, ada pula yang menekankan informasi sebagai transfer pengetahuan. Adanya perbedaan definisi informasi dikarenakan, pada hakekatnya, informasi tidak dapat diuraikan (intangible), sedangkan informasi itu dijumpai dalam kegiatan sehari-hari, yang diperoleh dari data dan dari observasi terhadap dunia sekitar kita serta diteruskan melalui komunikasi. Secara simpel, definisi TI dapat diartikan sebagai teknologi yang digunakan untuk menyimpan, menghasilkan, mengolah, serta menyebarkan informasi. Definisi tersebut menganggap bahwa TI tergantung pada kombinasi komputasi dan teknologi telekomunikasi berbasis mikroelektronik.

Pengembangan TI dapat dilakukan untuk memenuhi berbagai macam kebutuhan manusia secara cepat dan praktis. Hal ini dapat juga diimplementasikan dalam hal pendidikan. Salah satunya adalah pembuatan program aplikasi perpustakaan yang dimana fungsinya adalah untuk menghidupkan kembali gairah masyarakat untuk memanfaatkan perpustakaan sebagai salah satu sumber pengetahuan. Berpijak pada istilah 'tak kenal maka tak sayang' demikian juga dengan keberadaan perpustakaan di masyarakat. Ini berarti pengenalan perpustakaan seharusnya lebih menyentuh. Sebab dari banyak kasus terbukti gagalnya mahasiswa tingkat akhir sebagian besar lantaran tidak akrabnya mereka dengan perpustakaan, sehingga mereka kesulitan dalam penyusunan skripsi, tesis dan karya tulis, karena frustasi pada penelusuran literatur di maksud.

Oleh karena itu, untuk menjembatani dan mempermudah seseorang untuk memanfaatkan perpustakaan, penulis mempunyai inisiatif untuk membuat program book’s list(user) tidak kesulitan lagi untuk mencari buku yang dicarinya ada apa tidak dan stoknya masih berapa. Dari sini, penulis membuat sebuah program perpustakaan dengan judul “Linier List Using Pointer For Example Used For Library Program”. yang dimana nantinya diharapkan seseorang

Rumusan Masalah

Perumusan masalah mengenai pemanfaatan pointer dalam linier list sebagai dasar pembuatan program aplikasi perpustakaan, antara lain:

1. Apa saja menu yang ditampilkan dalam program aplikasi perpustakaan berbasis linier link dengan menggunakan pointer?2. Bagaimana metode penambahan (insert) data dalam program aplikasi perpustakaan berbasis linier link dengan menggunakan pointer?

3. Bagaimanakah simulasi metode penghapusan (delete) data dalam program aplikasi perpustakaan berbasis linier link dengan menggunakan pointer?

4. Bagaimana tampilan program aplikasi perpustakaan berbasis linier link dengan menggunakan pointer?

Tujuan Penulisan

Tujuan yang hendak dicapai dalam pembuatan makalah ini, adalah sebagai berikut:

1. Mengetahui menu-menu yang terdapat dalam program aplikasi perpustakaan berbasis linier link dengan menggunakan pointer.

2. Mengetahui metode penambahan (insert) data dalam program aplikasi perpustakaan berbasis linier link dengan menggunakan pointer.

3. Mengetahui metode penghapusan (delete) data dalam program aplikasi perpustakaan berbasis linier link dengan menggunakan pointer.

4. Mengetahui tampilan program aplikasi perpustakaan berbasis linier link dengan menggunakan pointer.



Gambar 3.1 Tampilan awal program

Download program: Lybrary Program