UNIT 1 PENGENALAN KEPADA ALGORITMA & STRUKTUR DATA Konsep Algoritma Struktur Data Dalam Pengaturcaraan Definisi Struktur Menyatakan Ahli Suatu Struktur Tatasusunan Struktur Struktur Bersarang
1.1 Konsep Algoritma Algoritma merupakan satu senarai langkah-langkah bagi menyelesaikan sesuatu masalah. Masa dan ruang merupakan ukuran penting dalam satu-satu algotima yang efisyen. Setiap satu algoritma dalam menyelesaikan masalah akan melibatkan struktur data tertentu. Dalam kes tertentu, kadangkala algoritma yang digunakan adalah tidak efisyen bergantung kepada pilihan struktur data dan juga sekerap mana operasi ke atas data dilakukan. Kadangkala, pilihan kepada struktur data mengambilkira ruang-masa; dgn meningkatnya jumlah ruang bagi penyimpanan data, masa untuk memproses data akan berkurang dan sebaliknya. Menulis algoritma untuk menyelesaikan masalah Senarai langkah demi langkah bagi arahan yang baik dan tersusun dalam menyelesaikan sesuatu masalah Contoh:- Satu tatasusunan; DATA yang menyimpan nilai numeric dalam ingatan. Carian ke atas lokasi; LOK dan juga nilai elemen terbesar; MAKS di dalam tatasusunan perlu dilakukan. Penyelesaian:- Setkan nilai awal LOK = 1, MAKS = DATA[1]. Bandingkan nilai MAKS dengan setiap elemen yang terkandung di dalam tatasusunan DATA[k]. Jika DATA[k] melebihi nilai MAKS, maka nilai bagi LOK dan MAKS dikemaskini supaya LOK = k dan MAKS = DATA[k]. Nilai akhir yang disimpan dalam LOK dan MAKS memberikan lokasi dan nilai/elemen terbesar dalam tatasusunan DATA. Penulisan algoritma (Carian Elemen terbesar dalam tatasusunan). Sebuah tatasusunan DATA yang tidak kosong dengan nilai N diberikan. Algoritma berikut digunakan untuk mencari lokasi; LOK dan juga nilai elemen terbesar; MAKS dalam tatasusunan DATA. Pembolehubah k digunakan sebagai pembilang. 1.0 Set k = 1, LOK = 1, MAKS = DATA[1] 2.0 Set k = k + 1 3.0 If ( k > N) Cetak LOK, MAKS dan EXIT 4.0 If (MAKS < DATA[k]) Set LOK = K, MAKS = DATA[k] 5.0 Ulang langkah 2.0 2
Format penulisan algoritma dibahagikan kepada 2 bahagian. Bahagian pertama ialah perenggan yang menerangkan tujuan algoritma, mengenalpasti pembolehubah yang digunakan dalam algoritma dan senarai data yang akan diinput. Bahagian kedua algoritma mengandungi senarai langkah yang akan dilaksanakan untuk menyelesaikan masalah. MULA k=1, LOK=1, MAKS=DATA[1] k = k + 1 k > N Benar LOK, MAKS Palsu Palsu MAKS < DATA[k] TAMAT Benar LOK = k MAKS = DATA[k] 1.2 Struktur Data Dalam Pengaturcaraan Data mungkin diselenggara dalam pelbagai cara; samada secara logikal atau model matematik dalam organisasi ke atas data. Struktur (Structure) dalam bahasa C++ diwakili oleh katakunci struct yang menunjukkan kepada struktur data untuk membenarkan pelbagai jenis data disimpan dalam satu nama. Walaupun jenis data ini berbeza, tetapi ia saling berkait antara satu sama lain. Tatasusunan merupakan satu bentuk struktur data tetapi data yang disimpan adalah dari jenis yang sama. Contoh-contoh struktur data seperti tatasusunan(array), senarai berpaut(linked list), pepohon(tree), tindanan(stack) dan baris-gilir(queue). Istilah-istilah yang digunakan dalam struktur data:- Data merupakan nilai / set nilai-nilai tertentu Item Data merujuk kepada satu unit nilai Item Kumpulan Item data yang dipecahkan kepada sub-sub item Item Elementary Item data yang tidak dipecahkan 3
Contoh:- Nama (Item Data) boleh dipecahkan kepada NamaPertama dan NamaAkhir tetapi NoK/P wujud sebagai satu item tunggal iaitu tidak boleh dipecahkan. Koleksi data biasanya diorganisasikan kepada bentuk hirarki medan > rekod > fail (fields > record > file). Entiti mempunya beberapa atribut / set ciri-ciri yang menyimpan nilai tertentu. Nilai tersebut mungkin dalam bentuk numerik atau bukan numerik. Contoh:- Entiti PELAJAR Atribut Nama Umur Jantina NoK/P Nilai Fatimah 20 P 870101-08-5962 Beberapa entiti yang mempunyai atribut yang sama membentuk set entiti. Setiap atribut dalam set entiti mewakili nilai yang pelbagai. Cara data disusun / diorganisasikan kepada bentuk hirarki medan > rekod > fail mempunyai persamaan dengan hubungan atribut > entiti > set entiti. Di mana, Medan 1 unit maklumat (atribut) Rekod koleksi medan-medan (entiti) Fail koleksi rekod bagi entiti (set entiti) 1.3 Definisi struktur Struktur adalah koleksi data yang berkaitan menggunakan satu nama yang sama. Elemen struktur dikenali sebagai ahli, dan boleh terdiri dari jenis yang berbeza. Setiap struktur yang telah ditakrifkan boleh mempunyai nama struktur yang sama yang dikenali sebagai tag struktur. Untuk menakrifkan struktur, gunakan penyataan struct. Ia menakrifkan jenis data yang baru dan mempunyai lebih daripada satu ahli. Sintaks : struct [tag struktur] takrifan ahli; pembolehubahstruktur; Setiap takrifan ahli adalah takrifan pembolehubah yang normal, seperti int i atau float sales[20] atau sebarang penakrifan pembolehubah yang sah, termasuklah penunjuk pembolehubah jika sesuatu struktur memerlukan penunjuk sebagai ahli. Pada akhir penakrifan struktur, sebelum koma bertindih (;) terakhir, anda boleh menyatakan satu atau lebih pembolehubah struktur. Jika anda menyatakan pembolehubah struktur, anda meminta C untuk menyediakan ruang untuk pembolehubah tersebut dan jenis pembolehubah di dalam struktur. 4
Rekod Rekod Pelajar Rekod Pekerja Rekod Pelanggan Rekod Penumpang Rekod Inventori Setiap REKOD mempunyai LOKASI data yang tersendiri Dalam Bahasa C Rekod = struktur Lokasi = ahli data (pembolehubah) Rekod Pekerja - No Pekerja - Nama Penuh - Jawatan - Gaji asas Contoh : Rekod Pelajar Lokasi : No Kad Pengenalan Nama Penuh Nama Diploma Nombor Semester CGPA Pengisytiharan Pembolehubah char NoKP[15]; char NamaPenuh[35]; char NamaDiploma[15]; int NomborSemester; float CGPA; Takrifan Struktur: struct RekodPelajar char NoKP[15]; char NamaPenuh[35]; char NamaDiploma[15]; int NomborSemester; float CGPA; pelajar; Lokasi Memori struct RekodPelajar char NoKP[15]; char Nama Penuh[35]; char NamaDiploma[15]; int NomborSemester; float CGPA; pelajar; Tag Struktur Ahli Data Pembolehubah Struktur 5
Perwakilan Memori Pelajar NoKP NamaPenuh NamaDiploma NomborSemester CGPA Rujukan Lokasi Lokasi bagi ahli struktur dirujuk menggunakan dot operator. Sintaks : pembolehubahstruktur. ahlistruktur Pelajar Dot operator NoKP NamaPenuh NamaDiploma NomborSemester CGPA Lokasi ini (atau ahli data) dirujuk sebagai : pelajar.namapenuh Pengisytiharan Struktur #include <iostream.h> void readrecord(); void printrecord(); struct RekodPelajar char NoKP[15]; char NamaPenuh[35]; char NamaDiploma[15]; pelajar; Struktur ditakrifkan sebelum fungsi main() main() bacarekod(); cetakrekod(); void bacarekod() cout<< "Masukkan Nombor KP : "; cin>> pelajar.nokp; cout<< "Masukkan Nama : "; cin>> pelajar.namapenuh; cout<< "Masukkan Nama Diploma: "; cin<< pelajar.namadiploma; void cetakrekod() cout<<"nombor KP Anda : "<< pelajar.nokp<<endl; cout<<"nama Anda : "<< pelajar.namapenuh<<endl; cout<<"nama Diploma : "<< pelajar.namadiploma<<endl; 6
Penggunaan typedef dalam struktur typedef struct char NoKP[15]; char NamaPenuh[35]; char NamaDiploma[15]; int NomborSemester; float CGPA; pelajar; main() pelajar JTMK; int jabatan; // struct tidak dinyatakan semasa memanggil tagstruktur 1.4 Menyatakan Ahli sesuatu struktur Terdapat 2 cara untuk menakrifkan ahli sesuatu struktur. 1. Semasa penakrifan pembolehubah struktur 2. Di dalam badan aturcara Pendekatan yang lebih baik untuk menyatakan ahli struktur adalah dengan menggunakan dot operator (.). Sintaks : namapembolehubahstruktur.namaahli Dot operator Ia memberikan satu cara untuk menyatakan ahli individu sesuatu pembolehubah struktur di dalam badan aturcara. Nama pembolehubah struktur mestilah selalu diletakkan sebelum dot operator, dan nama ahli struktur selepas dot operator. 7
Contoh: struct KoleksiCD char Tajuk[15]; char Artis[35]; int JumLagu; float Harga; char TarikhBeli[15]; CDPertama = Arah, Rabbani, 10, 29.50, 16/12/1998 ; CDPertama Tajuk Artis JumLagu Harga TarikhBeli Arah Rabbani 10 29.50 16/12/1998 Kandungan Paparan CDPertama Tajuk Artis JumLagu Harga TarikhBeli Arah Rabbani 10 29.50 16/12/1998 cout<< Koleksi CD Pertama Saya << endl; cout<< Tajuk CD : << CDPertama.Tajuk << endl; cout<< Artis : << CDPertama.Artis << endl; cout<< Jumlah Lagu : << CDPertama.JumLagu << endl; cout<< Harga (RM) : << CDPertama.Harga << endl; cout<< TarikhBeli : << CDPertama.TarikhBeli << endl; 8
Templet Struktur Menakrifkan struktur tanpa pembolehubah struktur. Penyelesaian kepada masalah struktur setempat dan sejagat. Menakrifkan semua pembolehubah struktur hanya kepada fungsi yang memerlukannya. struct KoleksiCD char Tajuk[15]; char Artis[35]; int JumLagu; float Harga; char TarikhBeli[15]; ; Pembolehubah Struktur Tiada pembolehubah struktur di sini struct KoleksiCD char Tajuk[15]; char Artis[35]; int JumLagu; float Harga; char TarikhBeli[15]; pertama, kedua, ketiga; Pembolehubah Struktur pertama.tajuk pertama Tajuk Artis JumLagu Harga TarikhBeli Arah Rabbani 10 29.50 16/12/1998 kedua.artis kedua Tajuk Artis JumLagu Hrga TarikhBeli Raihan Raihan 10 29.50 5/11/1999 ketiga.jumlagu ketiga Tajuk Artis JumLagu Harga TarikhBeli Ellite Ellite 10 15.50 10/5/1997 9
1.5 Tatasusunan Struktur Adalah satu senarai rekod. Anda boleh menggunakan mycd[ ] (pembolehubah struktur) jika anda tidak tahu berapa banyak ruang yang diperlukan untuk menyimpan data bagi sesuatu struktur. Contoh : struct KoleksiCD char Tajuk[15]; char Artis[35]; int JumLagu; float Harga; char TarikhBeli[15]; mycd[5]; mycd mycd[3].harga [0] [1] [2] [3] [4] Tajuk Artis JumLagu Harga TarikhBeli mycd[1].artis Operasi input terhadap unsur pertama tatasusunan ialah: cin>> mycd[0].tajuk; cin>> mycd[0].artis; cin>> mycd[0].jumlagu; cin>> mycd[0].harga; cin>> mycd[0].tarikhbeli; Operasi output terhadap unsur pertama tatsusunan ialah: cout<< Tajuk CD : << mycd[0].tajuk<< endl; cout<< Artis : << mycd[0].artis<< endl; cout<< Jumlah Lagu : << mycd[0].jumlagu<< endl; cout<< Harga : << mycd[0].harga<< endl; cout<< Tarikh Beli : << mycd[0].tarikhbeli<< endl; Untuk menjadikan proses input dan output lebih mudah, penggunaan strukutr kawalan gelung digunakan. for( i = 0; i < 5; i++ cout<< Tajuk CD : << mycd[0].tajuk<< endl; cout<< Artis : << mycd[0].artis<< endl; cout<< Jumlah Lagu : << mycd[0].jumlagu<< endl; cout<< Harga : << mycd[0].harga<< endl; cout<< Tarikh Beli : << mycd[0].tarikhbeli<< endl; 10
Contoh aturcara yang menggunakan tatasusunan struktur #include<iostream.h> #include<string.h> #define BIL 3 void main() /* Pengisytiharan struktur pelajar yang mengandungi pelbagai ahli yang berlainan jenis data */ struct pelajar char nama[20]; char nopendf[11]; char kelas[5]; int tahun; float hpnm; pelajar_dit[bil]; /* istihar struktur berjenis tatasusunan */ int i; // Umpuk nilai ke dlm struct melalui input dr pengguna for( i = 0; i <= BIL; i++ ) cout<< Nama Pelajar : ; cin>>pelajar_dit[i].nama; cout<< No Pendaftaran : ; cin>>pelajar_dit[i].nopendf; cout<< Kelas : ; cin>>pelajar_dit[i].kelas; cout<< Tahun Pengajian : ; cin>>pelajar_dit[i].tahun; cout<< Nilai HPNM : ; cin>>pelajar_dit[i].hpnm; // Cetak maklumat rekod pelajar for( i = 0; i <= BIL; i++ ) cout<< Maklumat Pelajar <<i<<endl; cout<< Nama Pelajar : <<pelajar_dit[i].nama<<endl; cout<< No Pendaftaran : <<pelajar_dit[i].nopendf<<endl; cout<< Kelas : <<pelajar_dit[i].kelas<<endl; cout<< Tahun Pengajian : <<pelajar_dit[i].tahun<<endl; cout<< HPNM : <<pelajar_dit[i].hpnm<<endl; cout<<endl; 11
1.6 Struktur Bersarang Menakrifkan ahli biasa hanya sekali di dalam struktur mereka sendiri dan kemudian menggunakan struktur tersebut sebagai satu ahli dalam struktur yang lain. Sintaks : STRUKTUR LUAR /*ahli struktur luar */ STRUKTUR DALAM Contoh Pengisytiharan Struktur Bersarang : struct tarikh int hari; int bulan; int tahun; ; struct cuti char nopekerja[10]; struct tarikh haribulan; ; Contoh aturcara: #include<iostream.h> #include<string.h> #define SUBJEK 3 main() typedef struct pelajar char nama[30]; char nopendf[11]; char nokp[14]; struct markah_pelajar; it; struct Markah float markah; char kodsubj[5]; markah_pelajar[3]; pelajar it; cout<< Nama Pelajar : ; cin>>it.nama; cout<< No pendaftaran : ; cin>>it.nopendf; cout<< No K/Pengenalan : ; cin>>it.nokp; for (int i=1; i<subjek; i++) cout<< Kod Subjek : << i << : ; cin>>markah_pelajar[i].kodsubj; cout<< Markah : << i << : ; cin>>markah_pelajar[i].markah; return 0; 12