Erste Gehversuche in C++

  • Themenstarter Themenstarter sYstemFehler
  • Beginndatum Beginndatum
S

sYstemFehler

Guest
Hallo Freunde der Informationstechnologie,

wie das Thema schon sag bin noch unerfahren in den Programmiersprachen. Jetzt habe ich versucht das laufen mit C++ zu lernen und ein kleines Rechenprogramm geschrieben. Jetzt habt bitte nicht solch große Erwartung den ich geh im augenblick noch auf allen vieren.
Ich habe folgendes Prob bei meinem Programm:
Das ich dem Nutzer erlauben will auch mit Gleitkommazahlen zu rechen habe ich die werte auch so deklariert, jetzt ist das problem das ich dem Nutzer ja sagen muß das er bei der Eingabe beachtet einen Punkt statt komma zu setzen, da sonst das Prog. abschmiert.
Gibt es eine möglichkeit das bei einer Komma eingabe, dieses in einen Punkt umgewandelt wird?
Wenn ihr Kretik und Tips habt spart nicht damit, ich bin immer offen und nehm Sachen gern an.

Ich danke euch schon mal im Voraus, da ich weiß das mir bestimmt einer helfen kann.


Code:
//Rechenprogramm
#include <iostream>
#include <cmath>
using namespace std;

int main ()
{
   long eingabe;        // für die Wurzel
   long wurzel;
   
   double ad1;            // für Addition
   double ad2;
   double adergebnis;
   
   double sub1;           // für Subtraktion
   double sub2;
   double subergebnis;
   
   double mul1;           // für Multiplikation
   double mul2;
   double mulergebnis;
   
   double div1;           // für Division
   double div2;
   double divergebnis;

   int befehl = - 1;
   
while ( befehl != 0 )
{
   cout << endl;
   cout << endl;
   cout << " MENUE " << endl;
   cout << endl;
   cout << endl;
   cout << " Zahlen addieren         <1> " << endl;
   cout << " Zahlen subtrahieren     <2> " << endl;
   cout << " Zahlen multiplitieren   <3> " << endl;
   cout << " Zahlen dividieren       <4> " << endl;
   cout << " Wurzel berechnen        <5> " << endl;
   cout << endl;
   cout << " Programm beenden        <0> " << endl;
   cout << endl;

   cout << " Ihre Auswahl:   ";
   cin >> befehl;
   cout << endl;


// Befehl bearbeitung
   switch (befehl)
   {
   
    case 0:cout << endl;                                                     // Schliessen des Programms
           cout << " Das Programm wird beendet " << endl;
		   cout <<  endl;
		   break;
   	
	case 1: cout << " Programm f\x81r die Addition " << endl;           // Addision
	        cout << endl;
	
	        cout << "Bitte geben Sie die erste Zahl an:   ";                 
	       	cin >> ad1;
			cout << endl;
			
			cout << "Bitte geben Sie die zweite Zahl an:  ";
			cin >> ad2;
			cout << endl;
			
			adergebnis = ad1 + ad2;
			cout << ad1 << " + " << ad2 << " = " << adergebnis << endl;
			cout << endl;
			break;
			
    case 2: cout << " Programm f\x81r die Subtraktion " << endl;           // Subtraktion
	        cout << endl;
			
	        cout << "Bitte geben Sie die erste Zahl an:   ";           
	        cin >> sub1;
			cout << endl;
			
			cout << "Bitte geben Sie die zweite Zahl an:   ";
			cin >> sub2;
			cout << endl;
			
			subergebnis = sub1 - sub2;
			cout << sub1 << " - " << sub2 << " = " << subergebnis << endl;
			cout << endl;
			break;
			
	case 3: cout << " Programm f\x81r die Multipliktion " << endl;          // Multipliktion
	        cout << endl;
	
	        cout << "Bitte geben Sie die erste Zahl an:  ";           
	        cin >> mul1;
			cout << endl;
		
			cout << "Bitte geben Sie die zweite Zahl an:   ";
			cin >> mul2;
			cout << endl;
			
			mulergebnis = mul1 * mul2;
			cout << mul1 << " * " << mul2 << " = " << mulergebnis << endl;
			cout << endl;
			break;
			
	case 4: cout << " Programm f\x81r die Division " << endl;          // Dividion
	        cout << endl;	
	
	        cout << "Bitte geben Sie die erste Zahl an:   ";
			cin >> div1;
			cout << endl;
			
			cout << "Bitte geben Sie die zweite Zahl an:   ";
			cin >> div2;
			cout << endl;
			
			divergebnis = div1 / div2;
			cout << div1 << " / " << div2 << " = " << divergebnis << endl;
			cout << endl;
			break;
			
	case 5: cout << "Programm zur Wurzelberechnugn" << endl;              //Wurzel
            cout << endl;
            cout << "Geben Sie eine positive Zahl ein" << endl;
			cout << endl;
            cin >> eingabe;
			cout << endl;
   
            if (eingabe >= 0)
            {
	        wurzel = sqrt (eingabe);
	        cout << " Die Wurzel von " << eingabe << " = " << wurzel << endl;
	        }
	        else
	        {
	        cout << "Eine Ausgabe negativer Zahl ist nicht m\x94glich" << endl;
	        }
	
            cout << endl;
		    break;
              
    default: cout << endl;
	         cout << " Ung\x81ltige Eingabe " << endl;
	         break;
	 
   }  // Ende von switch	

   fflush (stdin);
   cout << " Um zum Menue zurueck zu kehren bitte Return druecken ! " << endl;
   getchar();

} // Ende von while

return 0;

}
 
