2016-07-20 5 views
-1

Ich spiele heute mit etwas Code herum (ich bin ein Anfänger). Ich habe gerade ein einfaches Programm geschrieben, um ein Dreieck zu erzeugen, in dem die Basis durch die Eingabe des Benutzers bestimmt wird. HierWie zeichne entgegengesetztes inverses Dreieck?

ist der Code:

#include "main.h" 
using namespace std; 

int main() 
{ 
    int triBase = 0; 

    cout << "Enter a base number for the triangle [1-100]: "; 
    cin >> triBase; 
    cout << endl; 
    while(!cin || triBase > 100 || triBase <= 0) 
    { 
     system ("clear"); 
     cout << "Invalid input!" << endl; 
     cin.clear(); 
     cin.ignore(10, '\n'); 
     cout << "Enter a base number for the triangle [1-100]: "; 
     cin >> triBase; 
     cout << endl; 
    } 

    system ("clear"); 
    for(int lines = 0; lines < triBase; lines++) 
    { 
     for(int rows = 0; rows <= lines; rows++) 
     { 
      cout << "* "; 
     } 
    cout << endl; 
    } 


    return 0; 
} 

Meine Frage ist, wie würde ich darum, das Dreieck gehen erscheinen auf der gegenüberliegenden Seite des Bildschirms in einer umgekehrten Reihenfolge? Beispiel der Benutzer 5 eintritt, würde der Bildschirm zeigen:

*               ***** 
**               **** 
***               *** 
****               ** 
*****               * 

Oder wenn sie eingeben 12:

*              ************ 
**              *********** 
***              ********** 
****              ********* 
*****              ******** 
******              ******* 
*******              ****** 
********              ***** 
*********              **** 
**********              *** 
***********              **     
************              * 

Gibt es eine Möglichkeit zu wissen, wie Zeichen über den Bildschirm passen kann, subtrahieren die Zahl von Zeichen, die auf diese Zeile passen würden, dann fügen Sie den Unterschied in Leerzeichen hinzu, damit sie an der richtigen Stelle beginnen, so dass jede Zeile an der letzten Stelle auf dem Bildschirm endet? Vielen Dank im Voraus.

+0

Hinweis: Fügen Sie eine konstante Anzahl von Leerzeichen in jeder Zeile Iteration (neue Zeile). Wie Sie sehen, wiederholen sich die Räume ständig. –

+0

Danke, ich werde das versuchen. – ryanpback

Antwort

3

Dies sollte funktionieren:

for (int lines = 0; lines < triBase; lines++) 
    { 
     for (int rows = 0; rows <= lines; rows++) 
     { 
      cout << "* "; 
     } 

     cout << std::string(30, ' '); // 30 spaces 

     for(int i = 0; i < triBase - lines; i++) 
     { 
      cout << "* "; 
     } 

     cout << endl; 
    } 

Wie Sie jede Zeile zu sehen, auf, und wenn Sie mit Plotten * Ihre fertig sind, dann füge ich eine konstante Anzahl von Räumen und eine neue ausführen for-Schleife die angezeigt werden * als triBase - lines mal.

Auch ist es besser, darüber als eine 2D-Tabelle mit Zeilen und Spalten zu denken, so dass Ihre lines Zeilen sind, und Ihre rows sind eigentlich Spalten.

1

Ich konnte es zur Arbeit bringen. Hier ist der endgültige Code:

#include "main.h" 
using namespace std; 

int main() 
{ 
    int triBase = 0; 
    string spaces(30, ' '); 

    cout << "Enter a base number for the triangle [1-100]: "; 
    cin >> triBase; 
    cout << endl; 
    while(!cin || triBase > 100 || triBase <= 0) 
    { 
     system ("clear"); 
     cout << "Invalid input!" << endl; 
     cin.clear(); 
     cin.ignore(10, '\n'); 
     cout << "Enter a base number for the triangle [1-100]: "; 
     cin >> triBase; 
     cout << endl; 
    } 

    system ("clear"); 
    for(int lines = 0; lines < triBase; lines++) 
    { 
     for(int rows = 0; rows <= lines; rows++) 
     { 
      cout << "* "; 
     } 
     cout << spaces; 
     for(int secondRow = 0; secondRow < triBase - lines; secondRow++) 
     { 
      cout << "* "; 
     } 
     cout << endl; 
    } 

    return 0; 
} 
+0

Kein Grund, eine for-Schleife zu verwenden, um eine konstante Anzahl von Leerzeichen anzuzeigen. –

+0

Danke, das werde ich beheben. – ryanpback

+0

Sehen Sie, was @NathanOliver in den Kommentaren vorgeschlagen –