Selasa, 11 Juni 2013

Latihan Query Database dengan SQL Server 2005

Assalamu'alaikum kawan, Postingan kali ini saya buat untuk tugas mata kuliah Basis Data 2,sesuai judul diatas, software yang saya pakai adalah SQL SERVER 2005. Jika anda belum punya, silahkan download dan install dulu softwarenya.

Nah, langsung saja,,,ini dia contoh soalnya.......

Diketahui sebuah database dengan nama StudiKasus, dengan 4 buah tabelnya seperti diagram di bawah ini


Selesaikanlah studi kasus ini dengan menjawab pertanyaan di bawah ini dengan menggunakan perintah bahasa query :

1. Buat table karyawan, tentukan dan bentuk primary key dengan fungsi alter
2. Buat table divisi, tentukan dan bentuk primary key dengan nama constraint PK_Divisi
3. Buat table gaji, tentukan dan bentuk primary key pada saat create table
4. Buat relasi tabel karyawan dengan divisi , beri nama constraint Fk_Karyawan_Divisi
5. Buat relasi tabel karyawan dengan gaji, beri nama constraint Fk_Karyawan_Gaji
6. Buat relasi tabel karyawan dengan status, beri nama constraint Fk_Karyawan_Status
7. Buat diagram diagram database dengan nama DiagramKaryawan.
8. Pada table gaji gunakan perintah Insert untuk memasukkan data sebagai berikut 

 
 














9. Pada table divisi gunakan perintah insert untuk memasukkan data sebagai berikut

















10. Pada table status gunakan perintah insert untuk memasukkan data sebagai berikut













11. Pada table karyawan gunakan perintah insert untuk memasukkan data sebagai berikut



12. Tampilkan total jumlah anak pada seluruh karyawan, seperti di bawah ini










13. Hitung dan tampilkan jumlah karyawan berstatus kawin seperti di bawah ini







14. Tampilkan data karyawan (NIP, Nama Karyawan, Status)dari tabel karyawan dan tabel status , dimana status=2 (kawin), seperti di bawah ini









15. Tampilkan data karyawan dengan mengurutkan data berdasarkan nama karyawan secara descending



16. Tampilkan data karyawan (NIP, Nama Karyawan, Jenis Kelamin, KodeStatus, KodeDivisi, Gol, Jumlah anak) dari tabel karyawan dan hitung jumlah anak dan karyawan pada akhir baris seperti di bawah ini












17. Tampilkan data karyawan (NIP, Nama , Tempat Lahir,  Jenis Kelamin, Alamat , Kota, Jumlah anak) secara berurutan dan hitung jumlah karyawan dan jumlah anak seperti di bawah ini

















18. Tampilkan Jumlah karyawan yang kawin (kode status=2) berdasarkan golongan dari kota jakarta atau sukabumi, seperti di bawah ini








19. Tampilkan Jumlah anak berdasarkan kota dari karyawan dengan divisi=B seperti di bawah ini







20. Selesai

JAWABAN :


create database StudiKasus

use StudiKasus


create table TblKaryawan
(
    NIP char(10) not null,
    NamaKar char(25) not null,
    TmptLahir char (15) not null,
    TglLahir datetime not null,
    JK char (1) not null,
    KodeStatus char (2) not null,
    Alamat char(50) not null,
    Kota char(15) not null,
    NoTelp char(15) not null,
    KodeDivisi char(2) not null,
    Gol char(2) not null,
    JmlAnak int default null,
)


alter table TblKaryawan add constraint pk_karyawan primary key(NIP)



create table TblDivisi
(
    KodeDivisi char(2) not null,
    NamaDivisi char(15) not null,
)
alter table TblDivisi add constraint pk_divisi primary key(KodeDivisi)


create table TblGaji
(
    Gol char(2) not null,
    GajiPokok int not null,
    constraint pk_gaji primary key(Gol)
)


create table TblStatus
(
    KodeStatus char(2) not null,
    NamaStatus char(15) not null,
    constraint pk_status primary key(KodeStatus)
)


alter table TblKaryawan add constraint fk_karyawan_divisi foreign key (KodeDivisi) references TblDivisi (KodeDivisi)

