1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Java: mit römischen Flächen rechnen

Dieses Thema im Forum "OS X-Developer" wurde erstellt von MrNase, 04.11.08.

  1. MrNase

    MrNase Champagner Reinette

    Dabei seit:
    11.01.05
    Beiträge:
    2.643
    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

    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?
     
  2. BigDan

    BigDan Granny Smith

    Dabei seit:
    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
     
    MrNase gefällt das.
  3. macduke

    macduke Erdapfel

    Dabei seit:
    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));
    
    	}
    }
     
    MrNase gefällt das.
  4. MrNase

    MrNase Champagner Reinette

    Dabei seit:
    11.01.05
    Beiträge:
    2.643
    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. :)
     

Diese Seite empfehlen