Politeknik Elektronika Negeri Surabaya
PRAKTIKUM STRUCT Struct 1 Percobaan 1 #include <stdio.h> #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
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 #include <stdio.h> #define N 4 struct student{ char name[20]; int eng; int math; int phys; double mean;
1
Politeknik Elektronika Negeri Surabaya }; 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
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. B. C. D. E.
struct struct struct struct struct
point point point point point
( { { { {
double double double double double
x, x, x; x; x;
y ) double double double double
y }; y } y; }; y; }
2. Sebutkan pendeklarasian struct yang salah ! A. B. C. D.
typedef typedef typedef typedef
struct { { double struct { struct {
double x; x; double double x; double x;
double y } Point; y; } Point; double y; }; double y; } Point;
3. Apa perbedaan tiga program di bawah ini ? (a)
#include <stdio.h> struct point { double x; double y; };
2
Politeknik Elektronika Negeri Surabaya int main(void) { struct point test; test.x = .25; test.y = .75; printf("[%f %f]\n", test.x, test.y); return 0; } (b)
#include <stdio.h> 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); return 0; }
(c)
#include <stdio.h> typedef struct { double x; double y; } Point; int main(void) { Point test = {.25, .75}; printf("[%f %f]\n", test.x, test.y); return 0; }
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); return 0; } 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 1 2 3 4 5 6 7
NA 81≤nilai≤100 nilai≥71 nilai≥66 nilai≥61 nilai≥56 nilai≥41 0≤nilai≤40
NH A AB B BC C D E
3
Politeknik Elektronika Negeri Surabaya 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 No 1 2 3 4
transaksi Product sikat gigi sabun shampo pewangi
jumlah 3 2 1 2 Total
harga 5.000 2.500 10.000 6.000
total 15.000 5.000 10.000 12.000 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
Politeknik Elektronika Negeri Surabaya 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 #include <stdio.h> 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); return 0; }
Percobaan 2 struct Book { char name[10]; int price; } int main() { struct Book a; struct Book* ptr; ptr = &a; struct Book b[10];
5
Politeknik Elektronika Negeri Surabaya struct Book* p; p = &b; }
Percobaan 3 #include <stdio.h> #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
name, p->eng, p->math, p->phys);
Physics = %3d\n",
// Shifting of address p++; } return (0); }
Percobaan 4 #include <stdio.h> 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 return 0;
6
Politeknik Elektronika Negeri Surabaya } 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 #include <stdio.h> 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); return 0; } 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
Politeknik Elektronika Negeri Surabaya 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 #include <stdio.h> 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
Politeknik Elektronika Negeri Surabaya
// 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);
// 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); }
LATIHAN 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
Politeknik Elektronika Negeri Surabaya ---------------------------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