Römische Zahlen in Arabische Ziffern umgewandeln

Status
Nicht offen für weitere Antworten.
N

nini89

Gast
komm mit dieser aufgabe gar nicht zurecht, vllt kann mir da jemand helfen??? BITTEEEEE


Mit einem Endlichen Automaten sollen Römische Zahlen in Arabische Ziffern umgewandelt werden. Hierbei sind nur Zahlen aus dem Intervall [1;10] (I, II, III, IV, V, VI, VII, VIII, IX, X) zu berücksichtigen. (Wer möchte darf gerne das Intervall erweitern.)

1. Wie lauten die Zustandsmenge und das Eingabealphabet des endlichen Automaten (schriftlich)?
2. Entwickeln und zeichnen Sie den Zustandsgraphen (schriftlich)!
3. Entwickeln Sie ein Java-Programm Automat.java, welches mit einem endlichen Automaten die Umwandlung vornimmt. Die Eingabe soll case-insensitiv sein. Lesen Sie jeweils einen einzelnen Buchstaben (I, V oder X) von der Tastatur und überführen Sie Ihren Automaten in einen neuen Zustand. Bei Eingabe eines ungültigen Zeichens soll eine RuntimeException geworfen werden. Wenn kein Zeichen eingegeben wird (also nur Return gedrückt wird), wird der Automat beendet und das Ergebnis ausgegeben.



1 und 2 hab ich glaub ich, aber wie 3 aussehen soll...ka
 

0x7F800000

Top Contributor
nini89 hat gesagt.:
1 und 2 hab ich glaub ich, aber wie 3 aussehen soll...ka

lol... wenn du schon den schwierigeren teil hast, dann tippe das 1:1 in java ein und gut iss? ???:L
(ein DEA sollte in java grad noch so umsetztbar sein^^ :roll: )
wenn du bei der konkreten umsetzung stress hast, dann dann kannst du dich ja bei konkreten problemen mit konkreten compilierbaren codestücken erneut ans forum wenden, da wird sicherlich dem einen oder dem anderen was einfallen, wie das jeweilige problem zu beheben ist...
 
N

nini89

Gast
wie den schwierigen teil???
Zustandsmenge ist bei mir {1,2,3,4,5,6,7,8,9,0}
und Eingabealphabet {I,V,X}

solange das nicht falsch ist wars ja net schwierig.

den graphen hab ich auch gezeichnet, ähnlich dem eines parkscheinautomaten(wikipedia), das war auch nicht so schwer.

