PRAKTIKUM ALGORITMA & PEMROGRAMAN PERTEMUAN KESEPULUH

Assalamu’alaikum para pembaca, pada pertemuan ke-10 ini kita akan mengamati dan mempelajari penggunaan struct  dalam pemrogarman bahasa C

Teori

Dalam bahasa C, struct adalah tipe data bentukan yang terdiri dari kumpulan tipe data lain. Struct mirip seperti array, tapi struct bisa menampung lebih dari 1 jenis tipe data. Jika sebelumnya anda pernah belajar bahasa pemrograman Pascal, struct dalam bahasa C sangat mirip seperti record di Pascal.

Tipe data struct cocok dipakai untuk menampung data berkelompok. Misalnya saya ingin membuat biodata siswa. Setiap siswa memiliki data namanama sekolah serta jumlah uang saku. Menggunakan cara biasa, semua data ini bisa ditampung ke dalam 3 variabel berikut:

1
2
3
char nama_siswa01[50] = "Andi Permana Nugroho";
char nama_sekolah_siswa01[50] = "SMA 1 Lumut Ijo";
unsigned int uang_saku_siswa01 = 10000;

Untuk siswa kedua, tinggal membuat penamaan yang sama, yakni nama_siswa02nama_sekolah_siswa02 dan uang_saku_siswa02.

Cara ini tidak salah, namun setiap variabel seolah-olah terpisah satu sama lain. Satu-satunya yang menghubungkan ketika variabel hanya dari penamaan saja. Kita juga tidak bisa menggunakan array karena 3 data di atas memiliki tipe data yang berbeda. Dalam kasus seperti inilah tipe data struct cocok digunakan.


Cara Penggunaan Tipe Data Struct

Tipe data struct adalah tipe data bentukan, dimana kita harus buat dulu seperti apa isi komponen dari struct, baru kemudian diakses dari kode program utama.

Kita akan bahas dengan contoh kode program berikut ini:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
struct Siswa {
  char  nama[50];
  char  sekolah[50];
  unsigned int  uangSaku;
};
int main(void)
{
  struct Siswa siswa01;
  strcpy(siswa01.nama, "Andi Permana Nugroho");
  strcpy(siswa01.sekolah, "SMA 1 Lumut Ijo");
  siswa01.uangSaku = 10000;
  printf("%s bersekolah di %s ", siswa01.nama, siswa01.sekolah);
  printf("dengan uang saku %i per hari\n", siswa01.uangSaku);
  return 0;
}

Hasil Kode Program:

Contoh kode program tipe data struct bahasa pemrograman C

Proses pembuatan tipe data struct ditulis sebelum main(), yang dalam contoh ada di baris 3 – 7.

Setelah keyword struct, diikuti dengan nama identitas atau nama tipe data yang kita inginkan. Dalam contoh ini saya membuat tipe data Siswa. Tentu saja anda bisa menggunakan nama lain.

Sebuah struct terdiri dari berbagai variabel yang ditulis di antara tanda kurung kurawal. Untuk tipe data struct Siswa, saya membuat variabel namasekolah dan uangSaku. Setiap variabel tetap ditulis tipe data asalnya.

Perintah di baris 3 – 7 dipakai untuk membuat struktur dasar struct. Agar bisa digunakan, kita harus membuat variabel baru dengan tipe data Siswa, yakni tipe data bentukan dari struct.

Masuk kode kode program utama (main), saya mendefinisikan variabel siswa01 sebagai struct Siswa di baris 11. Sekarang, variabel siswa01 adalah tipe data bentukan yang terdiri dari 3 element, yakni:

  • siswa01.nama
  • siswa01.sekolah
  • siswa01.uangSaku

Tanda titik dipakai untuk mengakses sub struktur dari siswa01. Semua ini sesuai dengan pendefinisian struct Siswa.

Proses pengisian data ke dalam variabel siswa01 dilakukan pada baris 13 – 15. Karena nama dan sekolah adalah string, maka saya harus menggunakan fungsi strcpy. Sedangkan untuk uangSaku bisa langsung diisi sebagaimana cara pengisian variabel biasa.

Di bagian akhir kode program, saya menampilkan ketiga data siswa01. Caranya sama seperti variabel biasa, hanya saja sekarang kita menggunakan struct Siswa sehingga cara aksesnya adalah siswa01.namasiswa01.sekolah, dan siswa01.uangSaku.

Bagaimana jika ada 3 siswa? Tidak masalah, cukup buat variabel siswa01siswa02, dan siswa03 sebagai struct Siswa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
struct Siswa {
   char  nama[50];
   char  sekolah[50];
   unsigned int  uangSaku;
};
int main(void)
{
  struct Siswa siswa01;
  struct Siswa siswa02;
  struct Siswa siswa03;
  strcpy(siswa01.nama, "Andi Permana");
  strcpy(siswa01.sekolah, "SMA 1 Lumut Ijo");
  siswa01.uangSaku = 10000;
  printf("%s bersekolah di %s ", siswa01.nama, siswa01.sekolah);
  printf("dengan uang saku %i per hari\n", siswa01.uangSaku);
  strcpy(siswa02.nama, "Lisa Permata Sari");
  strcpy(siswa02.sekolah, "SMA 1 Biru Langit");
  siswa02.uangSaku = 30000;
  printf("%s bersekolah di %s ", siswa02.nama, siswa02.sekolah);
  printf("dengan uang saku %i per hari\n", siswa02.uangSaku);
  strcpy(siswa03.nama, "Jessica Stephany");
  strcpy(siswa03.sekolah, "SMA 1 Merah Jambu");
  siswa03.uangSaku = 75000;
  printf("%s bersekolah di %s ", siswa03.nama, siswa03.sekolah);
  printf("dengan uang saku %i per hari\n", siswa03.uangSaku);
  return 0;
}

Hasil kode program:

Andi Permana bersekolah di SMA 1 Lumut Ijo dengan uang saku 10000 per hari
Lisa Permata Sari bersekolah di SMA 1 Biru Langit dengan uang saku 30000 per hari
Jessica Stephany bersekolah di SMA 1 Merah Jambu dengan uang saku 75000 per hari

Kode program diatas memang cukup panjang karena ada 3 data siswa yang harus diisi. Namun ini hanya pengembangan dari kode program kita sebelumnya.


Input Tipe Data Struct dengan gets dan scanf

Agar lebih menantang, bagaimana jika proses input data dilakukan secara interaktif? Yakni meminta user menginput data tersebut.

Berikut kode programnya:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
struct Siswa {
   char  nama[50];
   char  sekolah[50];
   unsigned int  uangSaku;
};
int main(void)
{
  struct Siswa siswa01;
  printf("==++ Pendaftaran Siswa Baru ++== \n");
  printf("\n");
  printf("Nama: ");
  gets(siswa01.nama);
  printf("Sekolah: ");
  gets(siswa01.sekolah);
  printf("Uang saku: ");
  scanf("%i",&siswa01.uangSaku);
  printf("Hasil: \n");
  printf("%s bersekolah di %s ", siswa01.nama, siswa01.sekolah);
  printf("dengan uang saku %i per hari\n", siswa01.uangSaku);
  return 0;
}

Hasil Kode Program:Contoh kode program tipe data struct bahasa pemrograman C - input

Saya masih menggunakan struct Siswa, dan juga variabel siswa01. Bedanya, proses input dilakukan dari fungsi gets dan scanf.

Ketika program dijalankan, user akan diminta untuk mengisi data namasekolah dan uangSaku. Ketiga data ini akan disimpan ke dalam siswa01.namasiswa01.sekolah, dan siswa01.uangSaku.

 

TUGAS 1

  • Menentukan tanggal besok dengan structur

Program :

