bab 2

45
1 Bab 2 Jenis Data

Upload: jarvis

Post on 20-Mar-2016

59 views

Category:

Documents


0 download

DESCRIPTION

Bab 2. Jenis Data. Jenis Data. Data – suatu koleksi bit-bit Objek data – atau pembolebubah atau pencam mempunyai 4 komponen berikut: L – lokasi yang menyimpan nilai suatu objek data. Tindakan yang mengumpukkan lokasi kepada suatu objek data dipanggil pengumpulan (allocation) . - PowerPoint PPT Presentation

TRANSCRIPT

1

Bab 2

Jenis Data

2

Jenis Data Data – suatu koleksi bit-bit Objek data – atau pembolebubah atau pencam

mempunyai 4 komponen berikut: L – lokasi yang menyimpan nilai suatu objek data.

Tindakan yang mengumpukkan lokasi kepada suatu objek data dipanggil pengumpulan (allocation) .

Pengumpukan statik – pengumpukan sebelum perlaksanaan Pengumpukan dinamik – pengumpukan semasa larian

N – Nama yang digunakan untuk merujuk objek data V – nilai objek data dan diwakilkan dalam bentuk kod pada

lokasi yang diumpukkan T - jenis data, yang mewakilkan bentuk nilai yang boleh

disimpan oleh objek data

3

Klasifikasi Data Dari pandangan pengguna, jenis data atau maklumat

boleh diklasifikasikan kepada: Jenis data Built-in - yang sedia terkandung dalam

definasi bahasa dan boleh digunakan melalui pengisytiharan objek data

Jenis data takrifan pengguna (user-defined) – didefinasikan menggunakan pengisytiharan jenis sebelum boleh digunakan pada pengisytiharan objek data

4

Jenis Data Built-in Boleh diklasifikasikan lagi kepada:

Jenis data primitif - nilainya dalam bentuk yang paling asas dan tidak boleh dipermudahkan lagi.- kadangkala juga dipanggil jenis data tidak berstruktur- Contohnya: integer, nyata (real), Boolean, dan aksara

Jenis data komposit – nilainya terdiri dari gabungan beberapa nilai asas- kadangkala juga dipanggil jenis data berstruktur- Contohnya: tatasusunan, rekod, rentetan, timbunan, dll.

Jenis data rekursif – nilainya terdiri dari gabungan beberapa nilai lain yang berjenis sama, contohnya: senarai

5

Jenis Data Primitif - Integer Jenis integer (int) mempunyai julat set integer yang boleh

diwakilkan pada komputer Julat ini bergantung kepada pengimplementasiannya pada

komputer. Komputer bersaiz kecil – menggunakan 2 bait untuk

menyimpan setiap integer, maka julat integer yang boleh digunakan adalah dari -32,768 kepada 32,767. Kenapa?

Hint: Gunakan 1 bait = 8 bit Bit yang paling kiri digunakan untuk tanda -/+ Notasi “2’s complement”

6

Jenis Data Primitif – Nyata (real) Digunakan untuk nombor yang mempunyai titik

perpuluhan Boleh ditulis dalam dua bentuk:

Bahagian integer.bahagian pecahan : contohnya 10.45 Eksponen : contohnya 2.3E4 yang bersamaan dengan

23,400 Nombor nyata biasanya diwakilkan sebagai real atau

float Ada bahasa yang menyediakan perwakilan nombor nyata

yang mempunyai ketepatan lebih tinggi seperti double dan long double

7

Jenis Data Primitif – Boolean Jenis data untuk mewakilkan nilai benar dan palsu Juga dipanggil jenis data logikal Pengoperasi jenis data ini adalah pengoperasi logikal,

termasuk DAN(AND), ATAU (OR), dan TIDAK (NOT). Kebiasaanya, ruang yang diumpukkan untuk menyimpan jenis

data boolean adalah 1 bait. Contoh implementasi dalam Java :

boolean flag=true;boolean flag = false

Bahasa C tiada jenis boolean, tetapi menggunakan perwakilan 0 bagi palsu, dan 1 bagi benar.

8

