Błąd rachunkowy w c++

0

Witajcie. Piszę program rysujący trójkąt w konsoli z podanego znaku oraz podstawie przez użytkownika.
Dla liczb parzystych trójkąt ten nie jest poprawny bo nie ma "wierzchołka" co jest pokazane na obrazku(poniżej) przy numerze 1.
Dla liczb nieparzystych trójkąt ten jest poprawny więc tutaj jest ok.

Obrazek :
user image

Wiem gdzie jest błąd ale najpierw kod zanim zacznę omawiać :


#include <iostream>
using namespace std;

int main()
{
    char c;
    int podstawa, biale_znaki, conpod;
    cout << "Podaj dlugosc podstawy: ";
    cin >> podstawa;
    cout << "Podaj znak ktory bedzie budowal trojkat: ";
    cin >> c;
       // if(podstawa % 2 == 0)
        //podstawa += 1;
    conpod = podstawa;
    while(podstawa > 0)
    {
        biale_znaki = podstawa/2;
        for(int i = 0; i < biale_znaki; i++)
            cout << " ";
        for(int i = 0; i < (conpod - (2*biale_znaki)); i++)
            cout << c;
        for(int i = 0; i < biale_znaki; i++)
            cout << " ";
        cout << "\n";
        podstawa-=2;
    }

    cin.sync();
    cin.get();
    return 0;
}

przy linijce :
biale_znaki = podstawa/2; dla podanego boku = 18 sprawa jest jasna bo: 18 / 2 = 9
wtedy w drugiej pętli for tj: for(int i = 0; i < (conpod - (2*biale_znaki)); i++) mamy: for(int i = 0; i < 0; i++) co sie nie wykona ani razu dlatego ucieka mi ten "wierzchołek".

Moim rozwiązaniem jest

if(podstawa % 2 == 0) podstawa += + 1;

Wtedy wszystko jest ok i długość trójkąta o parzystej podstawie zgadza się bo tak się nie zgadzała jak widać na rys, ale jak to inaczej zrobić ?(chyba że mój sposób jest poprawny chociaż wątpie). Nie mam pomysłów

0

Edit: iooi ma rację; ja także nie potrafię sobie takiego trójkąta wyobrazić ;)

0

Ja też nie, bo nie wyobrażam sobie trójkąta o podstawie z parzystej liczby znaków i wierzchołku z nieparzystej liczby (jednego znaku).
Jeśli chcesz jednak podstawy mieć zawsze nieparzyste (i dla podstawy równej 10 rysować tak jak dla 9 lub 11), to wystarczy zmienić drugą pętlę:

for (int i = podstawa; i <= conpod; i++)

</del>(twoje rozwiązanie jest ok, moje ma bugi)

0

O ja moja wtopa zwiódł mnie wygląd wizualny. Dzięki !

Należy również zmienić while(podstawa > 0) na while(podstawa >= 0)
@Zmieniłbym to w głównym poście ale jakoś nie moge go edytować idk why .

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