Array dan Pointer 6 Nopember 2007
Definisi Array Array adalah sebuah variabel yang menyimpan sekumpulan data yang memiliki tipe sama Setiap data menempati lokasi/alamat memori yang berbeda-beda → elemen array Elemen array dapat diakses melalui indeks yang terdapat di dalamnya
Bentuk Umum Pendeklarasian Array Nilai ke- 1 Nilai ke- 2 …Nilai ke-N Alamat ke-1 Alamat ke-2 …Alamat ke-N O1…N Nilai Elemen array Alamat Elemen array Indeks Elemen array Pendeklarasian array tipe_data nama_array[jumlah_array]
Tipe Deklarasi pada array dengan C++ contoh penugasan dan operasi pada array Pendefinisian Array int billy[5]; Inisialisasi Arrar int billy[5] = {16,2,77,40,12071}; billy[0] = a; billy[a] = 75; Operasi Array b = billy[a+2]; billy[billy[a]] = billy[2]+5;
Contoh array #include using namespace std; int billy [] = {16, 2, 77, 40, 12071}; int n, result=0; int main () { for ( n=0 ; n<5 ; n++ ) { result += billy[n]; } cout << result; return 0; } #include using namespace std; int main() { // Mendeklarasikan array // dengan melakukan inisialisasi nilai ke dalamnya int A[10] = { 12, 24, 13, 25, 10, 13, 21, 20, 15, 18 }; int BIL; for (int c =0; c<10; c++) { cout<<A[c]<<endl; } cout<<endl; cout >BIL; // Melakukan pencarian data for (int J=0; J<10; J++) { if (A[J] == BIL) { cout<<"Nilai yang dicari terdapat pada indeks ke- "<<J << endl; break; } return 0; }
Pencarian nilai maksimum dan minimum #include using namespace std; int main() { // Mendeklarasikan sebuah array // dan melakukan inisialisasi ke dalamnya int A[10] = { 12, 34, 54, 32, 10, 67, 98, 11, 20, 22 }; /* Mendeklarasikan variabel max dan min untuk menampung nilai maksimum dan minumum */ int max = A[0], min = A[0]; // Menentukan nilai maksimum for (int C=1; C<10; C++) { if (A[C] > max) { max = A[C]; } // Menentukan nilai minimum for (int c=1; c<10; c++) { if (A[c] < min) { min = A[c]; } // Menampilkan nilai maksimum dan minimum // yang ditemukan dalam array cout<<"Nilai maksimum: "<<max<<endl; cout<<"Nilai minimum: "<<min<<endl; return 0; }
Mengurutkan nilai metode gelembung #include using namespace std; int main() { // Deklarasikan array dgn 7 buah elemen yang bertipe int int A[7]; // Mendeklarasikan variabel-variabel bantu yang diperlukan int j, k, C, temp; // Memasukkan nilai array cout<<"Masukkan nilai pada elemen array :"<<endl; for (C=O; C<7; C++) { cout >A[C]; } // Menampilkan nilai sebelum diurutkan cout<<"\nNilai elemen array sebelum diurutkan :"<<endl; for (C=O; C<7; C++) { cout<<"A["<<C<<"] = "<<A[C]<<endl; } // Pengurutan elemen array dgn metode gelembung for (j=O; j<6; j++) { for (k=7; k>0; k--) { if (A[k] < A[k-1]) { temp = A[k]; A[k] = A[k-1]; A[k-1] = temp; } } } // Menampilkan nilai setelah diurutkan cout<<"\nNilai elemen array setelah diurutkan :"<<endl; for (C=O; C<7; C++) { cout<<"A["<<C<<"] = "<<A[C]<<endl; } return O; }
Pengurutan metode maksimum dan minimum #include using namespace std; int main() { // Mendeklarasikan array dgn 7 buah elemen yang bertipe int int A[7]; // Mendeklarasikan variabel bantu yang diperlukan int j, k, C, temp; // Memasukkan nilai array cout<<"Masukkan nilai pada elemen array :"<<endl; for (C=O; C<7; C++) { cout >A[C]; } // Menampilkan nilai sebelum diurutkan cout<<"\nNilai elemen array sebelum diurutkan :"<<endl; for (C=O; C<7; C++) { cout<<"A["<<C<<"] = "<<A[C]<<endl; } // Pengurutan elemen array dgn metode maksimum-minimum int jmaks, U=6; for (j=0; j<6; j++) { jmaks = 0; for (k=1; k<=U; k++) { if (A[k] > A[jmaks]) { jmaks = k; } } temp = A[U]; A[U] = A[jmaks]; A[jmaks] = temp; U--; } // Menampilkan nilai setelah diurutkan cout<<"\nNilai elemen array setelah diurutkan :"<<endl; for (C=O; C<7; C++) { cout<<"A["<<C<<"] = "<<A[C]<<endl; } return O; }
Array Multidimensi int jimmy[3][5] → mendeklarasikan array jimmy[1][3] → menunjuk isi sel array Array Dua Dimensi tipe_data nama_array[jumlah_elemen_baris][jumlah_elemen_kolom];
Inisialisai Array Multidimensi #include using namespace std; int main() { // Melakukan inisialisasi nilai // ke dalam elemen-elemen array dua dimensi int A[3][3] = { {1,2,3}, {4,5,6}, {7,8,9} }; // Mendeklarasikan variabel untuk indeks pengulangan int j, k; // Menampilkan nilai yang tersimpan dalam elemen array for (j=0; j<3; j++) { for (k=0; k<3; k++) { cout<<"A["<<j<<"]["<<k<<"] = "<<A[j][k]<<endl; } cout<<endl; } //Menampilkan dalam bentuk matriks for (j=0; j<3; j++) { for (k=0; k<3; k++) { cout<<A[j][k]<<“ “; } cout<<endl; } return 0; }
Contoh #include using namespace std; void printarray (int arg[], int length) { for (int n=0; n<length; n++) cout << arg[n] << " "; cout << "\n"; } int main () { int firstarray[] = {5, 10, 15}; int secondarray[] = {2, 4, 6, 8, 10}; printarray (firstarray,3); printarray (secondarray,5); return 0; }
Pointer Pointer adalah suatu variabel yang menyimpan alamat memori Deklarasi pointer tipe_data *nama_pointer atau tipe_data* nama_pointer Contoh long x; // x bertipe long long *p; // p berupa pointer bertipe long p = &x; //mengisi alamat x ke p
Pointer Deklarasi pointer: Int andy, fred; Int *ted; andy = 25; fred = andy; ted = &andy;
Contoh pointer (1) #include using namespace std; int main () { int firstvalue, secondvalue; int * mypointer; mypointer = &firstvalue; *mypointer = 10; mypointer = &secondvalue; *mypointer = 20; cout << "firstvalue is " << firstvalue << endl; cout << "secondvalue is " << secondvalue << endl; return 0; }
Contoh pointer (2) #include using namespace std; int main () { int firstvalue = 5, secondvalue = 15; int * p1, * p2; p1 = &firstvalue; // p1 = address of firstvalue p2 = &secondvalue; // p2 = address of secondvalue *p1 = 10; // value pointed by p1 = 10 *p2 = *p1; // value pointed by p2 = value pointed by p1 p1 = p2; // p1 = p2 (value of pointer is copied) *p1 = 20; // value pointed by p1 = 20 cout << "firstvalue is " << firstvalue << endl; cout << "secondvalue is " << secondvalue << endl; return 0; }
Contoh Pointer (3) #include using namespace std; int main () { int numbers[5]; int * p; p = numbers; *p = 10; p++; *p = 20; p = &numbers[2]; *p = 30; p = numbers + 3; *p = 40; p = numbers; *(p+4) = 50; for (int n=0; n<5; n++) cout << numbers[n] << ", "; return 0; }
Konstanta pada pointer #include using namespace std; int main() { // P1 akan menunjuk ke tipe data int // yang bersifat tetap const int * P1; int X, Y; X = 5; Y = 10; P1 = &X; // *P1 = 2; // SALAH, karena nilai yang ditunjuk oleh P1 // (nilai *P1) bersifat tetap // BENAR, karena pointer P1 tidak bersifat tetap P1 = &Y; return 0; } #include using namespace std; int main() { int X=5, Y=10; int * const P2 = &X; // P2 akan menunjuk ke alamat yang tetap, // yaitu alamat X *P2 = 2; // BENAR, karena nilai *P2 dapat diubah // P2 = &Y; // SALAH, karena pointer P2 tidak bersifat tetap return 0; }
Contoh Void Pointer #include using namespace std; void increase (void* data, int psize) { if ( psize == sizeof(char) ) { char* pchar; pchar=(char*)data; ++(*pchar); } else if (psize == sizeof(int) ) { int* pint; pint=(int*)data; ++(*pint); } } int main () { char a = 'x'; int b = 1602; increase (&a,sizeof(a)); increase (&b,sizeof(b)); cout << a << ", " << b << endl; return 0; }
Contoh Pointer dalam fungsi #include using namespace std; int addition (int a, int b) { return (a+b); } int subtraction (int a, int b) { return (a-b); } int operation (int x, int y, int (*functocall)(int,int)) { int g; g = (*functocall)(x,y); return (g); } int main () { int m,n; int (*minus)(int,int) = subtraction; m = operation (7, 5, addition); n = operation (20, m, minus); cout <<n; return 0; }