Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - For-schleifen
DeltaEx - Di 29.10.02 17:10
Titel: For-schleifen
Wie verwirkliche ich das in Delphi??
Das ist Java:
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
Christian S. - Di 29.10.02 17:27
Hi!
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
DeltaEx - 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.
Stimmen alle diese Buchstaben paarweise überein, handelt es sich bei dem Wort um ein Palindrom.
Delete - 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
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
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 - Di 29.10.02 19:11
und was heisst das im klar Text?
Delete - 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
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 - Di 29.10.02 21:42
So hier die Code die Funktioniert:
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:-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!