260 likes | 492 Views
BAB 8: TATASUSUNAN. Untuk menyimpan 4 nilai markah pelajar perlu 4 pembolehubah Contoh int mark1, mark2, mark3, mark4; Bagaimana jika terdapat 10, 50 atau 100 markah? Bg memudahkan guna tatasusunan. TATASUSUNAN. Satu struktur data mudah yg digunakan utk
E N D
Untuk menyimpan 4 nilai markah pelajar perlu 4 pembolehubah • Contoh int mark1, mark2, mark3, mark4; • Bagaimana jika terdapat 10, 50 atau 100 markah? • Bg memudahkan guna tatasusunan.
TATASUSUNAN • Satu struktur data mudah yg digunakan utk • Menyimpan sekumpulan data yang terdiri dpd jenis yang sama • Menggunakan satu pembolehubah sahaja utk dirujuk
Mengistihar Tatasusunan • Format • Jenis_data nama_tts[saiz elemen]; • int mark[4]; • Contoh: • Boleh melakukan umpukan nilai semasa pengitiharan • Jenis_data nama_tts[saiz elemen]={senarai data}; • Contoh • int mark[4] = {50, 40, 25, 30}; • int mark[ ] = {50, 40, 25, 30}; [0] [1] [2][3]
Merujuk Tatasusunan 50 40 25 30 [0] [1] [2][3] mark • Struktur yg terhasil • Kumpulan data dirujuk dengan menggunakan nama pembolehubah dan setiap item/elemen dalam kumpulan tersebut dirujuk melalui subskrip indek. mark[0] mark[1] mark[2] mark[3] • Cth : printf(“markah = %d”, mark[2]); subskrip Rujuk item pertama Rujuk item kedua Rujuk item ketiga Rujuk item keempat
Penggunaan Tatasusunan • Cth: float y[8]={7.7,5.6,4.1,2.5,1.0,7.7,18.7,9.9} katakan di beri a=1,b=2 maka => y[a] merujuk kepada y[a+b] merujuk kepada y[b-a] merujuk kepada
Menggunakan pernyataan umpukan: • utk mengumpukkan nilai kepada unsur-unsur yg dirujuk • cth: • y[3]=5.0; • y[b*a] = 10.5; • mengumpukkan unsur yg dirujuk kepada pembolehubah lain, katakan x dan z • cth: • x=y[b] • z=y[1]+y[3]; • Menggunakan dlm pengujian • cth: • if (y[2] >10) printf(“lebih besar”);
contoh menggunakan cara biasa: /* untuk mengira jumlah pelajar UTM bagi setiap tahun pengajian sessi 97/98*/ int jumlah; int tahun1, tahun2, tahun3, tahun4, tahun5; printf(“masukkan jumlah pelajar tahun 1\n”); scanf(“%d”, &tahun1); printf(“masukkan jumlah pelajar tahun 2\n”); scanf(“%d”, &tahun2); printf(“masukkan jumlah pelajar tahun 3\n”); scanf(“%d”, &tahun3); printf(“masukkan jumlah pelajar tahun 4\n”); scanf(“%d”, &tahun4); printf(“masukkan jumlah pelajar tahun 5\n”); scanf(“%d”, &tahun5); jumlah = tahun1 + tahun2 + tahun3 + tahun4 +tahun5;
Menggunakan Tatasusunan • int tahun[5]; • int jumlah =0; • for(i=0; i<5; i++) • { printf(“masukkan jumlah pelajar tahun %d”, i); • scanf(“%d”, &tahun[i]; • jumlah =+ tahun[i]; • }
Menghantar tatasusunan kpd fungsi • 2 cara:- • Menghantar kesemua elemen tatasusunan • Menghantar individu elemen tatasusunan • Penghantara individu elemen tatasusunan • Terbahagi 2 • Penghantaran nilai sebenar • Penghantaran alamat nilai
Menghantar individu elemen tatasusunan • Penghantaran nilai sebenar void main ( ) { Int mark[5]; : Nilai =Beza(mark[0], mark[1]); //pemanggil fungsi } int Beza (int a, int b) //takrifan fungsi { /* badan fungsi */ }
Menghantar individu elemen tatasusunan • Penghantaran alamat nilai • void main ( ) { • int mark[5]; • : • Beza(&nilai, &mark[0], &mark[1]); //pemanggil fungsi • } • void Beza(int *n, int *a, int *b) //takrifan fungsi • { • /* badan fungsi *? • }
Menghantar kesemua elemen tatasusunan • Jenis penghantaran alamat nilai • contoh void main ( ) { Int mark[5]; : KiraJumlah(mark); //pemanggil fungsi } void KiraJumlah(int markah[ ]) //takrifan fungsi { /* badan fungsi *? }
Rentetan dalam Tatasusunan • Rentetan dalam c diwakili oleh tatasusunan aksara • Pengistiharan char nama[30]; 0……………………….30 Menandakan berakhir rentetan \0
Rentetan dalam Tatasusunan • Char nama [ ] = {‘a’, ‘n’, ‘a’} • Char nama [ ] = “ana” • printf dan scanf boleh menggunakan argumen rentetan samada sebagai input atau output dengan meletakan format %s. Contohnya : • char names[30] • scanf(“%s”,names); • printf(“%s”, names);
Penunding • In program in memory • int x = 100; x 100 1245060 Nama pembolehubah nilai alamat Output 100 printf(“%d”, x); Printf(“%d”, &x); 1245060 Alamat bagi pembolehubah dirujuk menggunakan tanda &
Penunding In Memory a 1245066 b 1245067 • Pembolehubah char mengambil ruang 1 byte • Output - 1245066 1245067 • Pembolehubah integer dan float mengambil ruang 4 byte (bergantung kpd komputer) • Output – 1245060 1245064 char a, b, printf(“%d %d”, &a, &b); In Memory a 1245060 b 1245064 int a, b, printf(“%d %d”, &a, &b);
Pembolehubah Penunding • Pembolehubah yang telah kita pelajari ialah pembolehubah nilai (menyimpan nilai bagi jenis data tertentu) • Pembolehubah penunding ialah pembolehubah yang menyimpan alamat cth P dibawah. a 50 1245066 P 1245066 Physical representation a 50 P Logical representation
Mencapai nilai pembolehubah menggunakan penunding • Untuk mencapai pembolehubah menggunakan penunding P *P • Katakan nilai a ingin ditambah 1 • a++; • a=a+1; • *P = *P + 1; • (*P)++; a 50 P
sebelum selepas pernyataan Q P a 50 Q P a 51 a= a+1 Q P a 51 Q P a 54 *P = *P + 3 Q P a 54 Q P a 108 a = *P + *Q
Pengistiharan pembolehubah penunding • Format • Jenis * nama_pembolehubah_penunding • cth int * p; p menunding kpd pembolehubah/ nilai berjenis integer P a 50
Pengistiharan pembolehubah penunding • cth • char * Q; Q menunding kpd pembolehubah/ • nilai berjenis char • float * FL; FL menunding kpd pembolehubah/ • nilai berjenis float Q hrf ‘Z’ FL nom 2.51
Umpukan kpd pembolehubah penunding • In program • int *p, *q; • int a, b; In memory p q a b 10 15 12450 - p = &a; a = 10; q = p; *q = *p + 5; q = &b;
Umpukan kpd pembolehubah penunding • In program • int *p, *q; • int a, b; In memory p q a b 10 17 12450 15 - p = &a; a = 10; q = p; *q = *p + 5; q = &b; *q = *p + 2; printf(“%d %d”, a, b); output : 15 17 printf(“%d %d”, *p, *q); 15 17 printf(“%d”, &a); 12450 Printf(“%d”, p); 12450