Autor Beitrag
DeltaEx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110



BeitragVerfasst: Di 29.10.02 17:10 
Wie verwirkliche ich das in Delphi??

Das ist Java:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
public static boolean isPalindrom(String str) 
  {
    int mid = str.length() / 2;  
    int last = str.length() - 1;

    for (int pos = 0; pos < mid; pos++)
      if (str.charAt(pos) != str.charAt(last - pos)) return false;

    return true;
  }


Code-Tag eingefügt. Marc

_________________
Delphi forever
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 29.10.02 17:27 
Hi!

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function isPalindrom (str : STRING);
VAR mid, last,pos : Integer;
begin
  mid:=Trunc(Length(str) /2);
  last:=Trunc(Length(str)-1);

  for pos:=0 TO mid-1 DO
  begin
    if str[pos] <> str[last-pos] then
    begin
      result:=false;
      exit;
    end;
  end;
  result:=true;
end;


So sollte es funktionieren. Delphi schneidet die Nachkommastellen von reellen Zahlen nicht automatisch ab, um sie zu ganzen Zahlen zu machen, daher der Befehl Trunc. Das Verlassen der Funktion nach Zuweisen eines Ergebnisses macht Delphi auch nicht automatisch, dafür das Exit.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
DeltaEx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110



BeitragVerfasst: Di 29.10.02 18:50 
Es geht leider nicht:-(
Das programm muss vollgendes machen:

Um zu überprüfen, ob ein Wort achsensymmetrisch zu seinem Mittelpunkt aufgebaut ist, vergleicht das Programm den ersten mit dem letzten Buchstaben des Wortes, den zweiten mit dem vorletzten Buchstaben, usw. Falls das Wort eine ungerade Länge hat, muß der mittlere Buchstabe entweder gar nicht oder mit sich selbst verglichen werden.

user defined image
Stimmen alle diese Buchstaben paarweise überein, handelt es sich bei dem Wort um ein Palindrom.

_________________
Delphi forever
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 29.10.02 19:07 
Möglicherweise rührt die Nicht-Funktion in dem Fall daher, dass Peter auf die Null reingefallen ist ... Das erste Zeichen in einem String ist aber an Position 1, im Zeichen Null findet man die Länge des Strings.
Demzufolge kann "last" auch als
ausblenden Quelltext
1:
last:= Length(str)					

zugewiesen werden.

Trotzdem springt die Funktion raus, weil sie bereits beim ersten Durchlauf den "Fehler" bemerkt. Um beim Beispiel von TOBABOT zu bleiben:

Im Zeichen #0 steht das Char 7 (Länge), und das ist ungleich O, weil
ausblenden Quelltext
1:
if str[pos] <> str[last-pos] then					

Wenn man "last" wie o.g. verändert, bleibt´s dabei, weil das Zeichen #7 auch ungleich T ist. :)
DeltaEx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110



BeitragVerfasst: Di 29.10.02 19:11 
und was heisst das im klar Text?

_________________
Delphi forever
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 29.10.02 20:35 
Ich dachte, das wäre klar?! Zum einen nimmst du die von mir schon gepostete Änderung an der Variablen "last" vor. Zum anderen addierst du Eins im linken Teil der if-Prüfung
ausblenden Quelltext
1:
if str[pos] <> str[last-pos] then					

damit du von der Ausgangsposition Null (Schleifenvariable) auf das tatsächlich erste Zeichen im String kommst.

Nach diesen beiden Änderungen besitzt die Funktion das von dir gewünschte Verhalten und erkennt sowohl TOBABOT, als auch OTTO, RENTNER, REITTIER und RELIEFPFEILER als gültig.

Irgendwas sagt mir, dass die Java-Funktion nicht von dir stammt. Ist nicht böse gemeint, aber wenn du sie geschrieben hättest, wüsstest du (bei deinem Wahlspruch "Delphi forever") auch die passende Umsetzung. :)
DeltaEx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110



BeitragVerfasst: Di 29.10.02 21:42 
So hier die Code die Funktioniert:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
function isPalindrom (str : String): Boolean;
VAR mid, last,pos : Integer;
begin
  mid:=Trunc(Length(str) /2);
  last:=Length(str);
 for pos:=1 TO mid DO
  begin
    if str[pos] <> str[last-pos+1] then
    begin
      result:=false;
      exit;
    end;
  end;
  result:=true;
end;


Danke für die Hilfe das Board ist das beste Delphiboard:-)

_________________
Delphi forever