:shock: teilweises wurzelziehen realisieren

Status
Nicht offen für weitere Antworten.

PAT_McJAVA

Mitglied
hi Leute,

hätte gern ein wehnig hilfe von euch zum Thema Wurzelziehen:

Ich möchte ein Programm schreiben das aus einem belibigen ganzzahligem Wert im Integerbereich eine Wurze teilweise zieht, das ganze aber ohne eine wurzelfunktion zu ziehen und alle Werte im Programm sollen Integer sein.
Ich möchte einer Variablen
Code:
int eing = in.readInt();
(das ist zur abfrage eines Wertes)
eingeben und das Prog soll dan einen Term ausgeben der wie folgt aussieht:
Wurzel(eing)= n * Wurzel(p)
Wie sschon gesagt sollen alle Werte (also auch n und p) Integer sein und ganzzahlig, eine zweite Prämise ist das keine Wurzelfunktion verwendet wird und als letzte Regel soll noch gelten das n möglichst groß sein soll.
hier ein paar beispiele:
Wurzel(200) = 10 * Wurzel(2)
Wurzel(100) = 10
Wurzel(201) = Wurzel(201)
Wurzel(80) = 4 * Wurzel(5) (2 * Wurzel(20) wäre hier bei dei falsch Lösung da die 3. Bedingung nicht erfüllt wurde)
Ich habe schon Stunden erfolgloß versucht etwas aus 2 Schleifen verschachtelten zu konstruieren das diesem nahe kommt aber ich bin mittlerweile so verwirrt, dass ich nichteinmal mehr einen Ansatzpunkt hinbekomme.

Ich würde mich über einen gut kommentierten Code wirklich sehr sehr freuen
 
S

SlaterB

Gast
der letzte Satz ist ja ein guter Scherz

-----

ansonsten ein mathematischer Tipp:
versuche alle Primteiler zu finden, stelle dir also eine Liste von alle Primzahlen zusammen (bis zu einer Obergrenze)
und prüfe auf Teilbarkeit,

damit zerlegt sich 200 zu
2*2*2*5*5

hier sind die 2er und 5er doppelt, also kannst du diese doppelten streichen,
die Hälfte davon sind eine 2 und eine 5, zusammen 10,
eine 2 blieb bei den Teilern ürig-> 10 * wurzel(2) ;)

80 = 2 * 2 * 2 * 2 * 5 -> 4 * wurzel(5)

201 = 3 * 67 -> nix rauszuholen -> wurzel(3 *67) = wurzel(201)


-----------


etwas einfacher, wohl noch besser:

erstelle dir eine Liste aller Quadratzahlen und finde die höchste, die ein Teiler der Ausgangszahl ist

1, 4, 9, .. , 81, 100, 121, ...

200 kann durch 100 geteilt werden, durch keine andere höhere Quadratzahl < 200
-> also 100 wählen und Rest 2 bestimmen
 

PAT_McJAVA

Mitglied
:( hab jetzt schon ganz viel versucht aber das einzige was Funktioniert ist dieses Codefragment

Code:
class Wurzel{

  public static void main (String[]arg){
    int eing,n,count,wurz;

    Out.print("Die Wurzel aus welcher Zahl soll teilweise gezogen werden: ");
    eing=In.readInt();
    wurz=1;
    n=eing/2;
    count=eing/n;
      
    while(!(count==n)){
        n=(n+count)/2;
        count=eing/n;
    }
    Out.println("Wurzel(" + eing + ") = " + n + " * Wurzel(" + wurz + ")");
    }
  }

Weiß einfach nicht wie ich es hinbekomme das die Restwurzelfunktion richtig funzt...
...vor allem weil ich ja auch die kleinst möglich Zahl unter der Wurzel haben möchte.
Mein Problem ist das ich jetzt zwar aus einer Wurzel mit natürlichem Ergebniss eine Lösung bekomme, aber die Restwurtzel bekomm ich mit dem Modulo einfach nicht rein gepuselt. ???:L
Könnt mir bitte nochmal jemand helfen???
 
S

SlaterB

Gast
was soll denn dein Code denn bedeuten, ich kann da keine Strategie drin erkennen?
ich selber habe dir zwei Strategien vorgeschlagen, was ist mit denen?

bei dem Avatar-Bild werde ich vielleicht auch gar nicht mehr antworten..
 

PAT_McJAVA

Mitglied
Habs ja mit deinen Vorschlägen versucht, aber die Realisierung hat sich etwas schwierig gestaltet...
...hab mir von nem Kumpel n bisl helfen lassen :meld: , der Volständigkeit halber stell ich den funktionierenden Code mal online. Wie schon geschrieben verwendet der Code für die Ausgabe eine Out.class und für die eingabe eine IN.class.

Code:
class Wurzel{

  public static void main(String[] args){
    int eing,root ,a;

    Out.print("Die Wurzel aus welcher Zahl soll teilweise gezogen werden: ");

    eing=In.readInt();
    root=eing/2;
    a=eing/root;

    while(root<a-1||root>a+1)
    {
      root=(root+a)/2;
      a=eing/root;
    }
    if(a*root==eing){ Out.print("sqrt(" + eing + ") = " + root);
      }else{
        while(eing%(root*root)>0){
          root--;
        }
    Out.println("sqrt(" + eing + ") = " + (root>1? root+"*":"") + "sqrt(" + eing/(root*root)+")");
    }
  }
}
 
S

SlaterB

Gast
tja, wenn ich derjenige bin, der Fragen beantwortet und nicht stellt,
dann springt auch mancher Bayer über seinen Schatten ;)

aber das Avatar-Bild wurde auch inzwischen geändert/ entfernt,
das aktuelle meinte ich nicht
(kann sich natürlich auch nach diesem Posting wieder ändern in so einem dynamischen Forum..)
 
S

SlaterB

Gast
das kannst du PAT_McJAVA fragen wenn du willst ;)
zur Vorbereitung auf weiteres Offtopic: Antwort von mir nur noch als PM, nicht mehr hier im Topic
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben