Versteht jemand diese Java Aufgabe (Logarithmus in Java umsetzen) Siehe Fotos?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Schau dir noch einmal die Brüche an, die dort gegeben sind. Fällt dir dabei eine Folge auf? Etwas was man für diesen Rechenweg abstrahieren könnte? Forme vielleicht auch die 1 nochmal in einen Bruch um. Eine Logarithmus-Funktion (Math.log) brauchst du gar nicht.

Dein Programm soll diese Folge dynamisch weiterlaufen, ohne dass du noch jeden einzelnen Bruch selbst eintippen musst. Dabei hast du einen stetigen Wechsel zwischen den Operatoren und natürlich muss dein Programm solange rechnen, bis die geforderte Bedingung (kleiner als ...) gegeben ist.

hmm ok aber das hab ich schon nachgedacht also unten erhöht es sich ja immer um 1 aber man kann es ja nicht dividieren verstehst du also zb wenn Ich eine while schleife mache die das ständig um 1 erhöht und dividiert kuck zb 1/2 wäre 0, 1/3 wäre 0, 1/4 wäre 0 kuck man kann das gar nicht programmieren weil java ja keine Komma zahlen als Ergebnis der Division ausgeben kann also ich wüsste nicht wie=???????????????

0
@Nichtsnutz12

Die letzten Sätze kann ich nicht nachvollziehen. Setze mal Satzzeichen, ich klatsche dir doch auch keinen Textblock so vor die Füße.

Division ist in Java möglich, auch mit Dezimalzahlen. Dies setzt allerdings voraus, dass du mit den richtigen Datentypen arbeitest:

float result = 1f / 3; // = 0.33333334

Wenn beide Zahlen in der Berechnung weder das float- noch das double-Literal erfüllen, wird eine Berechnung mit Ganzzahlen durchgeführt. Dann ergibt 1/3 tatsächlich 0.0.

1
@regex9

ok ich Versuchs morgen mit float muss jetzt Mathe lernen BB

0
@Nichtsnutz12

Erkläre mir einmal in Worten, was du da tust. Wofür steht k, wofür steht a, wieso zählst du nur bis 30?

0

Etwas grübeln würde Dir vermutlich helfen, Du hast eine Zahl, die immer um 1 erhöhrt wird: Schleife

Du mußt im Wechsel addieren und subtrahieren, hier gibt es gleich mehrere Möglichkeiten:

Prüfe ob die zählende Variable durch 2 teilbar ist und handle nach dem Ergebnis. nutze ein Flag, das wechselt um die Operationen zu wechseln, oder Du machst es ganz mathematisch:

Initialisiere einen Wert mit 1. Bei jedem Schleifendurchlauf multiplizierst Du mit -1, um den Wechsel zu erzeugen. Du multiplizierst dann Deinen Bruch mit dem Vorfaktor und erhälst im Wechsel negative und positive Summanden, die Du einfach aufsummierst.

hallo .... ehm... danke ich habs nochmal versucht aber es scheint wieder Unfug rauszukommen siehe Link (hab Foto hochgeladne):

https://ibb.co/nOcTAA

0
@Nichtsnutz12

Wenn k Dein Vorfaktor ist, dann solltest du natürlich k*(Zähler/Nenner) schreiben

Und den Wert addierst Du dann auf Dein Ergebnis (hierfür würdest Du eien andere Variable nuitzen, ich mache das mal in Pseudocode:

log=0
signum=1
for (k=1;k<=n;++k):
   log+=signum*(1/k)
   signum*=-1

Für k=1: 1*(1/1)=1 - für k=2: -1*(1/2)=-1/2 usw. usf.

log ist dann 0+1+-1/2+1/3-1/4

1
@Nichtsnutz12

summe += a* - Du hast das entscheidende Plus übersehen ...

x+=y ist das gleiche wie x=x+y - D.h. summe+= ist die eigentliche Addition, DU hast immer nur den Summanden in die summe übernommen ;-).

0