Построение треугольника с помощью циклов c ++ - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь построить треугольник, в котором пользователь указал базу и высоту. Когда эти введенные значения различаются (база! = Высота), программа теряет самообладание и застревает в цикле рисования треугольника.

Я пытался несколько раз изменить код, но, пожалуйста, относитесь ко мне как к начинающему программисту.

//BUILD TRIANGLE//
#include <string>
#include <iomanip>
#include <iostream>

int main()
{
    std::cout << "\nEnter base and height:\n";
    int height{0}; int base{0};
    std::cin >> base >> height;

    std::string bottom(base, '*');
    std::string top = "*";
    int middlerows = height - 1;
    int middlespacechars;
    std::cout << top << std::endl;

    for (middlespacechars = 0; 
         middlerows != 1 || middlespacechars != base - 2; 
         ++middlespacechars, --middlerows) {

        std::string middlespace(middlespacechars, ' ');
        std::cout << "*" << middlespace << "*\n";
    }

    std::cout << bottom << "\n" << std::endl;
    std::cout << "^TRIANGLE\n";
    std::cout << "BASE = " << base << std::endl;
    std::cout << "HEIGHT = " << height << std::endl;
    std::cout << "goodbye" << "\n" << std::endl;
}

Вывод полностью сшитый, со звездочками по экрану без заметной формы. Когда я добавляю значения, где base = height, тем не менее, появляется довольно маленький прямоугольный треугольник.

Ответы [ 2 ]

2 голосов
/ 09 июля 2019

С вашим кодом вы можете рисовать только те треугольники, у которых base равно height.

Если вы измените условие остановки в цикле for, вы можете получить то, что, вероятно, хотите получить:

for (middlespacechars = 0; middlerows != 1 || middlespacechars != base - 2; ++middlespacechars, --middlerows) {

... into ...

for (middlespacechars = 0; middlerows > 1 || middlespacechars < base - 2; ++middlespacechars, --middlerows) {

Была большая вероятность того, что если base и height отличаются, то условие остановки не будет достигнуто. Цикл for в вашем коде остановится, если middlerows будет 1 и middlespacechars будет base - 2 в тот же момент.

Проверьте это здесь .

0 голосов
/ 09 июля 2019
//C++ program to display hollow star pyramid

#include<iostream>
using namespace std;

int main()
{
   int rows, i, j, space;

   cout << "Enter number of rows: ";
   cin >> rows;

   for(i = 1; i <= rows; i++)
   {
      //for loop to put space in pyramid
      for (space = i; space < rows; space++)
         cout << " ";

      //for loop to print star
      for(j = 1; j <= (2 * rows - 1); j++)
      {
         if(i == rows || j == 1 || j == 2*i - 1)
            cout << "*";
         else
            cout << " ";
      }
      cout << "\n";
   }
   return 0;
}

OUTPUT:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...