2010-09-19 64 views
1

愚蠢的生活問題後回學習讓我出軌!我決定切換我的學習資料,現在我正在使用Accelerated C++。用一段時間畫一個簡單的三角形

第2章練習5:
編寫一組「*」字符,以便它們形成正方形,矩形和三角形。

我試過,但只是無法準確得到三角形。快速谷歌發現瞭如下答案:

// draw triangle 
    int row = 0; 
    int col = 0; 
    int height = 5; 

// draw rows above base 
    while (row < height - 1) 
    { 
     col = 0; 
     while (col < height + row) 
     { 
      ++col; 
      if (col == height - row) 
       cout << '*'; 
      else 
      { 
       if (col == height + row) 
        cout << '*'; 
       else 
        cout << ' '; 
      } 
     } 
     cout << endl; 
     ++row; 
    } 

// draw the base 
    col = 0; 

    while (col < height * 2 - 1) 
    { 
     cout << '*'; 
     ++col; 
    } 

我想這disect並充分理解它,因爲我不得不想出我自己的答案麻煩。不要緊,我有多少次我通過它無法看到它是如何繪製三角形的右側:

- - - - * 
- - - * 
- - * 
- * 
* 
* * * * * * * * * * 

這就是我走了通過這個循環在紙面上。地球上的哪個地方是從哪裏來的?我有一種直覺,表情在做我沒有看到的東西。代碼起作用。

+0

OMG!無盡的九月再次開始......(搜索新聞:comp.lang.C++爲「無盡的九月」)。 – 2010-09-20 04:08:56

回答

3

在嵌套while循環中,else子句內:

else 
{ 
    if (col == height + row) 
     cout << '*'; // This draws the right side 
    else 
     cout << ' '; 
} 

訣竅是,while循環不退出,直到柱達到height + row,這是右側的位置。它在前面的if子句中打印左側(在height - row)。

+0

嗯,我會再試一次。我必須對迭代和變量進行計數,因爲我無法到達循環的那一部分,所以錯誤或者其他影響。我總是爆發。謝謝。 – aLostMonkey 2010-09-19 20:31:11

+1

確保你注意'行'被增加。在第一個循環中,「height-row == height + row」,所以一旦到達左側,內部(但不是外部)循環就會退出。不過,在第二輪中,您將在左側和右側(退出時)之間進行兩次迭代,等等。 – 2010-09-19 20:36:03

+1

如果你能找到一個適合你的工具,那麼使用調試器來完成它也是一個好主意。那麼你可以確定你正在遵循計算機所採用的路徑。不過,像'gdb'這樣的東西在這一點上可能有點難以處理。 – 2010-09-19 20:37:37