Anda di halaman 1dari 8

PRAKTIKUM 27

KONSEP PEMROGRAMAN

LAPORAN RESMI
POINTER 4

Oleh :
I Gede Raka Sadiantara
D3 Teknik Informatika A
2103191002

POLITEKNIK ELEKTRONIKA NEGERI SURABAYA


TAHUN AJARAN
2019/2020
Untuk setiap program di bawah ini,
– gambarkan ilustrasi alokasi memori dari setiap baris pernyataan yang diproses
– perkirakan hasil eksekusinya
1. Listing Program
#include <stdio.h>
void naikkan_nilai(int *x, int *y);

main() {
int a = 3;
int b = 7;
printf("SEMULA : a = %d b = %d\n", a, b);

naikkan_nilai(&a, &b);
printf("KINI : a = %d b = %d\n", a, b);
}
void naikkan_nilai(int *x, int *y){
*x = *x + 2;
*y = *y + 2;
}

Ilustrasi Alokasi Memori


Alamat Nilai
3
a 00FF761
5
7
b 00CF452
9
00FF761
x 00OU3
5
00CF452
y 00YT4
9

Perkiraan Output
SEMULA : a = 3 b=7
KINI : a = 5 b=9
2. Listing Program
#include <stdio.h>
char *nama_bulan(int n);

main(){
int bl;

printf("Bulan 1..12 : ");


scanf("%d", &bl);
printf("Bulan ke-%d adalah %s\n", bl, nama_bulan(bl));
}

char *nama_bulan(int n){


static char *bulan[] = {
"Ngawur",
"Januari",
"Februari",
"Maret",
"April",
"Mei",
"Juni",
"Juli",
"Agustus",
"September",
"Oktober",
"November",
"Desember"
};
return ((n<1||n>12) ? bulan[0] : bulan[n]);
}

Ilustrasi Alokasi Memori


Alamat Nilai
b1 001 1 Januari
002 2 Februari
003 3 Maret
004 4 April
005 5 Mei
006 6 Juni
007 7 Juli
008 8 Agustus
009 9 September
010 10 Oktober
011 11 November
012 12 Desember
bulan[0] 013 Ngawur
bulan[1] 014 Januari
bulan[2] 015 Februari
bulan[3] 016 Maret
bulan[4] 017 April
bulan[5] 018 Mei
bulan[6] 019 Juni
bulan[7] 020 Juli
bulan[8] 021 Agustus
bulan[9] 022 September
bulan[10] 023 Oktober
bulan[11] 024 November
bulan[12] 025 Desember
Perkiraan Output
Perkiraan 1: Bulan 1..12 : 4
Bulan ke-4 adalah April
Perkiraan 2: Bulan 1..12 : 10
Bulan ke-10 adalah Oktober
...
dst

3. Listing Program

#include <stdio.h>

char strA[80] = "A string to be used for demonstration";


char strB[80];

main(){
char *pA, *pB;

puts(strA);
pA = strA;
puts(pA);
pB = strB;
putchar('\n');

while(*pA != '\0')
*pB++ = *pA++;

*pB = '\0';
puts(strB);
}

Ilustrasi Alokasi Memori

Alamat Nilai
A string to be used for
strA 00GF981
demonstration
pA 00RE762 00GF81
pB 00AE903 00WE874
strB 00WE874 00GF981

Output
A string to be used for demonstration
A string to be used for demonstration

A string to be used for demonstration

Analisa
Terdapat string yang berindex maximal 80,, string tersebut bernama strA yang
berisi char“A string to be used for demonstration”. Selain itu, Terdapat string yang juga
memiliki index max 80, bernama strB namun belum berisi nilai char apa-apa. Kemudian
masuk ke fungsi utama, dimana di deklarasikan pointer pA dan pointer pB merupakan
sebuah char. Setalahnya, dicetaklah strA, diketahui pA bernilai sama dengan strA,
kemudian cetak pA. pB nilainya sama dengan strB, namun strB belum berisi nilai char
apapun. Oleh karena itu terdapat kondisi while. Dalam kondisi pA tidak sama dengan
nul, maka *pB++=*pA++. Dimana yang artinya sama dengan strB[0]=strA[0] dan
seterusnya sampai *pB nilainya nul. Kemudian dicetak strB, dimana nilai strB sama
dengan strA

4. Listing Program

#include <stdio.h>
char *my_strcpy(char *, char *);

main(){
char strA[80]="A string to be used for demonstration";
char strB[80];

my_strcpy(strB, strA);
puts(strB);
}
char *my_strcpy(char *destination, char *source) {
char *p = destination;
while (*source != '\0')
*p++ = *source++;
*p = '\0';
return destination;
}

Ilustrasi Alokasi Memori