Die könntest mit Strings arbeiten. Dabei speicherst du die Eingabe des Benutzers mithilfe von getline() in einem string, dann prüfst du, ob der String ein Komma oder einen Punkt enthält und wenn ein Komma statt einem Punkt enthalten ist, dann ersetzt du das Komma im string durch einen Punkt, das geht auf vielerlei Arten, dazu siehe auf der Referenzseite. Dann kannst du den string in die Variable mit der Funktion atof()speichern.
Auf der Seite findest du alle Informationen, die du dafür benötigst.
 
Code:
double d;
std::string s;
std::cin >> s;
std::string::size_type loc = s.find( ",", 0 );
if( loc != std::string::npos )
	s.replace( loc, loc, "." );
std::istringstream is(s);
is >> d;
musst nurnoch einbauen


bestimmt gehts kürzer auch, aber so funktionierts ;)
 
Das muß man euch lassen, ihr seid schnell, danke schonmal für diese Antworten, ich werde dieses natürlich gleich mal versuchen umzusetzen und dann mal schauen ob es den reibungslos funzt.
Ich werde berichten ob ich es geschafft habe.

Danke für die mega schnelle antwort.

So nach langem Basteln und lesen und auf den Tisch klopfen habe ich endlich eine Variante fertig bekommen.
Bei der zweiten Variante bin ich erst garnet klar gekommen, sah zwar irgendwie okay aus, aber das rein basteln hat nicht hingehauen.
Deswegen habe ich mich dann für die Variante mit den Strings entschieden. Leider zeigt der Compiler mir hier wegen der ungünstig gewählten If-Schleife ne Warnung,
aber ich finde ich habe das für mein Wissen gut gemeister. Bitte belehrt mich, ich will lernen und vielleicht kann mir einer die 2'te Variante mal erläutern, in wie fern sie rein gebastelt werden muß!

Code:
//Rechenprogramm

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string>
#include <iostream>

using namespace std;

