Saturday, October 7, 2017

Kuliah 1 C++: ARRAY



BAB 1.
Array






1.1 Deklarasi Array
Array merupakan sebuah runtun objek yang bertipe sama. Dalam komputer, elemen-elemen array disimpan di dalam sebuah runtun yang disimpan pada blok-blok memori yang bertetangga. Setiap elemen array menempati satu blok memori, yang ukurannya dialokasikan sesuai dengan tipe data elemen array. Deklarasi atas array satu dimensi dilakukan sebagai berikut.


tipe pengenal[jumlah elemen di dalam array];

Deklarasi array tersebut dari kiri ke kanan terdiri-dari tipe data dari tiap elemen, seperti int, float, double, char, dan lainnya, yang diikuti dengan nama atau pengenal array kemudian jumlah elemen di dalam array yang ditempatkan di dalam kurung siku. Sebagai contoh, sebuah array yang memuat empat Angka, dimana setiap elemennya merupakan nilai integer, dideklarasikan berikut.


int Angka[4];

Di sini, Angka adalah nama array, dengan 4 elemen seperti diindikasikan oleh 4 di dalam kurung siku. Tipe data dari elemen-elemen array adalah int yang ditempatkan di awal deklarasi. Tetapi, pada deklarasi ini, Anda belum memberikan nilai dari tiap elemen array. Jadi, array masih belum diinisialisasi. Salah satu metode untuk menginisialisasi elemen-elemen array adalah dengan mengekuasi Angka[4] dengan nilai-nilai yang ditempatkan di dalam kurung kurawal {} dan dipisahkan dengan koma berikut. Gambar 1.1 menunjukkan bagaimana sebuah array satu dimensi disimpan di dalam memori komputer.

Angka[4] = {20, 30, 10, 15};      //inisialisasi array


 GAMBAR 1.1 Array satu dimensi di dalam memori komputer


Posisi dari suatu elemen di dalam array disebut dengan indeks array atau subskrip array (Gambar 1.1). Pada kasus array int Angka[4];, terdapat empat elemen. Nilai-nilai ndeks atau subskripnya adalah 0, 1, 2, dan 3. Perhatikan bahwa indeks array diawali dari 0. Jadi, elemen pertama array adalah Angka[0], elemen kedua adalah Angka[1], elemen ketiga adalah Angka[3], dan elemen keempat adalah Angka[3]. Ketika deklarasi dan inisialisasi dari semua elemen dilakukan secara bersamaan pada statemen yang sama, Anda bisa atau boleh juga tidak menetapkan jumlah elemen di dalam kurung siku. Jadi, array Angka[4] bisa juga dideklarasikan dan diinisialisasi berikut.

int Angka[] = {20,30,10,15};

Dengan pendeklarasian suatu array yang memiliki n elemen, kompiler akan mengalokasikan n buah blok memori, yang masing-masing ukuran blok ditetapkan sesuai dengan tipa data dari elemen array ketika diinisialisasikan. Gambar 1.1 mengilustrasikan penyimpanan elemen-elemen dari Angka[4] di dalam memori. Array untuk tipe-tipe data lain dengan cara yang sama dapat dideklarasikan dan diinisialisasi. Elemen-elemen array dapat bertipe int, float, double, char, atau bisa juga berupa pointer, atau objek kelas. Sebagai contoh, sebuah array dengan nama Harga yang memuat 5 elemen bertipe float, sebuah array dengan nama Berat dengan 7 elemen bertipe double dan sebuah array dengan nama Alamat yang memuat 100 karakter dapat dideklarasikan berikut.

float Harga[5];      //Array dengan 5 elemen bertipe float
double Berat[7];     //Array dengan 7 elemen bertipe double
char Alamat[100];    //Array dengan 100 elemen bertipe char


ARRAY MULTI-DIMENSI
Jika tiap elemen dari sebuah adalah juga suatu array, maka array tersebut dikatakan sebagai array multi-dimensi. Dimisalkan bahwa 5 elemen dari array Nama adalah array-array yang masing-masing memuat 30 karakter. Hal ini akan membuat Nama sebagai sebuah array dua-dimensi yang dideklarasikan berikut.

char Nama[5][30];

Array ini dapat dipakai untuk menyimpan 5 nama yang masing-masing nama dapat memiliki sampai 30 karakter. Contoh lain dari sebuah array dua-dimensi bertipe int diilustrasikan pada Gambar 1.2. Array ini dideklarasikan dan diinisialisasi dengan,

int M[2][5]= {5, 2, 3, 2, 4, 6, 7, 8, 9, 8};

Di dalam memori komputer, array dua-dimensi juga disimpan dengan cara yang sama seperti ditunjukkan pada Gambar 1.1. Namun, sebagai ilustrasi, Gambar 1.2 menunjukkan bagaimana sebuah array dua-dimensi divisualisasi, yang memiliki dua baris dan lima kolom seperti sebuah matriks.


GAMBAR 1.2 Sebuah array dua-dimensi

Sama halnya, sebuah array tiga-dimensi dapat dideklarasikan dan diinisialsiasi sebagai berikut.

int S[2][3][4]={2,1,3,4,5,8,9,7,6,5,4,8,1,2,3,4,6,7,8,9,2,4,6,3}


GAMBAR 1.3 Sebuah array tiga-dimensi

Untuk ilustrasi visual, Anda dapat memvisualisasi array int S[2][3][4] sebagai sebuah array yang memuat dua elemen, dimana setiap elemennya berupa suatu array dua-dimensi. Ini diilustrasikan pada Gambar 1.3.


