int apakahSemuaPermintaanSudahSelesai(int jumlahPermintaan, int listPermintaan[])
{
for(int i=0; i<jumlahPermintaan; i++)
{
if(listPermintaan[i]!=0)
{
return 0;
}
}
return 1;
}
void urusPermintaan(int jumlahPermintaan, int listPermintaan[], int *totalGelombangPengiriman, int listJumlahPengirimanPermintaan[], int gudangA[100][100],int kapasitasGudang)
Program ini berfungsi untuk mensupport permintaan barang dan manajemen stok gudang. Ada 3 method yang berfungsi untuk mencetak log yaitu, cetakLogPermintaan, cetakJumlahGelombangPerPermintaan, dan cetakJumlahBarangPerPermintaan. Method pertama digunakan untuk mencetak jumlah sisa permintaan yang ada dari permintaan tersebut diajukan hingga semua permintaan sudah diurus. Method ini bersifat opsional dan berguna untuk mendebug program jika tiba-tiba ada permintaan yang error. Method berikutnya berfungsi untuk mencetak seberapa banyak gelombang pengiriman yang dibutuhkan untuk memenuhi per permintaan, method ini juga bersifat opsional dan dapat digunakan untuk alokasi pengiriman barang. Method terakhir adalah cetakJumlahBarangPerPermintaan yang berfungsi untuk melihat isi gudang A ketika suatu gelombang berjalan.
Berikutnya adalah method yang mengurus manajemen permintaan dan stok barang. Pertama-tama method yang bernama apakahSemuaPermintaanSudahSelesai akan mengecek apakah semua permintaan telah selesai diurus. Jika belum selesai maka jalankan method urusPermintaan untuk mengurangi permintaan dengan kapasitas gudang. Jika sisa permintaan sudah dibawah kapasitas maka isi slot dengan sisa permintaan tersebut, tetapi jika belum maka isi slot dengan kapasitas gudang dan kurangi permintaan dengan kapasitas gudang untuk gelombang berikutnya.
1 votes Thanks 1
Pyrozen
Ini backup link untuk melihat code ya: https://gist.github.com/ZeroPyrozen/c46d2c2185b515a4865d44cc7924f802
Jawaban:
Berikut jawabannya dalam bahasa C:
#include<stdio.h>
void cetakLogPermintaan(int jumlahPermintaan, int listPermintaan[])
{
printf("\nList Permintaan:\n\n");
for(int i=0; i<jumlahPermintaan; i++)
{
printf("Permintaan %d : %d\n",i,listPermintaan[i]);
}
printf("\n\n");
}
int apakahSemuaPermintaanSudahSelesai(int jumlahPermintaan, int listPermintaan[])
{
for(int i=0; i<jumlahPermintaan; i++)
{
if(listPermintaan[i]!=0)
{
return 0;
}
}
return 1;
}
void urusPermintaan(int jumlahPermintaan, int listPermintaan[], int *totalGelombangPengiriman, int listJumlahPengirimanPermintaan[], int gudangA[100][100],int kapasitasGudang)
{
for(int i=0; i<jumlahPermintaan; i++)
{
if(listPermintaan[i]==0)
{
gudangA[*totalGelombangPengiriman][i] = 0;
continue;
}
if(listPermintaan[i]-kapasitasGudang < 0)
{
gudangA[*totalGelombangPengiriman][i] = listPermintaan[i];
listPermintaan[i] = 0;
}
else
{
gudangA[*totalGelombangPengiriman][i] = kapasitasGudang;
listPermintaan[i] -= kapasitasGudang;
}
listJumlahPengirimanPermintaan[i]++;
}
*totalGelombangPengiriman += 1;
}
void cetakJumlahGelombangPerPermintaan(int jumlahPermintaan, int listJumlahPengirimanPermintaan[])
{
printf("List Jumlah Gelombang Pengiriman:\n\n");
for(int i=0; i<jumlahPermintaan; i++)
{
printf("Permintaan %d : %d Gelombang\n",i,listJumlahPengirimanPermintaan[i]);
}
}
void cetakJumlahBarangPerPermintaan(int jumlahPermintaan, int totalGelombangPengiriman, int gudangA[100][100])
{
printf("\n\nGelombang Pengiriman Gudang A:\n");
for(int i=0; i<totalGelombangPengiriman; i++)
{
printf("\n\nGelombang %d:\n",i+1);
printf("|");
for(int j=0; j<jumlahPermintaan; j++)
{
(gudangA[i][j]!=0)?printf("%-3d| ",gudangA[i][j]): printf(" | ");
}
printf("\n");
}
}
int main()
{
int gudangA[100][100];
int totalGelombangPengiriman = 0;
int jumlahPermintaan = 10;
int listPermintaan[] = {150, 370, 45, 80, 130, 35, 400, 75, 55, 95};
int listJumlahPengirimanPermintaan[] = {0,0,0,0,0,0,0,0,0,0};
int kapasitasGudang = 120;
while (apakahSemuaPermintaanSudahSelesai(jumlahPermintaan, listPermintaan) != 1)
{
printf("Iterasi ke %d:\n",totalGelombangPengiriman+1);
cetakLogPermintaan(jumlahPermintaan, listPermintaan);
urusPermintaan(jumlahPermintaan, listPermintaan, &totalGelombangPengiriman, listJumlahPengirimanPermintaan, gudangA, kapasitasGudang);
}
cetakJumlahGelombangPerPermintaan(jumlahPermintaan,listJumlahPengirimanPermintaan);
cetakJumlahBarangPerPermintaan(jumlahPermintaan, totalGelombangPengiriman, gudangA);
getchar();
return 0;
}
Penjelasan:
Program ini berfungsi untuk mensupport permintaan barang dan manajemen stok gudang. Ada 3 method yang berfungsi untuk mencetak log yaitu, cetakLogPermintaan, cetakJumlahGelombangPerPermintaan, dan cetakJumlahBarangPerPermintaan. Method pertama digunakan untuk mencetak jumlah sisa permintaan yang ada dari permintaan tersebut diajukan hingga semua permintaan sudah diurus. Method ini bersifat opsional dan berguna untuk mendebug program jika tiba-tiba ada permintaan yang error. Method berikutnya berfungsi untuk mencetak seberapa banyak gelombang pengiriman yang dibutuhkan untuk memenuhi per permintaan, method ini juga bersifat opsional dan dapat digunakan untuk alokasi pengiriman barang. Method terakhir adalah cetakJumlahBarangPerPermintaan yang berfungsi untuk melihat isi gudang A ketika suatu gelombang berjalan.
Berikutnya adalah method yang mengurus manajemen permintaan dan stok barang. Pertama-tama method yang bernama apakahSemuaPermintaanSudahSelesai akan mengecek apakah semua permintaan telah selesai diurus. Jika belum selesai maka jalankan method urusPermintaan untuk mengurangi permintaan dengan kapasitas gudang. Jika sisa permintaan sudah dibawah kapasitas maka isi slot dengan sisa permintaan tersebut, tetapi jika belum maka isi slot dengan kapasitas gudang dan kurangi permintaan dengan kapasitas gudang untuk gelombang berikutnya.