Rekaman (struct)
Pengantar
Pada bab ini, Anda akan belajar
bagaimana mengelompokkan beberapa nilai yang berelasi dengan berbagai tipe
data. C++ menyediakan sebuah tipe data terstruktur yang lain, dinamakan struct (beberapa bahasa pemrograman
menggunakan istilah “rekaman”), untuk mengelompokkan item-item berelasi yang
berbeda tipe. Array merupakan struktur
data homogen; struct adalah struktur
data heterogen.
Rekaman (struct)
Dimisalkan bahwa Anda ingin menuliskan
sebuah program untuk memproses data mahasiswa. Rekaman mahasiswa terdiri-dari
nama mahasiswa, NIM (ID mahasiswa), IPK, matakuliah yang diambil, dan nilai
matakuliah. Jadi, pelbagai komponen berkaitan dengan seorang mahasiswa. Tiap
komponen bisa berbeda tipe. Sebagai contoh, nama mahassiwa adalah sebuah
string, dan IPK adalah sebuah angka titik-mengambang (pecahan). Karena tiap
komponen berbeda tipe, Anda tidak dapat menggunakan sebuah array untuk
mengelompokkan item-item yang berkaitan dengan seorang mahasiswa. C++
menyediakan suatu tipe data terstruktur yang dinamai struct untuk
mengelompokkan item-item pelbagai tipe. Pengelompokan komponen-komponen yang
berelasi tetapi berbeda tipe memiliki beberapa keuntungan. Sebagai contoh,
sebuah variabel tunggal dapat melewatkan semua komponen sebagai parameter
kepada suatu fungsi.
struct: Sebuah koleksi yang
terdiri-dari sejumlah komponen dimana tiap komponen dapat diakses lewat
namanya. Setiap komponen bisa berbeda tipe.
Setiap komponen sebuah struct disebut dengan anggota struct. Sintaks umum dari sebuah struct dalam C++ adalah:
struct namaStruct
{
tipeData1 pengenal1;
tipeData2 pengenal2;
.
.
.
tipeDatan pengenaln;
};
Dalam C++, struct merupakan katakunci. Setiap anggota dari struct, meskipun diapit oleh sepasang
kurung kurawal (yang membentuk sebuah blok), tidak dipandang sebagai sebuah
statemen gabungan. Jadi, sebuah semikolon (yang berada setelah kurung kurawal
kanan) sangat penting untuk mengakhiri statemen struct. Semikolon di akhir definisi struct merupakan bagian dari sintaks.
Statemen:
struct tipeKaryawan
{
string namaPertama;
string namaAkhir;
string alamat1;
string alamat2;
double gaji;
string KTP;
};
mendefinisikan sebuah struct tipeKaryawan dengan enam anggota. Anggota namaPertama, namaAkhir, alamat1, alamat2, dan KTP semua
bertipe string, dan anggota gaji bertipe double.
Sama seperti sembarang definisi, sebuah
struct adalah suatu definisi, bukan
deklarasi. Jadi, ia mendefinisikan satu tipe data; tidak ada memori yang
dialokasikan.
Gambar 9.1 struct mahasiswaBaru dan struct mahasiswa
Begitu tipe data didefinisikan, Anda
dapat mendeklarasikan variabel bertipe data itu. Sekarang, akan didefinisikan
sebuah tipe struct, tipeMahasiswa, dan kemudian
dideklarasikan dua variabel bertipe data tipeMahasiswa.
struct tipeMahasiswa
{
string namaPertama;
string namaAkhir;
char nilaiMtKuliah;
int skorUjian;
int skorPemrograman;
double IPK;
};
//deklarasi variabel
tipeMahasiswa mahasiswaBaru;
tipeMahasiswa mahasiswa;
Kedua statemen tersebut mendeklarasikan
dua variabel struct, mahasiswaBaru dan mahasiswa, yang bertipe tipeMahasiswa.
Memori yang dialokasikan cukup besar untuk menyimpan namaPertama, namaAkhir, nilaiMtKuliah, skorUjian, skorPemrograman,
dan IPK (lihat Gambar 9.11).
Mengakses
Anggota struct
Dalam array, Anda mengakses sebuah
komponen menggunakan nama array yang diikuti dengan posisi relatif (indeks)
komponen. Nama array dan indeks dipisahkan oleh kurung siku. Untuk mengakses
sebuah anggota struktur (komponen), Anda menggunakan nama variabel struct diikuti dengan nama anggota;
kedua nama ini dipisahkan oleh sebuah titik. Sintaks untuk mengakses sebuah
anggota struct adalah:
namaVariabelStruct.namaAnggota
namaVariabelStruct.namaAnggota sama seperti variabel biasa. Sebagai
contoh, mahasiswaBa-ru.nilaiMtKuliah
adalah sebuah variabel bertipe char,
mahasiswaBaru.namaPertama adalah
sebuah variabel string, dan
seterusnya. Akibatnya, Anda dapat melakukan apapun terhadap anggota struct seperti yang Anda lakukan
terhadap variabel biasa. Anda bisa, misalnya, menggunakannya di dalam statemen
penugasan atau di dalam statemen masukan/keluaran.
Dalam C++, dot atau titik (.) merupakan
sebuah operator yang dinamakan dengan
operator akses anggota atau operator akses keanggotaan.
Gambar 9.2 struct mahasiswaBaru
Dimisalkan bahwa Anda ingin
menginisialisasi anggota IPK dari mahasiswaBaru dengan 0.0. Statemen
berikut melakukan tugas ini:
mahasiswaBaru.IPK = 0.0;
Sama halnya, statemen:
mahasiswaBaru.namaPertama = "Rico";
mahasiswaBaru.namaAkhir = "Chandra";
menyimpan “Rico” di dalam anggota namaPertama
dan “Chandra” di dalam anggota namaAkhir dari mahasiswaBaru.
Setelah ketiga statemen tersebut
dieksekusi, mahasiswaBaru menjadi
seperti ditunjukkan pada Gambar 9.2.
Statemen:
cin >> mahasiswaBaru.namaPertama;
membaca string berikutnya dari divais
masukan standar dan menyimpannya di dalam mahasiswaBaru.namaPertama.
Statemen:
cin >> mahasiswaBaru.skorUjian
>> mahasiswaBaru.skorPemrograman;
membaca dua nilai integer dari
papanketik dan menyimpannya di dalam mahasiswaBaru.skor-Ujian
dan mahasiswaBaru.skorPemrograman.
Dimisalkan bahwa skor adalah sebuah variabel bertipe int. Statemen:
skor =
(mahasiswaBaru.skorUjian + mahasiswaBaru.skorPemrograman) / 2;
menugaskan rerata dari mahasiswaBaru.skorUjian dan mahasiswaBaru.skorPemrograman kepada skor.
Statemen berikut menentukan nilai
matakuliah dan menyimpannya di dalam mahasiswa-Baru.nilaiMtKuliah:
if (skor >= 90)
mahasiswaBaru. nilaiMtKuliah =
'A';
else if (skor >= 80)
mahasiswaBaru. nilaiMtKuliah =
'B';
else if (skor >= 70)
mahasiswaBaru. nilaiMtKuliah =
'C';
else if (skor >= 60)
mahasiswaBaru. nilaiMtKuliah =
'D';
else
mahasiswaBaru.nilaiMtKuliah = 'F';
Penugasan
Anda dapat menugaskan nilai dari satu
variabel struct kepada variabel struct lain yang bertipe sama
menggunakan sebuah statemen penugasan. Dimisalkan bahwa mahasiswaBaru seperti ditunjukkan pada Gambar 9.3.
Statemen:
mahasiswa = mahasiswaBaru;
menyalin isi dari mahasiswaBaru ke dalam mahasiswa.
Setelah statemen penugasan ini dieksekusi, nilai dari mahasiswa ditampilkan pada Gambar 9.4.
Gambar 9.3 struct mahasiswaBaru
Pada kenyataannya, statemen penugasan:
mahasiswa = mahasiswaBaru;
ekivalen dengan beberapa statemen
berikut:
mahasiswa.namaPertama
= mahasiswaBaru.namaPertama;
mahasiswa.namaAkhir
= mahasiswaBaru.namaAkhir;
mahasiswa.skorMtKuliah
= mahasiswaBaru.skorMtKuliah;
mahasiswa.skorUjian
= mahasiswaBaru.skorUjian;
mahasiswa.skorPemrograman
= mahasiswaBaru. skorPemrograman;
mahasiswa.IPK = mahasiswaBaru.IPK;
Gambar 9.4 struct mahasiswa
Perbandingan
(Operator Relasional)
Untuk membandingkan variabel-variabel struct, Anda membandingkannya anggota
demi anggota. Sebagai contoh, dimisalkan bahwa mahasiswaBaru dan mahasiswa
dideklarasikan seperti sebelumnya. Lebih lanjut, dimisalkan bahwa Anda ingin
melihat apakah mahasiswa dan mahasiswaBaru merujuk ke mahasiswa yang
sama. Sekarang, mahasiswaBaru dan mahasiswa akan merujuk ke mahasiswa
yang sama jika keduanya memiliki nama pertama sama dan nama akhir yang sama.
Untuk membandingkan nilai-nilai dari mahasiswa
dan mahasiswaBaru, Anda harus
membandingkannya anggota demi anggota, sebagai berikut:
if (mahasiswa.namaPertama == mahasiswaBaru.namaPertama &&
mahasiswa.namaAkhir == mahasiswaBaru.namaAkhir)
.
.
.
Meskipun Anda dapat menggunakan sebuah
statemen penugasan untuk menyalin isi dari satu struct ke dalam struct
lain yang bertipe sama, Anda tidak bisa menggunakan operator relasional pada
variabel struct. Oleh karena itu,
berikut adalah tindakan ilegal:
if (mahasiswa == mahasiswaBaru) //salah
.
.
.
Masukan/Keluaran
Data di dalam sebuah variabel struct harus dibaca satu anggota per
waktu. Sama halnya, isi dari sebuah variabel struct harus ditulis satu anggota per waktu.
Anda telah melihat bagaimana membaca
data ke dalam sebuah variabel struct.
Sekarang, akan dilihat bagaimana menampilkan sebuah variabel struct. Statemen:
cout << mahasiswaBaru.namaPertama << " " << mahasiswaBaru.namaAkhir
<< " "
<< mahasiswaBaru.nilaiMtKuliah
<< " "
<< mahasiswaBaru.skorUjian
<< " "
<< mahasiswaBaru.skorPemrograman
<< " "
<< mahasiswaBaru.IPK << endl;
menampilkan isi dari variabel struct, mahasiswaBaru.
Variabel
struct dan Fungsi
Ingat bahwa array dilewatkan hanya
lewat referensi, dan sebuah fungsi tidak dapat menghasilkan nilai balik berupa
sebuah array. Namun:
·
Sebuah variabel struct dapat dilewatkan sebagai parameter baik lewat nilai maupun
lewat referensi.
·
Sebuah fungsi dapat menghasilkan
nilai balik bertipe struct.
Fungsi berikut membaca dan menyimpan
nama pertama, nama akhir, skor ujian, skor pemrograman, dan IPK dari seorang
mahasiswa. Fungsi ini juga menentukan nilai matakuliah mahasiswa dan
menyimpannya di dalam anggota nilaiMtKuliah.
void baca(tipeMahasiswa& mahasiswa)
{
int skor;
cin >> mahasiswa.namaPertama
>> mahasiswa.namaAkhir;
cin >> mahasiswa.skorUjian
>> mahasiswa.skorPemrograman;
cin >> mahasiswa.IPK;
skor = (mahasiswa.skorUjian + mahasiswa.skorPemrograman)
/ 2;
if (skor >= 90)
mahasiswa.nilaiMtKuliah = 'A';
else if (skor >= 80)
mahasiswa.nilaiMtKuliah =
'B';
else if (skor >= 70)
mahasiswa.nilaiMtKuliah =
'C';
else if (skor >= 60)
mahasiswa.nilaiMtKuliah =
'D';
else
mahasiswa.nilaiMtKuliah =
'F';
}
Statemen:
baca(mahasiswaBaru)
memanggil fungsi baca. Fungsi baca
menyimpan informasi terkait di dalam variabel mahasiswaBaru.
Sama halnya, Anda dapat menuliskan
sebuah fungsi yang akan menampilkan isi dari sebuah variabel struct. Sebagai contoh, fungsi berikut
menampilkan isi dari sebuah variabel struct
bertipe tipeMahasiswa pada monitor:
void tampilMahasiswa(tipeMahasiswa mahasiswa)
{
cout << mahasiswa.namaPertama << " " << mahasiswa.namaAkhir
<< " "
<< mahasiswa.nilaiMtKuliah
<< " "
<< mahasiswa.skorUjian
<< " "
<< mahasiswa.skorPemrograman
<< " "
<< mahasiswa.IPK << endl;
}
Array
di dalam struct
Senarai merupakan himpunan elemen yang
bertipe sama. Jadi, sebuah senarai mempunyai dua hal yang berkaitan dengannya:
nilai-nilai (yaitu, elemen-elemen) dan panjang. Karena nilai dan panjang
keduanya berkaitan dengan sebuah senarai, Anda dapat mendefinisikan sebuah struct yang memuat kedua item tersebut.
const int UKURAN_ARRAY = 1000;
struct tipeSenarai
{
int elemSenarai[UKURAN_ARRAY]; //array
yang memuat senarai
int panjangSenarai; //panjang
senarai
};
Statemen berikut mendeklarasikan intSenarai sebagai sebuah variabel struct bertipe tipeSenarai (lihat Gambar 9.5):
tipeSenarai intSenarai;
Variabel intSenarai mempunyai dua anggota: elemSenarai, sebuah array yang memuat 1000 komponen bertipe int,
dan panjangSenarai, bertipe int. Selain itu, intSenarai.elemSenarai mengakses anggota elemSenarai, dan intSenarai.panjangSenarai
mengakses anggota panjangSenarai.
Gambar 9.5 Variabel struct intSenarai
Perhatikan beberapa statemen berikut:
intSenarai.panjangSenarai = 0; //Baris
1
intSenarai.elemSenarai[0] = 12; //Baris
2
intSenarai.panjangSenarai++; //Baris
3
intSenarai.elemSenarai[1] = 37; //Baris
4
intSenarai.panjangSenarai++; //Baris 5
Statemen pada baris 1 menetapkan nilai
dari panjangSenarai menjadi 0.
Statemen pada baris 2 menyimpan 2 di dalam komponen pertama dari array elemSenarai. Statemen pada baris 3
menginkremen nilai dari panjangSenarai
sebesar 1. Arti dari statemen lain sama. Setelah kelima statemen ini
dieksekusi, intSenarai akan seperti
yang ditunjukkan pada Gambar 9.6.
Gambar 9.6 intSenarai
setelah statemen pada baris 1 sampai baris 5 dieksekusi
Selanjutnya, akan dituliskan algoritma
pencarian sekuensial untuk menentukan apakah sebuah item berada di dalam
senarai. Jika itemCari ditemukan di
dalam senarai, maka fungsi menghasilkan lokasinya di dalam senarai; sebaliknya,
fungsi menghasilkan -1.
int cariSek(const tipeSenarai&
senarai, int itemCari)
{
int lok;
bool ditemukan = false;
for (lok = 0; lok < senarai.panjangSenarai; lok++)
if (senarai.elemSenarai[lok] == itemCari)
{
ditemukan = true;
break;
}
if (ditemukan)
return lok;
else
return -1;
}
Pada fungsi ini, karena panjangSenarai
merupakan sebuah anggota dari senarai, Anda mengaksesnya dengan senarai.panjangSenarai. Sama halnya,
Anda dapat mengakses sebuah elemen senarai melalui senarai.elemSenarai[lok].
Perhatikan bahwa daftar parameter formal
dari fungsi cariSek dideklarasikan
sebagai sebuah parameter referensi konstan. Ini berarti bahwa senarai menerima alamat dari parameter
aktual terkait, tetapi senarai tidak
dapat memodifikasi parameter aktual tersebut.
Dimisalkan bahwa sebuah struct memiliki beberapa anggota data
yang memerlukan memori yang cukup besar untuk menyimpan data, dan Anda perlu
melewatkan sebuah variabel bertipe struct
dengan nilai. Parameter formal terkait akan menerima salinan dari data dari
variabel tersebut. Kompiler kemudian akan mengalokasikan memori untuk parameter
formal untuk menyalin nilai dari parameter aktual. Operasi ini akan memerlukan
memori yang cukup besar untuk ruang penyimpanan dan waktu komputasi yang
signifikan untuk menyalin nilai dari parameter aktual ke dalam parameter
formal.
Di sisi lain, jika sebuah variabel
dilewatkan dengan referensi, maka parameter formal hanya akan menerima alamat
dari parameter aktual. Oleh karena itu, cara efisien dalam melewatkan sebuah
variabel sebagai parameter adalah lewat referensi. Jika sebuah variabel
dilewatkan dengan referensi, maka ketika parameter formal berubah, maka
parameter aktual juga berubah. Kadangkala, Anda tidak ingin fungsi melakukan
perubahan terhadap nilai dari parameter aktual. Dalam C++, Anda dapat melewatkan
sebuah variabel dengan referensi dan tetap menjaga agar nilainya tidak berubah.
Ini dilakukan menggunakan katakunci const
di dalam deklarasi parameter formal, seperti yang telah ditunjukkan di dalam
definisi fungsi cariSek.
struct
di dalam Array
Dimisalkan bahwa sebuah perusahaan
memiliki 50 karyawan tetap. Anda perlu menampilkan gaji bulanan dan menjejak
berapa banyak uang yang telah dibayarkan kepada setiap karyawan. Pertama, akan
didefinisikan rekaman seorang karyawan berikut:
struct tipeKaryawan
{
string namaPertama;
string namaAkhir;
int IDPersonal;
string IDPerusahaan;
double gajiTahunan;
double gajiBulanan;
double totalGaji;
double bonusBulanan;
};
Setiap karyawan memiliki
anggota-anggota (komponen-komponen) berikut: nama pertama, nama akhir, ID personal,
ID perusahaan, gaji tahunan, gaji bulanan, total gaji yang telah dibayarkan,
dan bonus bulanan.
Karena Anda memiliki 50 karyawan dan
tipe data tiap karyawan sama, Anda dapat menggunakan sebuah array yang memuat
50 komponen untuk memproses data karyawan tersebut.
tipeKaryawan karyawan[50];
Statemen ini mendeklarasikan sebuah
array karyawan yang memuat 50
komponen bertipe tipeKaryawan (lihat
Gambar 9.7). Setiap elemen dari karyawan adalah sebuah struct. Gambar 9.7 juga menunjukkan karyawan[2].
Gambar 9.7 Array karyawan
Dimisalkan bahwa Anda juga memiliki
deklarasi berikut:
int kounter;
Lebih lanjut, dimisalkan bahwa data
awal setiap karyawan, nama pertama, nama akhir, ID personal, ID perusahaan, dan
gaji tahunan, tersedia di dalam sebuah file. Diasumsikan bahwa data setiap
karyawan disimpan di dalam sebuah file, katakanlah, karyawan.dat. Kode C++ berikut menempatkan data ke dalam aray
karyawan. Diasumsikan bahwa, awalnya, totalGaji
adalah 0 dan bahwa bonus bulanan
ditentukan berdasarkan kinerja per bulan.
ifstream infile; //variabel aliran masukan
//diasumsikan bahwa file karyawan.dat telah dibukan
for (kounter = 0; kounter < 50; kounter++)
{
infile >> karyawan[kounter].namaPertama
>> karyawan[kounter].namaAkhir
>> karyawan[kounter].IDPersonal
>> karyawan[kounter].IDPerusahaan
>> karyawan[kounter].gajiTahunan;
karyawan[kounter].gajiBulanan
=
karyawan[kounter].gajiTahunan
/ 12;
karyawan[kounter].totalGaji =
0.0;
karyawan[kounter].bonusBulanan
= 0.0;
}
Dimisalkan bahwa untuk bulan tertentu,
bonus bulanan telah tersimpan di dalam tiap rekaman karyawan, dan Anda perlu
menghitung gaji bulanan dan memperbarui totalGaji.
Loop berikut menghitung dan menampilkan gaji tiap karyawan:
double gaji; //variabel untuk menghitung gaji
for (kounter
= 0; kounter < 50; kounter++)
{
cout << karyawan[kounter].namaPertama
<< " "
<< karyawan[kounter].namaAkhir
<< " ";
gaji = karyawan[kounter].gajiBulanan
+
karyawan[kounter].bonusBulanan;
karyawan[kounter].totalGaji =
karyawan[kounter].totalGaji
+
gaji;
cout << setprecision(2)
<< payCheck << endl;
}
struct
di dalam struct
Anda telah melihat bagaimana struktur
data struct dan array dapat
dikombinasikan untuk mengorganisir informasi. Anda juga telah melihat beberapa
contoh dimana sebuah anggota struct
merupakan sebuah array, dan tipe array adalah sebuah struct. Pada bagian ini, Anda akan belajar tentang beberapa situasi
dimana sangat menguntungkan untuk mengorganisir data di dalam sebuah struct menggunakan struct lain.
Sekarang, perhatikan rekaman karyawan
berikut:
struct tipeKaryawan
{
string namaPertama;
string namaTengah;
string namaAkhir;
string IDPersonal;
string alamat1;
string alamat2;
string kota;
string propinsi;
string kodePos;
int bulanKerja;
int hariKerja;
int tahunKerja;
int bulanKeluar;
int hariKeluar;
int tahunKeluar;
string telp;
string seluler;
string fax;
string pager;
string email;
string IDPerusahaan;
double gaji;
};
Seperti yang dapat Anda lihat, banyak
informasi yang dapat dimuat ke dalam sebuah struct. Struktur ini memiliki 22 anggota. Beberapa anggota struct ini akan diakses lebih sering
daripada yang lain, dan beberapa anggota berelasi lebih dekat dari yang lain.
Sebagai contoh, tanggal kerja dan tanggal keluar bertipe data int. Selanjutnya, akan
diorganisir-ulang struct ini sebagai
berikut:
struct namaTipe
{
string pertama;
string tengah;
string akhir;
};
struct tipeAlamat
{
string alamat1;
string alamat2;
string kota;
string propinsi;
string kodePos;
};
struct tipeTanggal
{
int bulan;
int hari;
int tahun;
};
struct tipeKontak
{
string telp;
string seluler;
string fax;
string pager;
string email;
};
Anda telah memisahkan tipe nama, tipe
alamat, dan tipe kontak karyawan ke dalam sub-sub kategori. Selanjutnya, akan
dibangun-ulang rekaman karyawan sebagai berikut:
struct tipeKaryawan
{
namaTipe nama;
string IDPersonal;
tipeAlamat alamat;
tipeTanggal tanggalKerja;
tipeTanggal tanggalKeluar;
tipeKontak kontak;
string IDPerusahaan;
double gaji;
};
Gambar 9.8 Variabel struct karyawanBaru
Informasi di dalam struct karyawan ini lebih mudah untuk dikelola daripada yang
sebelumnya. Beberapa dari struct ini
dapat digunakan-ulang untuk membangun struct
lain. Sebagai contoh, dimisalkan bahwa Anda ingin mendefinisikan sebuah rekaman
pelanggan. Setiap pelanggan memiliki nama pertama, nama akhir, dan nama tengah,
sama seperti alamat dan kontak. Anda dapat membangun rekaman pelanggan
menggunakan struct tipeNama, tipeAlamat, tipeKontak,
dan lainnya.
Selanjutnya, akan dideklarasikan sebuah
variabel bertipe tipeKaryawan dan
didiskusikan bagaimana mengakses anggota anggotanya. Perhatikan statemen
berikut:
tipeKaryawan karyawanBaru;
Statemen ini mendeklarasikan karyawanBaru sebagai sebuah variabel struct bertipe tipeKaryawan (lihat Gambar 9.8).
Statemen:
karyawanBaru.gaji = 45678.00;
menetapkan gaji dari karyawanBaru
menjadi 45678.00. Statemen-statemen:
karyawanBaru.nama.pertama = "Vivian";
karyawanBaru.nama.tengah = "Monica";
karyawanBaru.nama.akhir =
"Siahaan";
menetapkan pertama, tengah, dan akhir dari karyawanBaru menjadi “Vivian”,
“Monica”, dan “Siahaan”. Perhatikan bahwa karyawanBaru
memiliki anggota bernama nama. Anda
mengakses anggota ini melalui karyawanBaru.nama.
Perhatikan pula bahwa karyawanBaru.nama
merupakan sebuah struct dan memiliki
tiga anggota. Anda menetapkan akses keanggotaan untuk mengakses anggota pertama
dari struct karyawanBaru.nama. Jadi, karyawanBaru.nama.pertama
adalah anggota di mana Anda menyimpan nama pertama.
Statemen:
cin >> karyawanBaru.nama.pertama;
membaca dan menyimpan sebuah string ke
dalam karyawanBaru.nama.pertama.
Statemen:
karyawanBaru.gaji = karyawanBaru.gaji * 1.05;
memperbarui gaji dari karyawanBaru.
Statemen berikut mendeklarasikan karyawan sebagai sebuah array yang
memuat 100 komponen, dimana tiap komponen bertipe tipeKaryawan.
tipeKaryawan karyawan[100];
Loop for:
for (int j = 0; j < 100; j++)
cin >> karyawan[j].nama.pertama
>> karyawan[j].nama.tengah
>> karyawan[j].nama.akhir;
membaca dan menyimpan 100 karyawan di
dalam array karyawan. Karena karyawan adalah sebuah array, untuk
mengakses sebuah komponen, Anda menggunakan indeks. Sebagai contoh, karyawan[50] merupakan komponen ke-51 dari array karyawan (ingat bahwa indeks array dimulai dari 0). Karena karyawan[50] merupakan sebuah struct, Anda bisa menerapkan kriteria
akses keanggotaan untuk mangakses anggota tertentu.
CONTOH PEMROGRAMAN: Analisa Data
Penjualan
Sebuah perusahaan memiliki enam penjual.
Setiap bulan, mereka berpergian untuk menjual produk perusahaan. Di akhir tiap
bulan, total penjualan untuk tiap orang, berikut dengan ID penjual dan bulan,
direkam di dalam sebuah file. Di akhir tiap tahun, manajer perusahaan ingin
melihat laporan ini dengan format tabular berikut:
--------------- Laporan Penjualan
Tahunan ----------------
Penjualan Maks Kategori Penjual:
ID = 57373, Jumlah = Rp. 10169.00 (dikali Rp. 10 juta).
Penjualan Maks Kategori
Quarter = 3, Jumlah = Rp. 18743.00 (dikali Rp. 10 juta).
Pada laporan ini, QT1 singkatan untuk
quarter 1 (bulan 1 sampai 3), QT2 singkatan untuk quarter 2 (bulan 4 sampai 6),
QT3 singkatan untuk quarter 3 (bulan 7 sampai 9), dan QT4 untuk quarter 4
(bulan 10 sampai 12).
ID penjual disimpan di dalam suatu
file; data penjualan disimpan di dalam file lain. Data penjualan dalam format
berikut:
IDPenjual bulan jumlahPenjualan
.
.
.
Lebih lanjut, data penjualan tidak
terurut; dan hanya diurutkan secara ID.
Contoh data penjualan adalah:
12345 1 893
32214 1 343
23422 3 903
57373 2 893
.
.
.
Akan dituliskan sebuah program yang
menghasilkan keluaran dalam format tersebut.
Masukan: Suatu file yang memuat ID tiap penjual dan sebuah file
yang memuat data penjualan.
Keluaran: Sebuah file yang memuat laporan penjualan tahunan.
Analisa
Masalah dan Perancangan Algoritma
Berdasarkan permasalahan, jelaslah
bahwa komponen-komponen utama untuk tiap penjual adalah ID penjual, jumlah
penjualan per tiga bulan (quarter), total penjualan tahunan. Karena tiap
komponen berbeda tipe, Anda dapat mengelomponnya dengan bantuan sebuah struct, yang didefinisikan sebagai
berikut:
struct rekamanPenjual
{
string ID; //ID
penjual
double penjualanQuarter[4]; //array
untuk menyimpan total
//penjualan untuk tiap quarter
double totalPenjualan; //jumlah
penjualan tahunan penjual
};
Karena ada enam penjual, Anda dapat
menggunakan sebuah array yang memuat enam komponen, dimana di dalamnya tiap
komponen bertipe rekamanPenjual, seperti didefinisikan sebagai berikut:
rekamanPenjual daftarPenjual[JUMLAH_PENJUAL];
dimana nilai dari JUMLAH_PENJUAL adalah
6.
Karena program meminta Anda untuk
mencari total penjualan perusahaan untuk tiap quarter, Anda memerlukan sebuah
array yang memuat empat komponen untuk menyimpan data. Perhatikan bahwa data
ini akan dipakai untuk menentukan quarter dimana penjualan maksimum dicapai.
Oleh karena itu, program juga memerlukan array berikut:
double totalPenjualanQuarter[4];
Ingat bahwa dalam C++, indeks array
dimulai dari 0. Oleh karena itu, totalPenjualanQuarter[0]
menyimpan data untuk quarter 1, totalPenjualanQuarter[1]
menyimpan data untuk quarter 2, dan seterusnya.
Array daftarPenjual ditunjukkan pada Gambar 9.9.
Gambar 9.9 Array daftarPenjual
Langkah pertama pada program adalah
membaca ID penjual ke dalam array daftarPenjual
dan menginisialisasi penjualan quarter dan total penjualan untuk tiap penjual
dengan 0. Setelah langkah ini, array daftarPenjual
ditunjukkan pada Gambar 9.10.
Gambar 9.10 Array daftarPenjual
setelah inisialisasi
Langkah berikutnya adalah memproses data
penjualan. Pemrosesan data penjualan cukup sederhana. Untuk setiap entri di
dalam file yang memuat data penjualan:
1. Membaca ID
penjual, bulan, dan penjualan per bulan.
2. Melakukan
pencarian pada array daftarPenjual
untuk mencari lokasi komponen yang terkait dengan penjual tertentu.
3. Menentukan
quarter yang terkait dengan bulan tertentu.
4. Memperbarui
penjualan quarter dengan menambahkan penjualan untuk bulan tertentu.
Setelah file data penjualan diproses:
1. Menghitung
total penjualan tiap penjual.
2. Menghitung total
penjualan tiap quarter.
3. Menampilkan
laporan.
Diskusi ini diterjemahkan menjadi
algoritma berikut:
1. Menginisialisasi
array daftarPenjual.
2. Memproses data
penjualan.
3. Menghitung
total penjualan tiap quarter.
4. Menghitung
total penjualan tiap penjual.
5. Menampilkan
laporan.
6. Menghitung dan
menampilkan penjualan maksimum dari secara penjual.
7.
Menghitung dan menampilkan penjualan
maksimum dari secara quarter.
Untuk mereduksi kompleksitas program
utama, akan dituliskan sebuah fungsi terpisah untuk ketujuh langkah tersebut.
Fungsi
inisialisasi
Fungsi ini membaca ID penjual dari file
masukan dan menyimpan ID penjual di dalam array daftarPenjual. Ia juga menginisialisasi penjualan tiap quarter
dan menginisialisasi total penjualan
untuk tiap penjual dengan 0. Definisi dari fungsi ini adalah:
void inisialisasi(ifstream&
indata, rekamanPenjual list[], int ukuranList)
{
int indeks;
int quarter;
for (indeks = 0; indeks < ukuranList; indeks++)
{
indata >> list[indeks].ID;
//mendapatkan ID penjual
for (quarter = 0; quarter
< 4; quarter++)
list[indeks].penjualanQuarter[quarter]
= 0.0;
list[indeks].totalPenjualan
= 0.0;
}
} //akhir inisialisasi
Fungsi
dapatData
Fungsi ini membaca data penjualan dari
file masukan dan menyimpan informasi terkait di dalam array daftarPenjualan. Algoritma untuk fungsi
ini adalah:
1. Membaca ID
penjual, bulan, dan penjualan per bulan.
2. Melakukan
pencarian terhadap array daftarPenjual
untuk mencari lokasi komponen yang terkait dengan penjual. (Karena ID penjual
tidak terurut, akan digunakan pencarian sekuensial untuk melakukan pencarian).
3. Menentukan
quarter terkait untuk bulan tertentu.
4. Memperbarui
penjualan quarter dengan menambahkan penjualan bulan tertentu.
Dimisalkan bahwa entri yang dibaca
adalah:
57373 2 350
Di sini, ID penjual adalah 57373, bulan
2, dan jumlah penjualan 350. Dimisalkan bahwa array daftarPenjual ditunjukkan pada Gambar 9.11.
Gambar 9.11 Array daftarPenjual
Sekarang, ID 57373 berkaitan dengan
komponen array daftarPenjual[3], dan
bulan 2 berkaitan dengan quarter 1. Oleh karena itu, Anda menambahkan 350
kepada 354.80 untuk mendapatkan jumlah penjualan yang baru, 740.80. Setelah
memproses entri ini, array daftarPenjual
ditampilkan pada Gambar 9.12.
Definisi atas fungsi dapatData adalah:
void dapatData(ifstream& infile, rekamanPenjual list[], int ukuranList)
{
int indeks;
int quarter;
string sID;
int bulan;
double jumlah;
infile >> sID; //mendapatkan
ID penjual
while (infile)
{
infile >> bulan
>> jumlah; //mendapatkan bulan penjualan
//dan jumlah penjualan
for (indeks = 0; indeks < ukuranList; indeks++)
if (sID == list[indeks].ID)
break;
if (1 <= bulan && bulan <= 3)
quarter = 0;
else if (4 <= bulan && bulan <= 6)
quarter = 1;
else if (7 <= bulan
&& bulan <= 9)
quarter = 2;
else
quarter = 3;
if (indeks < ukuranList)
list[indeks].penjualanQuarter[quarter]
+= jumlah;
else
cout << "ID penjual tak-valid." <<
endl;
infile >> sID;
} //akhir while
} //akhir dapatData
Gambar 9.12 Array daftarPenjual
setelah pemrosesan entri 57373 2 350
Fungsi
penjualanPerQuarter
Fungsi bertugas untuk mencari total
penjualan perusahaan untuk tiap quarter. Untuk menemukan total penjualan untuk
tiap quarter, Anda menambahkan jumlah penjualan tiap penjual pada quarter
tersebut. Jelaslah, fungsi ini harus memiliki akses terhadap daftarPenjual dan array totalPenjualanQuarter. Fungsi ini juga
perlu mengetahui jumlah baris di dalam tiap array. Jadi, fungsi ini memiliki
tiga parameter. Definisi atas fungsi ini adalah:
void penjualanPerQuarter(rekamanPenjual list[], int ukuranList,
double totalPenjualanQuarter[])
{
int quarter;
int indeks;
for (quarter = 0; quarter < 4; quarter++)
totalPenjualanQuarter[quarter]
= 0.0;
for (quarter = 0; quarter < 4; quarter++)
for (indeks = 0; indeks < ukuranList; indeks++)
totalPenjualanQuarter[quarter]
+=
list[indeks].penjualanQuarter[quarter];
} //akhir penjualanPerQuarter
Fungsi
totalPenjualanPerOrang
Fungsi ini mencari total penjualan
tahunan tiap penjual. Untuk mencari jumlah penjualan tahunan tiap penjual, Anda
menambahkan penjualan tiap penjual untuk empat quarter. Jelaslah bahwa fungsi
harus memiliki akses terhadap array daftarPenjual.
Fungsi ini juga perlu mengetahui ukuran array. Jadi, fungsi ini memiliki dua
parameter. Definisi atas fungsi ini adalah:
void totalPenjualanPerOrang(rekamanPenjual list[], int ukuranList)
{
int indeks;
int quarter;
for (indeks = 0; indeks < ukuranList; indeks++)
for (quarter = 0; quarter < 4; quarter++)
list[indeks].totalPenjualan
+=
list[indeks].penjualanQuarter[quarter];
} //akhir
totalPenjualanPerOrang
Fungsi
tampilLaporan
Fungsi ini menampilkan laporan tahunan
dalam format tertentu. Algoritma dalam pseudocode adalah:
1. Menampilkan
kepala, yaitu tiga baris pertama pada keluaran.
2. Menampilkan
data untuk tiap penjual.
3.
Menampilkan baris terakhir pada
tabel.
Perhatikan bahwa dua fungsi berikutnya
akan menghasilkan dua baris terakhir pada keluaran program.
Jelaslah bahwa fungsi tampilLaporan harus memiliki akses
terhadap array daftarPenjual dan
array totalPenjualanQuarter. Selain
itu, karena keluaran akan disimpan di dalam sebuah file, fungsi ini harus
memiliki akses terhadap variabel ofstream
yang dikaitkan dengan file keluaran. Jadi, fungsi ini memiliki empat parameter:
sebuah parameter yang terkait dengan array daftarPenjual,
sebuah parameter yang terkait dengan array totalPenjualanQuarter,
sebuah parameter yang menetapkan ukuran array, dan sebuah parameter yang
terkait dengan variabel ofstream.
Definisi atas fungsi ini adalah:
void tampilLaporan(ofstream& outfile, rekamanPenjual list[],
int ukuranList, double penjualanQuarter[])
{
int indeks;
int quarter;
outfile << "–––––––––––--- Laporan Penjualan Tahunan
–––––––––--"
<< "––––" << endl;
outfile << endl;
outfile << " ID QT1 QT2 QT3 "
<< "QT4 Total" << endl;
outfile << "_____________________________________________"
<< "_________________" << endl;
for (indeks = 0; indeks < ukuranList; indeks++)
{
outfile << list[indeks].ID
<< " ";
for (quarter = 0; quarter < 4; quarter++)
outfile <<
setw(10)
<<
list[indeks].penjualanQuarter[quarter];
outfile << setw(10)
<< list[indeks].totalPenjualan << endl;
}
outfile << "Total ";
for (quarter = 0; quarter < 4; quarter++)
outfile <<
setw(10)<< penjualanQuarter[quarter];
outfile << endl <<
endl;
} //akhir tampilLaporan
Fungsi
penjualanMaksPerOrang
Fungsi ini menampilkan nama penjual
yang menghasilkan jumlah penjualan maksimum. Untuk mengidentifikasi penjual
ini, Anda perlu melihat total penjualan untuk tiap penjual dan mencari jumlah
penjualan maksimum. Karena total penjualan tiap penjual berada di dalam array daftarPenjual, fungsi ini harus
memiliki akses terhadap array daftarPenjual.
Selain itu, karena keluaran akan disimpan di dalam sebuah file, fungsi ini
harus memiliki akses terhadap variabel ofstream
yang dikaitkan dengan file keluaran. Oleh karena itu, fungsi ini memiliki tiga
parameter: sebuah parameter yang berkaitan dengan array daftarPenjual, sebuah parameter yang menetapkan ukuran array, dan
sebuah parameter yang berkaitan dengan file keluaran.
void penjualanMaksPerOrang(ofstream& outData, rekamanPenjual list[],
int ukuranList)
{
int indeksMaks = 0;
int indeks;
for (indeks = 1; indeks <ukuranList; indeks++)
if (list[indeksMaks].
totalPenjualan <list[indeks].totalPenjualan)
indeksMaks = indeks;
outData << "Penjualan Maks Kategori Penjual: ID =
"
<< list[indeksMaks].ID
<< ", Jumlah = Rp. " << list[indeksMaks].totalPenjualan
<< endl;
} //akhir penjualanMaksPerOrang
Fungsi
penjualanMaksPerQuarter
Fungsi ini menampilkan quarter dimana
jumlah penjualan maksimum dilakukan. Untuk mengidentifikasi quarter ini, Anda
perlu melihat total penjualan untuk tiap quarter dan mencari jumlah penjualan
maksimum. Karena total penjualan tiap quarter berada di dalam array penjualanQuarter, fungsi ini harus
memiliki akses terhadap array penjualanQuarter.
Selain itu, karena keluaran akan disimpan di dalam sebuah file, fungsi ini
harus memiliki akses terhadap variabel ofstream
yang dikaitkan dengan file keluaran. Oleh karena itu, fungsi ini memiliki dua
parameter: sebuah parameter yang berkaitan dengan array penjualanQuarter dan sebuah parameter yang berkaitan dengan file
keluaran.
void penjualanMaksPerQuarter(ofstream& outData,
double penjualanQuarter[])
{
int quarter;
int indeksMaks = 0;
for (quarter = 0; quarter < 4; quarter++)
if (penjualanQuarter[indeksMaks] < penjualanQuarter[quarter])
indeksMaks = quarter;
outData << "Penjualan Maks Kategori Quarter: Quarter =
"
<< indeksMaks +
1
<< ", Jumlah = Rp. " << penjualanQuarter[indeksMaks]
<< endl;
} //akhir penjualanMaksPerQuarter
Program
Utuh
//Contoh
pemrograman Bab 9.
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
const int JUMLAH_PENJUAL = 6;
struct rekamanPenjual
{
string
ID; //ID penjual
double
penjualanQuarter[4]; //array untuk
menyimpan total
//penjualan
untuk tiap quarter
double
totalPenjualan; //jumlah penjualan tahunan penjual
};
void
inisialisasi(ifstream& indata, rekamanPenjual list[], int ukuranList);
void dapatData(ifstream&
infile, rekamanPenjual list[], int
ukuranList);
void
penjualanPerQuarter(rekamanPenjual list[], int
ukuranList,
double totalPenjualanQuarter[]);
void
totalPenjualanPerOrang(rekamanPenjual list[], int ukuranList);
void tampilLaporan(ofstream&
outfile, rekamanPenjual list[],
int ukuranList, double
penjualanQuarter[]);
void
penjualanMaksPerOrang(ofstream& outData, rekamanPenjual list[], int ukuranList);
void
penjualanMaksPerQuarter(ofstream& outData, double penjualanQuarter[]);
int main()
{
ifstream infile; //variabel aliran masukan
ofstream outfile; //variabel aliran keluaran
string
inputFile; //variabel untuk
memuat nama file masukan
string
outputFile; //variabel untuk memuat
nama file keluaran
double
totalPenjualanQuarter[4]; //array untuk memuat penjualan per quarter
rekamanPenjual
daftarPenjual[JUMLAH_PENJUAL]; //array untuk memuat
//data penjual
cout << "Masukkan nama file ID penjual: ";
cin >> inputFile;
cout << endl;
infile.open(inputFile.c_str());
if
(!infile)
{
cout << "Tidak dapat membuka file masukan."
<< endl;
return
1;
}
inisialisasi(infile, daftarPenjual,
JUMLAH_PENJUAL);
infile.close();
infile.clear();
cout << "Masukkan nama file data penjualan: ";
cin >> inputFile;
cout << endl;
infile.open(inputFile.c_str());
if
(!infile)
{
cout << "Tidak dapat membuka file masukan."
<< endl;
return
1;
}
cout << "Masukkan nama file keluaran: ";
cin >> outputFile;
cout << endl;
outfile.open(outputFile.c_str());
outfile << fixed << showpoint
<< setprecision(2);
dapatData(infile, daftarPenjual, JUMLAH_PENJUAL);
penjualanPerQuarter(daftarPenjual, JUMLAH_PENJUAL, totalPenjualanQuarter);
totalPenjualanPerOrang(daftarPenjual, JUMLAH_PENJUAL);
tampilLaporan(outfile, daftarPenjual, JUMLAH_PENJUAL, totalPenjualanQuarter);
penjualanMaksPerOrang(outfile,
daftarPenjual, JUMLAH_PENJUAL);
penjualanMaksPerQuarter(outfile,
totalPenjualanQuarter);
infile.close();
outfile.close();
return
0;
}
void
inisialisasi(ifstream& indata, rekamanPenjual list[], int ukuranList)
{
int
indeks;
int
quarter;
for
(indeks = 0; indeks < ukuranList; indeks++)
{
indata >> list[indeks].ID; //mendapatkan ID penjual
for
(quarter = 0; quarter < 4; quarter++)
list[indeks].penjualanQuarter[quarter]
= 0.0;
list[indeks].totalPenjualan = 0.0;
}
} //akhir
inisialisasi
void dapatData(ifstream&
infile, rekamanPenjual list[], int
ukuranList)
{
int
indeks;
int
quarter;
string
sID;
int
bulan;
double
jumlah;
infile >> sID; //mendapatkan ID
penjual
while
(infile)
{
infile >> bulan >> jumlah;
//mendapatkan bulan penjualan
//dan jumlah
penjualan
for
(indeks = 0; indeks < ukuranList; indeks++)
if (sID == list[indeks].ID)
break;
if
(1 <= bulan && bulan <= 3)
quarter = 0;
else
if (4 <= bulan && bulan
<= 6)
quarter = 1;
else
if (7 <= bulan && bulan <=
9)
quarter = 2;
else
quarter = 3;
if
(indeks < ukuranList)
list[indeks].penjualanQuarter[quarter] += jumlah;
else
cout << "ID penjual tak-valid." <<
endl;
infile >> sID;
} //akhir while
} //akhir
dapatData
void
penjualanPerQuarter(rekamanPenjual list[], int
ukuranList,
double totalPenjualanQuarter[])
{
int
quarter;
int
indeks;
for
(quarter = 0; quarter < 4; quarter++)
totalPenjualanQuarter[quarter] = 0.0;
for
(quarter = 0; quarter < 4; quarter++)
for
(indeks = 0; indeks < ukuranList; indeks++)
totalPenjualanQuarter[quarter] +=
list[indeks].penjualanQuarter[quarter];
} //akhir
penjualanPerQuarter
void
totalPenjualanPerOrang(rekamanPenjual list[], int ukuranList)
{
int
indeks;
int
quarter;
for
(indeks = 0; indeks < ukuranList; indeks++)
for
(quarter = 0; quarter < 4; quarter++)
list[indeks].totalPenjualan +=
list[indeks].penjualanQuarter[quarter];
} //akhir
totalPenjualanPerOrang
void
tampilLaporan(ofstream& outfile, rekamanPenjual list[],
int ukuranList, double
penjualanQuarter[])
{
int
indeks;
int
quarter;
outfile << "-------------- Laporan Penjualan Tahunan -----------"
<< "-------" << endl;
outfile << endl;
outfile << " ID QT1 QT2 QT3 "
<< "QT4 Total" << endl;
outfile << "_____________________________________________"
<<
"_________________" << endl;
for
(indeks = 0; indeks < ukuranList; indeks++)
{
outfile << list[indeks].ID
<< " ";
for
(quarter = 0; quarter < 4; quarter++)
outfile << setw(10)
<<
list[indeks].penjualanQuarter[quarter];
outfile << setw(10) <<
list[indeks].totalPenjualan << endl;
}
outfile << "Total ";
for
(quarter = 0; quarter < 4; quarter++)
outfile << setw(10)<<
penjualanQuarter[quarter];
outfile << endl << endl;
} //akhir
tampilLaporan
void
penjualanMaksPerOrang(ofstream& outData, rekamanPenjual list[],
int ukuranList)
{
int
indeksMaks = 0;
int
indeks;
for
(indeks = 1; indeks <ukuranList; indeks++)
if
(list[indeksMaks]. totalPenjualan <list[indeks].totalPenjualan)
indeksMaks = indeks;
outData << "Penjualan Maks Kategori Penjual: ID = "
<< list[indeksMaks].ID
<< ", Jumlah = Rp. " <<
list[indeksMaks].totalPenjualan
<< endl;
} //akhir
penjualanMaksPerOrang
void
penjualanMaksPerQuarter(ofstream& outData,
double
penjualanQuarter[])
{
int
quarter;
int
indeksMaks = 0;
for
(quarter = 0; quarter < 4; quarter++)
if
(penjualanQuarter[indeksMaks] < penjualanQuarter[quarter])
indeksMaks = quarter;
outData << "Penjualan Maks Kategori Quarter: Quarter = "
<< indeksMaks + 1
<< ", Jumlah = Rp. " << penjualanQuarter[indeksMaks]
<< endl;
} //akhir
penjualanMaksPerQuarter
File Masukan: ID Penjual
12345
32214
23422
57373
35864
54654
File Masukan: Data Penjualan
12345 1 893
32214 1 343
23422 3 903
57373 2 893
35864 5 329
54654 9 392
12345 2 999
32214 4 892
23422 4 895
23422 2 492
57373 6 892
35864 10 1223
54654 11 3420
12345 12 322
35864 5 892
54654 3 893
12345 8 494
32214 8 9023
23422 6 223
23422 4 783
57373 8 8834
35864 3 2882
Keluaran Program:
Latihan
1. Definisikan
sebuah struct, akunBank, untuk menyimpan data berikut tentang sebuah akun bank:
nama pemiliki (string), nomor akun (int), saldo (double), dan suku bunga (double).
2. Diasumsikan
definisi struct akunBank seperti pada no.1. Deklarasikan sebuah variabel
akunBank dan tulis beberapa statemen untuk menyimpan informasi berikut: nama
pemilik akun--- Jozen, nomor akun--- 1273348, saldo---2673.474, suku bunga---2.5%.
3. Perhatikan
beberapa statemen berikut:
struct tipeNama
{
string
pertama;
string
akhir;
};
struct tipeTanggal
{
int
bulan;
int
hari;
int tahun;
};
struct tipeInfoPribadi
{
tipeNama nama;
int pID;
tipeTanggal tanggal;
};
tipeInfoPribadi orang;
tipeInfoPribadi daftarKelas[100];
tipeNama mahasiswa;
Tandailah setiap statemen berikut
sebagai valid atau tak-valid. Jika sebuah statemen tak-valid, maka jelaskan
alasannya.
a.
orang.nama.pertama. “Jozen”;
b.
cout << orang.nama << endl;
c.
daftarKelas[1] = orang;
d.
daftarKelas[20].pID =
000011100;
e.
orang = daftarKelas[20];
f.
mahasiswa = orang.nama;
g.
cin >> mahasiswa;
h.
for (int j = 0; j < 100; j++)
daftarKelas[j].pID = 00000000;
i.
daftarKelas.tanggal.hari = 1;
j.
mahasiswa = nama;
4.
Perhatikan beberapa statemen berikut
(tipeNama didefinisikan pada no.3):
struct tipeKaryawan
{
tipeNama nama;
int kinerja;
int pID;
string perusahaan;
double gaji;
};
tipeKaryawan karyawan[100];
tipeKaryawan karyawanBaru;
Tandailah setiap statemen berikut
sebagai valid atau tak-valid. Jika sebuah statemen tak-valid, maka jelaskan
alasannya.
a.
karyawanBaru.nama = "Jozen Hinalang";
b.
cout << karyawanBaru.nama;
c.
karyawan[35] = karyawanBaru;
d.
if (karyawan[45].pID ==
555334444)
karyawan[45].kinerja = 1;
e.
karyawan.gaji = 0;
5. Diasumsikan
deklarasi pada no.3 dan no.4. Tulislah statemen c++ yang melakukan hal berikut:
a.
Menyimpan informasi berikut di dalam
karyawanBaru:
nama:
Jozen Hinalang
pID:
111111
kinerja:
2
perusahaan:
UBI
gaji:
3456.78
b.
Di dalam array karyawan, inisialisasilah setiap kinerja dengan 0.
c.
Salin komponen ke-20 dari array karyawan ke dalam karyawanBaru.
d.
Memperbarui gaji dari karyawan ke-50
di dalam array karyawan dengan
menambahkan 4536.90 pada nilai sebelumnya.
6. Asumsikan bahwa
Anda memiliki definisi struct
berikut:
struct tipeKomponen
{
string namaKomponen;
int nomorKomponen;
double harga;
int banyakStock;
};
Deklarasikan sebuah array, inventori, yang memuat 100 komponen
bertipe tipeKomponen.
7.
Asumsikan
definisi dan deklarasi pada no.6. Tulislah definisi atas sebuah fungsi kosong
yang dipakai untuk membaca data ke dalam sebuah variabel bertipe tipeKomponen. Selain itu, tulis pula
kode C++ yang menggunakan fungsi Anda untuk membaca data ke dalam array inventori.
8.
Dimisalkan
bahwa Anda memiliki beberapa definisi berikut:
struct tipeWaktu
{
int jam;
int menit;
int detik;
};
struct tipeTur
{
string namaKota;
int jarak;
tipeWaktu waktuTravel;
};
a.
Deklarasikan
variabel destinasi bertipe tipeTur;
b.
Tulislah
statemen C++ untuk menyimpan data di dalam destinasi: namaKota---Klaten, jarak---550 KM, waktuTravel---13 jam dan 30 menit.
c.
Tulislah
definisi atas sebuah fungsi yang menampilkan data disimpan di dalam sebuah
variabel bertipe tipeTur.
d.
Tulislah
definisi atas sebuah fungsi penghasil nilai yang membaca data ke dalam sebuah
variabel bertipe tipeTur.
e.
Tulislah
definisi atas sebuah fungsi kosong dengan sebuah parameter referensi dari
tipeTur untuk membaca data disimpan di dalam sebuah variabel bertipe tipeTur.
ok min
ReplyDeleteSolder uap