alter table TblKaryawan add constraint fk_karyawan_gaji foreign key (Gol) references TblGaji (Gol)


alter table TblKaryawan add constraint fk_karyawan_status foreign key (KodeStatus) references TblStatus (KodeStatus)



insert into TblGaji values('A','750000')
insert into TblGaji values('B','1000000')
insert into TblGaji values('C','1250000')
insert into TblGaji values('D','1500000')
insert into TblGaji values('E','1750000')
insert into TblGaji values('F','2000000')
insert into TblGaji values('G','2250000')
insert into TblGaji values('H','2500000')
insert into TblGaji values('I','2750000')
insert into TblGaji values('J','3000000')



insert into TblDivisi values('A','Direktur')
insert into TblDivisi values('B','Manajer')
insert into TblDivisi values('C','Personalia')
insert into TblDivisi values('D','Marketing')
insert into TblDivisi values('E','Produksi')
insert into TblDivisi values('F','Warehouse')
insert into TblDivisi values('G','Finance')
insert into TblDivisi values('H','Accounting')
insert into TblDivisi values('I','Umum')
insert into TblDivisi values('J','Sales')


insert into TblStatus values('1','Tidak')
insert into TblStatus values('2','Kawin')
insert into TblStatus values('3','Duda')
insert into TblStatus values('4','Janda')


insert into TblKaryawan values('0101001','DEWI','JAKARTA','1977-05-23','P','2','JL. RAYA BOGOR 21 RT 5 / RW 3','BOGOR','025112358796','H','C','2')

insert into TblKaryawan values('0101002','ASTRI','TANGERANG','1980-02-12','P','1','JL. SUKA SENANG 22 RT 2 / RW 7','TANGERANG','02197356894','E','B',NULL)


insert into TblKaryawan values('0102001','ACHMAD','BANDUNG','1988-12-12','L','2','JL. BUKIT DAGO RT 7 / RW 9','JAKARTA','0217563756','B','I','1')


insert into TblKaryawan values('0201003','UDIN','BOGOR','1985-10-09','L','1','JL. PAMULANG 2 RT 4 / RW 4','TANGERANG','02178965432','G','E',NULL)


insert into TblKaryawan values('0311021','FITRI','SUKABUMI','1979-10-15','P','2','JL. RAYA SUKABUMI RT 6 / RW 1','SUKABUMI','0252232324','J','D','1')


select sum(jmlAnak) 'Total Jml Anak' from TblKaryawan

select count(NamaKar) 'Jumlah Status Kawin' from TblKaryawan where KodeStatus=2

select NIP, NamaKar 'Nama Karyawan',NamaStatus 'Status' from TblKaryawan inner join TblStatus on TblKaryawan.KodeStatus=TblStatus.KodeStatus where TblKaryawan.KodeStatus=2


select * from TblKaryawan Order by NamaKar desc


select NIP,NamaKar 'Nama',Jk,KodeStatus,KodeDivisi,Gol,JmlAnak from TblKaryawan compute sum(JmlAnak), Count(NamaKar)


select NIP,NamaKar 'Nama',Jk,KodeStatus,KodeDivisi,Gol,Kota,JmlAnak from TblKaryawan order by Kota compute Count(NamaKar), Sum(JmlAnak) by Kota


select Gol,Count(NamaKar) 'Jumlah Karyawan' from TblKaryawan where kota ='Jakarta' or kota='Sukabumi' group by Gol


select Kota, sum(JmlAnak) 'Jml Anak' from TblKaryawan Where KodeDivisi='B' group by Kota








Sekian, Semoga bermanfaat ^_^


Sumber soal :

Buku Modul BASIS DATA 2 by Bapak Achmad Bisri /  achmadbizri@gmail.com


Jumat, 31 Mei 2013

ALGORITMA LUHN


Oke kawan-kawan, kali ini saya akan berbagi info tentang salah satu materi yang saya dapat pada mata kuliah Otomata di  ukampus. Algoritma Luhn, itulah namanya. Dosen saya memberikan suatu algoritma yang biasa di pakai di dunia perbankan itu, dan meminta mahasiswanya untuk membuat coding programnya.

Langsung saja, sebenarnya apa sih Algoritma Luhn itu? Mari kita bahas..

