Bab. 8 Structure - adehandis.files.wordpress.com fileSebaliknya bila structure yang digunakan lebih...

26
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 mengatur 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, dan 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 Mendeklarasikan 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 elemen structure)

Transcript of Bab. 8 Structure - adehandis.files.wordpress.com fileSebaliknya bila structure yang digunakan lebih...

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.