Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.419 Beiträge
 
Delphi 7 Professional
 
#42

AW: Erstellung einer Funktion

  Alt 6. Jun 2021, 13:10
Ja, aber die hier genannten führenden Nullen gehen dabei verloren:
Zitat:
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.
Man könnte aus dem String die führenden Nullen entfernen, man könnte den String in eine Zahl umwandeln.

Nur: Soll die längste Ziffernfolge zurückgegeben werden oder ihr nummericher Wert?

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?

Soll das Problem mit while, for, repeat, if und / oder case gelöst werden, dürfen Arrays genutzt werden, ist die Nutzung von Zeigern erlaubt? Dürfen alle delphiseitig möglichen Datentypen genutzt werden oder nur die bisher im Lehrstoff vermittelten? Sind Typkonvertierungen (beliebiger Form) Teil des Unterrichtsstoffes, ...?

Sprich: Darf alles genutzt werden, was mit Delphi möglich ist oder gibt es irgendwelche klar definierten Vorgaben?
Delphi-Quellcode:
// function longestNumber(s : string) : byte;
// Rückgabetype der Funktion ändern, da ja eine Zeichenfolge zurückgegeben werden soll.
function longestNumber(s : string) : String;
var
  run, number, longNum : byte;
  NumberStr, longNumStr : String; // zwei zusätzliche Variabeln.
  begin
    // Zu Beginn alle Variabeln initialisieren, um definierte Ausgangswerte zu haben.
    longNum := 0;
    longNumStr := '';
    number := 0;
    NumberStr := '';
    for run := 1 to length(s) do
    begin
      case s[run] of
       '0'..'9' : begin
                    inc(number);
                    NumberStr := NumberStr + s[run]; // Zusätzlich die Ziffer an den String anfügen.
                  end;
      else
        begin
          if number > longNum then
          begin
            longNum := number;
            LongNumStr := NumberStr; // zusätzlich den bisher längsten String speichern.
          end;
          number := 0;
          NumberStr := ''; // zusätzlich den String leeren.
        end;
      end;
    end;
    if number > longNum then
    begin
      longNum := number;
      LongNumStr := NumberStr; // zusätzlich den bisher längsten String speichern.
    end;
    // longestNumber := longNum;
    // Da eine Zeichenfolge zurückgegeben werden soll und der Typ der Funktion
    // entsprechend geändert wurde, geben wir hier die Zeichenfolge zurück.
    longestNumber := longNumStr;
  end;
Und ja: Unter Performanzgesichtspunkten mag das eventuell (messbar?) langsamer sein. Und mit PChar und Zeigern geht es eventuell auch eleganter, ...

Frage ist nur: Was bitte wurde bisher im Unterricht vermittelt und kann von daher für die Lösungssuche zur Anwendung kommen?
  Mit Zitat antworten Zitat