Jawaban pr 01
This presentation is the property of its rightful owner.
Sponsored Links
1 / 41

Jawaban PR-01 PowerPoint PPT Presentation


  • 106 Views
  • Uploaded on
  • Presentation posted in: General

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 {

Download Presentation

Jawaban PR-01

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


Jawaban pr 01

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

};


Jawaban pr 01

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

}

}

}


Jawaban pr 01

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

}


Jawaban pr 01

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

}

}


Jawaban pr 01

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

}


Jawaban pr 01

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

    • }


Jawaban pr 01

  • 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


    Jawaban pr 01

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


    Jawaban pr 01

    #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


    Jawaban pr 01

    pt

    1000

    1000

    123

    aa

    bb

    pt = &aa = 1000

    bb = *pt = isi address 1000 = 123

    1001

    1002

    1003

    1004

    1002

    address

    memory


    Jawaban pr 01

    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


    Jawaban pr 01

    pt

    1002

    1000

    123

    aa

    bb

    pt = &bb = address bb = 1002

    *pt = 999;

    1001

    1002

    123

    1003

    1004

    1002

    address

    memory


    Jawaban pr 01

    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.


    Jawaban pr 01

    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!


    Jawaban pr 01

    #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


    Jawaban pr 01

    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


    Jawaban pr 01

    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


  • Login