Zwei Integer addieren (zusammenfuegen)



  • Hallo,
    ich habe folgendes Problem:
    Ich habe einen Integer (int) und einen Char (eigentlich ein Element aus einem String-Array der string-Klasse).
    Dieser Integer enthaelt z.B. die Zahl 2 und ich moechte jetzt eine weitere Zahl (das in dem char enthalten ist) "dazufuegen", z.B. wenn der char die Zahl '5' enthaelt, dass das Ergebnis dann '25' ist.
    Hat jemand eine Idee wie das geht?

    Gruss,
    Cartman



  • integer * 10 + (character - '0')
    


  • funktioniert leider nicht ... 😞



  • Eric Cartman schrieb:

    funktioniert leider nicht ... 😞

    das ist KEINE hinnehmbare Fehlerbeschreibung



  • char s[64]={0};
    	int zahl=2;
    	char c='5';
    	sprintf(s,"%d%d",zahl,c-'0');
    

    EDIT: Ach, du wolltest ein numerisches Ergebnis, ja? Dann sollte Tims Lösung doch eigentlich klappen. Zeig mal, wie du sie angewendet hast.



  • Na schoen 😉

    Also ich bin gerade dabei einen "Taschenrechner" - als Uebung zum C++-lernen zu bauen (bisher hab ich nur die Grundlagen gelernt und noch kein OOP).

    Hier ein ausfuehrlich dokumentierter Code:

    #include <iostream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    int main()
    {
    	string Rechnung;
    
    	cout << "C++ Konsolentaschenrechner" << endl;
    	cout << "**************************\n\n";
    
    	do
    	{
    		cout << "\nGeben Sie ihre Rechnung ein: ";
    
    		getline(cin, Rechnung);		//Rechnungseingabe
    
    	} while(Rechnung == "");
    
    	vector<int> Zahlen;				// Array fuer die Zahlen
    	vector<char> Operatoren;		// Array fuer die Operatoren
    
    	int PosZahl = 0;				// Anzahl der Zahlen
    	int PosOperator = 0;			// Anzahl der Rechenzeichen
    	bool LetzterWertZahl = false;	// wenn der letzte Wert eine Zahl war,
    									// dann soll sie zur alten Zahl 'hinzugefuegt'
    									// werden
    
    	for(unsigned int i=0; i<Rechnung.size(); i++)		// String auswerten
    	{
    		if(static_cast<char>(Rechnung[i]) == '+' || static_cast<char>(Rechnung[i]) == '-' || static_cast<char>(Rechnung[i]) == '*' || static_cast<char>(Rechnung[i]) == '/') {
    			// wenn es ein Rechenzeichen war, dann fuege es in den Array ein
    			PosOperator++;
    			Operatoren.push_back(Rechnung[i]);
    			LetzterWertZahl = false;
    		}
    		else {
    			if(LetzterWertZahl == false) {
    				// wenn es vorher ein Rechenzeichen war
    				// fuege die neue Zahl in das Array
    				PosZahl++;
    				Zahlen.push_back(static_cast<int>(Rechnung[i]) - static_cast<int>('0'));
    				LetzterWertZahl = true;
    			}
    			else {
    				// ansonsten fuege das neue Zeichen zur alten Zahl
    				// hier ist das Problem
    				// dieser Code klappt nicht
    				Zahlen[PosZahl-1] * 10 + (Rechnung[i] - '0');
    			}
    		}
    	}
    
    	// Nur zum Testen ob ich alles bisher richtig gemacht habe:
    	for(int i=0; i<Zahlen.size(); i++)
    		cout << Zahlen[i] << endl;
    
    	cout << endl;
    
    	for(int i=0; i<PosOperator; i++)
    		cout << Operatoren[i] << endl;
    
    	cout << "\nENTER druecken, um zu beenden...";
    	getline(cin, Rechnung);
    	return 0;
    
    }
    


  • Zahlen[PosZahl-1] * 10 + (Rechnung[i] - '0');
    

    Du rechnest in der betreffenden Zeile zwar schön was zusammen, weist das Ergebnis aber gar nicht zu! In der Zeile passiert quasi gar nix!



  • _matze schrieb:

    Zahlen[PosZahl-1] * 10 + (Rechnung[i] - '0');
    

    Du rechnest in der betreffenden Zeile zwar schön was zusammen, weist das Ergebnis aber gar nicht zu! In der Zeile passiert quasi gar nix!

    Das fand ich anfangs auch etwas merkwuerdig. Da dies aber in der Sprache funktioniert hat, die ich vorher genutzt habe, dachte ich mir das geht in C++ auch...

    Aber wie mache ich das jetzt richtig?



  • Okay, habs nun herausgefunden...

    Zahlen[PosZahl-1] = Zahlen[PosZahl-1] * 10 + (Rechnung[i] - '0');
    

    ist richtig.

    Zahlen[PosZahl-1] *= 10 + (Rechnung[i] - '0');
    

    ist falsch... Wieso? Ich dachte, es waere das gleiche...

    Und dann noch eine Frage... Warum ist das? Warum wird die Zahl mit 10 multipliziert? Kann mir einer die Loesung erlaeutern? Wuerde gern verstehen, wie das funktioniert 🙂

    Gruss,
    Cartman



  • in der einen zeile steht quasi
    5
    und in der anderen
    variable = 5

    ist das das gleiche?
    ich denke eher nicht, auch nicht in anderen sprachen

    Eric Cartman schrieb:

    Zahlen[PosZahl-1] = Zahlen[PosZahl-1] * 10 + (Rechnung[i] - '0');
    

    ist richtig.

    hier gilt punkt vor strich rechnung...

    Eric Cartman schrieb:

    Zahlen[PosZahl-1] *= 10 + (Rechnung[i] - '0');
    

    ist falsch... Wieso? Ich dachte, es waere das gleiche...

    hier nicht, d.h. die zahl aus dem array wird mit (10+...) multipliziert...

    der compiler wertet hier erst die rechte seite komplett aus und rechnet dann erst



  • Du verstehst nicht.

    Dies ...

    Zahlen[PosZahl-1] *= 10 + (Rechnung[i] - '0');
    

    ... ist ein Ausdruck. Wenn du diesen an nichts zuweist, wird der Wert nach dem Berechnen verworfen! Was denn auch sonst? Wo sollte er gespeichert werden, wenn du es nicht angibst?

    Man man... nichtmal den Zuweisungsoperator begreifen aber schon Rechner programmieren...

    🙄



  • Ausdrücker schrieb:

    Du verstehst nicht.

    Dies ...

    Zahlen[PosZahl-1] *= 10 + (Rechnung[i] - '0');
    

    ... ist ein Ausdruck. Wenn du diesen an nichts zuweist, wird der Wert nach dem Berechnen verworfen! Was denn auch sonst? Wo sollte er gespeichert werden, wenn du es nicht angibst?

    Man man... nichtmal den Zuweisungsoperator begreifen aber schon Rechner programmieren...

    🙄

    Du auch nicht. 😉 Guck mal genauer hin.
    Skym0sh0 hat ihm das Problem richtig erklaert.



  • @Skym0sh0
    Das meinte ich auch nicht, du hast mich falsch verstanden 😉
    In der Sprache, die ich vorher benutzt habe (PB), war folgendes:

    variable + 5
    

    gleichwertig mit

    variable = variable + 5
    

    daher dachte ich, das waere in C++ genauso, nachdem ich den Post von Tim gelesen habe.

    Mit dem Rest hast du natuerlich voellig recht, danke fuer die Aufklaerung! 😉

    @Ausdruecker
    siehe Post von "GyroGearloose" 😉

    Uebrigens ist mein Rechner jetzt fertig...
    Funktioniert einwandfrei, nur leider ohne Punkt-vor-Strich, ohne Kommazahlen und ohne Klammern... dafuer reichen wohl meine Kenntnisse noch nicht aus 😞

    Danke fuer eure Hilfe...

    ich verstehe aber trotzdem noch nicht, wieso ein Integer zuerst mit 10 multipliziert werden muss und erst anschliessend der char dazuaddiert werden kann... das wuerde mich noch interessieren...

    Gruss,
    Cartman



  • Eric Cartman schrieb:

    ich verstehe aber trotzdem noch nicht, wieso ein Integer zuerst mit 10 multipliziert werden muss und erst anschliessend der char dazuaddiert werden kann... das wuerde mich noch interessieren...

    Beispiel: du hast die Zahl 25 der du die Ziffer 6 "anhängen" willst. Dazu musst du die 25 um eine Ziffer "nach links verschieben". Das machen wir mit *10. dadurch ist sicher, dass die letzte Ziffer der Zahl 0 ist. Nun addieren wir die Zahlen und das Ergebnis ist da.

    25  | *10
    250 | +6
    256
    

    Allgemein: Das Verfahren funktioniert bei jeder Basis:

    neue_zahl = alte_zahl * basis + neue_ziffer



  • Tim schrieb:

    Eric Cartman schrieb:

    ich verstehe aber trotzdem noch nicht, wieso ein Integer zuerst mit 10 multipliziert werden muss und erst anschliessend der char dazuaddiert werden kann... das wuerde mich noch interessieren...

    Beispiel: du hast die Zahl 25 der du die Ziffer 6 "anhängen" willst. Dazu musst du die 25 um eine Ziffer "nach links verschieben". Das machen wir mit *10. dadurch ist sicher, dass die letzte Ziffer der Zahl 0 ist. Nun addieren wir die Zahlen und das Ergebnis ist da.

    25  | *10
    250 | +6
    256
    

    Allgemein: Das Verfahren funktioniert bei jeder Basis:

    neue_zahl = alte_zahl * basis + neue_ziffer

    Vielen Dank fuer deine ausfuehrliche Erklaerung!
    Habs jetzt verstanden - klingt total logisch und einfach - reine Mathematik 😃

    Danke nochmal @ all

    Gruss,
    Cartman



  • Eric Cartman schrieb:

    In der Sprache, die ich vorher benutzt habe (PB), war folgendes:

    variable + 5
    

    gleichwertig mit

    variable = variable + 5
    

    Welche Sprache denn?


Anmelden zum Antworten