2016-08-13 8 views
-2

Новое на C++, поэтому, если я получу какие-то условия, не обращайте внимания, не высмеивайте меня. Я пытаюсь написать программу, которая будет рисовать, запрашивать у пользователя единицы, а затем использовать функции с использованием дома. Проблема, которую я испытываю, находится в моей функции drawcone. Вот мой прогресс.beginner C++ draw house program

#include<iostream> 
using namespace std; 

void drawcone(int height); 
void drawHorizontalLine(int numXs); 
void draw2VerticalLines(int numSpaces, int numRows); 
void drawOneRow(int numSpaces); 
void getDimensions(int& width, int& height); 
void drawbox(int width, int height); 

int main(){ 

int width; 
int height; 

    getDimensions(height, width); 
    drawcone(height); 
    drawHorizontalLine(width);  
    draw2VerticalLines(width - 2, height - 2); 
    drawHorizontalLine(width); 



return 0; 
} 

void drawbox(int width, int height){ 

    drawHorizontalLine(width);  
    draw2VerticalLines(width - 2, height - 2); 
    drawHorizontalLine(width); 

} 

void drawcone(int height){ 

    int base = height * 2; 

    int r = 0; 

    while (r != height){ 

     int c = 0; 
     while (c != base){ 

      if(c==height-r || c==height+r) 
       cout << "X"; 
      else 
      cout << " "; 
      c++; 

} 
    cout << endl; 
    r++; 
} 
} 

void drawHorizontalLine(int numXs) 
    {    
     int count; 

     for (count = 0; count < numXs; count++){ 
      cout << "X"; 
     } 
     cout << endl; 
    } 


void draw2VerticalLines(int numSpaces, int numRows) 
    {       
     int rowCount; 

     for (rowCount = 0; rowCount < numRows; rowCount++){ 
      drawOneRow(numSpaces); 
     } 
    } 

void drawOneRow(int numSpaces) 
    { 
     int spaceCount; 

     cout << "X"; 
     for (spaceCount = 0; spaceCount < numSpaces; spaceCount++){  
      cout << " "; 
     } 
     cout << "X" << endl; 
    } 

void getDimensions(int& width, int& height){ 

cout << "Enter the width of the house" << endl; 
cin >> width; 

cout << "Enter the height of the house" << endl; 
cin >> height; 

} 

Правильный выход образец будет выглядеть следующим образом

X 
    X X 
X X 
XXXXX 
X X 
X X 
XXXXX 

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

X 
    X X 
    X X 
X  X 
XXXX 
X X 
X X 
XXXX 

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

+1

Что пошаговый код с отладчиком сказать вам, что вызывает проблему? –

+1

у вас есть ширина и высота в неправильном порядке, когда вы вызываете getDimensions, поэтому значения будут flip flopped. – cambunctious

+0

Другая проблема заключается в том, что вы предположили, что основание крыши вдвое превышает высоту, в то время как небольшой просмотр на правильном выходе показывает, что это не так. Вы уже знаете, как должна быть широкая крыша - высота неизвестна. (Но вам не нужно вычислять его высоту.) – molbdnilo

ответ

0

Вот одно решение. Однако конус будет симметричным, только если ширина нечетна.

#include<iostream> 
using namespace std; 

void drawcone(int height); 
void drawHorizontalLine(int numXs); 
void draw2VerticalLines(int numSpaces, int numRows); 
void drawOneRow(int numSpaces); 
void getDimensions(int& width, int& height); 
void drawbox(int width, int height); 

int main() { 

    int width; 
    int height; 

    getDimensions(width, height); 
    drawcone(width); 
    drawHorizontalLine(width); 
    draw2VerticalLines(width - 2, height - 2); 
    drawHorizontalLine(width); 

    return 0; 
} 

void drawbox(int width, int height) { 

    drawHorizontalLine(width); 
    draw2VerticalLines(width - 2, height - 2); 
    drawHorizontalLine(width); 
} 

void drawcone(int width) { 

    for (int i=0; i<(width/2 + width%2); i++) { 

     for (int j=width/2-i; j>0; j--) { 
      cout << " "; 
     } 

     drawOneRow(i*2-1); 
    } 
} 

void drawHorizontalLine(int numXs) 
{ 
    int count; 

    for (count = 0; count < numXs; count++) { 
     cout << "X"; 
    } 
    cout << endl; 
} 


void draw2VerticalLines(int numSpaces, int numRows) 
{ 
    int rowCount; 

    for (rowCount = 0; rowCount < numRows; rowCount++) { 
     drawOneRow(numSpaces); 
    } 
} 

void drawOneRow(int numSpaces) 
{ 
    int spaceCount; 

    cout << "X"; 
    if (numSpaces > 0) { 
     for (spaceCount = 0; spaceCount < numSpaces; spaceCount++) { 
      cout << " "; 
     } 
     cout << "X"; 
    } 
    cout << endl; 
} 

void getDimensions(int& width, int& height) { 

    cout << "Enter the width of the house" << endl; 
    cin >> width; 

    cout << "Enter the height of the house" << endl; 
    cin >> height; 

} 
0

Должно быть достаточно легко отлаживать, оно печатает неправильное количество мест для «крыши» дома. Проблема должна содержаться в while (r != height) блоке пытаются баловаться с else {cout << " ";} с else if(c%2==1){cout << " ";}

+0

Я не уверен, что вы имели в виду. Я все еще новичок, вы могли бы объяснить немного больше? – snophog

0
#include<iostream> 

using namespace std; 

void roof(int height); 
void hLine(int num); 
void vLine(int spaces, int rows); 
void row(int spaces); 
void dimensions(int& width, int& height); 
void box(int width, int height); 

int main() 
{ 
    int width; 
    int height; 
    dimensions(height, width); 
    roof(height); 
    hLine(width);  
    vLine(width - 2, height - 2); 
    hLine(width); 

    return 0; 
} 
void box(int width, int height) 
{ 
    hLine(width);  
    vLine(width - 2, height - 2); 
    hLine(width); 
} 
void roof(int height) 
{ 
    int base = height * 2; 
    int r = 0; 
    while (r != height) 
{ 
    int c = 0; 
    while (c != base) 
    { 
     if(c==height-r || c==height+r) 
      cout << "*"; 
     else 
     cout << " "; 
     c++; 
    }  
    cout << endl; 
    r++; 
} 
} 
void hLine(int num) 
{    
    int count; 
    for (count = 0; count < num*2+1; count++) 
    { 
     cout << "-"; 
    } 
    cout << endl; 
} 
void vLine(int spaces, int rows) 
{       
    int numrows; 
    for (numrows = 0; numrows < rows; numrows++) 
    { 
     row(spaces); 
    } 
} 
void row(int spaces) 
{ 
    int numspaces; 
    cout << "{"; 

    for (numspaces = 0; numspaces < spaces*2+3; numspaces++) 
    {  
     cout << "$"; 
    } 

    cout << "}" << endl; 
} 

void dimensions(int& width, int& height) 
{ 
    cout<<"Enter the width of the house"<<endl; 
    cin>>width; 
    cout<<"Enter the height of the house"<<endl; 
    cin>>height; 
}