G
G
gridex2021-12-14 20:47:17
C++ / C#
gridex, 2021-12-14 20:47:17

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:

spoiler
Все символы: \/, |
Сначала выводится ствол:
 |
Пользователь вводит, к примеру, 1:
\/
 |
Снова 1:
\/ 
 \/ 
  |
Теперь 2:
  \/ 
\/ 
 \/ 
  |
И 1:
 \/   
   \/ 
 \/ 
   \/ 
    |


That's about it. Maybe I didn’t explain it very clearly, but the example shows what should come out. If you don’t write code, then at least describe in words how you can implement this or, maybe, a link to such a task, if it is typical.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
Sergo Zar, 2021-12-15
@gridex

Here)
61b92980cc4d2102149926.png

#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;
}

I can fully explain if needed.
ps thanks for the idea for the lab)

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question