Strukturausgabe



  • Hey Leute ...

    Ich soll ein Programm schreiben, welches folgende Struktur als Ausgabe erzeugt, wobei die Strukturgröße durch eine eingegebene Variable verändert werden kann. (Nutzen Sie nicht mehr als zwei Schleifen)

    für a=5 :

    0
    00
    000
    0000
    00000
    0000
    000
    00
    0

    #include<iostream>
    using namespace std;
    
    void func();
    
    int main()
    
    {
    
     int a;
    
     cout << "Geben Sie die Strukturgroesse ein: ";
     cin >> a;
    
    int a;
    
     while(a>0) 
    
     {
      cout << "0" << endl;
      a=a-1;
    
     }
    
     system("pause");
    
    }
    
    void func()
    
    {
    
    }
    


  • Ich weiß nun aber nicht wirklich weiter 😞

    Wie kann ich denn immer wieder eine neue 0 mit anhängen? 😮



  • Lass ein endl weg...



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ (auch C++0x und C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Vanilly schrieb:

    (Nutzen Sie nicht mehr als zwei Schleifen)

    Das ist die sinnlosteste Anforderung, die man sich überhaupt stellen kann. Ausbildung als FI/AE, wenn ich mich nicht irre.

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    int main()
    {
        cout<<"Geben Sie die Strukturgroesse ein: ";
        int n;
        cin>>n;
        n=2*n-1;
        for(int i=1;i<n+1;++i){
            for(int j=0;j<i&&j<n+1-i;++j)
                cout<<'0';
            cout<<'\n';
        }
    }
    


  • Es gibt verschiedene Möglichkeiten das zu lösen, bpsw. so (denkansatz, ungetestet):

    int ct(6);
        for(int a(0);a < ct * 2;++a)
            std::cout << std::string((a >= ct)? 2 * ct - a : a, '0') << '\n';
    

    @volkard: Komm, mit dem Code kannst du nicht beim IOCCC gewinnen...



  • So, alle Schleifen weg. Und sogar hübsch dokumentiert. Und im Aussehen ein wenig an die Vorgabe angepaßt.

    #include <iostream>//für cout
    #include <cstdlib>//für system()
    using namespace std;
    
    void func(int,int);
    
    int main()
    
    {
    
        int a;//a anlegen
    
        cout<<"Geben Sie die Strukturgroesse ein: ";
        cin>>a;//Eingabe
    
        func(a,1),//Ausgabe
        func(a-1,2);//Ausgabe
    
        system("pause");//aus Tastendruck warten
    
    }
    
    void func(int a,int b)
    
    {
        int c;//Hilfsvariable c
    
        if(!a) return;//Abbruchbedingung
    
        c=a--;//Zuweisung
    
        if(b<2) func(a,b);//rekursiver Aufruf
    
        if(!b) cout<<b;//waagerecht
    
        if(b>0) func(c,!b),//senkrecht
    
        cout<<endl;//der notwendige Zeilenumbruch
    
        if(b>1) func(a,b);//senkrecht
    
    }
    


  • Ah - endlich mal wieder eine kleine Programmieraufgabe, wenn auch etwas sehr mickrig 😉
    Der Input sei a, dann müssen 2a-1 Zeilen ausgegeben werden. Die Anzahl der 0'en hat einen Knick, das erreicht man z.B. mit der Funktion abs.
    Wenn die Nummer der Zeile von 1 bis 2a-1 läuft, dann ist die Anzahl der 0'en = a-abs(a-spaltenNr). Lässt man die spaltenNr statt von 1 bis 2a-1 von 1-a bis a-1 laufen, so vereinfacht sich das ganze noch etwas.
    Mehrere gleiche Zeichen lassen sich mit setfill und setw ausgeben. Dann ist nur eine Schleife notwendig.

    #include <iostream>
    #include <iomanip> // setw
    #include <cmath> // abs
    
    int main()
    {
        int a;
        if( cin >> a )
        {
            cout.fill('0');
            for( int spaltenNr = 1-a; spaltenNr < a; ++spaltenNr )
                cout << setw(a - abs(spaltenNr)) << '0' << "\n";
        }
        cout << endl; // flush
        return 0;
    }
    

    Gruß
    Werner


Anmelden zum Antworten