Selasa, 05 Januari 2016

BAB VII Mengenal Pointer Dalam C++

Setiap kali kita mendeklarasikan variabel, C/C++ akan menyediakan alokasi memori untuk masing-masing variabel. Ukuran memori yang dialokasikan berbeda-beda tergantung dari tipe data variabelnya. Misalnya untuk integer 2 bytes, untuk float 4 bytes, dst. Jadi, setiap variabel yang kita deklarasikan mempunyai 2 atribut yaitu address dan value.

Pada kesempatan kali ini, saya akan membahas powerful feature dari bahasa pemograman C/C++, yaitu pointer. Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu variabel lain. Pointer merupakan variabel level rendah yang dapat digunakan untuk menunjuk nilai integer, character, float, double, atau single, dan bahkan tipe-tipe data lain yang didukung oleh bahasa C.


Variabel biasa, sifatnya statis dan sudah pasti, sedangkan pada pointer sifatnya dinamis dan dapat lebih fleksibel.  Variabel pointer yang tidak menunjuk pada nilai apapun berarti memiliki nilai NULL, dan disebut sebagai dangling pointer karena nilainya tidak diinisialisasi dan tidak dapat diprediksi.

Seperti halnya variabel yang lain, variabel pointer juga harus dideklarasikan terlebih dahulu sebelum digunakan.

Bentuk Umum  :  tipe_data  *nama_pointer;
Contoh             :  int *nilai;

char *huruf;
Pendeklarasian variabel pointer menggunakan tanda * sebelum nama variabelnya, sedangkan untuk menampilkan nilai yang ditunjuk oleh suatu variabel pointer, juga digunakan operator * (tanda asterisk).  Jika diinginkan untuk menampilkan alamat tempat penyimpanan nilai yang ditunjuk oleh suatu variabel pointer, digunakan operator & (tanda ampersand).

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 Operator (&) dalam kaitannya dengan pointer adalah operator yang mengembalikan alamat memori dari operandnya. Contohnya :

int y = 5; /*deklarasi variabel y*/
int *yPtr; /*deklarasi variabel pointer yPtr*/
yPtr = &y; /*mengisi variabel pointer yPtr dengan alamat dari variabel y*/

Maka representasi dari operasi penugasan di atas adalah

Representasi yang lain, misalnya asumsikan bahwa variabel y berada pada alokasi memori 600000 dan variabel pointer yPtr berada pada alokasi memori 500000.


Pertanyaan :

t = *p;
*p = *q;
*q = t;

Fungsi  di atas ini (dengan pointer) untuk apakah itu?

Untuk membantu, coba tambahkan perintah di bawah ini pada program di atas:

printf("nilai yang ditunjuk p sekarang = %d di alamat %p\n",*p,p);
printf("nilai yang ditunjuk q sekarang = %d di alamat %p\n",*q,q);

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. Asumsikan kita telah mendeklarasikan sebuah array float v[5], dan anggap elemen pertamanya berada pada lokasi 3000 di memori. Lalu kita deklarasikan sebuah variabel pointer *vPtr, ada dua cara untuk mengisi variabel pointer *vPtr dengan alamat dari elemen pertama array v, yaitu :

float *vPtr = v;
float *vPtr = &v[0];

Jika kita melakukan operasi aritmatika seperti

vPtr += 2;
dalam perhitungan aritmatika biasa, maka vPtr yang semula berisi 3000 menjadi 3000 + 2 = 3002, namun ini tidak berlaku pada pointer. Operasi aritmatika pada pointer di atas artinya adalah vPtr yang semula menunjuk pada v[0] sekarang menunjuk ke v[2]. Karena vPtr menunjuk alamat memori dari variabel v yang bertipe float, maka  vPtr sekarang berisi 3008 (3000 + 2 * 4).

Pointer pada Array
Pada array, pointer hanya perlu menunjuk pada alamat elemen pertama saja karena letak alamat array sudah berurutan pada memori.

Pointer pada Struct
Pointer dapat bertipe apa saja, bahkan tipe buatan kita sendiri.

Semoga bermanfaat!

BAB VI MENGENAL ARRAY BERDIMENSI BANYAK

