Problem z choinką w C++

0

Witam. Dostałem za zadanie zrobić choinkę w której muszę wskazać wysokość pierwszego poziomu i ilość poziomów i musi ona wyglądać jak ta na obrazku dla takich danych.
screenshot-20200330194027.png
Napisałem kod i niestety mam problem z poziomami, mianowicie po podaniu x=2 i y=3 drugi poziom powinien mieć trzy "X", kolejny 5 a potem 7 u mnie niestety jest inaczej i wygląda to tak:
screenshot-20200330194426.png
Potrzebuję identycznej choinki żeby zaliczyć zadanie. Jest ktoś w stanie pomóc?
Oto mój kod:

#include <iostream>
 
using namespace std;
 
void poziomy(int f, int n, int s)
{
    int i, j, k = 2 * s - 2;
 
    for (i = 0; i < f + 1; i++)
        k--;

    for (i = f ; i < n; i++)
    {
 
        for (j = 0; j < k; j++)
        {
            cout << (" ");
        }
 
        k = k - 1;
        for (j = 0; j < i ; j++)
        {
            cout << ("X ");
        }
 
        cout << ("\n");
    }
}
 
void choinka(int h, int wysokosc)
{
    int a = wysokosc + h + 1;
    int start = 1, stop = 1, x = wysokosc;
    while (stop < a - 1)
    {
        stop = start + x;
        poziomy(start, stop, a);
        x++;
        start = 1;
     
    }
}
 
int main()
{
    int liczba_poziomow;
    int wysokosc;
    cout << ("x = ");
    cin >> (wysokosc);
    if(wysokosc >0)
    {
    cout << ("y = ");
    cin >> (liczba_poziomow);
    if (liczba_poziomow>0)
    {
    choinka(liczba_poziomow, wysokosc);
    }
    else
    {
        cout << "Liczba \"y\" powinna byc wieksza od 0!";
    }
    }
    else
    {
        cout << "Liczba \"x\" powinna byc wieksza od 0!";
    }
    return 0;
}
0
  for (i = f; i < n; i++)

Tutaj iterujesz i o jeden

for (j = 0; j < i; j++)
        {
            cout << ("X ");
        }

A tutaj wypisujesz x. Zauważ ,że skoro iterujesz do i to zawsze tych x będzie mieć +1. Czyli 1,2,3,4 A powinno być 1,3...

0

Zmieniłem iterację ale dalej nie jest dobrze, drugi trójkąt jest taki sam jak pierwszy i na dodatek przesunięty.
screenshot-20200330211101.png

0

Jako ,że się starasz to dam ci gotowca.Zrobione na szybko bo teraz nie mam czasu. Ogólnie to działa ale na pewno nie jest optymalnie. W nocy spojrzę i poprawię.

#include <iostream>

using namespace std;

void choinka(int f, int n)
{

    int k = f + n - 2;
    for (int z = 0; z < n; ++z) {
        int r = k;
        for (int i = 0; i < z+f; ++i)
        {

            for (int j = 0; j < r; ++j)
            {
                cout << (" ");
            }

            r--;
            for (int j = 0; j < (i * 2) +1; ++j)
            {
                cout << ("X");
            }
            cout << ("\n");
        }
    }
}



int main()
{
    int liczba_poziomow;
    int wysokosc;
    cout << ("x = ");
    cin >> (wysokosc);
    if (wysokosc > 0)
    {
        cout << ("y = ");
        cin >> (liczba_poziomow);
        if (liczba_poziomow > 0)
        {
            choinka(wysokosc, liczba_poziomow);
        }
        else
        {
            cout << "Liczba \"y\" powinna byc wieksza od 0!";
        }
    }
    else
    {
        cout << "Liczba \"x\" powinna byc wieksza od 0!";
    }
    return 0;
}

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