Jenis Data Primitif – Aksara Aksara boleh terdiri daripada abjad, digit, dan aksara istimewa Data aksara disimpan dalam bentuk kod numerik Ada dua jenis kod numerik yang popular:

ASCII – American Standard Code Information Interchange Unicode

Dalam kebanyakan bahasa pengaturcaraan misalnya C, setiap aksara disimpan di dalam 1 bait

Pada kebanyakan komputer 1 bait = 8 bit, maka sebanyak 28 = 256 perwakilan aksara boleh digunakan

Java menggunakan kod numeric Unicode yang menggunakan 16 bit untuk setiap perwakilan aksara lebih banyak simbol boleh diwakilkan

9

Jenis Data Komposit Terdiri daripada gabungan beberapa jenis data primitif Boleh diklasifikasikan kepada dua jenis:

Heterogeneous – elemennya terdiri dari jenis data berbeza Homogeneous – elemennya terdiri dari jenis data yang sama

Contoh jenis heterogeneous: rekod (Pascal) dan struktur (C) Contoh jenis homogeneous : tatasusunan dan rentetan Terdapat dua bentuk komposit:

Fixed-size – jenis data yang mana saiznya adalah tetap sepanjang perlaksanaan aturcara, seperti tatasusunan, rentetan, penunjuk, struktur, fungsi dan senarai

Dynamic-size – jenis data yang mana saiznya boleh berubah-ubah sepanjang perlaksanaan aturcara, bergantung kepada keperluan, seperti senarai terpaut, timbunan, dan giliran.

10

Jenis Data Komposit - Tatasusunan

Suatu koleksi 2 atau lebih sel ingatan yang bersebelahan, yang dipanggil elemen tatasusunan, yang dikaitkan dengan suatu nama simbolik untuk menyimpan suatu set data berjenis sama

Setiap elemen tatasusunan dirujuk menggunakan nama tatasusunan dan indeks atau subskrip seperti berikut:nama_tts[nilai_indeks] elemen

Contoh implementasi:Fortran: REAL class(8)C dan C++ : int class[5];

Indeks di dalam Fortran bermula dengan 1, bermakna class(1) merujuk elemen yang pertama, manakala indeks di dalam C bermula dengan 0, bermakna class[0] merujuk elemen pertama.

11

Jenis Data Komposit - Rentetan Jenis data yang mempunyai nilai suatu jujukan aksara Disokong oleh kebanyakan bahasa pengaturcaraan moden Terdapat beberapa pendekatan:

sebagai rentetan yang tiada had panjang - bahasa ML Sebagai tatasusunan aksara yang membolehkan setiap aksara

dalam rentetan dirujuk – C dan C++ Sebagai senarai aksara, yang membenarkan operasi yang sama

seperti di dalam senarai – Miranda dan Prolog Biasanya, beberapa operasi asas juga disediakan: seperti

mencipta rentetan, mengekstrak subrentetan, menyambungkan rentetan, dsb.

12

Jenis Data Komposit – Terangkaan Suatu set pemalar integer yang diwakilkan oleh pencam Contoh :

type hari (isnin, selasa, rabu, khamis, jumaat, sabtu, ahad)

yang mana:isnin = 1, selasa = 2, rabu = 3 , … dan seterusnya

Di dalam C, nilai integer bermula dengan 0, dan pernyataan yang setara adalah:

enum hari {isnin, selasa, rabu … } Nilai boleh bermula dengan suatu nilai lain jika dinyatakan,

contohnya :enum hari {isnin=1, selasa, rabu, … }

13

Jenis Data Komposit – Penunjuk Suatu pembolehubah berjenis penunjuk mengandungi alamat

lokasi suatu pembolehubah yang lain. Penunjuk boleh digunakan untuk merujuk kepada nilai suatu

pembolehubah secara tidak langsung Alamat boleh dioperasikan seperti entiti aritmetik yang lain; ia

boleh ditambah, ditolak, dibahagi dan didarab. Manipulasi keatas alamat ini boleh menimbulkan masalah

seperti ruang ingatan yang tidak boleh digunakan, menyebabkannya rosak, dan membawa kepada crash

