Einzelnen Beitrag anzeigen

Michael II
Online

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
736 Beiträge
 
Delphi 11 Alexandria
 
#44

AW: Erstellung einer Funktion

  Alt 6. Jun 2021, 14:10
Die Frage ist also: Was ist jetzt bitteschön die Aufgabenstellung und welche Syntaxelemente wurden bisher im Lehrstoff vermittelt und welche Syntaxelemente dürfen für die Lösung der Aufgabe verwendet werden?
Es geht hier doch nicht um echte Aufgaben; mo will lediglich eine kleine Untermenge von DP Menschen unterhalten .

Zitat:
Und ja: Unter Performanzgesichtspunkten mag das eventuell (messbar?) langsamer sein. Und mit PChar und Zeigern geht es eventuell auch eleganter, ...
Ich hatte auch an Pointer gedacht, vermutete aber, dass diese wohl noch nicht Teil von mos Delphi-Welt sein dürfen und habe keine verwendet. Punkto Performance gewinnst du hier kaum was oder gar nix.

Zur Performance: Deine Lösung hängt v.a. wegen NumberStr := NumberStr + s[run]; erheblich vom Eingabewert ab und ist v.a. wegen dieser Zeile etwas komplexer: Wenn in den 1000 x "1Mio-Strings Aufrufen" die Eingabe gar keine Ziffern enthält liegt meine bei 990ms und deine bei 4400ms. Bei 60% Ziffern 4,3sec, deine 31sec. Wenn nur Ziffern vorkommen, dann liegt meine bei 1.6sec und deine bei (erwartet hohen) 40sec.

NumberStr := NumberStr + s[run]; ist unnötig und langsam. mo soll sich nur Start und Länge des jeweiligen Maximums merken. Das reicht um am Ende der Suche die längste Ziffernfolge zu "berechnen" (entweder mit Copy oder wenn Copy nicht erlaubt ist mit for i:= start to ...) und auszugeben.

Nebenbei: Wegen run: Byte kann deine Routine nur kurze Strings verarbeiten.

Hinweis: Die längste Ziffernfolge muß nicht unbedingt die größte Zahl in s sein! Eine so gefundene Ziffernfolge darf auch mit einer oder mehreren '0' beginnen.''
mo, du wolltest die Strings in Zahlen umwandeln. Das geht mit Standard-Integer Typen nur gut, wenn der numerische Wert der gefundenen Folge nicht allzu gross ist: WORD zum Beispiel ist 16 Bit breit und kann nur Werte 0..65535 aufnehmen. Für die Umwandlung: Suche im Help von Delphi nach strtoint(), strtointdef() oder schreib dir als Übung eine Funktion, welche dies tut.

Ich bin hier raus. Viel Spass bei den weiteren Hausaufgaben. Ich freue mich bereits aufs nächste Wochenende.
Michael Gasser

Geändert von Michael II ( 6. Jun 2021 um 14:20 Uhr)
  Mit Zitat antworten Zitat