Dreieck
-
Moin moin,
ich soll ein Dreieck auswerfen wo Breite und Höhe eingelesen werden können.
Ich bekomm auch ein Dreieck hin, aber nur bei gleichen Seiten. Bei unterschiedlichen Seiten zerhagelt es jegliche Formatirung.
int breite,hoehe,position,nochmal; bool neubeginn,neubeginn2; do { int x=35,y=0,i,weite=2; neubeginn=false; cout<<" Bitte geben sie die Hoehe(min 6 max 24) des Dreiecks an"; cin>>hoehe; cout<<" Bitte geben sie die Breite(min 6 max 24) des Dreiecks an"; cin>>breite; cout<<"Wollen sie das Dreieck auf dem Kopf darstellen? Nein[1] oder Ja[2]"; cin>>position; switch (position) { case 1: { if (((breite>5) && (hoehe>5)) && ((breite<25) && (hoehe<25))) { cout<<setw(x); //Ausgabe des obersten Punktes cout<<"*"<<endl; x=x--; for (i=3; i<=hoehe; i++) { cout<<setw(x); cout<<"*"<<setw(weite)<<"*"<<endl; x--; weite=weite+2; } cout<<setw(x); for (i=0; i<breite; i++) { cout<<"*"; cout<<char(00); } cout<<endl<<endl; break; } else { cout<<"Falsche Eingabe"<<"\n"; neubeginn=true; break; } } break; case 2: { if (((breite>5) && (hoehe>5)) && ((breite<25) && (hoehe<25))) { x=x-breite; cout<<setw(x); for(i=1; i<=breite; i++) { cout<<"*"; cout<<char(00); } cout<<endl; x++; for (i=3; i<=hoehe; i++) { cout<<setw(x); cout<<"*"<<setw((breite*2)-weite-2)<<"*"<<endl; x++; breite--; } cout<<setw(34)<<"*"<<endl; break; } else { cout<<"Falsche Eingabe"<<"\n"; neubeginn=true; break; } } break;Das ist mein Ansatz, aber ich komm überhaupt nicht weiter.
gruß
Ferdi
-
Kleiner Denkstupser: In jeder Zeile rückst du den Stern um 1 weiter. Dieser Abstand 1 passt aber nur genau für den Fall hoehe = breite. Wenn das Dreieck doppelt so breit wie hoch ist, müsstest du jeden Stern um 2 weiterrücken, wenn es dreimal so breit wie hoch ist, um 3 etc.
-
Nicht nur, dass dein Quellcode extrem unübersichtlich ist und so aussieht, als ob er von vielen verschiedenen Personen wäre (einmal weiß der programmierer, dass x-- reicht und das andere mal schreibt er x=x-- etc), mal ne alternative zu setw() - vll ja nen kleiner denkanstoß:
#include <iostream> void male_dreieck(int breite, int hoehe) { const float m = float(breite)/hoehe; for(int i=0; i != hoehe; ++i) { for(int j=0; j < breite-i*m; ++j) { std::cout << "#"; } std::cout << "\r\n"; } std::cout << std::endl; } int main() { int breite; std::cin >> breite; int hoehe; std::cin >> hoehe; male_dreieck(breite, hoehe); }bb