PRAKTIKUM STRUCT Struct 1 Percobaan 1 #define N 4 struct student char name[20]; int eng; int math; int phys; ; struct student data[]= "Jack", 82, 72, 58, "Young", 77, 82, 79, "Steeve", 52, 62, 39, "Mark", 61, 82, 88 ; int main(void) int i; for(i=0; i<n; i++) printf("%7s: Eng = %3d Math = %3d Phys = %3d\n", data[i].name, data[i].eng, data[i].math, data[i].phys); return (0); Output: Jack: Eng = 82 Math = 72 Phys = 58 Young: Eng = 77 Math = 82 Phys = 79 Steeve: Eng = 52 Math = 62 Phys = 39 Mark: Eng = 61 Math = 82 Phys = 88 Percobaan 2 #define N 4 struct student char name[20]; int eng; int math; int phys; double mean; 1
; struct student data[]= "Jack", 82, 72, 58, 0.0, "Young", 77, 82, 79, 0.0, "Steeve", 52, 62, 39, 0.0, "Mark", 61, 82, 88, 0.0 ; int main(void) int i, j; for(i=0; i<n; i++) data[i].mean = (data[i].eng + data[i].math + data[i].phys)/3.0; for(i=0; i<n; i++) printf("%7s: Eng = %3d Math = %3d Phys = %3d: Mean = %5.1f\n", data[i].name, data[i].eng, data[i].math, data[i].phys, data[i].mean); return (0); Output : Jack: Eng = 82 Math = 72 Phys = 58: Mean = 70.7 Young: Eng = 77 Math = 82 Phys = 79: Mean = 79.3 Steeve: Eng = 52 Math = 62 Phys = 39: Mean = 51.0 Mark: Eng = 61 Math = 82 Phys = 88: Mean = 77.0 LATIHAN 1. Sebutkan pendeklarasian struct yang salah! A. struct point ( double x, y ) B. struct point double x, double y ; C. struct point double x; double y D. struct point double x; double y; ; E. struct point double x; double y; 2. Sebutkan pendeklarasian struct yang salah! A. typedef struct double x; double y Point; B. typedef double x; double y; Point; C. typedef struct double x; double y; ; D. typedef struct double x; double y; Point; 3. Apa perbedaan tiga program di bawah ini? (a) struct point double x; double y; ; 2
int main(void) struct point test; test.x =.25; test.y =.75; printf("[%f %f]\n", test.x, test.y); (b) (c) typedef struct double x; double y; Point; int main(void) Point test; test.x =.25; test.y =.75; printf("[%f %f]\n", test.x, test.y); typedef struct double x; double y; Point; int main(void) Point test =.25,.75; printf("[%f %f]\n", test.x, test.y); 4. Buatlah fungsi POINTshow() yang memiliki fungsi yang sama dengan soal no3. typedef struct double x; double y; Point; int main(void) Point test =.25,.75; POINTshow(test); 5. a. Buatlah struct mahasiswa dengan informasi : Nama (nama mahasiswa dengan tipe char[]) UTS (nilai uts dengan tipe int) UAS (nilai uas dengan tipe int) Tugas (nilai tugas dengan tipe int) NA (nilai akhir dengan tipe int) NH (nilai huruf dengan tipe char[]) b. Buatlah array dengan nama data_mhs dengan tipe struct mahasiswa untuk menyimpan data mahasiswa, selanjutnya lakukan inisialisasi pada array tersebut. struct mahasiswa data_mhs[5]; c. Hitunglah nilai akhir(na) dengan formula NA = 0.35 * UTS + 0.45 * UAS + 0.2 * Tugas dengan membuat fungsi hitungna. int hitungna (int uts, int uas, int tugas); d. Mengubah nilai angka menjadi nilai huruf dengan ketentuan. No NA NH 1 81 nilai 100 A 2 nilai 71 AB 3 nilai 66 B 4 nilai 61 BC 5 nilai 56 C 6 nilai 41 D 7 0 nilai 40 E 3
dengan membuat fungsi nilaihuruf. void nilaihuruf(int na) e. Tampilkan data mahasiswa berupa : no nama NA NH 6. a. Buatlah struct product untuk menyimpan data product dengan informasi nama dan harga. Buatlah array dengan nama data_product dan lakukan inisialisasi pada array tersebut. b. Buatlah struct transaksi dengan informasi struct product, jumlah barang dan total harga. Buatlah variabel array data_transaksi dengan tipe struct transaksi. struct transaksi data_transaksi[15]; c. Buatlah fungsi search() untuk mencari apakah product yang diinputkan oleh user terdapat pada data_product. Jika barang tersebut ada di data_product maka mengembalikan index array, jika barang tersebut tidak ada maka mengembalikan nilai -1. int search(char[] product) Output program Product : sikat gigi Jumlah : 3 Lanjut [Y/T] : y Product : sabun Jumlah : 2 Lanjut [Y/T] : y Product : shampo Jumlah : 1 Lanjut [Y/T] : y Product : promag Data tidak ditemukan Lanjut [Y/T] : y Product : pewangi Jumlah : 2 Lanjut [Y/T] : t Data transaksi No Product jumlah harga total 1 sikat gigi 3 5.000 15.000 2 sabun 2 2.500 5.000 3 shampo 1 10.000 10.000 4 pewangi 2 6.000 12.000 Total 42.000 7. a. Buatlah struct Point dengan field x dan y dengan tipe double b. Buatlah fungsi jarak() untuk menghitung jarak dari dua titik dengan fungsi jarak double jarak(struct Point p1, struct Point p2); 4
c. Buatlah fungsi equal() untuk mengecek apakah dua titik merupakan titik yang sama atau bukan. Jika dua titik merupakan titik yang sama mengembalikan nilai 1, jika tidak sama mengembalikan nilai 0. int equal(struct Point p1, struct Point p2); 8. a. Buatlah struct RECTANGLE untuk membuat persegi panjang yang berisi informasi dua titik yaitu titik 1 adalah titik ujung kiri atas, titik 2 adalah titik ujung kanan bawah. b. Buatlah fungsi luaspersegipanjang() untuk menghitung luas persegi panjang. double luaspersegipanjang (struct RECTANGLE r); c. Buatlah fungsi PointinPersegiPanjang() untuk mengecek apakah sebuah titik berada dalam Persegipanjang, jika yam aka bernilai 1, jika tidak maka bernilai 0. int PointinPersegiPanjang(struct Point p, struct RECTANGLE r); d. Buatlah fungsi inpersegipanjang() untuk mengecek apakah persegi panjang 1 berada di dalam persegi panjang 2. Jika ya maka bernilai 1, jika tidak maka bernilai 0. int inpersegipanjang(struct RECTANGLE r1, struct RECTANGLE r2); Struct 2 Percobaan 1 struct name int a; float b; ; int main() struct name *ptr,p; ptr=&p; /* Referencing pointer to memory address of p */ printf("enter integer: "); scanf("%d",&(*ptr).a); printf("enter number: "); scanf("%f",&(*ptr).b); printf("displaying: "); printf("%d%f",(*ptr).a,(*ptr).b); Percobaan 2 struct Book char name[10]; int price; int main() struct Book a; struct Book* ptr; ptr = &a; struct Book b[10]; 5
struct Book* p; p = &b; Percobaan 3 #define N 4 typedef struct student char name[20]; int eng; int math; int phys; STUDENT; STUDENT data[]= "Jack", 82, 72, 58, "Young", 77, 82, 79, "Steeve", 52, 62, 39, "Mark", 61, 82, 88 ; STUDENT *p; int main(void) int i; // Pointer variable p refers to the address of data p = data; for(i=0; i<n; i++) printf("%10s: English = %3d Math = %3d p->name, p->eng, p->math, p->phys); Physics = %3d\n", // Shifting of address p++; return (0); Percobaan 4 struct student char name[50]; int roll; ; void Display(struct student stu); /* function prototype should be below to the structure declaration otherwise compiler shows error */ int main() struct student s1; printf("enter student's name: "); scanf("%s",&s1.name); printf("enter roll number:"); scanf("%d",&s1.roll); Display(s1); // passing structure variable s1 as argument 6
void Display(struct student stu) printf("output\nname: %s",stu.name); printf("\nroll: %d",stu.roll); Output: Enter student's name: Kevin Amla Enter roll number: 149 Output Name: Kevin Amla Roll: 149 Percobaan 5 struct distance int feet; float inch; ; void Add(struct distance d1,struct distance d2, struct distance *d3); int main() struct distance dist1, dist2, dist3; printf("first distance\n"); printf("enter feet: "); scanf("%d",&dist1.feet); printf("enter inch: "); scanf("%f",&dist1.inch); printf("second distance\n"); printf("enter feet: "); scanf("%d",&dist2.feet); printf("enter inch: "); scanf("%f",&dist2.inch); Add(dist1, dist2, &dist3); /*passing structure variables dist1 and dist2 by value whereas passing structure variable dist3 by reference */ printf("\nsum of distances = %d\'-%.1f\"",dist3.feet, dist3.inch); void Add(struct distance d1,struct distance d2, struct distance *d3) /* Adding distances d1 and d2 and storing it in d3 */ d3->feet=d1.feet+d2.feet; d3->inch=d1.inch+d2.inch; if (d3->inch>=12) /* if inch is greater or equal to 12, converting it to feet. */ d3->inch-=12; ++d3->feet; Output: First distance Enter feet: 12 Enter inch: 6.8 7
Second distance Enter feet: 5 Enter inch: 7.5 Sum of distances = 18'-2.3" Percobaan 4 Menghitung harga dengan memberikan diskon 10%. Untuk detail set menu, item dan harga seperti table dibawah ini. Set A B C D Items Burger, Drink, Potato Cheese burger, Drink, Potato Chicken burger, Drink, Potato Chicken burger, Drink, Potato, Ice cream Item Price (JPY) Burger 130 Cheese burger 150 Chicken burger 200 Drink 130 Potato 120 Ice cream 160 int main(void) int i, sum_price=0; struct single char *name; int price; struct single *p; ; struct set char *set_name; int set_price; struct single *p; ; struct set s[]="set A", 0, NULL, "set B", 0, NULL, "set C", 0, NULL, "set D", 0, NULL; struct single burger[] = "Burger", 130, NULL, "Cheese burger", 150, NULL, "Chicken burger", 200, NULL; struct single drink = "Drink", 130, NULL; struct single potato = "Potato", 120, NULL; struct single ice = "Ice cream", 160, NULL; struct single *pt; 8
// Set B: Cheese burger, Drink, Potato s[1].p = &burger[1]; burger[1].p = &drink; drink.p = &potato; printf("********** %s ***********\n", s[1].set_name); LATIHAN // Calculate set price by 10 % discount of sum of all items for(pt = s[1].p; pt!= NULL; pt = pt->p) sum_price += pt->price; printf("%17s: %5d JPY\n", pt->name, pt->price); printf("----------------------------\n"); printf("sum of all items : %5d JPY\n", sum_price); s[1].set_price = (int)(sum_price*0.9)/10*10; printf(" Set price : %5d JPY\n", s[1].set_price); return (0); 1. Tampilkan data mahasiswa yang sudah dikerjakan sebelumnya menggunakan pointer 2. Kembangkan dari percobaan 2 sehingga menjadi program dengan output sebagai berikut. (Execution result) $./a.out Select one among following set menus 1: set A (Burger, Drink, Potato) 2: set B (Cheese burger, Drink, Potato) 3: set C (Chicken burger, Drink, Potato) 4: set D (Chicken burger, Drink, Potato, Ice cream) 1 ********** set A *********** Burger: 130 JPY Drink: 130 JPY Potato: 120 JPY ---------------------------- Sum of all items : 380 JPY Set price : 340 JPY $ $./a.out Select one among following set menus 1: set A (Burger, Drink, Potato) 2: set B (Cheese burger, Drink, Potato) 3: set C (Chicken burger, Drink, Potato) 4: set D (Chicken burger, Drink, Potato, Ice cream) 2 ********** set B *********** Cheese burger: 150 JPY Drink: 130 JPY Potato: 120 JPY 9
---------------------------- Sum of all items : 400 JPY Set price : 360 JPY $ $./a.out Select one among following set menus 1: set A (Burger, Drink, Potato) 2: set B (Cheese burger, Drink, Potato) 3: set C (Chicken burger, Drink, Potato) 4: set D (Chicken burger, Drink, Potato, Ice cream) 3 ********** set C *********** Chicken burger: 200 JPY Drink: 130 JPY Potato: 120 JPY ---------------------------- Sum of all items : 450 JPY Set price : 400 JPY $ $./a.out Select one among following set menus 1: set A (Burger, Drink, Potato) 2: set B (Cheese burger, Drink, Potato) 3: set C (Chicken burger, Drink, Potato) 4: set D (Chicken burger, Drink, Potato, Ice cream) 4 ********** set D *********** Chicken burger: 200 JPY Drink: 130 JPY Potato: 120 JPY Ice cream: 160 JPY ---------------------------- Sum of all items : 610 JPY Set price : 540 JPY $ 10