Anzeige

VBA
Programmierer
gesucht?
 
Anzeige
VBA Programmierer gesucht?
 

Einfache C/C++ Beispiele für Einsteiger

Einfache C/C++ Beispiele für Einsteiger

Ein einfacher Taschenrechner mit ausführlichen Kommentaren

Folgend finden Sie einen kleinen Taschenrechner, ein typisches erstes Einsteigerprogramm!
Bei diesem Rechner sollten möglichst alle Kontrollstrukturen zu Übungszwecken verarbeitet werden. Es handelt sich um eines der ersten typischen Übungen innerhalb einer Fachinformatiker-Ausbildung.

Aufgabenstellung:

Erstellen Sie einen Taschenrechner mit 4 Grundrechenarten und folgenden Zusätzen:
1) Bauen Sie, wenn möglich, jede Kontrollstruktur in den Programmcode ein
2) Verwenden Sie mindestens ein Unterprogramm
3) Kommentieren Sie den Quelltext ausführlich
4) Optionale Zusatzerweiterungen: Division durch 0, Plausibilisierungen, "hübsche" Ausgabe, natürliche Eingabe

// ************************************************************************************************
// Autor/en: http://www.online-vba.de - Anika Muschner
// Verwendung der Quelltexte auf eigene Gefahr!
// Es gelten die Nutzungsbedingungen von www.Online-VBA.de!
// Original-Quelltext: www.online-vba.de/cpp_rechner2.php
// ************************************************************************************************

//Include bedeutet das Hinzfügen von Standardbibliotheken (sozusagen neue nutzbare Befehle)
#include "stdafx.h" //wurde von Mirosoft® Visual Studio Express eingefügt
#include <iostream> //wird für CIN und COUT benötigt

using namespace std; //Die normale Klassenschreibweise std::cin wird nun abgekürzt mit cin

//Funktionen und Unterprogramme
double substrahiere(double z1, double z2)
{
     return z1-z2;
}

/* Wichtiger Hinweis: Diese Funktion wird im Hauptproramm nicht verwendet und
   dient lediglich der Darstellung der Verwendung einer For-Schleife.
   Begründung: Eine Multiplikation via einfacher For-Schleife gilt nur für positive Ganzzahlen!
   Negative oder Fließkommazahlen innerhalb der Division können nicht via einer einfachen
   Zählschleife berechnet werden. */

double multipliziere(double z1, double z2)
{
     //return z1*z2;
     double erg=0;
     //int i=0; Man kann in der For Schleife eine Direktdeklaration durchführen
     for(int i=0;i<=z2;i++) //Abkürzung: i++ bedeutet soviel wie i = i + 1;
     {
         erg+=z1; //Abkürzung: += bedeutet soviel wie erg = erg + z1;
     }
     return erg;
}

double dividiere(double z1, double z2)
{
     return z1/z2;
}

double zahleingeben()
{
     double dzahl2;
     cout << "Bitte geben Sie die zweite Zahl ein: ";
     cin >> dzahl2;
     return dzahl2;
}

//Hauptprogramm
int _tmain(int argc, _TCHAR* argv[])
{
     //Hauptprogrammablauf nach Schema EVA
     //Variablendeklaration und Initialisierung
     (Deklaration=Anlage;Initialisierung=Ersten Wert setzen)

     bool bweiter=true; //Kennzeichnung, ob erneuter Programmdurchlauf oder Ende
     int ieingabemodus=0;
     char cantwort=' '; //Einzelzeichen werden mit einfachen ',
                        //Zeichenketten mit " Zeichen dargestellt

     double dzahl1=0; //Variablen werden immer initialisiert!!!
     double dzahl2=0;
     char coperator=' ';
     double dergebnis=0;
    
     do //Wiederholung des Programms, bis Benutzer das Ende wünscht
     {
         //E-ingabe
         //Begrüßung
         cout << "*******************************************************\n";
         // \n bedeutet ein Zeilenumbruch
         cout << "Herzlich Willkommen bei meinem ersten Taschenrechner!\n";
         cout << "*******************************************************\n\n";
        
         //Wir fragen den Nutzer, ob er Einzeleingaben oder eine natürliche Eingabe machen möchte
         cout << "Moechten Sie die Eingabe mit Einzelwerten (1)\n";
         cout << "oder eine natuerliche Eingabe (2) vornehmen?";
         cin >> ieingabemodus;
        
         // != bedeutet ungleich/nicht gleich, && ist eine UND Verknüpfung
         while (ieingabemodus!=1 && ieingabemodus!=2)
         {
             cout << "Bitte machen Sie eine korrekte Angabe (Moegliche Eingaben 1 oder 2): ";
             cin >> ieingabemodus;
         }
         //Unterscheidung der 2 Eingabemöglichkeiten
         if (ieingabemodus==1)
         {
             //Einzelwertemodus
             cout << "Bitte geben Sie die erste Zahl ein: ";
             cin >> dzahl1;
            
             //Alternative Eingabe über eine Funktion / Unterprogramm
             //cout << "Bitte geben Sie die zweite Zahl ein: ";
             //cin >> dzahl2;
             dzahl2 = zahleingeben();
            
             //Rechenart abfragen
             do
             {
                 cout << "Bitte eine Rechenart eingeben. Moegliche Eingaben sind +, -, *, /: ";
                 cin >> coperator;
             } while(coperator!='+' && coperator!='-' && coperator!='*' && coperator!='/');
            
         }
         else //ieingabemodus
         {
             //Optionale natürliche Eingabe
             cout << "Bitte geben Sie die durchzuführende Berechnung wie folgt ein (5+7): ";
             //Einlesen der einzelnen Eingabeströme in separate Variablen
             cin >> dzahl1 >> coperator >> dzahl2;
         }
        
         //Division durch 0 abfangen
         if (coperator=='/')
         {
             while(dzahl2==0)
             {
                 cout << "Bitte geben Sie die zweite Zahl ein, welche keine 0 sein darf: ";
                 cin >> dzahl2;
             }
         }
        
         //V-erarbeitung
         switch(coperator) //switch: Mehrfachverzweigung, cases für die einzelnen Fälle
         {
             case '+':
                 dergebnis = dzahl1 + dzahl2;
                 //dergebnis = addiere(dzahl1, dzahl2); ist die alternative Berechnung
                 //über ein Unterprogramm bzw. Funktion über ein Unterprogramm bzw. Funktion

                 break; //Ans Ende der Switch Anweisung gehen,
                     //ohne break würden alle weiteren Anweisungen ausgeführt werden!

             case '-':
                 //dergebnis = dzahl1 - dzahl2; ist die Standard-Berechnung im Hauptprogramm
                 dergebnis = substrahiere(dzahl1, dzahl2);
                 break;
             case '*':
                 dergebnis = dzahl1 * dzahl2;
                 //dergebnis = multipliziere(dzahl1, dzahl2);
                 break;
             case '/':
                 //dergebnis = dzahl1 / dzahl2;
                 dergebnis = dividiere(dzahl1, dzahl2);
                 break;
                 /* Das letzte break könnte man theoretisch weglassen,
                    da keine weiteren Anweisungen folgen!
                    Default technisch nicht möglich, da Plausis verhindern das ein ungültiges
                    Operatorzeichen eingegeben werden kann
                 */

         }
        
         //A-usgabe
         cout << "Ihr Ergebnis lautet: " << dergebnis << "\n"; //Verkettete Ausgabe durch erneutes <<
        
         //Benutzerabfrage: Noch eine Runde?
         cout << "Moechten Sie noch eine Rechnung durchfuehren (J/N)?";
         cin >> cantwort;
         while (cantwort!='j' && cantwort!='J'&& cantwort!='n' && cantwort!='N')
         {
             cout << "Bitte machen Sie eine korrekte Eingabe (J/N): ";
             cin >> cantwort;
         }
        
         // || ist die ODER Verknüfung, Kurzschreibweise ohne {} da jeweils nur eine Anweisung if/else
         if (cantwort=='j' || cantwort=='J')
             bweiter=true;
         else
             bweiter=false;
         cout << "\n";
    
     } while (bweiter==true);
    
     return 0; //Rückgabewert an das Betriebssystem, Programm beendet mit Rückwert 0
}



Autorin: Anika Muschner (Oktober 2013)

Zum Seitenanfang