78 Zeilen, wer bietet weniger?

  • Hallo Leute,
    ich wollte hier einfach mal mein erstes C++ Skript vorstellen, es ist, wie könnte es anders sein ein Taschenrechner :P
    Außerdem wollte ich mal wissen wie man den Code kürzer und effizienter gestalten kann, weil ich nicht unbedingt anfangen will sofort nur langsamen Code zu programmieren, also postet doch einfach mal eine gekürzte Version davon ;)

    Spoiler anzeigen

    #include "stdafx.h"
    #include <iostream>
    #include <conio.h>
    #include <string>
    using namespace std ;

    char auswahl;
    char nochmal;
    bool berechnet = false;
    bool exitloop = false;
    double zahl1;
    double zahl2;
    double ergebnis;

    void rechner()
    {
    cout << "Wollen sie addieren(a) subtrahieren(s) multiplizieren(m) oder dividieren(d)" << endl;
    cin >> auswahl;
    cout << "Geben sie Zahl 1 an:" << endl;
    cin >> zahl1;
    cout << "Geben sie Zahl 2 an:" << endl;
    cin >> zahl2;
    switch (auswahl)
    {
    case 'a' :
    ergebnis = zahl1 + zahl2;
    berechnet = true;
    break;
    case 's' :
    ergebnis = zahl1 - zahl2;
    berechnet = true;
    break;
    case 'm' :
    ergebnis = zahl1 * zahl2;
    berechnet = true;
    break;
    case 'd' :
    if (zahl2 != 0)
    {
    ergebnis = zahl1 / zahl2;
    berechnet = true;
    }
    else
    {
    berechnet = false;
    }
    break;
    }
    if (berechnet == true)
    {
    cout << "Das Ergebnis ist: " << ergebnis << endl;
    }
    else
    {
    cout << "FAIL!" << endl;
    }
    }

    int _tmain()
    {
    rechner();
    while (exitloop == false)
    {
    cout << "Nochmal(y) oder nicht (n)" << endl;
    cin >> nochmal;
    switch (nochmal)
    {
    case 'y' :
    rechner();
    break;
    default :
    exitloop = true;
    break;
    }
    }
    _getch();
    return 0;
    }

    Danke
    DFPWare

  • Hi,

    sieht doch ganz gut aus. :)
    Allerdings enthält es noch einen schweren Fehler. Bei einer Division musst Du unbedingt darauf achten, dass der Divisor niemals null ist, andernfalls, wenn durch null geteilt wird, wird eine Ausnahme ausgelöst (Interrupt 0) und das Programm wird mit einer Fehlermeldung beendet. ;)


    Gruß
    Greenhorn


  • Zumindest die Zeilenanzahl kann ich kürzen :)

    C
    #include "stdafx.h"
    #include <iostream>
    #include <conio.h>
    #include <string>
    char auswahl, nochmal; bool berechnet = false, exitloop = false; double zahl1, zahl2, ergebnis; void rechner() {std::cout << "Wollen sie addieren(a) subtrahieren(s) multiplizieren(m) oder dividieren(d)" << endl; std::cin >> auswahl; std::cout << "Geben sie Zahl 1 an:" << endl; std::cin >> zahl1; std::cout << "Geben sie Zahl 2 an:" << endl; std::cin >> zahl2; switch (auswahl) { case 'a' : ergebnis = zahl1 + zahl2; berechnet = true; break; case 's' : ergebnis = zahl1 - zahl2; berechnet = true; break; case 'm' : ergebnis = zahl1 * zahl2; berechnet = true; break; case 'd' : if (zahl2 != 0) { ergebnis = zahl1 / zahl2; berechnet = true; } else { berechnet = false; } break; } if (berechnet == true) { std::cout << "Das Ergebnis ist: " << ergebnis << endl; } else { std::cout << "FAIL!" << endl; } }  int _tmain() { rechner(); while (exitloop == false) { std::cout << "Nochmal(y) oder nicht (n)" << endl; std::cin >> nochmal; switch (nochmal) { case 'y' : rechner(); break; default : exitloop = true; break; } } _getch(); return 0; }


    Tada, 5 Zeilen :rofl:

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Ich biete 43 ... :)
    Mit ein wenig quetschen wären noch ein paar Zeilen drin (aber wer will das dann noch lesen)...

    Spoiler anzeigen

    Gruß
    Greenhorn


  • Ich weiß ist fies aber bin auf 57 Zeilen :D

    Spoiler anzeigen

    Edit: Mist da waren einige schneller

  • So hab jetzt selber noch ein wenig rumgespielt und ein paar Klammern weggelassen ;)
    Bin jetzt bei 59 Zeilen:)

    Spoiler anzeigen

    #include "stdafx.h"
    #include <iostream>
    #include <conio.h>
    #include <string>
    using namespace std ;

    char auswahl, nochmal = 'y';
    bool berechnet = false;
    double zahl1, zahl2, ergebnis;

    void rechner()
    {
    cout << "Wollen sie addieren(a) subtrahieren(s) multiplizieren(m) oder dividieren(d)" << endl;
    cin >> auswahl;
    cout << "Geben sie Zahl 1 an:" << endl;
    cin >> zahl1;
    cout << "Geben sie Zahl 2 an:" << endl;
    cin >> zahl2;
    berechnet = false;
    switch (auswahl)
    {
    case 'a' :
    ergebnis = zahl1 + zahl2;
    berechnet = true;
    break;
    case 's' :
    ergebnis = zahl1 - zahl2;
    berechnet = true;
    break;
    case 'm' :
    ergebnis = zahl1 * zahl2;
    berechnet = true;
    break;
    case 'd' :
    if (zahl2 != 0)
    {
    ergebnis = zahl1 / zahl2;
    berechnet = true;
    }
    else
    berechnet = false;
    break;
    }
    if (berechnet == true)
    cout << "Das Ergebnis ist: " << ergebnis << endl;
    else
    cout << "FAIL!" << endl;
    }

    int _tmain()
    {
    while (nochmal == 'y')
    {
    rechner();
    cout << "Nochmal(y) oder nicht (n)" << endl;
    cin >> nochmal;
    }
    return 0;
    }

    @L3V: Mist ich hab vergessen, dass C++ nich zeilenorientiert ist -.- :D
    Greenhorn: Danke, dank dir weiß ich jetzt, dass man nicht überall Klammern braucht
    DevFly: Mist immer noch 2 Zeilen weniger :P

    DFPWare

    PS: Greenhorn wie hast du die Formatierung hinbekommen, ich hab FF und der unterstützt doch eigentlich alles oder?

  • PS: Greenhorn wie hast du die Formatierung hinbekommen, ich hab FF und der unterstützt doch eigentlich alles oder?


    Code wird in der Quellcode-Ansicht des Editors eingefügt und abgesendet ;)

  • Spoiler anzeigen

    #include "stdafx.h"
    #include <iostream>
    #include <conio.h>
    #include <string>
    using namespace std ;

    char auswahl, nochmal = 'y';
    bool berechnet = false;
    double zahl1, zahl2, ergebnis;

    void rechner()
    {
    cout << "Wollen sie addieren(a) subtrahieren(s) multiplizieren(m) oder dividieren(d)" << endl;
    cin >> auswahl;
    cout << "Geben sie Zahl 1 an:" << endl;
    cin >> zahl1;
    cout << "Geben sie Zahl 2 an:" << endl;
    cin >> zahl2;
    berechnet = false;
    switch (auswahl)
    {
    case 'a' :
    ergebnis = zahl1 + zahl2;
    berechnet = true;
    break;
    case 's' :
    ergebnis = zahl1 - zahl2;
    berechnet = true;
    break;
    case 'm' :
    ergebnis = zahl1 * zahl2;
    berechnet = true;
    break;
    case 'd' :
    if (zahl2 != 0)
    {
    ergebnis = zahl1 / zahl2;
    berechnet = true;
    }
    else
    berechnet = false;
    break;
    }
    if (berechnet == true)
    cout << "Das Ergebnis ist: " << ergebnis << endl;
    else
    cout << "FAIL!" << endl;
    }

    int _tmain()
    {
    while (nochmal == 'y')
    {
    rechner();
    cout << "Nochmal(y) oder nicht (n)" << endl;
    cin >> nochmal;
    }
    return 0;
    }


    klappt nich :(
    egal wie ich es drehe und wende
    DFPWare

  • Packe es in [code] Tags ...

    Ich habe noch ein paar grobe Schnitzer abgefedert, aber ganz fehlerfrei ist es immer noch nicht ...

    Spoiler anzeigen

    Ah ja, habe noch um eine Zeile kürzen können, ohne das es unlesbar wird ... ;)

    EDIT:
    Noch mal zwei Zeilen und immer noch lesbar ... (Aber nun ist Schluss) :D


    Gruß
    Greenhorn


    3 Mal editiert, zuletzt von Greenhorn (20. Juli 2011 um 23:31)