Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Theoretische Informatik (http://www.informatikerboard.de/board/board.php?boardid=5)
--- Abbruchbedingung (http://www.informatikerboard.de/board/thread.php?threadid=2569)


Geschrieben von Ratte am 14.11.2015 um 23:17:

  Abbruchbedingung

Hat jemand vielleicht eine Idee für die return statement und die Abbruchbedingung bei folgender Aufgabe? Ich zerbreche mir schon seit einer ganzen Zeit den Kopf darüber... verwirrt



Geschrieben von eulerscheZahl am 15.11.2015 um 07:21:

 

Im Beispiel hast du ein Wort ungerader Länge. Du wirst irgendwann Position 3 mit Position 3 vergleichen (der Ausgang des Vergleichs ist klar). Danach vergleichst du nur noch Ziffer, die du schon verglichen hast.
Wie sieht es bei gerader Ziffernzahl aus?



Geschrieben von Ratte am 15.11.2015 um 07:56:

 

Hallo eulersche Zahl,

irgendwie kann ich dir nicht folgen unglücklich
In welchem beispiel? Ungerader länge? Hättest du bitte die güte mir das per quellcode näher zu bringen?



Geschrieben von eulerscheZahl am 15.11.2015 um 07:57:

 

Ich nehme Bezug auf das Beispiel, das du in deinem Bild angehängt hast.



Geschrieben von Ratte am 15.11.2015 um 08:21:

 

Bei geraden ziffernzahln weiß ich es nicht. Zumindest fällt mir spontan kein mathematischer ausdruck dafür ein um den vergleich zu beschreiben. verwirrt



Geschrieben von eulerscheZahl am 15.11.2015 um 08:37:

 

Ich habe mal ein wenig rumgespielt.
Edit: das eine Bild musst du anklicken, damit sich was bewegt.



Geschrieben von Ratte am 15.11.2015 um 09:41:

 

Danke für das attachment. Leider weiß ich trotzdessen nicht wie ich das in "quellcode" schreibe unglücklich



Geschrieben von eulerscheZahl am 15.11.2015 um 12:37:

 

Rekursiver Aufruf: erhöhe left, verringere right
Abbruch: left >= right



Geschrieben von Ratte am 15.11.2015 um 13:38:

 

Zitat:
Original von eulerscheZahl
Rekursiver Aufruf: erhöhe left, verringere right
Abbruch: left >= right


Vielen dank! smile

Also mit (zahl\10^position)%10

Kann ich von rechts nach links gehen. Aber wie bewege ich nun die position von links nach rechts?



Geschrieben von eulerscheZahl am 15.11.2015 um 13:42:

 

Mit (zahl\10^position)%10 bekommst du eine einzelne Ziffer.
Um die Ziffer rechts daneben zu bekommen, musst du position um eins verringern, nach links musst du position erhöhen.



Geschrieben von Ratte am 15.11.2015 um 14:07:

 

etwa so?

also für right = (zahl\10^(position+1))%10
udn für left = ( zahl\10^(position-1))%10



Geschrieben von eulerscheZahl am 15.11.2015 um 14:10:

 

Nach Aufgabenstellung hast du die Variable position gar nicht, dafür aber right und left. Diese kannst du in die Formel gleich für position einsetzen.



Geschrieben von Ratte am 15.11.2015 um 14:38:

 

ist das so richtig?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
public static boolean isPalindrom1(int number, int left, int right){

if (left >= right) {
return isPalindrom1(( zahl\(10^right))%10)
else
return isPalindrom1(( zahl\(10^left))%10)


	} 
 

}



Geschrieben von eulerscheZahl am 15.11.2015 um 14:46:

 

Nein.
^ macht in Java XOR.
Und du gibst nirgendwo true oder false zurück. Außerdem musst du in jedem Druchlauf 2 Ziffern miteinander vergleichen.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
public class Main {

	public static void main(String[] args) {
		System.out.println(isPalindrom(1234321, 0, 6));
		System.out.println(isPalindrom(12344321, 0, 7));
		System.out.println(isPalindrom(12345321, 0, 7));
	}

	static int getDigit(int number, int position) {
		int factor = 1;
		for (int i = 0; i < position; i++) {
			factor *= 10;
		}
		return (number / factor) % 10;
	}

	static boolean isPalindrom(int number, int left, int right) {
		if (left >= right)
			return true;
		if (getDigit(number, left) != getDigit(number, right))
			return false;
		return isPalindrom(number, left + 1, right - 1);
	}
}


Forensoftware: Burning Board, entwickelt von WoltLab GmbH