Array berdimensi banyak adalah array yang memiliki lebih dari satu tipe indek atau lebih dari satu nomor subscript, misalnya memiliki dua, tiga dan seterusnya.

Pendefinisian Tipe Array Dalam C++

tipe_data nama_variabel_array[jumlah_elemen_baris][jumlah_elemen_kolom];

Contoh :
int matrik[3][4];

didefinisikan sebuah variabel array dimensi dua dengan nama matrik yang mempunyai 3 elemen baris dan 4 elemen kolom.

Penggambaran elemen array:

Operasi Pada Array
matrik[1][2] = 23;
artinya adalah masukan data 23 pada array matrik baris 1 dan kolom 2.


matrik[2][3] = matrik[1][2];
artinya adalah masukan data pada array matrik baris 2, kolom 3 dengan data yang ada pada array matrik baris 1, kolom 2.

Untuk menampilkan data :
cout<
cout<

Penjumlahan 2 Matrik pada C++
Contoh program menghitung penjumlahan dua matrik, syarat penjumlahan dua matrik adalah kedua matrik mempunyai ordo yang sama, jika 2 baris 2 kolom, maka lawan penjumlahan juga harus sama 2 baris 2 kolom.

Program :
#include <iostream.h>
#include <conio.h>
//c:www.gatewan.com 2014
void main()
{
int a[10][10], b[10][10], c[10][10];
int brs, klm;
clrscr();
cout<<"Masukan jumlah baris : ";
cin>>brs;
cout<<"Masukan jumlah kolom : ";
cin>>klm;
for(int i=0;i<brs;i++) //input matrik A
{
for(int j=0;j<klm;j++)
{
cout<<"Matrik A ["<<i<<"]["<<j<<"] = ";
cin>>a[i][j];
}
}

for(int i=0;i<brs;i++) //input matrik B
{
for(int j=0;j<klm;j++)
{
cout<<"Matrik B ["<<i<<"]["<<j<<"] = ";
cin>>b[i][j];
}
}
for(int i=0;i<brs;i++) //menjumlahkan matrik A dengan B
{
for(int j=0;j<klm;j++)
{
c[i][j]= a[i][j]+b[i][j];
}
}
clrscr();
cout<<"Matrik A"<<endl; //menampilkan matrik A
for(int i=0;i<brs;i++)
{
for(int j=0;j<klm;j++)
{
cout<<"Matrik A ["<<i<<"]["<<j<<"] = ";
cout<<a[i][j]<<" ";
}
cout<<endl;
}
cout<<"Matrik B"<<endl; //menampilkan matrik B
for(int i=0;i<brs;i++)
{
for(int j=0;j<klm;j++)
{
cout<<"Matrik B ["<<i<<"]["<<j<<"] = ";
cout<<b[i][j]<<" ";
}
cout<<endl;
}
cout<<"Matrik C"<<endl; //menampilkan matrik C
for(int i=0;i<brs;i++)
{
for(int j=0;j<klm;j++)
{
cout<<"Matrik C ["<<i<<"]["<<j<<"] = ";
cout<<c[i][j]<<" ";
}
cout<<endl;
}
getch();
}

View :

















BAB V Operasi Perulangan C++

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuEyrNUlaHozNTJiVPeNHf6hDd34GNFjsKQHKQDAGa4Yv1GIiqFAuqC-6Mc1DDqLl9EAHVnsPBMdRprIApAHYdnWzc1WgPXy-K54rgW-qKFNWa4MI_lc-n7ce3INygNvjpp_1bI7qQFdcY/s1600/

Pernyataan for
Perulangan yang pertama adalah for. 
Bentuk umum pernyataan forsebagai berikut :

  for( inisialisasi; syarat pengulangan; pengubah nilai pencacah )

Bila pernyataan didalam for lebih dari satu maka pernyataan-pernyataan
tersebut harus diletakan didalam tanda kurung.

  for  (inisialisasi; syarat pengulangan; pengubah nilai pencacah )
  {
     pernyataan / perintah;
     pernyataan / perintah;
     pernyataan / perintah;
  }


