jawaban pr 01
Download
Skip this Video
Download Presentation
Jawaban PR-01

Loading in 2 Seconds...

play fullscreen
1 / 41

Jawaban PR-01 - PowerPoint PPT Presentation


  • 160 Views
  • Uploaded on

Jawaban PR-01. Dr. Anto Satriyo Nugroho, M.Eng Email: [email protected] Web: http://asnugroho.net. // Tugas pemrograman struktur data ke-01 #include <stdio.h> #include <stdlib.h> #define NUM_OF_STUDENT 10 // banyaknya siswa // structure definition struct NILAI {

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Jawaban PR-01' - anjolie-tate


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
jawaban pr 01

Jawaban PR-01

Dr. Anto Satriyo Nugroho, M.Eng

Email: [email protected]

Web: http://asnugroho.net

slide2

// Tugas pemrograman struktur data ke-01

#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

};

slide3

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

}

}

}

slide4

// menghitung average nilai (nilai math+nilai biology)/2

void average(struct NILAI x[])

{

int i;

// selesaikan bagian ini

for(i=0;i<NUM_OF_STUDENT;i++)

x[i].average= (x[i].math + x[i].biology)/2;

}

slide5

// Sorting memakai bubble sort

void bubble_sort(struct NILAI x[])

{

int i,j;

// selesaikan bagian ini

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;

}

}

slide6

// Tampilkan nama, nilai math, nilai biology dan average untuk tiap siswa

void print_result(FILE *fp,struct NILAI x[])

{

int i;

// selesaikan bagian ini

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

}

slide7

// 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);
      • }
slide8

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 untuk tiap siswa
      • 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 untuk tiap siswa
      • fclose(fpi);
      • fclose(fpo);
      • return(0);
  • }
pemrograman dalam bahasa c pointer struct

Pemrograman dalam Bahasa C : POINTER & STRUCT

Dr. Anto Satriyo Nugroho, M.Eng

Email: [email protected]

Web: http://asnugroho.net

pointer
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

deklarasi pointer
Deklarasi Pointer
  • Deklarasi pointer: tipe_data *nama_pointer;
  • Contoh:

int *ptr;

char *ptr;

  • Cara penulisan berikut diperbolehkan:

int *ptr;

int * ptr;

int* ptr;

inisialisasi pointer
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;

inisialisasi pointer1
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
slide14

#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 2-1

slide15

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

slide16

pt

1000

1000

123

aa

bb

pt = &aa = 1000

bb = *pt = isi address 1000 = 123

1001

1002

1003

1004

1002

address

memory

slide17

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

slide18

pt

1002

1000

123

aa

bb

pt = &bb = address bb = 1002

*pt = 999;

1001

1002

123

1003

1004

1002

address

memory

slide19

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

akses array dengan pointer
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);

p 133
p.133

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

}

Latihan 2-3

manajemen memory dinamis memakai fungsi malloc
Manajemen memory dinamismemakai fungsi malloc
  • Cara alokasi memory yang telah dipelajari
    • int a; hanya mengalokasikan sebuah
    • int a[10]; hanya mengalokasikan 10 buah
  • Setelah pemakaian selesai, memory yang dialokasikan tidak dapat dibebaskan
  • Dua fungsi untuk mengatasi masalah tsb: malloc() dan free()
malloc
malloc
  • Mampu mengalokasikan tempat di memory hanya pada saat dan pada jumlah yang diperlukan saja
  • Saat dialokasikan, akan diperoleh array kosong
  • Cara pemakaian:

void *malloc(unsigned int size)

argumen: banyaknya byte yang dialokasikan

return value: pointer ke elemen pertama

Contoh : alokasi 100 byte dengan pointer p menunjuk ke elemen pertama

Jawab:

int *p

p = malloc(100);

int hanya sekedar contoh. Boleh saja memakai float, char, dsb.

slide24
free
  • Mampu membebaskan memory yang dialokasikan oleh fungsi malloc, sehingga bisa dipakai untuk tujuan lain
  • Cara pemakaian:

void free(void *nama_pointer)

argumen: pointer ke memory yang ingin dibebaskan

return value: tidak ada (void)

Contoh : bebaskan memory yang dialokasikan dengan malloc, dan dimulai

dari address yang ditunjukkan oleh pointer p

Jawab:

free(p);

contoh pemakaian
Contoh pemakaian(1)

cast

char *x;

x=(char *) malloc(1000*sizeof(char));

proses komputasi

free(x);

alokasi 1000 byte

char 1 byte

Ruang di memory sebesar 1000 byte→

x[1000]telah dialokasikan!

operator cast dan sizeof
Operator cast dan sizeof
  • Cast

Operasi untuk mengubah tipe data

float x;

int y;

y=(int) x;

  • sizeof

fungsi untuk menghitung ukuran tipe data pada argumen dalam satuan byte, dan hasilnya menjadi return value