Alamat Nilai
strA 00JK641 A string to be used for demonstration
destination 00CV463 00TV782
p 00KG894 00CV463
source 00UI565 00JK641
strB 00TV782 00CV463

Perkiraan Output

A string to be used for demonstration

Analisa
Pada program terdapat fungsi yang bertipe char dan fungsi tersebut bernama
my_strcpy. Fungsi tersebut merupakan pointer yang menunjuk ke strB serta strA. Dalam
fungsi main diketahui terdapat string yang indexnya max 80, dan string tersebut bernama
strA dimana nilai char dari string tersebut adalah “A string to be used for demonstration”
dan terdapat strB yang juga diketahui index max nya adalah 80 tetapi tidak diketahui
nilainya. Kemudian dipanggil fungsi my_strcpy, didalam fungsi tersebut berjalan proses
pendeklarasikan bahwa pointer p menunjuk nilai destination(dimana destination
menunjuk strB). Kemudian terdapat kondisi, apabila source tidak sama dengan nul
(dimana source menunjuk nilai strA) maka P indeks ke 0 sama dengan source indeks ke
0, dan indeks terus ditambah sampai nilai p adalah nul. Kemudian yang direturn adalah
nilai dari destination sehingga di fungsi utama dicetak strB yaitu destination. Yang mana
hasilnya sama dengan strA.

5. Listing Program

char *my_strcpy(char dest[], char source[]){


int i = 0;
while (source[i] != '\0')
{
dest[i] = source[i];
i++;
}
dest[i] = '\0';
return dest;
}

Ilustrasi Alokasi Memori

Alamat Nilai
strA 00FF871 A string to be used for demonstration

strB 00FF342 00FF#$2


dest[i] 00FF873 00FF565

Source[i] 00FF565 00FF871


0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
i 00FF346 15 16 17 18 19 20 21 22 23 24 25 26
27 28 29 30 31 32 33 34 35 36 37

Output
strA = A string to be used for demonstration
strB = A string to be used for demonstration

Analisa
Pada program tersebut terdapat fungsi my_strcpy yang bertipe char dan
merupakan pointer. Dengan string dest menunjuk string strB, dan source menunjuk strA.
Pada fungsi utama telah diketahui nilai char dari strA adalah A string to be used for
demonstration. Kemudian nilai strB belum diketahui, dan memanggil fungsi my_strcpy.
Dalam program ini fungsi my_strcpy berbeda dengan program nomor 5, perbedaannya adalah
fungsi ini menggunakan looping indeks tanpa pointer.. jika nomor 5 menggunakan increament
pointer. Dalam fungsi ini prosesnya adalah nilai i awal diketahui 0, kemudian terdapat kondisi
jika source indeks ke I tidak sama dengan nul, maka akan dijalankan dest indeks ke i sama
dengan source indeks ke i. kemudian i di increament. Proses tersebut akan terus berjalan
sampai dest indeks ke i tidak sama dengan nul. Kemudian nilai dest di return dan masuk dalam
fungsi utama yaitu strB. Oleh karena itu yang dicetak adalah strB dan nilainya sama persis
seperti strA
6. Listing Program

#include <stdio.h>
#include <stdlib.h>
int rotasi(int *, int *, int *);

int main()
{
printf("Rotasi Program\n");
int a,b,c, hasil;
printf("Masukkan nilai 3 bilangan pisahkan dg spasi : ");
scanf("%d %d %d", &a, &b, &c);
printf("\nSebelum rotasi a=%d, b=%d, c=%d\n", a, b, c);
rotasi(&a,&b,&c);
printf("\nSetelah rotasi a=%d, b=%d, c=%d\n\n", a, b, c);
return 0;
}
int rotasi(int *x,int *y,int *z)
{
int temp;
temp=*x;
*x=*y;
*y=*z;
*z=temp;
}

Ilustrasi Alokasi Memori

Alamat Nilai
a 001 4 5

b 002 5 6
c 003 6 4
x 004 001 002
y 005 002 003
z 006 003 001
temp 007 001

Output
Analisa
Program diatas menggunakan pointer sebagai parameter dalam fungsi. Terlihat yang
dikirim pada parameter aktual di fungsi rotasi() adalah alamat dari masing-masing variabel.
Selanjutnya alamat dari parameter aktual tadi diterima pada parameter formal dengan
variabel pointer. Dengan begitu, di dalam fungsi dapat dilakukan perpindahan nilai variabel
dengan bantuan satu variabel penampung.

Kesimpulan
• Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi : Pointer
sebagai parameter fungsi dan Pointer sebagai keluaran fungsi.
• Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu variabel
internal dapat diubah oleh fungsi yang dipanggil.
• Penerapan pointer sebagai sebagai keluaran fungsi misalnya, suatu fungsi
menghasilkan keluaran berupa pointer yang menunjuk ke string/array.

Anda mungkin juga menyukai