Kontrak Perkuliahan

816 views
760 views

Published on

Struktur Data

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
816
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
24
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Kontrak Perkuliahan

  1. 1. SEMESTER GANJIL 2009/2010
  2. 2. STRUKTUR DATA Welcome & Enjoying this class...
  3. 3. KONTRAK PERKULIAHAN TEKNIK INFORMATIKA
  4. 4. Sistem Penilaian BOBOT RANGE NILAI Kehadiran 10% 85 – 100 A Tugas 20% 70 – 84 B Mid Test 30% 55 – 69 C Final Test 40% 45 – 54 D <45 E
  5. 5. Ketentuan Lain : <ul><li>Nilai T diberikan akibat mahasiswa belum menyelesaikan tugasnya dengan alasan yang dapat diterima </li></ul><ul><li>Batas perbaikan nilai “T” adalah 1 (satu) bulan sejak tanggal dikeluarkan/ diumumkannya nilai tersebut, jika tidak maka secara otomatis nilai “T” menjadi “E”. </li></ul><ul><li>Mahasiswa yang diperbolehkan mengikuti ujian akhir adalah mereka yang telah mengikuti perkuliahan minimal 75% dari total frekwensi perkuliahan. </li></ul>
  6. 6. Disiplin Perkuliahan <ul><li>Setiap mahasiswa diwajibkan mengikuti perkuliahan sesuai jadwal yang telah ditentukan. Toleransi keterlambatan 15 menit setelah pelajaran dimulai. </li></ul><ul><li>Toleransi keterlambatan Dosen 30 menit (jika tidak ada pemberitahuan sebelumnya). Dalam kondisi ini mahasiswa diperkenankan pulang/ meninggalkan ruang kuliah. </li></ul>
  7. 7. Disiplin Perkuliahan <ul><li>Selama perkuliahan berlangsung mahasiswa tidak diperkenankan memakai topi, baju kaos oblong, sandal, jaket dan merokok dalam kelas . </li></ul>
  8. 9. Bahan Bacaan
  9. 11. Struktur Data <ul><li>Struktur Data menyangkut susunan fisik data dalam komputer </li></ul><ul><li>Struktur Data menyerupai beberapa bentuk teknik kompresi data </li></ul><ul><ul><li>Agar penyimpanan lebih efesien </li></ul></ul><ul><ul><li>Agar tersusun lebih terurut </li></ul></ul><ul><ul><li>Agar data retrieval lebih efektif </li></ul></ul>
  10. 14. • Struktur data adalah suatu koleksi atau kelompok data yang dapat dikarakterisasikan oleh organisasi serta operasi yang didefinisikan terhadapnya • Struktur data diperlukan dalam perencanaan Algoritma dan penyusunan program sebagai dasar teknik dari Database.
  11. 15. • Data secara umum dapat dikategorikan : • Tipe data sederhana atau data sederhana 1. Tunggal :Integer, Real, Boolean, Karakter 2. Majemuk :String • Struktur Data 1. Sederhana :Array dan Record 2. Majemuk Linier :Linier Linked List, Stack, Queue Non Linier :Binary Tree, Binary Search Tree, General Tree, Tree, Graf
  12. 16. Tipe Data Integer • Anggota dari himpunan bilangan : • {..., -(n+1), -n, ..., -2, -1, 0, 1, 2, ..., n, n+1, ...} • Operasi dasar yaitu : penjumlahan, pengurangan, perkalian, pembagian dan perpangkatan • Pembagian Integer (DIV) • Hasil pembagian integer DIV adalah sebuah integer (menghilangkan bagian pecahan dari hasil pembagian) Contoh : 27 DIV 4 = 6 • Selain itu terdapat operasi MOD (Modulo) adalah sisa dari pembagian Contoh : 27 MOD 4 = 3 • Operator yang bekerja terhadap sepasang integer (operand) disebut Binary Operator. Sedangkan operator yang hanya bekerja terhadap satu operand saja disebut Unary Operator.
  13. 17. Tipe Data Real • Data numerik yang bukan termasuk integer, digolongkan dalam jenis data real. Ditulis menggunakan titik desimal (atau koma desimal). Dimasukkan ke dalam memori komputer memakai sistem floating point, disebut Scientific Notation. • Penyajiannya terdiri dari : pecahan dan eksponen. Contoh : • Di dalam sistem desimal, 123000 = 0.123 * 10 6 • di sini 0.123 adalah mantissa atau pecahan, sedangkan 6 adalah eksponennya. • Secara umum suatu bilangan real X dituliskan M * RE • di sini : M dijadikan pecahan, R adalah radixnya dan E merupakan eksponennya
  14. 18. Tipe Data Boolean • Disebut juga jenis data logical. Anggota { true atau false}. • Operator Logika, yaitu : AND, OR, NOT • Operator AND akan menghasilkan nilai true, jika kedua operand bernilai true. • Operator OR akan menghasilkan nilai true, jika salah satu operand bernilai true • Operator NOT merupakan “precedence” dari operator AND dan OR. • Dalam suatu ekspresi yang tidak menggunakan tanda kurung, operator NOT harus dievaluasi sebelum operator AND dan OR. B. Operator Relasional, yaitu : >, <, >=, <=, <> dan = Contoh : 6 < 8 = True 9 < 8 = False
  15. 19. Tipe Data karakter • Elemen dari suatu himpunan yang terdiri atas bilangan, abjad dan simbol khusus. • (0,1,...,8,9, A, B, ..., Y,Z, +, -,*,Ö, ...}
  16. 20. Operasi string • Barisan hingga karakter yang dibentuk oleh suatu kumpulan dari karakter. • Karakter yang digunakan untuk membentuk suatu string disebut alfabet. Dalam penulisannya, suatu string berada dalam tanda “aphosthrope”. Contoh : • Misal diberikan himpunan alfabet A = {C,D,1}. • String yang dapat dibentuk dari alfabet di atas di antaranya : ‘CD1’,’CDD’,’DDC’,’CDC1’,... Dan sebagainya, termasuk “null string” atau “empty string” • Himpunan tak hingga dari string yang dibentuk oleh alfabet A disebut VOCABULARY, Notasi : VA atau A* • Jika suatu string dibentuk dari alfabet {0,1}, maka string yang terbentuk disebut dengan “ Bit String”.
  17. 21. Operasi String
  18. 22. LENGTH Nilai dari operasi ini adalah suatu integer yang menunjukkan panjang dari suatu string . Notasi : LENGTH(S) = N (integer) di sini S = String, N = integer Contoh : Jika diberikan string S =‘a1a2 ... aN’ Maka LENGTH(S) = N Jika diberikan string S =“SISTEMINFORMASI” Maka LENGTH(S) = 15 Jika diberikan string S =“SISTEM INFORMASI” Maka LENGTH(S) = 16 Jika diberikan string S = “ABCD20” Maka LENGTH(S) = 6
  19. 24. SUBSTR Operasi ini adalah operasi membentuk string baru, yang merupakan bagian dari string yang diketahui. Notasi : SUBSTR(S, i, j) di sini : S = string yang diketahui i dan j = integer i = posisi awal substring 1 £ i £ LENGTH(S) j = banyak karakter yang diambil 0 £ j £ LENGTH(S) dan 0 £ i+j-1 £ LENGTH(S) Contoh : Diberikan S = ‘a1a2 ... aN’ ; i = 2 ; j= 4 Maka SUBSTR(S,i,j) = SUBSTR(S,2,4) =‘a2a3a4a5’ String S = &quot;Sistem Informasi&quot; SUBSTR(S,i, j) , i = 4 j = 8 SUBSTR(S,4,8) = &quot;tem Info&quot; String S = &quot;Sistem&quot; SUBSTR(S,1,3) = &quot;Sis&quot; LENGTH(SUBSTR(S,1,3)) = 3 String S = &quot;Informasi&quot; SUBSTR(S,4,5) = &quot;ormas&quot; LENGTH(SUBSTR(S,4,5)) = 5
  20. 25. INSERT Operasi ini adalah untuk menyisipkan suatu string ke dalam string lain. Bentuk umumnya adalah : INSERT(S1,S2,i). S1 dan S2 masing-masing adalah suatu string dan i adalah posisi awal S2 pada S1. Contoh : Misalkan : S1 = ‘a1a2 ... aN’ S2 = ‘b1b2 ... bM’ INSERT(S1, S2,3) = ‘a1a2b1b2 ... bMa3a4... aN’ String S1 = &quot;Sistem&quot; String S2 = &quot;Informasi&quot; INSERT(S1,S2,4) = “SisInformasitem” INSERT(S2,S1,4) = “InfSistemormasi
  21. 26. <ul><li>Bagaimana cara mengatasi masalah implementasi program dengan komputer? </li></ul><ul><ul><li>Pemahaman masalah secara menyeluruh dan persiapan data </li></ul></ul><ul><ul><li>Keputusan operasi-operasi yang dilakukan terhadap data </li></ul></ul><ul><ul><li>Penyimpanan data-data pada memori sehingga tersimpan dan terstruktur secara logis, operasinya efisien </li></ul></ul><ul><ul><li>Pengambilan keputusan terhadap bahasa pemrograman mana yang paling cocok untuk jenis data yang ada </li></ul></ul>
  22. 27. Perbedaan Tipe Data, Obyek Data & Struktur Data (1) <ul><li>Tipe data adalah jenis data yang mampu ditangani oleh suatu bahasa pemrograman pada komputer. </li></ul><ul><li>Tiap-tiap bahasa pemrograman memiliki tipe data yang memungkinkan: </li></ul><ul><ul><li>Deklarasi terhadap variabel tipe data tersebut </li></ul></ul><ul><ul><li>Menyediakan kumpulan operasi yang mungkin terhadap variabel bertipe data tersebut </li></ul></ul><ul><ul><li>Jenis obyek data </li></ul></ul><ul><ul><li>Contoh tipe data di C? Java? Pascal? </li></ul></ul>
  23. 28. Perbedaan Tipe Data, Obyek Data & Struktur Data (2) <ul><li>Obyek Data adalah kumpulan elemen yang mungkin untuk suatu tipe data tertentu. </li></ul><ul><ul><li>Mis: integer mengacu pada obyek data -32768 s/d 32767, byte 0 s/d 255, string adalah kumpulan karakter maks 255 huruf </li></ul></ul><ul><li>Struktur Data adalah cara penyimpanan dan pengorganisasian data-data pada memori komputer maupun file secara efektif sehingga dapat digunakan secara efisien, termasuk operasi-operasi di dalamnya. </li></ul>
  24. 29. Aktivitas Struktur Data <ul><li>Di dalam struktur data kita berhubungan dengan 2 aktivitas: </li></ul><ul><ul><li>Mendeskripsikan kumpulan obyek data yang sah sesuai dengan tipe data yang ada </li></ul></ul><ul><ul><li>Menunjukkan mekanisme kerja operasi-operasinya </li></ul></ul><ul><ul><ul><li>Contoh: integer (-32768 s/d 32767) dan jenis operasi yang diperbolehkan adalah +, -, *, /, mod, ceil, floor, <, >, != dsb. </li></ul></ul></ul><ul><li>Struktur data = obyek data + [operasi manipulasi data] </li></ul>
  25. 30. Hubungan Struktur Data dan Algoritma <ul><li>Dengan pemilihan struktur data yang baik, maka problem yang kompleks dapat diselesaikan sehingga algoritma dapat digunakan secara efisien, operasi-operasi penting dapat dieksekusi dengan sumber daya yang lebih kecil, memori lebih kecil, dan waktu eksekusi yang lebih cepat. </li></ul>
  26. 31. Ciri Algoritma <ul><li>Ciri algoritma yang baik </li></ul><ul><li> - Input: ada minimal 0 input atau lebih </li></ul><ul><ul><li>Ouput: ada minimal 1 output atau lebih </li></ul></ul><ul><ul><li>Definite: ada kejelasan apa yang dilakukan </li></ul></ul><ul><ul><li>Efective: langkah yang dikerjakan harus efektif </li></ul></ul><ul><ul><li>Terminate: langkah harus dapat berhenti (stop) secara jelas </li></ul></ul>
  27. 32. ADT dan UDT atau Tipe Data Bentukan <ul><li>Bahasa pemrograman bisa memiliki tipe data: </li></ul><ul><ul><li>Built-in : sudah tersedia oleh bahasa pemrograman tersebut </li></ul></ul><ul><ul><ul><li>Tidak berorientasi pada persoalan yang dihadapi. </li></ul></ul></ul><ul><ul><li>UDT : User Defined Type, dibuat oleh pemrogram. </li></ul></ul><ul><ul><ul><li>Mendekati penyelesaian persoalan yang dihadapi </li></ul></ul></ul><ul><ul><ul><li>Contoh: record pada Pascal, struct pada C. </li></ul></ul></ul><ul><ul><li>ADT : Abstract Data Type </li></ul></ul><ul><ul><ul><li>memperluas konsep UDT dengan menambahkan pengkapsulan atau enkapsulasi, berisi sifat-sifat dan operasi-operasi yang bisa dilakukan terhadap kelas tersebut. </li></ul></ul></ul><ul><ul><ul><li>Contoh: class pada Java </li></ul></ul></ul>
  28. 33. UDT (2) <ul><li>Bahasa C memiliki tipe data numerik dan karakter (seperti int, float, char dan lain-lain). Disamping itu juga memiliki tipe data enumerasi dan structure. Bagaimana jika kita ingin membuat tipe data baru? </li></ul><ul><li>Untuk pembuatan tipe data baru digunakan keyword typedef </li></ul><ul><li>Bentuk umum: </li></ul><ul><li>typedef <tipe_data_lama> <tipe_data_baru>; </li></ul>
  29. 34. Program <ul><li>Contoh: </li></ul><ul><li>#include <stdio.h> </li></ul><ul><li>#include <conio.h> </li></ul><ul><li>typedef int angka; </li></ul><ul><li>typedef float pecahan; </li></ul><ul><li>typedef char huruf; </li></ul><ul><li>void main(){ </li></ul><ul><li>clrscr(); </li></ul><ul><li>angka umur; </li></ul><ul><li>pecahan pecah; </li></ul><ul><li>huruf h; </li></ul><ul><ul><ul><li>huruf nama[10]; </li></ul></ul></ul><ul><li>printf(&quot;masukkan umur anda : &quot;);scanf(&quot;%d&quot;,&umur); </li></ul><ul><li>printf(&quot;Umur anda adalah %d&quot;,umur); </li></ul><ul><li>printf(&quot; masukkan bilangan pecahan : &quot;);scanf(&quot;%f&quot;,&pecah); </li></ul><ul><li>printf(&quot;Bilangan pecahan %f&quot;,pecah); </li></ul><ul><li>printf(&quot; masukkan huruf : &quot;);h=getche(); </li></ul><ul><li>printf(&quot; Huruf anda %c&quot;,h); </li></ul><ul><li>printf(&quot; masukkan nama : &quot;);scanf(&quot;%s&quot;,nama); </li></ul><ul><li>printf(&quot;Nama anda %s&quot;,nama); </li></ul><ul><li>getch(); </li></ul><ul><li>} </li></ul>
  30. 35. Hasil Program
  31. 36. Struct / record <ul><li>Struct adalah tipe data bentukan yang berisi kumpulan variabel-variabel yang bernaung dalam satu nama yang sama dan memiliki kaitan satu sama lain. </li></ul><ul><li>Berbeda dengan array hanya berupa kumpulan variabel yang bertipe data sama, struct bisa memiliki variabel-variabel yang bertipe data sama atau berbeda, bahkan bisa menyimpan variabel yang bertipe data array atau struct itu sendiri. </li></ul><ul><li>Variabel-variabel yang menjadi anggota struct disebut dengan elemen struct. </li></ul>
  32. 37. Bentuk Umum <ul><li>Bentuk umum: </li></ul><ul><li>typedef struct <nama_struct> { </li></ul><ul><li>tipe_data <nama_var>; </li></ul><ul><li>tipe_data <nama_var>; </li></ul><ul><li>.... </li></ul><ul><li>} </li></ul>
  33. 38. Pendeklarasian dan penggunaan Struct (1) (menggunakan typedef ) <ul><li>typedef struct Mahasiswa { </li></ul><ul><li>char NIM[8]; </li></ul><ul><li>char nama[50]; </li></ul><ul><li>float ipk; </li></ul><ul><li>}; </li></ul><ul><li>untuk menggunakan struct Mahasiswa dengan membuat variabel mhs dan mhs2 </li></ul><ul><li>Mahasiswa mhs,mhs2; </li></ul><ul><li>untuk menggunakan struct Mahasiswa dengan membuat variabel array m; </li></ul><ul><li>Mahasiswa m[100]; </li></ul>
  34. 39. Pendeklarasian dan penggunaan Struct (2) (tanpa menggunakan typedef ) <ul><li>struct { </li></ul><ul><li>char NIM[8]; </li></ul><ul><li>char nama[50]; </li></ul><ul><li>float ipk; </li></ul><ul><li>} mhs; </li></ul><ul><li>Berarti kita sudah mempunyai variabel mhs yang bertipe data struct seperti diatas. </li></ul>
  35. 40. Cara penggunaan struct dan pengaksesan elemen-elemennya <ul><li>Penggunaan/pemakaian tipe data struct dilakukan dengan membuat suatu variabel yang bertipe data struct tersebut </li></ul><ul><li>Pengaksesan elemen struct dilakukan secara individual dengan menyebutkan nama variabel struct diikuti dengan operator titik (.) </li></ul><ul><li>Misalnya dengan struct mahasiswa seperti contoh di atas, kita akan akses elemen-elemennya seperti contoh berikut: </li></ul>
  36. 41. Program #include <stdio.h> #include <conio.h> //Pendeklarasian tipe data baru struct Mahasiswa typedef struct Mahasiswa{ char NIM[9]; char nama[30]; float ipk; }Mahasiswa; void main(){ //Buat variabel mhs bertipe data Mahasiswa Mahasiswa mhs; clrscr(); printf(&quot;NIM = &quot;);scanf(&quot;%s&quot;,mhs.NIM); printf(&quot;Nama = &quot;);scanf(&quot;%s&quot;,mhs.nama); printf(&quot;IPK = &quot;);scanf(&quot;%f&quot;,&mhs.ipk); printf(&quot;Data Anda : &quot;); printf(&quot;NIM : %s &quot;,mhs.NIM); printf(&quot;Nama : %s &quot;,mhs.nama); printf(&quot;IPK : %f &quot;,mhs.ipk); getch(); }
  37. 42. Hasil
  38. 43. Program <ul><li>#include <stdio.h> </li></ul><ul><li>#include <conio.h> </li></ul><ul><li>#define phi 3.14 </li></ul><ul><li>//langsung dianggap variabel 'lingkaran' </li></ul><ul><li>struct { </li></ul><ul><li>float jari2; </li></ul><ul><li>float keliling; </li></ul><ul><li>float luas; </li></ul><ul><li>} lingkaran; </li></ul><ul><li>//fungsi void untuk menghitung luas ingkaran </li></ul><ul><li>void luasLingkaran(){ </li></ul><ul><li>//langsung menggunakan luas lingkaran asli </li></ul><ul><li>lingkaran.luas = lingkaran.jari2 * lingkaran.jari2 * phi; </li></ul><ul><li>printf(&quot; Luas lingkaran = %f&quot;,lingkaran.luas); </li></ul><ul><li>} </li></ul><ul><li>//fungsi yang mengembalikan nilai float untuk menghitung keliling lingkaran </li></ul><ul><li>float kelLingkaran(float j){ </li></ul><ul><li>return 2*phi*lingkaran.jari2; </li></ul><ul><li>} </li></ul><ul><li>int main(){ </li></ul><ul><li>clrscr(); </li></ul><ul><li>printf(&quot;Jari-jari = &quot;);scanf(&quot;%f&quot;,&lingkaran.jari2); </li></ul><ul><li>//panggil fungsi luasLingkaran </li></ul><ul><li>luasLingkaran(); </li></ul><ul><li>//panggil fungsi keliling, nilai kembaliannya dikirim ke keliling lingkaran asli </li></ul><ul><li>lingkaran.keliling = kelLingkaran(lingkaran.jari2); </li></ul><ul><li>//tampilkan keliling lingkaran asli </li></ul><ul><li>printf(&quot; Keliling lingkaran = %f&quot;,lingkaran.keliling); </li></ul><ul><li>getch(); </li></ul><ul><li>} </li></ul>
  39. 44. Hasil
  40. 45. Struct yang berisi struct lain #include <stdio.h> #include <conio.h> typedef struct Date{ int dd; int mm; int yyyy; }Date; typedef struct Time{ int h; int m; int s; }Time; typedef struct Login{ int ID; Date tglLogin; Time waktuLogin; }Login; int main(){ Login user1; printf(&quot;USER 1 &quot;); printf(&quot;ID : &quot;);scanf(&quot;%d&quot;,&user1.ID); printf(&quot;Tanggal Login &quot;); printf(&quot;Hari : &quot;);scanf(&quot;%d&quot;,&user1.tglLogin.dd); printf(&quot;Bulan : &quot;);scanf(&quot;%d&quot;,&user1.tglLogin.mm); printf(&quot;Tahun : &quot;);scanf(&quot;%d&quot;,&user1.tglLogin.yyyy); printf(&quot;Waktu Login &quot;); printf(&quot;Jam : &quot;);scanf(&quot;%d&quot;,&user1.waktuLogin.h); printf(&quot;Menit : &quot;);scanf(&quot;%d&quot;,&user1.waktuLogin.m); printf(&quot;Detik : &quot;);scanf(&quot;%d&quot;,&user1.waktuLogin.s); printf(&quot;Terimakasih &quot;); printf(&quot;Data Anda : &quot;); printf(&quot;ID : %d &quot;,user1.ID); printf(&quot;Date : %d - %d -%d &quot;,user1.tglLogin.dd,user1.tglLogin.mm,user1.tglLogin.yyyy); printf(&quot;ID :%d:%d:%d &quot;,user1.waktuLogin.h,user1.waktuLogin.m,user1.waktuLogin.s); getch(); }
  41. 46. Hasil
  42. 47. Array of Struct #include <stdio.h> #include <conio.h> typedef struct Date{ int dd; int mm; int yyyy; }Date; typedef struct Time{ int h; int m; int s; }Time; typedef struct Login{ int ID; Date tglLogin; Time waktuLogin; }Login; int main(){ Login user[3]; //3 user for(int i=0;i<3;i++){ printf(&quot; USER ke-%d &quot;,i+1); printf(&quot;ID : &quot;);scanf(&quot;%d&quot;,&user[i].ID); printf(&quot;Tanggal Login &quot;); printf(&quot;Hari : &quot;);scanf(&quot;%d&quot;,&user[i].tglLogin.dd); printf(&quot;Bulan : &quot;);scanf(&quot;%d&quot;,&user[i].tglLogin.mm); printf(&quot;Tahun : &quot;);scanf(&quot;%d&quot;,&user[i].tglLogin.yyyy); printf(&quot;Waktu Login &quot;); printf(&quot;Jam : &quot;);scanf(&quot;%d&quot;,&user[i].waktuLogin.h); printf(&quot;Menit : &quot;);scanf(&quot;%d&quot;,&user[i].waktuLogin.m); printf(&quot;Detik : &quot;);scanf(&quot;%d&quot;,&user[i].waktuLogin.s); printf(&quot;Terimakasih Atas Pengisiannya &quot;); printf(&quot; Data User ke-%d: &quot;,i+1); printf(&quot;Login ID : %d &quot;,user[i].ID); printf(&quot;Login Date : %d - %d - %d &quot;,user[i].tglLogin.dd,user[i].tglLogin.mm,user[i].tglLogin.yyyy); printf(&quot;Login Time : %d:%d:%d &quot;,user[i].waktuLogin.h,user[i].waktuLogin.m,user[i].waktuLogin.s); } getch(); }
  43. 48. Hasil
  44. 49. Operasi data pada array of struct <ul><li>Tambah </li></ul><ul><li>Hapus </li></ul><ul><li>Edit </li></ul>
  45. 50. TUGAS <ul><li>Buat algoritma dengan menggunkan simbol untuk menentukan nilai mahasiswa dengan ketentuan sbb: </li></ul><ul><ul><li>Nilai 85 ke atas A </li></ul></ul><ul><ul><li>Nilai 70-84 B </li></ul></ul><ul><ul><li>Nilai 55-69 C </li></ul></ul><ul><ul><li>Nilai 45-54 D </li></ul></ul><ul><ul><li>Kurang dari E </li></ul></ul><ul><li>Buat Type data bentukan dari biodata anda minimal 7 variabel </li></ul><ul><li>Tugas Dikumpul Tanggal 2 Nopember 2009 </li></ul>

×