ich hänge einfach fest



  • kurz in die Glaskugel guck, schätze es liegt an der for-Schleife

    for (int n=0;i<n;i++)
    

    (i ist nie kleiner n, es sei denn der User gibt eine negative Anzahl an stellen ein für die römische Zahl, was bissel seltsam wäre)
    ➡

    for (int n=0; n < i; n++)
    

    ich glaube du bist mit n und i bissel durcheinander gekommen,
    Tipp: nenne die Laufvariable nicht n sondern immer i, ist so usus 😉

    PS:
    schau dir mal std::string etc. an ... dann brauchst nicht extra erfragen, wie viele Zeichen kommen und kannst alles auf einmal einlesen ^^



  • Paul Manns schrieb:

    Tipp: nenne die Laufvariable nicht n sondern immer i, ist so usus 😉

    Und im Kontext römischer Ziffern würde ich schon fast darauf bestehen bei verschachtelten Schleifen sie so zu nennen:

    for(int i = ...)
      for(int ii = ...)
        for(int iii = ...)
          for(int iv = ...)
            for(int v = ...)
              for(int vi = ...)
                for(int vii = ...)
    

    So treibt man schnell jemanden in den Wahnsinn. 😉



  • ach blöd, des mit der vorschleife stimmt ja, und dann hats auch geklappt, nur gibts natürlich bei IV auch 6 an obwohls ja eig. 4 sein müsste... jemand ne idee das zu beheben *ratlos*



  • edit: forschleife^^



  • und wegen dem kommentar mit dem string, ich brauch die zahl ja für mein feld... oder wieh hast du dir des gedacht? (sry wenn ich jetzt was falsches gesagt habe... aber ich programmier erst seit letzter woche montag)



  • carsten2 schrieb:

    und wegen dem kommentar mit dem string, ich brauch die zahl ja für mein feld... oder wieh hast du dir des gedacht? (sry wenn ich jetzt was falsches gesagt habe... aber ich programmier erst seit letzter woche montag)

    std::string roemzahl;
    std::cout << "bitte geben sie eine römische Zahl ein" << std::endl;
    std::cin >> roemzahl;
    for(std::size_t i = 0; i != roemzahl.size(); ++i) {
      switch(roemzahl[i]) //...
    }
    

    allein mit der Switch ist es nicht getan, du musst eben nach den Regeln der römischen Zahlen, checken, ob eine niedrigere Ziffer, also das I einer höherwertigen nach- oder vorgestellt ist und entsprechend rechnen, simples addieren kann nicht funktionieren.



  • danke paul, nur da ich das mit dem size nich wirklich verstanden hab, hab ichs so fertig geschrieben und sogar geschafft meinen fehler zu beheben 🙂 💡

    #include <iostream>
    
    int main()
    {
    
    	char roemische_ziffer;
    	int  i, summe=0;
    	int *arabische_zahl = NULL;
    
    	std::cout << "Geben Sie ein wie viele Ziffern ihre Römische Zahl besitzt: ";
    	std::cin >> i;
    
    	arabische_zahl = new int[i];
    
    	for (int n=0;n<i;n++)
    	{
    		std::cout << "Bitte geben sie ihre roemische Zahl ein (nach jeder Ziffer ein Return): ";
    		std::cin >> roemische_ziffer;
    
    		switch(roemische_ziffer)
    			{
    				case 'I':
    					arabische_zahl[n] = 1;
    					break;
    				case 'V':
    					arabische_zahl[n] = 5;
    					break;
    				case 'X':
    					arabische_zahl[n] = 10;
    					break;
    				case 'L':
    					arabische_zahl[n] = 50;
    					break;
    				case 'C':
    					arabische_zahl[n] = 100;
    					break;
    				case 'D':
    					arabische_zahl[n] = 500;
    					break;
    				case 'M':
    					arabische_zahl[n] = 1000;
    					break;
    				default :
    					std::cout << "Falsche Eingabe!";
    					n = n-1;
    					continue;
    			} 
    		}
    	for(int n=0;n<i;n++)
    	{
    		if (n+1==i)
    		{
    			summe = summe + arabische_zahl[n];
    		}
    		else if (arabische_zahl[n]<arabische_zahl[n+1])
    		{
    			summe = summe-arabische_zahl[n];
    		}
    		else
    		{
    			summe = summe + arabische_zahl[n];
    		}
    	}
    
    	std::cout << "Ihre roemische Zahl entspricht der arabischen Zahl: " << summe << std::endl;
    
    	return 0;
    
    }
    

    (für alle dies auch ausprobiert haben sollten, hab ich nochma meine version von beigefügt und es funktioniert sogar für XC z.B. 90 und nicht 110^^)



  • @ carsten2:
    Was soll das? Mach einen eigenen Thread auf, wenn du eine Frage hast.



  • @nexus, der thread handelte ursprünglich mal vom einlesen römischer ziffern in die umwandldung arabischer



  • carsten2 schrieb:

    @nexus, der thread handelte ursprünglich mal vom einlesen römischer ziffern in die umwandldung arabischer

    Ja, aber wenn du nicht exakt das gleiche Problem hast und es noch nicht gelöst hast, dann kannst du ruhig posten, aber ansonsten mach lieber einen neuen Thread auf.
    Ich denke mal, dass du es nur "gut" gemeint hast, aber ist kein Problem zu einem neuen Problem einen neuen Thread aufzumachen, auch wenn es um das genau gleiche Thema geht. 😉



  • hi danke leute für die guten tips ich habs geschaft.

    gruß maik


Anmelden zum Antworten