sizeof(int) = 4

sizeof(char) = 1

contoh pemakaian 2
Contoh pemakaian(2)

cast

int *y;

y=(int *) malloc(1000*sizeof(int));

proses komputasi

free(y);

alokasi 4000 byte

int 4 byte

Ruang di memory sebesar 4*1000=4000 byte→

y[1000]telah dialokasikan!

slide28

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

int i;

int x[5];

int *y;

for(i=0;i<5;i++) x[i]=0;

for(i=0;i<5;i++) {

printf(“Masukkan %d",i);

scanf("%d",&x[i]);

}

for(i=0;i<5;i++) printf("%d %d\n",i,x[i]);

y=(int *)malloc(5*sizeof(int));

printf("---------------------\n");

for(i=0;i<5;i++) y[i]=x[i];

for(i=0;i<5;i++) printf("%d %d\n",i,y[i]);

free(y);

}

Latihan 2-4

Untuk pemakaian malloc

slide29

x[0]

x[1]

x[2]

x[3]

x[4]

y[0]

y[1]

y[2]

y[3]

y[4]

array vs struct
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]);

array vs struct1
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.
struct
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

struct1
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

struct pemakaian typedef
STRUCT: pemakaian typedef

Gabungan beberapa variable dengan tipe yang berbeda

typedef struct {

char nama[100];

float math;

float biology;

float geography;

float english;

float bi;

float ratarata;

} nilai_siswa;

nilai_siswa p[10];

学籍番号

名前

生年月日

体重

身長

学籍番号

名前

生年月日

体重

身長

学籍番号

名前

生年月日

体重

身長

学籍番号

名前

生年月日

体重

身長

学籍番号

名前

生年月日

体重

身長

nama

Nilai math

Nilai biology

Nilai geography

Nilai English

Nilai Bhs.Indonesia

Nilai rata-rata

cara akses ke elemen field struct
Cara akses ke elemen/field STRUCT

Akses langsung ke variable dengan.(dot operator)

Akses lewat pointer dengan ->(arrow operator)

y=&x; address x ( &x)dimasukkan ke y

Akses data dengan cara:

x.a x.b

y->a y->b

(*y).a(*y).b

struct CONTOH {

int a;

float b;

} abcd;

struct CONTOH x, *y;

sama

sama

y->a adalah singkatan dari (*y).a

malloc struct
malloc STRUCT

typedef struct {

int x;

int y;

} abcd;

void main(){

abcd *p;

p=(abcd*)malloc(n*sizeof(abcd));

proses komputasi

free(p);

}

pointer ke elemen pertama

Space yang harus dialokasikan sebesar

N x (banyaknya byte untuk type data abcd)

Alokasi untuk p[n]

pengecekan error untuk malloc struct
Pengecekan error untuk malloc STRUCT

typedef struct {

int x;

int y;

} abcd;

void main(){

abcd *p;

p=(abcd*)malloc(n*sizeof(abcd));

if (p==NULL){

printf(“alokasi memory tidak berhasil\n”);

exit(1);

}

proses komputasi

free(p);

}

Kalau alokasi gagal, malloc akan mengembalikan NULL

latihan
Latihan

Latihan 2-5

#include <stdio.h>

#include <stdlib.h>

#define NUM 5

struct DATAFISIK {

float tinggi;

float beratbadan;

} ;

void tampilkandata(struct DATAFISIKp[],int n)

{

int i;

for(i=0;i<n;i++)

printf("No.%2d tinggi: %4.1fberat: %4.1f \n",i,p[i].tinggi,p[i].beratbadan);

}

latihan1
Latihan

int main(void)

{

int i;

struct DATAFISIK p[NUM];

for(i=0;i<NUM;i++){

printf("No.%d\n",i);

printf("\t tinggi : "); scanf("%f",&p[i].tinggi);

printf(“\tberat badan : "); scanf("%f",&p[i].beratbadan);

}

tampilkandata(p,NUM);

}

latihan2
Latihan

Latihan 2-6

  • Ubahlah program pada slide sebelumnya, dengan memakai typedef
  • Ubahlah program pada slide sebelumnya, agar jumlah orang bisa ditentukan oleh user
slide41
Hint !

int main(void)

{

int i, num;

struct DATAFISIK *p;

printf(“banyaknya data: "); scanf("%d",&num);

for(i=0;i<num;i++){

printf("No.%d\n",i);

printf("\ttinggi : "); scanf("%f",&p[i].tinggi);

printf("\tberatbadan : "); scanf("%f",&p[i].beratbadan);

}

tampilkandata(p,num);

}

Pakailah malloc untuk mengalokasikan memory

sebanyak num buah, dan masing-masing berukuran

sama dengan tipe data DATAFISIK

Bebaskan memory yang dialokasikan

ad