• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

Java: mit römischen Flächen rechnen

MrNase

Champagner Reinette
Registriert
11.01.05
Beiträge
2.656
Moin!

Ich habe ein dickes Problem mit meiner Hausaufgabe die ich bis Samstag reinreichen muss.
Aus irgendeinem Grund fehlt mir die zündende Idee wie ich das Problem lösen kann. Ich habe gestern fast 10 Stunden drangesessen, meine Lösungen funktionieren aber nur zu 80%. Irgendein Testfall ist immer dabei wo die Rechnung versagt.

Da es eine Hausaufgabe ist die ich alleine erledigen (und verstehen muss) erwarte ich keine vollständige Lösung. Aber vielleicht hat einer von euch ja ne Idee.

Also:

Es geht um 4 römische Maßeinheiten für Flächen. Eine Flächenangabe erfolgt im Format:
GGMMAQQQ

1 G = 100 M
1 M = 4 A
1 A = 144 Q
Eine Zahl sieht z.B. so aus: 25953125

Das steht für: 25 G, 95 M, 3 A und 125 Q

Ich muss nun 3 Methoden entwickeln: 2 Zahlen addieren, die Differenz 2er Zahlen bilden und zu einer Zahl ein bestimmte Anzahl Q hinzufügen.

Ich hab mir nun gedacht, die G, M und A in Q umzurechnen:

Code:
Q (aus G) = 100 x 4 x 144 x G
Q (aus M) = 4 x 144 x M
Q (aus A) = 144 x A
Q = 1 x Q
Und dann alle Q zu addieren. Das ergäbe in meinem Beispiel:

Code:
Q (aus G) = 100 x 4 x 144 x 25 = 1440000
Q (aus M) = 4 x 144 x 95 = 54720
Q (aus A) = 144 x 3 = 432
Q = 1 x 125 = 125

Summe aller Q = 1495277
Das plane ich nun auch für die zweite Zahl zu machen und dann möchte ich diese Zahl wieder in das alte Format umwandeln.

Und da liegt das Problem! Wie bekomme ich die 1495277 wieder ins alte Format?


Hier mein Lösungsansatz:

Ich speichere die beiden Q aus A in einer Variablen (qVonG1 und qVonG2), dann addiere ich beide und teile sie später wieder durch 57600 (100 x 4 x 144).

Code:
int qVonG1 = 25 x 57600 = 1440000;
int qVonG2 = 25 x 57600 = 1440000;

int qVonBeidenG = qVonG1 + qVonG2 = 2880000;

int qVonBeidenGAlsQ = qVonBeidenG / 57600 = 50;
Das ist beim Berechnen der G noch recht einfach, da man in diesem Fall keine Begrenzung hat.

Hier aber der Fall für M:
Code:
int qVonM1 = 95 x 576 = 54720;
int qVonM2 = 95 x 576 = 54720;

int qVonBeidenM = qVonM1 + qVonM2 = 109440;

int qVonBeidenMAlsQ = qVonBeidenM / 576 = 190;
Da ist das große Problem, dass 100 M = 1 A sind und man hier schon 190 M hat.
Daher müsste man ja noch folgendes rechnen:

A = A + 1;
M = M - 100;


Folgendes Beispiel für die A:

Code:
int qVonA1 = 3 x 144 = 432;
int qVonA2 = 3 x 144 = 432;

int qVonBeidenA = qVonA1 + qVonA2 = 864;

int qVonBeidenAAlsQ = qVonBeidenA / 144 = 6;
Da ist das große Problem, dass 4 M = 1 M sind und man hier schon 6 A hat.
Daher müsste man ja noch folgendes rechnen:

M = M + 1;
A = A - 4;




Versteht jemand auf was ich hinauswill?


Kann mir jemand weitere Tipps geben ob ich richtig bin oder was ich ändern muss?
 

BigDan

Granny Smith
Registriert
04.07.07
Beiträge
17
Hi,

ich wuerde folgendes vorschlagen, du wandelst die Zahlen X und Y in Qs um. Das hast du ja schon getan. Damit erhaelst du die Gesamtsumme alles Qs. Jetzt gehst du von hinten nach vorne und nicht anders herum. Sprich du teilst deine Qs erstmal durch 144 um die Anzahl deiner As zu erfahren. Der Ganzahlige Rest ist die Anzahl an Qs die du Ausgeben musst. Dann teilst du Deine As durch 4 und bekommst Deine Anzahl As, sie sind wieder der Ganzahlige rest der division. Das ganze kannst du dann auch noch fuer die Gs machen. Und dann fuegst du einfach die Werte die Du errechnet hast als strings zusammen und hast das ergebnis.

kA ob das eine sehr elegante loesungs ist, aber sie sollte funktionieren.

Gruss

Daniel
 
  • Like
Reaktionen: MrNase

macduke

Erdapfel
Registriert
04.11.08
Beiträge
2
Das sollte dir ne idee geben...

Code:
public class Flaeche {

	private static int A = 144;
	private static int M = 4*A;
	private static int G = 100*M;
	
	private static String arbToRom(int arb){
		int cA =0;
		int cM =0;
		int cG =0;
		int rest=0;
		
		cG = arb / G;
		rest = arb - cG*G;
		cM = rest / M;
		rest = rest - cM*M;
		cA = rest / A;
		rest = rest - cA*A;
		
		return "R: "+cG+"G "+cM+"M "+cA+"A "+rest+"Q ";
	}

	public static void main(String[] args) throws Exception {
		int zahl = 1495277;
		
		System.out.println("A: "+zahl);
		System.out.println(arbToRom(zahl));

	}
}
 
  • Like
Reaktionen: MrNase

MrNase

Champagner Reinette
Registriert
11.01.05
Beiträge
2.656
Hey ihr 2,

Ich hatte es mir noch einmal in Ruhe angeschaut und den eigentlichen Fehler gefunden. Es lag tatsächlich an meine Herangehensweise die mich total blockiert hat weil ich so einfach nicht weitergekommen wäre.

Danke für das Codebeispiel, ich muss zwar ein paar Sachen ändern aber es funktioniert perfekt. :)