pertemuan iv ( struktur data ).ppt

40
Ir. Wahyu Adi Priyono, MS

Upload: anwi-kusuma

Post on 18-Nov-2015

41 views

Category:

Documents


8 download

TRANSCRIPT

  • Ir. Wahyu Adi Priyono, MS

  • ARRAYArray 1 dimensiArray 2 dimensiArray 3 dimensi

  • ARRAY

  • INISIALISASI ARRAYchar s1[6] = Teknik Elektro;char s2[4] = {F, T, U, B, \0};char s2[80] = Belajar Programer Cepat;int bil[3] = {10, 100, 1000};Float r[4] = {1.10, 1.20, 3.58, 23.6E+23};

    Ukuran array harus cukup besar untuk menampung isian

  • PENGAKSESAN ARRAYIndeks tidak boleh melebihi ukuran array yang telah dideklarasikan.C tidak melakukan pengecekan terhadap batas-batas array.Contoh :

    #include

    main(){int x[10];/*deklarasi array*/int a,i;for (i=0; i

  • STRINGDeklarasi : char nama_string[ukuran];

    char * nama_string;Tabel Fungsi-Fungsi Standar C Untuk Operasi String

    NAMAFUNGSIstrcpy(s1, s2)Mengcopy string s2 ke s1strcat(s1, s2)Menggabung string s2 dengan s1, hasilnya disimpan dalam s1strlen(s1)Menentukan panjang string s1strcmp(s1, s2)Membandingkan string s1 dengan s2, sampai perbedaan yang pertamastrncpy(s1, s2, n)Mengcopy string s2 ke s1, sebanyak n karakterstrncat(s1,s2, n)Menggabung n karakter pertama s2 diakhir string s1strncmp(s1, s2, n)Membandingkan n karakter pertama s2 dengan s1

  • STRING (1)Sebelum operasi copy :

    char str[6];

    Sesudah operasi copy :

    strcpy(str, FTUB);

    CATATAN : Tanda ? Berarti isi memori sebelumnya (tidak diketahui)

  • STRING (2)char str[10];

    strlen(str) = 6 sizeof(str) = 10

    strlen() berbeda dengan sizeof() :strlen(s1) hasilnya jumlah karakter sebelum NULL charsizeof(s1) hasilnya ukuran array s1 (dalam byte)

  • STRING (3)s1[10];

    s2[6]

    strcat(s1, s2) Hasil : s1 s2

  • STRING (4)s1s2s1 < s2strcmp(s1, s2) < 0s1 = s2Strcmp = 0s1 > s2strcmp(s1, s2) > 0Hasil :0, jika s1 = s2< 0, jika s1 < s2> 0, jika s1 > s2

  • STRING (5)strncmp(s1, s2, 2) = 0Karena, 2 karakter pertama sama

    strncmp(s1, s2, 3) < 0Karena, karakter ke 3 s1 < s2

  • STRING (6)#include#include

    main(){char s1[30] = Lab Komp dan Jar ; /*mengisi array dengan inisialisasi*/char s2[30]; strcpy(s2, FT UB); /*mengisi array dengan fungsi strcpy()*/ printf(%s \n, s1); printf(%s \n, s2);

    strcat(s1, s2); printf(%s \n, s1);}

    Hasil Output : Lab Komp dan Jar FT UB Lab Komp dan Jar FT UB

  • Passing Elemen Array#include#include

    void cetak(a)int a;/*parameter formal*/{ printf(%d \n, a);}main(){int x[5] = {1,2,3,4,5}char i;for (i=0; i

  • Array Sebagai Formal ParameterFungsi pemanggil :

    main(){int num[10] /*array*/........func1(num);........}

    Ada 3 cara mendeklarasikan aray sebagai formal parameter :

    Sebagai array berindeksSebagai array tak berindeksSebagai pointerFungsi yang dipanggil :Cara 1 :

    func1(bil)int bil[10]; /* array berindeks */{........}Cara 2 :

    func1(bil)int bil[ ]; /* array tak berindeks */{........}Cara 3 :

    func1(bil)int *bil; /* pointer */{........}

  • Array Tak Berindekschar pesan_1[ ]= Dilarang Masuk;char pesan_2[ ]= Tidak Boleh Mencontek;char error[ ]= Disk Not Ready;

    Array tak berindeks sangat berguna untuk menulis konstanta-konstanta string, misalnya untuk pesan-pesan kesalahan.

  • STRUKTURSuatu struktr harus dideklarasikan terlebih dahulu sebelum digunakan.Pendeklarasian Struktur Sebagai Tipe :

    struct nama-tipe {tipe nama-elemen-data;tipe nama-elemen-data;.} nama-variabel, nma-variabel;Pendeklarasian Struktur Sebagai Variabel :

    struct katalog {char no[7];char judul [20];char pengarang [25];char penerbit [10];int tahun;} buku1, buku2;

  • STRUKTUR (1)Tiap elemen data bebas, tidak tergantung pada tipe elemen data lainnya.Elemen 1 : NAMA : no

    TIPE : char [7];Elemen 2 : NAMA : judul

    TIPE : char [20];Elemen 3 : NAMA : pengarang

    TIPE : char [25];Elemen 4 : NAMA : penerbit

    TIPE : char [10];Elemen 5 : NAMA : tahun

    TIPE : int

  • STRUKTUR (2)struct pegawai {char NIP [9];char *nama;char *jabatan;int penghasilan;} arsip1, arsip2;struct pegawai arsip3;

    Deklarasi susulan menggunakan tipe struktur yang telah didefinisikanPendeklarasian ini hanya dapat dilakukan setelah tipe pegawai didefinisikan

  • STRUKTUR (3)Alternatif pendeklarasian struktur :Alternatif 1 : hanya mendeklarasikan variabel-variabel yang terkaitAlternatif 2 : hanya mendeklarasikan tipe strukturAlternatif 1 :

    struct {char NIP [9];char *nama;char *jabatan;int penghasilan;} arsip1, arsip2, arsip3;Alternatif 2 :

    struct pegawai {char NIP [9];char *nama;char *jabatan;int penghasilan;} ;

  • CONTOH STRUKTUR#include#include

    struct barang {char no[6];char *nama;int harga;int jumlah;} stock;

    main(){stock.nama = malloc(13);strcpy (stock.no, D-4113);strcpy (stock.nama, Sepatu NIKE);stock.harga = 20000;stock.jumlah = 500;}

  • CONTOH STRUKTUR (1)#include

    struct tipenya {char data1;int data2 [5];} namavar;

    tulis (argumen)int argumen;{printf (isi argumen = %d, argumen);}

    main(){namavar.data [3] = 7;tulis (namavar.data2 [3]);}

  • CONTOH STRUKTUR (2)#include

    struct tipenya {char data1;int data2 [5];} namavar;

    tulis (argumen)stuct tipenya argumen;{printf (\n data1 = %d, argumen.data1); printf (\n data2 [3] = %d, argumen.data2[3]);}

    main(){namavar.data1 = 75;namavar.data2 [3] = 10475;tulis (namavar);}Suatu struktur lengkap dapat di passingkan semuanya kedalam suatu fungsi dengan menyesuaikan tipe argumen pada fungsi yang dipanggil tersebut.

  • UNIONUnion adalah suatu jenis struktur varian. Dan ukuran union = 4 byte Ukuran char = 1 byteUkuran int = 2 byte Ukuran float = 4 byte

  • PENDEKLARASIAN UNIONCara mendeklarasikan union sama dengan cara pendeklarasian struktur

    union data {unsigned int word;unsigned char byte [2];} buffer;

    union numerik {float bilkecil;double bilbesar;long bilbulat;};

    Union {char huruf;char kata[7];char *kalimat;} literal,string,untai;Ukuran union = 2Ukuran union = 8Ukuran union = 7

  • PEMANFAATAN UNION (1)Perlu diperhatikan bahwa union hanya digunakan dalam aplikasi-aplikasi tertentu, dimana setiap saat hanya salah satu elemen data yang diakses (lihat contoh sebelumnya).

  • ENUMERASIEnumerasi merupakan suatu fasilitas untuk mempermudah pemrograman C dalam mendefinisikan maupun mengingat anggota dari suatu kumpulan entitas tertentu.Caranya dengan menyebutkan nama elemen entitas itu secara urut satu persatu.Bentuk umum : enum tipe-enumerasi {daftar-enumerasi} nama-variabel;Deklarasi enumerasi juga dapat menyertakan pendefinisian tipe enumerasi, disamping nama-nama variabelnya.Contoh :

    enum hari {minggu, senin, selasa, rabu, kamis, jumat, sabtu};enum buah {jambu, mangga, pepaya, pisang};enum kendaraan {sepeda, motor, mobil, pesawat, kereta, perahu};enum bentuk {segitiga, lingkaran, bujursangkar} object;enum {meja, kursi, lemari} perabot;

  • ENUMERASI (1)Representasi enumerasi dalam program internal :Tiap elemen dalam daftar enumerasi merujuk pada suatu nilai tertentuNilai tersebut secara implisit diberikan oleh C, dimulai dari 0,1,2 dan seterusnya menurut urutan penyebutnya dalam deklarasi enumerasi.Contoh :

    enum hari {minggu, senin, selasa, rabu, kamis, jumat, sabtu};Representasi Internalnya : minggu = 0senin= 1selasa= 2rabu= 3kamis= 4jumat= 5sabtu= 6

  • ENUMERASI (2)Pemakaian enumerasi ;Program kecil ini menghasilkan jadwal jam kerja sederhana dalam semingguBaris 6 membangun loop untuk menulis jadwal dari minggu sampai sabtuBaris memeriksa apakah telah sampai pada hari jumat. Jika benar, maka baris 9 dieksekusi, yaitu menulis jadwal untuk hari jumatBaris 10 dilaksanakan jika loop sampai pada hari selain hari jumat dan jadwal yang sesuai pun ditulis.Contoh :

    #includeenum {minggu, senin, selasa, rabu, kamis, jumat, sabtu} hari;main(){for (hari=minggu; hari

  • POINTERPointer adalah variabel yang berisi alamat dari variabel lain atau bagian memori.POINTER adalah ALAMATPOINTER bukan INTEGER

  • OPERATOR POINTEROperator & memberikan alamat dari sebuah variabelOperator * memberikan nilai / isi variabel yang ditunjuk oleh variabel pointer.Contoh :

    int *p, *q; /*deklarasi pointer-pointer p dan q*/int num, x;num = 333;p = &num; /*menyimpan alamat variabel num*/x = *p; /* x menyimpan isi variabel yang ditunjuk oleh p, x= 333*/q = p; /* q juga menyimpan alamat variabel num */

  • DEKLARASI POINTERPada prinsipnya pointer adalah petunjuk ke suatu bagian memori (alamat)Poniter BUKAN integerchar *s; s adalah pointer untuk variable bertipe charint *p; p adalah pointer untuk variabel bertipe intfloat *q; q adalah pointer untuk variabel bertipe float

  • EKSPRESI POINTERPointer dapat diberi harga tertentu (assignment)Pointer dapat ditambah-kurangPointer dapat dibanding-bandingkanContoh :

    #includemain(){int x = 100;int *p, *q;p = &x;/* p menyimpan alamat var. x (int) */q = p;/* q menyimpan alamat var. x juga */printf(alamat x (&x) atau p adalah %u \n, p);printf(isi x adalah *p atau %d \n, *p);printf(q %u \n, q);printf(*q %d\n, *q);}

  • ARITMATIKA POINTERAda 4 operator aritmatika untuk POINTER :

    + dan ++ maju (ke alamat yang lebih tinggi)- dan -- mundur (ke lamat yang lebih rendah)Pointer tidak bisa dibagi atau dikalikan, karena pointer sebenarnya BUKAN INTEGER

    char *q;int *p;

    p++;q--;p= p+3;q = q-5;

  • ARRAY DAN POINTERArray dan Pointer memiliki hubungan yang sangat erat. Keduanya menjadi kekuatan bahas C.Array dapat dibuat dari pointer dan pointer dapat di indeks seperti layaknya array.

    char str[80], *p;p = str;/* p diset = alamat awal dari array str */p = &str[0]/* pernyataan yang sama */str[7] == *(p+7)/* adalah benar */Contoh :

    /* membuat fungsi sendiri untuk menulis string*/tulis(s)/*menggunakan array*/char *s;{int I;for (i=0; s[i]; ++i) putchar(s[i]);}tulis(s)/* menggunakan pointer*/char *s;{int I;while(*s) putchar(*s++);}

  • ALOKASI MEMORImalloc() mengalokasikan memori bebas (dari heap memory) untuk keperluan tertentu, yang alamat awalnya diberikan kepada suatu variabel memori.Malloc() berguna jika kita hanya membutuhkan suatu tempat di memori pada suatu saaat saja untuk kemudian tidak memakainya lagi (dinamik) #include/* prepocessor untuk malloc(), free() */Contoh ;

    #includemain(){int *p; /* p bertipe pointer */p = malloc(1000);/*mengalokasikan 1000byte, alamat awalnya ditunjuk oleh pointer p*/..free(p);/*membebaskan memori mulai dari alamat yang ditunjuk oleh p*/}

  • MEMBEBASKAN MEMORIfree() membebaskan memori yang telah dialokasikan sebelumnya dengan perintah malloc() (dikembalikan ke heap memori)malloc() dan free() sangat berguna dalam pemrograman dinamik dan sangat menghemat memori.

  • #includeint pangkat(a,b)/*fungsi untuk memangkatkan*/int a, b;{int t=1;for(;b;b--) t=t*a;/* a pangkat b */return(t);/* t=pangkat(a,b)*/}tabel(p) /*fungsi untuk mengisi tabel pangkat*/Int p[4][10];/*kompiler menganggap p sebagai array */{int i,j;for(j=1; j
  • REPRESENTASI KARAKTERKarakter pada komputer direpresentasikan dengan cara mengkodekannya dengan kode ASCII (kode lain adalah BCD dan EBCDIC).Ada sebanyak 128 kode ASCII standar (dikodekan dengan 7 bit biner, 27 = 128)Etend ASCII menambah 128 simbol tambahan (dikodekan dengan 8 bit = 1 byte, 28 = 256)

  • STRING ASCIIString ASCII adalah sederetan simbol ASCIIString ASCIIZ (ASCII Zero) adalah string ASCII yang diakhiri dengan NULL charakter, \0C menggunakan \0 character sebagai pemisah antar string, juga sebagai tanda akhir bagi fungsi-fungsi stringContoh :printf() hanya akan mencetak string sampai ditemukan karakter NULL yang pertama

  • TERIMA KASIH