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:
Post a Comment