我做数学建模时编的程序,求改错(今晚急用)
企业存在开工的固定成本,即只要开工生产产品就要发生的固定成本;另外,企业生产单位产品变动成本会随着产量的增加而减少。如果甲生产线开工固定成本为30万元,月生产能力4万吨,单位产品的生产成本C与产量Q的关系为:
100元/吨,Q小于2;85元/吨,Q小于4;
乙生产线开工固定成本15万元,月生产能力2万吨,单位产品生产成本C与产量Q的关系为:
110元/吨,Q小于1;95元/吨,Q小于2;
企业未出售商品月库存成本20元/吨,企业1月初库存2万吨,要求6月末库存为0,产品市场需求情况如表1,试建立数学模型,决策企业两条生产线的生产库存计划。
表1
月份 1 2 3 4 5 6
需求量(万吨) 3 7 3 8 4 6
#include<stdio.h>
//定义两个供调用的函数,来讨论当甲乙取不同值时的费用
double c1(double a)
{
double c;
if (a==0)
c=0;
else if (a<2)
c=30+100*a;
else if (a<=4)
c=30+85*a;
return c;
}
double c2(double a)
{
double c;
if (a==0)
c=0;
else if (a<1)
c=15+110*a;
else if (a<=2)
c=15+95*a;
return c;
}
void main()
{
int m,n,i,j;
double min1,Min=99999; //为保证Min取到较小值,先付一较大初始值
double a[2][6]; //在程序中不断改变的甲乙生产量
double s[2][6]; //为保存最后甲乙各自六个数据提供一个数组空间
for (m=0;m<=1;m++)
for (n=0;n<=5;n++)
{
a[m][n]=0;
s[m][n]=0;
}
for (m=0;m<=1;m++)
for (n=0;n<=5;n++)
if(a[0][n]<=4 && a[1][n]<=2)
{
a[m][n]=a[m][n]+0.1; //采用递增方法,使甲乙生产量逐渐递增0.1
for(i=0;i<=1;i++) //害怕改变m、n的值会影响外层循环,故用i、j使a在内层循环一整遍
for (j=0;j<=5;j++)
{
if(i==0) //根据甲乙的值调用得出该月的费用
min1=min1+c1(a[0][j]);
else
min1=min1+c2(a[0][j]);
}
if(Min>min1) //判断此次循环所得值是否最小,是的话转存,并转存a的十二个数据
Min=min1;
for (i=0;i<=1;i++)
for (j=0;j<=5;j++)
s[i][j]=a[i][j];
}
printf("Min=%lf\n",Min); //所有循环结束,输出最小值
for(m=0;m<=1;m++) //利用循环输出内存中的a的12个数值。其中a[0][j]是甲前六月的各月费用;a[1][j]是甲前六月的各月费用
for(n=0; n<=5; n++)
printf("a[%d][%d]= %lf \n",m,n,s[i][j]);
}
谢谢,谢谢……
[ 本帖最后由 znmn 于 2010-11-29 11:29 编辑 ]