Pembolehubah data berjenis penunjuk perlu diisytiharkan seperti pembolehubah lain

14

Jenis Data Komposit – Penunjuk Contoh dalam C:

int *pjk;

bermaksud bahawa suatu pembolehubah bernama pjk mengandungi alamat lokasi suatu pembolehubah lain yang berjenis integer.

Nilai awal kepada pembolehubah penunjuk boleh diumpukkan menggunakan pernyataan umpukan.

Contohnya, jika pengisytiharan adalah:int nom=3, *pjk;

Maka pernyataan umpukanpjk = &nom;

akan menyebabkan alamat lokasi bagi pembolehubah nom disimpan sebagai nilai kepada pjk

15

Jenis Data Komposit – Penunjuk Suatu data objek penunjuk boleh menunjuk kepada suatu data

objek penunjuk yang lain yang menunjuk kepada integer. Contoh:

int **pjkpjk; Setiap * mewakili setiap paras rujukan Contoh implementasi dalam C:

int nom=10, **pjkpjk;int *pjk = &nom;pjkpjk = &pjk

Penunjuk tidak digunakan dalam Java

16

Jenis Data Komposit – Struktur Suatu jenis data terbitan – dibina menggunakan objek-objek

data dari jenis yang berlainan Selalunya digunakan untuk menakrifkan rekod untuk disimpan

ke dalam fail. Contoh implementasi dalam C:

struct kursus {int kod;char gred; };

struct - pengenalan kepada definisikursus – penanda nama kepada struktur

Penanda nama digunakan untuk pengisytiharan pembolehubah berjenis struktur tersebut.

17

Jenis Data Komposit – Struktur Contoh pengisytiharan pembolehubah:

struct kursus pengaturcaraan; Pembolehubah pengaturcaraan mempunyai 2 ahli: kod dan

gred. Setiap ahli boleh dicapai dengan menyelitkan titik di antara

nama pembolehubah dan nama ahli seperti berikut:kursus.kod

Implementasi dalam Pascal dan Cobol menggunakan perkataan record

Cobol menyediakan kemudahan operasi rekod, seperti menyalin keseluruhan rekod secara terus:MOVE CORRESPONDING INPUT-RECORD TO OUTPUT-RECORD

18

Jenis Data Komposit – Senarai Mengandungi suatu susunan objek-objek yang boleh dirujuk

sebagai unsur pertama, unsur kedua, dan seterusnya. Kriteria senarai:

Panjang senarai boleh berubah-ubah. Senari biasanya mengecil dan berkembang di sepanjang perlaksanaan aturcara. Senarai yang tiada komponen (ahli) dipanggil senarai kosong

Senarai boleh berbentuk homogeneous atau hetergeneous Kemasukan pada senarai boleh samada satu objek, atau suatu

senarai lain Operasi biasa bagi senarai adalah penyelitan, penghapusan,

penentuan panjang senarai dan penentuan samada senarai adalah kosong.

19

Jenis Data Komposit – Senarai Senarai adalah struktur data yang penting dalam bahasa

fungsian, seperti LISP, ML, dan Prolog Unsur senarai dalam ML dan Prolog ditulis di antara [ dan ],

dan dipisahkan oleh , :

[1, 2, 3, 4][“ab”, “cd”, “ef”];

Unsur senarai dalam Scheme dan LISP ditulis di antara ( dan ):

( x y z )(x (a b c) () )

20

Jenis Data Komposit – Senarai Terpaut Suatu koleksi struktur yang saling merujuk antara satu sama

lain dan berbentuk linear. Unsur-unsur struktur dipanggil nod dan suatu nod

dihubungkan dengan nod yang lain oleh pautan Setiap nod mengandungi satu ahli penunjuk yang menunjuk

kepada suatu nod berjenis struktur yang sama Setiap senarai terpaut boleh dicapai melalui suatu penunjuk

yang menunjuk kepada nod pertama Pautan pada nod terakhir disetkan sebagai NULL Data disimpan ke dalam senarai terpaut secara dinamik

21

Jenis Data Komposit – Senarai Terpaut Contoh implementasi dalam C:

