1 / 29

Array dan Pointer

Array dan Pointer. Dr. Anto Satriyo Nugroho, M.Eng Email: asnugroho@gmail.com Web: http://asnugroho.net/lecture/ds.html. Agenda. Memahami program BUBBLE-SORT Array & Pointer Structure. C Program untuk Bubble Sort. void bubble_sort(int x[ ], int datanum) { int i,j; int tmp;

karim
Download Presentation

Array dan Pointer

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. Array dan Pointer Dr. Anto Satriyo Nugroho, M.Eng Email: asnugroho@gmail.com Web: http://asnugroho.net/lecture/ds.html

  2. Agenda • Memahami program BUBBLE-SORT • Array & Pointer • Structure

  3. C Program untuk Bubble Sort void bubble_sort(int x[ ], int datanum) { int i,j; int tmp; for(i=0;i<datanum-1;i++) for(j=datanum-1;j>i;j--) if( x[j-1] < x[j]) { tmp=x[j]; x[j]=x[j-1]; x[j-1]=tmp; } }

  4. #include <stdio.h> bubble_sort(int x[],int datanum) { int i,j; int tmp; for(i=0;i<datanum-1;i++) for(j=datanum-1;j>i;j--) if( x[j-1] < x[j]) { tmp=x[j]; x[j]=x[j-1]; x[j-1]=tmp; } } int main(void) { int i; int data[10]= {10,3,2,1,4,7,6,9,5,8}; bubble_sort(data,10); for(i=0;i<10;i++){ printf("%d %d\n",i,data[i]); } }

  5. Pointer • Saat komputer melakukan suatu perhitungan atau operasi, data akan disimpan di suatu tempat pada memory • Address: informasi yang menunjukkan dimana data itu berada dalam memory • Pointer: variabel khusus untuk menyimpan address char x; x =100; 1000 100 157 1001 1002 200 Akses ke address x dengan &x printf(“%p”,&x); 1003 1004 1005 memory address

  6. Deklarasi Pointer • Deklarasi pointer: tipe_data *nama_pointer; • Contoh: int *ptr; char *ptr; • Cara penulisan berikut diperbolehkan: int *ptr; int * ptr; int* ptr;

  7. Inisialisasi Pointer • Pointer bertugas menyimpan address, yang harus diset oleh programmer • Cara inisialisasi • Substitusikan address sebuah variabel ke pointer dengan memakai address operator & int x; int *ptr; ptr = &x; • Mensubstitusikan address awal sebuah array ke pointer char t[5]; char *ptr; ptr = t;

  8. Inisialisasi Pointer • Cara inisialisasi (lanjutan) • Mensubstitusikan address salah satu elemen array dengan address operator char t[5]; char *ptr; ptr = &t[3]; • Mensubstitusikan address awal character string ke pointer char char *ptr; ptr = ”jakarta” • Mensubstitusikan NULL pada pointer. NULL ada pointer kosong, menunjukkan suatu status dimana pointer itu belum diinisialisasikan dengan sebuah address tertentu. • Memakai fungsi MALLOC

  9. #include <stdio.h> • int main(void) • { • int x; • int *y; • printf(“masukkan nilai untuk x \n"); • printf("x: "); • scanf("%d",&x); • printf("x: %d\n",x); • printf(“address x : %p\n",&x); • printf(“Address x dimasukkan ke y \n"); • y=&x; • printf(“y berisi address %p\n",y); • printf(“isi *y%d\n",*y); • } Latihan 1

  10. #include <stdio.h> int main(void) { int aa,bb; int *pt; aa = 123; pt = &aa; bb = *pt; printf(“aa=%d *pt= %d bb=%d \n“, aa, *pt, bb); pt = &bb; *pt = 999; printf(“aa=%d *pt= %d bb=%d \n“, aa, *pt, bb); } Latihan 2

  11. pt 1000 1000 123 aa bb pt = &aa = 1000 bb = *pt = isi address 1000 = 123 1001 1002 1003 1004 1002 address memory

  12. pt 1000 1000 123 aa bb pt = &aa = 1000 bb = *pt = isi address 1000 = 123 1001 1002 123 1003 1004 1002 address memory printf(“aa=%d *pt= %d bb=%d \n“, aa, *pt, bb); aa =123 *pt =123 bb=123

  13. pt 1002 1000 123 aa bb pt = &bb = address bb = 1002 *pt = 999; 1001 1002 123 1003 1004 1002 address memory

  14. pt 1002 1000 123 aa bb pt = &bb = address bb = 1002 *pt = 999; 1001 1002 999 1003 1004 1002 address memory printf(“aa=%d *pt= %d bb=%d \n“, aa, *pt, bb); aa =123 *pt =999 bb=999

  15. Akses Array dengan Pointer char *p,x; x = 100; p = &x; *p = *(p+1) = *(p+2) = 1000 100 157 1001 1002 200 1003 1004 1002 address memory Akses ke address x dengan &x printf(“%p”,&x);

  16. Latihan 3 #include <stdio.h> int main(void) { int arr[10]={10,9,8,7,6,5,4,3,2,1}; int *ptr_arr; int i; for(i=0;i<10;i++) printf("%d\t%d\n",i,arr[i]); ptr_arr=arr; for(i=0;i<10;i++) printf("%d\t%d\t%d\t%d\t%d\n", i, ptr_arr[i], arr[i], *(ptr_arr+i), *(arr+i)); }

  17. Array vs Struct • Array : penampung sejumlah data sejenis (yang memiliki type data yang sama) dengan menggunakan satu identifier • Elemen array dapat diakses dengan menggunakan index, dari nol sampai n-1 (n: jumlah elemen array) Contoh : int x[5]; printf(“%d”,x[3]);

  18. Array vs Struct • Struct: struktur data yang menggabungkan beberapa data dengan tipe yang berbeda, tetapi berkaitan • Elemen struct dapat diakses dengan menggunakan dot operator dan arrow operator.

  19. Struct Gabungan beberapa variable dengan tipe yang berbeda struct NILAI { char nama[100]; float math; float biology; float geography; float english; float bi; float ratarata; }; struct NILAI p[10]; 学籍番号 名前 生年月日 体重 身長 学籍番号 名前 生年月日 体重 身長 学籍番号 名前 生年月日 体重 身長 学籍番号 名前 生年月日 体重 身長 学籍番号 名前 生年月日 体重 身長 nama Nilai math Nilai biology Nilai geography Nilai English Nilai Bhs.Indonesia Nilai rata-rata Deklarasi struct

  20. Struct Gabungan beberapa variable dengan tipe yang berbeda struct NILAI { char nama[100]; float math; float biology; float geography; float english; float bi; float ratarata; } p[10]; 学籍番号 名前 生年月日 体重 身長 学籍番号 名前 生年月日 体重 身長 学籍番号 名前 生年月日 体重 身長 学籍番号 名前 生年月日 体重 身長 学籍番号 名前 生年月日 体重 身長 nama Nilai math Nilai biology Nilai geography Nilai English Nilai Bhs.Indonesia Nilai rata-rata

  21. Cara akses ke elemen/field struct Akses langsung ke variable dengan.(dot operator) Akses lewat pointer dengan ->(arrow operator) struct CONTOH { int a; float b; } abcd; struct CONTOH x, *y; y=&x; address x ( &x)dimasukkan ke y Akses data dengan cara: x.a x.b y->a y->b (*y).a(*y).b sama sama y->a adalah singkatan dari (*y).a

  22. Contoh: Program Penghitung Rata-Rata • Selesaikan program penghitung rata-rata nilai matematika & biologi dari 10 anak • Output bukan pada layar, melainkan disimpan dalam file (ingat kembali File I/O) • Average: adalah fungsi menghitung rata-rata nilai tiap anak Source code: http://asnugroho.net/lecture/aldas2009/04-04.c File nilai: http://asnugroho.net/lecture/aldas2009/nilai.txt

  23. Latihan 4 #include <stdio.h> #include <stdlib.h> #define NUM_OF_STUDENT 10 // banyaknya siswa // structure definition struct NILAI { char name[100]; // nama float math; // nilai math float biology; // nilai biology float average; // rata-rata nilai math & biology };

  24. // Loading data void load_data(FILE *fp,struct NILAI x[]) { int i,j; // membaca data dari file baris per baris for(i=0;i<NUM_OF_STUDENT;i++) { if(fscanf(fp,"%s %f %f",&x[i].name,&x[i].math,&x[i].biology)!=3) { printf("banyaknya item tidak sesuai\n"); exit(1); } } }

  25. // menghitung average nilai (nilai math+nilai biology)/2 void average(struct NILAI x[]) { int i; for(i=0;i<NUM_OF_STUDENT;i++) x[i].average= (x[i].math + x[i].biology)/2; }

  26. // Sorting memakai bubble sort void bubble_sort(struct NILAI x[]) { int i,j; struct NILAI tmp; for(i=0;i<NUM_OF_STUDENT-1;i++) for(j=NUM_OF_STUDENT-1;j>i;j--) if( x[j-1].average < x[j].average) { tmp=x[j]; x[j]=x[j-1]; x[j-1]=tmp; } }

  27. // Tampilkan nama, nilai math, nilai biology dan average untuk tiap siswa void print_result(FILE *fp,struct NILAI x[]) { int i; for(i=0;i<NUM_OF_STUDENT;i++) fprintf(fp,"%s\t%f\t%f\t%f\n",x[i].name,x[i].math,x[i].biology,x[i].average); }

  28. // Main • int main() • { • FILE *fpi,*fpo; • char filename[100]; • struct NILAI p[NUM_OF_STUDENT]; • printf("nama file nilai: "); scanf("%s",filename); • if((fpi=fopen(filename,"r"))==NULL) { • printf("File %s tidak dapat dibuka \n",filename); • exit(1); • } • printf("nama file output:"); scanf("%s",filename); • if((fpo=fopen(filename,"w"))==NULL) { • printf("File %s tidak dapat dibuka \n",filename); • exit(1); • }

  29. load_data(fpi,p); // membaca file data nilai • average(p); // menghitung nilai rata-rata • fprintf(fpo,"nilai tiap siswa (sebelum dilakukan sorting)\n"); • print_result(fpo,p); // menampilkan nama, nilai math, nilai biology dan average • fprintf(fpo,"\n\n"); // ganti baris 2 kali • bubble_sort(p); // sorting dilakukan berdasarkan rata-rata nilai tiap siswa • fprintf(fpo,"nilai tiap siswa (sesudah dilakukan sorting)\n"); • print_result(fpo,p); // menampilkan nama, nilai math, nilai biology dan average • fclose(fpi); • fclose(fpo); • return(0); • }

More Related