Struktur (bag 1)
description
Transcript of Struktur (bag 1)
![Page 1: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/1.jpg)
1
Struktur (bag 1)
![Page 2: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/2.jpg)
2
Topik• Struktur
• Arrays of structs• typedef• structs and fungsi
• Pointer ke structs• structs dalam structs• Data Struktur dan disain modular
![Page 3: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/3.jpg)
3
Apa itu Struktur?
• Kumpulan variabel yang berelasi di bawah satu nama besar /aggregate
• Dapat berisi berbagai macam tipe variabel.
• Cara menggunaan Struktur:– Definisikan Struktur– Deklarasikan/Inisialisasikan instan Struktur– Anggota Access dari instan Struktur
![Page 4: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/4.jpg)
4
Definisi Struktur
Lunchbox
Definisikan struktur dg nama “Lunchbox” yg mempunyai bagian/compartments:• fruit compartment• sandwich compartment• drink compartment
• Struktur adalah sebuah blueprint
• Contoh:
![Page 5: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/5.jpg)
5
Definisi Struktur
• struct isdipakai utk menentukan blueprint
• Anggota yg ditentukan tdr dr aspek yg berbeda dr struct
• Contoh:struct LunchBox{ int fruit; float drink; char sandwich[MAXN];};Lunchbox
![Page 6: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/6.jpg)
6
Variabel Struktur
• Instan Struktur: urutan actual yg berdekatan dalam penyimpanan di lokasi memori
struct LunchBox kyle;struct LunchBox stan, cartman, kenny;struct LunchBox kids[5];
![Page 7: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/7.jpg)
7
Inisialisasi variabel struct
struct LunchBox kyle = { 1, 370.0, “ham”};
![Page 8: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/8.jpg)
8
Inisialisasi variabel struct
struct LunchBox kids[5] = { {1, 370.0, “ham” },
{2, 100.0, “roast”}, {0, 0.0, “muffin”},
{1, 300.0, “salad”}, {0, 0.0, “”} };
0 1 2 3 4
![Page 9: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/9.jpg)
9
Anggota variabel struct
struct LunchBox stan, kenny;
stan.drink = 0.0;stan.fruit = 0;strcpy(stan.sandwich,“fruit cake”);
kenny.fruit = 1;strcpy(kenny.sandwich, “muffin”);kenny.drink = 300.0;
![Page 10: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/10.jpg)
10
Anggota variabel struct
struct LunchBox kids[3];int index = 1;
kids[0].drink = 300.0;kids[0].fruit = 1;strcpy(kids[2].sandwich, “ham”);
kids[index].fruit = 3;
0
1
2kids[index+1].drink = kids[index - 1].drink;
![Page 11: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/11.jpg)
11
Input/Output dr struct• Library functions printf() dan scanf() tdk
memiliki format conversion specifiers utk struct
• Input/Output hanya utk anggota saja
struct LunchBox cartman;
scanf(“%d”, &(cartman.fruit));scanf(“%f”, &(cartman.drink));scanf(“%s”, cartman.sandwich);
printf(“%d, %f\n”, cartman.fruit, cartman.drink);printf(“%s\n”, cartman.sandwich);
![Page 12: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/12.jpg)
12
Input/Output dr structstruct LunchBox kids[3];int i = 0;for (i=0; i < 3; i++){ scanf(“%d %f %s”, &(kids[i].fruit),&(kids[i].drink), kids[i].sandwich);}for (i=0; i < 3; i++){ printf(“%d, %f, %s\n”, kids[i].fruit, kids[i].drink, kids[i].sandwich);}
0
1
2
![Page 13: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/13.jpg)
13
Contoh: Student Record
• Tulis program utk membaca dan mencetak daftar nama dan nilai test student
input jumlah students
for tiap student dalam list{ input name dan nilai}for tiap student dalam list{ output name dan Nilai}
![Page 14: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/14.jpg)
14
#include <stdio.h>#include <stdlib.h>
#define MAXLEN 50#define MAXN 20
int main(){ char lastname[MAXN][MAXLEN]; float Nilai[MAXN]; int count = 0; int i; printf(“Berapa student? "); scanf("%d", &count);
Nilais1.c
Contoh tanpa struct-1
![Page 15: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/15.jpg)
15
if (count > MAXN) { printf("Not enough space.\n"); exit(1); } for (i=0; i < count; i++) { printf(“Masukannama dan nilai "); scanf("%s %f", lastname[i], &Nilai[i]); }
printf("\nDaftar kelas\n\n"); for (i=0; i < count; i++) { printf("Nama: %s\n", lastname[i]); printf(“Nilai: %.1f\n\n", Nilai[i]); } return 0;} Nilais1.c
Contoh without struct-2
![Page 16: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/16.jpg)
16
Contoh: Student Record
• Definisikan struct: StudentRec
struct StudentRec{ char lastname[MAXLEN]; float Nilai;};
• Mudah di perluas nantinya utk di tambah dg IDNum, alamat, dst
![Page 17: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/17.jpg)
17
Contoh dengan struct (testing)#include <stdio.h>#define MAXLEN 50struct StudentRec{ char lastname[MAXLEN]; float Nilai;};int main(){ struct StudentRec studA; struct StudentRec studB;
printf(“Masukan Nama dan Nilai utk student A: "); scanf("%s %f", studA.lastname, &(studA.Nilai)); printf(“Masukan Nama dan Nilai utk student B: "); scanf("%s %f", studB.lastname, &(studB.Nilai)); printf("Student A: %s\t%f\n", studA.lastname, studA.Nilai); printf("Student B: %s\t%f\n", studB.lastname, studB.Nilai); return 0;} Nilais2a.c
![Page 18: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/18.jpg)
18
#include <stdio.h>#include <stdlib.h>
#define MAXLEN 50#define MAXN 20
struct StudentRec{ char lastname[MAXLEN]; float Nilai;};int main(){ struct StudentRec class[MAXN]; int count = 0; int i; printf(“Berapa students? "); scanf("%d", &count);
Nilais3a.c
Contoh with struct-1
![Page 19: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/19.jpg)
19
if (count > MAXN) { printf(“Tidak cukup ruang.\n"); exit(1); } for (i=0; i < count; i++) { printf("Masukan nama dan nilai "); scanf("%s %f", class[i].lastname, &(class[i].Nilai)); } printf("\nDaftar kelas\n\n"); for (i=0; i < count; i++) { printf("Nama: %s\n", class[i].lastname); printf(“Nilai: %.1f\n\n", class[i].Nilai); } return 0;}
Nilais3a.c
Contoh with struct-2
![Page 20: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/20.jpg)
20
Kesalahan umum
struct StudentRec{ char lastname[MAXLEN]; float Nilai;};
Semicolon disini jangan lupa
![Page 21: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/21.jpg)
21
Catatan struct• Inisialisasi vs. Assignment
struct StudentRec studA = {“Fermat”, 90};
struct StudentRec studA;studA = {“Fermat”, 90};
struct StudentRec studA = {“Fermat”, 90};struct StudentRec studB;
studB = studA; /* struct mengandung pointer? */
![Page 22: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/22.jpg)
22
Catatan struct• Var struct tdk dpt di bandingkan • Kita hanya dpt membandingkan aggt-nya saja
if (studA == studB){ printf(“Duplikasi data.\n”);}
if (strcmp(studA.lastname, studB.lastname) == 0 && (studA.Nilai == studB.Nilai) ){ printf(“Duplikasi data.\n”);}
![Page 23: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/23.jpg)
23
Catatan struct
struct StudentRec{ char lastname[MAXLEN]; float Nilai;} studA, studB, class[MAXN];
• Kita dapat mendefinisikan struct, dan mendeklarasikan instan utk struktur tsb
Instan
![Page 24: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/24.jpg)
24
typedef
• Statement typedef membuat identifer sama dg tipe yg ditentukan
struct StudentRec{ char lastname[MAXLEN]; float Nilai;};
struct StudentRec studentA;struct StudentRec class[MAXN];
Contoh tanpa
typedef
![Page 25: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/25.jpg)
25
struct StudentRec{ char lastname[MAXLEN]; float Nilai;};typedef struct StudentRec Student;
Student studA;Student class[MAXN];
Contoh dg
typedef
typedef (lanj)• Statement typedef membuat identifer
sama dg tipe yg ditentukan
![Page 26: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/26.jpg)
26
Contoh dg typedef (testing)#include <stdio.h>#define MAXLEN 50struct StudentRec{ char lastname[MAXLEN]; float Nilai;};typedef struct StudentRec Student;int main(){ Student studA; Student studB; printf(“Masukan Nama dan Nilai utk student A: "); scanf("%s %f", studA.lastname, &(studA.Nilai)); printf(“Masukan Nama dan Nilai utk student B: "); scanf("%s %f", studB.lastname, &(studB.Nilai)); printf("Student A: %s\t%f\n", studA.lastname, studA.Nilai); printf("Student B: %s\t%f\n", studB.lastname, studB.Nilai); return 0;}
Nilais2b.c
![Page 27: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/27.jpg)
27
Contoh dg typedef-1#include <stdio.h>#include <stdlib.h>
#define MAXLEN 50#define MAXN 20
struct StudentRec{ char lastname[MAXLEN]; float Nilai;};
typedef struct StudentRec Student;
int main(){ int count = 0; Student class[MAXN]; int i; printf(“Berapa students? "); scanf("%d", &count); Nilais3b.c
![Page 28: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/28.jpg)
28
if (count > MAXN) { printf("Not enough space.\n"); exit(1); } for (i=0; i < count; i++) { printf("Masukan nama dan nilai "); scanf("%s %f", class[i].lastname, &(class[i].Nilai) ); } printf("\nDaftar kelas\n\n"); for (i=0; i < count; i++) { printf("Nama: %s\n", class[i].lastname); printf(" Nilai: %.1f\n\n", class[i].Nilai); } return 0;}
Nilais3b.c
Contoh with typedef-2
![Page 29: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/29.jpg)
29
Catatan typedef
• Cara lain menggunakan typedef:
typedef struct{ char lastname[MAXLEN]; float Nilai;} Student;
Student studA, studB;Student class[MAXN];
![Page 30: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/30.jpg)
30
Mengirim struct ke Function• S[pt biasa, parameter formal di kopi ke
aktual parameter
void printRecord ( Student item ){ printf("Nama: %s\n", item.lastname); printf(“Nilai: %.1f\n\n", item.Nilai);}
main(){ Student studentA = {“Gauss”, 99.0}; printRecord(studentA);}
![Page 31: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/31.jpg)
31
Function yg mengembalikan suatu struct
• “paket” yg berisi beberapa nilai
main(){ Student studentA; studentA = readRecord();}
Student readRecord ( void ){ Student newStudent; printf("Masukan nama dan nilai "); scanf("%s %f",newStudent.lastname,&(newStudent.Nilai)); return newStudent;} Version 1
![Page 32: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/32.jpg)
32
Function yg mengembalikan suatu struct
Student readRecord ( Student newStudent ){ printf("Masukan nama dan nilai "); scanf("%s %f",newStudent.lastname,&(newStudent.Nilai)); return newStudent;}
main(){ Student studentA; studentA = readRecord(studentA);}
Version 2
• “paket” yg berisi beberapa nilai
![Page 33: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/33.jpg)
33
Contoh: Structs dan Function-1#include <stdio.h>#include <stdlib.h>
#define MAXLEN 50#define MAXN 20struct StudentRec{ char lastname[MAXLEN]; float Nilai;};typedef struct StudentRec Student;
Student readRecord ( void ){ Student newStudent; printf("Masukan nama dan nilai "); scanf("%s %f", newStudent.lastname, &(newStudent.Nilai)); return newStudent;}
void printRecord ( Student item ){ printf("Nama: %s\n", item.lastname); printf(“Nilai: %.1f\n\n", item.Nilai);} Nilais4a.c
![Page 34: Struktur (bag 1)](https://reader030.fdocuments.in/reader030/viewer/2022033101/56814f73550346895dbd2688/html5/thumbnails/34.jpg)
34
int main(){ int count = 0; Student class[MAXN]; int i; printf(“Berapa students? "); scanf("%d", &count); if (count > MAXN) { printf(“Tidak cukup ruang.\n"); exit(1); } for (i=0; i < count; i++) { class[i] = readRecord(); } printf("\nDaftar kelas\n\n"); for (i=0; i < count; i++) { printRecord(class[i]); } return 0;}
Nilais4a.c
Contoh: Structs dan Function-2