Praktikum Struktur Data Modul 7

TUGAS PENYERAHAN LAPORAN PRAKTIKUM STRUKTUR DATA              















FAKULTAS ILMU KOMPUTER
PRODI SISTEM INFORMASI
UNIVERSITAS KUNINGAN



Disusun Oleh:
Riqi Tricahyo(20160910064)
SI 2016 B

 



Modul 7 Pointer







Tujuan Praktikum :
1.      Dapat mengenal dan memahami struktur data POINTER
2.      Dapat mengimplementasikan POINTER ke dalam C++
Dasar Teori :
Pointer dalam bahasa Indonesia berarti penunjuk. Pointer merupakan variabel yang menyimpan atau menunjuk suatu alamat memori dan bukan menyimpan suatu nilai. Dengan demikian pointer tidak berhubungan langsung dengan data yang actual, dengan kata lain variabel pointer hanya berisi alamat variabel lain yang berisi data tertentu.
Secara umum variabel pointer dapat di deklarasikan sebagai berikut :
Tipe data *nama_variabel_pointer;
pointer merupakan variabel level rendah yang dapat digunakan oleh tipe data charakter, integer, float, double atau single bahkan tipe data lain yang didukung oleh bahasa C.
 
 
PRAKTIKUM 1 

Strudi Kasus
Buatlah program yang dapat memindahkan isi variabel awal menuju kevariabel tujuan yang ditunjuk serta menampilkan alamat alokasi memory sebelum dipindahkan kevariabel tujuan.

Syntaknya 
#include<iostream.h>
#include<conio.h>
void main()
{         
int x, y;
int *px; 
clrscr();
x = 87;
px = &x;
y = *px;
cout<<"Alamat x pd Memori = "<<&x<<endl;
cout<<"Isi px = "<<px<<endl;
cout<<"Isi x = "<<x<<endl;
cout<<"Nilai yang ditunjuk oleh px = "<<*px<<endl; cout<<"Alamat y pd Memori = "<<&y<<endl;
cout<<"Nilai y = "<<y<<endl;
getch();
}
 
 Hasilnya
 

Analisisnya 

 
#include<iostream.h>
#include<conio.h>
di program ini menggunakan dua buah file header dimana ada iostream.h dan juga program ini menggunakan conio.h


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 

dimana int x, y; // x dan y bertipe int adalah deklarasi variabel bertipe integer, dengan variabel x dan y dimana yaitu mencadangkan tempat dimemori yang hanya dapat di isi data bertipe integer dan diberi nama x dan y. Perintah kedua dimana int *px; // px pointer yang menunjuk objek adalah deklarasi sebuah pointer dengan nama px pointer yang menunjuk objek. Terdapat tanda asterik (*)  di depan nama pointer, jadi itulah tanda bahwa variabel yang dideklarasikan adalah “pointer”, dimana pointer adalah sebuah jenis variabel yang istimewa sehingga diberi tanda bintang (*). Perintah ketiga dimana x = 87; adalah mengisi memori yang bernama x dan y dengan niali 87. Perintah yang selanjutnya dimana px = &x; // px berisi alamat dari x adalah mengisi pointer x dan y dengan Alamat dari variabel yang bernama x dan y , alamat ini ditandai dengan tanda “&” . Jadi isi dari pointer tersebut adalah alamat dari variabel x dan y. Kemudian perintah dimana y = *px; // y berisi nilai yang ditunjuk px adalah deklarasi sebuah pointer dengan nama y berisi nilai yang ditunjuk px. 

cout<<"Alamat x pd Memori = "<<&x<<endl;
cout<<"Isi px = "<<px<<endl;
cout<<"Isi x = "<<x<<endl;
cout<<"Nilai yang ditunjuk oleh px = "<<*px<<endl; cout<<"Alamat y pd Memori = "<<&y<<endl;
cout<<"Nilai y = "<<y<<endl;           
getch();
}

