Choinka w C - problem

0

Witam, muszę stworzyć choinkę wyglądającą mniej więcej tak (zdjęcie poniżej), ze skalującym się pniem i z możliwością podania ilości poziomów. Po kilku nieudanych próbach udało mi się stworzyć coś takiego, niestety nie mogę dojść do tego jak po podaniu ilości poziomów zostaną one prawidłowo stworzone, ponieważ raz to działa raz nie np. gdy podaję 5 program tworzy 5 poziomów, natomiast gdy chcę 10 poziomów, program tworzy ich mniej, oraz jak zostawić jedynie podstawę ostatniego(dolnego) i pierwszego(górnego) poziomu.

#include <stdio.h> 
#include <stdlib.h> 
 
 
void poziomy(int f, int n, int toth)
{
    int i, j, k = 2 * toth -2;
 
 
    for (i = 0; i < f -1 ; i++)
        k--;
 
    for (i = f   ; i < n; i++)
    {
 
        for (j = 0; j < k; j++)
        {
            printf(" ");
        }
        for (j = 1; j <= (2 * i - 1); j++)
        {
 
            if (i == k || j == 1 || j == (2 * i - 1))
            {
                printf("*");
            }
            else if (i == n - 1 )
            {
                printf("*");
            }
            else if (f == 1 &&( n == (i +1)))
            {
                printf("*");
            }
         
            else
            {
                printf(" ");
            }
 
        }
         
        k = k - 1;
 
        printf("\n");
    }
}
 
void choinka(int h)
{
    int a = h * 3;
    int start = 1, stop = 0, diff = 3;
    while (stop < a + 1) 
    {
        stop = start + diff;
        poziomy(start, stop, a);
        diff++;
        start = stop - 2;
    }
}
void pien(int n)
{
    int a = n* 3;
    int i, j, k = 2 * a - 4;
 
    for (i = 1; i <= a / 3; i++) {
 
        for (j = 0; j < k; j++)
            printf(" ");
 
        for (j = 1; j <= 6; j++)
            printf("#");
 
        printf("\n");
    }
}
int main()
{
 
    int ht=6;
     
    choinka(ht);
    pien(ht);
 
    return 0;
}
2

Wprzód zanim kod, dobrze byłoby przemyśleć od strony teoretycznej:

  1. Jak powinna wyglądać minimalna choinka? (ile linii i ile wierszy na poszczególne części fragmenty – gałęzie górne, wewnętrzne, dolne, pień)
  2. Jakie zależności powinny spowodować, że każda z obu jej części – raz: wszystkie gałęzie, a dwa: pień – będzie skalować się w zależności od liczby poziomów? (domniemywam, że 1 "poziom" = 1 linia u Ciebie)
  3. Jaka powinna być zależność między skalowaniem się pnia a skalowaniem się gałęzi?
0

Jeśli chodzi o ilość poziomów to powinno wystarczyć byś zamiast

while (stop < a + 1)

napisał:

for (int i =0 ;i<h; ++i) 

EDIT: Widywałem gorszy kod tutaj, ale przez dużą ilość jednoliterowych zmiennych paskudnie się to czyta.

1 użytkowników online, w tym zalogowanych: 0, gości: 1