2011-11-28 55 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

相關問題