Yang berarti bahwa penggalan script diatas adalah untuk menampilkan output pada saat proses running program, dimana cout untuk pengluaran nilai yang akan diketahui oleh alamat x pada memori dan <<&x<<endl sebagai pemasukan nilai dari x tersebut. Setelah itu cout untuk pengeluaran isi px dan <<px<<endl sebagai pemasukan nilai dari px itu, kemudian cout isi x sebagai pengeluaran dan <<x<<endl sebagai pemasukan nilai dari x, dan juga cout untuk pengeluaran nilai yang ditunjuk oleh px untuk pemasukan nilai dari px, kemudian cout untuk penegeluaran alamat y pada memori dan <<&y<<endl untuk pemasukan nilai y, dan terakhir cout untuk penngeluaran nilai y serta <<y<<endl untuk pemasukan nilai dari y. Sehingga akan dihasilkan hasil running program seperti di atas.

PRAKTIKUM 2

Studi Kasus
Terdapat sebuah array yang memiliki hanya satu elemen yaitu 5 dan tempatkan pada indeks ke 0 dalam array, sementara alamat indeks selebihnya bernilai 0, buatlah program yang dapat mengisi alamat indeks yang lain melalui nilai elemen indeks ke 0 (contoh penyelesian kasus diatas pada program dibawah ini bersifat statis) 

Syntaknya 

#include<iostream.h>
#include<conio.h>
int main()
{
int x[5], *p, k; clrscr();
p = x;
x[0] = 5; =5
x[2] = *p + 2;
x[3] = *(p+1)-3;
x[4] = *(x + 2);
cout<<"Array Stelah diisi = "<<endl; cout<<endl;
for(k=0; k<5; k++)    
{
cout<<"x["<<k<<"] = "<<x[k]<<endl;
}
getch();
return 0;
}
 
 Hasilnya

 



Analisisnya

int x[5], *p, k; clrscr();      
p = x;
x[0] = 5; // x[0] diisi dengan 5 sehingga x[0] = 5 x[1] = x[0]; // x[1] diisi dengan x[0] sehingga x[1] =5
x[2] = *p + 2; // x[2] diisi dengan x[0] + 2 sehingga x[2] = 7;
x[3] = *(p+1)-3; // x[3] diisi dengan x[1] - 3 sehingga x[3] = 2;
x[4] = *(x + 2); // x[4] diisi dengan x[2] sehingga x[4] =7;

dimana int x[5], *p, k; adalah pendeklarasian variabel yang bertipe integer, dengan variabel x yang hanya memiliki elemen yaitu 5 dan ditempatkan pada indeks ke-0 dalam array, dan sementara alamat indeks selebihnya adalah 0. Dan *p,k; adalah deklarasi dari sebuah pointer. Terdapat tanda asterik (*)  di depan nama pointer, jadi itulah tanda bahwa variabel yang dideklarasikan adalah “pointer”, dimana pointer adalah sebuah jenis variabel yang istimewa sehingga diberi tanda bintang (*).  Perintah kedua dimana p = x; adalah mengisi memori yang bernama p dengan nilai dari x. Perintah selanjutnya dimana x[0] = 5; // x[0] diisi dengan 5 sehingga x[0] = 5 x[1] = x[0]; // x[1] diisi dengan x[0] sehingga x[1] =5 adalah deklarasi dari sebuah pointer dengan mengisi x[0] yaitu dengan sama dengan 5, x[0] itu diisi dengan 5 sehingga x[0]=5, dan juga dimana x[1] = x[0] maka jika x[1] itu diisi dengan x[0] seingga x[1] itu akan sama dengan x[0] yaitu 5. Perintah yang selanjutnya dimana x[2] = *p + 2; // x[2] diisi dengan x[0] + 2 sehingga x[2] = 7; adalah deklarasi dari sebuah pointer dengan nama x[2] dimana x[2] ini akan diproses dengan rumus *p+2; dan x[2] ini akan diisi dengan x[0]=2 sehingga x[2]=7. Begitupun dengan  x[3] = *(p+1)-3; // x[3] diisi dengan x[1] - 3 sehingga x[3] = 2; adalah pendeklarasian pointer dengan nama x[3] dimana x[3] ini akan dijalankan dengan rumus *(p+1)-3, dan x[3] ini akan diisi dengan x[1]-3 sehingga x[3]=2. Dan untuk x[4] = *(x + 2); // x[4] diisi dengan x[2] sehingga x[4] =7; ini yaitu deklarasi dari pointer dengan nama x[4] dimana x[4] ini akan diproses dengan rumus *(x+2), dan x[4] ini akan diisi dengan x[2] sehingga x[4]=7;  

                                         cout<<"Array Stelah diisi = "<<endl; cout<<endl;
