1 / 17

Bab 11

Bab 11. Tatasusunan. Kenapa Tatasusunan?. Tatasusunan membenarkan data dari jenis yang sama disimpan secara berjujukan

edric
Download Presentation

Bab 11

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Bab 11 Tatasusunan

  2. 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

  3. 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;

  4. 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?

  5. 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

  6. 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]

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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); }

  12. 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);

  13. 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); }

  14. 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); }

  15. 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”); }

  16. 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

  17. 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

More Related