Zum Inhalt springen

EveresT

Mitglieder
  • Gesamte Inhalte

    5
  • Benutzer seit

  • Letzter Besuch

  1. EveresT

    Rekursion

    Ja logisch, habe stelle ja gleich 0 gesetzt beim zweiten Funktionsaufruf, danke! Also muss ich entweder in die if-Bedingung zu Beginn eine andere Bedingung setzen bzw. irgendwie wieder den ursprünglichen Stellen wert erhalten, richtig? *grübel*
  2. EveresT

    Rekursion

    Danke, das hat schon weitergeholfen! Habe jetzt folgenden Code entwickelt, der zwar noch nicht richtig ist, habe ihn aber mit Comments versehen, vielleicht kannst du mir ja sagen, was ich da falsch sehe. Wichtig zu erwähnen ist noch, das hab ich bisher vergessen, die Stellen werden von rechts nach links ausgelsen wobei, die erste Zahl Stelle 0 ist,z.B. bei 3456 wäre Stelle 2 die 4. static int ersetzeZiffer(int zahl, int stelle, int ziffer){ if(stelle>0){ return ersetzeZiffer(zahl/potenz(10,stelle), stelle=0, ziffer) +(zahl%potenz(10,stelle)); /* *Ruft die Funktion erneut auf, wobei die Variable "zahl" soviele Ziffern *abgeschnitten kriegt, bis die zu ersetzende Ziffer die letzte Ziffer *ist. *Die Variable "stelle" wird 0, die Ziffer bleibt gleich. * Zurueckgegebn wird der entsprechende abgeschnittene Wert. */ } /* * Bei der zweiten Inkarnation ist stelle==0, also kommen wird zum unteren * Teil. */ zahl=zahl/10; // die zu ersetzende Ziffer wird abgeschnitten zahl=zahl*10+ziffer; // die einzusetzende Ziffer wird angehängt return +(zahl*potenz(10,stelle)); /* * Zu dem vorhin bereits gelieferten Wert, * werden die ersten Ziffern zurückgeliefert, * die so häufig *10 genommen werden, dass * die Groesse der eingegeben Zahl erhalten * wird. */
  3. EveresT

    Rekursion

    Ja das mit der Stellenposition habe ich ja auch in der Funktion "getZiffernWert(int zahl, int stelle);" realisiert. Das Problem ist jetzt aber, dass ich eine Stelle ersetzen muss. Dann muss ich ja die entsprechenden letzten Ziffern abtrennen, sie aber gleichzeitig speichern, um sie später wieder hinzuzufügen, wobei sie entsprechend mit 10^x mulitipliziert werden müssen. Oder denke ich zu kompliziert bzw. falsch?
  4. EveresT

    Rekursion

    @ flashpixx: In Ordnung werde ich das nächste mal berücksichtigen, wusste ich nicht. Muss aber auch zugeben, dass ich mir zuvor nicht die Mühe gemacht habe die entsprechenden Forenregeln durchzulesen. @ Torsten Hündlung: Sorry, habe mich wohl nich klar genug ausgedrückt. In der Aufgabenstellung war die Rede von der Funktion "int ersetzeZiffer(int zahl, int ziffer, int stelle);" Ich habe die Aufgabe aber nur lösen können, indem ich eine Hillfsvariable "int durchlauf", sowie eine weitere Funktion "int potenz(int zahl, int pot)" hinzugezogen habe. Diese Lösung mit der Hilfsvariable erscheint mir sehr ähnlich einer Schleifenlösung (vielleicht bilde ich mir das auch nur ein weil ich nich genug Ahnung habe), was ja nicht Sinn der Sache ist. Ich wollte wissen ob es eine Lösung gibt, ohne diese Hilfsvariable, d.h. nur mit der Funktion "int ersetzeZiffer(int zahl, int ziffer, int stelle);". Wenn dem so wäre, wüsste ich gerne wie, weil mir dann hoffentlich die Rekursion noch klarer wird. =) Und zu der Frage: So oft wie ich 1 zu 0 addieren muss um diese Zahl zu erhalten. =) Meinst du das so?
  5. EveresT

    Rekursion

    Hallo, ich versuche derzeit Java zu erlernen mit dem Programmierkus Java von Programmierkurs Java .Noch bin ich bei der imperativen Programmierung und habe da bereits Probleme mit der Rekursion, weshalb ich mehrere Übungsaufgaben durcharbeite. Die Aufgabenstellung bei der ich Probleme habe ist folgende: Es sollen mehrere Funktionen implementiert werden: int getAnzahlZiffern(int zahl); int getZiffernWert(int zahl, int stelle); Gibt den Ziffernwert an einer best. Stelle aus (Stelle zählt vonn rechts nach links bei 0 beginnend). int ersetzeZiffer(int zahl, int stelle, int ziffer); Eine Ziffer der Zahl "zahl" soll an Stelle "stelle" mit der Ziffer "ziffer" ersetzt werden. Diese Funktion macht mir Probleme, ich war bisher nur in der Lage sie mit einer zusätzlichen Variablen "durchlauf" zu lösen, was aber wohl nicht Sinn der Sache ist. Deswegen denke ich, dass ich noch etwas grundlegendes bei der Rekursion nicht verstanden habe und wäre froh, hier den entscheidenden Tipp zu erhalten. Quellcode: public class UEA8 { static int getBetrag(int zahl){ if(zahl>=0) return zahl; else{ return zahl*-1; } } static int getAnzahlZiffern(int zahl){ if(getBetrag(zahl)>0){ return getAnzahlZiffern(zahl/10)+1; } return 0; } static int getZiffernWert(int zahl, int stelle){ if(stelle>0){ return getZiffernWert(zahl/10, stelle-1); } return zahl%10; } static int ersetzeZiffer(int zahl, int stelle, int ziffer,int durchlauf){ if(stelle>0){ return ersetzeZiffer( zahl/10, stelle-1, ziffer, durchlauf+1)+(zahl%10)*potenz(10,durchlauf); } zahl=zahl/10; if(zahl>0){ zahl=zahl*10+ziffer; }else{ zahl=zahl*10-ziffer; } return zahl*potenz(10,durchlauf); } public static int potenz(int zahl, int pot){ if (pot==0) return 1; if (pot>0){ return potenz(zahl, pot-1)*zahl; } if (pot<0){ return 1/(potenz(zahl, -pot-1)*zahl); } return 0; } public static void main(String[]args){ int zahl=IO.readInt("Zahl:"); int stelle=IO.readInt("Die wievielte Ziffer soll ersetzt werden?:"); int ziffer=IO.readInt("Mit welcher Ziffer soll diese Ziffer ersetzt werden?"); System.out.println("Betrag: " +getBetrag(zahl)); System.out.println("Anzahl Ziffern: " +getAnzahlZiffern(zahl)); System.out.println("Diese Ziffer wird ersetzt: "+getZiffernWert(zahl, stelle)); System.out.println("Neue Zahl: " +ersetzeZiffer(zahl, stelle,ziffer, 0)); } }

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...