прямоугольники на сетке

Вот код квадратной сетки 25 x 25, состоящей из точек. Мне нужно получить ввод от пользователя, x1, x2, y1, y2 и двух символов, таких как @ и /, и создать прямоугольник с одним символом, заполняющим внутреннюю часть, и одним, очерчивающим прямоугольник. Я не уверен, как обработать эти входные данные в цикле и создать указанный прямоугольник. Это заголовочный файл....

// Rectangle.h

#ifndef Rectangle_h
#define Rectangle_h

#include <iostream>
using namespace std;

class Rectangle
{
private:
float length, width, perimeter, area;
int a, i, j, h, x1, x2, y1, y2;
char inner;

public:
Rectangle();    // default constructor

void printGrid();
void setValues();
void setIntChar();


};

#endif

Это исходный код....

void Rectangle::setValues()
{
do
{
    cout << "Enter x1, x2, y1, and y2 such that x1 < x2 and y1 < y2:\n";
    cin >> x1;
    cin >> x2;
    cin >> y1;
    cin >> y2;
}
while(x1 >= x2 || y1 >= y2);

cout << endl << "Rectangle accepted.\n\n";
}

void Rectangle::setIntChar()
{
cout << "Enter a character to fill the interior of the rectangle: \n" << endl;
cin >> inner;
cout << endl << endl;
}

void Rectangle::printGrid()
{
for(i = 0; i < 25; i++) // prints 25 rows of 25 dots and a space after each dot
{   
    if(i < 16)
    cout << 25 - i << " ";// prints 25 - 10 in descending order 

if(i > 15)
    cout << 25 - i << "  "; // prints 9 - 1 in descending order

for(j = 0; j < 25; j++) // prints a line of 25 dots and 2 spaces after each dot
    cout << ".  ";

for(h = 0; h < 25; h++) // prints a line of 25 double-spaces
    cout << "  ";

cout << endl;       // ends the line after each iteration       
}

cout << "   ";

for (i = 1; i <= 25; i++)
{
    if(i < 10)
        cout << i << "  ";

    if(i > 9)
    cout << i << " ";
}

cout << endl << endl;

}

Это основная функция....

#include "Rectangle.h"

///// main /////

int main()
{
Rectangle grid; // creates an object of the Rectangle class

grid.setValues();
grid.setIntChar();
grid.printGrid();
}

person user3254558    schedule 06.02.2014    source источник
comment
Предполагая, что это задание класса, вероятно, будут вычтены баллы для вас, используя магические числа, такие как 25, по всему коду. Вы, вероятно, уже узнали о константах. Возможно, нет. Для ввода вам рассказали про cin и cout, да? Не беспокойтесь о петле. Просто получите их и используйте для вызова вашей функции.   -  person m24p    schedule 06.02.2014
comment
Кажется, я не понимаю вашего совета. Прямоугольник должен появиться в сетке. Просто получите их и используйте для вызова вашей функции. Не могли бы вы немного пояснить это для меня, пожалуйста?   -  person user3254558    schedule 07.02.2014


Ответы (1)


Ну, я не знаю, как далеко вы изучили C++, но, кажется, вы используете классы? Какие все переменные-члены класса Rectangle? Предположительно, это что-то вроде

class Rectangle {
    public:
        Rectangle();  // constructor sets member variables to default values
        void getInputFromUser();  // using stdout and stdin, prompts the user for x1, y1, x2, y2, line char, fill char, and sets the member variables to these values
        void printGrid(); // uses member variables to determine how to print the grid

        ...

    private:
        // private methods

        ...

        // private variables

        int m_x1;
        int m_x2;
        int m_y1;
        int m_y2;
        char m_lineChar;
        char m_fillChar;

        // static constants

        static const int kMinXValue; // set to 0 in the cpp file
        static const int kMinYValue; // set to 0 in the cpp file
        static const int kMaxXValue; // set to 25 in the cpp file
        static const int kMaxYValue; // set to 25 in the cpp file
};

