A. TUJUAN PEMBELAJARAN
1. Memahami penggunaan Struktur pada pointer (pointer to stuct)
B. DASAR TEORI
Jika sebuah struktur mengandung banyak field dan diputuskan bahwa keseluruhan
field-nya akan diubah oleh fungsi, maka cara yang efisien adalah dengan melewatkan
(passing) alamat dari struktur. Dengan demikian pada pendefinisian fungsi, parameter
formalnya berupa pointer yang menunjuk ke struktur.
Masalah pointer ke struktur dapat diterapkan dalam program sebelumnya.
Argumen dari fungsi tukar_xy() dapat disederhanakan menjadi satu argumen saja,
yakni sebagai berikut :
void tukar_xy(struct koordinat *pos_xy)
{
int z;
z = (*pos_xy).x;
(*pos_xy).x = (*pos_xy).y;
(*pos_xy).y = z;
}
Pada definisi fungsi di atas,
struct koordinat *pos_xy
menyatakan bahwa pos_xy adalah pointer yang menunjuk ke obyek bertipe struktur
koordinat. Adapun penulisan :
(*pos_xy).x
menyatakan : elemen bernama x yang ditunjuk oleh pointer pos_xy
#include <stdio.h>
struct koordinat
{
int x;
int y;
};
void tukar_xy(struct koordinat *);
main(
{
struct koordinat posisi;
printf("Masukkan koordinat posisi (x, y) : ");
scanf("%d, %d", &posisi.x, &posisi.y);
printf("x, y semula = %d, %d\n", posisi.x,posisi.y);
tukar_xy(&posisi);
printf("x,y sekarang= %d, %d\n", posisi.x,posisi.y);
}
void tukar_xy(struct koordinat *pos_xy)
{
int z;
z = (*pos_xy).x;
(*pos_xy).x = (*pos_xy).y;
(*pos_xy).y = z;
}
Contoh eksekusi :
Masukkan koordinat posisi (x, y) : 34, 21
x, y semula = 34, 21
x, y sekarang = 21, 34
Bentuk semacam :
(*pos_xy).x
dapat ditulis dengan bentuk lain menjadi
pos_xy->x
Dalam C operator -> (berupa tanda minus - diikuti dengan tanda lebih dari >) disebut
sebagai operator panah. Dengan menggunakan operator panah, maka fungsi
tukar_xy() dalam program posisi2.c dapat ditulis menjadi
void tukar_xy(struct koordinat *pos_xy)
{
int z;
z = pos_xy->x;
pos_xy->x = pos_xy->y;
pos_xy->y = z;
}
C. PERCOBAAN
1. Untuk semua program yang ada di modul teori Struktur 2 :
o Ketikkan kembali program-program tsb
o Jalankan programnya
o Analisis & buatlah kesimpulan terhadap program-program tsb
a. Listing program
#include <stdio.h>
#include <stdlib.h>
struct koordinat
{
int x;
int y;
};
void tukar_xy(struct koordinat *);
int main()
{
struct koordinat posisi;
tukar_xy(&posisi);
z = (*pos_xy).x;
(*pos_xy).x = (*pos_xy).y;
(*pos_xy).y = z;
}
b. Capture
2. Dengan menggunakan typedef, buatlah tipe data struct untuk menyimpan informasi
pegawai (misal tipe pegawai) berupa : no ID, nama, tgl lahir, jenis kelamin (L/P)
dan gaji/bulan.
o di main() deklarasikan sebuah var bertipe array of pegawai (missal
emp[])
o panggil fungsi input() untuk memasukkan data-datanya dengan
pengiriman parameter secara pass by reference
o panggil fungsi tampil() untuk menampilkan semua data yang telah
o diinputkan dengan pengiriman parameter secara pass by reference
Petunjuk :
o Untuk no id, gunakan auto increment (tanpa input) perhatikan contoh tampilan
o Jika diperlukan, gunakan fungsi strcpy() dari <string.h>
o Contoh input bisa dilihat pada gambar 31.1 dengan output pada gambar 31.2
a. Listing program
#include <stdio.h>
#include <stdlib.h>
#define MAX 35
struct dob
{
int day, month, year;
};
struct data
{
struct dob birthday;
char name[MAX];
char gender;
int id;
float salary;
};
typedef struct data karyawan;
void input(karyawan *);
void tampil(karyawan *);
int jml_data;
void title_program();
int main()
{
karyawan data[MAX];
title_program();
input(data);
tampil(data);
return 0;
}
void input(karyawan *data)
{
int i;
#define MAX 35
void title_program();
struct data{
char nama[MAX];
float n_tugas, n_uts, n_uas;
};
typedef struct data mahasiswa;
void input(mahasiswa *);
void tampil(mahasiswa *);
int jml_mhs;
int main()
{
mahasiswa nilai[MAX];
title_program();
input(nilai);
tampil(nilai);
return 0;
}
void title_program()
{
puts("\t MENGHITUNG NILAI AKHIR");
puts("\tMATA KULIAH KONSEP PEMROGRAMAN");
puts("");
}
void input(mahasiswa *nilai)
{
int i;
printf("\n\t\t\tDAFTAR NILAI\n");
printf("\t\tMATAKULIAH KONSEP PEMROGRAMAN\n");
printf("=========================================================
====\n");
printf("No\tNama\t\tTugas\tUTS\tUAS\tAkhir\tGrade\n");
printf("=========================================================
====");
for(j=0; j<jml_mhs; j++)
{
akhir=(0.2*(*nilai).n_tugas)+(0.4*(*nilai).n_uts)+(0.4*(*nilai).n
_uas);
if(akhir>=80)
grade='A';
else if((akhir<80)&&(akhir>=70))
grade='B';
else if((akhir<70)&&(akhir>=60))
grade='C';
else if((akhir<60)&&(akhir>=50))
grade='D';
else if(akhir<50)
grade='F';
else
grade=0;
printf("\n%d\t%s\t%2.0f\t%2.0f\t%2.0f\t%0.2f\t%c", j+1,
(*nilai).nama, (*nilai).n_tugas, (*nilai).n_uts, (*nilai).n_uas,
akhir, grade);
nilai++;
}
printf("\n=======================================================
======");
printf("\nTotal Mahasiswa\t= %d\n", jml_mhs);
}
b. Capture
#define MAX 35
void title_program();
struct data{
char nama[MAX];
float n_tugas, n_uts, n_uas;
};
struct maksimal
{
char nama[MAX];
float nilaimaks;
};
typedef struct data mahasiswa;
void input(mahasiswa *);
void tampil(mahasiswa *);
int jml_mhs;
int main()
{
mahasiswa nilai[MAX];
title_program();
input(nilai);
tampil(nilai);
return 0;
}
void title_program()
{
puts("\t MENGHITUNG NILAI AKHIR");
puts("\tMATA KULIAH KONSEP PEMROGRAMAN");
puts("");
}
void input(mahasiswa *nilai)
{
int i;
printf("\n\t\t\tDAFTAR NILAI\n");
printf("\t\tMATAKULIAH KONSEP PEMROGRAMAN\n");
printf("=========================================================
====\n");
printf("No\tNama\t\tTugas\tUTS\tUAS\tAkhir\tGrade\n");
printf("=========================================================
====");
for(j=0; j<jml_mhs; j++)
{
akhir=(0.2*(*nilai).n_tugas)+(0.4*(*nilai).n_uts)+(0.4*(*nilai).n
_uas);
if(j==0 || nilaimahasiswa.nilaimaks<akhir)
{
strcpy(nilaimahasiswa.nama, (*nilai).nama);
nilaimahasiswa.nilaimaks=akhir;
}
if(akhir>=80)
grade='A';
else if((akhir<80)&&(akhir>=70))
grade='B';
else if((akhir<70)&&(akhir>=60))
grade='C';
else if((akhir<60)&&(akhir>=50))
grade='D';
else if(akhir<50)
grade='F';
else
grade=0;
printf("\n%d\t%s\t%2.0f\t%2.0f\t%2.0f\t%0.2f\t%c", j+1,
(*nilai).nama, (*nilai).n_tugas, (*nilai).n_uts, (*nilai).n_uas,
akhir, grade);
nilai++;
}
printf("\n=======================================================
======");
printf("\nTotal Mahasiswa\t= %d\n", jml_mhs);
printf("NILAI TERTINGGI\n");
printf("Nama mahasiswa\t: %s\n", nilaimahasiswa.nama);
printf("Nilai\t\t: %0.2f\n", nilaimahasiswa.nilaimaks);
}
b. Capture
D. LAPORAN RESMI
1. Untuk setiap listing program dari percobaan-percobaan di atas, ambil capture
outputnya.
2. Tuliskan kesimpulan dari percobaan yang telah anda lakukan.
E. KESIMPULAN
1. Jika sebuah struktur mengandung banyak field dan diputuskan bahwa keseluruhan
field-nya akan diubah oleh fungsi, maka cara yang efisien adalah dengan melewatkan
(passing) alamat dari struktur. Dengan demikianlah pada pendefinisian fungsi,
parameter formalnya berupa pointer yang menunjuk ke struktur (pointer to struct).