28 March 2011

BAB 1 PENGANTAR STRUKTUR DATA



Tujuan Struktur Data
Kuliah ini mempelajari dasar-dasar ilmu komputer agar dapat melakukan perancangan dan pemilihan struktur data yang sesuai, melakukan analisis pada algoritma yang dibuat dan pemrogramannya.

Referensi:
1.      Deshpande and Kakde, 2004, C & Data Structures, Charles River Media.
2.      Fitriasari, N.S., 2010, Handout Struktur Data, Jurusan Teknik Informatika – Politeknik Pos Indonesia.
3.      Fitriasari, N.S., Hamidin D., 2011, Handout Algoritma dan Pemrograman, Jurusan Teknik Informatika – Politeknik Pos Indonesia.
4.      Korsh J. and Garrett L., 2007, Data Structures, Algorithms and Program Style Using C
5.      Rachmat A., 2007, Handout Struktur Data, Prodi Teknik Informatika, UKDW.


1.      Pendahuluan
Bagaimana cara mengatasi masalah implementasi data dengan komputer?
·         Pemahaman masalah secara menyeluruh dan persiapan data
·         Keputusan operasi-operasi yang dilakukan terhadap data
·         Penyimpanan data-data pada memori sehingga tersimpan dan terstruktur secara logis, operasinya efisien
·         Pengambilan keputusan terhadap bahasa pemrograman mana yang paling cocok untuk jenis data yang ada

Struktur data adalah: model logika/matematik yang secara khusus mengorganisasikan data. Sebuah model harus dapat mencerminkan keterhubungan data dengan dunia nyata dan bentuknya sederhana. Dua jenis struktur data adalah sebagai berikut:
1.      statis – struktur yang tidak berubah : array, record, himpunan
array adalah struktur data yang diproses melalui indeksnya.  contoh
2.      dinamis – struktur yang berubah seperti list/senarai, queue/antrian,tumpukan/stack.
Contoh: list berkait/senarai struktur data yang diproses melalui alamat kepala (awal).
  info : tempat untuk datanya
  next:menyimpan alamat berikutnya:
  struktur dinamis dimana ukurannya boleh bertambah pada saat eksekusi program

Dalam struktur data terdapat 3 hal yang dideskripsikan yaitu:
1.      kumpulan objek data
2.      operasi-operasi dasar terhadap objek data
3.      hubungan antar objek data
Struktur data dapat dinyatakan sebagai tipe data abstrak (abstrak data type) krn implementasinya tersembunyi dari pemakai

Tipe Data (Bahasa C)
  • char  format %c :karakter/string
  • int   format %d :integer
  • float format %f : bilangan pecahan
  • double format %lf : pecahan presisi ganda
·         void keterangan : tidak berti

Variabel
  • suatu indentifier yang digunakan untuk mewakili suatu nilai tertentu didalam proses program
  • nilai dari suatu variabel dapat diubah-ubah sesuai dengan suatu kebutuhan.
  • nama suatu variabel ditentukan sendiri oleh programer

Deklarasi
  • deklarasi variable :                   nama_tipe nama_variabel
contoh: int a;char b
  • deklarasi konstanta :                #define nama_variabel nilai konstanta
contoh: define phi 3.14
  • deklarasi fungsi :                     tipe_fungsi nama_fungsi (parameter_fungsi)
contoh : float luas_lingkaran(int jari)

Operator
  • digunakan untuk menyatakan suatu perhitungan/operasi.
  • operator dapat terbagi atas:
        operator penugasan: penugasan:dalam bhasa c berupa (“=“).
contoh nilai = 50 atau z=x*y
        operator aritmatika: aritmatika:*,/,%,+,-
contoh: 9%2=1
        Hubungan: hubungan/perbandingan: <,<=,>,>=,==,!+
contoh bil<100
        Logika : logika:&& (and),||(or),!(not)
        Bitwise : memanipulasi bit-bit dari nilai datai yang ada dimemori (<<,>>,&,^,|,~)
        Unary : operator yang membutuhkan hanya satu operand saja:-,++,--,sizeof


