Wednesday 10 April 2013

Laporan Praktikum Algoritma Modul 10


 LAPORAN PRAKTIKUM
ALGORITMA PEMROGRAMAN
DAN STRUKTUR DATA
MODUL 10




Disusun oleh :
Nama          :  Ricky Rudianto
NIM            :  2012081127
Kelas           :  Teknik Informatika A





LABORATORIUM KOMPUTER
FAKULTAS ILMU KOMPUTER
UNIVERSITAS KUNINGAN
2012
MODUL 10

POINTER

“PEMBAHASAN”

Dasar Teori
Introduction
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.
Pengertian Pointer
Pada pertemuan kali ini, kita 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.
Deklarasi Pointer
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 pada 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
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.


Contoh program (untuk dicoba)


  • 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).

           
Contoh program (untuk dicoba)

PRAKTIKUM
Praktikum 1
1.    Tulis source code berikut ini :
#include <stdio.h>

Int main ( )
{
            Int i;
            Int *ia;
            I = 10;
            Ia = &i;
            Printf(“Alamat dari i adalah %p \n”, ia);
            Printf(“Nilai i adalah %d”, i);
            Printf(“Nilai dari pointer ia adalah %d \n”, *ia);
            *ia = 50;
            Printf(“Nilai i sekarang adalah %d \n”, i);
            Printf(“Alamat dari i adalah %p \n”, ia);
            Return 0;
}
Bahasa C++ :
Dikompile dan jalankan :
Untuk kompile pertama :
Untuk kompile kedua :
Dan yang selanjutnya pasti akan berbeda di dalam program pointer C++.
Praktikum 2
1.    Tulis source code berikut ini :
#include <stdio.h>

Int main( )
{
            Float nilai [3], *ptr;
           
            Nilai [0] = 220;
            Nilai [1] = 641;
            Nilai [2] = 53;

            Ptr = &nilai[0];

            Printf(“nilai %f di alamat %p \n”, *ptr, ptr);
            Printf(“nilai %f di alamat %p \n”, *(ptr+1), ptr+2);
            Printf(“nilai %f di alamat %p \n”, *(ptr+2), ptr+2);

            Return 0;
}
Bahasa C++ :
Dikompile dan jalankan :
Untuk kompile yang pertama :
Untuk kompile yang kedua :
Dan yang selanjutnya pasti akan berbeda di dalam program pointer C++.


TUGAS MODUL 10

Soal !
1.    Buatlah program menggunakan pointer dan array (array pointer). Output bebas
2.    Buatlah program menggunakan pointer dan struktur (struct pointer). Output bebas

Penyelesaian !
No. 1
Tulis source code berikut ini :
#include <stdio.h>

int main()
{
                        char nama [] = "ricky rudianto";
                        char *p;

                        p = nama;
                        while(*p!=NULL)
                        {
                                                printf("%c", *p);
                                                p++;
                        }
                        printf("\n");

                        p = &nama [0];
                        while(*p!=NULL)
                        {
                                                printf("%c", *p);
                                                p++;
                        }
                        printf("\n");
                        return 0;
}
Bahasa C++ :
Dikompile dan jalankan :
Pembahasan :
Pada array, pointer hanya perlu menunjuk pada alamat elemen pertama saja karena letak alamat array sudah berurutan pada memori.

No. 2
Tulis source code berikut ini :
#include <stdio.h>

typedef struct
{
                        int nim;
                        float ipk;
} Mahasiswa;

Mahasiswa m;
Mahasiswa *p = &m;

int main()
{
                        //struct biasa
                        m.nim=4153;
                        m.ipk=3.80;
                        printf("nim = %d \n", m.nim);
                        printf("ipk = %f \n", m.ipk);
                        //struct pointer
                        p->ipk = 3.02;
                        p->nim = 4188;
                        printf("nim = %d \n", p->nim);
                        printf("ipk = %f \n", p->ipk);
                        //mengacu pada variabel aslinya
                        printf("nim = %d \n", m.nim);
                        printf("ipk = %f \n", m.ipk);
                        return 0;
}
Bahasa C++ :
Dikompile dan jalankan :
Pembahasan :
Pointer dapat bertipe apa saja, bahkan tipe buatan kita sendiri.
KESIMPULAN

Pointer (variabel petunjuk) 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 di dukung oleh bahasa C.