struct nod {int kod;char gred;struct nod *nextpjk; };

Seperti senarai, senarai terpaut mempunyai beberapa operasi asas: Penciptaan senarai terpaut Penciptaan nod baru Penyelitan nod ke dalam senarai terpaut Penghapusan nod dari senarai Penyemakan samada senarai terpaut kosong

22

Jenis Data Komposit – Senarai Terpaut Ruang ingatan untuk setiap nod dalam senarai terpaut

diumpukkan secara dinamik menggunakan fungsi malloc Contoh:

nodbaru = malloc(sizeof(struct nod)); Setiap kali sebuah nod baru ingin dicipta, ruang ingatan perlu

diumpukkan Begitu juga, setiap kali suatu nod dihapuskan, runga ingatan

yang telah diumpukkan kepadanya perlu dibebaskan, menggunakan fungsi free

Contoh :free(nodbaru);

23

Jenis Data Komposit – Timbunan Struktur data berbentuk linear yang hanya boleh

dicapai dari atas (LIFO) Mempunyai beberapa operasi asas:

Clear() – mengosongkan timbunan IsEmpty() – menyemak samada timbunan kosong IsFull() – menyemak samada timbunan penuh Push(unsur) – memasukkan unsur ke atas timbunan Pop() mengeluarkan unsur teratas timbunan

24

Pengikatan Jenis (Type Binding) Pengikatan – suatu hubungan, spt di antara atribut dengan

entiti atau di antara operasi dan simbol Masa pengikatan – masa berlakunya proses pengikatan Contoh : suatu pengisytiharan akan menghasilkan suatu

hubungan atau pengikatan di antara pencam yang diisytiharkan dengan entity (objek data) yang diwakilkannya.

int A; Diterjemahkan sebagai : Suatu lokasi yang boleh memegang

suatu nombor integer akan dicipta dan dirujuk menggunakan nama A

Pencam A diikat kepada lokasi tertentu ( yang hanya diketahui oleh pengkompil) dan jenis Integer

25

Pengikatan Jenis (Type Binding) Setiap objek data mempunyai pengikatan berikut:

Pengikatan nama – hubungan di antara objek data dengan nama pencam yang telah diisytiharkan

Pengikatan jenis – hubungan di antara objek data dengan jenis yang telah diisytiharkan

Pengikatan nilai – hubungan di antara objek data dengan nilai yang diumpukkan kepadanya

Pengikatan lokasi – hubungan di antara objek data dengan lokasi yang memegang nilai objek data tersebut

Terdapat 3 jenis pengikatan, yang berdasarkan kepada masa pengikatan: Pengikatan masa-kompil Pengikatan masa-muat Pengikatan masa -larian

26

Pengikatan masa-kompil Juga dikenali sebagai pengikatan statik, atau

pengikatan awal Berlaku apabila aturcara diterjemahkan kepada

bahasa mesin semasa kompilasi Pengikatan nama dan jenis adalah beberapa contoh

pengikatan masa-kompil

27

Pengikatan masa-muat Berlaku apabila kod mesin yang telah diterjemahkan

oleh pengkompil disimpan ke dalam lokasi-okasi ingatan

Pengikatan lokasi adalah tergolong dalam jenis ini Bergantung kepada bahasa, proses pengikatan ini

boleh berlaku secara statik, atau dinamik

28

Pengikatan masa-larian Juga dikenali sebagai pengikatan dinamik atau

pengikatan lewat. Ia berlaku semasa aturcara sedang dilarikan. Pengikatan nilai adalah tergolong dalam jenis ini

29

Pengikatan Jenis (Type Binding) Secara umumnya, lebih lambat berlakunya pengikatan itu, lebih

fleksibel suatu bahasa itu. Manakala, lebih awal pengikatan berlaku, lebih efisen suatu

bahasa itu. Setiap bahasa pengaturcaraan adalah berbeza dari segi atribut

yang mana diikat secara statik dan atribut yang mana diikat secara dinamik.

Bahasa fungsian misalnya, mengimplimenkan lebih banyak pengikatan dinamik berbanding bahasa imperatif

