Zahl in Wort umwandeln



  • ICh weiss nicht wie ich das ganze aufbaun soll. Keinerlei struktur.
    Ich bräuchte nur einpaar anhaltspunkte. Eine klare struktur halt.
    ICh weiss einfach nicht wie ich es lösen soll. Wär echt nett wen jemand ein kleines beispiel machen würde. nur 1 zahl ( wenn möglich)

    MFG nami



  • int zahl;
    cin>>zahl;
    int einer=zahl%10;
    int zehner=zahl/10;
    if(zehner<2){
      ififififififif oder switch (zahl oder cout<<name[zahl]
    }
    else{
      cout<<einername[einer]<<"und"<<einername[zehner];
    }
    


  • nami22 schrieb:

    MFG
    nami :p

    Mein Vorschlag:

    #include <iostream>
    #include <sstream>
    #include <string>
    using namespace std;
    int main()
    {
    	const string zahlen("null eins zwei drei vier fünf "
    		"sechs sieben acht neun zehn elf zwölf");
    	istringstream is(zahlen);
    	int zahl  = 13;
    	cout << "Bitte eine Zahl eingeben (0 - 12)" << endl;
    	cin >> zahl;
    	string ausgabe;
    	if (zahl > -1 && zahl < 13)
    		do
    	    {
    			is >> ausgabe;
    		}while(zahl--);
    	else
    		ausgabe = "ungueltig!";
    	cout << "Eingabe war " << ausgabe << "." << endl;
    	return 0;
    }
    

    😉
    mfg





  • ehm danke viel mal aber wäre es auch möglich das ganze mit arrays zu lösen. Dies sind die Anforderungen.

    Falls ja ? Wie gena 🙂

    MFG nami



  • egon2 schrieb:

    ehmgeht das auch mit arrys? Falls ja wie muss ich das angehen ?

    MF¨G
    nami ( sry falls ich zu viel verlange, habe aber keine andere wahl mehr)

    nami22 schrieb:

    MFG
    nami :p

    Mein Vorschlag:

    #include <iostream>
    #include <sstream>
    #include <string>
    using namespace std;
    int main()
    {
    	const string zahlen("null eins zwei drei vier fünf "
    		"sechs sieben acht neun zehn elf zwölf");
    	istringstream is(zahlen);
    	int zahl  = 13;
    	cout << "Bitte eine Zahl eingeben (0 - 12)" << endl;
    	cin >> zahl;
    	string ausgabe;
    	if (zahl > -1 && zahl < 13)
    		do
    	    {
    			is >> ausgabe;
    		}while(zahl--);
    	else
    		ausgabe = "ungueltig!";
    	cout << "Eingabe war " << ausgabe << "." << endl;
    	return 0;
    }
    

    😉
    mfg



  • nami22 schrieb:

    ehm danke viel mal aber wäre es auch möglich das ganze mit arrays zu lösen. Dies sind die Anforderungen.
    Falls ja ? Wie gena 🙂
    MFG nami

    Jetzt bist Du gefordert, die Lektionen zu Arrays und zu if nochmal zu lesen und die kleinen Übungsaufgaben zu machen. Dann sollte es Dir kein Problem sein, meinen Entwurf zu vervollständigen.



  • Kööntest du mir wenigstens den Code den du geschrieben hast kommentieren.
    Würde mir echt weiterhelfen.

    MFG
    nami



  • was ich mit jetzt frage ist, wie lässt er die ganzen namen der zahlen ins prog fließen ?
    Mir fiele nur folgende Möglichkeiten ein:
    1. alle vorher definieren ungefähr so:

    std::string Zahlname[100];
    Zahlname[1] = "eins";
    //...
    

    das wäre sehr unschick und unschön.
    2. das mit der textdatei find ich besonders schön und ist erweiterbar.

    ifstream datei;
    std::string line;
    int i;
    int zahl;
    datei.open("list.txt");
    while (std::getline(datei,line))
    {
         i++;
         Zahlname[i] = line;
    }
    datei.close();
    cout << "Zahl: ";
    cin >> zahl;
    cout << Zahlname[zahl];
    cin.get;
    

    oder so ähnlich.



  • Quick and dirty:

    #include <iostream>
    #include <sstream>
    #include <string>
    
    std::string numToStr(const std::string& zahl);
    
    int main()
    {
    	for (unsigned int i = 1; i <= 100; ++i)
    	{
    		std::stringstream strm;
    		strm << i;
    		std::cout << i << " = " << numToStr(strm.str()) << std::endl;
    	}
    
     return 0;
    }
    
    std::string numToStr(const std::string& zahl)
    {
    	std::string spezial[19];
    	std::string hunderter[9];
    
    	spezial[0] = "ein";
    	spezial[1] = "zwei";
    	spezial[2] = "drei";
    	spezial[3] = "vier";
    	spezial[4] = "fuenf";
    	spezial[5] = "sechs";
    	spezial[6] = "sieben";
    	spezial[7] = "acht";
    	spezial[8] = "neun";
    	spezial[9] = "zehn";
    	spezial[10] = "elf";
    	spezial[11] = "zwoelf";
    	spezial[12] = "dreizehn";
    	spezial[13] = "vierzehn";
    	spezial[14] = "fuenfzehn";
    	spezial[15] = "sechszehn";
    	spezial[16] = "siebzehn";
    	spezial[17] = "achtzehn";
    	spezial[18] = "neunzehn";
    
    	hunderter[0] = "zwanzig";
    	hunderter[1] = "dreisssig";
    	hunderter[2] = "vierzig";
    	hunderter[3] = "fuenfzig";
    	hunderter[4] = "sechszig";
    	hunderter[5] = "siebzig";
    	hunderter[6] = "achtzig";
    	hunderter[7] = "neunzig";
    	hunderter[8] = "hundert";
    
    	std::string zahlwort;
    
    	if (zahl.length() == 1)
    	{
    		zahlwort = spezial[zahl[0] - '0' - 1];
    
    		if (zahl[0] == '1')
    		{
    			zahlwort += "s";
    		}
    	}
    	else if (zahl.length() == 2)
    	{
    		if (atoi(zahl.c_str()) <= 19)
    		{
    			zahlwort = spezial[atoi(zahl.c_str()) - 1];
    		}
    		else if (atoi(zahl.c_str()) > 19)
    		{
    			if (zahl[1] != '0')
    			{
    				zahlwort = spezial[zahl[1] - '0' - 1] + "und" + hunderter[zahl[0] - '0' - 2];
    			}
    			else
    			{
    				zahlwort = hunderter[zahl[0] - '0' - 2];
    			}
    		}
    	}
    	else if (zahl.length() == 3)
    	{
    		if (zahl == "100")
    		{
    			zahlwort = hunderter[8];
    		}
    	}
    
    	return zahlwort;
    }
    


  • danke das funktioniert echt toll. Aber ich verstehe den code nicht wirklich.
    Vorallem bei den if anweisungen, wass du dort gemacht hast.
    Falls du zeiot hättest köntest du den code kommentieren (//......)??

    MFG und vielen Dank
    nami 😉



  • nami22 schrieb:

    danke das funktioniert echt toll. Aber ich verstehe den code nicht wirklich.
    Vorallem bei den if anweisungen, wass du dort gemacht hast.
    Falls du zeiot hättest köntest du den code kommentieren (//......)??

    Eigentlich sollte es eine Forenregel geben, dass jemand einen Mindesteinsatz zeigen MUSS, bevor ihm die Hausaufgaben gemacht werden. Das wird ja langsam peinlich hier.

    Bis Montag könntest du dir ein Buch schnappen, das nötige C++ lernen und diese 0815-Aufgabe locker selbst erledigen, wenn du nur ein Funken Interesse daran hättest. 😉



  • Ich habe interesse daran lese bücher übe mit video2brain habe scho die strings ertellt und deklariert aber wie die ausgabe stttfinden soll da komm ich nicht draus.

    MFG
    nami 🙂



  • Kann mir echt niemand helfen. Denkt nicht das ich nichts tue. Aber ich bin kein Profi und hier ist einfach zu viel für mich.

    Kann man einem array einen wert geben der mehr als ein zechen hat.

    zb zehn oder elf oder zwölf irgendeinem arry diesen wer zuweisen oder muss ich das anze mit strings lösen ??? bitte hilf mir kp wie und das programm sollte nicht kompliziert werden

    MFH nami ⚠ 😕



  • nami22 schrieb:

    Denkt nicht das ich nichts tue.

    Dann zeig doch mal, was du bisher hast. Darauf aufbauend kann dir geholfen werden. Abgesehen davon, dass Ansätze und eine vollständige Lösung bereits gepostet wurden ... Also, bitte nicht weinen ... 😉



  • cin >> strm;



  • So ich habe gilfe von einem kollegen bekommen.
    Das hier hat er gemacht. Ich muss aber nur von 0 - 99 umwandeln köönen und das wandelt bis ...... milliarden um. Wenn ich den teil wenehme der nicht gbraucht wird funkt alles icht mehr. Kann mir jemand den code verkürzen.

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    string unter20(unsigned long wert, bool eins)
    {
      switch(wert)
        {
          case 1:
            if(eins)
              return("eins");
            else
              return("ein");
          case 2: return("zwei");
          case 3: return("drei");
          case 4: return("vier");
          case 5: return("fuenf");
          case 6: return("sechs");
          case 7: return("sieben");
          case 8: return("acht");
          case 9: return("neun");
          case 10: return("zehn");
          case 11: return("elf");
          case 12: return("zwoelf");
          case 13: return("dreizehn");
          case 14: return("vierzehn");
          case 15: return("fuenfzehn");
          case 16: return("sechszehn");
          case 17: return("siebzehn");
          case 18: return("achtzehn");
          case 19: return("neunzehn");
          default: return("-Fehler-");
        }
    }
    
    //*******************************************************
    
    string zehner(unsigned long wert)
    {
      switch(wert/10)
        {
          case 2: return("zwanzig");
          case 3: return("dreissig");
          case 4: return("vierzig");
          case 5: return("fuenfzig");
          case 6: return("sechzig");
          case 7: return("siebzig");
          case 8: return("achtzig");
          case 9: return("neunzig");
          default: return("-Fehler-");
        }
    }
    
    //*******************************************************
    
    string unter100(unsigned long wert,bool eins)
    {
    
      if(wert<20)
        return(unter20(wert,eins));
    
      if(wert%10)
        return(unter20(wert%10,false)+"und"+zehner(wert));
      else
        return(zehner(wert));
    }
    
    //*******************************************************
    
    string unter1000(unsigned long wert, bool eins)
    {
      if(wert<100)
        return(unter100(wert,eins));
    
      if(wert%100)
        return(unter20(wert/100,false)+"hundert"+unter100(wert%100,eins));
      else
        return(unter20(wert/100,false)+"hundert");
    }
    
    //*******************************************************
    
    string tausend(unsigned long wert)
    {
      string s="";
      if(wert>=1000)
        s=unter1000(wert/1000,false)+"tausend";
      if(wert%1000)
        s+=unter1000(wert%1000,true);
      return(s);
    
    }
    
    //*******************************************************
    
    string million(unsigned long wert)
    {
      string s="";
      if(wert>=1000000)
        {
          int mil=wert/1000000;
          if(mil==1)
            s="einemillion";
          else
            s=unter1000(mil,false)+"millionen";
          wert%=1000000;
        }
      return(s+tausend(wert));
    }
    
    //*******************************************************
    
    string milliarde(unsigned long wert)
    {
      string s="";
      if(wert>=1000000000)
        {
          int mil=wert/1000000000;
          if(mil==1)
            s="einemilliarde";
          else
            s=unter1000(mil,false)+"milliarden";
          wert%=1000000000;
        }
    
      return(s+million(wert));
    }
    
    //*******************************************************
    
    string toWord(unsigned long wert)
    {
      if(wert==0)
        return("Null");
    
      string s=milliarde(wert);
      s[0]=toupper(s[0]);
      return(s);
    }
    
    //*******************************************************
    
    int main()
    {
    unsigned long wert;
    
      cout << "Bitte Zahl eingeben:";
      cin >> wert;
      cout << toWord(wert) << endl;
    
            fflush(stdin);
            getchar();
            return 0;
    }
    


  • Gut, jetzt wissen wir dass du von nem Kumpel Code hast, wie der Code ausschaut, dass du was weggestrichen hast und dass es einen Fehler gibt.

    Was wir NICHT wissen:
    Wie schaut DEIN Code jetzt aus?
    Was ist das für ein ominöser Fehler?
    Ist der Kurs Pflicht und musst du den selbständig bestehen?



  • der code sieht momentan genau gleich aus. Ich habe war was probier aber funkt nicht. Ich muss den Code abspecken es hat sachen drinn die ich nicht brauche.
    Ich brauche nur 0-99 nicht milliarden.



  • nami22 schrieb:

    Kann mir jemand den code verkürzen.

    Bei dir fällt mir nichts mehr ein ... 🙂

    Ist eigentlich noch ein Admin aktiv hier in dem Laden?


Anmelden zum Antworten