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 :
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