bab. 8 structure - adehandis.files.wordpress.com filesebaliknya bila structure yang digunakan lebih...
TRANSCRIPT
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.112
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 akan 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 bebas satu sama lain,
yaitu variable-variable untuk nama, alamat, dan gaji. Dengan structure data tadi dapat
diorganiasi menjadi satu kesatuan, misalnya structure untuk pegawai 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 Mendeklarasikan Structure
Sebelum mulai digunakan, structure harus dideklarasikan lebih dahulu. Sebagai contoh, kita
akan mencoba mendeklarasikan sebuah structure unt uk pegawai, yang tersusun dari nama
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 akan kita lakukan tadi, hanyalah mengatur format structure serta variable-variable
penyusunnya. Kita BELUM menciptakan 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 elemen structure)
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.113
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;
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.114
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 menentukan structure mana yang harus diguna kan.
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 akan menggun akan structure yang
sama? Misalkan variable pegawai1 dan 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 {
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.115
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 pegawai[2], pegawai[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 format structure.
Untuk inisialisasi variable structure tungal, dapat anda lihat seperti contoh di bawah ini:
struct data_pgw { char nama[20]; variable
elemen structure
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.116
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:
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.117
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
15 data
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.118
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,demikian 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};
Nilai-nilai elemen variabel structure-nya adalah
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.119
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 dengan 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 variabel structure */ struct { char nama[20]; char alamat[20]; float gaji; } pegawai1;
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.120
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_siswa { 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_siswa ketua; struct data_siswa anggota[4]; } regu[10];
Structure diatas ini memiliki elemen-elemen yang juga berbentuk structure, bentuk semacam
ini disebut sebagai 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:
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.121
ketua, s atu orang; ditunjukan oleh pernyataan: struct data_siswa ketua; anggota, 4 orang; yang ditunjukan oleh pernyataan; struct data_siswa anggota[4];
ketua ataupun anggota menggunakan format structure data_siswa, yang memiliki elemen-
elemen nama, no_induk, dan nilai. Nama dari elemen nested structure ini dituliskan lengkap:
nama_var_struct_induk.nama_var_anak.nama_elemen
yang dimaksud dengan stucture induk ada lah structure yang elemen-elemennya jugaberupa
structure, sedangkan structure anak ada lah strukture yang elemen-elemennya berupa variable
biasa.
Contoh:
Reg[0].ketua.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_siswa merupakan ‘tag’ dari stucture anak,
bukan nama variabe l structurenya. Nama variabe l untuk structure data_siswa, adalah ketua
dan anggota[], yang terlihat dari pernyataan:
structure data_siswa ketua;
structure data_siswa anggota[4];
Sebagai contoh pelajarilah program dibawah ini.
/* Nested Structure */ struct data_siswa { char nama[20]; char no_i nduk[10]; float nilai; }; struct { struct data_siswa ketua; struct data_siswa anggota[4]; } regu[3];
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.122
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(); }
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.123
8.2.6 Mengirimkan Structure ke Suatu Fungsi
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 fungsi */ struct data { char nama[20]; int nilai; }; struct data siswa[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(); /* Menampilkan output * data structure siswa yang berbentuk array dikirimkan * ke fungsi output() */ output(n,siswa); getch(); } /* File Input */ input(jml,sis) int jml; struct data s is[]; /* Menerima data structure 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(" ");
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.124
POSISI(20,5);printf("Siswa 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 fungsi main() variabe l structure siswa yang berbentuk array, dikirimkan ke fungsi
input() dan output(), dengan menggunakan pernyataan:
Input(n,s iswa)
Output(n,s iswa)
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 simpan dengan nama Con81, kemudian
lakukanlah compile dan run, dan catat hasilnya pada lembar kerja yang tersedia.
* Contoh Program 10.1 * Program Input Output * Untuk variabe l structure */
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.125
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 ketikkan : "); 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 simpan dengan nama Con82, kemudian
lakukanlah compile dan run, dan 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 : ");
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.126
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 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(); }
�
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.127
3 Buatlah program seperti dibawah ini dan simpan dengan nama Con83, kemudian
lakukanlah compile dan run, dan 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 Siswa : "); gets(jml); n=atoi(jml); garis(); /* Input Data */ masuk(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)
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.128
printf("\xDF"); printf("\n"); } /* Fungsi 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); /* Indeks 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) {
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.129
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; }
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.130
} } } /* 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 mahasiswa : %d",no); printf("\nTekan Sembarang Tombol"); getch(); }
4 Buatlah program seperti dibawah ini dan simpan dengan nama Con84, kemudian
lakukanlah compile dan run, dan 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];
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.131
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 Siswa : "); gets(jml); n=atoi(jml); garis(); /* Input Data */ masuk(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");
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.132
} /* Fungsi 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); /* Indeks 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';
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.133
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; } } }
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.134
}
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 Siswa : "); 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]); }
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.135
clrscr(); for (i=0;i<n;++i) printf("\n%2d %-20s%-10s%4d", siswa.nama[i],siswa.no_induk[i],siswa.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: Tim 1 Pilot Johannes
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.136
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 RAJAWALI SAKTI TIM RUTE JABATAN NAMA BONUS
1 ….
Pilot
Kopilot
Pramugari
….
….
….
….
….
….
….
….
Subtotal
….
2 ….
Pilot
Kopilot
Pramugari
….
….
….
….
Subtotal
….
….
….
….
….
….
3 …. …. ….
Jobsheet Dasar Pemrograman, Bab. 8: Structure
Hal.137
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.