Di dalam Kondisi terdapat Inisialisasi, syarat perulangan, dan pengubah nilai pencacah. Inisialisasi merupakan bagian untuk memberi nilai awal untuk variabel tertentu. Syarat perulangan berisi kondisi apakah program berlanjut atau berhenti pada nilai tertentu.
Sedangkan Pengubah Nilai Pencacah berfungsi untuk menentukan kenaikan atau penurunan nilai.
Berikut contoh perintah for sederhana.
  /*--------------------------------------*/ 
  /*      Contoh Perintah  For                   */ 
  /*-------------------------------------*/ 
  #include <stdio.h> 
  #include <conio.h> 
  #include  <iostream.h> 
  main() 
  { 
       int nilai; 
       clrscr(); 
       for(nilai=1;nilai<=10;nilai++) 
       cout<<nilai; 
       getch(); 
  }

Nantinya hasil Output script diatas berupa keluaran angka 1-10 secara berurutan.
1 2 3 4 5 6 7 8 9 10
Contoh lain misalnya membuat Output berupa bilangan ganjil antara 1-10.
/*----------------------------------------------*/ 
/*  BILANGAN GANJIL  ANTARA 1-10   */ 
/*---------------------------------------------*/ 
#include <stdio.h> 
#include <conio.h> 
#include  <iostream.h> 
main() 

{ 
     int nilai; 
     clrscr(); 
     for(nilai=1;nilai<=10;nilai+=2) 
     cout<<nilai; 
     getch(); 
} 

Nanti bentuk keluarannya hanya bilangan-bilangan ganjil atara 1-10
1 3 5 7 9
Nested FOR 
Pernyataan nested - forPernyataaan Nested for adalah suatu perulangan for didalam perulangan
for yang lainnya. 
Bentuk umum pernyataan Nested for sebagai berikut :
for(kondisi 1) 
     { 
      for(Kondisi 2) 
        { 
          Pernyataan; 
       } 
    } 
Berikut contoh program sederhana menggunakan Nested for.
//Program Sederhana Dengan Nested FOR 
#include <stdio.h> 

#include <conio.h> 

#include  <iostream.h> 

main() 

{ 

     int x, y; 

     clrscr(); 

     for(x=1;x<=10;x++) 

          { 

          printf("\n"); 

          for(y=x;y<=10;y++) 

          cout<<x<<" "; 

         } 

     getch(); 

} 

Nanti hasil outputnya seperti dibaeah ini
1 1 1 1 1 1 1 1 1 1 
2 2 2 2 2 2 2 2 2 
3 3 3 3 3 3 3 3 
4 4 4 4 4 4 4 
5 5 5 5 5 5 
6 6 6 6 6 
7 7 7 7 
8 8 8 
9 9 
10

Pernyataan While 
Bentuk umum pernyataan While adalah
while(syarat) 
{ 
      Pernyataan/perintah; 
}
Berikut contoh program sederhana menampilkan bilangan ganjil antar 1-10dengan menggunakan While
//Program Sederhana Dengan While 
#include <stdio.h> 
#include <conio.h> 
#include  <iostream.h> 
main() 
{ 
   int nilai=1; 
   clrscr(); 
   while(nilai<=10) 
   { 
        cout<<nilai<<"  "; 
        nilai+=2; 
   } 
getch();  
} 

Hasil outputnya nanti seperti ini 
1 3 5 7 9

Pernyataan Do While 
Hampir sama dengan While, akan tetapi dalam Do While perintah perulangan akan diproses terlebih dahulu, pengecekkan syarat dilakukan dibelakang setelah proses.
Bentuk umum Do While adalah
do 
{ 
     Perintah/Pernyataan; 
} 
While(syarat);
Berikut contoh program sederhana menampilkan bilangan ganjil antara 1-10 dengan Do While
//Program Sederhana Dengan Perintah Do While

#include <stdio.h> 
#include <conio.h> 
#include  <iostream.h> 
main() 
{ 
int nilai=1; 
clrscr(); 
do 
     { 
          cout<<nilai<<"  "; 
          nilai+=2; 
     } 
while(nilai<=10); 
getch(); 
}