Jobsheet Dasar Pemrograman, Bab. 8: Structure
Bab. 8 Structure 8.1 Tujuan Instruksional Khusus 1. Mahasiswa mampu membuat sebuah record menggunakan structure. 2. Mahasiswa mampu membuat beberapa record menggunakan structure. 8.2 Pendahuluan Penyusunan sebuah database dengan menggunakan array hanya aka n menga tur sebuah tipe data saja, untuk menyusun database yang terdiri dari beberapa tipe data dipakailah struktur atau record. Misalkan anda ingin membuat sebuah database untuk menyimpan data pegawai, dimana setiap data akan menyimpan informasi tentang nama, alamat, dan gaji pegawai. Bila menggunakan array biasa, maka harus dibuat tiga variable array yang beba s satu sama lain, yaitu variable-variable untuk nama, alamat, da n gaji. Dengan structure data tadi dapat diorganiasi menjadi satu ke satuan, misalnya structure untuk pe gawai pe rtama yang mengandung nama, alamat, serta gaji pegawai pertama, structure untuk data yang kedua mengandung nama, alamat, dan gaji pegawai yang kedua dan seterusnya. 8.2.1 Mendeklaras ikan Structure Sebelum mulai digunakan, structure harus dideklarasikan lebih dahulu. Sebagai contoh, kita akan mencoba mendeklarasikan sebuah structure unt uk pe gawai, yang tersusun dari na ma yang bertipe string, alamat juga bertipe string, dan gaji yang bertipe float. struct data_ pgw { char nama[20]; char alamat[30]; float gaji; };
Variable yang menyusun sebuah structure (variable elemen structure)
Apa yang aka n kita lakuka n tadi, hanyalah mengatur format structure serta variable- variable penyusunnya. Kita BELUM
menciptaka n
variable structure itu sendiri.
Untuk
mendeklarasikan sebuah variable structure, maka di bawah penyataan tadi harus dituliskan: tag
variable structure
struct data_pgw pegawai1;
Hal.112
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Artinya variable pegawai1 akan terdiri dari 3 data yaitu nama, alamat dan gaji, sesuai dengan structure data_pgw yang telah didefinisikan sebelumnya. tag sifatnya optional, boleh ada boleh tidak. Bila pendeklarasian variable structure dilakukan bersama-sama dengan pendefisian format structure, tag seringkali tidak digunakan. Jadi dari bentuk: struct data_ pgw { char nama[20]; char alamat[30]; float gaji; }; struct data_pgw pegawai1; dapat disederhanakan menjadi: struct { char nama[20]; char alamat[30]; float gaji; } pegawai1; Sebaliknya bila structure yang digunakan lebih dari satu dan pendeklarasikan variablenya dilakukan secara terpisah, lebih baik tag tetap digunakan untuk mencegah kerancuan penggunaan structure, misalkan data mana akan menggunakan structure yang mana. Contoh:
struct data_pgw_tetap { char nama[20]; char alamat[30]; float gaji_tetap; float tunjangan; }; struct data_ pgw_honorer { char nama[20]; char alamat[30]; float gaji_honorer; }; struct data_pgw_tetap pegawai1; struct data_ pgw_honorer pegawai2;
Hal.113
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Artinya, variable pegawai1 menggunakan structure data_pgw_tetap sedangkan variable pegawai2 menggunakan structure data_pgw_honorer. Bayangkan bila tidak anda tidak menggunakan tag, seperti: struct pegawai1; struct pegawai2; disini akan terjadi keragu-ragua n da lam menentuka n structure mana yang harus diguna ka n. Sebaliknya bila deklarasi variable structure dilakukan bersama-sama dengan pendefinisian format structure-nya, maka tag boleh tidak digunakan, meskipun structure yang dimiliki lebih dari satu macam. struct {
} struct {
}
char nama[20]; char alamat[30]; float gaji_tetap; float tunjangan; pegawai1;
char nama[20]; char alamat[30]; float gaji_honorer; pegawai2;
Pada contoh diatas ini, jelas terlihat bahwa variable pegawai1 menggunakan format structure yang pertama, sedabgkan variable pegawai2 akan menggunakan format structure yang kedua, karena variable-variable ini dideklarasika n be rsama-sama dengan format structure-nya. Bagaimana bila terdapat lebih dari satu variable yang aka n menggun akan structure yang sama? Misalkan variable pegawai1 da n pegawai2 akan menggunakan structure data_pgw. Untuk kasus semacam ini, anda dapat mendeklarasikan kedua variable tersebut seperti: struct data_ pgw { char nama[20]; char alamat[30]; float gaji_tetap; }; struct data_pgw pegawai1,pegawai2; atau struct { Hal.114
Jobsheet Dasar Pemrograman, Bab. 8: Structure
char nama[20]; char alamat[30]; float gaji; } pegawai1, pegawai2; Bagaimanakah bila structure tersebut digunakan dalam bentuk array, misalkan variable: pegawai[0] akan memiliki data: nama, alamat, dan gaji pegawai[1] juga memiliki susunan data yang sama, demikian pula untuk p egawai[2], p egawai[3] dan seterusnya. Cara mendeklarasikan structure yang akan digunakan untuk variable array, tidak berbeda dengan structure untuk variable biasa. Misalnya:
struct data_pgw { char nama[20]; char alamat[30]; float gaji; }; struct data_pgw pegawai[20]; atau struct { char nama[20]; char alamat[30]; float gaji; } pegawai[20]; Memiliki arti yang sama, yaitu mendeklarasikan variable structure pegawai yang terdiri dari 20 data, dimana masing- masing akan menggunakan format structure seperti yang telah ditentukan. Deklarasi structure dapat dilakukan baik dalam suatu fungsi, maupun diluar fungsi, atau dengan kata lain dapat bersifat baik local maupun global. 8.2.2 Inisialisasi Variabel Structure Cara menginisialisasi variable structure mirip dengan variable-variable lainnya. Inisialisasi ini dapat dilakukan tersendiri, ataupun bersama-sama dengan pendefinisian for mat structure. Untuk inisialisasi variable structure tungal, dapat anda lihat seperti contoh di bawah ini: struct data_ pgw { char nama[20];
variable elemen structure
Hal.115
Jobsheet Dasar Pemrograman, Bab. 8: Structure
char alamat[30]; float gaji; }; struct data_pgw pegawai1= {“Robby”,”Jalan Purnawarman”,300000}; urutan inisialisasi harus sama dengan urutan variable elemen structure atau variable yang menyusun structure yang dapat juga dituliskan seperti: struct data_ pgw { char nama[20]; char alamat[30]; float gaji; }pegawai1={“Robby”,”Jalan Purnawarman”,300000}; Untuk variable structure yang lebih dari satu, sebaliknya inisialisasi dilakukan secara terpisah, seperti: struct data_ pgw { char nama[20]; char alamat[30]; float gaji; }; struct data_pgw pegawai1= {“Robby”,”Jalan Purnawarman”,300000}; struct data_pgw pegawai2= {“Lia”,”Jalan Kopo”,350000}; Untuk variable structure yang berbentuk array, inisialisasi dapat dilakukan seperti contoh berikut ini: struct data_ pgw { char nama[20]; char alamat[30]; float gaji; } pegawai[20]= { {“Robby”,”Jalan Purnawarman”,300000}, {“Lia”,”Jalan Kopo”,350000}}; Artinya variable structure pegawai akan terdiri dari 20 data, dan inisialisasi dilakukan hanya untuk data pertama dan kedua, bila structure ini bersifat global, maka data-data yang lain akan diisi nol (numerik) atau kosong (string). Kemungkinan lain, kita dapat menginisialisasi semua variable, seperti: Hal.116
Jobsheet Dasar Pemrograman, Bab. 8: Structure
struct data_ pgw { char nama[20]; char alamat[30]; float gaji; } pegawai[20]= { {“Robby”,”Jalan Purnawarman”,300000}, {“Lia”,”Jalan Kopo”,350000}, ... {“Rian”,”Jalan Setrasari”,450000}};
20 data
Bila inisialisasi dilakukan untuk semua elemen array, indeks array boleh tidak dituliskan, karena indeks ini secara otomatis akan disesuaikan dengan jumlah elemen yang diinisialisasi. Jadi pada contoh di bawah ini: struct data_ pgw { char nama[20]; char alamat[30]; float gaji; } pegawai[ ]= { {“Robby”,”Jalan Purnawarman”,300000}, {“Lia”,”Jalan Kopo”,350000}, ... {“Rian”,”Jalan Setrasari”,450000}};
15 data
Artinya variable structure pegawai yang berbentuk array tersebut, akan diasumsikan memiliki indeks sama dengan 15, sesuai dengan jumlah data yang diinisialisasi. Sifat ini berlaku juga untuk array yang lain, misalnya: Int bil[ ]={3,2,7,8,9,4}; Artinya sama dengan: Int bil[6]={3,2,7,8,9,4}; Jadi bila indeks tidak diberikan, artinya indeks tersebut akan disesuaikan dengan jumlah elemen yang diinisialisasi. Jika array tersebut tidak diinisialisasi, maka indeks HARUS dituliskan. Struct data-pgw { char nama [20]: char alamat [30]; float gaji; }: struct data –pgw pegawai1= {“Robby”,”Jalan purnawarman”,30}; struct data –pgw pegawai2= {“Lia”,”Jalan Kopo”,350000}, …. Hal.117
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Artinya variable structure pegawai yang berbentuk array tersebut,akan diasumsikan memiliki indeks sama dengan 15, sesuai dengan jumlah data yang diinisialisasi.sifat ini berlaku juga untuk array yang lain,misalnya: int bil[]={3,2,7,8,9,4}; artinya sama dengan : int bil[6]={3,2,7,8,9,4}; jadi bila indeks tidak diberikan ,artinya indeks tersebut akan disesuaikan dengan jumlah elemen yang diinisialisasi. Jika array tersebut tidak diinisialisasi, maka indeks HARUS dituliskan. 8.2.3 Nama Elemen Dari Variabel Struktur Dalam structure, setiap variabel terdiri dari elemen-elemen variabel, misalkan variabel structure pegawai 1, terdiri dari elemen-elemen : nama, alamat, dan gaji. Elemen-elemen inilah yang nantinya akan menerima data yang anda inputkan. Sekarang bayangkan bila program anda memiliki dua variabel structure, artinya pegawai1 dan pegawai2 yang masing- masing menggunakan format structure yang sama, artinya pegawai1 terdiri dari elemen-elemen nama, alamat, dan gaji,de mikian pula variabel pegawai2. Bagaimanakah membedakan apakah suatu elemen, misalnya nama, milik dari variabel pegawai1 ataukah milik pegawai2? Untuk membedakan elemen-elemen ini,maka nama dari elemen ini biasanya didahului oleh nama variabel structurenya. Bentuk umum nama elemen: nama_variabel_structure.nama_elemen Contoh: pegawai1.nama pegawai1.alamat pegawai1.gaji
dan pegawai2.nama pegawai2.alamat pegawai2.gaji
Dari structure di bawah ini: struct data_ pgw { char nama[20]; char alamat[30]; float gaji; }: struct data_pgw pegawai1={“Robby”,”Jalan Purnawarman”,300000}; struct data_pgw pegawai2={“Lia”,”Jalan Kopo Purnawarman”,350000}; Nilai-nilai elemen variabel structure-nya adalah Hal.118
Jobsheet Dasar Pemrograman, Bab. 8: Structure
pegawai1.nama=”Robby” pegawai1.alamat=”Jalan Purnawarman” pegawai1.gaji=300000 pegawai1.nama=”Lia” pegawai1.alamat=”Jalan Kopo” pegawai1.gaji=350000 Bagaimanakah bila variabel structure berupa array, Sama saja, hanya sekarang nama variabel structure diikuti de ngan indeks. Nama_variabel_structure[indeks].nama_elemen
Contoh : Untuk s tructure: struct { char nama [20]; char alamat[30]; float gaji; } pegawai [10]; Elemen-elemen dari variabel pertama akan dituliskan sebagai: pegawai[0].nama pegawai [0].alamat pegawai [0].gaji Sedangkan elemen-elemen dari variabel kedua adalah : Pegawai[1].nama Pegawai[1].alamat Pegawai[1].gaji dst. 8.2.4 Input dan Cetak Variabel Struktur Cara menginputkan elemen dari variabel structure sama dengan mnginputkan serta mencetak variabel biasa. Perintah-perintah input/output seperti scanf(), printf() serta fungsi- fungsi I/O lainnya dapat anda gnakan untuk keperluan ini. Contoh berikut ini menunjukkan cara menginputkan dan mencetak elemen-elemen variabel structure. /* Program Input Output Untuk va riabel structure */ struct { char nama[20]; char alamat[20]; float gaji; } pegawai1; Hal.119
Jobsheet Dasar Pemrograman, Bab. 8: Structure
main() { char gj[15]; float atof(); clrscr(); printf("Nama Pegawai I : "); gets(pegawai1.nama); printf("Alamat Pegawai I : "); gets(pegawai1.alamat); printf("Gaji Pegawai I : "); gets(gj); pegawai1.ga ji=atof(gj); printf("\n\nData yang telah Anda ketikkan : "); printf("\n%-20s%-30s%10.2f",pegawai1.nama,pegawai1.alamat,pegawai1.gaji); printf("\n\nTekan sembarang tombol"); getch(); } Sebagai alternative dari gets(), anda dapat juga menggunakan scanf(), misalkan: scanf(“%s”,&pegawai1.nama); dan scanf(“%f”,&pegawai1.gaji); 8.2.5 Nested Structure Ested struktural adalah structure dalam structure, misalkan kita memiliki structure data siswa: structure data_sis wa { char nama[20]; char no_i nduk[10 ]; int nilai; }; Dari siswa-siswi yang ada, akan dibagi menjadi kelompok-kelompok dimana setiap kelompok terdiri dari seorang ketua dan 4 orang anggota. struct { struct data_sis wa ketua; struct data_sis wa anggota[4]; } regu[10]; Structure diatas ini memiliki elemen-elemen yang juga berbentuk structure, bentuk semacam ini disebut seba gai nested structure. Disini siswa-siswi dibagi menjadi 10 regu, hal ini terlihat dari variabel structure-nya yang berupa array terdiri dari 10 element: regu[10]; setiap regunya, terdiri dari:
Hal.120
Jobsheet Dasar Pemrograman, Bab. 8: Structure
ketua, s atu orang; ditunjukan oleh pernyataa n: struct data_sis wa ketua; anggota, 4 orang; yang ditunjukan oleh pe rnyataan; struct data_sis wa anggota[4]; ketua ataupun anggota menggunakan format structure data_siswa, yang memiliki elemenelemen nama, no_induk, da n nilai. Nama dari elemen nested structure ini dituliskan lengkap: nama_var_struct_induk.nama_var_anak.nama_elemen yang dimaks ud de ngan stucture induk ada lah structure ya ng elemen-elemennya jugaberupa structure, sedangka n structure anak ada lah strukture yang elemen-elemennya berupa variable biasa. Contoh: Reg[0].k etua.nama Menunjukan nama dari ketua regu pertama Regu[1].anggota.nama[3] Menunjukan nama dari anggota ke 4, regu ke 2. Ingat yang digunakan disini adalah nama variabel structure- nya, bukan ‘tag’ nya (bedakan antara ‘tag’ dan ‘nama variable’ structure). Data_sis wa merupakan ‘tag’ dari stucture anak, buka n nama variabe l structurenya. Nama variabe l untuk structure data_sis wa, adalah ketua dan anggota[], yang terlihat dari pernyataan: structure data_sis wa ketua; structure data_sis wa anggota[4]; Sebagai contoh pelajarilah program dibawah ini. /* Nested Structure */ struct data_sis wa { char nama[20]; char no_i nduk[10 ]; float nilai; }; struct { struct data_sis wa ketua; struct data_sis wa anggota[4]; } regu[3];
Hal.121
Jobsheet Dasar Pemrograman, Bab. 8: Structure
main() { int i,j; char nl[6]; float atof(); clrscr(); printf("Input Data : "); for (i=0;i<3;++i) /* i = no regu */ { printf("\nRegu %d : ",i+1); printf("\n\tKetua : "); printf("\n\t\tNama : "); gets(regu[i].ketua.nama); printf("\t\tNo Induk : "); gets(regu[i].ketua.no_induk); printf("\t\tNilai : "); gets(nl); regu[i].ketua.nilai=atof(nl); for (j=0;j<4;++j) /* j = no anggota */ { printf("\n\tAnggota ke %d : ",j+1); printf("\n\t\tNama : "); gets(regu[i].anggota[j].nama); printf("\t\tNo Induk : "); gets(regu[i].anggota[j].no_induk); printf("\t\tNilai : "); gets(nl); regu[i].anggota[j].nilai=atof(nl); } } /* Cetak */ clrscr(); for (i=0;i<3;++i) { printf("\nRegu %d ",i+1); printf("\nKetua : "); printf("\n\t%-20s %-10s %6.2f",regu[i].ketua.nama, regu[i].ketua.no_induk,regu[i].ketua.nilai); printf("\nAnggota: "); for (j=0;j<4;++j) { printf("\n\t%-20s %-10s %6.2f",regu[i].anggota[j].nama, regu[i].anggota[j].no_induk,regu[i].anggota[j].nilai); } } printf("\nTekan sembarang tombol "); getch(); } Hal.122
Jobsheet Dasar Pemrograman, Bab. 8: Structure
8.2.6 Mengirimkan Structure ke Suatu Fungs i Cara mengirimkan structure ke suatu fungsi hampir tidak berbeda dengan cara pengiriman array ataupun variable ke suatu fungsi. Contoh dibawah ini menunjukan cara mengirimkan structure ke suatu fungsi. /* Mengirimkan structure ke suatu fungs i */ struct data { char nama[20]; int nilai; }; struct data sis wa[10]; #define POSISI(x,y) printf("\x1B[%d;%df",y,x); main() { char no[10 ]; int n; clrscr(); /* Input Jumlah Data */ printf("Jumlah Data : "); gets(no); n=atoi(no); /* data structure siswa yang berbentuk array dikirimkan ke fungsi input() */ input(n,s iswa); clrscr(); /* M enampilkan output * data structure siswa yang berbentuk array dikirimkan * ke fungs i output() */ output(n,siswa); getch(); }
/* File Input */ input(jml,sis) int jml; struct data s is[]; /* M enerima data s tructure yang berbentuk */ { char nl[5]; int i; POSISI (20,3) ;printf("INPUT DATA"); for (i=0;i<jml;++i) { POSISI(31,7) ;printf(" "); POSISI(31,8) ;printf(" "); Hal.123
Jobsheet Dasar Pemrograman, Bab. 8: Structure
POSISI(20,5);printf("Sis wa Ke : %d",i+1); POSISI(20,7) ;printf("Nama : ");gets(sis[i].nama); POSISI(20,8) ;printf("Nilai : ");gets(nl); sis[i].nilai=atoi(nl); } }
/* File Output */ output(jml,sis) int jml; struct data sis[]; /* menerima data structure yang berbentuk array */ { int i; POSISI(10,2) ;printf("OUTPUT DATA :"); printf("\n\n%-30s%-10s","NAMA","NILAI"); for (i=0;i<jml;++i) printf("\n%-30s %5d",sis[i].nama,s is[i].nilai); } Dalam fung si main() variabe l structure siswa yang berbentuk array, dikirimkan ke fungsi input() da n output(), dengan menggunakan pernyataan: Input(n,s iswa) Output(n,s is wa) Variabel structure ini kemudian diterima oleh fungs i input dengan Input(jlm,sis) Int jml; Struc data sis[];
8.3 Peralatan 1.
1 set computer
2.
Software turbo C
8.4 Langkah Kerja 1
Buatlah program seperti dibawah ini dan simpa n dengan nama Con81, kemudian lakukanlah compile dan run, da n catat hasilnya pada lembar kerja yang tersedia.
* Contoh Program 10.1 * Program Input Output * Untuk variabe l structure */
Hal.124
Jobsheet Dasar Pemrograman, Bab. 8: Structure
struct{ char nama[20]; char alamat[20]; float gaji; } pegawai1; main() { char gj[15]; float atof(); clrscr(); printf("Nama Pegawai I : "); gets(pegawai1.nama); printf("Alamat Pegawai I : "); gets(pegawai1.alamat); printf("Gaji Pegawai I : "); gets(gj); pegawai1.gaji=atof(gj); printf("\n\nData yang telah Anda ketikk an : "); printf("\n%-20s%-30s%10.2f",pegawai1.nama,pegawai1.alamat,pegawai1.gaji); printf("\n\nTekan sembarang tombol"); getch(); } 2
Buatlah program seperti dibawah ini dan simpa n dengan nama Con82, kemudian lakukanlah compile dan run, da n catat hasilnya pada lembar kerja yang tersedia. /* Nested Structure */ struct data_siswa { char nama[20]; char no_ induk[10 ]; float nilai; }; struct { struct data_siswa ketua; struct data_siswa anggota[4]; } regu[3]; main() { int i,j; char nl[6]; float atof(); clrscr(); printf("Input Data : "); Hal.125
Jobsheet Dasar Pemrograman, Bab. 8: Structure
for (i=0;i<3;++i) /* i = no regu */ { printf("\nRegu %d : ",i+1); printf("\n\tKetua : "); printf("\n\t\tNama : "); gets(regu[i].ke tua.nama); printf("\t\tNo I nduk : "); gets(regu[i].ketua.no_induk); printf("\t\tNilai : "); gets(nl); regu[i].ketua.nilai=atof(nl); for (j=0;j<4;++j) /* j = no anggota */ { printf("\n\tAnggota ke %d : ",j+1); printf("\n\t\tNama : "); gets(regu[i].anggota[j].nama); printf("\t\tNo I nduk : "); gets(regu[i].anggota[j].no_induk); printf("\t\tNilai : "); gets(nl); regu[i].anggota[j].nilai=atof(nl); } } /* Cetak */ clrscr(); for (i=0;i<3;++i) { printf("\nRegu %d ",i+1); printf("\nKetua : "); printf("\n\t%-20s %-10s %6.2f",regu[i].ketua.nama, regu[i].ketua.no_induk,regu[i].ketua.nilai); printf("\nAnggota: "); for (j=0;j<4;++j) { printf("\n\t%-20s %-10s %6.2f",regu[i].anggota[j].nama, regu[i].anggota[j].no_induk,regu[i].anggota[j].nilai); } } printf("\nTekan sembarang tombol "); getch(); }
Hal.126
Jobsheet Dasar Pemrograman, Bab. 8: Structure
3
Buatlah program seperti dibawah ini dan simpa n dengan nama Con83, kemudian lakukanlah compile dan run, da n catat hasilnya pada lembar kerja yang tersedia. #define N 20 int i,j; int k[N]; struct { char nama[20]; char nh; float na; float nt; float uts; float uas; int nrp; } nilai[N]; int jml[5]; main() { int n; char jml[10]; float atof(); clrscr(); garis(); gotoxy(27,3); printf("\xDB\xDB\xDB %sDAFTAR \xDB\xDB\xDB",KEDIP,NORMAL); garis(); printf("Jumlah Sis wa : "); gets(jml); n=atoi(jml); garis(); /* Input Data */ mas uk(n); garis(); /* Hitung Nilai Akhir */ hitung(n); /* Mengurutkan Data */ urut(n); /* Mencetak Data */ cetak(n); } /* Fungsi untuk menggambar garis */ garis() { printf("\n"); for (i=1;i<78;++i) Hal.127
NILAI
SISWA%s
Jobsheet Dasar Pemrograman, Bab. 8: Structure
printf("\xDF"); printf("\n"); } /* Fungs i untuk menginputkan data */ mas uk(no) int no; { char ntugas[10],nuts[10],nuas[10],no_pokok[10]; float atof(); for (i=0;i<no;++i) { gotoxy(10,8);printf("Mahasiswa ke %d : ",i+1); gotoxy(32,9);printf(" "); gotoxy(32,10);printf(" "); gotoxy(32,11);printf(" "); gotoxy(32,12);printf(" "); gotoxy(32,13);printf(" "); gotoxy(15,9);printf("Nomor Pokok : "); gets(no_pokok); nilai[i].nrp=atoi(no_pokok); gotoxy(15,10);printf("Nama : "); gets(nilai[i].nama); gotoxy(15,11);printf("Nilai Tugas : "); gets(ntugas); nilai[i].nt=atof(ntugas); gotoxy(15,12);printf("Nilai UTS : "); gets(nuts); nilai[i].uts=atof(nuts); gotoxy(15,13);printf("Nilai UAS : "); gets(nuas); nilai[i].uas=atof(nuas); /* I ndeks elemen dimas ukkan ke dalam k[i] */ k[i]=i; } }
/* Menghitung Nilai Huruf dan Nilai Akhir */ hitung(no) int no; { for (i=0;i<no;++i) { nilai[i].na=0.2*nilai[i].nt+0.3*nilai[i].uts+0.5*nilai[i].uas; if (nilai[i].na<50) { Hal.128
Jobsheet Dasar Pemrograman, Bab. 8: Structure
nilai[i].nh='E'; jml[4]++; } else if (nilai[i].na>=50 && nilai[i].na<56) { nilai[i].nh='D'; jml[3]++; } else if (nilai[i].na>=56 && nilai[i].na<65) { nilai[i].nh='C'; jml[2]++; } else if (nilai[i].na>=65 && nilai[i].na<80) { nilai[i].nh='B'; jml[1]++; } else { nilai[i].nh='A'; jml[0]++; } } }
/* Mengurutkan Data */ urut(no) int no; { int dummy; float dummy1[N],dummy2; for (i=0;i<no;++i) dummy1[i]=nilai[i].na; for(i=1;i<no;++i) { for (j=i;j<no;++j) { if (dummy1[i-1]
Jobsheet Dasar Pemrograman, Bab. 8: Structure
} } }
/* Cetak Data */ cetak(no) int no; { clrscr(); garis(); gotoxy(30,3);printf("%sDAFTAR NILAI MAHASISWA%s",KEDIP,NORMAL); garis(); gotoxy(5,5); printf("%-10s%-25s%-15s%-15s","NRP","NAMA MAHASISWA","NILAI AKHIR", "NILAI HURUF"); garis(); for (i=0;i<no;++i) { j=k[i]; gotoxy(5,i+7);printf("%-10d%-25s%8.2f%15c", nilai[j].nrp,nilai[j].nama,nilai[j].na,nilai[j].nh); } garis(); printf("Jumlah A : %-3d B : %-3d C : %-3d D : %-3d E : %-3d", jml[0],jml[1],jml[2],jml[3],jml[4]); printf("\nJumlah mahas is wa : %d",no); printf("\nTekan Se mbarang Tombol"); getch(); } 4
Buatlah program seperti dibawah ini dan simpa n dengan nama Con84, kemudian lakukanlah compile dan run, da n catat hasilnya pada lembar kerja yang tersedia.
#define N 20 #define KEDIP "\x1B[5m" #define NORMAL "\x1B[0m" int i,j; int k[N]; struct { char nama[20]; Hal.130
Jobsheet Dasar Pemrograman, Bab. 8: Structure
char nh; float na; float nt; float uts; float uas; int nrp; } nilai[N]; int jml[5]; main() { int n; char jml[10]; float atof(); clrscr(); garis(); gotoxy(27,3); printf("\xDB\xDB\xDB %sDAFTAR \xDB\xDB\xDB",KEDIP,NORMAL); garis(); printf("Jumlah Sis wa : "); gets(jml); n=atoi(jml); garis(); /* Input Data */ mas uk(n); garis(); /* Hitung Nilai Akhir */ hitung(n); /* Mengurutkan Data */ urut(n); /* Mencetak Data */ cetak(n); }
/* Fungsi untuk menggambar garis */ garis() { printf("\n"); for (i=1;i<78;++i) printf("\xDF"); printf("\n"); Hal.131
NILAI
SISWA%s
Jobsheet Dasar Pemrograman, Bab. 8: Structure
}
/* Fungs i untuk menginputkan data */ mas uk(no) int no; { char ntugas[10],nuts[10],nuas[10],no_pokok[10]; float atof(); for (i=0;i<no;++i) { gotoxy(10,8);printf("Mahasiswa ke %d : ",i+1); gotoxy(32,9);printf(" "); gotoxy(32,10);printf(" "); gotoxy(32,11);printf(" "); gotoxy(32,12);printf(" "); gotoxy(32,13);printf(" "); gotoxy(15,9);printf("Nomor Pokok : "); gets(no_pokok); nilai[i].nrp=atoi(no_pokok); gotoxy(15,10);printf("Nama : "); gets(nilai[i].nama); gotoxy(15,11);printf("Nilai Tugas : "); gets(ntugas); nilai[i].nt=atof(ntugas); gotoxy(15,12);printf("Nilai UTS : "); gets(nuts); nilai[i].uts=atof(nuts); gotoxy(15,13);printf("Nilai UAS : "); gets(nuas); nilai[i].uas=atof(nuas); /* I ndeks elemen dimas ukkan ke dalam k[i] */ k[i]=i; } }
/* Menghitung Nilai Huruf dan Nilai Akhir */ hitung(no) int no; { for (i=0;i<no;++i) { nilai[i].na=0.2*nilai[i].nt+0.3*nilai[i].uts+0.5*nilai[i].uas; if (nilai[i].na<50) { nilai[i].nh='E'; Hal.132
Jobsheet Dasar Pemrograman, Bab. 8: Structure
jml[4]++; } else if (nilai[i].na>=50 && nilai[i].na<56) { nilai[i].nh='D'; jml[3]++; } else if (nilai[i].na>=56 && nilai[i].na<65) { nilai[i].nh='C'; jml[2]++; } else if (nilai[i].na>=65 && nilai[i].na<80) { nilai[i].nh='B'; jml[1]++; } else { nilai[i].nh='A'; jml[0]++; } } } /* Mengurutkan Data */ urut(no) int no; { int dummy; float dummy1[N],dummy2; for (i=0;i<no;++i) dummy1[i]=nilai[i].na; for(i=1;i<no;++i) { for (j=i;j<no;++j) { if (dummy1[i-1]
Jobsheet Dasar Pemrograman, Bab. 8: Structure
} 8.5 Lembar Kerja No
Nama File
Keluaran
1 2 3 4 5 6 7 8.6 Latihan dan Tugas 1.
Carilah kesalahan program dibawah ini, kemudian perbaiki serta jalankan. struct siswa { char nama[20]; char no_i nduk[8]; int nilai; } struct siswa kelas2[30]; main() { int i; char n; clrscr(); printf("Jumlah Sis wa : "); gets(n); for (i=0;i
Hal.134
Jobsheet Dasar Pemrograman, Bab. 8: Structure
clrscr(); for (i=0;i
Ulangi kembali soal latihan dan tugas diatas dengan menggunakan structure. Sedikit modifikasi dari soal tersebu, yaitu dengan menambahkan data NAMA untuk setiap siswa, sehingga sebagai input adalah: NAMA maks 20 karakter Nomor pokok Mahasiswa Nilai Tugas Nilai Ujian Tengah Semester Nilai Ujian Akhir Semester Sebagai output: NAMA Nomor Pokok Nilai Akhir Nilai huruf Dalam bentuk keluaran: NAMA NOMOR POKOK NILAI HURUF ..... ..... ..... ..... ..... ..... ..... ..... ..... A:.. B:.. C:.. Jumlah mahasiswa : ... orang
NILAI AKHIR
D:..
..... ..... ..... E:.. orang
3. PT. Penerbangan RAJAWALI SAKTI hendak membuat program untuk menentukan uang perjalanan bagi para PILOT dan PRAMUGARI. Bila dalam satu kali penerbangan tim yang bertugas selalu terdiri dari: 1 orang pilot 1 orang ko pilot 3 orang pramugari Dan uang perjalanan ditentukan berdasarkan rute penerbangan dengan ketentuan: Rute 1 Pilot 100000 Ko pilot 85000 Pramugari 50000 Rute 2 Pilot 90000 Ko pilot 80000 Pramugari 45000 Rute 3 Pilot 60000 Ko pilot 50000 Pramugri 30000 Bila PT. RAJAWALI SAKTI memiliki tiga tim, yaitu: Tim 1 Pilot Johannes Hal.135
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Tim 2
Tim 3
Ko pilot Pramugari Pilot Ko pilot Pramigari Pilot Ko pilot Pramugari
Adr ian Grace, Lidia, Lia gunawan Rian Hetti, Helly, Henny Aditya Raharjo Tini, Tina, Tine
Mengingat nama-nama personel ini akan selalu tetap, maka masukanlah bersama-sama dengan inisialisasi. Untuk setiap pe rsonel perlu data: NAMA 20 karakter BONUS float Sedangkan untuk tim, perlu: NO TIM RUTE SUB TOTAL BONUS Sebagai input program: Rute Tiap Tim Sebagai Output: PT RAJAWALI SAKTI TIM
RUTE
JABATAN
NAMA
1
….
….
….
Pilot
….
….
Kopilot
….
….
Pramugari
….
…. Subtotal
2
….
….
….
Pilot
….
….
Kopilot
….
….
Pramugari
….
….
Subtotal
…. ….
3
….
….
Hal.136
….
BONUS
….
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Pilot
….
….
Kopilot
….
….
Pramugari
….
….
Subtotal
….
Total
….
Daftar Pustaka 1. Al Fatt, Hanif. Dasar Pemrograman C++. Andi Offset, Jogyakarta, 2007. 2. Hartanto, Jogiyanto. Buku Konsep Dasar Pemrograman Bahasa C. Ando Offset, Jogyakarta, 2006. 3. Kadir, Abdul. Algoritma Pemrograman Menggunakan C++. Andi Offset, Jogyakarta, 2007. 4. Ngeon, Thomson Susabda . Pengantar Algoritma Dengan Bahasa C. Salemba Infotek, Jakarta, 2006. 5.
Nugroho, Adi. Algoritma dan Struktur Dara Dengan C. Andi Offset, Jogyakarta, 2009.
6. Partoharsojo, Hartono. Tuntunan Praktis Pemrograman Bahasa C 2.0. PT Elex Media Komputindo, Jakarta, Indonesia, 1989. 7. Supardi, Yuniar. Cara Mudah Belajar Bahasa C dan Flow Chart Dalam Praktek. Dinastindo, Jakarta, 2006.
Hal.137