180 likes | 435 Views
Bab 11. Tatasusunan. Kenapa Tatasusunan?. Tatasusunan membenarkan data dari jenis yang sama disimpan secara berjujukan
E N D
Bab 11 Tatasusunan
Kenapa Tatasusunan? • Tatasusunan membenarkan data dari jenis yang sama disimpan secara berjujukan • Andaikan anda menulis aturcara yang menerima markah 10 orang pelajar, mengira markah purata, dan seterusnya mencetak bilangan pelajar yang memperolehi markah lebih dari purata. • Jika anda hanya menggunakan satu pembolehubah untuk menyimpan kesemua 10 markah, bagaimana anda boleh mencapai semula markah bagi pelajar 1 .. pelajar 9 untuk menentukan bilangan pelajar yang mempeolehi markah lebih dari purata? • Salah satu cara menggunakan 10 pembolehubah yang unik untuk menyimpan 10 markah
Kenapa Tatasusunan? #include <stdio.h> void main() { int markah1, markah2, markah3, markah4, markah5, markah6, markah7, markah8, markah9, markah10; int bil = 0, jumlah = 0; float purata; printf(“\nBaca 10 markah ujian: \n”); scanf(“%d %d %d %d %d %d %d %d %d %d”, &markah1, &markah2, &markah3, &markah4, &markah5, &markah6, &markah7, &markah8, &markah9, &markah10); jumlah = markah1 + markah2 + markah3 + mrkah4 + markah5 + markah6 + markah7 + markah8 + markah9 + markah10; purata = (float) jumlah / 10;
Kenapa Tatasusunan? if (markah1 > purata) bil++; if (markah2 > purata) bil++; if (markah3 > purata) bil++; if (markah4 > purata) bil++; if (markah5 > purata) bil++; if (markah6 > purata) bil++; if (markah7 > purata) bil++; if (markah8 > purata) bil++; if (markah9 > purata) bil++; if (markah10 > purata) bil++; printf(“\nPurata keseluruhan markah = %.2f”, purata); printf(“\nBilangan markah yang melebihi purata = %d”, bil); } • Adakah ini cara yang terbaik? • Bagaimana sekiranya terdapat 100 orang pelajar?
Tatasusunan Satu Dimensi • Untuk masalah tadi, markah 10 orang pelajar boleh disimpan secara berjujukan dalam satu tatasusunan satu dimensi • Seperti pembolehubah yang lain, tatasusunan perlu diisytiharkan supaya ruang yang secukupnya diumpukkan dalam ruang ingatan • Sintaks pengisytiharan tatasusunan satu dimensi: jenis_data nama_tatasusunan[ungkapan]; • Ungkapan – nilai saiz bagi tatasusunan - boleh terdiri dari pemalar integer atau ungkapan yang menghasilkan suatu nilai integer - nilai ini juga dirujuk sebagai indeks atau subskrip - data yang disimpan dalam tatasusunan dipanggil unsur, dan dirujuk menggunakan indeks ini
Tatasusunan Satu Dimensi • Contoh: int markah[10]; • Pengumpukan ruang dalam ingatan boleh digambarkan seperti berikut: • Indeks dalam tatasusunan mesti bermula dengan 0 indeks terakhir dalam satu tatasusunan bersaiz n ialah [n-1] • Tatasusunan juga boleh diisytiharkan secara berganda, contohnya double ujian[100], kuiz[5], pep_akhir[50]; markah[0] markah[1] markah[2] 10 sel ingatan berjujukan berjenis int markah[3] ….. markah[9]
Awalan Unsur Tatasusunan • Nilai awal bagi unsur-unsur tatasusunan diumpukkan semasa pengisytiharan menggunakan senarai yang ditandakan dengan simbol ‘{‘ dan ‘}’ • Contoh: int bulan[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; • Jika senarai nilai awal lebih pendek dari saiz tatasusunan, unsur selebihnya diberi nilai awal 0 • Contoh: int bulan[12] = {31, 28, 31, 30}; bulan [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] 31 28 31 30 31 30 31 31 30 31 30 31 bulan [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] 31 28 31 30 0 0 0 0 0 0 0 0
Awalan dan Umpukan Tatasusunan • Jika saiz tatasusunan tidak dinyatakan semasa pengisytiharan, ruang akan disedakan berdasarkan kepada bilangan data dalam senarai nilai awal • Contoh: int bulan[ ] = {31, 28, 30, 31}; • Bentuk pernyataan umpukan yang melibatkan tatasusunan adalah sama seperti pernyataan umpukan biasa • Di sebelah kiri adalah lokasi dalam tatasusunan yang dirujuk menggunakan indeks • Di sebelah kiri adalah ungkapan yang boleh terdiri dari suatu pemalar, ataupun ungkapan yang menghasilkan suatu nilai tertentu bulan [0] [1] [2] [3] 31 28 31 30
Umpukan dan Capaian Tatasusunan • Maka, unsur-unsur dalam tatasusunan diumpukkan secara satu persatu • Contoh: bulan[ 7 ] = 30; unsur ke – 8 dalam tatasusunan bernilai 30 • Contoh pernyataan umpukan lain: A[ 2 ] = 2 * 2; M[ 2 ] = M[ 1 ] * 5; i = 0; j = 1; S[ 3*j ] = S[ i+2 ]; A [0] [1] [2] [3] A [0] [1] [2] [3] 1 2 4 4 1 2 3 4 M [0] [1] [2] [3] M [0] [1] [2] [3] 1 2 3 4 1 2 10 4 S [0] [1] [2] [3] S [0] [1] [2] [3] 1 2 3 4 1 2 3 3
Penggunaan Gelung • Struktur gelung digunakan untuk mencapai atau menyimpan data bagi setiap unsur dalam gelung • Contoh: for (i = 0; i <4; i++) A[i] = i * 2; : for (i = 3; i >=0; i--) printf(“Unsur ke - %d = %d\n”, i+1, A[i]); • Output: Unsur ke – 4 = 6 Unsur ke – 3 = 4 Unsur ke – 2 = 2 Unsur ke – 1 = 0 A [0] [1] [2] [3] 0 2 4 6
Contoh Penggunaan Tatasusunan #include <stdio.h> void main() { int markah[10]; int i, bil = 0, jumlah = 0; float purata; printf(“Baca 10 markah ujian:\n”); for (i = 0; i < 10, i++) { printf(“Masukkan markah %d : “, i); scanf(“%d”, &markah[i]); jumlah += markah[i]; } purata = (float) jumlah / 10; for (i = 0; i < 10; i++ ) { if (markah[i] > purata) bil++; } printf(“\nPurata keseluruhan markah = %.2f”, purata); printf(“\nBilangan markah yang melebihi purata = %d\n”, bil); }
Tatasusunan dan Fungsi • Tatasusunan boleh diisytiharkan sebagai sejagat dan setempat • Sejagat tidak perlu dihantar sebagai parameter • Setempat perlu dihantar sebagai parameter • Penghantaran tatasusunan boleh dalam dua jenis; unsur dan keseluruhan tatasusunan • Unsur tatasusunan dihantar menggunakan indeks, contohnya: cetak(markah[10], purata); • Keseluruhan tatasusunan dihantar hanya menggunakan nama tatasusunan, contohnya: input(markah);
Tatasusunan dan Fungsi (Contoh 1) #include <stdio.h> int markah[10]; void main() { float purata; int jumlah; : markah[9] = 25; : purata = (float) jumlah / 10; cetak(purata); : } void cetak( float a ) { printf(“Markah terakhir ialah %d\n Purata ialah %f\n”, markah[9], a); }
Tatasusunan dan Fungsi (Contoh 2) #include <stdio.h> void main() { int markah[10]; float purata; int jumlah; : markah[9] = 25; : purata = (float) jumlah / 10; cetak(markah[9], purata); : } void cetak( float a, float b ) { printf(“Markah terakhir ialah %d\n Purata ialah %f\n”, a, b); }
Tatasusunan dan Fungsi (Contoh 3) #include <stdio.h> void input(int []); void cetak(int []); void main() { int markah[10]; input(markah); cetak(markah); } void input( int markah[] ) { int i; for (i=0; i<10; i++) { printf(“Input markah pelajar ke %d : “, i + 1); scanf(“%d”, &markah[i]); } } Void cetak( int markah[] ) { int i; for (i=0; i<10; i++) { printf(“%d “, markah[i]); } printf(“\n”); }
Tatasusunan Dua Dimensi • Diandaikan seperti matriks yang mempunyai baris dan lajur • Sintaks pengisytiharan: jenis_data nama_tatasusunan[ungkapan1][ungkapan2]; • Contoh: int markah[100][10]; • Pengumpukan nilai awalan tatasusunan dua dimensi sama seperti dalam tatasusunan satu dimensi menggunakan senarai • Contoh: int segiempat[3][3] = {1, 2, 3, 4, 5 , 6, 7, 8, 9}; • Nilai diumpukkan secara baris dahulu segiempat [0] [1] [2] [0] 1 2 3 [1] 4 5 6 [2] 7 8 9
Tatasusunan Dua Dimensi • Pengumpukan nilai awalan juga boleh dilakukan dengan menggunakan senarai dalam senarai untuk mengasingkan baris dan lajur • Contoh: int segiempat[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}}; • Unsur dalam tatasusunan dua dimensi dirujuk menggunakan indeks baris dan lajur • Contoh: segiempat[1][2] = 0; segiempat [0] [1] [2] [0] 1 2 3 [1] 4 5 0 [2] 7 8 9