Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Aufgabenblatt4
Lasst euch von den sehr restiktiven Testcases nicht verwirren.
Sieht so aus als würde da auf wesentlich mehr getestet als in der Aufgabe konkret gefordert ist.
Die testen bei der 4.3 höchstwahrscheinlich auch mit sehr grossen Werten, so
dass rekursive Varianten und solche die erst das Produkt bilden und dann die
Wurzel ziehen aufgrund des StackOverflow oder int/long Überlaufs schlecht
bewertet werden. Ausserdem wollen sie den Rundungsfehler vom ständigen
Wurzelziehen wohl haben.
Bei der 4.4 wollen sie ausserdem ein bestimmtes Verhalten bei
Nullpointer-Geschichten. Einfach mal mit gesundem Menschenverstand
rangehen. Wie sie sich das mit cloning gedacht haben weiß ich nicht,
scheint wohl auch ohne zu gehen.
Wurzeln
Ich frage mich grad nur, wie die Reihe innen drin weiter geht.
sqrt(a) * sqrt(a+1) * sqrt(a+2) *XX* sqrt(b-1) * sqrt(b-1)*sqrt(b)
Wann muss ich denn von a+x auf b-x umschwenken?
Wenn a+x = b -x?
Ich hab das so verstanden:
π√x mit x ε [a,b], also z.B.: a=3, b=6 => √3√4√5*√6
Man könnte auch sagen, dass b nur die Obergrenze ist und a immer um eins inkrementiert wird, bis man bei a=b angekommen ist.
Ist auf dem Blatt aber wirklich umständlich bis unverständlich formuliert…
Ja, so würde es Sinn machen.
toll, jetz hab ich grad ne schöne möglichkeit gefunden wie man die parameter eleganter als über
main(String[] args)
übergeben kann und jetz darf ich die nich benutzen (bzw 0 %), also intervallgrenzen nicht über
main(String[] args) throws IOException
einlesen. Hoffe wir lernen das schnell, damit wirs verwenden dürfen…
peace
Fakultät
hallo erstmal…
ich möchte dieses Wurzelproblem gerne mit Fakultäten lösen.
hab aber 1. keine ahnung wie man Fakultäten berechnet;2. keine ahnung ob ich das überhaupt darf, 3. keine ahnung obs überhaupt geht
Fakultäten muss du bzw. kannst du rekursiv lösen, oder auch über eine schleife, am besten eine for.
for(int i=1; i<=n;i++){
int fakultaet=1;
fakultaet=fakultaet*i;
}
so würde die fakulät gehen aber wie du dass in deine lösung einbringst musste selber wissen, ich habe nähmlich noch nichts dafür gemacht
oder rekursiv
int fakultaet(int n){
if (n == 1) return 1;
return n*fakultaet(n-1);
}
Das “Größte” was ich mit der Funktion hinbekomme ist:
1 - 300,
ab da läuft mir der double über.
Kann das jemand bestätigen?
Hab bis jetzt noch nicht probiert, wieviel Prozent im Testcase, werde ich aber noch machen.
Gruß
Update:
Meine Genauigkeit scheint zu reichen. 100% im Testcase
ist bei mir genauso
Hat sich schon jemand an die meinString gewagt?
Ich hab es grad mal so weit fertig gemacht, allerdings bekomme ich nur 35% im Testcase, sprich irgendwo ist noch der Wurm drinnen.
auf Public / Private habe ich geachtet.
“String” verwende ich auch nirgendswo.
Static müssen die Fkt’s meiner meinung nach nicht sein.
Fällt jemanden sonst noch was ein?
Gruß
hm. ich hab die sache auch rekursiv aufgezogen - meiner ansicht funktioniert das programm auch astrein - ich habs sogar für kleine intervalle getestet (solange ich spass hatte das in taschenrechner einzugeben).
aber irgendwie gibt mir der rotzige testcase nur magere 20% ? :vogel:
mach ich was falsch? also ich habe die angabe wie TheFlow interpretiert…
Fakultät
Danke,klappt alles wunderbar…
Jup, hab mir schon 100% geholt
Die Funktionen müssen auch nicht static sein. Sonstige Fehlerquellen: Stimmen Typ/Zahl/Reihenfolge der Parameter? Stimmen die Typen der Rückgabewerte? Mehr fällt mir jetzt auch nicht ein, ohne deinen Code gesehen zu haben…
Meinst du mit rekursiv das, was ValentinesDayMassacre beschrieben hat? D.h. du ziehst nur einmal die Wurzel? Vielleicht liegts dann an irgendwelchen Rundungsfehlern, die der Testcase berücksichtigt, aber die deine Lösung nicht (in dem Maße) fabriziert, als wenn man es mit einer while-Schleife macht und die einzelnen Wurzeln multipliziert (so wie ich das gemacht hab).
Gruß
Flo
Ne. Nit ganz. Ich rufe halt einfach meine Funktion rekursiv auf, bis die Intervalluntergrenze erreicht ist und ziehe bei jedem Aufruf entsprechend die Wurzel. Das klappt meiner Ansich nach auch prima. Hier mal ein Zahlenbeispiel: f(2,6) = 26.832815729997478 laut meiner Implementierung.
Kann mir jemand diesen Wert bestätigen (vielleicht rechne ich ja auch nur mist bzw. mein Proggie :motz:)
Vielen Dank für Euer Feedback!
Also das Ergebnis stimmt. Bei meinem Prog kommt genau das gleiche raus…
Vielleicht liegts irgendwie an der Rekursion. Also wenn du schreibst
System.out.print(f(2,6));
dann wird 26.83… ausgegeben? Dann kann es es eigentlich nur noch irgend ein formaler Fehler sein, aber ohne deinen Code gesehen zu haben, kann ich da jetzt auch nicht mehr dazu sagen…
Also erhalte mit dienen Werten: 26.832815729997478
Bei der meinString() - Aufgabe komm ich nicht über 40% hinaus, aber hab die fehlersuche jetzt mal entnervt verschoben. falls jemand lust und ne idee hat, kann er ja mal drüber schaun.
Attachment:
meinString.java: https://fsi.cs.fau.de/unb-attachments/post_28640/meinString.java
jau. hier nochmal zum mitschreiben. meine ausgabe bei f(2,6) ist 26.832815729997478. das sieht Eurem ergebnissen ziemlich ähnlich. tjoa, scheint wohl echt an der rekursion zu liegen. mir egal. falsch isses auf jeden fall ned. dann bleibts halt bei 20% :-/
naja und formal kann nit wirklich viel falsch sein, da die funktion nur drei mickrige zeilen code hat … wie dem auch sei …
@thomas_: Mach mal deine Konstruktoren noch public, sonst hab ich jetzt auch nix flasches gesehen.
Nur noch ein Tipp: private gilt nur für Klassen und nicht für Objekte der selben Klasse. Man kann also von einer Instanz auf die Membervariablen einer anderen Instanz zugreifen, solange diese von der gleichen Klasse ist. Beim Konstruktor in meinString funktioniert also auch folgendes: this.zeichenkette = kopierString.zeichenkette
Edit: Ach ja weil ich’s grad seh: Alles Gute zum 21sten.
@simple: Dann versteh ich auch nicht was der Testcase für ein Problem hat…
Das ist irgendwie das Problem an den Testcases, wenn man 100% kriegt ist alles gut, aber wenn man nicht 100% kriegt, obwohl das Prog genau das tut was es soll, dann hilft einem irgendeine Prozentzahl auch nicht weiter…
Danke. jetzt funktionierts. Manchmal ists besser wenn jemand unbedarft nen blick drauf wirft, weil man vor lauter bäumen den wald nicht mehr sieht.
hoffe ich kann dir an anderer stelle weiterhelfen.
war ein schönesn geburtstagsgeschenk