• Tidak ada hasil yang ditemukan

Jobsheet Dasar Pemrograman, Bab. 8: Structure. Bab. 8 Structure

N/A
N/A
Protected

Academic year: 2021

Membagikan "Jobsheet Dasar Pemrograman, Bab. 8: Structure. Bab. 8 Structure"

Copied!
26
0
0

Teks penuh

(1)

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; };

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)

(2)

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;

(3)

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 {

(4)

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 {

(5)

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:

(6)

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

(7)

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};

(8)

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;

(9)

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];

(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];

(11)

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();

(12)

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(" ");

(13)

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 */

(14)

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 : ");

(15)

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();

} 

(16)

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)

(17)

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) {

(18)

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; }

(19)

} } } /* 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];

(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");

(21)

}

/* 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';

(22)

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; } } }

(23)

}

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]); }

(24)

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:

(25)

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 …. …. ….

(26)

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.

Referensi

Dokumen terkait

Penelitian ini dilakukan untuk mengetahui konsentrasi penambahan katalis DBTDL yang tepat atau efektif pada aplikasi cat acrylic berbasis solvent untuk

Alhamdulillah, Terima Kasih banyak buat mbak-mbak alumni atas sharing dan saran, serta waktu yang telah disempatkan kepada kami untuk bisa mengerjakan skripsi dengan baik..

Simbol h exagram yang terdapat dalam The Jacatra Secret telah dijelaskan bahwa, simbol maskulin atau laki-laki oleh masyarakat purba sering digambarkan sengan

Faktor teknologi yang mempengaruhi lingkungan eksternal yaitu, perkembangan teknologi yang memberikan dampak langsung atau tidak langsung terhadap peningkatan pajak restoran,

Hampir semua wilayah pesisir di gorontalo utara memiliki topografi yang tidak rata atau bergelombang, dan akibatnya pengelolaan yang didarat yang menghilangkan daerah penyangga

Berdasarkan uraian di atas, maka tujuan utama dari penelitian ini ialah mengembangkan model optimasi distribusi air minum dengan menggunakan parameter model berupa

Titik berat bidang gabungan Mempersiapka n tugas dan mendiskusikan nya dalam kelompok Menyelesai kan permasalah an titik berat dan mendiskusi kannya Kemampuan dalam

1) Seksi Program dan Kerjasama mempunyai tugas melakukan penyiapan bahan penyusunan program, rencana kerja dan anggaran, pelaksanaan kerja sama, dan identifikasi