簡體   English   中英

C ++嵌套while循環菱形圖案的翻譯算法

[英]translating algorithm for C++ nested while loop diamond pattern

這是我的C ++作業問題:

以下算法是使用嵌套循環顯示菱形圖案的問題的解決方案。 將下面的算法翻譯成C ++程序。 生成,運行和測試程序。

算法解決方案:

開始

Declare numRows as constant integer = 7
Declare maxPlus as constant integer = 7
Declare numSpaces as integer
Declare numPluses as integer
Declare row as integer
Declare space as integer
Declare plus as integer

Set row = 1

Repeat while row >= 1 AND row <= numRows
    Set numPluses = 2 * row - 1
    if(numPluses > maxPlus) then
        Set numPluses = 14 - numPluses
    endif

    Set numSpaces = (maxPlus - numPluses) / 2

    Set space = 1
    Repeat while space >= 1 AND space <= numSpaces
        Display( ' ')
        Set space = space + 1
    End Repeat

    Set plus = 1
    Repeat while plus >= 1 AND plus <= numPluses
        Display( '*')
        Set plus = plus + 1
    End Repeat  

    Set row = row + 1

    Display a new line
End Repeat

停止

我的代碼:

   #include <iostream>
   using namespace std;

   int main() {

    const int numRows = 7;
    const int maxPlus = 7;
    int numSpaces;
    int numPluses;
    int row;
    int space;
    int plus;

    row = 1;

    while((row >=1) && (row <= numRows)){
        numPluses = 2 * row - 1;
        if(numPluses > maxPlus){
            numPluses = 14 - numPluses;
        }
        numSpaces = (maxPlus - numPluses)/ 2;
        space = 1;
        while((space >= 1) && (space <= numSpaces)){
           cout << " ";
           space++;
        }
        while((plus >= 1) && (plus <= numPluses)){
            cout << "*";
            plus++;
        }
        row++;
        cout << endl;
    }

    return 0;
    }

我的問題是為什么我沒有得到菱形圖案? 我覺得我正確地翻譯了算法,但是得到的只是一堆空白。 我看錯問題還是編碼錯誤? C ++代碼的屏幕截圖

在最后一個while循環之前:

 Set plus = 1 

您在翻譯中錯過了它。

該代碼未初始化plus

有一個習慣可以節省很多痛苦。 在定義時,切勿在未賦予變量有意義的初始值的情況下對其進行聲明。 將變量的范圍限制為實際使用它們的位置。 在翻譯偽代碼時,這可能意味着要進行一些重寫。 Diggit。

int main() {
    const int numRows = 7;
    const int maxPlus = 7;
    for (int row = 1; row <= numRows; ++row) {
        const int trianglePluses = 2 * row - 1;
        const int numPluses = trianglePluses <= maxPlus 
            ? trianglePluses 
            : 2 * numRows - trianglePluses;
        const int numSpaces = (maxPlus - numPluses) / 2;
        for(int space=1; space <= numSpaces; ++space) {
            cout << " ";
        }
        for (int plus = 1; plus <= numPluses; ++plus) {
            cout << "*";
        }
        cout << endl;
    }
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM