A. TUJUAN
Praktikan mengenal Array of Records
Praktikan dapat membuat Array of Records sederhana
Praktikan dapat menentukan kapan menggunakan Array of Records
1. Mendeklarasikan Array of Records:
Untuk mendeklarasikan array of records di C++, kita perlu mendeklarasikan struct terlebih dahulu, baru kemudian kita mendeklarasikan array dengan struct sebelumnya sebagai tipe datanya. Kita akan melihat kembali deklarasi struct dari ASD 1 yaitu:struct structName {beserta contohnya, StudentRec:
datatype fieldName1;
datatype fieldName2;
datatype fieldName3;
};
struct StudentRec {Demikian juga, kita akan mengambil deklarasi array dari ASD 1:
string name;
string idNum;
float gpa;
};
Type name [arraySize];Jika kita mendeklarasikan array berelemen 10 yang kita beri nama students dengan tipe StudentRec, pendeklarasiannya akan menjadi:
StudentRec students [10];inilah yang disebut dengan array of records.
2. Inisialisasi Array of Records:
Seperti dalam sebuah array biasa, kita dapat menginisialisasi elemen-elemen dari array of records menggunakan pernyataan tunggal, dengan asumsi kita memiliki beberapa variabel student1, student2, student3, student4, student5 dari StudentRec, sebagai berikut:
StudentRec students[] = {student1, student2, student3, student4, student5};atau kita juga bisa menginisiasi array tersebut satu persatu seperti berikut:
students[0] = student1;3. Mengakses element dari Array of Records: Sebuah elemen diakses dengan indeks dari array dan kemudian mengakses variabel dari record. Misalnya:
students[1] = student2;
students[2] = student3;
students[3] = student4;
students[4] = student5;
string tempName = students[4].name;Pernyataan di atas akan mengambil elemen ke-4 dari array of records, dan mengambil variable nama dari record tersebut, serta menyimpan nilainya ke variabel tempName.
Berikut adalah contoh yang menggunakan semua konsep yang disebutkan di atas , deklarasi, assignment dan mengakses array of records:
#include <iostream>
using namespace std; struct fullname { string firstName; string lastName; }; struct StudentRec { fullname name; string idNumber; float gpa; }; int main () { StudentRec students[10]; // students is an array of records of // 10 StudentRec cout << "Input Student Records" << endl; // initialize elements of array of records from user input for ( int i = 0; i < 10; i++ )
{
cout << "First name : ";
cin >> theStudent[i].name.firstname;
cout << "Last name : ";
cin >> theStudent[i].name.lastname;
cout << "Student Number : ";
cin >> theStudent[i].idNum;
cout << "GPA : ";
cin >> theStudent[i].gpa;
}
cout << "Student Records : " << endl;
// output each array element's value
for ( int j = 0; j < 10; j++ )
{
cout << "\tName : " << theStudent[i].name.firstname << " " << theStudent[i].name.lastname;
cout << "\tStudent Number : " << theStudent[i].idNum;
cout << "\tGPA : " << theStudent[i].gpa;
}
return 0;
}
4. Catatan tambahan untuk array of records pada C++:
Seperti array biasa, array of record sangat penting dalam pemrograman C++ sehingga perlu untuk diperhatikan lebih terperinci. Berikut merupakan beberapa konsep penting dari, yang juga merupakan konsep array, yang harus jelas untuk programmer C++:Concept Description array of records multi dimensi
C++ mendukung array multidimensi, demikian juga array of records. Bentuk paling sederhana dari array multidimensi adalah array dua dimensi.
Pointer ke array of records
Anda dapat menghasilkan pointer ke elemen pertama dari array of records dengan hanya memanggil nama dari array, tanpa indeks apapun.
Mengirim array ke sebuah fungsi
Anda dapat melewatkan sebuah pointer dari array ke suatu fungsi dengan memanggil nama array tanpa indeks.
array sebagai kembalian sebuah fungsi
C++ mengijinkan sebuah fungsi untuk mengembalikan sebuah array.
5. Kelemahan dari sebuah array
Sangat baik untuk mengetahui apa kelemahan dari sesuatu yang ingin Anda gunakan, untuk mengetahui batasan dari hal tersebut serta mampu menggunakannya dengan bijak. Jadi berikut adalah kelemahan dari array.- Ukuran dari sebuah array adalah tetap. Paling sering ukuran ini ditentukan pada waktu kompilasi dengan pernyataan sederhana seperti pada contoh di atas. Dengan sedikit usaha ekstra, ukuran array dapat ditangguhkan sampai array dibuat pada saat runtime, tapi setelah itu ukurannya akan selalu tetap. Para ahli juga dapat melakukan lebih dengan mengalokasikan array di heap secara dinamis dan kemudian secara dinamis kembali mengalokasikan sesuai kebutuhan dengan fungsi realloc(), tapi itu membutuhkan usaha keras dari programmer.
- Karena hal tersebut, hal yang umumnya dilakukan para programmer adalah dengan mengalokasikan ukuran array yang "cukup besar" (misalnya 255). Walaupun nyaman, cara ini memiliki 2 kelemahan:
1. Umumnya dari sekian panjang yang di alokasikan, hanya digunakan 20 sampai 30 elemen dalam array dan sisa alokasi array, sekitar 88%, benarbenar terbuang.
2. Namun jika program suatu saat memerlukan ruang lebih dari 255, kodenya akan gagal. Beberapa kode komersial secara mengejutkan melakukan alokasi naif semacam ini yang menyebabkan ruang terbuang percuma, serta crash untuk kasus khusus. - Menambahkan data di awal array berpotensi menciptakan proses yang sangat lama karena semua elemen harus digeser satu per satu.
LATIHAN
1. Buatlah program (dengan memanfaatkan array dan struct) yang meminta data mahasiswa (nim, nilai UTS dan nilai UAS) sebanyak N masukan (N ditentukan oleh pengguna sendiri, maksimal 50), kemudian hitung nilai rata-rata dari tiap mahasiswa, serta hitung pula nilai rata-rata dari kelasnya dan tentukan mahasiswa mana saja yang memiliki nilai di bawah rata-rata.