Contoh pengikatan statik:int x = 2;Nilai 2 dan jenis integer diikat secara static kepada objek data bernama x

30

Pengikatan Jenis (Type Binding) Contoh pengikatan dinamik:

main(){

int x;x = 10;

}Pernyataan umpukan x = 10 menyebabkan nilai 10 diikat secara dinamik kepada objek data bernama x.

31

Penyemakan Jenis (Type Checking) Suatu proses di mana penterjemah menyemak atau

menentukan samada semua pengumpukan pemalar, pembolehubah, fungsian dan sebagainya di dalam aturcara adalah sah dari segi jenisnya.

Contoh:Z = X + 5 * Y;Y mestilah suatu jenis yang membenarkan pendaraban dengan suatu integer, (5 * Y)

Proses penyemakan jenis melibatkan suatu pengujian kesamaan yang mengandungi petua-petua tertentu untuk menentukan samada dua jenis yang diuji adalah sama.

32

Penyemakan Jenis (Type Checking) Ujian ini digunakan untuk mengesan dan mengelak

ralat masa larian. Jika ujian ini tidak dilakukan, adalah menjadi

tanggungjawab pengaturcara sendiri untuk melakukan penyemakan jenis

Penyemakan jenis terdiri dari dua kategori, bergantung kepada masa berlakunya penyemakan tersebut: Penyemakan masa-kompil Penyemakan masa-larian

33

Penyemakan Masa-kompil Jenis disemak semasa kompilasi Ianya dilakukan oleh pengkompil yang menyemak

berdasarkan kepada pernyataan pengisytiharan setiap objek data.

Ia juga boleh dianggap sebagai penyemakan jenis statik, yang mana maklumat mengenai jenis suatu objek data ditentukan dan disemak semasa penterjemahan

Penyemakan jenis ini mudah diimplimenkan dan tidak memerlukan ruang ingatan dan masa yang banyak, tetapi menggunakan petua yang kompleks dan terhad

34

Penyemakan Masa-larian Jenis disemak semasa aturcara dilarikan, iaitu

setiap kali suatu objek data dalam aturcara dicapai.

Ia juga boleh dianggap sebagai penyemakan jenis dinamik.

Kaedah ini memerlukan masa dan runag ingatan yang tinggi kerana pengujian perlu dilakukan setiap kali suatu objek data dirujuk.

35

Penyemakan Jenis (Type Checking) Suatu bahasa pengaturcaraan dikatakan ‘sangat berjenis’

(strongly typed) jika kesemua pengujian jenis yang boleh dilaksana dilakukan semasa kompilasi manaka selebihnya disemak semasa aturcara dilarikan.

Dalam kes ini, kesemua objek data mesti mempunyai jenis yang ditakrifkan dengan baik, beserta dengan suatu set petua yang lengkap untuk membolehkan penyemakan jenis dilakukan semasa larian.

Secara amnya, penyemakan jenis boleh menjamin keselamatan data

Ada adalah satu contoh bahasa pengaturcaraan ayng ‘sangat berjenis’, manakala C adalah satu contoh bahasa pengaturcaraan yang ‘tidak begitu berjenis’.

36

Penyemakan Jenis (Type Checking) Pascal juga boleh dikategorikan sebagai suatu bahasa yang

‘sangat berjenis’ Salah satu proses yang penting dalam penyemakan jenis

adalan inferens jenis. Dalam proses ini, jenis bagi suatu ungkapan ditentukan atau

disimpulkan (inferred) berdasarkan kepada jenis subungkapannya.

Contoh:Jenis bagi ungkapan (A + B) adalah sama dengan jenis A, dan jenis B, sekiranya kedua-duanya sama.

37

Penukaran Jenis (Type Conversion) Dalam kes ini, kedua-dua jenis data boleh digabungkan untuk

menghasilkan ourput yang masih lagi betul. Inilah yang dikatakan jenis yang serasi (compatible)

Dalam penyataan di atas, selepas suatu nilai nyata diperolehi daripada B+3.15, nilai ini dipangkas untuk membentuk nilai integer yang akan diumpukkan kepada A.

