• Tidak ada hasil yang ditemukan

BAB I - BAB IX Struct

N/A
N/A
Protected

Academic year: 2019

Membagikan "BAB I - BAB IX Struct"

Copied!
21
0
0

Teks penuh

(1)

Pe

uct digunak

beda. Bent

k an apabila

uk um um d

engan ist ila

Secara p

i sat u buah

ng ingin di

k larasian st

t u r bo da n

sebagai be

nd c

sian, st ruct

unt uk set

kan m em ili

h sebagai b

c

m pulan dat

(2)

Deklarasi di at as berart i ada suat u t ipe dat a yang bernam a dat a_dosen di

m ana set iap dat a yang ak an dideklarasikan m enggunak an t ipe dat a dat a_dosen akan

m em punyau field nip, nam a, dan alam at . Unt uk dapat m enggunak an t ipe dat a

t ersebut sebuah variabel harus dideklarasikan m enggunakan nam a st ruct nya. Bent uk

um um pendeklarasian variabel st ruct nya adalah sebagai berikut :

na m a _ st r u ct va r ia be l_ 1 ,va r ia be l_ 2 ,…,va r ia be l_ n ;

Adapun cont ohnya sebagai berikut :

1 data_dosen dosen1,dosen2;

Deklarasi dua variabel di at as berart i ada variabel bernam a dosen1 dan

dosen2 di m ana t iap variabel t ersebut m em punyai field sesuai dengan dat a_dosen.

Apabila digam barkan m aka st rukt ur dosen1 dan dosen2 akan sepert i pada gam bar di

baw ah ini:

dosen1 dosen2

nip nam a alam at nip nam a alam at

Gam bar 9.1 St rukt ur dosen1 dan dosen2

Selain deklarasi variabelny a ada hal y ang harus diperhat ikan j uga yait u cara

unt uk m engisi dan m em anggil nilai yang ada di dalam sebuah st ruct . Cara pengisian

nilai dan pem anggilan nilainya adalah sebagai berikut :

/ / un t u k pe n gisia n nila i

va r ia be l_ st r u ct .fie ld_ st r uct = n ila i; / / un t u k pe m a n ggila n n ya

gu na k a n pe r in t a h pr in t f a t a u cou t la lu gu n a k a n for m a t va r ia be l_ st r u ct .fie ld_ st r uct u n t u k

m e m a n ggil n ila in ya

Sebagai cont oh unt uk m engisi nilai pada st ruct dat a_dosen di at as dan m em anggil

nilainy a adalah sebagai berikut :

1 2 3 4 5 6

//untuk mengisi nilai dosen1.nip=41277006024;

dosen1.nama=”adam mukharil b” dosen1.alamat=”bandung”;

atau

(3)

7

//untuk memanggil nilai

printf(“%li\n”,dosen1.nip);//dst

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <stdio.h> #include <stdlib.h>

typedef struct //deklarasi struct {

long int nip; char nama[31]; char alamat[51]; }data_dosen;

data_dosen dosen1,dosen2;//deklarasi variabel struct

int main(int argc, char *argv[]) {

//input

printf("Data Dosen Pertama\n"); printf("---\n");

printf("NIP : ");scanf("%li",&dosen1.nip);

printf("Nama : ");fflush(stdin);gets(dosen1.nama); printf("Alamat : ");fflush(stdin);gets(dosen1.alamat); printf("\n\n");

printf("Data Dosen Kedua\n"); printf("---\n");

printf("NIP : ");scanf("%li",&dosen2.nip);

printf("Nama : ");fflush(stdin);gets(dosen2.nama); printf("Alamat : ");fflush(stdin);gets(dosen2.alamat); printf("\n\n");

//output

(4)

38

printf("Nama : %s\n",dosen1.nama); printf("Alamat : %s\n",dosen1.alamat); printf("\n\n");

printf("Data Dosen Kedua\n"); printf("---\n");

printf("NIP : %li\n",dosen2.nip); printf("Nama : %s\n",dosen2.nama); printf("Alamat : %s\n",dosen2.alamat); printf("\n\n");

system("PAUSE");

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <cstdlib> #include <iostream>

using namespace std;

typedef struct //deklarasi struct {

long int nip; char nama[31]; char alamat[51]; }data_dosen;

data_dosen dosen1,dosen2;//deklarasi variabel struct

int main(int argc, char *argv[]) {

//input

cout<<"Data Dosen Pertama\n"; cout<<"---\n";

cout<<"NIP : ";cin>>dosen1.nip; cout<<"Nama : ";fflush(stdin); cin.get(dosen1.nama,30);

cout<<"Alamat : ";fflush(stdin); cin.get(dosen1.alamat,50);

cout<<endl<<endl;

cout<<"Data Dosen Kedua\n"; cout<<"---\n";

(5)

33

34

35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51

cout<<"Nama : ";fflush(stdin); cin.get(dosen2.nama,30);

cout<<"Alamat : ";fflush(stdin); cin.get(dosen2.alamat,50);

cout<<endl<<endl; //output

cout<<"Data Dosen Pertama\n"; cout<<"---\n";

cout<<"NIP : "<<dosen1.nip<<endl; cout<<"Nama : "<<dosen1.nama<<endl; cout<<"Alamat : "<<dosen1.alamat<<endl; cout<<endl<<endl;

cout<<"Data Dosen Kedua\n"; cout<<"---\n";

cout<<"NIP : "<<dosen2.nip<<endl; cout<<"Nama : "<<dosen2.nama<<endl; cout<<"Alamat : "<<dosen2.alamat<<endl; cout<<endl<<endl;

system("PAUSE"); return EXIT_SUCCESS; }

Hasil eksekusi:

(6)

Struct di Dalam Struct

Suat u st ruct dapat m engandung st ruct lainny a unt uk dij adik an field di

dalam nya. Sebagai gam baran st ruct dat a_dosen m em punyai sebuah field st ruct

t anggal lahir yang berisi field t anggal, bulan, dan t ahun. Bent uk um um

pendeklarasiannya adalah sebagai berikut :

/ / st r uct 1 t ype de f st r u ct {

t ipe _ da t a _ 1 v a r ia be l_ 1 ; t ipe _ da t a _ 2 v a r ia be l_ 2 ; t ipe _ da t a _ n va r ia be l_ n; } n a m a _ st r u ct 1 ;

/ / st r uct da la m st r uct t ype de f st r u ct

{

t ipe _ da t a _ 1 v a r ia be l_ 1 ; t ipe _ da t a _ 2 v a r ia be l_ 2 ;

n a m a _ st r uct 1 na m a _ v a r ia be l_ st r u ct _ 1 ; } n a m a _ st r u ct _ 2 ;

Sebagai cont oh unt uk kasus dat a_dosen adalah sebagai berikut :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

//struct pertama typedef struct {

int tanggal; int bulan; int tahun; }data_tanggal;

//struct dalam struct typedef struct

{

long int nip; char nama[31]; char alamat[51];

(7)

Unt uk lebih j elasny a buat lah program berik ut ini:

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <stdio.h> #include <stdlib.h>

//struct pertama typedef struct {

int tanggal; int bulan; int tahun; }data_tanggal;

//struct dalam struct typedef struct

{

long int nip; char nama[31]; char alamat[51];

data_tanggal tanggal_lahir; }data_dosen;

data_dosen dosen;

int main(int argc, char *argv[]) {

printf("NIP : ");scanf("%li",&dosen.nip); printf("Nama : ");fflush(stdin);

gets(dosen.nama);

printf("Alamat : ");fflush(stdin); gets(dosen.alamat);

printf("Tanggal lahir : ");

scanf("%i",&dosen.tanggal_lahir.tanggal); printf("Bulan lahir : ");

scanf("%i",&dosen.tanggal_lahir.bulan); printf("Tahun lahir : ");

scanf("%i",&dosen.tanggal_lahir.tahun); printf("\n\n");

(8)

42 printf("\n\n");

system("PAUSE");

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <cstdlib> #include <iostream>

using namespace std;

//struct pertama typedef struct {

int tanggal; int bulan; int tahun; }data_tanggal;

//struct dalam struct typedef struct