for(k=0; k<5; k++)         
{    
cout<<"x["<<k<<"] = "<<x[k]<<endl;
}

 yaitu untuk pengeluaran nilai-nilai dari array yang setelah diisi. Digunakan juga instruksi pengulangan FOR dimana  for(k=0; k<5; k++), yaitu dengan k=0 itu berarti nilai awal dari 0, k<5; ini dimana sebagai pembatas nilai akhir, dan k++ itu akan ditambahkan sampai nilai k itu mencapai nilai akhir dari k. Setelah itu cout<<”x” untuk pengeluaran dari nilai x dan “ <<k<<” itu sebgai pemasukan nilai dari k. Sehingga akan dihasilkanlah hasil running program seperti di atas.


PRAKTIKUM 3 



Syntaknya

#include <stdio.h>
void tambahSepuluh(int *);
void ubahKarakter(char *);
int main()                                           
{
int bilangan = 4;
char sesuatu = 's';
printf("Bilangan sebelum fungsi dipanggil: %d \n", bilangan);
printf("Nilai sesuatu sebelum fungsi dipanggil: %c \n\n", sesuatu);
tambahSepuluh(&bilangan);
ubahKarakter(&sesuatu);
printf("Bilangan setelah fungsi dipanggil: %d \n", bilangan);
printf("Nilai sesuatu setelah fungsi dipanggil: %c \n", sesuatu);
return 0;
}
void tambahSepuluh(int *bil) {
*bil = *bil + 10;
}
void ubahKarakter(char *kar) {
char karakter = 'H';
*kar = karakter;  }

Hasilnya

 

Analisisnya 

