Problem mit "Anfängerprogramm"

Status
Nicht offen für weitere Antworten.
Ähm ich möchte nur noch mal erwähnen, dass ich eine funktionierende (!) Lösung bereits angeboten habe.

Und falls du tatsächlich noch nicht draufgekommen sein solltest: Die ominösen Sonderfälle, sind eben die, wo man zur Darstellung der arabischen Zahl bei den römischen eine von einer anderen abzieht.
 
moin


Du hast keine funtkionierende Lösung bereitgestellt!
Ich zitiere:
Was jetzt die Sonderfälle sind, finde bitte selbst raus.

Etwas darfst du schon selber machen

Und warum darf nicht jemand eine andere Lösung (Lösungsansatz) anbieten?


mfg
umbrasaxum
 
Zuletzt bearbeitet:
Und warum darf nicht jemand eine andere Lösung anbieten?

Hab ich ja nicht gesagt - nur ist man hier anscheinend noch nicht zu einer Lösung gekommen ;-)

Und nun halt dann explizit die Sonderfälle:

4
9
49
99
499
999

(ich bin mir jetzt nicht mehr ganz sicher ob die VIII eine gültige Nummer ist, meines Wissens schon - wenn nach deiner Definition nicht, dann musst du auch noch alle erfassen, die 2 unter den Sprüngen liegen)
 
moin


Naja deinen ersten Satz von Beitrag 11 kann man falsch verstehen, aber egal.

Du hast recht noch keine hat ne Lösung zu den Sonderfällen.
Und ja VIII ist gültig, dann gehts aber schon wieder los ob man VIII oder IIX schreibt.
Es gibt dort besondere Regeln.

Zum Problem selbst:
Man könnte den Sonderfall mit solange mit 1 addieren, bis ein bekannter Wert (V, X, C, D, M) erreicht ist. Dann die anzahl der Benötigten einsen vor das Erreicht römische Zeichen schreiben und fertig.

Beispiel:
4 wird um 1 erhöht. 5 ist V wir brauchten aber eine 1 also IV.


mfg
umbrasaxum
 
okay mein Programm war auf die schnelle etwas schlampig - aber hier jetzt mein Programm total ausformuliert - und funktionierend (!) :-)

Code:
void main(void)
{
	int zahl, i;
	int arab[7] = {1000, 500, 100, 50, 10, 5, 1};
	char roman[7] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'};


scanf("%d", &zahl);

for(i=0; i<=6; i++)
{
    while(zahl - arab[i] >= 0)
    {
         if(zahl != 4 && zahl != 9 && zahl != 49  && zahl != 99  && zahl != 499  && zahl != 999)
         {
             printf("%c", roman[i]);
             zahl -= arab[i];
             
         }
         else
         {
             switch(zahl)
             {
             	    case 4: zahl -= 4;
             	    	   printf("IV");
             	    	   break;
             	    case 9: zahl -= 9;
             	    	   printf("IX");
             	    	   break;
             	    case 49: zahl -= 49;
             	    	   printf("IL");
             	    	   break;
             	    case 99: zahl -= 99;
             	    	   printf("IC");
             	    	   break;
             	    case 499: zahl -= 499;
             	    	   printf("ID");
             	    	   break;
             	    case 999: zahl -= 999;
             	    	   printf("IM");
             	    	   break;
             }
             
         }
    }

}


 
}
 
moin


Leider macht das switch alles kaputt.
Ich meine vom Programmiertechnischen her.
Erst ein schöner Algorythmus und dann der switchklotz der der nur stupf überprüft und ausgibt.
Ich werde es nochmal selber versuchen.


mfg
umbrasaxum
 
moin


Hier mal meine perfekter Code ;)

Edit:
Code rausgenommen, da doch nciht perfekt. Siehe unten den perfekten.


mfg
umbrasaxum
 
Zuletzt bearbeitet:
nette Lösung umbrasaxum, wobei in diesem konkretten Fall eigentlich 90 als XC und nciht als LXXXX dargestellt werden sollte. Folglich müsste deine Lösung noch ein klein wenig erweitert werden.
 
moin


Ja ist mir garnicht aufgefallen.
Hier aber eine Lösung die alles abdecken sollte (zumindes bis 3999):
Code:
int zahl;
int arab[15] = {1000, 999, 900, 500, 499, 100, 99, 90, 50, 49, 10, 9, 5, 4, 1};
char *roman[15] = {"M", "IM", "CM", "D", "ID", "C", "IC", "XC", "L", "IL", "X", "IX", "V", "IV", "I"};

scanf("%d", &zahl);


for(int i = 0; i < 13, zahl != 0;)
{

	if( zahl >= arab[i] )
	{
		zahl -= arab[i];
		printf("%s", roman[i]);
		if(zahl == 0)
			break;
				
		i = 0;
		continue;
	}
	i++;
}


mfg
umbrasaxum
 
Zuletzt bearbeitet:
hm

int zahl;
int arab[15] = {1000, 999, 900, 500, 499, 100, 99, 90, 50, 49, 10, 9, 5, 4, 1};
char *roman[15] = {"M", "IM", "D", "CM", "ID", "C", "IC", "XC", "L", "IL", "X", "IX", "V", "IV", "I"};

das haut jetzt gar nicth mehr so ganz hin wegen D!=900 , aber das prinzip sollte ja klar sein, und es gibt glaub ich mehr als 15 mögliche da man ja


"Schreibe ein Programm das eine arabische Zahl in eine römische Zahl umwandelt.
M ... 1000 D ... 500 C ... 100 L ... 50 X ... 10 V ... 5 I ... 1
900 ... CM 400 ... CD 90 ... XC 40 ... XL 9 ... IX 4 ... IV"

plus eure sonderfälle jetzt bedenken müsste oder eben in der vorgegebenen aufgabenstellung 13 möglichkeiten. Ich glaube bei deiner Möglichkeit müsstest du ejtzt eigentlich insgesamt 17 Zahlen etc. haben.
 
Status
Nicht offen für weitere Antworten.
Zurück