2011-11-28 74 views
0

这是我的代码的一部分:在下面的第一部分中,我已经声明了一堆浮点数和整数。我已经编写了一个包含三列数据的输入文件。每个订单项都代表一种形状。矩形,三角形或圆形。我已经成功确定哪些项目是哪个。在下面,我试图获取这些数据并计算每个形状的面积。对于圆,pi * r^2,矩形,长*宽,等边三角形,1/2L * H。所以,我将每个形状类型的最大面积放在一个带有条件的循环中。我可以成功地获得所有三种形状的正确的最大面积,但我无法获得输出正确项目编号的代码。你能帮我吗?我的代码不会输出正确的项目编号

// 3. Which block has the largest area? 
// ........................................................ 

float RA[M]; 
float CA[M]; 
float TA[M]; 
float MRA = 0.0; 
float MCA = 0.0; 
float MTA = 0.0; 
int ItmR = 0; 
int ItmC = 0; 
int ItmT = 0; 
int ItmN = 0; 

// ........................................................ 

for (int i=0; i<M; i++) 
{ 
    if (btype[i] == Rectangles) 
    { 
    RA[i] = D[i] * E[i]; 

    if (MRA < RA[i]) 
    { 
     MRA = RA[i]; 
     ItmR = i+1; 
    } 
    } 
//} 
//cout << "The block with the largest area is " << ItmR 
//  << endl; 

// ........................................................ 

//for (int i=0; i<M; i++) 
//{ 
if (btype[i] == Circles) 
{ 
    CA[i] = (3.14 * (D[i] * D[i])); 

    if (MCA < CA[i]) 
    { 
    MCA = CA[i]; 
    ItmC = i+1; 
    } 
} 
//} 
//cout << "MCA = " << MCA << ", Item No. " << ItmC 
//  << endl; 

// ........................................................ 

//for (int i=0; i<M; i++) 
//{ 
if (btype[i] == Triangles) 
{ 
    TA[i] = (0.5 * (D[i] * E[i])); 

    if (MTA < TA[i]) 
    { 
    MTA = TA[i]; 
    ItmT = i+1; 
    } 
} 
//} 
//cout << "MTA = " << MTA << ", Item No. " << ItmT 
//  << endl; 

// ........................................................ 

if (MRA < MCA) 
{ 
    MRA = MCA; 
    ItmN = ItmC; 
} 
else 
    if (MRA < MTA) 
    { 
    MRA = MTA; 
    ItmN = ItmT; 
    } 
    else 
    { 
    MRA = MRA; 
    ItmN = ItmR; 
    } 
} 
cout << MRA << " " << ItmN << endl; 

我不知道如何让它输出正确的答案项目编号。该代码明确输出正确的区域,但ItmN(项目编号)是错误的。

+1

我编辑你的帖子以从代码块中删除反引号,它们在那里不需要。 –

+0

你得到了什么样的物品编号,你期望什么? –

+0

学习使用调试器(例如Linux上的'gdb'),并在启用所有警告的情况下编译代码(在Linux上使用'gcc -Wall -g')。 –

回答

1

您的代码甚至不能得到最大的面积,仿佛MRA小于MCAMCA是小于MTA,输出将是MCA区域,作为两个都不选else部分将得到执行。

为了清楚,还应该定义一个单独的变量来表示的最大面积,而不是重用MRA,并判断所述最大面积的最后段应当把整个for循环外,不内部。

float maxA = MRA; 
ItmN = ItmR; 
if (maxA < MCA) 
{ 
    maxA = MCA; 
    ItmN = ItmC; 
} 
//else 
if (maxA < MTA) 
{ 
    maxA = MTA; 
    ItmN = ItmT; 
} 
//else 
//{ 
//  maxA = MRA; 
//  ItmN = ItmR; 
//} 

cout << maxA << " " << ItmN << endl; 
+0

感谢您寻求最大面积的提示。我修复了我的算法部分,但仍然不会输出项目编号(ItmN)。 – lprater1

+0

我想让它输出项目编号的字符值。我将所有ItmR,C,T,N初始化为从'A'开始的字符变量,并且我仅保留上述算法。为什么这不工作? – lprater1

+0

您可能必须提供当前的代码,因为我无法猜测您编辑代码的位置。但是我认为你仍然可以使用这个代码,并且如果你确定你有少于26个项目,可以使用'cout <<(char)('A'+ ItemN)<< endl;'来输出。你是什​​么意思“不会输出项目号码”? – fefe