| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1090 人关注过本帖
标题:我做数学建模时编的程序,求改错(今晚急用)
只看楼主 加入收藏
znmn
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-11-28
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
我做数学建模时编的程序,求改错(今晚急用)
企业存在开工的固定成本,即只要开工生产产品就要发生的固定成本;另外,企业生产单位产品变动成本会随着产量的增加而减少。
如果甲生产线开工固定成本为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 编辑 ]
搜索更多相关主题的帖子: 数学建模 改错 
2010-11-28 22:26
zcc417
Rank: 2
等 级:论坛游民
帖 子:6
专家分:17
注 册:2010-8-29
收藏
得分:10 
你能把代码注释一下吗?看着很麻烦啊
变量名和函数名不要一样
最后3行的i,j是干嘛呢?
2010-11-28 22:47
znmn
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-11-28
收藏
得分:0 
回复 2楼 zcc417
好的,随后发出。谢谢,谢谢
2010-11-28 23:12
znmn
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-11-28
收藏
得分:0 
回复 2楼 zcc417
#include<stdio.h>
int m,n,i,j;
//定义两个供调用的函数,来讨论当甲乙取不同值时的费用
 float c1(float a)
{
        if (a=0)
            c=0;
        else if (a<2)
            c=30+100*a;
        else if (a<=4)
            c=30+85*a;
 }

float c2(float a)
{   
        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()
{
   
    float min1,Min=999999;//为保证Min取到较小值,先付一较大初始值
    float a[2][6];        //在程序中不断改变的甲乙生产量
    float s[2][6];        //为保存最后甲乙各自六个数据提供一个数组空间

    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]);
                            if(i=1)
                                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=%f\n",Min);    //所有循环结束,输出最小值

For(m=0; m<=1; m++)        //利用循环输出内存中的a的12个数值。其中s[0][j]是甲前六月的各月费用;s[1][j]是乙前六月的各月费用
    For(n=0; n<=5; n++)
        printf("a[%d][%d]= %f \n",m,n,s[i][j]);

}


[ 本帖最后由 znmn 于 2010-11-28 23:39 编辑 ]
2010-11-28 23:31
znmn
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-11-28
收藏
得分:0 
提示以下结果:
--------------------Configuration: 1 - Win32 Debug--------------------
Compiling...
1.c

1.obj - 0 error(s), 0 warning(s)



--------------------Configuration: 1 - Win32 Debug--------------------
Linking...

1.exe - 0 error(s), 0 warning(s)


但结果不对

对中间遍历就和的语句感到巨大疑惑,球前辈改正

[ 本帖最后由 znmn 于 2010-11-29 06:40 编辑 ]
2010-11-29 00:05
jianghong_02
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:143
专家分:476
注 册:2010-10-2
收藏
得分:10 
#include<stdio.h>
int m,n,i,j;
float c;
//定义两个供调用的函数,来讨论当甲乙取不同值时的费用
float c1(float a)
{
        if (a=0)
            c=0;
        else if (a<2)
            c=30+100*a;
        else if (a<=4)
            c=30+85*a;
        return c;
}

float c2(float a)
{   
        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()
{
    //你并没有初始化赋值,所以算出来也是错的,
    float min1=0,Min=999999;//为保证Min取到较小值,先付一较大初始值
    float a[2][6];        //在程序中不断改变的甲乙生产量
    float s[2][6];        //为保存最后甲乙各自六个数据提供一个数组空间

  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]+float(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]);
                            if(i=1)
                                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=%f\n",Min);    //所有循环结束,输出最小值

for(m=0; m<=1; m++)        //利用循环输出内存中的a的12个数值。其中s[0][j]是甲前六月的各月费用;s[1][j]是乙前六月的各月费用
for(n=0; n<=5; n++)
        printf("a[%d][%d]= %f \n",m,n,s[i][j]);

}


//上面的程序基本调成功了,但没有给a[2][6]赋值,你在给a[2][6]赋值在调试一下就成了,如果不行,你在发到 论坛来
2010-11-29 09:17
znmn
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-11-28
收藏
得分:0 
回复 6楼 jianghong_02
我想是实现的功能是让a【2】【6】从0开始,以步长0.1递增,通过无数次对比min,从而求出企业最小费用,所以a[2][6]的初值都是0。另外,你改的还是有点小错:我少发了一个重要参数,就是商品前六个月的需求量:3,7,3,8,4,6。以及一月初库存为2,六月末库存为0。
--------------------Configuration: 3 - Win32 Debug--------------------
Compiling...
3.c
c:\documents and settings\administrator\桌面\3.c(41) : error C2059: syntax error : 'type'
执行 cl.exe 时出错.

3.obj - 1 error(s), 0 warning(s)
还是很感激你!!!!
2010-11-29 11:28
快速回复:我做数学建模时编的程序,求改错(今晚急用)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016847 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved