PRAKTIKUM 29
Konsep Pemrograman
PERCOBAAN
- Input
#include <stdio.h>
#define MAKS 20
struct date
{//definisi global dr tipe date
int month, day, year;
};
struct student
{//definisi global dr tipe student
char name[30];
struct date birthday;
};
main()
{
struct student data_mhs[MAKS];
int i=0, jml;
char lagi;
do
{//memasukkan data
printf("Name : ");
gets(data_mhs[i].name);
printf("Birthday (mm-dd-yyyy): ");
scanf("%d-%d-%d", &data_mhs[i].birthday.month,
&data_mhs[i].birthday.day, &data_mhs[i].birthday.year);
i++;
fflush(stdin); //hapus sisa data dlm buffer keyboard
printf("\nMau memasukkan data lagi [Y/T] ? ");
lagi = getchar( ); //baca tombol
fflush(stdin); //hapus sisa data dlm buffer keyboard
}
while(lagi == 'Y' || lagi == 'y');
jml = i;
printf("\nDATA MAHASISWA\n");
for (i=0; i<jml; i++) //menampilkan data
{
printf("%d. Name : %s", i+1, data_mhs[i].name);
printf("\n Birthday : %d-%d-%d\n\n",
data_mhs[i].birthday.month,
data_mhs[i].birthday.day,
data_mhs[i].birthday.year);
}
}
- Output
- Analisis
Program di atas, variabel mhs merupakan variabel array, sehingga elemen-elemen struct
student mhs bisa diisi lebih dari satu sebanyak array.untuk pengisian dan pencetakan variabel,
bisa menggunakan loop seperti saat menggunakan array pada umumnya.
- Kesmpulan
Dengan menggunakan variabel array of struct, maka data yang bisa diisi bisa lebih dari satu
sampai sebanyak jumlah array.
2. Pointer Buatlah 2 variabel (today & tomorrow) bertipe struct date. Isilah variabel today
dengan tanggal hari ini. Temukan tanggal untuk variabel tomorrow.
Keterangan:
- Berikan pengecekan untuk akhir bulan
- Berikan pengecekan untuk akhir tahun
- Berikan pengecekan untuk bulan Februari di tahun kabisat
Tahun kabisat adalah :
- Kelipatan 4, tapi bukan kelipatan 100
- Kelipatan 100 yang juga merupakan kelipatan 400
- Input
#include <stdio.h>
#include <stdlib.h>
struct date
{
int day,month,year;
};
int kabisat (int);
int validasi (int, int, int);
main()
{
struct date today,tomorrow;
int is_kabisat, is_valid;
printf("Percobaan Struktur 1 : Today dan Tomorrow\n\n");
printf("Masukkan tanggal hari ini (dd-mm-yyyy) : ");
scanf("%d-%d-%d", &today.day, &today.month, &today.year);
if(today.month==12 && today.day==31)
{
tomorrow.day=1;
tomorrow.month=1;
today.year++;
tomorrow.year=today.year;
}
else if(today.month==4,6,9,11 && today.day==30)
{
tomorrow.day=1;
today.month++;
tomorrow.month=today.month;
tomorrow.year=today.year;
}
else if(today.month!=2,4,6,9,11 && today.day==31)
{
tomorrow.day=1;
today.month++;
tomorrow.month=today.month;
tomorrow.year=today.year;
}
else if(today.month==2)
{
is_kabisat=kabisat(today.year);
if((today.day==29 && is_kabisat==1) || (today.day==28 && is_kabisat==0))
{
tomorrow.day=1;
today.month++;
tomorrow.month=today.month;
tomorrow.year=today.year;
}
else
{
today.day++;
tomorrow.day=today.day;
tomorrow.month=today.month;
tomorrow.year=today.year;
}
}
else
{
today.day++;
tomorrow.day=today.day;
tomorrow.month=today.month;
tomorrow.year=today.year;
}
is_valid = validasi(today.day, today.month, today.year);
if(is_valid == 1){
printf("Besok adalah : %d-%d-%d", tomorrow.day, tomorrow.month,
tomorrow.year);
}
else{
printf("TIDAK VALID!");
}
return 0;
}
int kabisat (int year)
{
if (year%4==0 && year%100!=0)
{
return 1;
}
else if (year%100==0 && year%400==0)
{
return 1;
}
else
return 0;
}
int validasi (int day, int month,int year)
{
int ini_kabisat=kabisat(year);
if(month>12 && month<1 || year==0)
{
return 0;
}
else if((month==1,3,5,7,8,10,12) && (day>=1 && day<=31))
{
return 1;
}
else if(month==2 && day>=1 && day<=29)
{
if(ini_kabisat==1)
{
return 1;
}
else if(day<=28)
{
return 1;
}
else
{
return 0;
}
}
else if((month==4,6,9,11) && day>=1 && day<=30)
{
return 1;
}
else
{
return 0;
}
}
- Output
- Analisis
Pada program di atas, dilakukan pencetakan hari esoknya dari tanggal yang diinputkan oleh user.
Jika tanggal yang diinputkan adalah 31 Desember, maka tahun akan bertambah dan tanggal
berubah menjadi 1 Januari. Jika tanggal yang diinputkan adalah akhir bulan, maka bulan akan
bertambah dan tanggal berubah menjadi tanggal 1 sedangkan tahun akan tetap. Khusus untuk bulan
Februari, sebelum pengecekan tanggal akhir dilakukan pengecekan bulan kabisat terlebih dahulu.
Jika kabisat, maka tanggal bertambah 1. Jika bukan kabisat, maka bulan bertambah dan tanggal
menjadi tanggal 1. Selain syarat-syarat diatas, tanggal hanya akan bertambah 1.
3. Sebuah Perusahaan Ayam goreng dengan nama Gerobak Fried Chicken yang telah lumayan
banyak pelanggannya, ingin dibantu dibuatkan program demi kelancaran usahanya. Gerobak
Fried Chicken mempunyai Daftar Harga Ayam sebagai berikut:
- Input
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct datamenu {
char kode;
int jumlah;
};
main()
{
struct datamenu keranjang[30];
int i = 0,j,harga,total=0;
char jwb,jenis[6];
do
{
printf("\nPesanan ke-%d",i+1);
fflush(stdin);
printf("\nJenis [D/P/S]\t: ");
scanf("%c",&keranjang[i].kode);
fflush(stdin);
printf("Jumlah \t\t: ");
scanf("%d",&keranjang[i].jumlah);
i++;
fflush(stdin);
printf("\nMau pesan lagi [y/n] ?");
jwb = getchar();
}while(jwb == 'Y' || jwb == 'y');
printf("\n\nNota Belanja Anda : \n");
printf("\n GEROBAK FRIED CHICKEN\n");
printf("\n=============================================================
===");
printf("\nNo\tJenis Potong\tHarga Satuan\tQty\tJumlah Harga");
printf("\n=============================================================
===");
for(j=0;j<i;j++)
{
switch(keranjang[j].kode)
{
case 'D': case 'd' :
strcpy(jenis,"DADA");
harga = 5000;
break;
case 'P': case 'p' :
strcpy(jenis,"PAHA");
harga = 4000;
break;
case 'S': case 's' :
strcpy(jenis,"SAYAP");
harga = 3000;
break;
}