Algoritma Luhn adalah sebuah program algoritma yang dikembangkan oleh seorang ilmuan bernama Hans Peter Luhn. Algoritma ini menggunakan salah satu fungsi matematis komputasi yang bisa dipergunakan untuk memverifikasi keabsahan sebuah nomor kartu kredit. Algoritma Luhn ini mempunyai 3 langkah utama yang sederhana tetapi sangat luar biasa untuk membuktikan apakah sebuah nomor kartu kredit adalah palsu atau benar. Langkah-langkah tersebut adalah sebagai berikut:

  1. Pada 16 digit angka kartu kredit, setiap angka dari kiri ke kanan pada posisi ganjil dikalikan dengan dua, jika hasil perkalian lebih besar dari pada 9, maka hasil  tsb dikurangi dengan 9. Lalu jumlahkan semua hasilnya
  2. Setiap angka dari kiri ke kanan pada posisi genap dibiarkan tetap, lalu jumlahkan semuanya.
  3. Setelah itu, hasil perhitungan point pertama dijumlahkan dengan hasil perhitungan point ke 2, lalu bagi dengan 10. Jika hasilnya habis dibagi 10, maka nomor kartu tersebut dinyatakan sah, jika tidak maka dinyatakan tidak sah .
Nah, sekarang kita gunakan teori dari mas Luhn ini pada prakteknya..







Misalkan, saya mempunyai sebuah kartu kredit seperti gambar di atas ini, bisakah kita mengetahui apakah kartu ini adalah asli, yang tentunya sudah memiliki keabsahan dari pihak bank?

Dari data-data di atas, mari sekarang kita lakukan cek validitas nomornya menggunakan algoritma Luhn. Kita mendapatkan 16 nomor yakni: 5588 - 3201 - 2345 - 6789.

 Langkah pertama:

Kalikan 2 untuk setiap nilai posisi ganjil.
N = (5 X 2) + (8 X 2) + (3 X 2) + (0 X 2) + (2 X 2) + (4 X 2) + (6 X 2) + (8 X 2)
N = (10 - 9) + (16 - 9) + (6) + (0) + (4) + (8) + (12 - 9) + (16 - 9)
N = 1 + 7 + 6 + 0 + 4 + 8 + 3 + 7
N = 36 
Langkah kedua:
Jumlahkan semua nilai untuk posisi genap.
N = 5 + 8 + 2 + 1 + 3 + 5 + 7 +9
N = 40
Langkah ketiga:
Jumlahkan hasil langkah pertama dan kedua lalu dibagi dengan 10.
N = (36 + 40) : 10
N = 76 : 10
N = 7,6
Karena hasil perhitungannya adalah tidak habis dibagi 10 , artinya secara otomatis kita sudah menghitung untuk mengetahui bahwa kartu kredit yang saya miliki itu adalah palsu, dan tentunya tidak memiliki keabsahan untuk digunakan.


 Apakah sudah selesai pembahasan kita? Tentu saja belum, cara di atas adalah langkah manual yang dapat kita hitung dengan mudah jika sudah mengetahui rumusnya, saya rasa anak SD atau SMP juga bisa mengerjakan itu, tetapi tantangan kita kali ini adalah membuat program kalkulasi dalam komputer dari teknik di atas. Kali ini saya memilih mencoba menggunakan pemrograman C++ untuk  membuat coding programnya, kita lihat..


#include <iostream>
using namespace std;

int toInt(const char c)
{
    return c-'0';
}

int confirm( const char *id)
{
    bool is_odd_dgt = true;
    int s = 0;
    const char *cp;

    for(cp=id; *cp; cp++);
    while(cp > id) {
        --cp;
        int k = toInt(*cp);
        if (is_odd_dgt) {
            s += k;
        }
        else {
            s += (k!=9)? (2*k)%9 : 9;
        }
    is_odd_dgt = !is_odd_dgt;
    }
    return 0 == s%10;
}

int main( )
{
    const char * t_cases[] = {
        " 5588320123456789",
        "1234567812345670",
        NULL,
    };
    for ( const char **cp = t_cases; *cp; cp++) {
        cout << *cp << ": " << confirm(*cp) << endl;
    }
    return 0;
}