Dalam suatu bahasa yang sangat berjenis seperti Modula-2, nombor-nombor nyata dan intger tidak boleh digabungkan dalam satu ungkapan aritmetik yang sama.

Jika di dalam Modula-2, pernyataan di atas akan menghasilkan ralat jenis.

Untuk itu, ia perlu ditulis sebegini:A = TRUNC (FLOAT(B) + 3.15);

38

Penukaran Jenis (Type Conversion) Penukaran jenis berlaku apabila jenis bagi dua objek data yang

dinilai adalah berbeza. Contoh :

A = B + 3.15; Dalam pernyataan umpukan di atas, ungkapan di sebelah

kanan iaiatu B + 3.15 perlu dinilai dan nilai yang diperolehi perlu diumpukkan ke sebelah kiri iaitu kepada A.

Andaikan A berjenis nyata, manakala B berjenis integer. Suatu nombor integer biasanya boleh diwakilkan dalam

bentuk nombor nyata. Oleh itu, jika nilai bagi B diungkapkan dalam bentuk nyata, hasil penilaian yang betul boleh diumpukkan kepada A.

39

Penukaran Jenis Implisit

Sesetengah bahasa pengaturcaraan melakukan penukaran jenis secara implisit.

Contoh dalam Pascal : x := y

Ungkapan adalah sah sekiranya y berjenis integer, dan x berjenis nyata

Nilai y akan ditukar ke bentuk nyata dan diumpukkan kepada x

40

Penukaran Jenis Implisit Contoh dalam Java :

Byte A, B, C;A = B + C;

Jenis byte, short dan char dalam Java adalah lebih kecil daripada int, maka ketiga-tiga jenis ini boleh ditukarkan kepada int.

B dan C ditukarkan kepada int, dan jumlah (B + C) kemudiannya ditukarkan semula kepada byte untuk disimpan di dalam A

41

Penukaran Jenis Implisit Contoh dalam C:

x = y + 2.5;

x dan y berjenis int. y ditukarkan ke bentuk nyata, hasil ( y + 2.5)

kemudiannya dipangkas untuk memberntuk int yang seterusnya disimpan di dalam x.

42

Penukaran Jenis Implisit Penukaran jenis secara implicit ini juga dirujuk sebagai

(coercion) ‘pemaksaan’. Satu kelebihan penukara secara implicit adalah kemudahan

kepada pengaturcara yang tidak perlu menulis kod tambahan untuk melakukan penukaran jenis.

Kelemahannya pula, kesilapan mungkin berlaku secara tidak sedar.

Contoh dalam PL/1:1/3 + 15 akan menghasilkan 5.33333333333333 pada sistem yang mempunyai ketepatan sehingga 15 digit. Ini adalah kerana berlaku limpahan yang disebabkan oleh kejituan yang mesti diutamakan.

43

Penukaran Jenis Implisit Contoh dalam C

avg = sum / count; Andaikan avg berjenis nyata, manakala sum dan count

berjenis int. Jika sum bernilai 15, manakala count bernilai 2, hasil

(sum / count) yang diumpukkan kepada avg adalah 7.0 dan bukannya 7.5.

Ini adalah kerana hasil pembahagian dipangkas dahulu untuk membentuk integer, keranan suatu integer dibahgai dengan integer menghasilkna integer juga.

Apabila bentuk ini ditukarkan kepada nyata, nilai yang diberikan tidak lagi tepat.

44

Penukaran Jenis Data Eksplisit Penukaran yang dilakukan dengan menaggil fungsi

yang dikhaskan untuk menukarkan jenis satu objek data kepada satu jenis yang lain.

Contoh dalam Pascal:trunc dan round

Contoh dalam Modula-2TRUNC dan FLOAT

Bahasa C menggunakan konsep acu, contohnya:int a;float b = 12.5;a = (int) b;

45

Tugasan 1 Adalah bahasa C dan Java mempunyai sistem

penyemakan yang kuat atau lemah ? Bagi setiap bahasa C dan Java, berikan contoh-contoh

di mana penyemakan dilakukan secara statik dan dinamik.