Elemen-elemen dari suatu array dapat berbentuk sebuah struktur. Misalnya array yang dipakai untuk menyimpan sejumlah data siswa (struct student). Array struktur berdimensi satu ini membentuk suatu tabel, dengan barisnya menunjukkan elemen dari array-nya dan kolomnya menunjukkan elemen dari struktur. Dalam hal ini maka deklarasi yang dibutuhkan adalah sebagai berikut :
#define MAKS 20
.
.
.
struct date { /* definisi dari tipe date */
int month;
int day;
int year;
};
struct student { /* definisi dari tipe student */
char name[30];
struct date birthday;
};
/* deklarasi dari variabel array mhs */
struct student data_mhs[MAKS];
yang artinya, mendeklarasikan array data_mhs yang memiliki elemen yang bertipe struct student sebanyak MAKS. Setelah array data_mhs dideklarasikan, maka ruang yang disediakan ditunjukkan dalam gambar 4 di bawah ini.
Gambar 1. Array dari struktur
Elemen-elemen dari array stuktur tersebut bisa diakses dengan cara sebagai berikut :
for (i=0; i<MAKS; i++)
{
printf ("Name : ");
fgets (data_mhs[i].name,sizeof data_mhs[i].name,stdin);
print f("Birthday (mm-dd-yyyy): ");
scanf("%d-%d-%d", &data_mhs[i].birthday.month,
&data_mhs[i].birthday.day,
&data_mhs[i].birthday.year);
printf("\n");
/* hapus sisa data dalam penampung keyboard */
fflush (stdin);
};
Selengkapnya perhatikan contoh program di bawah ini.
/* File program : student2.c Array struktur untuk menyimpan data-data student */
#include <stdio.h>
#define MAKS 20
struct date { //definisi global dr tipe date int month;
int day;
int year;
};
struct student { //definisi global dr tipe student
char name[30];
struct date birthday;
};
//deklarasi global dari variabel student
struct student data_mhs[MAKS];
main ()
{
int i=0, sudah_benar, jml;
char lagi;
//memasukkan data
do
{
printf ("Name : ");
fgets (data_mhs[i].name,sizeof data_mhs[i].name,stdin);
printf ("Birthday (mm-dd-yyyy): ");
scanf ("%d-%d-%d",
&data_mhs[i].birthday.month,
&data_mhs[i].birthday.day,
&data_mhs[i].birthday.year);
printf("\n");
i++;
printf("Mau memasukkan data lagi [Y/T] ? ");
do {
lagi = getchar( ); //baca tombol sudah_benar = (lagi == 'Y') || (lagi== 'y')||
(lagi == 'T') || (lagi == 't');
} while (! sudah_benar);
//hapus sisa data dalam penampung keyboard
fflush (stdin);
printf("\n");
} while(lagi == 'Y' || lagi == 'y');
jml = i;
//menampilkan data
printf("DATA SISWA\n");
for (i=0; i<jml; i++)
{
printf("%d. Name : %s", i+1, data_mhs[i].name);
printf (" Birthday : %d-%d-%d\n\n", data_mhs[i].birthday.month,
data_mhs[i].birthday.day, data_mhs[i].birthday.year );
};
}
Contoh eksekusi :
Name : Salsabila
Birthday (mm-dd-yyyy) : 10-25-1979
Mau memasukkan data lagi [Y/T] ? y
Name : Wildan
Birthday (mm-dd-yyyy) : 4-16-1974
Mau memasukkan data lagi [Y/T] ? t
DATA SISWA
1. Name : Salsabila
Birthday : 10-25-1979
2. Name : Wildan
Birthday : 4-16-1974
Di samping cara pendeklarasian di atas, struktur juga dapat dideklarasikan dalam berbagai bentuk yang lain, di antaranya sbb :
struct date {
int month, day, year;
} today, tomorrow;
struct student {
char name[30];
struct date birthday;
} data_mhs[MAKS];
yaitu mendefinisikan struktur date, sekaligus mendeklarasikan variabel today dan tomorrow dengan tipe struktur date. Demikian juga mendefinisikan struktur student, sekaligus mendeklarasikan variabel array data_mhs sebanyak MAKS elemen dengan tipe struktur student. Atau cara lainnya mendefinisikan, mendeklarasikan sekaligus menginisialisasi struktur, sebagai berikut :
struct date {
int month, day, year;
} today = {5,14,2001};
Struktur dan Fungsi
Melewatkan sebuah struktur untuk menjadi parameter sebuah fungsi dapat dilakukan sama dengan pengiriman parameter berupa variabel biasa. Fungsi yang mendapat kiriman parameter tersebut juga bisa mengirimkan hasil baliknya yang juga berupa sebuah struktur (pass by reference).
Melewatkan Elemen Struktur ke dalam Fungsi
Melewatkan parameter berupa elemen struktur dapat dilakukan sebagaimana pengiriman parameter berupa variabel biasa, dapat dilakukan baik secara nilai (pass by value) maupun secara acuan (pass by reference).
/* File program : cetak1.c
/* File program : cetak1.c
Melewatkan elemen struktur sbg parameter fungsi scr nilai */
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
void cetak_tanggal(int, int, int);
int main (void)
{
struct date { /* definisi lokal dari tipe date */
int month;
int day;
int year;
} today;
printf ("Enter the current date (mm-dd-yyyy): ");
scanf ("%d-%d-%d", &today.month, &today.day, &today.year);
cetak_tanggal (today.month, today.day, today.year);
}
void cetak_tanggal(int mm, int dd, int yy) {
static char *nama_bulan[] = {
"Wrong month", "January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
"July", "August", "September", "October", "November", "December"
};
printf("Todays date is %s %d, %d\n\n", nama_bulan[mm],dd,yy);
}
}
Contoh eksekusi :
Enter the current date (mm-dd-yyyy): 5-29-2001
Todays date is May 29, 2001
Todays date is May 29, 2001
Tampak bahwa elemen dari struktur dilewatkan ke fungsi memakai bentuk pengaksesan elemen struktur, berupa :
cetak_tanggal(today.month, today.day, today.year);
Apabila nilai suatu elemen struktur diharapkan akan diubah oleh fungsi, maka yang dilewatkan haruslah berupa alamat dari elemen struktur (pass by reference). Untuk keperluan ini, operator alamat ditempatkan di depan nama variabel struktur (bukan di depan nama elemen struktur).
/* File program : posisi1.c
Melewatkan elemen struktur sbg parameter fungsi scr acuan */
#include <stdio.h>
#include <stdlib.h>
void tukar_xy(int *, int *);
int main (void)
#include <stdlib.h>
void tukar_xy(int *, int *);
int main (void)
{
struct koordinat {
int x;
int y;
} 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.x, &posisi.y);
printf ("x, y sekarang = %d, %d\n", posisi.x, posisi.y);
}
printf ("x, y semula = %d, %d\n", posisi.x, posisi.y);
tukar_xy (&posisi.x, &posisi.y);
printf ("x, y sekarang = %d, %d\n", posisi.x, posisi.y);
}
void tukar_xy(int *a, int *b)
{
{
int z;
z = *a;
*a = *b;
*b = z;
}
Contoh eksekusi :
Masukkan koordinat posisi (x, y) : 34, 21 x, y semula = 34, 21
x, y sekarang = 21, 34
Tidak ada komentar:
Posting Komentar
Silahkan Berikan Komentar Anda untuk Kesempurnaan Blog ini..