Pada coding di atas saya membandingkan 2 buah nomer kartu kredit, yakni 5588320123456789 dan 1234567812345670, yang nantinya akan dilakukan pengecekan dengan metode Luhn dan akan mengeluarkan nilai biner 0 dan 1 untuk outputnya, dimana jika yang keluar adalah angka 1, maka kartu kredit tersebut adalah sah, dan  jika keluar angka nol maka artinya kartunya tidak sah

Hasil Program :




Akhirnya, selesai sudah pembahasan kita kali ini, semoga informasi yang saya bagikan bisa bermanfaat. Terima kasih




Kamis, 16 Mei 2013

Teori Bahasa Dan Otomata



Teori Bahasa dan Otomata
Teori bahasa dan otomata merupakan bagian dari teori komputasi pada ilmu komputer. Beberapa teori komputasi datang dari bahasa dan rekayasa sistem, terutama yang berbasiskan matematika. Dalam hal ini penekanannya adalah pada pemecahan masalah. Melalui contoh-contoh ilustrasi-masalah dapat dikenali latar belakang dari suatu konsep dan hubungannya dengan definis dan teorema yang ada. Secara teoritis ilmu komputer diawali dari sejumlah berbeda disiplin ilmu; ahli biologi mempelajari neural network, insinyur elektro mengembangkan switching sebagai tools untuk mendesain perangkat keras, matematikawan bekerja berdasarkan logika, dan ahli bahasa menyelidiki tata bahasa untuk bahasa alami (natural language) Finite state automata dan ekspresi reguler awal dikembangkan berdasarkan pemikiran neural network dan switching circuit. Finite state automata merupakan tools yang sangat berguna dalam perancangan suatu penganalisa leksikal (lexical analyzer) yang berguna dalam mengelompokkan karakter-karakter kedalam token-token sebagai unit terkecil dalam mengenali pola. Jadi apa sesungguhnya teori bahasa tersebut ? Teori bahasa merupakan suatu gagasan mendasar dalam komputasi yang menjadi tools untuk mengenali persoalan. Gagasan dasar tersebut dimodel dengan suatu simbol-simbol yang merepresentasikan juga suatu fungsi dari komputer digital. Teori bahasa pada awalnya lebih diarahkan untuk mengenali suatu tata bahasa dan dapat mendefinisikan spesifikasi formal dari tata bahasa tersebut. Sehingga pada akhirnya dapat didefinisikan langkah-langkah algoritmik dalam pemrosesan tata bahasa.

Teori bahasa dan otomata dalam ilmu komputer
Suatu teori hanya menarik jika dapat membantu dalam mencari solusi terbaik. Tanpa penerapan timbul pertanyaan, mengapa mempelajari teori? Teori memberikan konsep dan prinsip yang menolong untuk memahami perilaku dari suatu persoalan yang berkorelasi dengan teori tersebut. Bidang ilmu komputer meliputi topik yang luas, dari perancangan mesin sampai pemrograman. Disamping perbedaan yang ada, terdapat keseragaman prinsip-prinsip umum yang dipakai. Untuk mempelajari prinsip-prinsip dasar tersebut, kita mengkonstruksi suatu mesin otomata sebagai model abstrak dari komputer dan komputasi. Model ini memiliki fungsi-fungsi yang penting dan umum pada perangkat keras dan perangkat lunak komputer. Meskipun model tersebut sederhana untuk diterapkan langsung pada dunia nyata, keuntungan yang diperoleh dari mempelajarinya adalah memberikan landasan untuk basis dari suatu pengembangan algoritma. Pendekatan ini, juga diterapkan pada ilmu sains lainnya.

Abjad, Kata, dan Bahasa
  • Abjad adalah himpunan berhingga tak kosong dari simbol.
notasi dari abjad adalah ∑ "sigma"
contoh 
∑ : {a,b,c,d,...z}
∑ : {1,2,3,4....}
(a,b,c,d....z & 1,2,3,4....) adalah sebuah simbol. dan jika di kumpulkan dalam satu kurung kurawal maka akan menjadi suatu abjad

  • Kata/string/untai adalah Barisan berhingga simbol-simbol dari suatu abjad.

notasi dari kata/string/untai adalah w "w kecil"
contoh
∑ : {a,b,c,d.....z}
w1 = saya
w2 = buku dst