Penyeleksian Kondisi
  • kondisi “if…”
if (nilai >65)
printf (“\n selamat anda lulus \n”)
  • kondisi “if..else…”
if (nilai >65)
printf (“\n selamat anda lulus \n”)
else
printf (“\n maaf anda tidak  lulus \n”)
·         switch..case..default…
penyeleksian kondisi dengan kemungkinan yang terjadi cukup banyak
switch(hari)
{ case 1 :puts (“hari senin”); break;
case 2 :puts (“hari selasa”); break;
case 3 :puts (“hari rabu”); break;
case 4 :puts (“hari kamis”); break;
case 5 :puts (“hari jumat”); break;
case 6 :puts (“hari sabtu”); break;
case 7 :puts (“hari minggu”); break;
default :puts (“kode hari yang anda masukkan salah”);}
Perulangan
·         while: jumlah perulangan belum diketahui
x=1
while (x<=10)
{printf(“%d saya mahasiswa politeknik pos indonesia \n”,x);
  x++;}

·         do..while
x=1
do
{printf(“%d saya mahasiswa politeknik pos indonesia \n”,x);
  x++;}
while (x<=10);
·         for digunakan untuk mengulang suatu proses yang telah diketahui jumlah perulangannya.
for (x=1;x<=10;x++)
{printf(“%d saya mahasiswa politeknik pos indonesia \n”,x);}

Perbedaan antara Tipe Data, Obyek Data dan Struktur Data
·         Tipe data adalah jenis data yang ditangani oleh suatu bahasa pemrograman pada komputer.
·         Tiap-tiap bahasa pemrograman memiliki tipe data yang memungkinkan:
1.      Deklarasi terhadap variabel tipe data tersebut
2.      Menyediakan kumpulan operasi yang mungkin terhadap variabel
3.      bertipe data tersebut
4.      Contoh tipe data di C? Java? Pascal? .NET?
·         Obyek Data adalah kumpulan elemen yang mungkin untuk suatu tipe data tertentu. Misalnya: integer mengacu pada obyek data -32768 s/d 32767, byte 0 s/d 255, string adalah kumpulan karakter maks 255 huruf

2.      Struktur Data
-          Struktur Data adalah cara penyimpanan dan pengorganisasian data-data pada memori komputer maupun file pada media penyimpanan secara efektif sehingga dapat digunakan secara efisien, termasuk operasioperasi di dalamnya.
-          di dalam struktur data kita berhubungan dengan 2 aktivitas:
o   Mendeskripsikan kumpulan obyek data yang sah sesuai dengan tipe  data yang ada
o   Menunjukkan mekanisme kerja operasi-operasinya
o   Contoh: integer (-32768 s/d 32767) dan jenis operasi yang
o   diperbolehkan adalah +, -, *, /, mod, ceil, floor, <, >, != dsb.
o   Struktur data = obyek data + [operasi manipulasi]
-          Dengan pemilihan struktur data yang baik, maka problem yang kompleks dapat diselesaikan dengan algoritma yang dapat digunakan secara efisien, operasi-operasi penting dapat dieksekusi dengan sumber daya yang lebih kecil, memori lebih kecil, dan waktu eksekusi yang lebih cepat.
-          Ciri algoritma yang baik menurut Donald E.Knuth:
o   Input: ada minimal 0 input atau lebih
o   Ouput: ada minimal 1 output atau lebih
o   Definite: ada kejelasan apa yang dilakukan
o   Efective: langkah yang dikerjakan harus efektif
o   Terminate: langkah harus dapat berhenti (stop) secara jelas
-          Tidak semua struktur data baik dan sesuai. Contoh untuk problem data bank, problem pengurutan dan pencarian data berbeda.

3.      ADT (Abstract Data Type) atau Tipe Data Bentukan
-          Bahasa pemrograman bisa memiliki tipe data:
§  Built-in : sudah tersedia oleh bahasa pemrograman tersebut. Tidak berorientasi pada persoalan yang dihadapi.
§  UDT : User Defined Type, dibuat oleh pemrogram. Mendekati penyelesaian persoalan yang dihadapi. Contoh: record pada Pascal, struct pada C, class pada Java
§  ADT : Abstract Data Type, memperluas konsep UDT dengan menambahkan pengkapsulan atau enkapsulasi, berisi sifat-sifat dan operasioperasi yang bisa dilakukan terhadap kelas tersebut.  Contoh: class pada Java
-          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?
-          Untuk pembuatan tipe data baru digunakan keyword typedef
Bentuk umum:
typedef <tipe_data_lama> <nama_tipe_data_baru>
Contoh:
#include <stdio.h>
#include <conio.h>
typedef int angka;
typedef float pecahan;
typedef char huruf;
void main(){
clrscr();
angka umur;
pecahan pecah;
huruf h;
huruf nama[10];
printf("masukkan umur anda : ");scanf("%d",&umur);
printf("Umur anda adalah %d",umur);
printf("\nmasukkan bilangan pecahan : ");scanf("%f",&pecah);
printf("Bilangan pecahan %f",pecah);
printf("\nmasukkan huruf : ");h=getche();
printf("\nHuruf anda %c",h);
printf("\nmasukkan nama : ");scanf("%s",nama);
printf("Nama anda %s",nama);
getch();
}

4.      Struct
-          Struct adalah tipe data bentukan yang berisi kumpulan variabel-variabel yang bernaung dalam satu nama yang sama dan memiliki kaitan satu sama lain.
-          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.
-          Variabel-variabel yang menjadi anggota struct disebut dengan elemen struct.
-          Bentuk umum:
typedef struct{
tipe_data <nama_var>;
tipe_data <nama_var>;
....
}


Ilustrasi Struct

a.      Pendeklarasian dan penggunaan Struct  (1) (menggunakan typedef)
typedef struct Mahasiswa {
char NIM[8];
char nama[50];
float ipk;
};
//untuk menggunakan struct Mahasiswa dengan membuat variabel mhs dan mhs2
Mahasiswa mhs,mhs2;
//untuk menggunakan struct Mahasiswa dengan membuat variabel array m;
Mahasiswa m[100];

b.      Pendeklarasian dan penggunaan Struct (2) (tanpa menggunakan typedef)
struct {
char NIM[8];
char nama[50];
float ipk;
} mhs;
Berarti kita sudah mempunyai variabel mhs yang bertipe data struct seperti diatas.


Cara penggunaan struct dan pengaksesan elemen-elemennya
-          Penggunaan/pemakaian tipe data struct dilakukan dengan membuat suatu variabel yang bertipe data struct tersebut
-          Pengaksesan elemen struct dilakukan secara individual dengan menyebutkan nama variabel struct diikuti dengan operator titik (.)
-          Misalnya dengan struct mahasiswa seperti contoh di atas, kita akan akses elemen-elemennya seperti contoh berikut:

a.      Contoh 1
#include <stdio.h>
#include <conio.h>
//Pendeklarasian tipe data baru struct Mahasiswa
typedef struct Mahasiswa{
char NIM[9];
char nama[30];
float ipk;
};
void main(){
//Buat variabel mhs bertipe data Mahasiswa
Mahasiswa mhs;
clrscr();
printf("NIM = ");scanf("%s",mhs.NIM);
printf("Nama = ");scanf("%s",mhs.nama);
printf("IPK = ");scanf("%f",&mhs.ipk);
printf("Data Anda : \n");
printf("NIM : %s\n",mhs.NIM);
printf("Nama : %s\n",mhs.nama);
printf("IPK : %f\n",mhs.ipk);
getch();
}

Hasilnya:

b.      Contoh 2
#include <stdio.h>
#include <conio.h>
#define phi 3.14
//langsung dianggap variabel 'lingkaran'
struct {
float jari2;
float keliling;
float luas;
} lingkaran;
//fungsi void untuk menghitung luas ingkaran
void luasLingkaran(){
//langsung menggunakan luas lingkaran asli
lingkaran.luas = lingkaran.jari2 * lingkaran.jari2 * phi;
printf("\nLuas lingkaran = %f",lingkaran.luas);
}
//fungsi yang mengembalikan nilai float untuk menghitung keliling lingkaran
float kelLingkaran(float j){
return 2*phi*lingkaran.jari2;
}
int main(){
clrscr();
printf("Jari-jari = ");scanf("%f",&lingkaran.jari2);
//panggil fungsi luasLingkaran
luasLingkaran();
//panggil fungsi keliling, nilai kembaliannya dikirim ke keliling lingkaran asli
lingkaran.keliling = kelLingkaran(lingkaran.jari2);
//tampilkan keliling lingkaran asli
printf("\nKeliling lingkaran = %f",lingkaran.keliling);
getch();
}

Hasilnya:

c.       Struct yang berisi struct lain
Contoh:
#include <stdio.h>
#include <conio.h>
typedef struct Date{
int dd;
int mm;
int yyyy;
};
typedef struct Time{
int h;
int m;
int s;
};
typedef struct Login{
int ID;
Date tglLogin;
Time waktuLogin;
};
int main(){
Login user1;
printf("USER 1\n");
printf("ID : ");scanf("%d",&user1.ID);
printf("Tanggal Login\n");
printf("Hari : ");scanf("%d",&user1.tglLogin.dd);
printf("Bulan : ");scanf("%d",&user1.tglLogin.mm);
printf("Tahun : ");scanf("%d",&user1.tglLogin.yyyy);
printf("Waktu Login\n");
printf("Jam : ");scanf("%d",&user1.waktuLogin.h);
printf("Menit : ");scanf("%d",&user1.waktuLogin.m);
printf("Detik : ");scanf("%d",&user1.waktuLogin.s);
printf("Terimakasih\n");
printf("Data Anda :\n");
printf("ID : %d\n",user1.ID);
printf("Date : %d - %d -
%d\n",user1.tglLogin.dd,user1.tglLogin.mm,user1.tglLogin.yyyy);
printf("ID :
%d:%d:%d\n",user1.waktuLogin.h,user1.waktuLogin.m,user1.waktuLogin.s);
getch();
}
Hasil:



d.      Array of Struct
Contoh
#include <stdio.h>
#include <conio.h>
typedef struct Date{
int dd;
int mm;
int yyyy;
};
typedef struct Time{
int h;
int m;
int s;
};
typedef struct Login{
int ID;
Date tglLogin;
Time waktuLogin;
};
int main(){
Login user[3];
//3 user
for(int i=0;i<3;i++){
printf("\nUSER ke-%d\n",i+1);
printf("ID : ");scanf("%d",&user[i].ID);
printf("Tanggal Login\n");
printf("Hari : ");scanf("%d",&user[i].tglLogin.dd);
printf("Bulan : ");scanf("%d",&user[i].tglLogin.mm);
printf("Tahun : ");scanf("%d",&user[i].tglLogin.yyyy);
printf("Waktu Login\n");
printf("Jam : ");scanf("%d",&user[i].waktuLogin.h);
printf("Menit : ");scanf("%d",&user[i].waktuLogin.m);
printf("Detik : ");scanf("%d",&user[i].waktuLogin.s);
printf("Terimakasih Atas Pengisiannya\n");
printf("\nData User ke-%d:\n",i+1);
printf("Login ID : %d\n",user[i].ID);
printf("Login Date : %d - %d -
%d\n",user[i].tglLogin.dd,user[i].tglLogin.mm,user[i].tglLogin.yyyy);
printf("Login Time :
%d:%d:%d\n",user[i].waktuLogin.h,user[i].waktuLogin.m,user[i].waktuLogin.s);
}
getch();
}




Hasil
                                                        

No comments :

Post a Comment