Как напечатать полый квадрат? - PullRequest
1 голос
/ 01 октября 2019

Я использовал двумерный цикл for, чтобы сделать функцию создания формы для назначения класса, но я не мог заставить ее сделать полый квадрат;только заполненный. Я передаю в двух аргументах ширину и используемый символ.

Я несколько раз поиграл с этим, но в итоге я просто добавил его с одним недостатком. Он должен напечатать что-то вроде этого

++++
+  +
+  +
++++
#include <iostream>
#include "shapemaker.h"

using namespace std;

void shapemaker::Initialize(int w, int h, char sym)
{
  width = w;
  height = h;
  symbol = sym;
}

int shapemaker::getcanWidth() {return width;}

int shapemaker::getcanHeight() {return height;}

char shapemaker::getSymbol() {return symbol;}

void shapemaker::setSymbol(char s) { symbol = s; }

void shapemaker::setcanWidth(int w) { width = w; }

void shapemaker::setcanHeight(int h) { height = h; }

void shapemaker::drawmidHorline()
{
  symbol = getSymbol();
  int drawingheight = getcanHeight();
  int drawingwidth = getcanWidth();
  double midpoint = getcanHeight()/2;
  for(int x = 0; x < drawingwidth; x++)
  {
    for(int y = 0; y < drawingwidth; y++)
    {
      if(x == midpoint)
      cout << getSymbol();
    }
    cout << endl;
  }
}

void shapemaker::drawmidVertline()
{
  symbol = getSymbol();
  int drawingheight = getcanHeight();
  int drawingwidth = getcanWidth();
  double midpoint = getcanWidth()/2;

  for(int x = 0; x < drawingwidth;x++)
  {
    for(int y = 0; y < drawingheight; y++)
    {
      if(y == midpoint)
      {
        cout << getSymbol();
      }
      cout << " ";
    }
    cout << endl;
  }
}

void shapemaker::drawWidthsizedFullSquare()
{
  symbol = getSymbol();
  int drawingwidth = getcanWidth();
  for(int x = 0; x < drawingwidth;x++)
  {
    cout << symbol;
    for(int y = 0; y < drawingwidth; y++)
    {
      cout << symbol;
    }
    cout << endl;
  }
}

void shapemaker::drawWidthsizedOpenSquare()
{
  symbol = getSymbol();
  int drawingwidth = getcanWidth();
  for(int x = 0; x < drawingwidth;x++)
  {
    cout << getSymbol();
    for(int y = 0; y < drawingwidth; y++)
    {
      if(x == 0 || x == drawingwidth-1)
      cout << getSymbol();
    }
    cout << getSymbol();
    cout << endl;       
  }
}

1 Ответ

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

Если вы хотите drawWidthsizedOpenSquare напечатать это

++++
+  +
+  +
++++

, вы должны написать этот метод как:

void shapemaker::drawWidthsizedOpenSquare()
{
  symbol = getSymbol();
  int drawingwidth = getcanWidth();
  for(int x = 0; x < drawingwidth;x++)
  {
    for(int y = 0; y < drawingwidth; y++)
    {
      if(x == 0 || x == drawingwidth-1 || y == 0 || y == drawingwidth-1)  // border cell case
      {
        cout << getSymbol();
      }
      else
      {
        cout << " ";
      }
    }
    cout << endl;       
  }
}
...