int main()
{
int bilangan = 4;
char sesuatu = 's';
 
 Yang berarti bahwa inisiasi yang digunakan adalah int main(); dimana dengan mendeklarasikan inisiasi variabel yang bertipe integer dengan variabel yaitu bilangan 4. Dan selanjutnya adalah untuk char sesuatu=’s’ dimana kharakter dari niali sesuatu yang sebelum dan setelah fungsi dipanggil yaitu dengan ‘s’. 

printf("Bilangan sebelum fungsi dipanggil: %d \n", bilangan);
printf("Nilai sesuatu sebelum fungsi dipanggil: %c \n\n", sesuatu);
tambahSepuluh(&bilangan);
ubahKarakter(&sesuatu);
printf("Bilangan setelah fungsi dipanggil: %d \n", bilangan);
printf("Nilai sesuatu setelah fungsi dipanggil: %c \n", sesuatu);

  penggalan diatas adalah untuk pemanggilan dari printf untuk hasil bilangan sebelum fungsi dipanggil dengan pemanggilan oleh %d karena tipe data yang digunkan adalah integer serta untuk pemasukan nilai bilangan. Setelah itu juga untuk pemanggilan dari nilai sesuatu sebelum fungsi dipanggil yaitu dengan %c karena karakter serta untuk pemasukan dari sesuatu. Kemudian untuk tambahSepuluh(&bilangan); dimana mengisi pointer bilangan dengan alamat dari variabel yang bernama bilangan. Begitu pun sama untuk ubahKarakter(&sesuatu); dimana mengisi pointer sesuatu karakter dengan alamat dari variabel sesuatu bilangan itu. Setelah itu untuk pemanggilan bilangan setelah fungsi dipanggil dengan oleh %d karena tipe data integer dan untuk pemasukan nilai bilangan setelah bilangan. Juga untuk pemanggilan dari nilai sesuatu setelah fungsi dipanggil dengan %c Karen karakter serta untuk pemasukan sesuatu karakter.

                                        void tambahSepuluh(int *bil) {
*bil = *bil + 10;
}
void ubahKarakter(char *kar) {
char karakter = 'H';
*kar = karakter;  }


 Adalah untuk pendeklarasian inisiasi variabel yang bertipe integer untuk sebuah bilangan dimana dengan rumus *bil=*bil+10; yang berarti bahwa bilangan sebelum fungsi dipanggil adalah 4 dan bilangan setelah dipanggil yaitu bilangan sebelum fungsi dipanggil akan ditambahkan dengan 10 maka hasilnya bilangan setelah fungsi dipanggil adalah 14. Kemudian berlaku juga untuk pengubahan karakter dimana nilai sesuatu sebelum dipanggil adalah ‘S’ dan diproses dalam ubah karakter yaitu nilai sesuatu setelah fungsi dipanggil adalah ‘H’. Sehingga akan dihasilkan hasil running program seperti diatas.




LATIHAN 1

 Studi Kasus
 Dengan memasukan nilai integer sebanyak 5 nilai dan melalui variabel pointer bagaimana agar dapat mengetahui elemen tersebut akan menempati di lokasi memory berapa program berjalan secara statis hanya sebanyak 5 buah nilai integer.

Syntaknya

#include<stdio.h>
#include<iostream.h>
#include<conio.h>
main()                       
{
int i;
int nilai[50];
int *trnilai;
trnilai = nilai;
for(i=1;i<6;i++)
{
cout<<"Masukan Nilai Ke-"<<i<<": ";
cin>>nilai[i];
}
cout<<endl;
cout<<"Pengaksesan Elemen Array Lewat";
cout<<"Pointer";
cout<<endl<<endl;
for(i = 1; i <= 5; i++)
{
cout<<"Elemen "<<i<<" Nilai "<<nilai[i];
cout<<", Menempati Alamat Memory : "<<trnilai[i]<<endl;;
cout<<endl;
}
getch();
return 0;
}

Hasilnya

 
 Analisisnya 


int i;                                                                
int nilai[50];
int *trnilai;      
trnilai = nilai;
for(i=1;i<6;i++)

 script diatas berarti bahwa untuk deklarasi inisiasi variabel yang bertipe data integer dengan variabel nilai yaitu maksimal nilai-nilai pada sejumlah 5 elemen itu maksimal 50 bilangan. Dimana trnilai = nilai; adalah deklarasi sebuah pointer dari trnilai yang ditunjukan untuk variabel pada suatu nilai. Dan digunkanlah instruksi pengulangan FOR dimana for(i=1;i<6;i++) berarti i=1; yaitu nilai awal dari 1, i<6; yaitu pembatas nilai akhir, i++; itu akan ditambah sampai batasan dari niali I tersebut.


cout<<"Masukan Nilai Ke-"<<i<<": ";
cin>>nilai[i];
}                   
cout<<endl;
cout<<"Pengaksesan Elemen Array Lewat";
cout<<"Pointer";
cout<<endl<<endl;
for(i = 1; i <= 5; i++)
{
cout<<"Elemen "<<i<<" Nilai "<<nilai[i];
cout<<", Menempati Alamat Memory : "<<trnilai[i]<<endl;;
cout<<endl;
}

 Dimana cout untuk penegluaran dari masukan nilai ke- berapa sampai nilainya sejumlah 5 nilai, yang akan diproses oleh cin sebagai pemasukan dari nilai itu. Selanjutnya untuk pengeluaran judul program yaitu Pengaksesan Elemen Array Lewat Pointer. Kemudian digunakan instruksi pengulangan FOR lagi dimana for(i = 1; i <= 5; i++) yaitu bahwa i=1 itu sebagai nilai awal dari 1, i<=5 itu sebagai pembatas nilai akhir, i++ dimana nilai i akan ditambah sampai batasan dari nilai i. Lalu, cout<<"Elemen "<<i<<" Nilai "<<nilai[i]; berarti bahwa Elemen ke berapa dengan nilai berapa yang di inputkannya, serta cout<<", Menempati Alamat Memory : "<<trnilai[i]<<endl;; untuk menempati alamat array dalam memory nilai berapa, seperti contoh ketika masukan nilai ke-1 = 12 maka pengaksesan elemen array lewat pointer maka elemen 1 nilai 12, menempati alamat memory : 12. Sehingga akan terlihat jelas pada hasil running dalam proram ini.