{

data_dosen dosen;

int main(int argc, char *argv[]) {

cout<<"NIP : ";cin>>dosen.nip; cout<<"Nama : ";fflush(stdin); cin.get(dosen.nama,30);

(9)

36

37

38

39 40 41 42 43

44

45

46 47 48 49

cout<<"Tanggal lahir : ";

cin>>dosen.tanggal_lahir.tanggal; cout<<"Bulan lahir : ";

cin>>dosen.tanggal_lahir.bulan; cout<<"Tahun lahir : "; cin>>dosen.tanggal_lahir.tahun; cout<<endl<<endl;

cout<<"NIP = "<<dosen.nip<<endl; cout<<"Nama = "<<dosen.nama<<endl; cout<<"Alamat = "<<dosen.alamat<<endl; cout<<"Tanggal lahir = "

<<dosen.tanggal_lahir.tanggal<<endl; cout<<"Bulan lahir = "

<<dosen.tanggal_lahir.bulan<<endl; cout<<"Tahun lahir = "

<<dosen.tanggal_lahir.tahun<<endl; cout<<endl<<endl;

system("PAUSE"); return EXIT_SUCCESS; }

Hasil eksekusi:

Gam bar 9.3 Hasil eksekusi program Lat 9.2

Cat at an Apabila ingin m enggunakan st ruct dalam st ruct m aka st ruct yang

akan dipanggil di dalam st ruct nya harus sudah t erdefinisi t erlebih

dahulu ( let aknya harus lebih dahulu dibandingkan st ruct yang akan

(10)

Array Dari Struct (Array of Record)

Pada sub bab sebelum ny a t elah dipelaj ari bagaim ana cara unt uk

m endeklarasikan sebuah variabel dengan t ipe dat a st ruct y ang t elah dibuat . Tapi dari

cara pendeklarasian t ersebut t im bul suat u perm asalahan yait u bagaim ana kalau

deklarasi variabel st ruct nya sangat banyak? Perm asalahan t ersebut dapat

dipecahkan dengan cara m endeklarasikan variabel st ruct nya m enggunakan variabel

bert ipe array. Cara sepert i it u sering disebut sebagai array of st ruct .

Cont oh kasusnya adalah sebuah st r uct yang m enam pung 100 dat a dosen.

Unt uk m em ecahkannya buat lah st ruct dat a_dosen yang nant inya akan digunakan

unt uk m endeklarasikan variabel dosen yang bert ipe array. Unt uk lebih j elasnya

buat lah program berikut ini:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

/*

Program 9.3

Nama File : Lat-9.3.c

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <stdio.h> #include <stdlib.h>

#define maks 100 //maksimal array

typedef struct {

long int nip; char nama[31]; char alamat[51]; }data_dosen;

data_dosen dosen[maks];//array of struct

int main(int argc, char *argv[]) {

int i,j;

printf("Berapa data dosen? ");scanf("%i",&j); printf("\n");

for(i=0;i<j;i++) {

printf("Data dosen ke-%i\n",i+1); printf("---\n");

(11)

31

32

33 34 35 36 37 38 39 40 41 42 43 44 45 46

printf("Nama : ");fflush(stdin); gets(dosen[i].nama);

printf("Alamat : ");fflush(stdin); gets(dosen[i].alamat);

printf("\n\n"); }

for(i=0;i<j;i++) {

printf("Data dosen ke-%i\n",i+1); printf("---\n");

printf("NIP = %li\n",dosen[i].nip); printf("Nama = %s\n",dosen[i].nama); printf("Alamat = %s\n",dosen[i].alamat); printf("\n\n");

}

system("PAUSE"); return 0;

}

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

/*

Program 9.3

Nama File : Lat-9.3.cpp

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <cstdlib> #include <iostream>

#define maks 100 //maksimal array

using namespace std;

typedef struct {

long int nip; char nama[31]; char alamat[51]; }data_dosen;

data_dosen dosen[maks];//array of struct

int main(int argc, char *argv[]) {

int i,j;

(12)

27 28 29 30 31 32 33

34

35 36 37 38 39 40 41 42 43 44 45 46 47 48

cout<<endl;

for(i=0;i<j;i++) {

cout<<"Data dosen ke-"<<i+1<<endl; cout<<"---"<<endl; cout<<"NIP : ";cin>>dosen[i].nip; cout<<"Nama : ";fflush(stdin); cin.get(dosen[i].nama,30);

cout<<"Alamat : ";fflush(stdin); cin.get(dosen[i].alamat,50); cout<<endl<<endl;

}

for(i=0;i<j;i++) {

cout<<"Data dosen ke-"<<i+1<<endl; cout<<"---"<<endl;

cout<<"NIP = "<<dosen[i].nip<<endl; cout<<"Nama = "<<dosen[i].nama<<endl; cout<<"Alamat = "<<dosen[i].alamat<<endl; cout<<endl<<endl;

} system("PAUSE"); return EXIT_SUCCESS; }

Hasil eksekusi:

(13)

Struct Sebagai Parameter Fungsi

St ruct j uga dapat digunakan sebagai param et er fungsi. Supaya

pendeklarasian v ariabel st ruct nya t idak berulang kali dan t idak t epat , disarankan

unt uk m endeklarasikan variabelnya secara lokal ( hanya unt uk fungsi yang

m em but uhkannya saj a) . Unt uk lebih j elasnya buat lah program berikut ini:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

26

27 28 29 30 31 32

/*

Program 9.4

Nama File : Lat-9.4.c

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <stdio.h> #include <stdlib.h>

typedef struct {

int bil1; int bil2; }data_bilangan;

void tampil_bilangan(data_bilangan bilangan) {

printf("Bilangan pertama = %i\n",bilangan.bil1); printf("Bilangan kedua = %i\n",bilangan.bil2); }

int main(int argc, char *argv[]) {

data_bilangan bilangan;

printf("Masukkan bilangan pertama : "); scanf("%i",&bilangan.bil1);

printf("Masukkan bilangan kedua : "); scanf("%i",&bilangan.bil2);

printf("\n");

tampil_bilangan(bilangan); printf("\n");

system("PAUSE"); return 0;

(14)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

28

29 30 31 32 33 34

/*

Program 9.4

Nama File : Lat-9.4.cpp

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <cstdlib> #include <iostream>

using namespace std;

typedef struct {

int bil1; int bil2; }data_bilangan;

void tampil_bilangan(data_bilangan bilangan) {

cout<<"Bilangan pertama = "<<bilangan.bil1<<endl; cout<<"Bilangan kedua = "<<bilangan.bil2<<endl; }

int main(int argc, char *argv[]) {

data_bilangan bilangan;

cout<<"Masukkan bilangan pertama : "; cin>>bilangan.bil1;

cout<<"Masukkan bilangan kedua : "; cin>>bilangan.bil2;

cout<<endl;

tampil_bilangan(bilangan); cout<<endl; system("PAUSE");

(15)

Hasil eksekusi:

Gam bar 9.5 Hasil eksekusi program Lat 9.4

St ruct j uga bisa digunakan sebagai param et er m asukan dan keluaran. Program nya

sebagai berikut :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

/*

Program 9.5

Nama File : Lat-9.5.c

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <stdio.h> #include <stdlib.h>

typedef struct {

int bil1; int bil2; }data_bilangan;

void jumlah_bilangan(data_bilangan *bilangan) {

(*bilangan).bil1=(*bilangan).bil1+1; (*bilangan).bil2=(*bilangan).bil2+2; }

int main(int argc, char *argv[]) {

(16)

25

printf("Masukkan bilangan pertama : "); scanf("%i",&bilangan.bil1);

printf("Masukkan bilangan kedua : "); scanf("%i",&bilangan.bil2);

printf("\n");

jumlah_bilangan(&bilangan);

printf("Bilangan pertama ditambah satu = %i\n" ,bilangan.bil1);

printf("Bilangan kedua ditambah dua = %i\n" ,bilangan.bil2);

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <cstdlib> #include <iostream>

using namespace std;

typedef struct {

int bil1; int bil2; }data_bilangan;

void jumlah_bilangan(data_bilangan *bilangan) {

(*bilangan).bil1=(*bilangan).bil1+1; (*bilangan).bil2=(*bilangan).bil2+2; }

int main(int argc, char *argv[]) {

data_bilangan bilangan;

cout<<"Masukkan bilangan pertama : "; cin>>bilangan.bil1;

cout<<"Masukkan bilangan kedua : "; cin>>bilangan.bil2;

cout<<endl;

(17)

31

32

33 34 35 36

cout<<"Bilangan pertama ditambah satu = " <<bilangan.bil1<<endl;

cout<<"Bilangan kedua ditambah dua = " <<bilangan.bil2<<endl;

cout<<endl; system("PAUSE");

return EXIT_SUCCESS; }

Hasil eksekusi:

Gam bar 9.6 Hasil eksekusi program Lat 9.5

Tanda kurung yang digunakan unt uk penulisan ( * bila n ga n ) .bil.. harus disert akan karena operat or t it ik m em punyai pr ior it as lebih t inggi dibandingkan

operat or * sehingga bisa m enyebabkan kesalahan penunj ukkan. Sebenarnya

penulisan ( * bila n ga n) .bil.. dapat digant i m enj adi bila n ga n - > bil.. ( operat or panah) unt uk lebih j elasnya buat lah program berikut ini:

1 2 3 4 5 6 7 8 9

/*

Program 9.6

Nama File : Lat-9.6.c

Programmer : Adam Mukharil Bachtiar, S.Kom. */

(18)

10

typedef struct {

int bil1; int bil2; }data_bilangan;

void jumlah_bilangan(data_bilangan *bilangan) {

bilangan->bil1=bilangan->bil1+1; bilangan->bil2=bilangan->bil2+2; }

int main(int argc, char *argv[]) {

data_bilangan bilangan;

printf("Masukkan bilangan pertama : "); scanf("%i",&bilangan.bil1);

printf("Masukkan bilangan kedua : "); scanf("%i",&bilangan.bil2);

printf("\n");

jumlah_bilangan(&bilangan);

printf("Bilangan pertama ditambah satu = %i\n" ,bilangan.bil1);

printf("Bilangan kedua ditambah dua = %i\n" ,bilangan.bil2);

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <cstdlib> #include <iostream>

using namespace std;

typedef struct {

(19)

18 19 20 21 22 23 24 25 26 27

28

29 30 31

32

33 34 35 36

void jumlah_bilangan(data_bilangan *bilangan) {

bilangan->bil1=bilangan->bil1+1; bilangan->bil2=bilangan->bil2+2; }

int main(int argc, char *argv[]) {

data_bilangan bilangan;

cout<<"Masukkan bilangan pertama : "; cin>>bilangan.bil1;

cout<<"Masukkan bilangan kedua : "; cin>>bilangan.bil2;

cout<<endl;

jumlah_bilangan(&bilangan);

cout<<"Bilangan pertama ditambah satu = " <<bilangan.bil1<<endl;

cout<<"Bilangan kedua ditambah dua = " <<bilangan.bil2<<endl;

cout<<endl; system("PAUSE");

return EXIT_SUCCESS; }

Hasil eksekusi:

Gam bar 9.7 Hasil eksekusi program Lat 9.6

Selain sebagai param et er fungsi, st ruct dapat digunakan j uga sebagai nilai

(20)

1

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <stdio.h> #include <stdlib.h>

typedef struct {

int tahun; int bulan; int tanggal; }data_tanggal;

data_tanggal tanggal_lahir() {

data_tanggal tgl; tgl.tahun=1986; tgl.bulan=6; tgl.tanggal=5; return tgl; }

int main(int argc, char *argv[]) {

data_tanggal tanggal;

tanggal=tanggal_lahir(); printf("Tanggal Lahir = %i-%i-%i\n\n"

,tanggal.tanggal,tanggal.bulan,tanggal.tahun); system("PAUSE");

Programmer : Adam Mukharil Bachtiar, S.Kom. */

#include <cstdlib> #include <iostream>

using namespace std;

(21)

13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

33 34 35

{

int tahun; int bulan; int tanggal; }data_tanggal;

data_tanggal tanggal_lahir() {

data_tanggal tgl; tgl.tahun=1986; tgl.bulan=6; tgl.tanggal=5; return tgl; }

int main(int argc, char *argv[]) {

data_tanggal tanggal;

tanggal=tanggal_lahir();

cout<<"Tanggal Lahir = "<<tanggal.tanggal<<"-"

<<tanggal.bulan<<"-"<<tanggal.tahun<<endl<<endl; system("PAUSE");

return EXIT_SUCCESS; }

Hasil eksekusi:

Gambar

Gambar 9.1 Struktur dosen1 dan dosen2
Gambar 9.2 Hasil eksekusi program Lat 9.1
Gambar 9.3 Hasil eksekusi program Lat 9.2
Gambar 9.4 Hasil eksekusi program Lat 9.3
+5

Referensi

Garis besar

Dokumen terkait

Salah sat u t eknologi yang dinilai sesuai dengan kondisi lahan kering adalah penerapan agroforest ry, yait u suat u sist em pengelolaan lahan dengan berasaskan kelest

eut rofikasi t erjadi akibat banyaknya nut rien yang masuk ke dalam suat u perairan dan mengakibat kan mat inya perairan t ersebut karena t idak t ersedianya oksigenb.

Berdasarkan hasil t ersebut diat as yait u t idak ada penyedia yang memasukkan dokumen penaw aran. maka Pelelangan Ulang dinyat akan GAGAL , dan unt uk sebagai t indak

Dampak t ersebut disebabkan oleh perkembangan yang makin komplek dan yang makin kompleks dalam segala bidang kehidupan masyarakat yang menyangkut.. beberapa perkara , yait

Kegiat an proyek konst ruksi t erdapat sust u proses yang mengolah sumber daya proyek menj adi suat u hasil kegiat an berupa. bangunan, dalam proses t ersebut melibat kan

Dengan pendekat an t ersebut diharapkan ref ormasi hukum ekonomi menghasilkan t uj uan: per t ama , mencipt akan suat u sist em hukum ekonomi ‘ kekeluargaan’ at au

Akan t et api ada beberapa f akt or yang menghambat part isipasi masyarakat t ersebut , yait u: kurang t erbukanya inst it usi penegak hukum dalam memberikan

bahwa unt uk kepent ingan t ersebut , diperl ukan suat u wadah bagi il muwan Indonesia t erkemuka yang bersif at mandiri, yang mampu menyampaikan saran dan