Frage zur Optimierung von Programm



  • Ich sollte ein Programm schreiben das die ASCII-Tabelle mit den Werten von 30 bis 129 ausgibt und bei denen die Zeichen 30-32 und 127-129 als Leerzeichen dargestellt werden. Außerdem sollte ein Rahmen mit den Zahlen und dieser gestrichelten Linie drumherum.
    Hat zwar ein wenig gedauert aber hier ist es:

    #include <iostream>
    using namespace std;
    
    int main() {
    	char zeichen;
    	int zeichenwert1, zeichenwert2, zeichenwert3;
    	cout << "    0 1 2 3 4 5 6 7 8 9" << endl;
    	cout << "  +--------------------" << endl;
    	for (zeichenwert1 = 3; zeichenwert1 <= 12; zeichenwert1++) {
    		if (zeichenwert1 <= 9) {
    			cout << " " << zeichenwert1 << "| ";
    		}
    		else {
    			cout << zeichenwert1 << "| ";
    		}
    		for (zeichenwert2 = 0 ; zeichenwert2 <=9 ; zeichenwert2++) {
    			zeichenwert3 = zeichenwert2 + zeichenwert1 * 10;
    			if (zeichenwert3 < 33 || zeichenwert3 >= 127) {
    				cout << "  ";
    			}
    			else {
    				zeichen = zeichenwert3;
    				cout << zeichen << " ";
    			}
    		}
    		cout << endl;
    	}
    
    	system("pause");
    	return 0;
    }
    

    Da ich noch ziemlich am Anfang bin, was programmieren angeht, wollte ich mal fragen ob es vielleicht kürzere/einfachere Wege gibt als meinen. Vielleicht wo man Dinge einsparen könnte usw... zu Lernzwecken halt. 🙂

    Herzlichen Dank für ihre Aufmerksamkeit ... 😉



  • zeichenwert3 könntest du weglassen (ist redundant) und eventuell nur eine Schleife verwenden, die von 30 bis 129 zählt (die Zeilenwechsel werden dann per if(zeichen%10==0){...} realisiert).


  • Mod

    Als Anregung eine etwas kürzere Variante:

    cout << "    0 1 2 3 4 5 6 7 8 9" << endl;
        cout << "  +--------------------" << endl;
        for (unsigned line = 3; line <= 12; ++line)
          {
            cout << setw(2) << line << '|';
            for (unsigned column = 0; column < 10; ++column)
              {
                char character = line * 10 + column;
                if (character < 32 or character > 126) character = ' ';
                cout << ' ' << character;
              }
            cout << '\n';
          }
    

    Diese zeichnet sich vor allem durch Benutzung des stream-manipulators setw aus, durch Weglassen der schon angesprochenen Redundanzen und durch Benutzung wesentlich aussagekräftigerer Variablennamen (wenn auch noch nicht optimal). Außerdem mochte ich deinen Einrückungsstil nicht 😃 .



  • Bei deiner (user369) Variante könntest du die Variablen lokaler definieren. Alle Variablen am Anfang des Scopes zu definieren ist ein Relikt aus C.



  • Okay, ich danke für die Antworten.
    Ich werde mal probieren, das umzusetzen. 😃


Anmelden zum Antworten