Taschenrecher Code, für Vorstellungsgespräch



  • Hi,
    Mit dem Intalisieren meint er, das du anstatt direkt am Anfang des Codes sie erst dort anlegst wenn du sie brauchst.
    Bsp.:

    int iName;
    //blablalba
    iName = izahl + izahl2;
    

    kann man sauberer auch so schreiben:

    int IName = izahl + izahl2;
    

    MFG ReduX



  • achso k danke, aber noch eine Frage, gibt es vllt einen Befehl um jeweils den Bildschirm löschen zu lassen? da clrscr(); nicht funktioniert in Code::blocks gibt es dafür vll irgendetwas??, da dieses Programm sonst sehr unübersichtlich wird??thx schoma @Redux

    PS: Programm wurde wieder überarbeitet, fehler ausgeglichen

    mfg whenyou



  • system("cls");
    


  • sollte reichen schrieb:

    system("cls");
    

    Funktioniert thx

    mfg
    whenyou



  • Zeig doch mal deinen jetztigen Code, dann können wir eventuell noch Unschönheiten etc. beseitigen.



  • @Nexus: Der Code wo auf seite 1 steht is der jetzige Code, ich überarbeite immer gleich wenn ich Tipps bekommen habe ;), also so habe ich ihn auch atm auf meinem Rechner (obwohl ich jetzt die Namen der Variablen so lasse)

    thx

    mfg
    whenyou



  • Hallo, ich hab noch ein paar Kleinigkeiten überarbeitet und deinen Code schön eingerückt (das macht einen sauberen Eindruck). Vielleicht noch einige Anmerkungen: Wenn man eine falsche Auswahlzahl (z.B. 7) eingibt, und nachher eine richtige, wird mit dieser bereits weitergerechnet. An sich nicht so schlimm, schau einfach, dass du bei der Vorstellung eine gültige Auswahl triffst 😉
    Und getch() ist veraltet, nimm getchar() , da brauchst du auch nur den Header <iostream>.

    #include <iostream>
    //#include <conio.h> brauchst du gar nicht
    
    using namespace std;
    
    int main ()
    {
        float  fltNumber=0;
        float  fltResult=0;
        int intMode=0;
        bool first=true;
    
        cout<<"Willkommen bei meinem Taschenrechner, viel Erfolg beim Rechnen!";
    
        do
        {
            if (first==false)
            {
                //getch(); würde ich weglassen, da man sonst immer 2 Mal Enter drücken muss
                system("cls");
                cout<<"\n\n------------------";
                cout<<"\nErgebnis: "<<fltResult<<"!";
                cout<<"\n------------------";
                cout<<"\n\n-------------------------------------------------";
                cout<<"\nSie koennen nun mit Ihrem Ergebnis weiterrechnen!";
                cout<<"\n-------------------------------------------------";
            }
    
            do
            {
                cout<<"\n\n\nWas moechten sie nun tun?";
                cout<<"\ndruecken Sie:";
                cout<<"\n\n(1) fuer eine Addition";
                cout<<"\n(2) fuer eine Subtraktion";
                cout<<"\n(3) fuer eine Multiplikation";
                cout<<"\n(4) fuer eine Division";
                cout<<"\n(5) wenn Sie Ihr Ergebnis auf Null setzten moechten";
                cout<<"\n(6) wenn Sie dass Programm beenden wollen";
                cout<<"\n\nNach der Zahleneingabe immer Enter druecken!!";
                cout<<"\n\nAuswahl: ";
                cin >>intMode;
                cout<<"----------";
    
                if (intMode<1||intMode>6)
                {
                    cout<<"\n\aIhre Eingabe war nicht korrekt, versuchen Sie es erneut!";
                    cout<<"\n---------------------------------------------------------";
                    //first=true; das kann man weglassen
                }
    
                if (intMode==5)
                {
                    fltResult=0;
                    cout<<"\n\n------------------";
                    cout<<"\nErgebnis: "<<fltResult<<"!";
                    cout<<"\n------------------";
                    cout<<"\n\nNun koennen Sie ein neues Ergebnis bestimmen!";
                    cout<<"\n---------------------------------------------";
                    first=false;
                }
    
                if (intMode==6)
                {
                    first=false;
                }
    
    			// hier war der If-Block
            } while (intMode<1||intMode>6);
    
            // hier ist er jetzt (+ Abfrage, ob Eingabe nicht 5 oder 6)
            if (first==true && intMode!=5 && intMode!=6)
            {
                cout<<"\n\nBitte tippen Sie nun Ihre erste gewuenschte Zahl ein:  ";
                cin >>fltResult;
            }
    
            if (intMode!=5 && intMode!=6)
            {
    			cout <<"\nBitte tippen Sie nun Ihre zweite gewuenschte Zahl ein: ";
    			cin >>fltNumber;
            }
    
    		switch (intMode)
            {
                case 1:
                     fltResult=fltResult+fltNumber;
                     first=false;
                break;
    
                case 2:
                     fltResult=fltResult-fltNumber;
                     first=false;
                break;
    
                case 3:
                    fltResult=fltResult*fltNumber;
                    first=false;
                break;
    
                case 4:
    				if (fltNumber==0)
    				{
    					cout<<"\n\n\aMan darf nicht durch Null teilen!!!";
    					cout<<"\n-----------------------------------";
    					first=true;
    					break;
    				}
    				else
    				{
    					fltResult=fltResult/fltNumber;
    				}
    				first=false;
                break;
    
                case 5:
    				fltResult=0;
    				first=true;
                break;
             }
        } while (intMode<=5);
    
        cout<<"\nVielen Dank fuer Ihren Besuch!";
        system("pause");   // statt getch()
        //return 0; // muss nicht explizit stehen, main() gibt normalerweise 0 zurück
    }
    


  • Nexus schrieb:

    Hallo, ich hab noch ein paar Kleinigkeiten überarbeitet und deinen Code schön eingerückt (das macht einen sauberen Eindruck). Vielleicht noch einige Anmerkungen: Wenn man eine falsche Auswahlzahl (z.B. 7) eingibt, und nachher eine richtige, wird mit dieser bereits weitergerechnet. An sich nicht so schlimm, schau einfach, dass du bei der Vorstellung eine gültige Auswahl triffst 😉
    Und getch() ist veraltet, nimm getchar() , da brauchst du auch nur den Header <iostream>.

    ok dankeschön, aber ne frage, vll könntest du mir ja helfen, du hast gesagt ich rechne dann mit dem falschen Ergebnis weiter, wie muss man dass umschreiben?, dass das nicht geht?, sehe da grade nicht die stelle wo ich was einfügen müsste um diesen fehler zu beheben

    thx!

    mfg whenyou

    EDIT: OK dass problem liegt bei der IF Schleife

    if (intMode<1||intMode>6)
                {
                    cout<<"\n\aIhre Eingabe war nicht korrekt, versuchen Sie es erneut!";
                    cout<<"\n---------------------------------------------------------";
                    first=false;
                }
    

    aber wenn ich first=true; setzte, dann kriege ich wieder 2 zahlen zum weiterrechnen, aber wenn ich schonmal ein ergebnis, hatte dann stimmts ja eigentlich wieder, diees problem tritt ja eigentlich nur am anfang auf oder??



  • Natürlich braucht mein einen Rückgabewert. Deshalb heißt es ja auch int main(). 🙄



  • Nexus schrieb:

    Und getch() ist veraltet, nimm getchar() , da brauchst du auch nur den Header <iostream>.

    Uff, soviel falsches in so einem kleinen Satz. Fakten:

    1. getch ist eine nicht im Standard enthaltene Funktion aus Borlands conio.h (wahrscheinlich auch bei anderen Compilern/Libraries anzutreffen)
    2. getchar ist nur bedingt eine Alternative zu getch, da getchar auf dem Standardeingabestrom und getch auf der Tastatur agiert.
    3. getchar steht in <stdio.h> bzw. <cstdio>
    4. Die C++-Version von getchar() ist cin.get(), dazu ist <iostream> nötig.
      Nichts davon ist veraltet. Man kann höchstens argumentieren, dass man in C++-Programmen zugunsten von iostream auf stdio.h und damit auf getchar verzichten sollte...


  • Tut mir leid, mit dem kenne ich mich auch nicht so gut aus (ich mach Tastatureingaben sonst immer über irgendwelche Grafiklibraries). Aber der <iostream>-Header reicht für getchar() zumindest...

    Also, ich hab den Code oben noch einmal editiert. Sonst nimmst du eben trotzdem getch() aus <conio.h>, oder eben cin.get() . Und was den Fehler betrifft, das habe ich im Code kommentiert.



  • Danke @ Nexus, ein Problem wäre nun aber noch offen.

    Nämlich wenn du dass Programm startest, und meinetwegen eine Addition durchführst 1+1 meinetwegen, dann kommt dass Menu wieder du gibst 8 ein(fehlermeldung), dann meinetwegen wieder Addition, und dann musst du wieder 2 neue zahlen eingeben, aber wenns ginge, dass er dann mit dem alten ergebniss weiterrechnet verstehst du?, beim ersten mal passts ja, aber beim 2ten durchlauf zumindest, hoffe du verstehst was ich meine

    mfg
    whenyou

    Edit: Dürfte dass Problem gelöst haben, schau ma bitte die if-schleife an wo unten steht

    if (first==true&&intMode<1||intMode>6&&first==true)
                {
                    cout<<"\n\aIhre Eingabe war nicht korrekt, versuchen Sie es erneut!";
                    cout<<"\n---------------------------------------------------------";
                    first=true;
                }
                else if (first==false&&intMode<1||intMode>6&&first==false)
                {
                    cout<<"\n\aIhre Eingabe war nicht korrekt, versuchen Sie es erneut!";
                    cout<<"\n---------------------------------------------------------";
    
                }
    

    nur noch eine else if schleife eingefügt, hoffe sowas ist zulässig?



  • Ich denke, du kannst es einfacher machen, indem du first=true; weglässt (siehe Kommentar im oberen Post). Und statt getch() kannst du auch system("pause") verwenden. Und bevor nun wieder einer kommt mit dem Argument, das sei nicht plattformunabhängig, soll sich dieser mal überlegen, was er mit system("cls") macht.

    Aber berücksichtige doch meine Einrückung, das sieht wirklich sauberer aus.



  • So jo ok, ist nochmal editiert worden auf Seite 1, danke dir Nexus für deine Hilfe, hoffe ma dass der Taschenrechner morgen gut rüberkommt ;), hoffe ma jetzt sind alle fehler beseitigt, falls nicht schreibts einfach 😉

    thx@alle die wo geholfen haben

    mfg
    whenyou



  • lass uns wissen wie's ausgegangen ist 🙂



  • sothis_ schrieb:

    lass uns wissen wie's ausgegangen ist 🙂

    Ja, das wäre noch interessant.

    Ich empfehle dir, den Taschenrechner vorher noch gut zu testen, es kann schon sein, dass wir etwas übersehen haben. Und verstehst du deinen Code, sodass du ihn auch erklären könntest? Sonst kommt das Ganze nicht so gut rüber...



  • jo ich sag euch wies ausgeht ;), hoffe ma natürlich ne zusage, und ja ich verstehe den code, den einzigen unterschied ist ja zwischen == und = nur dass bei == die bedingung zutreffen muss und bei = eine bedingung gesetzt wird also z.b. zahl=1; z.b. und dass die bool variable nur 2 werte annehmen kann (true,false), und dadurch kann man im ersten durchgang verschiedene sachen nicht anzeigen lassen (falls etwas falsch ist bitter verbessern), der vorteil von einer do while schleife und nicht nur einer while schleife ist, dass dass programm einmal diese do while schleife durchgeht und dann erst die bedigung kommt, bei einer kopfgesteuerten while schleife, ist es wenn die bedingung nicht gegeben ist, es gar nicht dazu kommt, dass die schleife ausgeführt wird.

    != heißt ja ist nicht oder?, so denke ma den rest dürfte ich sonst alles wissen 😉

    also leute thx nochmal für euere anstrengungen mir zu helfen

    mfg whenyou



  • whenyouDIE schrieb:

    jo ich sag euch wies ausgeht ;), hoffe ma natürlich ne zusage, und ja ich verstehe den code, den einzigen unterschied ist ja zwischen == und = nur dass bei == die bedingung zutreffen muss und bei = eine bedingung gesetzt wird also z.b. zahl=1; z.b. und dass die bool variable nur 2 werte annehmen kann (true,false), und dadurch kann man im ersten durchgang verschiedene sachen nicht anzeigen lassen (falls etwas falsch ist bitter verbessern), der vorteil von einer do while schleife und nicht nur einer while schleife ist, dass dass programm einmal diese do while schleife durchgeht und dann erst die bedigung kommt, bei einer kopfgesteuerten while schleife, ist es wenn die bedingung nicht gegeben ist, es gar nicht dazu kommt, dass die schleife ausgeführt wird.

    != heißt ja ist nicht oder?, so denke ma den rest dürfte ich sonst alles wissen 😉

    also leute thx nochmal für euere anstrengungen mir zu helfen

    mfg whenyou

    Ja. Das stimmt so.

    Allerdings hätte ich das jetzt noch brav in eine Klasse gepackt und noch Dateien draus gemacht, dann hätte das ganze gleich viel aufgeräumter gewirkt. (Wahrscheinlich ist die das schon zu viel, oder?)

    EDIT:
    Was aber imho UNBEDINGT noch rein muss ist das abfangen von falschen Eingaben. (Also wenn du mal einen Buchstaben drückst, siehst du, was ich meine. ;))



  • @drakon: ja ich weiß was du meinst, nur bin ich leider immoment noch nicht soweit mit meiner Programmierung in C++, und ich muss dass ja auch alles erklähren könnnen und ggf. erneut programmieren ohne vorlag verstehst du?, da bin ich lieber ehrlich und sage dennen dass ich noch nicht soweit bin

    und wie meinst du dass mit dem satz:

    Allerdings hätte ich das jetzt noch brav in eine Klasse gepackt und noch Dateien draus gemacht, dann hätte das ganze gleich viel aufgeräumter gewirkt. (Wahrscheinlich ist die das schon zu viel, oder?)

    bin noch nicht so der begabteste Programmierer und erst am Anfang sry.
    mfg whenyou



  • whenyouDIE schrieb:

    @drakon: ja ich weiß was du meinst, nur bin ich leider immoment noch nicht soweit mit meiner Programmierung in C++, und ich muss dass ja auch alles erklähren könnnen und ggf. erneut programmieren ohne vorlag verstehst du?, da bin ich lieber ehrlich und sage dennen dass ich noch nicht soweit bin

    Ja, das stimmt schon so.

    whenyouDIE schrieb:

    und wie meinst du dass mit dem satz:

    Allerdings hätte ich das jetzt noch brav in eine Klasse gepackt und noch Dateien draus gemacht, dann hätte das ganze gleich viel aufgeräumter gewirkt. (Wahrscheinlich ist die das schon zu viel, oder?)

    bin noch nicht so der begabteste Programmierer und erst am Anfang sry.
    mfg whenyou

    Naja. Klassen hald. 😉 - OOP sagt dir noch nix, oder?


Anmelden zum Antworten