Neuling hat Fragen



  • Hi,
    ich bin neu in c++ und hab ein paar Fragen.

    Ich hab das Buch "C++ von A - Z" und bin schon relativ weit vorgedrungen. Nun als ich bei der OOP also den Klassen angekommen bin, bin ich relativ schnell an meine Grenzen gestoßen und ich merkte dass ich einiges noch nicht verstanden habe.

    Nun hab ich mir gedacht programmierst du mal einen kleinen Rechner der verschiedene Funktionen hat. Dieser soll einfach die Grundlagen näher bringen( Variablen, Konstanten, Funktionen).

    Nun ist der Quelltext des Taschenrechners sehr lang geworden und ich wollte mal fragen ob mir jemand Tipps geben kann wie man manche Sachen/Funktionen kürzen könnte.

    /******************************
     * Programm: Taschenrechner   *
     * Author:   Gailer Alexander *
     * Datum:    05.05.2010       *
     * Datei:    funktionen.h     *
     ******************************/
    
     /* TODO (Alex#1#): Quelltext Optimierung, Kommentierung */
    
    // funktionen.h
    #ifndef _funktionen_h_
    #define _funktionen_h_
    
    // Defines
    #define Teilung "Teilung durch 0 nicht moeglich! Sie kommen zurueck\n"
    
    // Bibliotheken 
    #include <iostream>
    #include <windows.h>
    #include <iomanip>
    #include <math.h>
    
    using namespace std; 
    
    // Funktionsdeklaration
    void prgbeen();
    void prgerr();
    void sleep( int i);
    
    // Additions-Funktion
    void addieren() {
        // Benutzerabfrage und Kontrolle    
        cout << "\nAddition: \n\n" << "Wieviele Zahlen moechten Sie addieren? ";
        unsigned int zahlenmenge;
        // Überprüfung ob eine Zahl eingegeben wurde
        if( !( cin >> zahlenmenge ) ) {
            prgerr();
        } 
        // Ein Array mit der Größe des gewünschten Zahlenbereiches erstellen
        float zarray[zahlenmenge];
        // Array mit Zahlen füllen
        for(int i = 0; i < zahlenmenge; i++) {
            cout << i+1 << ".Zahl: ";
            if( !( cin >> zarray[i]) ) {
                prgerr();
            } 
        }                            
        float ergebnis = 0;
        // Array-Werte addieren und in Variable ergebnis speichern
        for(int i = 0; i < zahlenmenge; i++) {
            ergebnis = ergebnis + zarray[i];
        }      
        // Ausgabe der Berechnung
        cout << setprecision(15) << "\nDas Ergebnis ist: " << ergebnis << "\n\n";  
        // Programm beenden / wiederholen
        prgbeen();
    }
    
    // Subtaktions-Funktion
    void subtrahieren() {
        // Benutzerabfrage und Kontrolle  
        cout << "\nSubtaktion:\n\n" << "Wieviele Zahlen wollen Sie subtrahieren? ";
        unsigned int zahlenmenge;
        // Überprüfung ob eine Zahl eingegeben wurde
        if( !( cin >> zahlenmenge) ) {
            prgerr();
        }
        // Ein Array mit der Größe des gewüschten Zahlenbereichs erstellen
        float zarray[zahlenmenge];
        // Array mit Zahlen füllen
        for(int i = 0; i < zahlenmenge; i++) {
            cout << i+1 << ".Zahl: ";
            if( !( cin >> zarray[i]) ) {
                prgerr();
            } 
        }
        float ergebnis = 0;
        // Array Werte subtrahieren und in Variable Ergebnis speichern
        for(int i = 0; i < zahlenmenge; i++) {
            if(i == 0) {
                ergebnis += zarray[i];
            } else {
                ergebnis -= zarray[i];
            }
        }
        //Ausgabe der Berechnung
        cout << setprecision(15) << "Das Ergebnis ist: " << ergebnis << "\n\n";
        // Programm Beenden / Wiederholen
        prgbeen();
    }
    
    // Multiplikations-Funktion
    void multiplizieren() {
        // Benutzerabfrage und Kontrolle  
        cout << "\n Multiplikation:\n\n" << "Wieviele Zahlen wollen Sie multiplizieren? ";
        unsigned int zahlenmenge;
        // Überprüfung ob eine Zahl eingegeben wurde
        if( !(cin >> zahlenmenge) ) {
            prgerr();
        }
        double zarray[zahlenmenge];
        // Array mit Zahlen füllen
        for(int i = 0; i < zahlenmenge; i++) {
            cout << i+1 << ".Zahl: ";
            if( !(cin >> zarray[i]) ) {
                prgerr();
            }
        }
        double ergebnis = 0;
        // Array Werte multiplizieren und in Variable Ergebnis speichern
        for(int i = 0; i < zahlenmenge; i++) {
            if( i == 0 ) {
                ergebnis += zarray[i];
            } else {
                ergebnis *= zarray[i];
            }
        }
        // Ausgabe der Berechnung
        cout << setprecision(15) << "Das Ergebnis ist: " << ergebnis << "\n\n";
        // Programm wiederholen / beenden
        prgbeen(); 
    }
    
    // Divisions-Funktion
    void dividieren() {
        // Benutzerabfrage und Kontrolle  
        cout << "\nDivision: \n\n" << "Wieviele Zahlen moechten Sie dividieren? ";
        unsigned int zahlenmenge;
        // Überprüfung ob eine Zahl eingegeben wurde
        if( !( cin >> zahlenmenge) ) {
            prgerr();
        }
        double zarray[zahlenmenge];
        // Array mit Zahlen füllen
        for(int i = 0; i < zahlenmenge; i++) {
            cout << i+1 << ".Zahl: ";
            if( !(cin >> zarray[i]) ) {
                prgerr();
            }
        }
        // Fehleingabe des Benutzers prüfen
        // Teilung durch 0
        for(int i = 1; i < zahlenmenge; i++ ) {
            if( zarray[i] == 0 ) {
                cout << Teilung;
                sleep(3);
                return;
            }
        }
        double ergebnis = 0;
        // Berechnung des Ergebnisses und Speicherung in der Variable ergebnis
        for(int i = 0; i < zahlenmenge; i++) {
            if(i == 0) {
                ergebnis += zarray[i];
            } else {
                ergebnis /= zarray[i];
            }
        }
        // Ausgabe der Ergebnisses
        cout << setprecision(15) << "Das Ergebnis ist: " << ergebnis << "\n\n";
        // Programm beenden / wiederholen
        prgbeen();
    }
    
    // Quadrierungs-Funktion
    void quadrieren() {
        double qzahl;
        // Benutzerabfrage und Kontrolle  
        cout << "\nQuadrierung:\n\n" << "Bitte geben Sie die Zahl ein, die Sie quadrieren moechten: ";
        if( !(cin >> qzahl) ) {
            prgerr();
        } 
        float ergebnis = 0;
        // Berechnung der Quadrierung und Speichern in der Variable Ergebnis
        ergebnis = qzahl * qzahl;  
        // Ausgabe der Ergebnisses
        cout << setprecision(15) << "Das Quadraht von " << qzahl << " ist: " << ergebnis << "\n\n"; 
        // Programm beenden / wiederholen
        prgbeen();   
    }
    
    // Wurzel-Funktion
    void wurzel() {
        double wzahl;  
        // Benutzerabfrage
        cout << "\nWurzel ziehen\n\n" << "Bitte geben Sie die Zahl ein, aus der sie die Wurzel ziehen moechten: ";
        if( !(cin >> wzahl) ) {
            prgerr();
        }
        float ergebnis = 0;
        // Berechnung der Wurzel aus der Zahl des Benutzers und Speicherung in der Variablen Ergebnis
        ergebnis = sqrt( wzahl );  
        // Ausgabe des Ergebnisses
        cout << setprecision(15) << "Die Wurzel von " << wzahl << " ist: " << ergebnis << "\n\n"; 
        // Programm beenden / wiederholen
        prgbeen();
    }
    
    // Spannung berechnen - Funktion
    void spannung() {
    
        unsigned int benauswahl;
        double spg = 0;
        double str = 0;
        double wid = 0;
        double lei = 0;
        double wir = 0;
    
        do{
            // Benutzerabfrage und Kontrolle  
            cout << "\nSpannung:\n\n";
            cout << "-1- U = R * I\n";
            cout << "-2- U = P / I\n";
            cout << "-3- U = Wurzel aus P * R\n";
            cout << "-4- Zurueck ins Elektrotechnik-Menue\n";   
            if( !(cin >> benauswahl) ){
                prgerr();
            }    
            switch(benauswahl) {
                case 1:
                    // U = R * I
                    // Benutzerabfrage und Kontrolle  
                    cout << "Bitte geben Sie den Widerstandswert ein( R in Ohm ): ";
                    if( !(cin >> wid) ) {
                        prgerr();
                    }
                    cout << "Bitte geben Sie den Stromwert ein ( A in Ampere ): ";
                    if( !(cin >> str) ) {
                        prgerr();
                    }
                    // Berechnung des Ergebnisses
                    spg = wid * str;
                    // Ausgabe des Ergebnisses
                    cout << setprecision(15) << "Die Spannung betraegt: " << spg << " Volt!\n";
                    // Programm beenden / wiederholen
                    prgbeen();
                    break;
                case 2:
                    // U = P / I
                    // Benutzerabfrage und Kontrolle  
                    cout << "Bitte geben Sie den Leistungswert ein( P in Watt ): ";
                    if( !(cin >> lei) ) {
                        prgerr();
                    }
                    cout << "Bitte geben Sie den Stromwert ein( I in Ampere ): ";
                    if( !(cin >> str) ) {
                        prgerr();
                    // Teilung durch 0 wird blockiert 
                    } else if(str == 0) {
                        cout << Teilung;
                        sleep(3);
                        break;
                    }
                    // Berechnung des Ergebnisses
                    spg = lei / str;
                    //Ausgabe des Ergebnisses
                    cout << setprecision(15) << "Die Spannung betraegt: " << spg << " Volt!\n";
                    //Programm beenden / wiederholen
                    prgbeen();
                    break;                
                case 3: 
                    // U = Wurzel aus P * R
                    // Benutzerabfrage und Kontrolle  
                    cout << "Bitte geben Sie den Leistungswert ein( P in Watt ): ";
                    if( !(cin >> lei) ) {
                        prgerr();
                    }
                    cout << "Bitte geben Sie den Widerstandswert ein( R in Ohm ): ";
                    if( !(cin >> wid) ) {
                        prgerr();
                    // Teilung durch 0 wird blockiert 
                    } else if ( wid == 0 ) {
                        cout << Teilung;
                        sleep(3);
                        break;
                    }
                    //Berechnung des Ergebnisses
                    spg = sqrt(lei*wid);
                    // Ausgabe des Ergebnisses
                    cout << setprecision(15) << "Die Spannung betraegt: " << spg << " Volt!\n";
                    prgbeen();                
                    break;
                case 4:
                    break;   
                default: 
                    // Ungueltige Zahl eingebeben, Benutzer muss 3 Sekunden warten und kommt wieder ins Elektrotechnik Menü
                    cout << "Sie haben eine ungueltige Zahl eingegeben( 1 - 4) !\n";
                    sleep(3);
                break;
            }    
        } while( benauswahl != 4 );
        return; 
    }
    
    // Strom berechnen - Funktion
    void strom() {
        unsigned int benauswahl;
        double spg = 0;
        double str = 0;
        double wid = 0;
        double lei = 0;
        double wir = 0;
    
        do{
            // Benutzerabfrage und Kontrolle               
            cout << "\nStrom:\n\n";
            cout << "-1- I = U / R\n";
            cout << "-2- I = P / U\n";
            cout << "-3- I = Wurzel aus P / R\n";
            cout << "-4- Zurueck ins Elektrotechnik-Menue\n";     
            if( !(cin >> benauswahl) ) {
                prgerr();
            }
            switch(benauswahl) {
                case 1:
                    // I = U / R
                    // Benutzerabfrage und Kontrolle
                    cout << "Bitte geben Sie den Spannungswert ein ( U in Volt ): ";
                    if( !( cin >> spg) ) {
                        prgerr();
                    }
                    cout << "Bitte geben Sie den Widerstandswert ein ( R in Ohm ): ";
                    if( !(cin >> wid) ) {
                        prgerr();
                    } else if( wid == 0 ) {
                        cout <<  Teilung;
                        sleep(3);
                        break;
                    }
                    // Berechnung des Ergebnisses
                    str = spg / wid;
                    // Ausgabe des Ergebnisses
                    cout << "\nDer Strom betraegt: " << str << " Ampere.\n\n";
                    prgbeen();
                    break;
                case 2:
                    // I = P / U
                    // Benutzerabfrage und Kontrolle
                    cout << "Bitte geben Sie den Leistungwert ein ( P in Watt ): ";
                    if( !( cin >> lei) ) {
                        prgerr();
                    }
                    cout << "Bitte geben Sie den Spannungwert ein ( U in Volt ): ";
                    if( !(cin >> spg) ) {
                        prgerr();
                    } else if( spg == 0 ) {
                        cout << Teilung;
                        sleep(3);
                        break;
                    }
                    // Berechnung des Ergebnisses
                    str = lei / spg;
                    // Ausgabe des Ergebnisses
                    cout << "\nDer Strom betraegt: " << str << " Ampere.\n\n";
                    prgbeen();
                    break;
                case 3:
                    // I = Wurzel aus P / R
                    // Benutzerabfrage und Kontrolle
                    cout << "Bitte geben Sie den Leistungswert ein ( P in Watt ): ";
                    if( !( cin >> lei ) ) {
                        prgerr();
                    }
                    cout << "Bitte geben Sie den Widerstandswert ein ( R in Ohm ): ";
                    if( !(cin >> wid) ) {
                        prgerr();
                    } else if ( wid == 0 ) {
                        cout << Teilung;
                        sleep(3);
                        break;
                    }
                    // Berechnung des Ergebnisses
                    str = sqrt(lei/wid);
                    //Ausgabe des Ergebnisses
                    cout << "\nDer Strom betraegt: " << str << " Ampere.\n\n";
                    prgbeen();
                    break;
                case 4:
                    break;
                default:
                    cout << "Sie haben keine gueltige Zahl eingegeben( 1 - 4 )! Sie kommen zurueck.\n";
                    sleep(3);
            }
        } while (benauswahl != 4);  
    }
    
    // Widerstand berechnen - Funktion
    void widerstand() {
        unsigned int benauswahl;
        double spg = 0;
        double str = 0;
        double wid = 0;
        double lei = 0;
        double wir = 0;
        double rho = 0;
        double len = 0;
        double que = 0;
    
        do{
            // Benutzerabfrage und Kontrolle
            cout << "\nWiderstand:\n\n";
            cout << "-1- R = U / I\n";
            cout << "-2- R = P / I(quadrat)\n";
            cout << "-3- R = (rho * l) / A (rho = Leitungswiderstand)\n";
            cout << "-4- Zurueck ins Elektrotechnik-Menue\n";       
            if( !( cin >> benauswahl) ) {
                prgerr();
            }   
            switch( benauswahl ) {
                case 1:
                    // R = U / I
                    // Benutzerabfrage und Kontrolle
                    cout << "Bitte geben Sie den Spannungswert ein( U in Volt ): ";
                    if( !(cin >> spg) ) {
                        prgerr();
                    }
                    cout << "Bitte geben Sie den Stromwert ein( I in Ampere ): ";
                    if( !(cin >> str) ) {
                        prgerr();
                    } else if(str == 0) {
                        cout << Teilung;
                        sleep(3);
                        break;
                    }     
                    // Berechnung des Ergebnisses
                    wid = spg/str;
                    // Ausgabe des Ergebnisses
                    cout << "Der Widerstand betraegt: " << wid << " Ohm.\n";
                    prgbeen();
                    break;
                case 2:
                    // R = P * I²
                    // Benutzerabfrage und Kontrolle
                    cout << "Bitte geben Sie den Leistungswert an( P in Watt ): ";
                    if ( !(cin >> lei) ) {
                        prgerr();
                    }
                    cout << "Bitte geben Sie den Stromwert an( I in Ampere ): ";
                    if( !(cin >> str) ) {
                        prgerr();
                    }
                    // Berechnung des Ergebnisses
                    wid = lei*(str*str);
                    // Ausgabe des Ergebnisses
                    cout << "Der Widerstand betraegt: " << wid << " Ohm\n";
                    prgbeen();
                    break;
                case 3:
                    // R = ( rho * l ) / A
                    // Benutzerabfrage und Kontrolle
                    cout << "Bitte geben Sie den spezifischen Leitungswiderstand an( rho in SI ): ";
                    if( !(cin >> rho) ){
                        prgerr();
                    }
                    cout << "Bitte geben Sie die Leitungslaenge an( l in Meter ): ";
                    if ( !(cin >> len) ){
                        prgerr();
                    }
                    cout << "Bitte geben Sie den Querschnitt an ( A in Quadrat-Meter): ";
                    if ( !(cin >> que) ) {
                        prgerr();
                    } else if( que == 0 ) {
                        cout << Teilung;
                        sleep(3);
                        break;
                    }
                    // Berechnung des Ergebnisses
                    wid = (rho*len) / que;
                    // Ausgabe des Ergebnisses
                    cout << "Der Widerstand betraegt: " << wid << " Ohm\n";
                    prgbeen();                
                    break;
                case 4:
                    break;
                default:
                    cout << "Sie haben keine gueltige Zahl eingegeben( 1 - 4 )! Sie kommen zurueck.\n";
                    sleep(3);      
            }
        } while( benauswahl != 4 );
    }
    
    // Leistung berechnen - Funktion
    void leistung() {
        unsigned int benauswahl;
        double spg = 0;
        double str = 0;
        double wid = 0;
        double lei = 0;
        double wir = 0;
    
        do{
            cout << "\nLeistung:\n\n";
            cout << "-1- P = U * I\n";
            cout << "-2- P = I(quadrat) * R\n";
            cout << "-3- P = U(quadrat) / R\n";
            cout << "-4- Zurueck ins Elektrotechnik-Menue\n";
            if( !(cin >> benauswahl) ) {
                prgerr();
            }   
            switch(benauswahl) {
                case 1:
                    // P = U * I
                    // Benutzerabfrage und Kontrolle
                    cout << "Bitte geben Sie den Spannungswert ein( U in Volt ): ";
                    if( !(cin >> spg) ) {
                        prgerr();
                    }
                    cout << "Bitte geben Sie den Stromwert ein( I in Ampere ): ";
                    if( !(cin>> str) ) {
                        prgerr();
                    }
                    // Berechnung des Ergebnisses
                    lei = spg * str;
                    // Ausgabe des Ergebnisses
                    cout << "Die Leistung betraegt " << lei << " Watt.\n";
                    prgbeen();
                    break;
                case 2:
                    // P = I² * R
                    // Benutzerabfrage und Kontrolle  
                    cout << "Bitte geben Sie den Stromwert an( I in Ampere ): ";
                    if( !( cin >> str) ) {
                        prgerr();
                    }
                    cout << "Bitte geben Sie den Widerstandswert an( R in Ohm ): ";
                    if( !( cin >> wid) ) {
                        prgerr();
                    } else if( wid == 0 ) {
                        cout << Teilung;
                        sleep(3);
                        break;
                    }
                    // Berechnung des Ergebnisses
                    lei = (str*str) / wid;
                    // Ausgabe des Ergebnisses
                    cout << "Die Leistung betraegt " << lei << " Watt.\n";
                    prgbeen();                
                    break;
                case 3:
                    // P = U² / R
                    // Benutzerabfrage und Kontrolle  
                    cout << "Bitte geben Sie die Spannung an( U in Volt ): ";
                    if( !(cin >> spg) ) {
                        prgerr();
                    }
                    cout << "Bitte geben Sie den Widerstand an( R in Ohm ): ";
                    if( !(cin >> wid) ) {
                        prgerr();
                    } else if( wid == 0 ) {
                        cout << Teilung;
                        sleep(3);
                        break;
                    }
                    // Berechnung des Ergebnisses
                    lei = (spg*spg) / wid;
                    // Ausgabe des Ergebnisses
                    cout << "Die Leistung betraegt: " << lei << " Watt.\n";
                    prgbeen();                
                    break;
                case 4:
                    break;
                default:
                    cout << "Sie haben keine gueltige Zahl eingegeben( 1 - 4 )! Sie kommen zurueck.\n";
                    sleep(3);               
            }   
        } while( benauswahl != 4 );
    }
    
    // Wirkungsgrad berechnen - Funktion
    void wirkungsgrad() {
        unsigned int benauswahl;
        double pzu;
        double pab;
        double eta;
        do{
            // Benutzerabfrage und Kontrolle  
            cout << "\nWirkungsgrad:\n\n";
            cout << "-1- eta = abgegebene Leistung / zugefuehrte Leistung\n";
            cout << "-2- Zurueck ins Elektrotechnik Menue\n";
    
            if( !( cin >> benauswahl) ) {
                prgerr();
            }
    
            if( benauswahl == 1 ) {
                // Benutzerabfrage und Kontrolle  
                cout << "Bitte geben Sie den abgegebene Leistung an( Pab in Watt): ";
                if( !( cin >> pab) ) {
                    prgerr();
                }
                cout << "Bitte geben Sie die zugefuehrte Leistung an ( Pzu in Watt): ";
                if( !(cin >> pzu) ) {
                    prgerr();
                } else if( pzu == 0 ) {
                    cout << Teilung;
                    sleep(3);
                    break;
                }
                // Berechnung des Ergebnisses
                eta = pab / pzu;
                // Ausgabe des Ergebnisses
                cout << "Der Wirkungsgrad betraget: " << eta << ".\n";
                prgbeen();
                break;
            } else if( benauswahl == 2 ) {
                break;
            } else {
                cout << "Sie haben keine gueltige Zahl eingegeben( 1 - 2 )! Sie kommen zurueck.\n";
                sleep(3);             
            }
        } while( benauswahl != 2 );
    }
    
    // Programm Beenden Funktion
    void prgbeen () {
        cout << "Programm beenden? ( J \\ N )";
        char prgbeen;
        cin >> prgbeen;
        if( prgbeen == 'J' || prgbeen == 'j' ) {
            cout << "Denke dran, das ist nur ein Lern-Programm. Programm wird in 5 Sekunden beendet!\n\n";
            for(int i=5; i > 0; i--) {
                cout << i << "\n";
                // Wartezeit zur Übersicht
                Sleep(1000);
            }                        
            exit(0);
        } else if( prgbeen == 'N' || prgbeen == 'n' ) {
            cout << "Sie kommen in 3 Sekunden zurueck\n";
            sleep(3);
        } else {
            prgerr();
        }
    }
    
    void prgerr () {    
        cerr << "Sie haben ein ungueltiges Zeichen eingegeben! Programm wird beendet!\n";   
        for(int i = 3; i > 0; i--) {
            cout << i << "\n";
            Sleep(1000);
        }    
        exit(1);  
    }
    
    void sleep( int i) {
        for( i; i > 0; i--) {
            cout << i << "\n";
            Sleep(1000);
            if(i==1) {
                cout << "\n\n";
            }
        }
    }
    #endif
    
    /******************************
     * Programm: Taschenrechner   *
     * Author:   Gailer Alexander *
     * Datum:    05.05.2010       *
     * Datei:    main.cpp         *
     ******************************/
    
    /* TODO (Alex#1#): Quelltext Optimierung, Kommentierung */
    
    #include <iostream>
    #include "funktionen.h"
    
    using namespace std;
    
    // Funktionsdeklarationen
    
    void addieren();
    void subtrahieren();
    void multiplizieren();
    void dividieren();
    void quadrieren();
    void wurzel();
    void spannung();
    void strom();
    void widerstand();
    void leistung();
    void wirkungsgrad();
    
    // Hauptprogramm
    int main()
    {
        /*
        HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleTextAttribute(hStdout, BACKGROUND_GREEN |  FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
        */
    
        // Programm Beschreibung und Titel
    
        cout << "----------------------------------------------------------\n";
        cout << "---- Taschenrechner-Programm  |  Gailer Alexander     ----\n";
        cout << "---- Build-Date: 05.05.2010   |  Lern-, Testprogramm  ----\n";
        cout << "----   Bedenke, das ist nur ein Lern-, Testprogramm   ----\n";  
        cout << "----------------------------------------------------------\n\n\n";
    
        //Benutzerabfrage zur Auswahl der Berechnung
    
        int benauswahl;
    
        do {
            // Ausgabe des Hauptmenüs
            cout << "Hauptmenu:\n\n";
            cout << "-1- Addidtion ( + )\n";
            cout << "-2- Subtraktion ( - )\n";
            cout << "-3- Multiplikation ( * )\n";
            cout << "-4- Division ( \\ )\n";
            cout << "-5- Quadrieren\n";
            cout << "-6- Wurzel ziehen\n";
            cout << "-7- Elektotechnik\n";
            cout << "-8- Ende\n\n";
            cout << "Bitte Berechnungsart waehlen: ";
    
            // Benutzereingabe auf falsche Eingabe überwachen(Buchstaben oder Sonderzeichen)
            if( !( cin >> benauswahl) ) {
                prgerr();
            }
    
            // Funktions-Aufruf der Benutzerwahl
            switch ( benauswahl ) {
                case 1:
                    // Addition
                    addieren();
                    break;                
                case 2:
                    // Subtraktion
                    subtrahieren();
                    break;
                case 3:
                    // Multiplikation
                    multiplizieren();
                    break;
                case 4:
                    // Division
                    dividieren();
                    break;
                case 5:
                    // Quadrierung
                    quadrieren();
                    break;
                case 6:
                    // Wurzel ziehen 
                    wurzel();
                    break;
                case 7: 
                    // Elektrotechnik
                    int benauswahl;
                    do {
                        cout << "\nElektrotechnik - Hauptmenu\n\n";
                        cout << "-1- Spannung berechnen\n";
                        cout << "-2- Strom berechnen\n";
                        cout << "-3- Widerstand berechnen\n";
                        cout << "-4- Leistung berechnen\n";
                        cout << "-5- Wirkungsgrad berechnen\n";
                        cout << "-6- Zurueck ins Hauptmenu\n\n";
                        cout << "Bitte treffen Sie eine Auswahl ( 1 - 6 ): ";                   
    
                        // Benutzereingabe abwarten und prüfen ob er eine gueltiges Zeichen eingegeben hat, falls ein Buchstabe eingegeben wurde wird das Programm beendet
                        if( !( cin >> benauswahl) ) {
                            prgerr();
                        }
                        switch(benauswahl) {
                            case 1:
                                // Spannung berechnen
                                spannung();
                                break;
                            case 2:
                                // Strom berechnen
                                strom();
                                break;
                            case 3:
                                // Widerstand berechnen
                                widerstand();
                                break;
                            case 4:
                                // Leistung berechnen
                                leistung();
                                break;
                            case 5:
                                // Wirkungsgrad berechnen
                                wirkungsgrad();
                                break;
                            case 6:
                                break;
                            default:
                                // Ungueltige Zahl eingebeben, Benutzer muss 3 Sekunden warten und kommt wieder ins Elektrotechnik Menü
                                cout << "Sie haben eine ungueltige Zahl eingegeben!( 1 - 6 )\n";
                                for(int i = 3; i > 0; i--) {
                                    cout << i << "\n";
                                    Sleep(1000);
                                    if( i == 1 ) {
                                        cout << "\n\n";
                                    }
                                }
                                break;                  
                        }
                    } while ( benauswahl != 6);
                    break;
                case 8:
                    // Programm-Beendung
                    break;
                default: 
                    // Falsche Zahlen-Eingabe
                    cout << "Sie haben eine ungueltige Zahl eingegeben! ( 1 - 8 )\n";
            } 
        } while( benauswahl != 8 );
        return 0;
    }
    

    Hmm gibt es hier im Forum keine Spoiler Option? Oder wäre es geschickter die Dateien hochzuladen?

    Gruß Alex



  • Quellcode in weitere logische Teile zerlegen. Außerdem wiederholdenen Code finden und entsprechend auslagern. Beispiel:

    if ( !(cin >> lei) ) {
     prgerr();
    }
    

    Findet sich total oft in deinem Code. Stattdessweren wäre eine Funktion besser:

    wert = leseDouble("Bitte den Wert eingeben:");
    

    Außerdem Variablen dort deklarieren, wo sie benötigt werden.

    Und wenn du richtig gut sein willst, dann nutze Exceptions und lass dieses prgbeen() weg... Das bläht deinen Code auch total auf.

    Deine Menüs wiederholen sich auch total oft. Eventuell kannst du dafür eine eigene Klasse schreiben.


  • Mod

    Du hast sehr viel Code doppelt und dreifach mit jeweils kleinen Änderungen. Davon kann man sehr vieles zusammenkürzen indem man die Abstraktionsmittel von C++ benutzt: Templates (wahrscheinlich noch nicht drangekommen), Funktionszeiger (Falls schon drangekommen), bessere Aufteilung der Funktionen (z.B. eine allgemeine Eingabefunktion), zur Not auch Makros.



  • Danke erstmal 🙂

    Seppj schrieb:

    Du hast sehr viel Code doppelt und dreifach mit jeweils kleinen Änderungen. Davon kann man sehr vieles zusammenkürzen indem man die Abstraktionsmittel von C++ benutzt: Templates (wahrscheinlich noch nicht drangekommen), Funktionszeiger (Falls schon drangekommen), bessere Aufteilung der Funktionen (z.B. eine allgemeine Eingabefunktion), zur Not auch Makros.

    Hmm Genau da liegt mein Problem, Templates Zeiger hab ich mir zwar schonmal durchgelesen, aber da endet irgendwie mein Verständnis, deswegen dachte ich mir ich schreib mal nen Rechner mit den Grundfunktionen.

    ghjghj schrieb:

    Deine Menüs wiederholen sich auch total oft. Eventuell kannst du dafür eine eigene Klasse schreiben.

    Was meinste damit?

    Gruß Alex



  • Menu hauptmenu("Hauptmenu");
    
    hauptmenu.add("Punkt 1");
    hauptmenu.add("Punkt 2");
    
    int auswahl = hauptmenu.display();
    
    switch (auswahl)
    {
     //...
    }
    

    Ausgabe:

    --- Hauptmenu ---
    1. Punkt 1
    2. Punkt 2
    
    Auswahl:
    

    Alternativ wäre das auch über Funktionszeiger zu realisieren, dann fällt sogar das switch werg, aber das führt wohl zu weit.



  • hjkhjk schrieb:

    Menu hauptmenu("Hauptmenu");
    
    hauptmenu.add("Punkt 1");
    hauptmenu.add("Punkt 2");
    
    int auswahl = hauptmenu.display();
    
    switch (auswahl)
    {
     //...
    }
    

    Ausgabe:

    --- Hauptmenu ---
    1. Punkt 1
    2. Punkt 2
    
    Auswahl:
    

    Alternativ wäre das auch über Funktionszeiger zu realisieren, dann fällt sogar das switch werg, aber das führt wohl zu weit.

    Jo, noch. Das Problem ist mir macht das Programmieren riesen Spass, das nachdenken über bestimmt Lösungsansätze, verschiedene Funktionen ausdenken, usw. Nur die Umsetzung hakt bei mir glaub ich. Bzw. das erweiterte Veständnis für Zeiger, Klassen usw... Und die einzige Lösung ist wahrscheinlich üben üben üben .

    Gruß Alex



  • Noch etwas anderes: Die erste Datei soll wohl eine Header-Datei sein -- den Include-Guards zufolge. Du hast in dieser Datei aber viele Funktionsdefinitionen drin, die da nicht reingehören.

    void foo();   // <-- Deklaration
    
    void foo()    // <-- Definition
    {
      cout << "hello!\n";
    }
    

    Du darfst von diesen Definitionen nur jeweils eine einzige im Programm haben. Wenn Du Dein Programm in mehrere Module aufgeteilt hast und mehr als ein Modul diese Header-Datei einbindet, übersetzt der Compiler die Funktionen mehrfach und Du erhälst .obj/.o-Dateien (kompilierte "Übersetzungseinheiten"), die die Funktionsdefinitionen mehrfach enthalten. Das mag der Linker nicht und ist auch verboten.


Anmelden zum Antworten