Abschneiden eingelesene Zahl



  • danke

    Eingabe 215.367
    Ausgabe zwei-eins....komma...sieben

    Ich dachte mit einer Schleife könnte ich das lösen
    Beginn 1000000000
    /10 um die Zahl zu verkürzen
    und dann &10 um den Rest zu nehmen
    if(Rest==0)
    weitermachen
    else
    switch()ausgeben
    aber das funktioniert nicht

    #include <iostream>
    using namespace std;
    
    int main(){
    
    cout<<"Reelle Zahl eingeben"<<endl;
    double n;
    cin>>n;
    
    int a,b;
    
    a=(int)n;
    
    while(a>9){
    
                a/=10;
    
        switch(a) {
                  case 1: cout<<"eins"; break;
                  case 2: cout<<"zwei"; break;
                  case 3: cout<<"drei"; break;
                  case 4: cout<<"vier"; break;
                  case 5: cout<<"fuenf"; break;
                  case 6: cout<<"sechs"; break;
                  case 7: cout<<"sieben"; break;
                  case 8: cout<<"acht"; break;
                  case 9: cout<<"neun"; break;
                  case 0: a<10; cout<<"null"; break;
                  cout<<"-"; break;
                  default: ;
    
                                              }
                  }
    
    cout<<"komma";
    
    b=n-(int)n;
    
    while(b<0){
    
                 b*=10;       
    
        switch(b) {
                  case 1: cout<<"eins"; break;
                  case 2: cout<<"zwei"; break;
                  case 3: cout<<"drei"; break;
                  case 4: cout<<"vier"; break;
                  case 5: cout<<"fuenf"; break;
                  case 6: cout<<"sechs"; break;
                  case 7: cout<<"sieben"; break;
                  case 8: cout<<"acht"; break;
                  case 9: cout<<"neun"; break;
                  case 0: cout<<"null"; break;
                  cout<<"-"; break;
                  default: ;                            
                  }
    
                  }
    
    cout<<"."<<endl;
    cin>>a;
    
    }
    


  • Einfachste Lösung: Du multiplizierst bzw. dividierst solange mit 10, bis du im Bereiche [1,10[ bist, und gibst dann den Vorkomma-Teil zurück.

    Alternativ kannst du die Zahl auch in einen String umwandeln und dann die Ziffern dort herausholen.



  • CStoll schrieb:

    Einfachste Lösung: Du multiplizierst bzw. dividierst solange mit 10, bis du im Bereiche [1,10[ bist, und gibst dann den Vorkomma-Teil zurück.

    Alternativ kannst du die Zahl auch in einen String umwandeln und dann die Ziffern dort herausholen.

    String habe ich noch nicht gelernt

    Bereich 1,10 meinst du die Fließkommazahl 1,1 oder den Wertebereich von 1 bis 10?



  • 2



  • Gemeint ist das halboffene Intervall.
    Sprich alle Zahlen von 1 bis 10, aber exklusive 10 (sprich ohne 10).


  • Mod

    unsigned kopie = original;
    while (kopie > 9) kopie/=10;
    cout << "Die erste Stelle von " << original << " ist " << kopie << ".\n";
    


  • Noch eine Bitte - und eigentlich sollte das selbstverständlich sein.

    Lass bitte dein anfängliches posting (sprich: die Eingangsfragestellung bzw. Beschreibung des Problems) stehen. So können auch andere Leser, die ein ähnliches oder sogar gleiches Problem haben die Forensuche nutzen und den thread nachvollziehen.

    Nun hast du alles gelöscht und einfach "Danke" hingeschrieben, und keiner weiss mehr worum es ging.

    ALso in Zukunft: Einfach auf den bestehenden thread antworten und mit neuem posting bedanken - und das Anfangsposting unverändert lassen.



  • Nicht besonders schön, aber vlt. das was du haben wolltest?

    #include <algorithm>
    #include <iostream>
    #include <string>
    #include <map>
    #include <sstream>
    
    struct convert {
    	static std::map<char,std::string> myMap;
    	static void init() {
    		myMap.clear();
    		myMap['0']  = "null";
    		myMap['1']  = "eins";
    		myMap['2']  = "zwei";
    		myMap['3']  = "drei";
    		myMap['4']  = "vier";
    		myMap['5']  = "fuenf";
    		myMap['6']  = "sechs";
    		myMap['7']  = "sieben";
    		myMap['8']  = "acht";
    		myMap['9']  = "nein";
    		myMap['.']  = "komma";
    	}
    
    	void operator()(char c) {
    		std::cout << myMap[c] << "-";
    	}
    };
    std::map<char,std::string> convert::myMap;
    
    std::string getStringRepresentation (double value) {
    	std::ostringstream oss;
    	oss << value;
    	return oss.str();
    }
    
    int main () {
    	double zahl;
    	std::cout << "Zahl eingeben: ";
    	std::cin >> zahl;
    	std::string strzahl(getStringRepresentation(zahl));
    	convert::init();
    	std::for_each(strzahl.begin(),strzahl.end(),convert());
    	std::cin.ignore(1);
    	std::cin.get();
    	return 0;
    }
    


  • nicht_aendern_bitte schrieb:

    Noch eine Bitte - und eigentlich sollte das selbstverständlich sein.

    Lass bitte dein anfängliches posting (sprich: die Eingangsfragestellung bzw. Beschreibung des Problems) stehen. So können auch andere Leser, die ein ähnliches oder sogar gleiches Problem haben die Forensuche nutzen und den thread nachvollziehen.

    Nun hast du alles gelöscht und einfach "Danke" hingeschrieben, und keiner weiss mehr worum es ging.

    ALso in Zukunft: Einfach auf den bestehenden thread antworten und mit neuem posting bedanken - und das Anfangsposting unverändert lassen.

    👍
    Vielleicht willst du stattdessen einfach [gelöst] in den Threadtitel dazueditieren? (Das hilft wenigstens etwas, ist aber nicht unbedingt nötig)

    Und übrigens: Die halbe Lösung wurde dir schon im Inversionen-Thread gepostet... (btw - int inversions(int number) habe ich in 15 Zeilen gecoded)



  • nicht_aendern_bitte schrieb:

    Noch eine Bitte - und eigentlich sollte das selbstverständlich sein.

    Lass bitte dein anfängliches posting (sprich: die Eingangsfragestellung bzw. Beschreibung des Problems) stehen. So können auch andere Leser, die ein ähnliches oder sogar gleiches Problem haben die Forensuche nutzen und den thread nachvollziehen.

    Nun hast du alles gelöscht und einfach "Danke" hingeschrieben, und keiner weiss mehr worum es ging.

    ALso in Zukunft: Einfach auf den bestehenden thread antworten und mit neuem posting bedanken - und das Anfangsposting unverändert lassen.

    Hat er bisher bei fast jedem seiner Threads gemacht, ist jedes Mal drauf hingewiesen worden und stellt´s trotzdem nicht ab. Außerdem habe ich den Eindruck, dass er sich hier bequem seine Aufgaben lösen lassen möchte, ohne selbst viel beizutragen. Meiner Meinung nach sollte ein Moderator hier mal eingreifen und einige Dinge klarstellen.



  • Diesmal hat er das Ursprungsposting wiederhergestellt. Schlampig zwar, aber ich denke es ist angekommen, daß er es stehenlassen soll.



  • danke sehr funktioniert;
    für mich leider zu kompliziert soweit bin ich noch nicht
    habe erst vor einem Monat begonnen.....

    sowas-vielleicht schrieb:

    Nicht besonders schön, aber vlt. das was du haben wolltest?

    #include <algorithm>
    #include <iostream>
    #include <string>
    #include <map>
    #include <sstream>
    
    struct convert {
    	static std::map<char,std::string> myMap;
    	static void init() {
    		myMap.clear();
    		myMap['0']  = "null";
    		myMap['1']  = "eins";
    		myMap['2']  = "zwei";
    		myMap['3']  = "drei";
    		myMap['4']  = "vier";
    		myMap['5']  = "fuenf";
    		myMap['6']  = "sechs";
    		myMap['7']  = "sieben";
    		myMap['8']  = "acht";
    		myMap['9']  = "nein";
    		myMap['.']  = "komma";
    	}
    
    	void operator()(char c) {
    		std::cout << myMap[c] << "-";
    	}
    };
    std::map<char,std::string> convert::myMap;
    
    std::string getStringRepresentation (double value) {
    	std::ostringstream oss;
    	oss << value;
    	return oss.str();
    }
    
    int main () {
    	double zahl;
    	std::cout << "Zahl eingeben: ";
    	std::cin >> zahl;
    	std::string strzahl(getStringRepresentation(zahl));
    	convert::init();
    	std::for_each(strzahl.begin(),strzahl.end(),convert());
    	std::cin.ignore(1);
    	std::cin.get();
    	return 0;
    }
    


  • volkard schrieb:

    Diesmal hat er das Ursprungsposting wiederhergestellt. Schlampig zwar, aber ich denke es ist angekommen, daß er es stehenlassen soll.

    ich dachte ein Lösungsansatz der nix bringt gehört nicht ins forum,
    werde mich bessern versprochen



  • markuswenczel schrieb:

    ich dachte ein Lösungsansatz der nix bringt gehört nicht ins forum,
    werde mich bessern versprochen

    Doch, sowas gehört durchaus hierhin. So können nämlich auch andere aus den Fehlern lernen, die dort drin stehen.



  • markuswenczel schrieb:

    danke sehr funktioniert;
    für mich leider zu kompliziert soweit bin ich noch nicht
    habe erst vor einem Monat begonnen.....

    Die quick-and-dirty Lösung war von mir. (war nicht eingeloggt)
    Was genau verstehst du daran nicht?
    Sollte es nicht den kompletten code betreffen, erklär ich es dir natürlich gerne.



  • inter2k3 schrieb:

    markuswenczel schrieb:

    danke sehr funktioniert;
    für mich leider zu kompliziert soweit bin ich noch nicht
    habe erst vor einem Monat begonnen.....

    Die quick-and-dirty Lösung war von mir. (war nicht eingeloggt)
    Was genau verstehst du daran nicht?
    Sollte es nicht den kompletten code betreffen, erklär ich es dir natürlich gerne.

    oss << value;

    der Operator << ist das ähnlich wie ein cin
    oder wird da value dem oss Objekt zugewiesen wie bei =
    lg
    markus



  • Du meinst cout, nicht cin.
    std::cout ist ein std::ostream mit Ziel -> Konsole.
    Ein std::ostringstream funktioniert fast gleich, nur das Ziel ist ein String, den du nachher mit .str() bekommst.
    Dann gibt es noch z.B. std::ofstream, der schreibt dann in eine Datei.



  • wxSkip schrieb:

    Du meinst cout, nicht cin.
    std::cout ist ein std::ostream mit Ziel -> Konsole.
    Ein std::ostringstream funktioniert fast gleich, nur das Ziel ist ein String, den du nachher mit .str() bekommst.
    Dann gibt es noch z.B. std::ofstream, der schreibt dann in eine Datei.

    myMap.clear();

    Löscht etwas ?



  • Nich etwas, sondern alles.



  • wxSkip schrieb:

    Nich etwas, sondern alles.

    Wie ein Destruktor oder?

    std::cin.ignore(1);

    was macht diese Zeile bitte?


Anmelden zum Antworten