∑ : {1,2,3,4......}
w1 = 1
w2 = 12
w3 = 11 dst

kata kosong/string kosong : Barisan yang kosong dari simbol-simbol
notasi dari string kosong adalah Ɛ

  • Bahasa adalah suatu himpunan dari string-string.
notasi dari bahasa adalah L
contoh
L1 = bahasa inggris
L2 = bahasa jawa
L3 = bahasa spanyol dll
Nb: setiap bahasa mempunyai aturan masing-masing, jadi begitu juga dalam otomata dan teori bahasa dalam membuat bahasa harus ada aturannya
contoh
∑ : {1}
w1 = 1; w2 =11; w3 = 111; w4 = 1111 dst
L1={1,111,1111}"aturannya : Genap"
L2={11.1111.111111} "aturannya : Ganjil"

Bahasa Universal adalah suatu bahasa yang bisa mengakomodasi semua string dari suatu abjad
notasi : ∑*
contoh
∑   : {a,b,c}
∑* : {Ɛ,a,b,c,d,ab,aa,cc,....}

∑   : {2}
∑* : {Ɛ,22,2,222,2222......}

contoh sederhana
∑   : {1,2,3}
L   : {1,2,3} -> apa aturannya..??
bahasa itu menggunakan aturan "satu state tunggal"
  • Operasi-operasi string
-> Panjang (length) dari string
notasi |w|
contoh
w1 = 1 2 1     ->     |w1|= 3
w2 = aa         ->     |w2|=2

-> Perangkaian (concatenation) 
contoh
w1 = ab
w2 = 31
w1.w2 = ab.31 -> ab31

->Exponensial (pangkat)
misal w adalah kata
w^n = {Ɛ, jika n = 0}
               {w.w^n-1 jika n > 0}

dibaca "w pangkat n, w dikalikan dengan w pangkat n-1"
contoh:
w : ab
w^0 = Ɛ
w^1 = w.w^1-1 = w.w^0 = ab.Ɛ =ab
w^2 = w.w^2-1 = w.w^1 = ab.ab = abab dst
  • Operasi-operasi pada Bahasa
-> Perangkaian (concatenation)
misal A dan B adalah Bahasa
A.B={w1.w2|w1 A & w2 B}
contoh:
A    = {Rumah}
B     = {lia,kucing}
A.B = {Rumah lia, Rumah kucing}

-> Exponensial (Pangkat)
misal A adalah Bahasa
A^n = {{Ɛ}, jika n=0}
           {A.A^n-1 jika n > 1}
contoh
A     = {A,B}
A^0 = {Ɛ}
A'    = A.A^0 = {AB}.{Ɛ}  = {AB}

-> Gabungan (Union)
misal A dan B adalah bahasa
A U B = {w | w A atau w B}
contoh
A : {a,ab,c,d}
B : {c,a,aa,dd}
A U B : {a,ab,c,d,aa,dd}

-> Irisan (Lutesectim)
misal A dan B adalah Bahasa
A n B : { w | w € A dan w € B }
dari contoh Gabungan di atas maka irisannya adalah {C,A} karna {C,A} ada di A dan juga ada di B

-> Sub bahasa
misal A dan B adalah Bahasa
A C B "dibaca A sub bahasa dari B"
jika semua kata anggota A jika merupakan anggota B
contoh
∑ : {a,b}
C b = ..?
a : {aa,ab,aab,....}
b : {a,b,aa,bb,ab,aab...}

-> Sama (Equal)
misal A dan B adalah Bahasa
A = B jika Semua anggota A merupakan anggota B dan sebaliknya
A : {a,b}
B : {b,a}
A = B

-> Star Clousure & Plus Clousure
misal A dan B adalah Bahasa
A* ("di baca A star clousure")





Contoh
∑ : {a} "abjad"
A : {aa} "bahasa"



Klasifikasi Tata Bahasa
Tata bahasa (grammar) bisa didefinisikan secara formal sebagai kumpulan dari himpunan-himpunan variabel, simbol-simbol terminal, simbol awal yang dibatasi oleh aturan-aturan produksi. Pada tahun 1959 seorang ahli bernama Noam Chomsky melakukan penggolongan tingkatan bahasa menjadi empat, yang disebut dengan Hirarki Chomsky.
Penggolongan tersebut bisa dilihat pada tabel berikut:

