Распечатать параллелограмм с помощью функции C ++ - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь напечатать ромб с nRows. Первая программа работала, но потом, когда я разбиваю ее на функции, следуя этой инструкции: GetNRows (void); DrawShape (int nRows); numberSpaces (int nRows, int row); numberStars (int nRows, int row); PrintChars (int n, char ch); Я не знаю, как передавать по значению в функцию и обновлять значение каждый раз при входе. Взгляните на мой код.

#include <iostream>
using namespace std;

int getNRows(int &);
int calcNumSpace( int nRows, int row );
int calcNumStars( int nRows, int row );
void printChars( int n, char ch );
void drawShape( int nRows );

int main()
{
    int nRows;
    getNRows( nRows );
    drawShape( nRows );
    return 0;
}
int getNRows(int &nRows)
{
    do
    {
        cout << "Enter number of rows (3-23) :";
        cin >> nRows;
    }while ( nRows > 23 || nRows < 3);
    if ( nRows % 2 == 0)
    {
        nRows += 1;
    }
    return nRows;
}
void drawShape( int nRows )
{
    int n, row;
    for( row = 0; row < nRows; row++ )
    {
        n = calcNumSpace( nRows, row );
        printChars( n, ' ' );
        n = calcNumStars(nRows, row );
        printChars( n, '*' );
        cout << endl;
    }
}
int calcNumSpace( int nRows, int row )
{
    int space;
    !!! What shoud I do here to update space every time row increase 1 ???
    return space;
}
int calcNumStars( int nRows, int row )
{
    int stars;
    same for space above!!!
    return stars;
}
void printChars( int n, char ch )
{
    int i;
    for(i = 0; i < n; i++)
    {
        cout << ch;
    }
}

Например:

Enter number of rows (3-23) :5
  *
 ***
*****
 ***
  *
Program ended with exit code: 0

Вот моя первая программа:

#include <iostream>
using namespace std;

int main()
{
    int n, i=0 , j=0, k=0, space, stars;
    do
    {
        cout << "Enter number of rows (3-23) :";
        cin >> n;
    }while ( n > 23 || n < 3);
    if ( n % 2 == 0)
    {
        n += 1;
    }
// print top half
    space = n / 2;
    stars = 1;
    for( i = 0; i < n / 2 + 1; i++ )
    {
        for( j = 0; j < space; j++ )
        {
            cout << " ";
        }
        for( k = 0; k < stars; k++)
        {
            cout << "*";
        }
        cout << endl;
        stars = stars + 2;
        space = space - 1;
    }
// print bottom half
    space = 1;
    stars = n - 2;
    for( i = 0; i < n / 2; i++)
    {
        for( j = 0; j < space; j++)
        {
            cout << " ";
        }
        for( k = 0; k < stars; k++)
        {
            cout << "*";
        }
        cout << endl;
        space = space + 1;
        stars = stars - 2;
    }
 
 return 0;
}

1 Ответ

0 голосов
/ 03 августа 2020

Вот подсказка для части calcNumSpace.

Вы должны думать об этом как о простых прямых линиях:

введите описание изображения здесь

Итак, есть две разные строки в зависимости от ввода x (он же row).

Итак, ваш код будет:

if (x <= X0)
{
     space = -x + Y0
}
else
{
     space =  x - Y0
}    

Итак, все Теперь вам нужно выяснить значения X0 и Y0. Я оставлю это вам в качестве упражнения. Подсказка: они зависят только от nRows.

Другой совет: поскольку линии симметричны c, вы можете использовать abs вместо оператора if. Например,

 space = -x + Y0
 space = abs(space);

Для функции calcNumStars вы можете применить тот же logi c.

...