#include<stdio.h>
struct tgl {
int d;
int m;
int y;};
int bulann [13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
struct tgl skrg;
static char *bulan[]={
“salah”,”jnr”,”feb”,”mrt”,”apr”,”mei”,”jun”,”jul”,”ags”,”sep”,”okt”,”nov”,”des”};
void tanggalanbesok(struct tgl bsk,int tambah)
{ bsk.d=bsk.d+tambah;
while (bsk.d>bulann[bsk.m]){
if (bsk.y%4==0)
bulann[2]=29;
else bulann[2]=28;
bsk.d=bsk.d-bulann[bsk.m];
bsk.m=bsk.m+1;
if (bsk.m>12)
{bsk.m=bsk.m-12;bsk.y=bsk.y+1;}}
printf (“\n%d-%d-%d”,bsk.d,bsk.m,bsk.y);
printf(“\n%d %s %d”,bsk.d,bulan[bsk.m],bsk.y);
}

int main()
{
printf(“Tanggal sekarang adalah “);
int tambah;
mulai:
printf (“masukan tanggal : (dd mm yy)\n”);
scanf(“%d %d %d”,&skrg.d,&skrg.m,&skrg.y);
if(skrg.y%4==0)
bulann[2]=29;
else bulann[2]=28;
if(skrg.d>bulann[skrg.m]||skrg.m>12||skrg.m<1){
printf(“\nForamat salah ulang\n”);
goto mulai;}
printf(“%d %s %d”,skrg.d,bulan[skrg.m],skrg.y);
printf (“\nmasukan berapa jumlah hari berikutnya : “);
scanf(“%d”,&tambah);
tanggalanbesok(skrg,tambah);
}

 

TUGAS 2

  • Menentukan selisih waktu

Program :

#include<stdio.h>
struct waktu {
int d;
int m;
int j;};
struct waktu selisih(skrg,nanti)
struct waktu skrg;
struct waktu nanti;
{
struct waktu selisihnya;
if(skrg.d>nanti.d){
nanti.d=nanti.d+60;
nanti.m=nanti.m-1;}
selisihnya.d=nanti.d-skrg.d;
if(skrg.m>nanti.m){
nanti.m=nanti.m+60;
nanti.j=nanti.j-1;}
selisihnya.m=nanti.m-skrg.m;
selisihnya.j=nanti.j-skrg.j;
return(selisihnya);
}

void main()
{
struct waktu now;
struct waktu later;
struct waktu beda;
printf(“Masukan waktu sekarang j:m:d\n”);
scanf(“%d%d%d”,&now.j,&now.m,&now.d);
printf(“Masukan waktu nanti j:m:d\n”);
scanf(“%d%d%d”,&later.j,&later.m,&later.d);
beda=selisih(now,later);
printf(“Selisih waktunya\n”);
printf(“%d jam:%d menit :%d detik”,beda.j,beda.m,beda.d);
}

 

TUGAS 3

  • Menentukan selisih tanggal

#include<stdio.h>
//belum fix
int main()
{
struct tgl {
int d;
int m;
int y;};
int bulann [13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
static char *bulan[]={
“salah”,”jnr”,”feb”,”mrt”,”apr”,”mei”,”jun”,”jul”,”ags”,”sep”,”okt”,”nov”,”des”};
struct tgl skrg;
struct tgl nanti;
int selisih=0;
mulai:
printf (“masukan tanggal sekarang: (dd mm yy)\n”);
scanf(“%d %d %d”,&skrg.d,&skrg.m,&skrg.y);
if(skrg.y%4==0)
bulann[2]=29;
else bulann[2]=28;
if(skrg.d>bulann[skrg.m]||skrg.m>12||skrg.m<1){
printf(“\nForamat salah ulang\n”);
goto mulai;}
printf(“\n%d %s %d”,skrg.d,bulan[skrg.m],skrg.y);
ulang:
printf (“\nmasukan tanggal nanti : (dd mm yy)\n”);
scanf(“%d %d %d”,&nanti.d,&nanti.m,&nanti.y);
if(nanti.y%4==0)
bulann[2]=29;
else bulann[2]=28;
if(nanti.d>bulann[nanti.m]||nanti.m>12||nanti.m<1){
printf(“\nForamat salah ulang\n”);
goto ulang;}
printf(“\n%d %s %d\n”,nanti.d,bulan[nanti.m],nanti.y);

while(skrg.d!=nanti.d||skrg.m!=nanti.m||skrg.y!=nanti.y)
{
if(skrg.y%4==0)
bulann[2]=29;
else bulann[2]=28;
skrg.d=skrg.d+1;
selisih++;
if(skrg.d>bulann[skrg.m]){
skrg.m=skrg.m+1;
skrg.d=1;}
if(skrg.m==13){
skrg.m=skrg.m-12;
skrg.y=skrg.y+1;}
}
printf(“Selisihnya adalah “);
printf(“%d hari “,selisih);
getch();
}