Jawaban pr 01
Download
1 / 41

Jawaban PR-01 - PowerPoint PPT Presentation


  • 159 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


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

};


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

}

}

}


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

}


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

}

}


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

}


  • // Main untuk tiap siswa

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

    • }


  • load_data(fpi,p); // membaca file data nilai untuk tiap siswa

  • 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 : untuk tiap siswa POINTER & STRUCT

    Dr. Anto Satriyo Nugroho, M.Eng

    Email: [email protected]

    Web: http://asnugroho.net


    Pointer
    Pointer untuk tiap siswa

    • 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 untuk tiap siswa

    • 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 untuk tiap siswa

    • 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 untuk tiap siswa

    • 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


    • #include <stdio.h> untuk tiap siswa

    • 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


    #include <stdio.h> untuk tiap siswa

    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


    pt untuk tiap siswa

    1000

    1000

    123

    aa

    bb

    pt = &aa = 1000

    bb = *pt = isi address 1000 = 123

    1001

    1002

    1003

    1004

    1002

    address

    memory


    pt untuk tiap siswa

    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


    pt untuk tiap siswa

    1002

    1000

    123

    aa

    bb

    pt = &bb = address bb = 1002

    *pt = 999;

    1001

    1002

    123

    1003

    1004

    1002

    address

    memory


    pt untuk tiap siswa

    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 untuk tiap siswa

    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 untuk tiap siswa

    #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 dinamis untuk tiap siswamemakai 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 untuk tiap siswa

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


    free untuk tiap siswa

    • 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 untuk tiap siswa(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 untuk tiap siswa

    • 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 untuk tiap siswa(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!


    #include <stdio.h> untuk tiap siswa

    #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


    x[0] untuk tiap siswa

    x[1]

    x[2]

    x[3]

    x[4]

    y[0]

    y[1]

    y[2]

    y[3]

    y[4]


    Array vs struct
    Array vs Struct untuk tiap siswa

    • 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 untuk tiap siswa

    • 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 untuk tiap siswa

    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 untuk tiap siswa

    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 untuk tiap siswa

    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 untuk tiap siswa

    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 untuk tiap siswa

    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 untuk tiap siswa

    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 untuk tiap siswa

    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 untuk tiap siswa

    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 untuk tiap siswa

    Latihan 2-6

    • Ubahlah program pada slide sebelumnya, dengan memakai typedef

    • Ubahlah program pada slide sebelumnya, agar jumlah orang bisa ditentukan oleh user


    Hint ! untuk tiap siswa

    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