2012-04-04 14 views
0

Ich versuche, einen Rechner, der die quadratische Formel durchführt.Android - Vereinfachung von Radikalen

Derzeit, wenn mein Ergebnis eine Dezimalzahl wäre, wird NaN zurückgegeben. (BEARBEITEN: Gelöst)

Vorzugsweise möchte ich, dass das Ergebnis in einer vereinfachten Radikalform vorliegt (d. H. √ (99) = 3√ (11)).

Wie würde ich das erreichen?

Das ist was ich bisher habe.

// Do the math 
private double mathCalcPlus(double varA,double varB,double varC) { 
    return ((-varB + Math.sqrt(varB * varB - 4 * varA * varC))/2 * varA); 

} 

private double mathCalcMinus(double varA,double varB,double varC) { 
    return ((-varB - Math.sqrt(varB * varB - 4 * varA * varC))/2 * varA); 

} 

Jede Hilfe wird sehr geschätzt.

+0

√ (99) = 3√ (11) ist zuviel des Guten, weil Faktorisierung langsam und benötigen Sie einen zusätzlichen Code schreiben ohne Nutzen. – UmNyobe

+0

Ich bevorzuge diesen Weg, da technisch die Dezimal-Antwort ungefähr wäre. Bei einer anderen Anmerkung, mein Code wird keine Dezimalzahl erzeugt wird einfach NaN für Ergebnisse, die keine ganzen Zahlen sind. Also ich denke, es wäre hilfreich für mich zumindest diesen Fehler auch in meinem Code zu beheben. – EliteTech

+0

Ändern Sie dann Ihren Datentyp. –

Antwort

0

Hier könnte etwas helfen, was die Vereinfachung der Radikale angeht. Geben Sie ihm das nicht vereinfachte Radikal (sagen wir 850) und es sollte die richtige Antwort (5-/34) zurückgeben. Es versucht auch, rekursiv zu vereinfachen, was im Radikal übrig ist, falls es erneut zerlegt werden muss.

Das wurde schnell geschrieben, also bin ich sicher, dass es Randfälle gibt, die ich verpasst habe, die die Berechnungen abwerfen werden, aber ich hoffe, dass es zumindest ein wenig hilft. Viel Glück!

import java.util.Scanner; 

public class Radical { 

public static void main(String[] args) { 

    System.out.print("Enter the unsimplified radical: "); 
    Scanner scan = new Scanner(System.in); 
    int input = scan.nextInt(); 

    recurse(input); 

} 

public static void recurse(int x) { 

    System.out.println("Attempting to simplify -/" + x); 

    int a = 0; 
    int b = 0; 
    int count = 0; 

    for (int i = 1; i < x; i++) { 
     if ((i * (x/i)) == x) { 
      //System.out.println(i + "<i rest>" + (x/i)); 
      a = i; 
      b = x/i; 
      if (Math.sqrt(a)%1==0) { 
       if (a != 1) { 
       System.out.println((int)Math.sqrt(a) + "-/" + b); 
       count = 1; 
       } 
      } 
     } 
    } 

    if (count>0) { 
     recurse(b); 
    } else if (count==0) { 
     System.out.println("Cannot simplify -/" + x); 
    } 

} 

} 
+0

Vielen Dank Chris. Das funktionierte, mit ein wenig Bearbeitung natürlich, um mit dem ADK zu arbeiten. Wird die Rekurse benötigt? Wenn ja, wie würde ich das in der ADK einteilen? Ich habe die Rekursleine entfernt und es scheint recht gut zu funktionieren, aber natürlich muss ich weitere Tests durchführen, um sicherzustellen, dass es mit allen Zahlen funktioniert. – EliteTech

+0

Das recurse ist nicht notwendig, es wurde als ausfallsicher implementiert, da ich seltsame Zahlen bekam (was früher sehr oft der Fall war). Für die Implementierung im ADK kann ich dort nicht viel Hilfe leisten. Ich bin ein anständiger Java-Programmierer, der langsam zu Android Dev wechselt, so dass ich noch viel zu lernen habe. Viel Glück aber! – Chris

+0

Ja, ich habe nicht viel auf Rekursion für den Android gefunden, aber ich habe noch keine Zahlen gefunden, die nicht ohne es funktioniert. – EliteTech

1

Das funktioniert gut! Allerdings habe ich beschlossen, in der oberen Leiste des Wurzelzeichen hinzufügen nur zum Spaß: D

import java.util.Scanner; 

public class Radical { 

public static void main(String[] args) { 

    System.out.print("Enter the unsimplified radical: "); 
    Scanner scan = new Scanner(System.in); 
    int input = scan.nextInt(); 

    recurse(input); 

} 

public static void recurse(int x) { 

    System.out.println("       ______"); 
    System.out.println("Attempting to simplify -/" + x); 

    int a = 0; 
    int b = 0; 
    int count = 0; 

    for (int i = 1; i < x; i++) { 
     if ((i * (x/i)) == x) { 
      //System.out.println(i + "<i rest>" + (x/i)); 
      a = i; 
      b = x/i; 
      if (Math.sqrt(a)%1==0) { 
       if (a != 1) { 
       System.out.println("      ______"); 
       System.out.println("     " + (int)Math.sqrt(a) + "-/" + b); 
       count = 1; 
       } 
      } 
     } 
    } 

    if (count>0) { 
     recurse(b); 
    } else if (count==0) { 
     System.out.println("     ______"); 
     System.out.println("Cannot simplify -/" + x); 
    } 

} 

} 
Verwandte Themen