1.2 Mengakses Elemen Array
Sebuah array hanya dapat memiliki satu tipe elemen. Semua elemen dari sebuah array harus bertipe sama, seperti integer, nilai titik-mengambang, karakter, objek kelas, atau lainnya. Tetapi tipe elemen array tidak bisa berupa campuran dari tipe-tipe yang berbeda. Sebuah elemen array adalah suatu variabel yang memiliki tipe yang sama seperti pada pendeklarasian array. Elemen array dapat diakses dengan menuliskan nama array yang diikuti dengan indeks atau subskrip elemen terkait di dalam kurung siku. Jadi, Anda dapat mengakses elemen pertama array Angka dengan menuliskan Angka[0], elemen kedua dengan Angka[1], elemen ketiga dengan Angka[2], dan elemen keempat dengan Angka[3]. Elemen ke-i dari array Angka dituliskan dengan Angka[i-1]; karena i dimulai dari 0. Sama halnya, pada kasus array dua-dimensi, katakanlah M[2][5], Anda mengakses sebuah elemen pada baris ke-i dan kolom ke-j dengan M[i-1[j-1], karena baik i maupun j keduanya diawali dari 0.


Program 1.1 Mengilustrasikan deklarasi dan inisialisasi sebuah array

#include <iostream>
using namespace std;

int main()
{
   int Angka[4] = {20, 30, 10, 15}; //deklarasi dan inisialisasi

   double Harga[5] = { 5.6, 8.3, 7.0, 6.3,7.8 };

   cout<<"Angka[0] = "<<Angka[0]<<", Angka[1] = "<<Angka[1]<<endl;
   cout<<"Angka[2] = "<<Angka[2]<<", Angka[3] = "<<Angka[3]<<"\n\n";

   for (int i =0; i<5; i++ ) //loop for untuk menampilkan elemen-elemen array Harga
      cout<<Harga [i]<<" ";

   return 0;
}
KELUARAN
Angka[0] = 20, Angka[1] = 30
Angka[2] = 10, Angka[3] = 15

5.6 8.3 7 6.3 7.8


Jika banyaknya nilai yang ditugaskan kurang dari total jumlah elemen yang dideklarasikan pada array, maka nol ditugaskan kepada elemen-elemen sisa. Ini diilustrasikan pada program berikut. Jika array Angka diinisialisasi berikut.

Angka[4] = {20, 30};

Dua elemen pertama akan memiliki nilai 20 dan 30. Dua elemen sisa akan ditugasi nilai nol.


Program 1.2 Mengilustrasikan konsekuensi dari penugasan dengan banyak nilai kurang dari total jumlah elemen

#include <iostream>
using namespace std;

int main()
{
   int Angka[4] = {20,30};

   //Dua nilai ditugaskan sedangkan banyak elemen empat
   cout<<"Angka[0] = "<<Angka[0]<<", Angka[1] = "<<Angka[1]<<endl;
   cout<<"Angka[2] = "<<Angka[2]<<", Angka[3] = "<<Angka[3]<<endl;

   return 0;
}
KELUARAN
Angka[0] = 20, Angka[1] = 30
Angka[2] = 0,  Angka[3] = 0


Pada keluaran, Anda dapat melihat bahwa Angka[2] dan Angka[3], yaitu elemen ketiga dan elemen keempat diinisialisasi dengan nol karena pada inisialisasi hanya dua nilai yang diberikan. Jadi, dua elemen pertama saja yang ditugasi nilai-nilai.

Jika pada inisialisasi, banyaknya nilai lebih dari jumlah elemen di dalam array, maka kompiler akan menampilkan pesan error. Lihat program berikut.


Program 1.3 Mengilustrasikan konsekuensi dari penugasan dengan banyaknya nilai lebih dari total jumlah elemen

#include <iostream>
using namespace std;

int main()
{
   int Angka[4] = {20,30,12,21,4,32};
   //enam nilai ditugaskan kepada hanya empat elemen

   cout<<"Angka[0] = "<<Angka[0]<<", Angka[1] = "<<Angka[1]<<endl;
   cout<<"Angka[2] = "<<Angka[2]<<", Angka[3] = "<<Angka[3]<<endl;
  
   return 0;
}
KELUARAN
too many initializers


1.3 Pembacaan/Penampilan Array
Seperti yang telah dijelaskan, pembacaan/penampilan sebuah array dilakukan elemen demi elemen. Oleh karena itu, sebuah loop for atau loop while dapat dipakai untuk menjelajah array. Sebagai contoh, jika array Angka memiliki n elemen untuk ditampilkan di monitor, Anda bisa menuliskan kode berikut.

for (int i = 0; i<n; i++)
   cout<<Angka[i]<<“ ”;

Statemen tersebut akan menampilkan elemen-elemen array pada sebuah baris, dimana setiap elemen dipisahkan dengan spasi. Jika diperlukan untuk menampilkan pengenal untuk tiap elemen dengan nilainya, seperti Angka[2] = 10, Anda akan menuliskan kode seperti berikut.

for (int i =0; i<n; i++)
   cout<< “Angka[“<<i<<”] = “ <<Angka[i]<< “, ”;


PENGGUNAAN cin UNTUK ARRAY
Untuk masukan oleh user, Anda bisa menggunakan cin. Karena setiap elemen array harus ditempatkan elemen demi elemen, Anda perlu menggunakan sebuah loop untuk tujuan ini. Program berikut melakukan pembacaan 5 elemen dari array Angka.

Program 1.4 Mengilustrasikan pembacaan matriks oleh user

#include <iostream>
using namespace std;

int main()
{
   int Angka[5];
  
   cout<<"Masukkan lima integer: ";
   for (int i=0;i<5;i++)
      cin>>Angka[i];
   cout<<"\n";

   for (int j=0;j<5;j++)
      cout<<" Angka["<<j<<"] = "<<Angka[j]<<endl;

   return 0;
}
KELUARAN
Masukkan lima integer: 10 20 30 40 50

 Angka[0] = 10
 Angka[1] = 20
 Angka[2] = 30
 Angka[3] = 40
 Angka[4] = 50


Dalam C++, tidak ada pemeriksaan untuk melihat apakah Anda melewati jumlah elemen di dalam array ketika menuliskan statemen keluaran. Sebagai contoh, jika hanya ada 4 elemen di dalam array dan Anda ingin menampilkan elemen kelima atau elemen keenam, maka kompiler akan menampilkan nilai-nilai sampah untuk elemen ke-5 dan elemen ke-6. Hal ini diilustrasikan berikut.


Program 1.5 Mengilustrasikan ketika nilai indeks lebih dari jumlah elemen array

#include <iostream>
using namespace std;

main()
{
   int Angka[4] = {20, 30, 10, 15};

   cout<<"Berikut adalah isi dari array Angka: "<<endl;
   for (int i =0; i <6; i++)
      cout<<"Angka["<<i<<"] = " << Angka[i]<<"\n";

   return 0;
}
KELUARAN
Berikut adalah isi dari array Angka:
Angka[0] = 20
Angka[1] = 30
Angka[2] = 10
Angka[3] = 15
Angka[4] = 1638280
Angka[5] = 4333209


Untuk memastikan bahwa jumlah elemen secara tepat diberikan pada setiap fungsi yang mengakses array, ukuran array (jumlah elemen array) perlu ditentukan dan dipakai seperti diilustrasikan berikut. Kode ini menggunakan fungsi sizeof() yang menentukan jumlah byte yang dialokasikan.

ukuran = jumlah byte yang dialokasikan untuk array / jumlah byte yang dialokasikan untuk satu elemen

Kode untuk menentukan ukuran dari array Angka dengan elemen-elemen integer dan menggunakannya pada statemen keluaran diilustrasikan berikut.

int ukuran;
ukuran = sizeof(Angka) / sizeof(int);
for (int i =0; i< ukuran; i++)
   cout<<Angka[i];

Aplikasinya diilustrasikan pada program berikut.


Program 1.6 Mengilustrasikan operasi-operasi aritmatika pada elemen-elemen array

#include <iostream>
using namespace std;

int main()
{
   double jum = 0 , rerata = 0;
   double Harga[5] ;

   cout<<"Masukkan elemen-elemen dari array Harga: "<<endl;
   for (int i =0; i<5; i++)
      cin>>Harga[i];

   int ukuran = sizeof(Harga)/sizeof(double);
   //ukuran adalah jumlah elemen di dalam array
   cout<<"Ukuran array = "<<ukuran<<endl;
   for(int j =0; j<ukuran ; j++)  //menggunakan ukuran
      jum += Harga[j];

   cout<<"Berikut adalah isi dari array Harga: ";
   for(int k =0;k<ukuran;k++)                   //menggunakan ukuran
      cout<<Harga[k]<<" ";

   cout<<"\nJumlah sampel = "<<ukuran<<endl;
   cout<<"jum = " <<jum <<endl;
   cout<<"Rerata harga = "<< jum/ukuran<<endl;

   return 0;
}
KELUARAN
Masukkan elemen-elemen dari array Harga:
1.2 3.4 4.5 6.7 7.8
Ukuran array = 5
Berikut adalah isi dari array Harga: 1.2 3.4 4.5 6.7 7.8
Jumlah sampel = 5
jum = 23.6
Rerata harga = 4.72


PERBEDAAN ANTARA ARRAY DAN STRING-C
Program berikut menjelaskan perbedaan antara array dan string-C. String, yang memuat karakter-karakter, dideklarasikan dan diinisialisasi seperti berikut.

char Nama[] = {“Jakarta”};

adalah sebuah array karakter. Tetapi, sistem menempatkan karakter Null (‘\0’) di akhir string untuk menandari akhir dari string. Oleh karena itu, jumlah elemen di dalam string bertambah satu.


Program 1.7 Mengilustrasikan perbedaan antara array dan string-C

#include <iostream>
using namespace std;

int main()
{
   double Bobot [] = {5.4, 6.35, 12.6};                //sebuah array

   char Nama[] = {'J', 'A', 'K', 'A', 'R', 'T', 'A'};  //sebuah array

   char ch[] = {"Jakarta"};       //Sebuah string, yang juga bisa dikode dengan
   // char ch [] = "Jakarta";

   cout<<"Ukuran dari array Nama = "<<sizeof(Nama)<<endl;
   cout<<"Ukuran dari ch = "<<sizeof(ch)<<endl;

   for (int i=0;i<7;i++)
      cout <<Nama[i] ;
   cout<<"\n";

   for (int j=0; j<3; j++)
      cout<<Bobot[j]<<" ";
   cout<<"\n";

   cout<<ch;
   return 0;
}
KELUARAN
Ukuran dari array Nama = 7
Ukuran dari ch = 8
JAKARTA
5.4 6.35 12.6
Jakarta


Program tersebut dengan jelas menunjukkan bahwa sebuah array char dapat diinisialisasi dengan karakter-karakter individual juga. Pada kasus itu, ia merupakan array karakter tanpa diakhiri dengan karakter Null. Namun, jika sebuah string karakter ditugaskan pada salah satu dari kedua metode berikut, maka kompiler akan otomatis menempatkan karakter Null di akhir string karakter untuk menandai akhir dari string.

char ch[] = {“Jakarta”};   //atau berikut
char ch[] = “Jakarta”;


MENUKAR ELEMEN-ELEMEN DARI DUA ARRAY
Seperti disebutkan bahwa array secara menyeluruh tidak bisa ditugaskan. Oleh karena itu, array tidak bisa ditukar isinya secara menyeluruh dengan array lain. Namun, operasi penukaran dapat dilakukan dengan menukar elemen demi elemen. Hal ini diilustrasikan berikut.


Program 1.8 Mengilustrasikan penukaran elemen-elemen dari dua array

#include <iostream>
using namespace std;

int main()
{
   int Angka1[4] = {20, 30, 10, 15};
   int Angka2[5] = {5, 6, 7, 8, 9};

   for(int i = 0; i<5;i++)
   {
      swap(Angka1[i], Angka2[i]);
      cout<<"Angka1["<<i <<"] = "<<Angka1[i]<<"\n";
   }

   cout <<"\n";
   for(int j = 0; j<5; j++)
      cout<<"Angka2["<<j<<"] = "<<Angka2[j]<<"\n";

   return 0;
}
KELUARAN
Angka1[0] = 5
Angka1[1] = 6
Angka1[2] = 7
Angka1[3] = 8
Angka1[4] = 9

Angka2[0] = 20
Angka2[1] = 30
Angka2[2] = 10
Angka2[3] = 15
Angka2[4] = 1638280


Angka2[4] adalah nilai sampah. Untuk menukar elemen-elemen dari dua array, Anda perlu memastikan bahwa ukuran kedua array harus sama. Jika tidak, error akan terjadi seperti diilustrasikan pada kode tersebut.


PEMBACAAN INTERAKTIF UNTUK ARRAY
Elemen-elemen dari lebih dari satu array dapat pula dimasukkan oleh user pada suatu program interaktif. Anda bisa menggunakan cin untuk tujuan ini. Loop for atau loop while dapat dipakai untuk tiap array. Perhatikan contoh ini untuk ilustrasi.


Program 1.9 Mengilustrasikan pembacaan interaktif untuk beberapa array

#include <iostream>
using namespace std;
int main()
{
   int Angka[4], angka[5];        //kedua array bertipe int
   char NamaKu[7];

   cout<<"Tuliskan nilai-nilai untuk array Angka: ";
   for (int i = 0; i<4; i++)
      cin>>Angka[i];

   cout<<"Tuliskan nilai-nilai untuk array angka: ";
   for (int k = 0; k<5; k++)
      cin>>angka[k];

   cout<<"Tuliskan nilai-nilai untuk array NamaKu: ";
   for (int n = 0; n<7; n++)
      cin>>NamaKu[n];

   cout<<"Elemen-elemen array Angka adalah: ";
   for (int j=0;j<4;j++)
      cout<<Angka[j]<<" ";

   cout<<"\n" ;

   cout<<"Elemen-elemen array angka adalah: ";
   for (int m=0;m<5;m++)
      cout<<angka[m]<<" " ;

   cout<<"\n ";

   cout<<"NamaKu adalah: ";
   for (int p=0;p<7;p++)
      cout<<NamaKu[p];

   cout<<"\n";

   return 0;
}
KELUARAN
Tuliskan nilai-nilai untuk array Angka: 10 20 30 40
Tuliskan nilai-nilai untuk array angka: 50 60 70 80 90
Tuliskan nilai-nilai untuk array NamaKu: Natasha
Elemen-elemen array Angka adalah: 10 20 30 40
Elemen-elemen array angka adalah: 50 60 70 80 90
 NamaKu adalah: Natasha


1.4 Pencarian Nilai di dalam Array
Seringkali diperlukan untuk mencari suatu nilai di dalam sebuah array. Ini dapat dilakukan dengan membandingkan nilai kunci dengan tiap elemen array. Ini diilustrasikan pada program berikut.


Program 1.10 Mengilustrasikan pencarian sebuah nilai di dalam array

#include <iostream>
using namespace std;

int main()
{
   int jum = 0;
   int Angka[] = {20, 30, 10, 15, 50, 40, 30, 70, 95};

   int x;
   int ukuran = sizeof (Angka)/sizeof(int);

   cout<<"Tulislah nilai yang akan dicari: ";
   cin >>x; // x adalah nilai yang akan dicari di dalam array

   for(int i =0; i<ukuran; i++)
      if(x == Angka[i])
         {
         cout<<"Ya, nilai ada di dalam array Angka, yaitu Angka["<<i <<"]= "<<Angka[i]<<endl;
         goto Akhir;
         }

   cout<<"Nilai yang dicari tidak ada di dalam array Angka"<<endl;

   Akhir:
   return 0;
}
KELUARAN
Tulislah nilai yang akan dicari: 50
Ya, nilai ada di dalam array Angka, yaitu Angka[4]= 50



PENCARIAN BINER UNTUK ARRAY TERURUT
Pada pencarian yang telah dilakukan, setiap elemen array dibandingkan dengan kunci yang dicari. Pada kasus array terurut, pencarian dapat dipersingkat menggunakan pencarian biner yang hanya bisa diterapkan pada array terurut. Pada metode ini, pertama-tama ditentukan jumlah elemen array. Kemudian, ditentukan pada setengah bagian array mana nilai kunci berada. Ini dengan mudah dilakukan dengan membandingkan elemen tengah karena array telah terurut. Kemudian, pencarian hanya dilakukan pada setengah bagian array dimana di dalamnya nilai kunci berada. Setengah bagian ini kemudian dibagi menjadi dua bagian dan sekali lagi ditentukan pada bagian mana (1/4 bagian dari array awal) nilai kunci berada. Dengan cara ini, pencarian berlanjut sampai nilai kunci ditemukan. Untuk array terurut yang sangat besa, metode ini sangat efisien.


Program 1.11 Mengilustrasikan pencarian pencarian biner pada array

#include <iostream>
using namespace std;

int main()
{
   int jum=0;
   int Angka[] = {20, 30, 40, 50, 60, 70, 80, 95, 102, 166, 175, 200};
   int x;

   cout<<"Tulislah nilai yang Anda cari: ";
   cin>>x;
  
   int ukuran = sizeof(Angka) / sizeof(int);
   int Bawah = 0;
   int Atas = ukuran -1;

   while (Bawah <= Atas)
   {
      if(Bawah ==Atas && Angka[Atas] != x)
      {
         cout<<"Nilai yang dicari tidak ada di dalam array.\n";
         break;
      }

      int Tengah = (Bawah + Atas)/2;
      if (Angka[Tengah] == x)
      {
         cout<<"Nilai ditemukan. Ia berada pada Angka["<<Tengah <<"]"<< endl;
         break;
      }
      else
         if (Angka[Tengah] > x )
            Atas = Tengah-1;
         else
            Bawah = Tengah+1;
   }

   return 0;
}
KELUARAN
Tulislah nilai yang Anda cari: 102
Nilai ditemukan. Ia berada pada Angka[8]



1.5 Alamat Array
Dengan pendeklarasian array sebagai int Angka[4];, empat blok memori dialokasikan oleh kompiler untuk elemen-elemen array tersebut, yaitu satu blok untuk setiap elemen untuk menyimpan nilainya. Array diinisialisasi sebagai berikut. Gambar 1.4 menunjukkan blok-blok memori dan nilai-nilainya yang diekspresikan dalam biner pada tiap blok.

int Angka[4] = {20, 30, 10, 15};

Ukuran blok bergantung pada tipe data di dalam array. Untuk kasus ini, tipe elemen adalah int. Jadi, 4 byte dialokasikan untuk tiap blok. Nilai dari tiap elemen disimpan dalam biner seperti diilustrasikan pada Gambar 1.4 berikut.



GAMBAR 1.4 Ilustrasi dari alamat array dan alamat dari tiap elemen array. Nilai-nilai yang ada di dalam blok-blok adalah nilai dari tiap elemen array dalam biner.



Di sini 10100, 11110, 1010, dan 1111adalah ekivalen biner dari 20, 30, 10, dan 15. Alamat-alamat memori dituliskan di bawah blok-blok adalah dalam heksadesimal.

Alamat sebuah array adalah alamat dari elemen pertama array yang merupakan byte pertama dari blok memori yang dialokasikan untuk elemen pertama dari array. Alamat tersebut dapat diekstraksi dengan memanggil nama array seperti diilustrasikan pada kode berikut. Jadi untuk array Angka, kode untuk mendapatkan alamat array adalah

cout<<Angka;

Keluarannya adalah alamat array. Alamat dari setiap elemen array dapat diekstraksi dengan memanggila array (nama + offset). Offset adalah nilai indeks elemen. Untuk mendapatkan alamat kedua dari array Angka, Anda dapat memanggil Angka+1 seperti diilustrasikan berikut.

cout<<Angka + 1;

Sama halnya, untuk mendapatkan alamat dari elemen ketiga, kode diberikan berikut.

cout<<Angka + 2;

Program berikut menentukan alamat dari sebuah array dan alamat dari tiap elemen array.


Program 1.12 Mengilustrasikan alamat array dan tiap elemennya

#include <iostream>
using namespace std;

int main()
{
   int Angka[4] = {20, 30, 10, 15};

   cout<<"Alamat dari array adalah: ";
   cout<<Angka <<"\n";

   cout<<"Alamat dari empat elemen array tersebut adalah: "<<endl;
   cout<<Angka <<", "<<Angka+1 <<", "<<Angka+2<<", "<<Angka+3<<endl;

   return 0;
}
KELUARAN
Alamat dari array adalah: 0018FF38
Alamat dari empat elemen array tersebut adalah:
0018FF38, 0018FF3C, 0018FF40, 0018FF44



1.6 Operasi-Operasi Aritmatika Pada Elemen-Elemen Array
Elemen array individual dapat diperlakukan seperti variabel biasa yang bertipe sama. Oleh karena itu, semua operator yang dapat diterapkan pada variabel-variabel lain yang bertipe sama juga dapat diterapkan pada elemen-elemen array. Operator-operator aritmatika, seperti +, *, -, /, dan % dapat diterapkan pada elemen-elemen array. Program 1.13 mengilustrasikan bagaimana operasi-operasi aritmatika diterapkan pada elemen-elemen array. Program menentukan nilai rerata dan deviasi standar dari cuplik data yang disajikan sebagai elemen-elemen dari suatu array.


Program 1.13 Mengilustrasikan operasi-operasi aritmatika pada elemen-elemen array

#include<iostream>
#include<cmath>
using namespace std;

int main()
{
   int m,n,p ;
   double jum = 0, rerata = 0, sigma = 0;

   int Cuplik[] = {20, 16, 10, 15, 11, 12, 15, 22, 14, 13, 14};

   m = sizeof(Cuplik[1]);  //menghasilkan jumlah byte untuk satu elemen
   p = sizeof(Cuplik);
   //p adalah jumlah total byte yang digunakan untuk array.

   n = p/m;
   //n = jumlah elemen di dalam array.

   for(int i=0;i<=(n-1);i++)
      jum += Cuplik[i]; //menghitung penjumlahan dari semua elemen

   rerata = jum/n;

   double var =0;
   for (int j = 0; j<n; j++)
      var += ((Cuplik[j]-rerata)*(Cuplik[j]-rerata));

   sigma = sqrt(var/(n-1));
   //sigma adalah deviasi standar

   cout<<"Penjumlahan semua elemen = "<<jum<<"\nBanyaknya elemen = "<<n <<endl;
   cout<<"Rerata array = "<<rerata <<endl;

   cout<<"Variansi = "<<var <<endl;
   cout<<"Deviasi standar dari array = "<< sigma<<endl;

   return 0;
}
KELUARAN
Penjumlahan semua elemen = 162
Banyaknya elemen = 11
Rerata array = 14.7273
Variansi = 130.182
Deviasi standar dari array = 3.60807


Program berikut mengilustrasikan operasi-operasi aritmatika umum pada elemen-elemen array.

Program 1.14 Ilustrasi lain dari operasi-operasi aritmatika pada elemen-elemen array

#include <iostream>
using namespace std;

int main()
{
   float B[4] = {2.5 ,3.4 ,6.0,12.2};
   float C[4] = {4.0,2.0,3.6,6.4};

   float R[4];
   double S[4], a, b, c, d, jum =0;

   a = B[2] + C[3];
   b = B[3] - C[1];

   c = B[2] * C[1];
   d = (B[3]+C[2]) /(C[1]*B[1]);

   cout<<"a = "<<a<<",\tb = "<<b<<"\n";
   cout<<"c = "<<c<< ",\t\td = "<<d<<"\n";

   for (int i=0;i<=3;i++)
   {
      S[i] = B[i] / C[i];
      R[i] = B[i] * C[i];
      cout<<"S["<<i<<"] = "<<S[i]<<",\tR["<<i<<"] = "<<R[i]<<endl;
   }

   for (i=0;i<=3;i++)
      jum += (B[i] +C[i]);

   cout<<"Penjumlahan atas elemen-elemen array B dan C = "<<jum<<endl;

   return 0;
}
KELUARAN
a = 12.4,       b = 10.2
c = 12,         d = 2.32353
S[0] = 0.625,   R[0] = 10
S[1] = 1.7,     R[1] = 6.8
S[2] = 1.66667, R[2] = 21.6
S[3] = 1.90625, R[3] = 78.08
Penjumlahan atas elemen-elemen array B dan C = 40.1


OPERASI DARI FUNGSI-FUNGSI PADA ELEMEN-ELEMEN ARRAY
Pada program berikut, dua fungsi didefinisikan. Satu fungsi menghasilkan kuadrat dari suatu nilai dan fungsi lain menghasilkan akar kuadrat dari sebuah nilai. Fungsi-fungsi itu diterapkan pada elemen-elemen array dan menghasilkan kuadrat dan akar kuadrat dari elemen-elemen array.


Program 1.15 Aplikasi dari fungsi-fungsi STL pada elemen-elemen array

#include<iostream>
#include<cmath>
using namespace std;

int F1(int x)
{
   return pow(x,2);
}

double F2(int n)
{
   return sqrt(n);
}

main()
{
   int A[4] = { 2,3,4,5};
   int B[4];
   double S[4];

   for(int i=0;i<=3;i++)
   {
      B[i] = F1(A[i]);
      S[i] = F2(A[i]);
      cout<<"A["<<i<<"] = "<<A[i]<< "\tB["<<i<<"] = "<<B[i]<<",\tS["<<i<<"] = "<<S[i]<<"\n";
   }

   return 0;
}
KELUARAN
A[0] = 2        B[0] = 4,       S[0] = 1.41421
A[1] = 3        B[1] = 9,       S[1] = 1.73205
A[2] = 4        B[2] = 16,      S[2] = 2
A[3] = 5        B[3] = 25,      S[3] = 2.23607



1.7 Pengurutan Array
Pada banyak kasus, Anda perlu mengurutkan suatu array dengan tatanan menaik atau tatanan menurun. Sebagai contoh, Anda bisa saja perlu menata-ulang nilai-nilai yang didapatkan oleh siswa dengan tatanan menurun sehingga siswa dengan skor tertinggi berada di atas daftar dan siswa dengan skor terendah berada di paling bawah daftar. Program 1.16 mengilustrasikan kode untuk mengurutkan sejumlah nilai yang dimasukkan oleh user.

Jika daftar akan ditata dengan urutan menaik, maka elemen dengan nilai terendah menjadi pertama di dalam daftar. Dimisalkan bahwa angka[j] dan angka[j+1] merupakan dua elemen bertetangga dari array angka[]. Sekarang, keduanya dibandingkan dan jika angka[j] > angka[j+1], maka kedua elemen ditukar. Perbandingan kemudian digeser ke elemen berikutnya dan seterusnya sampai ke akhir array. Dengan cara ini, elemen dengan nilai tertinggi akan ditempatkan di akhir daftar.

Tetapi jika angka[j] lebih kecil dari angka[j+1] maka tidak ada penukaran yang dilakukan dan perbandingan digeser ke elemen berikutnya, yaitu dengan membandingkan angka[k+1] dan angka[k+2]. Proses perbandingan dan penukaran seterusnya dilakukan terhadap semua elemen array. Jadi, jika n adalah jumlah elemen di dalam array, maka proses perbandingan akan diulangi sebanyak n – 1 kali. Dan ini harus dilakukan sebanyak (n – 1) kali untuk menuntaskan pengurutan. Program berikut dikode untuk mengilustrasikan proses pengurutan dengan tatanan menaik.


Program 1.16 Mengilustrasikan pengurutan array karakter

#include <iostream>
using namespace std;

int main()
{
   const int p = 5;
   char kar[10] ;

   cout<<"Masukkan 5 karakter: ";
   for(int i=0; i<p; i++)
      cin>> kar[i];

   cout<<"\nAnda telah memasukkan karakter-karakter berikut: \n ";
   for(int k =0; k<p; k++)
      cout<<" "<<kar[k]<<" ";

   cout<<"\n";

   for (int n = 0 ; n<p; n++)
   {
      for(int j =0; j<p-1; j++)
      {
         if(kar[j]>kar[j+1])
            swap(kar[j], kar[j+1]);
      }

      for (int r =0; r<5; r++)
         cout<<kar[r]<<" ";

      cout<<"\n";
   }

   return 0;
}
KELUARAN
Masukkan 5 karakter: medan

Anda telah memasukkan karakter-karakter berikut:
m  e  d  a  n

e d a m n
d a e m n
a d e m n
a d e m n
a d e m n


Program berikut mengilustrasikan pengurutan dari sebuah daftar nilai dengan tatanan menaik.

Program 1.17 Mengilustrasikan pengurutan array integer

#include <iostream>
using namespace std;

main()
{
   int angka[10] ;
  
   cout<<"Masukkan 10 integer: ";
   {
      for(int i=0;i<10;i++)
         cin>>angka[i];
   }

   cout<<"Array terurut diberikan berikut: \n ";
   {
      for (int i=0;i<10;i++)
         for(int j =0;j<9;j++)
            if (angka[j]>angka[j+1])
               swap(angka[j],angka[j+1]);
   }

   for(int i=0;i<10;i++)
      cout<<angka[i]<<" ";

   cout<<"\n";

   return 0;
}
KELUARAN
Masukkan 10 integer: 10 9 8 7 6 5 4 3 2 1
Array terurut diberikan berikut:
1 2 3 4 5 6 7 8 9 10



1.8 Pencarian Nilai Maksimum/Minimum Di Dalam Array
Seringkali diperlukan untuk mencari nilai maksimum dan nilai minimum di dalam suatu daftar. Sebagai contoh, pada daftar nilai siswa, seringkali diperlukan untuk mencari siapa siswa yang memiliki skor tertinggi dan siapa siswa yang memiliki skor terendah. Program berikut menentukan nilai maksimum di dalam suatu array. Program juga menentukan elemen mana yang memiliki nilai maksimum. Nilai dari tiap elemen array dimasukkan oleh user.

Skema program adalah bahwa dengan mengasumsikan bahwa elemen pertama sebagai nilai maksimum. Nilai ini dibandingkan dengan elemen kedua. Jika elemen kedua lebih besar dari elemen pertama, maka elemen kedua ditandai sebagai nilai maksimum dan dibandingkan dengan elemen ketiga dan proses yang sama akan diulangi. Jika elemen pertama lebih besar dari elemen kedua, maka perbandingan digeser ke elemen ketiga tanpa melakukan apapun. Proses ini dilakukan untuk semua elemen.


Program 1.18 Mengilustrasikan pencarian elemen dengan nilai maksimum di dalam suatu array

#include <iostream>
using namespace std;

int main()
{
   int angka[10] = {0}, maks;

   cout<<"Masukkan 10 integer: ";
   {
      for(int i=0;i<10;i++)
         cin>>angka[i];
   }

   cout<<"\nAnda telah memasukkan nilai-nilai berikut: \n";
   for(int i =0;i<10;i++)
      cout<<" "<<angka[i]<<" ";

   cout<<"\n ";

   maks = angka[0];
   {
      for(int j = 0; j<9; j++)
         if(angka[j] > maks)
            maks = angka[j];
         else maks = maks;
   }

   cout <<"maks = "<< maks<<endl;
   {
      for(int k=0; k<10; k++)
         if (maks == angka[k])
            cout<<"angka["<<k<<"] = " << angka[k] <<endl;
   }

   return 0;
}
KELUARAN
Masukkan 10 integer: 74 32 39 89 47 84 90 84 99 67

Anda telah memasukkan nilai-nilai berikut:
 74  32  39  89  47  84  90  84  99  67
 maks = 99
angka[8] = 99



1.9 Melewatkan Array Kepada Fungsi
Sama seperti variabel, array juga dapat dijadikan parameter fungsi. Untuk deklarasi fungsi dengan array sebagai parameternya, Anda perlu menyebutkan tipe data dari array dan sebuah integer tak-bertanda yang mengindikasikan jumlah elemen di dalam array. Perhatikan bahwa elemen-elemen array tidak bisa berupa fungsi-fungsi. Jadi, prototipe dari sebuah fungsi dengan array sebagai parameternya dapat dituliskan berikut.

int nama_fungsi(int [], size_t); // prototipe

Pada ekspresi tersebut, size_t merupakan typdef untuk int tak bertanda. Dan untuk definisi fungsi, Anda bisa menuliskan berikut.

int nama_fungsi(int A[], size_t n)
{
   statemen_statemen;
   ————————
   ————————;
}


Program 1.19 Mengilustrasikan pelewatan array kepada fungsi

#include <iostream>
using namespace std;

double Rerata (double[], size_t ); //prototipe fungsi

int main()
{
   int n=10;
   double angka[10];

   cout<<"Masukkan 10 nilai titik-mengambang: ";
   for(int i=0;i<10;i++)
      cin>>angka[i]; //masukkan elemen-elemen array

   cout<<"Anda telah memasukkan nilai-nilai berikut: "<<endl;
   for(int j=0;j<10;j++)
      cout<< angka[j]<<" ";

   cout<<"\n Rerata = "<<Rerata(angka,n)<< endl;

   return 0;
}

double Rerata(double angka[], size_t n)
// definisi fungsi
{
   double Total = 0;

   for (int i =0; i<n; i++)
      Total += angka[i];

   return Total / n;
}
KELUARAN
Masukkan 10 nilai titik-mengambang: 3.4 4.5 5.6 6.7 7.8 8.9 9.8 8.7 7.6 6.5
Anda telah memasukkan nilai-nilai berikut:
3.4 4.5 5.6 6.7 7.8 8.9 9.8 8.7 7.6 6.5
 Rerata = 6.95


Pada program berikut, dua array dilewatkan kepada sebuah fungsi. Fungsi tersebut mengevaluasi perkalian dari elemen-elemen dari dua arrry tersebut dan menghitung hasil penjumlahannya.

Program 1.20 Mengilustrasikan pelewatan lebih dari satu array kepada fungsi

#include <iostream>
using namespace std;

double Perkalian (double[], double[], size_t, size_t);
//prototipe fungsi

int main()
{
   int n =4, m=4;
   double angka[4];
   double Nilai[4];

   cout <<"Masukkan 4 buah nilai desimal untuk array angka: ";
   for(int i=0;i<4;i++)
      cin>> angka[i];

   cout<<"\nMasukkan 4 nilai desimal untuk array Nilai: ";
   for(int j=0;j<4;j++)
      cin>>Nilai[j]; //membaca elemen-elemen array

   cout<<"Anda telah memasukkan nilai-nilai berikut untuk array angka: "<<endl;
   for(int k=0;k<4;k++)
      cout<< angka[k]<<" ";

   cout<<"\nAnda telah memasukkan nilai-nilai berikut untuk array Nilai: "<<endl;
   for(int s=0;s<4;s++)
      cout<<Nilai[s]<<" ";

   cout<<"\nPenjumlahan atas perkalian dari elemen-elemen array = "
          <<Perkalian(angka, Nilai, n, m)<< endl;

   return 0;
}

double Perkalian(double angka[], double Nilai[], size_t n, size_t m)
{
   double Perkalian[] ={0, 0, 0, 0};
   double Total = 0;

   for (n =0; n<4; n++)
   {
      Perkalian[n]= angka[n] * Nilai[n];
      Total += Perkalian[n];
   }

   return Total;
}
KELUARAN
Masukkan 10 nilai titik-mengambang: 3.4 4.5 5.6 6.7 7.8 8.9 9.8 8.7 7.6 6.5
Anda telah memasukkan nilai-nilai berikut:
3.4 4.5 5.6 6.7 7.8 8.9 9.8 8.7 7.6 6.5
 Rerata = 6.95



1.10 Array Dua Dimensi dan Matriks
Program berikut mengilustrasikan penjumlahan dan pengurangan dua matriks.

Program 1.21 Mengilustrasikan penjumlahan dan pengurangan dua matriks

# include <iostream>
using namespace std;

int main()
{
   int C[2][3], D[2][3];
   int A[2][3] = {20, 30, 40, 50, 60, 70};
   int B[2][3] = {10, 20, 20, 30, 20, 10};

   for (int i =0; i<2; i++)
      for (int j = 0; j<3; j++)
         {
         C[i][j] = A[i][j] + B[i][j];       //penjumlahan
         D[i][j] = A[i][j] - B[i][j];   //pengurangan
         }   

   for (int n = 0; n<2; n++)
   {
      for (int m = 0; m<3; m++)
         cout<<C[n][m]<<" " ;
      cout << "\n";
   }

   cout<<endl;

   for (int p =0 ; p<2; p++)
   {
      for (int s = 0; s<3; s++)
         cout<<D[p][s]<<" " ;
      cout << "\n";
   }

   return 0 ;
}
KELUARAN
30 50 60
80 80 80

10 10 20
20 40 60


Program berikut mengilustrasikan perkalian dari dua matriks.

Program 1.22 Mengilustrasikan perkalian dari dua matriks

#include<iostream>
using namespace std;

int main()
{
   int S[2][3] = {1, 2, 3, 4, 5, 6};
   int P[3][1] = {6, 5, 4};
   int C[2] = {0} ;

   for (int i = 0; i<2; i++)
      for (int j = 0; j<1; j++)
         for (int k = 0; k<3; k++)
               {
            C[i] += S[i][k] * P[k][j];
               }

   for (int m = 0; m<2; m++)
      cout<<C[m] <<"\n";

   return 0;
}
KELUARAN
28
73



1.11 Array Tiga Dimensi
Program berikut mengilustrasikan pembacaan dan penampilan isi dari sebuah array tiga dimensi.

Program 1.23 Mengilustrasikan array tiga dimensi

#include <iostream>
using namespace std;

int main()
{
   int angka[2][3][4];

   cout<<"Tuliskan 24 integer yang dipisahkan dengan spasi: \n";

   for(int i=0;i<2;i++)
   {
      for(int j=0;j<3;j++)
      {
         for (int k = 0; k<4;k++)
            cin>>angka[i][j][k];
      }
   }

   cout<<"\n\n";
   for(int n=0; n<2; n++)
   {
      for(int j=0;j <3; j++)
      {
         for (int k =0;k<4;k++)
            cout<<"angka["<<n<<"]["<<j<<"]["<<k<<"] = "<<angka[n][j][k];
         cout<<"\n";
      }
   }

   cout<<"\n\n";
   for(int m=0; m<2; m++)
   {
      for(int p=0; p<3; p++)
      {
         for (int k =0; k<4; k++)
            cout<<angka[m][p][k];
         cout<<"\n";
      }
      cout<<"\n";
   }

   return 0;
}
KELUARAN
Tuliskan 24 integer yang dipisahkan dengan spasi:
1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6


angka[0][0][0] = 1angka[0][0][1] = 1angka[0][0][2] = 1angka[0][0][3] = 1
angka[0][1][0] = 2angka[0][1][1] = 2angka[0][1][2] = 2angka[0][1][3] = 2
angka[0][2][0] = 3angka[0][2][1] = 3angka[0][2][2] = 3angka[0][2][3] = 3
angka[1][0][0] = 4angka[1][0][1] = 4angka[1][0][2] = 4angka[1][0][3] = 4
angka[1][1][0] = 5angka[1][1][1] = 5angka[1][1][2] = 5angka[1][1][3] = 5
angka[1][2][0] = 6angka[1][2][1] = 6angka[1][2][2] = 6angka[1][2][3] = 6


1111
2222
3333

4444
5555
6666


LATIHAN
1.       Bagaimana Anda mendeklarasikan sebuah array satu dimensi?
2.       Bagaimana array diinisialisasi?
3.     Apa yang akan terjadi jika inisialisasi memiliki jumlah elemen yang lebih sedikit dari jumlah elemen pada array?
4.     Apa yang akan terjadi jika inisialisasi memiliki jumlah elemen yang lebih banyak dari jumlah elemen pada array?
5.       Bagaimana Anda menginisialisasi sebuah array dua dimensi?
6.    Bagaimana Anda mengakses elemen pertama dan elemen terakhir dari sebuah array yang memiliki enam elemen?
7.       Bagaimana Anda menginisialisasi sebuah array tiga dimensi?
8.       Bagaimana Anda menentukan alamat dari sebuah array?
9.       Bagaimana Anda menentukan alamat dari tiap elemen array?

10.    Tuliskan kode untuk mengurutkan sebuah daftar nilai integer dengan urutan menurun.

No comments: