Jumat, 20 Juli 2012

Array

Array merupakan sekumpulan data yang mempunyai nama dan tipe yang sama, array disebut juga variable berindeks. Nilai suatu data dala array ditentukan oleh nama dan indeksnya. Tipe data array dapat berupa array satu dimensi atau  array berdemensi banyak

/*Program :array2.cpp*/
#include
int main()
{
int square[100];
int i; /*loop index*/;
int k; /*the integer*/
/*calculate the squares */
for (i=0; i<10; i++)
{
k= i+1;
square[i]=k*k;
printf(“nPangkat dari %d adalah %d “, k, square[i]);
}
return 0;
}
Bila program dijalankan akan muncul hasil :
Pangkat dari 1 adalah 1
Pangkat dari 2 adalah 4
Pangkat dari 3 adalah 9
Pangkat dari 4 adalah 16
Pangkat dari 5 adalah 25
Pangkat dari 6 adalah 36
Pangkat dari 7 adalah 49
Pangkat dari 8 adalah 64
Pangkat dari 9 adalah 81
Pangkat dari 10 adalah 100

ARRAY DUA DIMENSI
Singkatnya, Array dua dimensi merupakan array yang terdiri dari m buah baris dan n buah kolom. Bentuknya dapat berupa matriks atau tabel.

Bentuk umum pendeklarasian variabel array dua dimensi di Java adalah:
tipeData[][]nama_variabel[=new tipeData[jumlah_baris][jumlah_kolom]];


Untuk memudahkan pemahaman, bentuk array dua dimensi bisa dihambarkan dalam bentuk petak-petak sebagai berikut:

N adalah nilai yang menyatakan jumlah baris dari array, sedangkan M menyatakan jumlah kolom dari array. Sama seperti array satu dimensi, penomoran indeks untuk array dua dimensi juga dimulai dari 0 untuk baris maupun kolomnya. Tidak ada aturan yang mengatakan bahwa urutan untuk nomor indeks adalah baris dulu baru kolom.

Contoh array 2 dimensi:
int x[3][4];
 contoh program :
//contoh program array dua dimensi
#include<iostream.h>
#include<conio.h>
void main()
{
int a[2][3], i, j;

for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
{
cout<<"Masukan angka pada baris ke "<<i<<" kolom ke "<<j<<" : ";
cin>>a[i][j];
}
cout<<endl;
}
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
getch();
}

array 3 dimensi merupakan array yang memiliki tiga sumbu sudut x,y,z ..
contoh program array 3 dimensi :
#include<constream.h>
void main()
{
 int kelas[3][4][4];
 int x,y,total[4][4],final[4];

for(int z=1;z<=3;z++)
{
 clrscr();
 cout<<"Pemilihan Presma LPKIA di kelas matkul ke-"<<z<<"\n\n";
 cout<<"No. Nama    KELAS PEMILIH        TOTAL\n";
 cout<<"           1TI5       1TI6\n";
 cout<<"1   Andi\n";
 cout<<"2   Budi\n";
 cout<<"3   Cepi\n";
 cout<<"             TOTAL PEMILIH=";

 final[z]=0;
 for (y=1; y<=3; y++)
 {
  total[y][z]=0;
  for (x=1; x<=2; x++)
  {
   gotoxy(x*11+2,y+4);
   cin>>kelas[x][y][z];
   total[y][z]=total[y][z]+kelas[x][y][z];
  }
  gotoxy(35,y+4);
  cout<<total[y][z];
  final[z]=final[z]+total[y][z];
 }
 gotoxy(35,8);
 cout<<final[z];
 getch();
}

//laporan akhir total masing2
int fixtotal[4];
cout<<"\nlaporan akhir"<<endl;
cout<<"Nama    Kelas Matkul       TOTAL "<<endl;
cout<<"      ke-1   ke-2   ke-3"<<endl;
cout<<"Andi\n";
cout<<"Budi\n";
cout<<"Cepi\n";

for(z=1;z<=3;z++)
{
 fixtotal[z]=0;
 for(y=1;y<=3;y++)
 {
 gotoxy(z*7+1,y+11);
 cout<<total[y][z];
 fixtotal[z]=fixtotal[z]+total[z][y];
 }
 gotoxy(29,z+11);
 cout<<fixtotal[z];
}


//search max
int index=1;
int max=fixtotal[1];
//cout<<max;
//getch();
for(x=1;x<=3;x++)
{
 if(fixtotal[x]>max)
  {
  index=x;
  max=fixtotal[x];
  }
}
cout<<"\nmaksimal:"<<fixtotal[index];
cout<<"\nada di nomor "<<index;
getch();
}


Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu variabel lain. Alamat ini merupakan lokasi dari obyek lain (biasanya variabel lain) di dalam memori. Contoh, jika sebuah variabel berisi alamat dari variabel lain, variabel pertama dikatakan menunjuk ke variabel kedua Operator Pointer ada dua, yaitu :
  • Operator &
Operator & bersifat unary (hanya memerlukan satu operand saja).
Operator & menghasilkan alamat dari operandnya.
  • Operator *
Operator * bersifat unary (hanya memerlukan satu operand saja).
Operator * menghasilkan nilai yang berada pada sebuah alamat.

DEKLARASI POINTER

Seperti halnya variabel yang lain, variabel pointer juga harus dideklarasikan terlebih dahulu sebelum digunakan.  Bentuk Umum :
Tipe_data *nama_pointer;
//Contoh
int *px;
char *sh;
Contoh Program :
#include “IOSTREAM.h”
#include “conio.h”
void main()
{ int x, y; /* x dan y bertipe int */
int *px; /* px pointer yang menunjuk objek */
clrscr();
x = 87;
px = &x; /* px berisi alamat dari x */
y = *px; /* y berisi nilai yang ditunjuk px */
cout<<“Alamat x =”<<&x <<\n”;
cout<<“Isi px = \n”, px);
cout<<“Isi x = \n”, x);
cout<<“Nilai yang ditunjuk oleh px = \n”, *px);
cout<<“Nilai y = \n”, y);
getch();
}
OPERASI POINTER
Operasi Penugasan
Suatu variable pointer seperti halnya variable yang lain, juga bisa mengalami operasi
penugasan. Nilai dari suatu variable pointer dapat disalin ke variable pointer yang lain.




//Contoh
#include "iostream.h"
#include "conio.h"
void main()
{ float *x1,y, *x2;
clrscr();
y = 13.45;
x1 = &y;            /* Alamat dari y disalin ke variabel x1 */
x2 = x1;            /* Isi variabel x1 disalin ke variabel x2 */
cout<<"Nilai variabel y =  "<<y<< " ada di alamat "<< x1<<"\n";
cout<<"Nilai variabel y =  "<<y<< " ada di alamat "<< x2<<"\n";
 getch();
}
Operasi Aritmatika
Suatu variabel pointer hanya dapat dilakukan operasi aritmatika dengan nilai integer saja. Operasi yang biasa dilakukan adalah operasi penambahan dan pengurangan. Operasi penambahan dengan suatu nilai menunjukkan lokasi data berikutnya (index selanjutnya) dalam memori. Begitu juga operasi pengurangan.
//Contoh9_3
#include <iostream.h>
#include <conio.h>
void main()
{ int nilai[3], *penunjuk;
clrscr();
nilai[0] = 125;
nilai[1] = 345;
nilai[2] = 750;
penunjuk = &nilai[0];
cout<<"Nilai "<<*penunjuk <<" ada di alamat memori " <<penunjuk<<"\n";
cout<<"Nilai "<<*(penunjuk+1) <<" ada di alamat memori " <<penunjuk+1<<"\n";
cout<<"Nilai "<<*(penunjuk+2) <<" ada di alamat memori " <<penunjuk+2<<"\n";
getch();
}
Operasi Logika
Suatu pointer juga dapat dikenai operasi logika.
//Contoh
#include<iostream.h>
#include "conio.h"
void main()
{ int a = 100, b = 200, *pa, *pb;
clrscr();
pa = &a;
pb = &b;
cout<<"nilai pa= "<<pa<< " nilai pb= "<<pb<<"\n";
if(pa < pb)
cout<<"pa menunjuk ke memori lebih rendah dari pb\n";
if(pa == pb)
cout<<"pa menunjuk ke memori yang sama dengan pb\n";
if(pa > pb)
cout<<"pa menunjuk ke memori lebih tinggi dari pb\n";
getch();}
POINTER DAN STRING
//Contoh
#include <iostream.h>
#include <conio.h>
void misteri1(char *);
void main() {
char string[] = "amikom";
cout<< "String sebelum proses adalah " << string <<"\n" ;
misteri1(string);
cout<<"String setelah proses adalah "<<string;
getch();
}
void misteri1(char *s) {
while ( *s != '\0' ) {
if ( *s >= 'a' && *s <= 'z' )
*s -= 32;
++s;
}
}
 POINTER MENUNJUK SUATU ARRAY
//Contoh
#include "iostream.h"
#include "conio.h"
void main()
{ static int tgl_lahir[] = { 13,9,1982 };
int *ptgl;
ptgl = tgl_lahir; /* ptgl berisi alamat array */
cout<<"Diakses dengan pointer\n";
cout<<"Tanggal = "<< *ptgl<<"\n";
cout<<"Bulan = "<< *(ptgl + 1) <<"\n";
cout<<"Tahun = "<<*(ptgl + 2) <<"\n";
cout<<"\nDiakses dengan array biasa\n";
cout<<"Tanggal = "<< tgl_lahir[0] <<"\n";
cout<<"Bulan = "<< tgl_lahir[1] <<"\n";
cout<<"Tahun = "<< tgl_lahir[2] <<"\n";
getch();
}
MEMBERI NILAI ARRAY DENGAN POINTER
//contoh
#include "iostream.h"
#include "conio.h"
void main()
{ int x[5], *p, k;
clrscr();
p = x;
x[0] = 5;
x[1] = x[0];
x[2] = *p + 2;
x[3] = *(p+1) - 3;
x[4] = *(x + 2);
for(k=0; k<5; k++)
cout<<"x["<<k<<"] = "<< x[k]<<"\n";
getch();
}

 

MEMORI DINAMIS

Pada contoh program di samping kiri sejumlah memori secara ekplisit disisihkan untuk menampung array titik yang mempunyai 10 elemen. Sebenamya alokasi memori ini, hanya yang dibutuhkan saja, dapat dilakukan secara dinamis yaitu dilakukan pada saat run-time, Untuk melakukan hal ini kita perlu array yang elemen elemennya adalah pointer ke suatu struktur seperti dijelaskan pada program di samping kanan.
             Alokasi memori secara dinamis dilakukan dengan operator new dan dealokasi dilakukan dengan operator delete. Keduanya merupakan operator baru pada C++
 

Tidak ada komentar:

Posting Komentar