Kann ich dran etwas verbessern?



  • Hallo, ich bin mit dem programmieren neu c.a. 1 Woche und wollte fragen ob das gute für den Anfang ist.

     #include "pch.h"
    #include <iomanip>
    #include <iostream>
    using namespace std;
    int zahl1, zahl2, auswahl;
    double ergebnis;
    
    int main()
    {
    	cout << fixed << setprecision(2);
    	cout << "Willkommen beim prozentrechner" << endl;
    	cout << "Geben sie eine auswahl\n1= Prozentwert Berechnen \n2= Prozentsatz Berechnen \n3= Grundwert Bererchnen\n4= Beenden \nIhre auswahl: ";
    		cin >> auswahl;
    		switch (auswahl) {
    		case 1: /* Prozentwert ausrechnen*/
    
    				cout << "\nProzentwert Berechnen" << endl;
    				cout << "-----------------------------------------" << endl;
    				cout << "Geben sie ihren Prozentsatz ein: ";
    					cin >> zahl1;
    				cout << "-----------------------------------------" << endl;
    				cout << "Geben sie nun ihren Grundwert ein: ";
    					cin >> zahl2;
    				cout << "-----------------------------------------" << endl;
    			/*Prozentwert*/	ergebnis = /*prozentsatz->*/ zahl1 * zahl2 /*<-Grundwert*/ / 100; // W = p*G/100
    				cout << "Ihr ergebnis " << ergebnis << endl; break;
    
    		case 2: /*Prozentsatz ausrechnen*/
    
    				cout << "\nProzentsatz Berechnen" << endl;
    				cout << "-----------------------------------------" << endl;
    				cout << "Geben sie ihren Prozentwert ein: ";
    					cin >> zahl1;
    				cout << "-----------------------------------------" << endl;
    				cout << "Geben sie nun ihren Grundwert ein: ";
    					cin >> zahl2;
    				cout << "-----------------------------------------" << endl;
    			/*Prozentsatz*/ ergebnis = /*prozentwert->*/ zahl1 * 100 /*Grundwert->*/ / zahl2; // p = W*100/G
    				cout << "Ihr ergebnis " << ergebnis << "%" << endl; break;
    
    		case 3: /*Grundwert ausrechnen*/
    
    			cout << "\nGrundwert Berechnen" << endl;
    			cout << "-----------------------------------------" << endl;
    			cout << "Geben sie ihren Prozentwert ein: ";
    			cin >> zahl1;
    			cout << "-----------------------------------------" << endl;
    			cout << "Geben sie nun ihren Prozentsatz ein: ";
    			cin >> zahl2;
    			cout << "-----------------------------------------" << endl;
    			/*Grundwert*/ ergebnis = /*prozentwert->*/ zahl1 * 100 /*Prozentsatz->*/ / zahl2; // G = W*100/p
    			cout << "Ihr ergebnis " << ergebnis << endl; break;
    	}
    		system("pause");
    		return 0;
    
    
       
    }
    

    Ich habe einen kleinen Prozentrechner programmiert 🙂



  • /*Prozentwert*/ ergebnis Wäre es nicht schlau, statt eines Kommentars gleich die Variable prozentwert zu nennen? Das gilt analog auch für die anderen Variablen.



  • Stimmt denn das Ergebnis mit deinen Erwartungen überein?



  • @manni66 Ja es funktioniert wie gewollt


  • Global Moderator

    @krillplays sagte in Kann ich dran etwas verbessern?:

    @manni66 Ja es funktioniert wie gewollt

    Auch wenn du so etwas wie 7% von 12 berechnest? Was lernst du daraus über deine Testmethoden?



  • @seppj kommt 0 woran liegt das denn ?



  • Du rechnest mit lauter ints. 7 * 12 / 100 = 0.84 = 0. Das der zum double wird, kommt erst später.

    Helfen würde schon 7 * 12 / 100.0.



  • Kann ich dran etwas verbessern?

    Auslagern der main()-Funktion in kleinere Einzelteile (Funktionen), Trennung von Eingabe, Ausgabe und Berechnung (vom Prinzip her, hier geht's noch ganz gut).

    Ansonsten ist das echt ein schönes Programm finde ich. Noch ein paar pingelige Kleinigkeiten (Du hast gefragt):

    Am Besten nicht mehrere Statements in einer Zeile schreiben:

    cout << "Ihr ergebnis " << ergebnis << endl; break;
    // -->
    cout << "Ihr ergebnis " << ergebnis << endl;
    break;
    

    Warum? vielleicht will jemand noch hinzufügen cout << "Danke\n", übersieht das kleine break und dann sieht es so aus:

    cout << "Ihr ergebnis " << ergebnis << endl; break;
    cout << "Danke\n";
    

    Und schon haben wir einen Bug. Blödes Beispiel ich weiß^^

    system("Pause") ist für kleine Übungsprogramme m. E. nach relativ unschuldig, aber sollte in richtigen Programmen definitiv nicht verwendet werden (also die system() Funktion). Viele IDEs bieten diese Funktionalität automatisch, und man kann komplett auf solche "Konsolenfenster-offen-halte" Mechanismen verzichten. (Bei mir tuts in Visual Studio Ctrl + F5).

    Es ist hier nicht schlimm, dass du std::endl so oft verwendest (ich gebe zu, auf deutscher Tastatur ein '\n' zu tippen nervt echt), aber Du solltest wissen was es tut: std::endl.

    Inserts a newline character into the output sequence os and flushes it [...]

    Das "flushen" kann beim Schreiben von Dateien echt mieß langsam werden, ist mir selber schon mal passiert:

    #include <fstream>
    #include <iostream>
    int main() {
        std::ofstream file{"zahlen.txt"}; 
        if (!file) {
            std::cerr << "Datei konnte nicht geoeffnet werden.\n";
            return -1;
        }
        for (int i = 0; i < 10000000; ++i)
            file << i << std::endl;  // einmal mit std::endl und einmal mit '\n' laufen lassen
    }
    

    lach die Parameter sind für eine SSD gewählt, ich denke für eine HDD reichen ein paar Iterationen weniger.

    Lieber nur eine Variable pro Zeile definiern, und das so spät wie möglich aber so früh wie nötig (wenn man der Variable einen sinnvollen Wert geben kann. Definitiv nicht global! (es gibt auch hier Ausnahmen)).

    Statt using namespace std lieber using std::cin; using std::cout; using std::endl; Aber das ist schon pingelig langsam. Es ist für kleine aber feine Programme eigentlich egal.

    LG