Небольшая поправка к моему назначению c ++ пирамиды? как мне это сделать? - PullRequest
1 голос
/ 11 октября 2019

Эта задача была мне задана для домашней работы для моего c++ класса, и я не могу ее понять.

Задача: Create a program that will create a pattern in which is a pyramid. The user should enter the maximum number of rows to be output. Use a while loop that confirms the number of rows is between 1 and 9 inclusive. Next 1 should be output in the first row, 222 output in the second row, 33333 should be output in the third row, etc. For example if the user entered 7 the following would be output.

Код, который у меня есть сейчасделает это почти точно, вместо вывода, например, 222 для второй строки, он выводит 2 2 Вот как выглядит мой код:

    #include <iostream>
using namespace std;
int main()
{
    int rows, count = 0, count1 = 0, k = 0;
    cout << "Please enter the number of rows." << endl;
    cin >> rows;
    while (rows > 9)
    {
        cout << "That is an invalid selection, please choose up to 9 rows." << endl;
        cin >> rows;
    }
    for (int i = 1; i <= rows; ++i)
    {
        for (int space = 1; space <= rows - i; ++space)
        {
            cout << " ";
            ++count;
        }
        while (k != 2 * i - 1)
        {
            if (count <= rows - 1)
            {
                cout << i << " ";
                ++count;
            }
            k++;
        }
        count1 = count = k = 0;
        cout << endl;
    }
}

Любая помощь приветствуется, я предполагаю, что она должна простобудь маленьким твиком.

1 Ответ

0 голосов
/ 11 октября 2019

Этот цикл

    while (k != 2 * i - 1)
    {
        if (count <= rows - 1)
        {
            cout << i << " ";
            ++count;
        }
        k++;
    }
    count1 = count = k = 0;

не имеет смысла. Например, переменная count1 никогда не используется, за исключением оператора

    count1 = count = k = 0;

. Поэтому неясно, для чего предназначена эта переменная.

Использование манипуляторов из заголовка <iomanip> youможет написать пирамиду, используя только один цикл.

Вот демонстрационная программа

#include <iostream>
#include <iomanip>

int main() 
{
    while ( true )
    {
        const int MAX_HEIGHT = 9;

        std::cout << "Enter the height of a pyramid not greater than "
                  << MAX_HEIGHT << " (0 - exit): ";

        int height;

        if ( not ( std::cin >> height ) or ( height <= 0 ) ) break;

        if ( MAX_HEIGHT < height ) height = MAX_HEIGHT;

        std::cout << '\n';

        for ( int i = 0; i < height; i++ )
        {
            std::cout << std::setw( height - i ) << std::setfill( ' ' ) << i + 1;
            std::cout << std::setw( 2 * i + 1 ) << std::setfill( char( i + '1' ) ) << '\n';
        }

        std::cout << '\n';
    }

    return 0;
}

Ее вывод может выглядеть следующим образом

Enter the height of a pyramid not greater than 9 (0 - exit): 1

1

Enter the height of a pyramid not greater than 9 (0 - exit): 2

 1
222

Enter the height of a pyramid not greater than 9 (0 - exit): 3

  1
 222
33333

Enter the height of a pyramid not greater than 9 (0 - exit): 4

   1
  222
 33333
4444444

Enter the height of a pyramid not greater than 9 (0 - exit): 5

    1
   222
  33333
 4444444
555555555

Enter the height of a pyramid not greater than 9 (0 - exit): 6

     1
    222
   33333
  4444444
 555555555
66666666666

Enter the height of a pyramid not greater than 9 (0 - exit): 7

      1
     222
    33333
   4444444
  555555555
 66666666666
7777777777777

Enter the height of a pyramid not greater than 9 (0 - exit): 8

       1
      222
     33333
    4444444
   555555555
  66666666666
 7777777777777
888888888888888

Enter the height of a pyramid not greater than 9 (0 - exit): 9

        1
       222
      33333
     4444444
    555555555
   66666666666
  7777777777777
 888888888888888
99999999999999999

Enter the height of a pyramid not greater than 9 (0 - exit): 0
...