Bab. 8
Structure
8.1 Tujuan Instruksional Khusus1. 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; };
Apa yang aka n kita lakuka n tadi, hanyalah mengatur format structure serta variable- variable penyusunnya. K ita 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;
Variable yang menyusun sebuah structure (variable ele men 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;
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 { char nama[20]; char alamat[30]; float gaji_tetap; float tunjangan; } pegawai1; struct { 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 {
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_p gw { 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 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:
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}};
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}};
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},
….
20 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.
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 dan pegawai2.nama
pegawai1.alamat pegawai2.alamat
pegawai1.gaji 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};
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;
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];
ketua, s atu orang; ditunjukan oleh pernyat aa 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 elemen-elemen nama, no_induk, da n nilai. Nama dari elemen-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 strukt ure 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];
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();
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(" ");
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 D ATA :"); 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 inp ut 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 */
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 : ");
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\tN ilai : "); 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\tN ilai : "); 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();
}
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 NILAI SISWA%s \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"); }
/* 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'; 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]<dummy1[j]) { dummy=k[i-1]; k[i-1]=k[j]; k[j]=dummy; dummy2=dummy1[i-1]; dummy1[i-1]=dummy1[j]; dummy1[j]=dummy2; }
} } } /* 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];
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 NILAI SISWA%s \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");
}
/* 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';
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]<dummy1[j]) { dummy=k[i-1]; k[i-1]=k[j]; k[j]=dummy; dummy2=dummy1[i-1]; dummy1[i-1]=dummy1[j]; dummy1[j]=dummy2; } } }
}
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<n;++i) { printf("Siswa ke : %d",i+1); printf("Nama Siswa : "); gets(siswa.nama[i]); printf("No Induk : "); gets(siswa.no_induk[i]); printf("Nilai : "); gets(siswa.nilai[i]); }
clrscr(); for (i=0;i<n;++i)
printf("\n%2 d %-20s%-10s%4d", siswa.nama[i],siswa.no_induk[i],sis wa.nilai[i]); }
2. 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 AKHIR
NILAI HURUF
... ... ... ...
... ... ... ...
... ... ... ...
A:.. B:.. C:.. D:.. E:.. orang
Jumlah mahasiswa : ... 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:
Ko pilot Adr ian
Pramugari Grace, Lidia, Lia
Tim 2 Pilot gunawan
Ko pilot Rian
Pramigari Hetti, Helly, Henny
Tim 3 Pilot Aditya
Ko pilot Raharjo
Pramugari 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 R AJAWALI SAKTI
TIM RUTE JABATAN NAMA BONUS
1 …. Pilot Kopilot Pramugari …. …. …. …. …. …. …. …. Subtotal …. 2 …. Pilot Kopilot Pramugari …. …. …. …. Subtotal …. …. …. …. …. …. 3 …. …. ….
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.