Dreieck in Konsole
-
Hi,
ich will ein Dreieck in eine Konsole ausgeben!
Ich will das Dreieck mit hilfe von Schleifen Programmiern!
Könnt ihr mir helfen und ein paar Vorschläge posten?Danke
-
edit: Heute ist volkard spaßbefreit.
-
Warum schreibst du "will", wenn du Hausaufgaben machen musst?
Zeig mal, was du dir zu dem Thema gedacht hast (und das sollte bitte mehr sein, als
int main() { for ( // ich weiß nicht weiter), dann wird dir gerne bei konkreten Fragen oder Problemen geholfen. Wenn du einfach nach Komplettlösungen fragst, bekommst du nur so Klugscheißerlösungen wie die von 314159265358979.
-
Dabei habe ich mir so viel Mühe gegeben mit den geschachtelten if-Schleifen, und jetzt wurde der Code einfach gelöscht.

edit von volkard: Link zugefügt.
edit von PI: Natürlich gibt es die.
label: if(cond) { statements; goto label; }
-
Dennis1995 schrieb:
Hi,
ich will ein Dreieck in eine Konsole ausgeben!So eins? (recht leicht)
* ** *** **** ***** ******Oder so eins? (viel schwieriger)
* *** ***** ******* ********* ***********
-
Och, jetzt hast du den ganzen Lehreffekt kaputt gemacht
. Wir hatten so viele dumme Spaßlösungen in diesem Thread, genau wie ich es nach der schwachen Threaderöffnung vorausgesagt habe. Und jetzt stellst du sogar noch produktive Fragen, die das Thema voranbringen!
-
volkard schrieb:
Oder so eins? (viel schwieriger)
* *** ***** ******* ********* ***********Viel schwieriger ? Find' ich nicht.
#include <iostream> #include <string> using namespace std; int main(void){ for(short a=0;a<6;a++){ // Erstes Dreieck for(short b=0;b<a;b++) cout<< '*'; cout<<endl; } for(short a=0;a<6;a++){// Zweites string white_space(6-a,' '); cout<<white_space; for(short b=0;b<a*2-1;b++) cout<< '*'; cout<<white_space<<endl; } }Edit: Dazu hätt' ich ganz kurz (eine vielleicht dumme) Frage: Dieser Code compiliert bei mir,
auch wenn ich <string> nicht einbinde
?
-
#include <iostream> #include <string> using namespace std; int main(void){//Nutzloses void for(short a=0;a<6;a++){ // Erstes Dreieck//short ist schlecht gewählt, != und ++a wären //konsitent zu allgemeinen Iteratoren for(short b=0;b<a;b++) cout<< '*';//space nach << cout<<endl;//nein, '\n' nehmen, wenn '\n' gemeint ist. } for(short a=0;a<6;a++){// Zweites string white_space(6-a,' ');//Schleife versteckt!!! Bitte ausschreiben. Oder alle inneren Schleiofen verstecken. //So ist das gar nicht vergleichbar. cout<<white_space;//kein space nach << for(short b=0;b<a*2-1;b++)//die Bedingung macht mir ein wenig Angst cout<< '*';//space nach << cout<<white_space<<endl; } }Edit: Dazu hätt' ich ganz kurz (eine vielleicht dumme) Frage: Dieser Code compiliert bei mir,
auch wenn ich <string> nicht einbinde
?Die Standardheader dürfen sich gegenseitig inkludieren, wie sie lustig sind.
Kann halt sein, daß es auf dem nächsten Compiler nicht klappt ohne.
-
1. Was ist mit der Bedingung in Zeile 24 ? Was ist so schlimm ?
2. Und Zeile 8 ?
Soll das so
for(int a = -1;a != 6;++a)...?
-
Hacker schrieb:
1. Was ist mit der Bedingung in Zeile 24 ? Was ist so schlimm ?
Weiß nicht. Ich mußte fast eine Sekunde darüber nachdenken. Das muß auch irgendwie noch hübscher gehen, so das das Dreieck noch klarer dasteht.
Hacker schrieb:
2. Und Zeile 8 ?
Soll das sofor(int a = -1;a != 6;++a)...?
Oh, ja, int und das != und das ++a gefallen mir.
Die -1 ist, moment, ich komm gleich drauf...
Ich sag's mal nicht.Dir scheint nicht klar zu sein, was der Unterschied zwischen
for(int a=0;a!=6;a++)und
for(int a=0;a!=6;++a)ist.
Vorher die leichtere Frage:
Was ist der Unterschied zwischenint a=5; a++; cout<<a;und
int a=5; ++a; cout<<a;?
-
int a = 10;
int b = 2;
a = ++b //erst wird der Wert der Variable b inkrementiert und danach Variable a zugewiesen. Das heißt: a = 13;a = b++ //erst wird der Wert der Variable b, Variable a zugewiesen und danach wird b inkrementiert. Das heißt: a = 12;
-
Nein , ich weiß.
operator++()
Inkrementiert und gibt den entsprechenden Wert zurück.
operator++(int)
Inkrementiert, gibt aber den alten Wert zurück.
@volkard: Und ja, ich wusste den Unterschied sehr gut, da ich diesen unären Operator schon öfter überladen hab.
Edit: ach ja, die Schleifen.
Man rechnet dann mit dem Wert der zurückgegeben wurde (?),
welcher dann abhängig von der Präfix- und Postfix Variante ausfällt.
-
Hacker schrieb:
@volkard: Und ja, ich wusste den Unterschied sehr gut, da ich den Operator schon öfter überladen hab.
Du hast leider nicht meine Fragen beantwortet, sondern nur gesagt, daß Du es weißt. Schade. Du hättest Folgendes entdeckt:
Mir geht's eigentlich um den Nicht-Unterschied: Darum, daß aus der 0 nicht eine -1 wird, sondern daß als Schleifenweiterschaltungsausdruck ++a und a++ frei austauschbar sind, ohne irgendwas anderes zu verändern.
-
Tja, dass lernen die Leute, wenn man aus einem int einen iterator machen will.
-
Ich steh ja eher auf Manipulatoren.
#include <iostream> #include <iomanip> #include <string> using namespace std; int main() { const int dreieck_seitenlaenge = 6; char dreieck_muster = 'x'; string dreieck_seite = ""; for (int i = 0; i <= dreieck_seitenlaenge; ++i) { cout << setw(dreieck_seitenlaenge) << right << dreieck_seite << dreieck_muster << setw(dreieck_seitenlaenge) << left << dreieck_seite << '\n'; dreieck_seite += dreieck_muster; } cin.get(); }
-
Naja, wenn wir so weit schon sind:
#include <iomanip> #include <iostream> int main() { int n; std::cin >> n; for(int i = 0; i < n; ++i) { std::cout << std::setfill(' ') << std::setw(n - i) << std::right << '*' << std::setfill('*') << std::setw(2 * i + 1) << std::right << '\n'; } }