Итак, в вашем классе ваша реализация getInputFromUser() будет иметь несколько строк кода, таких как cout << "Please enter the top left corner's x value << endl; и cin >> m_x1;.

Ваша реализация printGrid() будет иметь несколько строк кода, таких как for(int y = kMinYValue; y < kMaxYValue; y++) { // iterate through the rows и if( y == m_y1 || y == m_y2) { // we need to print the m_lineChar value if the x value is in range.

Надеюсь, это достаточно отвечает на ваш вопрос, чтобы вы могли решить проблему. Если вам нужна конкретная помощь с конкретными проблемами, вам нужно будет более конкретно рассказать о том, что вы сделали, каков ваш код и в чем заключается ваша проблема с кодом, который у вас есть.

person m24p    schedule 07.02.2014
comment
Я добавил свой заголовочный файл, исходный код и основную функцию. Это то, с чем я работаю. Моя сетка выглядит хорошо, она именно такая, как я хочу. Я просто не знаю, как получить ввод от пользователя и создать прямоугольник в моей сетке. - person user3254558; 07.02.2014
comment
У вас уже есть ввод от пользователя. Я не понимаю проблемы? Вам также нужен один для внешнего символа, поэтому создайте функцию, такую ​​​​как setIntChar, которая делает это для вашего внешнего символа, и соответствующую переменную-член для ее хранения. Теперь в вашем коде: for(j = 0; j < 25; j++) // prints a line of 25 dots and 2 spaces after each dot Я полагаю, вы хотите заменить точку правильным символом? Затем это цикл for для добавления условных выражений, проверяющих i и j по x1, x2, y1 и y2, чтобы определить, что печатать. - person m24p; 07.02.2014
comment
Да, я хочу заменить точку выбранным пользователем символом. Я пробовал проверять i и j по x1, x2 и т. д. В результате символ печатается в начале или в конце строки, представленной переменной i. Проблема в том, что я не могу понять, как заменить точки на входной символ, чтобы сформировать прямоугольник. - person user3254558; 07.02.2014
comment
Сделайте это в том месте, где вы бы напечатали точку. - person m24p; 07.02.2014
comment
Псевдокод: if i,j is inside rectangle print inside rectangle char else if i,j is on edge print edge char else print the dot - person m24p; 07.02.2014
comment
Прямо здесь, в цикле for. Замена кода, в котором вы печатаете точку. - person m24p; 07.02.2014
comment
Пожалуйста, укажите, были ли мои комментарии полезными или мой ответ решил вашу проблему, спасибо! - person m24p; 07.02.2014
comment
Я не думаю, что понимаю. Я так понимаю, вы имеете в виду замену cout ‹‹ . ; с cout ‹‹ внутренний ; - person user3254558; 07.02.2014
comment
Я очень ценю вашу помощь. Мой профессор, кажется, думает, что эта информация интуитивно понятна. - person user3254558; 07.02.2014
comment
Добавьте операторы if вокруг этого cout. Извините, комментарии плохо форматируют код или псевдокод. Но вы хотите сделать cout << ". " только в том случае, если он находится за пределами прямоугольника. Итак, ваш цикл for нуждается в if, else if, else, как упоминалось в предыдущем комментарии. Пожалуйста, перечитайте мой псевдокод. Трудно объяснить это лучше в комментариях здесь. - person m24p; 07.02.2014
comment
Если он в прямоугольнике, вам нужно сделать cout << getIntChar() << " "; вместо cout << ". "; - person m24p; 07.02.2014
comment
Надеюсь, это имеет смысл, и вы примете мой ответ о переполнении стека. - person m24p; 07.02.2014
comment
Ваши комментарии направили меня в правильном направлении. Я смог заставить его делать почти то, что я хочу. - person user3254558; 08.02.2014
comment
Потрясающий. Удачи с классом! - person m24p; 08.02.2014