Dreieck in Konsole



  • 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 so

    for(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 zwischen

    int 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';
      }
    }
    

Anmelden zum Antworten