Tabel Chomsky

FINITE STATE AUTOMATA (FSA)
DAN IMPLEMENTASINYA
Finite State Automata (FSA) adalah suatu mesin abstrak yang digunakan untuk merepresentasikan penyelesaian suatu persoalan dari suatu sistem diskrit. Sebagai sebuah mesin maka FSA akan bekerja jika diberikan suatu masukan. Hasil proses adalah suatu nilai kebenaran diterima atau tidaknya masukan yang diberikan. FSA memiliki state yang banyaknya berhingga, jika diberikan suatu simbol input maka dapat terjadi suatu perpindahan dari sebuah state ke state lainnya. Perubahan state tersebut dinyatakan oleh suatu simbol transisi. Mekanisme FSA tidak memiliki memori sehingga selalu mendasarkan prosesnya pada posisi state “saat ini”. Misalnya pada mekanisme kontrol pada sebuah lift, selalu didasari pada posisi lift saat itu pada suatu lantai, pergerakan ke atas atau ke bawah dan sekumpulan permintaan yang belum terpenuhi.

dalam FSA di bagi menjadi 2 jenis yaitu 
  • DFA (Deterministic FSA) -> memiliki hasil yang pasti
  • NFA (Non Deterministic FSA) -> memiliki hasil yang tidak pasti
Secara formal FSA didefinisikan dengan 5 tuple : M = (Q, Σ, δ, S, F), dimana :
Q : himpunan state/kedudukan
Σ  : himpunan simbol input
∂  : fungsi transisi
S : State awal (initial state)
F : himpunan state akhir (Final State)

Apa yang dimaksud DFA?
A deterministic finite automaton (DFA) M = (Q, Σ, δ, S, F), dimana :
Q : himpunan state/kedudukan
Σ  : himpunan simbol input
∂  : fungsi transisi, dimana ∂  Q x Σ -> Q
S  : State awal (initial state)
F : himpunan state akhir (Final State)

Apa yang di maksud NFA?
A Non deterministic finite automaton (DFA) M = (Q, Σ, δ, S,Q0, F), dimana :
Q : himpunan state/kedudukan
Σ  : himpunan simbol input
Q0 € Q : initial state
∂  : fungsi transisi, dimana ∂ = Q x (Σ u Ɛ) -> P (Q)
S  : State awal (initial state)
F : himpunan state akhir (Final State)

contoh DFA
mesin DFA
disebut DFA karena setiap inputan state menerima tepat 1 state berikutnya

Q = {q0,q1,q2}
∑ = {0,1}
S = {q0}
F = {q1,q2}

∂ = fungsi transisi
∂ (q0,0) = q1
∂ (q0,1) = q2
∂ (q1,0) = q1
∂ (q1,1) = q1
∂ (q2,0) = q2
∂ (q2,1) = q2

Membuat table transisi
             0             1
q0           q1           q2
q1           q1           q1
q2           q2           q2


contoh NFA
mesin NFA

Q = {q0,q1}
∑ = {0,1}
S = {q0}
F = {q1}

∂ = fungsi transisi
∂ (q0,0) = q1
∂ (q0,1) = Ɛ
∂ (q1,0) = q1
∂ (q1,1) = q1

Membuat table transisi
             0             1
q0           q1           Ɛ
q1           q1           q1

disebut NFA karna ada state yang kosong "Ɛ"

dari contoh-contoh diatas dapat di tulis bahwa perbedaan dari NFA dan DFA sebagai berikut:

Perbedaan NFA & DFA
DFA
Untuk sebuah state yang berlaku bias di tentukan tepat satu state berikutnya


δ = (s,w) = Q € F
 è Dibaca “transisi dari state awal dengan inputan string w dengan hasil state Q anggota F”
S = state awal
W = string
Q = state initial
F = final state
NFA
Dari setiap state dengan inputan yang ada, tidak selalu tepat pada state berukutnya

Dari suatu state bias terdapat 0,1 atau lebih busur (transisi) berlabel input yang sama

δ = (s,w) = {s} dimana δ (s,w) memuat suatu state di dalam F