römische Zahlen Algorithmus hilfe

10/27/2012 19:19 thacoga#1
Hey Leute,

also ich hab das problem, dass ich kein Plan habe wie ich mir ein Algorithmus
in Pseudocode für die umwandlung von römischen zahlen in dezimalzahlen zu erstellen. Dabei soll davon ausgegangen werden, dass eine richtige Zeichenfolge eingegeben wird, also keine besondere Prüfung der Regeln.

Das ganze von Dezimal -> Römisch hab ich schon geschafft, was sagt ihr dazu

Das ganze in Pseudocode:

Code:
Legende:
<- : Speicher in

Höchstmögliche RömischeZiffer [B]<-[/B] M = 1000, CM = 900 D = 500,
 CD = 400, C = 100, XC = 90, L= 50, XL = 40, X = 10, IX = 9,
 V = 5, IV = 4, I = 1 // mit Sonderfällen ( CM = 900, CD = 400…)

tempGanzzahlErgebnis [B]<-[/B] 0

x [B]<-[/B] Dezimalzahl

Ermittel Höchstmögliche RömischeZiffer

Wiederhole, Solange x [B]>=[/B] ermittelte Höchstmögliche RömischeZiffer 

	tempGanzzahlErgebnis [B]<-[/B] x dividiert durch ermittelte Höchstmögliche RömischeZiffer  

[B]gib[/B] tempGanzzahlErgebnis [B]multipliziert mit[/B] ermittelte Höchstmögliche RömischeZiffer [B]aus[/B]

x [B]<-[/B][B] subtrahiere[/B] (tempGanzzahlErgebnis [B]mutlipliziert mit [/B]ermittelte Höchstmögliche RömischeZiffer) [B]von[/B] x
Im Falle Römisch -> Dezimal fällt mir nix ein kann mir jemand helfen :D
10/29/2012 17:05 nkkk#2
ehrlich gesagt weis ich nicht was der code soll, du ermitteslt vor der schleife einmal die "Höchstmögliche RömischeZiffer" , in der schleife machst du "tempGanzzahlErgebnis <- x dividiert durch ermittelte Höchstmögliche RömischeZiffer " was x nicht ändert, und ich sehe nichtmal eine variable in der die Römische ziffer gespeichtert wird

naja ich empfehle dir ausserdem sybole wie "*" oder "+" oder "-" statt "mutlipliziert mit" zu verwenden da es den code kürzer und damit besser lesbar macht.

gut an deinem code ist, dass du extrasymbole für z.B. "XC" oder "IX" einfühst was das problem vereinfacht
10/31/2012 01:04 SmackJew#3
Zu viel Pseudo, zu wenig Code.
10/31/2012 07:15 she was 8#4
So oder so ähnlich würde es in C# aussehen.

PHP Code:
        public static int ToDecimal(string value)
        {
            if (
String.IsNullOrEmpty(value)) { return 0; }
            
int res 0;

            while (
value.StartsWith("M"))
            { 
                
res += 1000
                
value value.Substring(1);
            }
            if (
value.StartsWith("CM")) { res += 900value value.Substring(2); }

            while (
value.StartsWith("D"))
            {
                
res += 500;
                
value value.Substring(1);
            }
            if (
value.StartsWith("CD")) { res += 400value value.Substring(2); }

            while (
value.StartsWith("C")) 
            {
                
res += 100;
                
value value.Substring(1);
            }
            if (
value.StartsWith("XC")) { res += 90value value.Substring(2); }

            while (
value.StartsWith("L")) 
            {
                
res += 50;
                
value value.Substring(1);
            }
            if (
value.StartsWith("XL")) { res += 40value value.Substring(2); }

            while (
value.StartsWith("X")) 
            {
                
res += 10;
                
value value.Substring(1);
            }
            if (
value.StartsWith("IX")) { res += 9value value.Substring(2); }

            while (
value.StartsWith("V"))
            {
                
res += 5;
                
value value.Substring(1);
            }
            if (
value.StartsWith("IV")) { res += 4value value.Substring(2); }

            while (
value.StartsWith("I"))
            {
                
res += 1
                
value value.Substring(1); 
            }
            return 
res
Und das kannst du in jeder Sprache so machen
11/01/2012 12:34 thacoga#5
@nkk das ganze soll als pseudosprache aufgeführt werden und nicht als elementare programmiersprache. Wenn du mal mit einer Beispielzahl durch den Algorithmus schriftlich auf Papier durchgegangen wärst, hättest du verstanden wieso.. tempGanzzahlErgebnis = x / höchstmögliche römische zahl // Bsp 15/10 = 1. Außerdem war es meine Aufgabe das ganze mit "dividiert durch usw." und nicht mit /,*,+ zu verfassen.

Hat sich jetzt erledigt hab einige mögliche Varianten gefunden.
11/01/2012 14:03 SmackJew#6
Quote:
Originally Posted by thacoga View Post
Außerdem war es meine Aufgabe das ganze mit "dividiert durch usw." und nicht mit /,*,+ zu verfassen.
Pseudocode hat keinen Standard.