nur leider hilft mir das für den code doch überhauptnicht. :(
 
N

nini89

Gast
ich bin wirklich am verzweifeln, unabhängig davon, dass es doch gar keinen sinn macht die aufgabe mit einem automaten zu lösen(nun gut, ist halt wieder ein an den haaren herbeigezogenes beispiel) weiss ich auch gar nicht was die besonderheit eines automaten in java ist.

es wird ja nicht sinn der sache sein, dass ich da jetzt 20 if-sätze einbaue...
 

0x7F800000

Top Contributor
Also, irgendwie kommt mir die gesamte aufgabenstellung recht suspekt vor...
nini89 hat gesagt.:
Wer möchte darf gerne das Intervall erweitern
Was für ein "Intervall" denn bitte... I-X erscheint mir ein wenig zu wenig. Um alle zahlen umrechnen zu können, die ohne allzu abgefahrene zeichen auskommen, also ungefähr ~100000, da würde imho ein DEA sowieso nicht ausreichen, da müsste man sich schon einen kellerautomaten für kontextfreie sprachen basteln, aber ich weiß im moment gar nicht, wie ich das für römische zahlen übehaupt anstellen sollte, dieses zahlensystem ist ja schon ziemlich bescheuert :roll: , auch ich würde mir nicht zum spaß einen abend zeit nehmen, um dieses problem zu lösen (obwohl meine vorstellungen von "Spaß" schon seltsam genug sind, wenn's um mathe geht^^)

deine wahl der zustandsmenge
{1,2,3,4,5,6,7,8,9,0}
erscheint mir noch suspekter, ich könnte mir fast denken, dass du einfach die kleine mächtigkeit der ergebnismenge ausnutzen willst, um alle möglichen fälle manuell abzuarbeiten, ohne das eigentliche problem an sich zu lösen. :(

Könntest du evtl. skizzieren, wie du den automaten in etwa konzipiert hast? ???:L
 

0x7F800000

Top Contributor
nini89 hat gesagt.:
ich bin wirklich am verzweifeln, unabhängig davon, dass es doch gar keinen sinn macht die aufgabe mit einem automaten zu lösen
naja, parser sind nun mal automaten...

was die besonderheit eines automaten in java ist.
Was für besonderheit? Es gibt keine besonderheit. Du kannst dir den automaten basteln wie du willst.

Im einfachsten fall kann man einen mehrdimensionalen char-array hinschreiben, wo die zustände gegen das eingabealphabet aufgetragen sind, und wo dann jedem so einem paar der nächste zustand zugeordnet wird (also diese "delta"-übergangsfunktion einfach in einer tabelle explizit angeben). Und dann plazierst du im startzustand nen zustandszeiger, und springst damit hin und her, bis die zeichenkette zu ende ist, dann gugst du nach, wo du am ende gelandet bist.

Im komplizierteren fall kannst du dir irgendeine klasse für einen Zustand anlegen, der in einer map referenzen zu anderen knoten des automaten speichert, und der dann per backtracking alle möglichen wege im nicht deterministischen fall abklappert, das wäre nicht sonderlich schnell, aber dafür recht simpel, und du bräuchtest den automaten nicht in die deterministische form übersetzen (was per hand nervig, per programm nicht trivial ist) Tipp: wenn die sprache nicht vorgegeben ist: mit prolog geht's wesentlich lustiger^^ :p

kontextfreie sprachen parsen ist dann nochmal um paar größenordnungen spaßiger, kannst dir dann gerne selbst was drüber durchlesen, wenn du willst, ich halte lieber die klappe, weil ich selbst nicht mehr weiß, als in den anfängerbüchern steht, die ich mal von nem jahr durchgeblättert hab, will mich da grad nicht eindenken. Aber wenn du die aufgabe wirklich korrekt in allgemeiner form lösen willst, um alle römische zahlen von 1 bis paar millionen zu übersetzen, da musst du dir schon was einfallen lassen...
 
N

nini89

Gast
es sollen wirklich nur die zahlen I bis X ausgegeben werden, also 1 bis 10, deswegen auch meine Zustandsmenge (0 für 10), deswegen, sinn macht das programm keinen, soll wohl nur automaten näherbringen, aber ich weiss ja nichtmal wie so ein teil in java aussieht. skizze hab ich hier hinterlegt:
261kcpl.jpg
 
N

nini89

Gast
als beispiel: ich tippe 'I' enter, wo muss er dann was ändern? dann tippe ich 'X' enter und muss noch wo anders was ändern in dem array und dann wenn ich nur enter drücke muss er demnach '9' auswerfen...das wars... klingt einfach, wärs auch, wenn ich nicht nen automaten basteln müsste...
 

Marco13

Top Contributor
Spontande, unfundierte Gedanken: Das mit der Zustandsmenge 0...9 klingt schon ein bißchen komisch. Ich gehe mal davon aus, dass die Eingabe zeichenweise verarbeitet wird - also werden diese Zustände nicht reichen.

Angenommen, die Eingabe ist IV. Dann wäre die Zustandsfolge ja z.B. sowas wie
1. Startzustand -> Lese ein zeichen, hier das "I"
2. Zustand, der beschreibt, dass ein "I" gelesen wurde -> Lese ein Zeichen, hier das "V"
3. Zustand, der beschreibt, dass ein "IV" gelesen wurde -> Lese ein Zeichen (Ende)
4. Endzustand: Ausgabe "4"

Bei der Eingabe "IX" wäre man bei Schritt 2 ja in einen anderen 3. Zustand gelangt
1. Startzustand -> Lese ein zeichen, hier das "I"
2. Zustand, der beschreibt, dass ein "I" gelesen wurde -> Lese ein Zeichen, hier das "X"
3. Zustand, der beschreibt, dass ein "IX" gelesen wurde -> Lese ein Zeichen (Ende)
4. Endzustand: Ausgabe "9"

Hm. Nur so eine Idee...
 
N

nini89

Gast
hmm, okay, also nur 6 zustände? bei VIII bräuchte man demnach doch 6? das ist schonmal n guter tipp, danke dir ^^ aber was ich noch nicht versteh ist wie das 2dimensionale char-array aussehen muss und mit welchem algorithmus ich dort zustände ändern soll und wie ich dann was ausgeben soll.

quasi weiss ich gar nichts und brauchs bis morgen früh...klasse.
 

0x7F800000

Top Contributor
verflucht, warum lass ich mich dauernd auf sowas ein^^ ???:L

Code:
public class SmallRoman {

	// uebergangsfunktion definieren
	private static int[][] d=new int[][]{
		new int[]{1,2,3,-1,-1,6,7,8,-1,-1,-1},
		new int[]{5,4,-1,-1,-1,-1,-1,-1,-1,-1,-1},
		new int[]{10,9,-1,-1,-1,-1,-1,-1,-1,-1,-1}
	};
	
	// -1 bedeutet fehlerzustand
	private static int d(int state, char c){
		int symbol="IVX".indexOf(c);
		if(symbol>=0){
			return d[symbol][state];
		}else{
			return -1;
		}
	};
	
	public static int parseRoman(String s){
		int state=0; //startzustand
		for(int i=0; i<s.length(); i++){
			state=d(state,s.charAt(i)); //uebergang zum naechsten zustand
			if(state<0){
				throw new NumberFormatException("Dieser Mist ist keine roemische zahl zwischen I und X!");
			}
		}
		return state;
	}
	
	public static void main(String[] args) {
		String[] test=new String[]{"blah","X","III","IV","VIII","789","0.3E7","IX"};
		for(String s:test){
			System.out.print(s+"\t=\t");
			try{
				int i=parseRoman(s);
				System.out.print(i);
			}catch(NumberFormatException e){
				System.out.print(e.getMessage());
			}
			System.out.println();
		}
	}
}

edit:
Also, das ist jetzt im prinzip dein zustandsgraph als tabelle hingeschrieben. Mir ist unterwegs eigefallen, dass es wohl bisschen schöner wäre, die tabelle vertikal hinzuchreiben, dann sieht man direkter wo was ist, aber das ist egal, eifach alles transponiert denken...
 
G

Gast

Gast
mein held ^^ nur 2 sachen hatten wir noch gar nicht.
was ist parseRoman? und was tut catch?
 

0x7F800000

Top Contributor
throws spuckt exceptions, wenn irgendwas schief geht
catch fängt die exceptions wieder ein, wenn man glaubt, dass man mit den doch noch fertig wird.

kannst das alles weglassen, und bei ungültiger eingabe einfach -100 ausgeben oder irgendsowas...
 
G

Gast

Gast
ok, ungültige eingabe ist mir im moment egal, das kann ich nachher noch einbauen. kannst du vllt nochmal nur das grundprogramm posten? hab versucht das oben auszuführen, aber da fehlt doch sowas wie readChar, oder? weil wenn mans starten kommen nur 8 zeilen text und das programm ist zuende :(
 

0x7F800000

Top Contributor
ach nee, komm,
Code:
BufferedReader reader=new BufferedReader(InputStreamReader(System.in));
in die main reinpacken und ein paar mal
Code:
reader.readLine()
aufrufen, und and parseRoman übergeben schaffst du ja wohl noch alleine, sonst wird's ja total witzlos... Also, zumindest mal ansatzweise müsste doch was gehen, wenn's stress gibt: mit konkreten problemen wieder hier nachfragen.
 
G

Gast

Gast
hehe, lach mich nicht aus, aber keine ahnung was das bedeutet...
ich kenn nur system.readInt bze system.readChar usw was ist ein bufferreader?
 

0x7F800000

Top Contributor
ne, bei java wird niemand ausgelacht, wenn er mal ne klasse nicht kennt, davon gibts irgendwie paar hunderttausend in der api und noch teufel weiß wieviele in den ganzen anderen projekten, die nicht direkt von sun geleitet werden...

aber googln kann man's trotzdem, ob man's kennt oder nicht: "Einfache eingabe java" erster treffer
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D römische Zahlen in Dezimal ausgeben Java Basics - Anfänger-Themen 9
M Methoden Römische Zahlen Java Basics - Anfänger-Themen 5
B römische Zahlen vergleichen Java Basics - Anfänger-Themen 23
S Römische Zahlen umwandeln Java Basics - Anfänger-Themen 11
S Römische Zahlen in Dezimalzahlen und umgekehrt Java Basics - Anfänger-Themen 10
C Römische Zahlen Java Basics - Anfänger-Themen 7
I Arabische Ziffern in römische Ziffern Java Basics - Anfänger-Themen 1
M Römische Ziffern Java Basics - Anfänger-Themen 5
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
P Aus Text Datei nur Zahlen übernehmen Java Basics - Anfänger-Themen 13
K Warum werden immer noch doppelte Zahlen ausgegeben ? Java Basics - Anfänger-Themen 13
M negative Zahlen bei Intervallen Java Basics - Anfänger-Themen 10
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
M 3 Zahlen miteinander vergleichen Java Basics - Anfänger-Themen 18
J Taschenrechner mit mehr als 2 Zahlen. Java Basics - Anfänger-Themen 18
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
B Alle Zahlen finden, die 3 bestimmte Ziffern enthalten? Java Basics - Anfänger-Themen 9
K Java gleicher Wert von Zahlen? Java Basics - Anfänger-Themen 5
I aus 2 random zahlen soll nur die ungerade summe der beiden genommen werden. Java Basics - Anfänger-Themen 13
J Operatoren Zahlen addieren Java Basics - Anfänger-Themen 13
B Threads Counter mit ungeraden Zahlen Java Basics - Anfänger-Themen 32
JavaBeginner22 Java 2 Zufalls zahlen generieren. Java Basics - Anfänger-Themen 11
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
M Stream mit den ersten n natürlichen Zahlen Java Basics - Anfänger-Themen 4
D Größtes Palindrom Produkt aus zwei dreistelligen Zahlen Java Basics - Anfänger-Themen 60
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
sserio Befreundete Zahlen Java Basics - Anfänger-Themen 7
AhmadSlack Verzweigungen zahlen multiplizieren Java Basics - Anfänger-Themen 4
padde479 Array Multiplikation der ersten n Zahlen Java Basics - Anfänger-Themen 7
U Lotto-Zahlen App Java Basics - Anfänger-Themen 34
berserkerdq2 Wie würde man einen regulären Ausdruck in Java schreiben, der prüft, dass zwei bestimtme Zahlen nicht nebeneinadner sind? Java Basics - Anfänger-Themen 3
H Arrays: Größten Zahlen Unterschied herausfinden Java Basics - Anfänger-Themen 20
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
J Zahlen bis zu einem bestimmten Grenzwert ausgeben Java Basics - Anfänger-Themen 11
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
P Zweidimensionales Array als Tabelle mit befüllten Zahlen Java Basics - Anfänger-Themen 10
W Wie ziehe ich von einer bestimmten Zahl, Zahlen ab, bis mein Ergebnis null beträgt? Java Basics - Anfänger-Themen 10
emx-zee Erste Schritte NullPointerException, Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 2
W Bestimmte Zahlen bei Math.random ausschließen? Java Basics - Anfänger-Themen 31
K Erste Schritte "Taschenrechner" zeigt keine Komma Zahlen an. Java Basics - Anfänger-Themen 8
P Drei Zahlen eines Würfelspiels auswerten Java Basics - Anfänger-Themen 7
H Häufigkeit von Zahlen ermitteln Java Basics - Anfänger-Themen 23
sashady Zahlen rekursiv zerlegen und Ziffern addieren Java Basics - Anfänger-Themen 38
H Zahlen kürzen Java Basics - Anfänger-Themen 2
ansystin Teilerfremde Zahlen ausgeben + Zahlenausgabe speichern Java Basics - Anfänger-Themen 3
B Häufigkeit einzelner Zahlen in einem Array Java Basics - Anfänger-Themen 6
nevel Programm für die Summer der Zahlen 1- 1ß Java Basics - Anfänger-Themen 12
jhCDtGVjcZGcfzug Fibonacci Zahlen rekursiv und iterativ Java Basics - Anfänger-Themen 21
H Eingegebene Zahlen mit Array ausgeben Java Basics - Anfänger-Themen 18
I 12 Spalten von jeweils 30 Zahlen in Konsole ausgeben Java Basics - Anfänger-Themen 6
R Array mit Unter- und Obergrenze ganze Zahlen dazwischen erscheinen nicht Java Basics - Anfänger-Themen 1
OZAN86 For Schleife von 1-50 die Zahlen werden durch ein Komma getrennt Java Basics - Anfänger-Themen 10
Bademeister007 Operatoren Alle Zahlen einer ArrayList die durch 5 teilbar ist Java Basics - Anfänger-Themen 2
mhmt_03 dafür sorgen, dass im JTextfield nur zahlen eingebbar sind Java Basics - Anfänger-Themen 9
Ianatrix Zahlen von a bis b berechnen Java Basics - Anfänger-Themen 7
P Wie kann ich die Zahlen dieses Arrays dividieren? Java Basics - Anfänger-Themen 2
P Nutzer entscheiden lassen, wie viele Zahlen dieser in ein Array eingeben möchte. Java Basics - Anfänger-Themen 6
T Bestimmte Zahlen ausgeben mit einer whilfe Schleife Java Basics - Anfänger-Themen 21
H Alle Geraden zahlen bis 10 ausgeben Java Basics - Anfänger-Themen 11
java3690 Liste mit zufälligen zahlen füllen Java Basics - Anfänger-Themen 27
macle Rekursive String Methode, Gerade Zahlen rausfiltern Java Basics - Anfänger-Themen 10
M Regex nur Zahlen und Punkt zulassen, Keine Eingabe(Leeres TextFeld) nicht zulassen Java Basics - Anfänger-Themen 6
L Mit Zahlen im String rechnen Java Basics - Anfänger-Themen 19
G Java eingelesene Zahlen Java Basics - Anfänger-Themen 2
D Zahlen werden falsch gekürzt :? Java Basics - Anfänger-Themen 27
H Ungerade Zahlen ausgeben von 1 bis 1000 Java Basics - Anfänger-Themen 8
C Positive und negative Zahlen mit Regex extrahieren Java Basics - Anfänger-Themen 8
N Wörter und Zahlen nach speziellen Wörtern ausgeben Java Basics - Anfänger-Themen 11
F Komplexe Zahlen auf verschiedene Weise addieren Java Basics - Anfänger-Themen 18
L Java Int-Array, Zahlen sortieren Java Basics - Anfänger-Themen 8
B Fibonacci Zahlen dynamische Programmierung Java Basics - Anfänger-Themen 7
V Erste Schritte Taschenrechner mit beliebig vielen Zahlen Java Basics - Anfänger-Themen 5
X Wie kann ich Zahlen in einzelne Zifferne zerlegen? Java Basics - Anfänger-Themen 3
J 10 positive Zahlen eingeben Java Basics - Anfänger-Themen 10
K Rechtsbündige Ausgabe von Zahlen Java Basics - Anfänger-Themen 6
A Wie zwei zahlen in einer Variable speichern? Java Basics - Anfänger-Themen 7
M Zahlen erraten Java Basics - Anfänger-Themen 7
E Zahlen von einem Array mit zahlen von zweitem Array vergleichen Java Basics - Anfänger-Themen 27
S Mit nextGaussian() positive Zahlen erzeugen? Java Basics - Anfänger-Themen 39
D auch negative Zahlen sotieren Java Basics - Anfänger-Themen 18
M Warum berechnet mein Primzahlenprog zu hohe Zahlen nicht? Java Basics - Anfänger-Themen 20
W Bell Zahlen Java Basics - Anfänger-Themen 2
H Min und Max von Zahlen Java Basics - Anfänger-Themen 10
der_Schokomuffin Fehler bei Zufallsgeneration von Zahlen Java Basics - Anfänger-Themen 7
J Erste Schritte Alle möglichen ausgaben von 5 Zahlen als Vector Java Basics - Anfänger-Themen 7
F Abstand zum Durchschnitt von 5 Zahlen berechnen... Java Basics - Anfänger-Themen 16
Moji Klassen Array Zahlen zu Sternchen (U-Helmich 7.1-4) Java Basics - Anfänger-Themen 5
F Summe aller echten Teiler und Zahlen zurückgeben Java Basics - Anfänger-Themen 1
T Perfekte Zahlen ausgeben Java Basics - Anfänger-Themen 12
F Zahlen im Feld sortieren + Unterprogramm Java Basics - Anfänger-Themen 4
H Zahlen 1-100 Java Basics - Anfänger-Themen 2
H Einlesen von Zahlen Java Basics - Anfänger-Themen 20
O Problem gleiche Zahlen Java Basics - Anfänger-Themen 2
V Hilfe Aufgabe Zahlen Java Basics - Anfänger-Themen 9
J Zahlen addieren Java Basics - Anfänger-Themen 12
P Schlüsselworte Zählen und Zuweisen von eingelesenen Zahlen Java Basics - Anfänger-Themen 1
D Irgendwelche Ideen um Zahlen Reihenfolgen zu analyisieren Java Basics - Anfänger-Themen 16
CptK Datentypen Zahlen Java Basics - Anfänger-Themen 2
B Wie kann ich die Buchstaben sortieren nach der Höhe der Zahlen Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben