Answer the question
In order to leave comments, you need to log in
How to draw a tree choosing the direction of the branches?
Hello. It is necessary to write a c++ program in which the user enters a number from 1 to 3. 1 - means that the tree branch will "grow" to the left, 2 - to the right, 3 - the end of the program execution, the "trunk" should be at the beginning. Accordingly, it should look something like this:
Все символы: \/, |
Сначала выводится ствол:
|
Пользователь вводит, к примеру, 1:
\/
|
Снова 1:
\/
\/
|
Теперь 2:
\/
\/
\/
|
И 1:
\/
\/
\/
\/
|
Answer the question
In order to leave comments, you need to log in
Here)
#include <iostream>
#include <vector>
using namespace std;
int main(){
string v = "\\/", s = " |"; // v - ветка, s - ствол
vector <string> all; // все дерево
int q; // запрос цифры
int prevQ; // предыдущий запрос
int posV = 0, posS = 0, posA = 0; // позиция ветки, ствола, ветки+ствола
int step = 2; // шаг изменения позиции
string spacesV = "", spacesS = ""; // пробелы ветки, ствола
while(true){ // цикл повторяется бесконечно
cin >> q; // спрашиваем цифру у пользователя
if (q == 1){ // если цыфра 1
if (prevQ == 2) // если предыдущая цыфра была 2
posV--; // уменьшаем позицию ветки на 1
posV -= step; // уменшаем позицию ветки steр (в этом случае на 2 )
posS+=step; // увеличиваем на step позицию ствола
prevQ = 1; // записываем что эта цифра была 1
}
if (q == 2){ // если цифра 2
if (prevQ == 1) // если предыдщая цифра была 1
posV++; // увеличиваем позицию ветки на 1
posV += step; // увеличиваем позицию ветки на step
prevQ = 2; // записываем что это была цифра 2
}
if (q == 3) // если цифра 3
break; // выходим из цикла
system("cls"); // очистка экрана
spacesV = ""; // пробелы перед веткой очищаются
spacesS = ""; // и перед стволом тоже
for(int i = 0; i < posS + posV; i++) // цикл который увеличивает количество
spacesV +=" "; // пробелов ветки на posS+posV
for(int i = 0; i < posS; i++) // цикл что увеличивет количество
spacesS +=" "; // пробелов ствола на posS
all.push_back(spacesV + v); // добавляем в вектор пробелы веток + ветку
if(q == 1) // если цифра 1
for(int i = 0; i < all.size(); i++) // каждому элементу масива веток
all[i] = " " + all[i]; // добавляем два пробела
for(int i = all.size()-1; i >= 0; i--) // выводим в обратном порядке
cout << all[i] << endl; // все элементы массива
cout << spacesS << s << endl; // выводим пробелы ствола и сам ствол
}
return 0;
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question