LATIHAN 2

Studi Kasus
Dengan memasukan nilai integer sebanyak N nilai dan melalui variabel pointer bagaimana agar dapat mengetahui elemen tersebut akan menempati di lokasi memory berapa program berjalan secara dinamis sebanyak N buah nilai integer

Syntaknya

#include<stdio.h>
#include<iostream.h>
#include<conio.h>
main()
{                         
int i,N;
int nilai[50];
int *trnilai;
trnilai = nilai;
cout<<"Berapa Anda Ingin Memasukan bilangan?";
cin>>N;
cout<<endl<<endl;
for(i=1;i<N+1;i++)
{
cout<<"Masukan Nilai Ke-"<<i<<": ";
cin>>nilai[i];
}
 
cout<<endl;
cout<<"Pengaksesan Elemen Array Lewat";
cout<<"Pointer";
cout<<endl<<endl;
for(i = 1; i < N+1; i++)
{
cout<<"Elemen "<<i<<" Nilai "<<nilai[i];
cout<<", Menempati Alamat Memory : "<<trnilai[i];
cout<<endl;
}
getch();
return 0;
}

Hasilnya


Analisinya

Antara latihan 1 dengan latihan 2 itu tidak jauh berbeda dimana hanya saja di latihan 2 kita menentukan berapa banyak elemen yang kita mau, sedangkan di latihan ke 1 itu sudah di tentukan banyak elemennya.

int i,N;
int nilai[50];
int *trnilai;
trnilai = nilai;
cout<<"Berapa Anda Ingin Memasukan bilangan?";
cin>>N;
cout<<endl<<endl;
for(i=1;i<N+1;i++)

Akan berarti bahwa untuk pendeklarasian inisiasi variabel yang bertipe data integer dengan variabel nilai yaitu maksimal nilai-nilai pada sejumlah N elemen itu maksimal 50 bilangan. Dimana int *trnilai; itu adalah tipe data integer dengan variabel trnilai. Dan dimana trnilai = nilai; adalah deklarasi sebuah pointer dari trnilai yang ditunjukan untuk variabel pada suatu nilai. Dan untuk cout sebagai penegluaran dari Berapa Anda ingin memasukan bilangan ? yang akan diproses oleh cin>>N dimana kita diminta untuk memasukan berapa saja bilangan yang akan di inputkan dalam proses hasil running. Dan digunkanlah instruksi pengulangan FOR dimana for(i=1;i<N;i++) berarti i=1; yaitu nilai awal dari 1, i<N; yaitu pembatas nilai akhir, i++; itu akan ditambah sampai batasan dari niali I tersebut.





















Komentar

Postingan populer dari blog ini

Modul 1 Praktikum Struktur Data

Modul 3 Praktikum Struktur Data

Modul 5 Praktikum Struktur Data