int main ()
{
   int i;
   double m,n;

   double eingabe;        // für die Wurzel
   double wurzel;
   
   char ad1 [256];            // für Addition
   char ad2 [259];
   double adergebnis;
            	
   char sub1 [256];           // für Subtraktion
   char sub2 [256];
   double subergebnis;
   
   char mul1 [256];           // für Multiplikation
   char mul2 [256];
   double mulergebnis;
   
   char div1 [256];           // für Division
   char div2 [256];
   double divergebnis;

   int befehl = - 1;
   
while ( befehl != 0 )
{
   cout << endl;
   cout << endl;
   cout << " MENUE " << endl;
   cout << endl;
   cout << endl;
   cout << "  Zahlen addieren         <1> " << endl;
   cout << "  Zahlen subtrahieren     <2> " << endl;
   cout << "  Zahlen multiplitieren   <3> " << endl;
   cout << "  Zahlen dividieren       <4> " << endl;
   cout << "  Wurzel berechnen        <5> " << endl;
   cout << endl;
   cout << "  Programm beenden        <0> " << endl;
   cout << endl;

   cout << " Ihre Auswahl:   ";
   cin >> befehl;
   cout << endl;


// Befehl bearbeitung
   switch (befehl)
   {
   
    case 0:cout << endl;                                                     // Schliessen des Programms
           cout << " Das Programm wird beendet " << endl;
		   cout <<  endl;
		   break;
   	
	case 1: printf ( " Bitte geben Sie die erste Zahl ein:   " );            // Addition
            gets (ad1);
              for (i=0; i<strlen(ad1); i++)
              if (ad1[i] == ',')
              ad1[i] = '.';
  
            n = atof(ad1);
			
			cout << endl;

            printf ( " Bitte geben Sie die zweite Zahl ein:   ");
            gets (ad2);
              for (i=0; i<strlen(ad2); i++)
               if (ad2[i] == ',')
               ad2[i] = '.';
  
            m = atof ( ad2 );
  
            adergebnis = n+m;
			
			cout << endl;
			
			printf ( " %3.2f + %1.2f = %1.2f\n"  , n, m,adergebnis );
  			break;
			
    case 2: printf ( " Bitte geben Sie die erste Zahl ein:   " );          //Subtraktion
            gets (sub1);
              for (i=0; i<strlen(sub1); i++)
              if (sub1[i] == ',')
              sub1[i] = '.';
  
            n = atof(sub1);
			
			cout << endl;

            printf ( " Bite geben Sie die zweite Zahl ein:   ");
            gets (sub2);
              for (i=0; i<strlen(sub2); i++)
               if (sub2[i] == ',')
               sub2[i] = '.';
  
            m = atof (sub2);
  
            subergebnis = n - m;
			
			cout << endl;
			
			printf ( " %3.2f - %1.2f = %1.2f\n"  , n, m,subergebnis );
			break;
			
	case 3: printf ( " Bitte geben Sie die erste Zahl ein:   " );         //Multiplikation
            gets (mul1);
              for (i=0; i<strlen(mul1); i++)
              if (mul1[i] == ',')
              mul1[i] = '.';
  
            n = atof(mul1);

			cout << endl;
			
            printf ( " Bite geben Sie die zweite Zahl ein:   ");
            gets (mul2);
              for (i=0; i<strlen(mul2); i++)
               if (mul2[i] == ',')
               mul2[i] = '.';
  
            m = atof ( mul2 );
  
            mulergebnis = n*m;
			
			cout << endl;
			
			printf ( " %3.2f * %1.2f = %1.2f\n"  , n, m,mulergebnis );
			break;
			
	case 4: printf ( " Bitte geben Sie die erste Zahl ein:   " );         //Division
            gets (div1);
              for (i=0; i<strlen(div1); i++)
              if (div1[i] == ',')
              div1[i] = '.';
  
            n = atof(div1);

			cout << endl;
			
            printf ( " Bite geben Sie die zweite Zahl ein:   ");
            gets (div2);
              for (i=0; i<strlen(div2); i++)
               if (div2[i] == ',')
               div2[i] = '.';
  
            m = atof ( div2 );
  
            divergebnis = n/m;
			
			cout << endl;
			
			printf ( " %3.2f / %1.2f = %1.2f\n"  , n, m,divergebnis );
			break;
			
	case 5: cout << " Programm zur Wurzelberechnugn" << endl;
            cout << endl;
            cout << " Geben Sie eine positive Zahl ein:   " ;
            cin >> eingabe;
   
            if (eingabe >= 0)
           {
	        wurzel = sqrt (eingabe);
	        cout << " Die Wurzel von " << eingabe << " = " << wurzel << endl;
	       }
	        else
	       {
	        cout << "Eine Ausgabe negativer Zahl ist nicht möglich" << endl;
	       }  
		    break;
              
    default: cout << endl;
	         cout << " Ung\x81ltige Eingabe " << endl;
	         break;
	 
   }  // Ende von switch	

   fflush (stdin);
   cout << endl;
   cout << " Um zum Menue zurueck zu kehren bitte Return druecken ! " << endl;
   getchar();

} // Ende von while

return 0;

}
 
Du könntest das ganze auch etwas einfacher lösen:
  • In den Fällen 1 bis 5 muss immer die Eingabe von einer bzw. zwei Zahlen erfolgen. Wenn du dir hierfür eine Funktion schreiben würdest, kannst du viel mehr Lesbarkeit in das Programm hineinbringen. Der Funktion würdest du dann die Nummer des Operanden übergeben (für die Ausgabe, damit man 1. bzw. 2. Zahl ausgeben kann) und zurückgeben kannst du dann den eingegebenen Wert
  • Für die Ausgabe würde ich in jedem Fall nur das Operandenzeichen in einer char-Variable abspeichern, damit die Ausgabe für alle Fälle am Schluss einmal erfolgen kann. Damit das funktioniert, würde ich für die Operanden und das Ergebnis nur insgesamt drei Variablen verwenden, egal welche Operation angewandt wurde.
 
Zurück
Oben