bab 11

17
1 Bab 11 Tatasusunan

Upload: edric

Post on 18-Mar-2016

54 views

Category:

Documents


1 download

DESCRIPTION

Bab 11. Tatasusunan. Kenapa Tatasusunan?. Tatasusunan membenarkan data dari jenis yang sama disimpan secara berjujukan - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Bab 11

1

Bab 11

Tatasusunan

Page 2: Bab 11

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

Page 3: Bab 11

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;

Page 4: Bab 11

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?

Page 5: Bab 11

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

Page 6: Bab 11

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[9]

markah[2]

markah[3]

…..

10 sel ingatan berjujukan berjenis int

Page 7: Bab 11

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};

31 3028 31 0 0 0 0 0 0 0 0

[0] [2][1] [3] [4] [6][5] [7] [8] [10][9] [11]bulan

31 3028 31 30 3131

31 30 3131 30

[0] [2][1] [3] [4] [6][5] [7] [8] [10][9] [11]bulan

Page 8: Bab 11

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

31 3028 31

[0] [2][1] [3]bulan

Page 9: Bab 11

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 ];

1 4 2 4

[0] [2][1] [3] A

1 4 2 3

[0] [2][1] [3] A

1 4 2 3

[0] [2][1] [3] M

1 4 2 10

[0] [2][1] [3] M

1 4 2 3

[0] [2][1] [3] S

1 3 2 3

[0] [2][1] [3] S

Page 10: Bab 11

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

0 6 2 4

[0] [2][1] [3] A

Page 11: Bab 11

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

}

Page 12: Bab 11

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

Page 13: Bab 11

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

}

Page 14: Bab 11

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

}

Page 15: Bab 11

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”);

}

Page 16: Bab 11

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

1 2 3

[0] [2][1] segiempat

4 5 6

7 8 9

[0]

[1]

[2]

Page 17: Bab 11

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;

1 2 3

[0] [2][1] segiempat

4 5 0

7 8 9

[0]

[1]

[2]