![]() |
AW: Erstellung einer Funktion
Kanns grad nicht testen, aber in deiner repeat - Schleife löschst Du ein Zeichen deines Strings wenn es sich um eine Ziffer handelt und verkürzt anschließend deinen Zähler (run) trotzdem noch um 1. Somit überspringst du für den Fall, dass du bereits vorher eine Ziffer gelöscht hast, ein Zeichen in deinem string.
Delphi-Quellcode:
Ich würde das ganze mit einer for..do - Schleife lösen
while endNotFound do
begin repeat case s[run] of '0' .. '9': delete(s,run,1); end; dec(run); until run = 0 ; endNotFound := TRUE; end;
Delphi-Quellcode:
Wie gesagt, ungetestet.
for i = length(s) downto 0 do
begin //prüfe hier, ob das betreffende Zeichen eine Ziffer ist, wenn ja. lösche es //damit prüfst du tatsächlich alle Zeichen deines Strings und überspringst durch das löschen keines end Edit: Mist, zu langsam getippt :wink: |
AW: Erstellung einer Funktion
Delphi-Quellcode:
Fällt dir denn da nichts auf, warum es nicht funktioniert?
while endNotFound do
begin repeat case s[run] of '0' .. '9': delete(s,run,1); end; dec(run); until run = 0 ; endNotFound := TRUE; end; |
AW: Erstellung einer Funktion
Ich hatte vergessen zu erwähnen das das Problem eine Fehlermeldung in der Ausgabe unten ist bei
Delphi-Quellcode:
Die Fehlermeldung wird genau bei 'deleteDigits(s) angezeigt und lautet: E2054 Ungültiger Typ in write/writeln Anweisung.
''procedure printInfos(s: string);
begin writeln('String: ', s, ' Ziffern: ', countDigits(s), ' Gerade: ', countEvenDigits(s), ' Ungerade: ', countOddDigits(s), ' Andere: ', countNonDigits(s), ' Längste: ',longestnumber(s),' Ohne: ',deleteDigits(s)); end; |
AW: Erstellung einer Funktion
Zitat:
von countDigits(s) bis longestnumber(s) hast du FUNKTIONEN, die etwas zurückgeben. Diese Rückgabe kann Writeln darstellen. Dein deleteDigits(s) ist aber nur eine PROZEDUR, die nichts zurückgibt, also kein Result hat. Demzufolge kann Writeln nichts damit anfangen. |
AW: Erstellung einer Funktion
Debuggen ist nicht erlaubt?
|
AW: Erstellung einer Funktion
Ok hab das mit der Fehlermeldung gelöst, ich würde jetzt gerne dafür sorgen das diese Funktion nicht mehr die Anzahl der längsten Ziffernfolge ausgibt sondern die längste Ziffernfolge selbst, anscheinend ist es schwerer als gedacht oder übersehe ich einfach etwas
Delphi-Quellcode:
function longestNumber(s: string): byte;
var run, number, longNum: byte; begin longNum := 0; number := 0; for run := 1 to length(s) do begin case s[run] of '0' .. '9': inc(number) else begin if number > longNum then longNum := number; number := 0; end; end; end; if number > longNum then begin longNum := number; longestNumber := longNum; end; end; |
AW: Erstellung einer Funktion
Naja, momentan speicherst Du halt die Länge der längsten Nummer und gibst dann eine Zahl (Byte) zurück.
An der Stelle, an der Du Dir die längste Nummer merkst, musst Du Dir dann wohl "einfach" nur diese Nummer merken und diese dann zurückgeben. Da es sich bei den Nummern um Zeichenfolgen handelt, wird der Rückgabewert wohl besser ein String sein, damit auch (wie oben gefordert) führende Nullen erhalten bleiben. Die grundsätzliche Logik ist aber identisch. Achso: Bei Deiner derzeitigen Variante wird das Ergebnis nicht immer richtig sein. Es dürfte nur dann stimmen, wenn zufällig die letzte Ziffernfolge länger als die zuvor gemerkten Länge ist und die Zeichenfolge auf jeden Fall mit einer Ziffer endet. Mein grober Test ergab:
Code:
Von 10 Testfällen sind weniger als 50% richtig. Da ist noch Luft nach oben ;-)
a -> 00000
a1a -> 00000 a22aa333aa -> 00000 a22a333a22aa -> 00000 123 -> 00003 a11111a -> 00000 a1 -> 00001 a1aa22aaa333 -> 00003 aaaa4444aaaaa55555aaaaaa -> 00000 1234567890aaaaaaaaaa -> 00000 |
AW: Erstellung einer Funktion
@Delphi.Narium es soll die längste Ziffernfolge (Zahlenfolge) ausgegeben werden, irrelevant ist dabei die Größe der einzelnen Zahlen.
|
AW: Erstellung einer Funktion
Zitat:
Und wie lang ist bei
Delphi-Quellcode:
die längste Ziffernfolge?
1234567890aaaaaaaaaa -> 00000
Deine Routine sagt: Die Länge der längsten Ziffernfolge ist 0. Das ist wohl kaum richtig. Bei Deiner Routine wäre auch bei
Delphi-Quellcode:
die Länge der längsten Ziffernfolge = 0, ebenso bei
0000000000aaaaaaaaaa
Delphi-Quellcode:
und selbst bei
9999999999aaaaaaaaaa
Delphi-Quellcode:
wäre die Länge = 0.
0 (hier bitte eine unendliche Anzahl von Nullen einfügen) 0a
Oder anders: Das Ergebnis Deiner Rouitne entspricht nicht der von Dir genannten Vorgabe: Zitat:
Der Fehler war übrigens in Deinem Post ![]() |
AW: Erstellung einer Funktion
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz